ZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaC5qYXZhCmluZGV4IGZhNDI3MzcuLjNmZjY1YWIgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2guamF2YQpAQCAtNCwxNyArNCw3NiBAQAogaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5PRlZhbHVlVHlwZTsKIAogcHVibGljIGludGVyZmFjZSBNYXRjaCBleHRlbmRzIE9GT2JqZWN0IHsKLSAgICBwdWJsaWMgPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZT4gRiBnZXQoTWF0Y2hGaWVsZDxGPiBtYXRjaCk7CisgICAgCisgICAgLyoKKyAgICAgKiBQcmVjb25kaXRpb25zCisgICAgICogT24gcHJlY29uZGl0aW9ucyAoZnJvbSB0aGUgT0YxLjEgc3BlYywgcGFnZSAyOCwgdGhlIE9GMS4wIHNwZWMgZmFpbGVkIHRvIGV4cGxpY2l0bHkgCisgICAgICogc3BlY2lmeSB0aGlzLCBidXQgaXQgaXMgdGhlIGJlaGF2aW9yIG9mIE9mMS4wIHN3aXRjaGVzKToKKyAgICAgKiBQcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgd2l0aGluIG9mcF9tYXRjaCB3aWxsIGJlIGlnbm9yZWQgd2l0aGluIGEgc2luZ2xlIHRhYmxlIHdoZW4gCisgICAgICogdGhlIGNvcnJlc3BvbmRpbmcgcHJvdG9jb2wgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbWF0Y2guIFRoZSBNUExTIG1hdGNoIGZpZWxkcyB3aWxsIAorICAgICAqIGJlIGlnbm9yZWQgdW5sZXNzIHRoZSBFdGhlcnR5cGUgaXMgc3BlY2lmaWVkIGFzIE1QTFMuIExpa2V3aXNlLCB0aGUgSVAgaGVhZGVyIGFuZCAKKyAgICAgKiB0cmFuc3BvcnQgaGVhZGVyIGZpZWxkcyB3aWxsIGJlIGlnbm9yZWQgdW5sZXNzIHRoZSBFdGhlcnR5cGUgaXMgc3BlY2lmaWVkIGFzIGVpdGhlciAKKyAgICAgKiBJUHY0IG9yIEFSUC4gVGhlIHRwX3NyYyBhbmQgdHBfZHN0IGZpZWxkcyB3aWxsIGJlIGlnbm9yZWQgdW5sZXNzIHRoZSBuZXR3b3JrIHByb3RvY29sIAorICAgICAqIHNwZWNpZmllZCBpcyBhcyBUQ1AsIFVEUCBvciBTQ1RQLiBGaWVsZHMgdGhhdCBhcmUgaWdub3JlZCBkb27VdCBuZWVkIHRvIGJlIHdpbGRjYXJkZWQgCisgICAgICogYW5kIHNob3VsZCBiZSBzZXQgdG8gMC4KKyAgICAgKi8KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkIGZyb20gdGhpcyBtYXRjaC4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQgdG8gcmV0cmlldmUKKyAgICAgKiBAcmV0dXJuIFZhbHVlIG9mIG1hdGNoIGZpZWxkCisgICAgICovCisgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IEYgZ2V0KE1hdGNoRmllbGQ8Rj4gZmllbGQpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbjsKIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG1hdGNoIG9iamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gbWF0Y2ggZmllbGQuCisgICAgICogCisgICAgICogQHBhcmFtIGZpZWxkIE1hdGNoIGZpZWxkCisgICAgICogQHJldHVybiAKKyAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0cyhNYXRjaEZpZWxkPD8+IGZpZWxkKTsKIAorICAgIC8qKgorICAgICAqIHRydWUgaWZmIGZpZWxkIHN1cHBvcnRzIGEgYml0bWFzayBtYXNrIHRoYXQgd2lsZGNhcmRzIHBhcnQgb2YgdGhlIGZpZWxkIAorICAgICAqIChub3RlOiBub3QgYWxsIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGlzIGJpdG1hc2sgaGF2ZSB0byBiZSBhY2NlcHRhYmxlKQorICAgICAqIAorICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZAorICAgICAqIEByZXR1cm4gCisgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNNYXNrZWQoTWF0Y2hGaWVsZDw/PiBmaWVsZCk7CiAKKyAgICAvKioKKyAgICAgKiBUcnVlIGlmZiB0aGlzIGZpZWxkIGlzIGN1cnJlbnRseSBmdWxseSBzcGVjaWZpZWQgaW4gdGhlIG1hdGNoLCBpLmUuLCB0aGUgCisgICAgICogbWF0Y2ggd2lsbCBvbmx5IHNlbGVjdCBwYWNrZXRzIHRoYXQgbWF0Y2ggdGhlIGV4YWN0IHZhbHVlIG9mIGdldEZpZWxkKGZpZWxkKS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQKKyAgICAgKiBAcmV0dXJuIAorICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzRXhhY3QoTWF0Y2hGaWVsZDw/PiBmaWVsZCk7CiAKKyAgICAvKioKKyAgICAgKiBUcnVlIGlmIHRoaXMgZmllbGQgaXMgY3VycmVudGx5IGxvZ2ljYWxseSB1bnNwZWNpZmllZCBpbiB0aGUgbWF0Y2gsIGkuZSwgdGhlIAorICAgICAqIHZhbHVlIHJldHVybmVkIGJ5IGdldFZhbHVlKGYpIGhhcyBubyBpbXBhY3Qgb24gd2hldGhlciBhIHBhY2tldCB3aWxsIGJlIHNlbGVjdGVkIAorICAgICAqIGJ5IHRoZSBtYXRjaCBvciBub3QuCisgICAgICogCisgICAgICogQHBhcmFtIGZpZWxkCisgICAgICogQHJldHVybgorICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzRnVsbHlXaWxkY2FyZGVkKE1hdGNoRmllbGQ8Pz4gZmllbGQpOwogCisgICAgLyoqCisgICAgICogVHJ1ZSBpZiB0aGlzIGZpZWxkIGlzIGN1cnJlbnRseSBwYXJ0aWFsbHkgc3BlY2lmaWVkIGluIHRoZSBtYXRjaCwgaS5lLCB0aGUgCisgICAgICogbWF0Y2ggd2lsbCBzZWxlY3QgcGFja2V0cyB0aGF0IG1hdGNoIChwLnZhbHVlICYgZ2V0TWFzayhmaWVsZCkpID09IGdldFZhbHVlKGZpZWxkKS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZmllbGQKKyAgICAgKiBAcmV0dXJuCisgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNQYXJ0aWFsbHlNYXNrZWQoTWF0Y2hGaWVsZDw/PiBmaWVsZCk7CiAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgYnVpbGRlciB0byBidWlsZCBuZXcgaW5zdGFuY2VzIG9mIHRoaXMgdHlwZSBvZiBtYXRjaCBvYmplY3QuCisgICAgICogQHJldHVybiBNYXRjaCBidWlsZGVyCisgICAgICovCiAgICAgcHVibGljIE1hdGNoQnVpbGRlciBnZXRCdWlsZGVyKCk7CiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEJ1aWxkZXIuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoQnVpbGRlci5qYXZhCmluZGV4IDNjNjAxZjguLmZjNGMwN2EgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoQnVpbGRlci5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoQnVpbGRlci5qYXZhCkBAIC0zLDggKzMsMTAgQEAKIGltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuT0ZWYWx1ZVR5cGU7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTWF0Y2hCdWlsZGVyIGV4dGVuZHMgTWF0Y2ggewotICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPiBNYXRjaEJ1aWxkZXIgc2V0KE1hdGNoRmllbGQ8Rj4gbWF0Y2gsIEYgdmFsdWUpOworICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBNYXRjaEJ1aWxkZXIgc2V0KE1hdGNoRmllbGQ8Rj4gZmllbGQsIEYgdmFsdWUpOwogCisgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IE1hdGNoQnVpbGRlciB1bnNldChNYXRjaEZpZWxkPEY+IGZpZWxkKTsKKyAgICAKICAgICAvL3B1YmxpYyA8TT4gdm9pZCBzZXRNYXNrZWQoTWF0Y2hGaWVsZDw/LCBNPiBtYXRjaCwgTSB2YWx1ZSk7CiAKICAgICBwdWJsaWMgTWF0Y2ggZ2V0TWF0Y2goKTsKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoQnVpbGRlclZlcjEwLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEJ1aWxkZXJWZXIxMC5qYXZhCmluZGV4IDBmYmU4NGIuLjFjOTEyMDEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoQnVpbGRlclZlcjEwLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hCdWlsZGVyVmVyMTAuamF2YQpAQCAtMjIsMzMgKzIyLDYgQEAKIAogICAgIC8vIHB1YmxpYyBzdGF0aWMgTWFwPE1hdGNoRmllbGQ8Pyw/PiwgQnVpbGRlclBhcmFtSGFuZGxlcjw/Pj4KICAgICAvLyBoYW5kbGVyTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICBzdGF0aWMgQnVpbGRlclBhcmFtSGFuZGxlcjw/PltdIGhhbmRsZXJzID0gbmV3IEJ1aWxkZXJQYXJhbUhhbmRsZXI8Pz5bMl07Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBoYW5kbGVyc1tNYXRjaEZpZWxkLklOX1BPUlQuaWRdID0gbmV3IEJ1aWxkZXJQYXJhbUhhbmRsZXI8T0ZQb3J0PigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgc2V0KGZpbmFsIE1hdGNoQnVpbGRlclZlcjEwIGJ1aWxkZXIsIGZpbmFsIE9GUG9ydCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuaW5wdXRQb3J0ID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIE9GUG9ydCBnZXQoZmluYWwgTWF0Y2hCdWlsZGVyVmVyMTAgYnVpbGRlcikgewotICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyLmlucHV0UG9ydDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBoYW5kbGVyc1tNYXRjaEZpZWxkLkVUSF9TUkMuaWRdID0gbmV3IEJ1aWxkZXJQYXJhbUhhbmRsZXI8TWFjQWRkcmVzcz4oKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldChmaW5hbCBNYXRjaEJ1aWxkZXJWZXIxMCBidWlsZGVyLCBmaW5hbCBNYWNBZGRyZXNzIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5kYXRhTGF5ZXJTb3VyY2UgPSB2YWx1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgTWFjQWRkcmVzcyBnZXQoZmluYWwgTWF0Y2hCdWlsZGVyVmVyMTAgYnVpbGRlcikgewotICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyLmRhdGFMYXllclNvdXJjZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9CiAKICAgICBwcm90ZWN0ZWQgaW50IHdpbGRjYXJkczsKICAgICBwcm90ZWN0ZWQgT0ZQb3J0IGlucHV0UG9ydDsKQEAgLTY2LDMwICszOSwzNyBAQAogCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU+IEYgZ2V0KGZpbmFsIE1hdGNoRmllbGQ8Rj4gbWF0Y2gpIHsKKyAgICBwdWJsaWMgPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZTxGPj4gRiBnZXQoZmluYWwgTWF0Y2hGaWVsZDxGPiBtYXRjaCkgewogICAgICAgICBzd2l0Y2ggKG1hdGNoLmlkKSB7Ci0gICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjYXNlIElOX1BPUlQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIChGKSBpbnB1dFBvcnQ7Ci0gICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBjYXNlIEVUSF9TUkM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIChGKSBkYXRhTGF5ZXJTb3VyY2U7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAgICAgfQogCi0gICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU+IE1hdGNoQnVpbGRlciBzZXQoZmluYWwgTWF0Y2hGaWVsZDxGPiBtYXRjaCwgZmluYWwgRiB2YWx1ZSkgeworICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBNYXRjaEJ1aWxkZXIgc2V0KGZpbmFsIE1hdGNoRmllbGQ8Rj4gbWF0Y2gsIGZpbmFsIEYgdmFsdWUpIHsKICAgICAgICAgc3dpdGNoIChtYXRjaC5pZCkgewotICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgY2FzZSBJTl9QT1JUOgogICAgICAgICAgICAgICAgIGlucHV0UG9ydCA9IChPRlBvcnQpIHZhbHVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgY2FzZSBFVEhfU1JDOgogICAgICAgICAgICAgICAgIGRhdGFMYXllclNvdXJjZSA9IChNYWNBZGRyZXNzKSB2YWx1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQorICAgIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBNYXRjaEJ1aWxkZXIgdW5zZXQoZmluYWwgTWF0Y2hGaWVsZDxGPiBtYXRjaCkgeworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KIAogICAgIHB1YmxpYyBPRlBvcnQgZ2V0SW5wdXRQb3J0KCkgewogICAgICAgICByZXR1cm4gaW5wdXRQb3J0OwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hGaWVsZC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hGaWVsZC5qYXZhCmluZGV4IGQ5ZDY4ZWMuLjA3MWVhYTAgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoRmllbGQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEZpZWxkLmphdmEKQEAgLTQsOSArNCw5IEBACiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLkV0aFR5cGU7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLklDTVB2NENvZGU7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLklDTVB2NFR5cGU7Ci1pbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLklQdjRXaXRoTWFzazsKK2ltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuSVB2NDsKK2ltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuSVB2NjsKIGltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuSVB2NkZsb3dMYWJlbDsKLWltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuSVB2NldpdGhNYXNrOwogaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5JcERzY3A7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLklwRWNuOwogaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5JcFByb3RvY29sOwpAQCAtMTgsOTEgKzE4LDg2IEBACiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLlZsYW5QY3A7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLlZsYW5WaWQ7CiAKLXB1YmxpYyBjbGFzcyBNYXRjaEZpZWxkPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZT4geworcHVibGljIGNsYXNzIE1hdGNoRmllbGQ8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiB7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLSAgICBwdWJsaWMgZmluYWwgaW50IGlkOworICAgIHB1YmxpYyBmaW5hbCBNYXRjaEZpZWxkcyBpZDsKIAotICAgIHB1YmxpYyBNYXRjaEZpZWxkKGZpbmFsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuaWQgPSAtMTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWF0Y2hGaWVsZChmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgaW50IGlkKSB7CisgICAgcHJpdmF0ZSBNYXRjaEZpZWxkKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBNYXRjaEZpZWxkcyBpZCkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgfQogCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE9GUG9ydD4gSU5fUE9SVCA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxPRlBvcnQ+KCJpbl9wb3J0IiwgMCk7CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxPRlBvcnQ+KCJpbl9wb3J0IiwgTWF0Y2hGaWVsZHMuSU5fUE9SVCk7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE9GUG9ydD4gSU5fUEhZX1BPUlQgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8T0ZQb3J0PigiaW5fcGh5X3BvcnQiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE9GUG9ydD4oImluX3BoeV9wb3J0IiwgTWF0Y2hGaWVsZHMuUEhZU0lDQUxfUE9SVCk7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE9GUG9ydD4gTUVUQURBVEEgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8T0ZQb3J0PigibWV0YWRhdGEiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE9GUG9ydD4oIm1ldGFkYXRhIiwgTWF0Y2hGaWVsZHMuTUVUQURBVEEpOwogCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4gRVRIX0RTVCA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYXNrZWQ8TWFjQWRkcmVzcz4+KCJldGhfZHN0Iik7CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYXNrZWQ8TWFjQWRkcmVzcz4+KCJldGhfZHN0IiwgTWF0Y2hGaWVsZHMuRVRIX0RTVCk7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4gRVRIX1NSQyA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYXNrZWQ8TWFjQWRkcmVzcz4+KCJldGhfc3JjIiwgMSk7CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYXNrZWQ8TWFjQWRkcmVzcz4+KCJldGhfc3JjIiwgTWF0Y2hGaWVsZHMuRVRIX1NSQyk7CiAKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8RXRoVHlwZT4gRVRIX1RZUEUgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8RXRoVHlwZT4oImV0aF90eXBlIik7CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxFdGhUeXBlPigiZXRoX3R5cGUiLCBNYXRjaEZpZWxkcy5FVEhfVFlQRSk7CiAgICAgCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE1hc2tlZDxWbGFuVmlkPj4gVkxBTl9WSUQgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8TWFza2VkPFZsYW5WaWQ+Pigidmxhbl92aWQiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxWbGFuVmlkPj4oInZsYW5fdmlkIiwgTWF0Y2hGaWVsZHMuVkxBTl9WSUQpOwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxWbGFuUGNwPiBWTEFOX1BDUCA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxWbGFuUGNwPigidmxhbl9wY3AiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPFZsYW5QY3A+KCJ2bGFuX3BjcCIsIE1hdGNoRmllbGRzLlZMQU5fUENQKTsKICAgICAKICAgICAKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SXBEc2NwPiBJUF9EU0NQID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElwRHNjcD4oImlwX2RzY3AiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElwRHNjcD4oImlwX2RzY3AiLCBNYXRjaEZpZWxkcy5JUF9EU0NQKTsKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SXBFY24+IElQX0VDTiA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJcEVjbj4oImlwX2RzY3AiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElwRWNuPigiaXBfZHNjcCIsIE1hdGNoRmllbGRzLklQX0VDTik7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElwUHJvdG9jb2w+IElQX1BST1RPID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElwUHJvdG9jb2w+KCJpcF9wcm90byIpOworICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8SXBQcm90b2NvbD4oImlwX3Byb3RvIiwgTWF0Y2hGaWVsZHMuSVBfUFJPVE8pOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElQdjRXaXRoTWFzaz4gSVBWNF9TUkMgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8SVB2NFdpdGhNYXNrPigiaXB2NF9zcmMiKTsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SVB2NFdpdGhNYXNrPiBJUFY0X0RTVCA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJUHY0V2l0aE1hc2s+KCJpcHY0X2RzdCIpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxNYXNrZWQ8SVB2ND4+IElQVjRfU1JDID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxJUHY0Pj4oImlwdjRfc3JjIiwgTWF0Y2hGaWVsZHMuSVBWNF9TUkMpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxNYXNrZWQ8SVB2ND4+IElQVjRfRFNUID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxJUHY0Pj4oImlwdjRfZHN0IiwgTWF0Y2hGaWVsZHMuSVBWNF9EU1QpOwogCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPFRyYW5zcG9ydFBvcnQ+IFRDUF9TUkMgPSBuZXcgTWF0Y2hGaWVsZDxUcmFuc3BvcnRQb3J0PigKLSAgICAgICAgICAgICJ0Y3Bfc3JjIik7CisgICAgICAgICAgICAidGNwX3NyYyIsIE1hdGNoRmllbGRzLlRDUF9TUkMpOwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxUcmFuc3BvcnRQb3J0PiBUQ1BfRFNUID0gbmV3IE1hdGNoRmllbGQ8VHJhbnNwb3J0UG9ydD4oCi0gICAgICAgICAgICAidGNwX2RzdCIpOworICAgICAgICAgICAgInRjcF9kc3QiLCBNYXRjaEZpZWxkcy5UQ1BfRFNUKTsKIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxUcmFuc3BvcnRQb3J0PiBVRFBfU1JDID0gbmV3IE1hdGNoRmllbGQ8VHJhbnNwb3J0UG9ydD4oCi0gICAgICAgICAgICAidWRwX3NyYyIpOworICAgICAgICAgICAgInVkcF9zcmMiLCBNYXRjaEZpZWxkcy5VRFBfU1JDKTsKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8VHJhbnNwb3J0UG9ydD4gVURQX0RTVCA9IG5ldyBNYXRjaEZpZWxkPFRyYW5zcG9ydFBvcnQ+KAotICAgICAgICAgICAgInVkcF9kc3QiKTsKKyAgICAgICAgICAgICJ1ZHBfZHN0IiwgTWF0Y2hGaWVsZHMuVURQX0RTVCk7CiAKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8VHJhbnNwb3J0UG9ydD4gU0NUUF9TUkMgPSBuZXcgTWF0Y2hGaWVsZDxUcmFuc3BvcnRQb3J0PigKLSAgICAgICAgICAgICJzY3RwX3NyYyIpOworICAgICAgICAgICAgInNjdHBfc3JjIiwgTWF0Y2hGaWVsZHMuU0NUUF9TUkMpOwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxUcmFuc3BvcnRQb3J0PiBTQ1RQX0RTVCA9IG5ldyBNYXRjaEZpZWxkPFRyYW5zcG9ydFBvcnQ+KAotICAgICAgICAgICAgInNjdHBfZHN0Iik7CisgICAgICAgICAgICAic2N0cF9kc3QiLCBNYXRjaEZpZWxkcy5TQ1RQX0RTVCk7CiAKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SUNNUHY0VHlwZT4gSUNNUFY0X1RZUEUgPSBuZXcgTWF0Y2hGaWVsZDxJQ01QdjRUeXBlPigKLSAgICAgICAgICAgICJpY21wdjRfc3JjIik7CisgICAgICAgICAgICAiaWNtcHY0X3NyYyIsIE1hdGNoRmllbGRzLklDTVBWNF9UWVBFKTsKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SUNNUHY0Q29kZT4gSUNNUFY0X0NPREUgPSBuZXcgTWF0Y2hGaWVsZDxJQ01QdjRDb2RlPigKLSAgICAgICAgICAgICJpY21wdjRfZHN0Iik7CisgICAgICAgICAgICAiaWNtcHY0X2RzdCIsIE1hdGNoRmllbGRzLklDTVBWNF9DT0RFKTsKIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxBcnBPcGNvZGU+IEFSUF9PUCA9IG5ldyBNYXRjaEZpZWxkPEFycE9wY29kZT4oCi0gICAgICAgICAgICAiYXJwX29wIik7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElQdjRXaXRoTWFzaz4gQVJQX1NQQSA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJUHY0V2l0aE1hc2s+KCJhcnBfc3BhIik7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElQdjRXaXRoTWFzaz4gQVJQX1RQQSA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJUHY0V2l0aE1hc2s+KCJhcnBfdHBhIik7CisgICAgICAgICAgICAiYXJwX29wIiwgTWF0Y2hGaWVsZHMuQVJQX09QKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFza2VkPElQdjQ+PiBBUlBfU1BBID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxJUHY0Pj4oImFycF9zcGEiLCBNYXRjaEZpZWxkcy5BUlBfU1BBKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFza2VkPElQdjQ+PiBBUlBfVFBBID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxJUHY0Pj4oImFycF90cGEiLCBNYXRjaEZpZWxkcy5BUlBfVFBBKTsKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFza2VkPE1hY0FkZHJlc3M+PiBBUlBfU0hBID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4oImFycF9zaGEiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4oImFycF9zaGEiLCBNYXRjaEZpZWxkcy5BUlBfU0hBKTsKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFza2VkPE1hY0FkZHJlc3M+PiBBUlBfVEhBID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4oImFycF90aGEiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4oImFycF90aGEiLCBNYXRjaEZpZWxkcy5BUlBfVEhBKTsKIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxJUHY2V2l0aE1hc2s+IElQVjZfU1JDID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElQdjZXaXRoTWFzaz4oImlwdjZfc3JjIik7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElQdjZXaXRoTWFzaz4gSVBWNl9EU1QgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8SVB2NldpdGhNYXNrPigiaXB2Nl9kc3QiKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFza2VkPElQdjY+PiBJUFY2X1NSQyA9CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYXNrZWQ8SVB2Nj4+KCJpcHY2X3NyYyIsIE1hdGNoRmllbGRzLklQVjZfU1JDKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFza2VkPElQdjY+PiBJUFY2X0RTVCA9CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYXNrZWQ8SVB2Nj4+KCJpcHY2X2RzdCIsIE1hdGNoRmllbGRzLklQVjZfRFNUKTsKIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxNYXNrZWQ8SVB2NkZsb3dMYWJlbD4+IElQVjZfRkxBQkVMID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxJUHY2Rmxvd0xhYmVsPj4oImlwdjZfZmxhYmVsIik7CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYXNrZWQ8SVB2NkZsb3dMYWJlbD4+KCJpcHY2X2ZsYWJlbCIsIE1hdGNoRmllbGRzLklQVjZfRkxPV0xBQkVMKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEZpZWxkcy5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hGaWVsZHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTA0M2YyCi0tLSAvZGV2L251bGwKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hGaWVsZHMuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIG9yZy5vcGVuZmxvdy5wcm90b2NvbC5tYXRjaDsKKworcHVibGljIGVudW0gTWF0Y2hGaWVsZHMgeworICAgIElOX1BPUlQsCisgICAgUEhZU0lDQUxfUE9SVCwKKyAgICBNRVRBREFUQSwKKyAgICBFVEhfRFNULAorICAgIEVUSF9TUkMsCisgICAgRVRIX1RZUEUsCisgICAgVkxBTl9WSUQsCisgICAgVkxBTl9QQ1AsCisgICAgSVBfRFNDUCwKKyAgICBJUF9FQ04sCisgICAgSVBfUFJPVE8sCisgICAgSVBWNF9TUkMsCisgICAgSVBWNF9EU1QsCisgICAgVENQX1NSQywKKyAgICBUQ1BfRFNULAorICAgIFVEUF9TUkMsCisgICAgVURQX0RTVCwKKyAgICBTQ1RQX1NSQywKKyAgICBTQ1RQX0RTVCwKKyAgICBJQ01QVjRfVFlQRSwKKyAgICBJQ01QVjRfQ09ERSwKKyAgICBBUlBfT1AsCisgICAgQVJQX1NQQSwKKyAgICBBUlBfVFBBLAorICAgIEFSUF9TSEEsCisgICAgQVJQX1RIQSwKKyAgICBJUFY2X1NSQywKKyAgICBJUFY2X0RTVCwKKyAgICBJUFY2X0ZMT1dMQUJFTCwKK30KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0FycE9wY29kZS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvQXJwT3Bjb2RlLmphdmEKaW5kZXggODUyYWEyMC4uNmViZjQ0NyAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvQXJwT3Bjb2RlLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvQXJwT3Bjb2RlLmphdmEKQEAgLTIsNyArMiw3IEBACiAKIGltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CiAKLXB1YmxpYyBjbGFzcyBBcnBPcGNvZGUgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgQXJwT3Bjb2RlIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8QXJwT3Bjb2RlPiB7CiAKICAgICBmaW5hbCBzdGF0aWMgaW50IExFTkdUSCA9IDI7CiAKQEAgLTE0Miw0ICsxNDIsMTQgQEAKICAgICBwdWJsaWMgc3RhdGljIEFycE9wY29kZSByZWFkMkJ5dGVzKENoYW5uZWxCdWZmZXIgYykgewogICAgICAgICByZXR1cm4gQXJwT3Bjb2RlLm9mKGMucmVhZFVuc2lnbmVkU2hvcnQoKSk7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEFycE9wY29kZSBhcHBseU1hc2soQXJwT3Bjb2RlIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIEFycE9wY29kZS5vZih0aGlzLm9wY29kZSAmIG1hc2sub3Bjb2RlKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIGludCBnZXRPcENvZGUoKSB7CisgICAgICAgIHJldHVybiBvcGNvZGU7CisgICAgfQorICAgIAogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0V0aFR5cGUuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0V0aFR5cGUuamF2YQppbmRleCBmMGYwYTJjLi5lYTE2ZTY3IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9FdGhUeXBlLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvRXRoVHlwZS5qYXZhCkBAIC04LDcgKzgsNyBAQAogICogCiAgKiBAYXV0aG9yIFlvdGFtIEhhcmNob2wgKHlvdGFtLmhhcmNob2xAYmlnc3dpdGNoLmNvbSkKICAqLwotcHVibGljIGNsYXNzIEV0aFR5cGUgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgRXRoVHlwZSBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPEV0aFR5cGU+IHsKICAgICBzdGF0aWMgZmluYWwgaW50IExFTkdUSCA9IDI7CiAKICAgICBwcml2YXRlIGZpbmFsIGludCByYXdWYWx1ZTsKQEAgLTIzNSw0ICsyMzUsMTQgQEAKICAgICAgICAgcmV0dXJuIEV0aFR5cGUub2YoYy5yZWFkVW5zaWduZWRTaG9ydCgpKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRXRoVHlwZSBhcHBseU1hc2soRXRoVHlwZSBtYXNrKSB7CisgICAgICAgIHJldHVybiBFdGhUeXBlLm9mKHRoaXMucmF3VmFsdWUgJiBtYXNrLnJhd1ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIGludCBnZXRWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHJhd1ZhbHVlOworICAgIH0KKworICAgIAogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSUNNUHY0Q29kZS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSUNNUHY0Q29kZS5qYXZhCmluZGV4IDE0N2I1ZjcuLjQyY2M1YmUgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lDTVB2NENvZGUuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JQ01QdjRDb2RlLmphdmEKQEAgLTcsNyArNyw3IEBACiAgKiBAYXV0aG9yIFlvdGFtIEhhcmNob2wgKHlvdGFtLmhhcmNob2xAYmlnc3dpdGNoLmNvbSkKICAqCiAgKi8KLXB1YmxpYyBjbGFzcyBJQ01QdjRDb2RlIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGUgeworcHVibGljIGNsYXNzIElDTVB2NENvZGUgaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxJQ01QdjRDb2RlPiB7CiAKICAgICBmaW5hbCBzdGF0aWMgaW50IExFTkdUSCA9IDE7CiAgICAgZmluYWwgc3RhdGljIHNob3J0IE1BWF9DT0RFID0gMHhGRjsKQEAgLTQxLDQgKzQxLDEwIEBACiAgICAgICAgIHJldHVybiBJQ01QdjRDb2RlLm9mKGMucmVhZFVuc2lnbmVkQnl0ZSgpKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSUNNUHY0Q29kZSBhcHBseU1hc2soSUNNUHY0Q29kZSBtYXNrKSB7CisgICAgICAgIHJldHVybiBJQ01QdjRDb2RlLm9mKChzaG9ydCkodGhpcy5jb2RlICYgbWFzay5jb2RlKSk7CisgICAgfQorCisgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JQ01QdjRUeXBlLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JQ01QdjRUeXBlLmphdmEKaW5kZXggMDFkNmU4Zi4uYjFiYmRjMCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSUNNUHY0VHlwZS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lDTVB2NFR5cGUuamF2YQpAQCAtMiw3ICsyLDcgQEAKIAogaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKIAotcHVibGljIGNsYXNzIElDTVB2NFR5cGUgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgSUNNUHY0VHlwZSBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPElDTVB2NFR5cGU+IHsKIAogICAgIGZpbmFsIHN0YXRpYyBpbnQgTEVOR1RIID0gMTsKIApAQCAtMTU1LDQgKzE1NSwxMCBAQAogICAgICAgICByZXR1cm4gSUNNUHY0VHlwZS5vZihjLnJlYWRVbnNpZ25lZEJ5dGUoKSk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIElDTVB2NFR5cGUgYXBwbHlNYXNrKElDTVB2NFR5cGUgbWFzaykgeworICAgICAgICByZXR1cm4gSUNNUHY0VHlwZS5vZigoc2hvcnQpKHRoaXMudHlwZSAmIG1hc2sudHlwZSkpOworICAgIH0KKworICAgIAogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NC5qYXZhCmluZGV4IDc4YjhkZDIuLmY4OWY2ODMgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY0LmphdmEKQEAgLTksNyArOSw3IEBACiAgKgogICogQGF1dGhvciBBbmRyZWFzIFd1bmRzYW0gPGFuZHJlYXMud3VuZHNhbUBiaWdzd2l0Y2guY29tPgogICovCi1wdWJsaWMgY2xhc3MgSVB2NCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBJUHY0IGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8SVB2ND4gewogICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gNDsKICAgICBwcml2YXRlIGZpbmFsIGludCByYXdWYWx1ZTsKIApAQCAtMTIyLDUgKzEyMiwxMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgSVB2NCByZWFkNEJ5dGVzKENoYW5uZWxCdWZmZXIgYykgewogICAgICAgICByZXR1cm4gSVB2NC5vZihjLnJlYWRJbnQoKSk7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIElQdjQgYXBwbHlNYXNrKElQdjQgbWFzaykgeworICAgICAgICByZXR1cm4gSVB2NC5vZih0aGlzLnJhd1ZhbHVlICYgbWFzay5yYXdWYWx1ZSk7CisgICAgfQorCiAgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY0V2l0aE1hc2suamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjRXaXRoTWFzay5qYXZhCmluZGV4IGFmYjg5ZWQuLmMyNGM0ZmQgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjRXaXRoTWFzay5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjRXaXRoTWFzay5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIHJldHVybiByZXMudG9TdHJpbmcoKTsKICAgICB9CiAgICAgCi0gICAgcHVibGljIHN0YXRpYyBPRlZhbHVlVHlwZSBvZlBvc3NpYmx5TWFza2VkKGZpbmFsIFN0cmluZyBzdHJpbmcpIHsKKyAgICBwdWJsaWMgc3RhdGljIE9GVmFsdWVUeXBlPD8+IG9mUG9zc2libHlNYXNrZWQoZmluYWwgU3RyaW5nIHN0cmluZykgewogICAgICAgICBpbnQgc2xhc2hQb3M7CiAgICAgICAgIFN0cmluZyBpcCA9IHN0cmluZzsKICAgICAgICAgaW50IG1hc2tCaXRzID0gMDsKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjYuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjYuamF2YQppbmRleCBlMzE2NmZkLi4yMDBhMzNkIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY2LmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2Ni5qYXZhCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogICogQGF1dGhvciBBbmRyZWFzIFd1bmRzYW0gPGFuZHJlYXMud3VuZHNhbUB0ZWxldGVhY2guZGU+CiAgKi8KLXB1YmxpYyBjbGFzcyBJUHY2IGltcGxlbWVudHMgT0ZWYWx1ZVR5cGUgeworcHVibGljIGNsYXNzIElQdjYgaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxJUHY2PiB7CiAgICAgc3RhdGljIGZpbmFsIGludCBMRU5HVEggPSAxNjsKICAgICBwcml2YXRlIGZpbmFsIGxvbmcgcmF3MTsKICAgICBwcml2YXRlIGZpbmFsIGxvbmcgcmF3MjsKQEAgLTI3OCw0ICsyNzgsOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgSVB2NiByZWFkMTZCeXRlcyhDaGFubmVsQnVmZmVyIGMpIHRocm93cyBPRlBhcnNlRXJyb3IgewogICAgICAgICByZXR1cm4gSVB2Ni5vZihjLnJlYWRMb25nKCksIGMucmVhZExvbmcoKSk7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIElQdjYgYXBwbHlNYXNrKElQdjYgbWFzaykgeworICAgICAgICByZXR1cm4gSVB2Ni5vZih0aGlzLnJhdzEgJiBtYXNrLnJhdzEsIHRoaXMucmF3MiAmIG1hc2sucmF3Mik7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NkZsb3dMYWJlbC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NkZsb3dMYWJlbC5qYXZhCmluZGV4IDZkOWJmYjUuLmQ0OWU0ZTIgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjZGbG93TGFiZWwuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY2Rmxvd0xhYmVsLmphdmEKQEAgLTMsNyArMyw3IEBACiBpbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOwogaW1wb3J0IG9yZy5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIAotcHVibGljIGNsYXNzIElQdjZGbG93TGFiZWwgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgSVB2NkZsb3dMYWJlbCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPElQdjZGbG93TGFiZWw+IHsKIAogICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gNDsKICAgICAKQEAgLTUzLDQgKzUzLDEyIEBACiAgICAgICAgIHJldHVybiBJUHY2Rmxvd0xhYmVsLm9mKChpbnQpKGMucmVhZFVuc2lnbmVkSW50KCkgJiAweEZGRkZGRkZGKSk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIElQdjZGbG93TGFiZWwgYXBwbHlNYXNrKElQdjZGbG93TGFiZWwgbWFzaykgeworICAgICAgICByZXR1cm4gSVB2NkZsb3dMYWJlbC5vZih0aGlzLmxhYmVsICYgbWFzay5sYWJlbCk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRJUHY2Rmxvd0xhYmVsVmFsdWUoKSB7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY2V2l0aE1hc2suamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjZXaXRoTWFzay5qYXZhCmluZGV4IGY4MDlkNjcuLjcyMzE5ZTMgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjZXaXRoTWFzay5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjZXaXRoTWFzay5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIHJldHVybiByZXMudG9TdHJpbmcoKTsKICAgICB9CiAgICAgCi0gICAgcHVibGljIHN0YXRpYyBPRlZhbHVlVHlwZSBvZlBvc3NpYmx5TWFza2VkKGZpbmFsIFN0cmluZyBzdHJpbmcpIHsKKyAgICBwdWJsaWMgc3RhdGljIE9GVmFsdWVUeXBlPD8+IG9mUG9zc2libHlNYXNrZWQoZmluYWwgU3RyaW5nIHN0cmluZykgewogICAgICAgICBpbnQgc2xhc2hQb3M7CiAgICAgICAgIFN0cmluZyBpcCA9IHN0cmluZzsKICAgICAgICAgaW50IG1hc2tCaXRzID0gMDsKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lwRHNjcC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSXBEc2NwLmphdmEKaW5kZXggMDMzZTU3NC4uNDRlNjI5NiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSXBEc2NwLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSXBEc2NwLmphdmEKQEAgLTMsNyArMyw3IEBACiBpbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOwogaW1wb3J0IG9yZy5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIAotcHVibGljIGVudW0gSXBEc2NwIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGUgeworcHVibGljIGVudW0gSXBEc2NwIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8SXBEc2NwPiB7CiAgICAgRFNDUF8wKChieXRlKTApLAogICAgIERTQ1BfMSgoYnl0ZSkxKSwKICAgICBEU0NQXzIoKGJ5dGUpMiksCkBAIC0yMzAsNCArMjMwLDEyIEBACiAgICAgICAgIHJldHVybiBJcERzY3Aub2YoKGJ5dGUpKGMucmVhZFVuc2lnbmVkQnl0ZSgpKSk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIElwRHNjcCBhcHBseU1hc2soSXBEc2NwIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIElwRHNjcC5vZigoYnl0ZSkodGhpcy5kc2NwICYgbWFzay5kc2NwKSk7CisgICAgfQorCisgICAgcHVibGljIGJ5dGUgZ2V0RHNjcFZhbHVlKCkgeworICAgICAgICByZXR1cm4gZHNjcDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JcEVjbi5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSXBFY24uamF2YQppbmRleCBiMjYxZDQxLi45MDYwMGRmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JcEVjbi5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lwRWNuLmphdmEKQEAgLTMsNyArMyw3IEBACiBpbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOwogaW1wb3J0IG9yZy5vcGVuZmxvdy5leGNlcHRpb25zLk9GUGFyc2VFcnJvcjsKIAotcHVibGljIGVudW0gSXBFY24gaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgZW51bSBJcEVjbiBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPElwRWNuPiB7CiAgICAgRUNOXzAwKChieXRlKTApLAogICAgIEVDTl8wMSgoYnl0ZSkxKSwKICAgICBFQ05fMTAoKGJ5dGUpMiksCkBAIC01MCw0ICs1MCwxMiBAQAogICAgICAgICByZXR1cm4gSXBFY24ub2YoKGJ5dGUpKGMucmVhZFVuc2lnbmVkQnl0ZSgpKSk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIElwRWNuIGFwcGx5TWFzayhJcEVjbiBtYXNrKSB7CisgICAgICAgIHJldHVybiBJcEVjbi5vZigoYnl0ZSkodGhpcy5lY24gJiBtYXNrLmVjbikpOworICAgIH0KKworICAgIHB1YmxpYyBieXRlIGdldEVjblZhbHVlKCkgeworICAgICAgICByZXR1cm4gZWNuOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lwUHJvdG9jb2wuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lwUHJvdG9jb2wuamF2YQppbmRleCA0MzZkYjFkLi5mNDBlZGVkIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JcFByb3RvY29sLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSXBQcm90b2NvbC5qYXZhCkBAIC03LDcgKzcsNyBAQAogICogCiAgKiBAYXV0aG9yIFlvdGFtIEhhcmNob2wgKHlvdGFtLmhhcmNob2xAYmlnc3dpdGNoLmNvbSkKICAqLwotcHVibGljIGNsYXNzIElwUHJvdG9jb2wgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgSXBQcm90b2NvbCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPElwUHJvdG9jb2w+IHsKIAogICAgIHN0YXRpYyBmaW5hbCBzaG9ydCBNQVhfUFJPVE8gPSAweEZGOwogICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gMTsKQEAgLTYzMiw0ICs2MzIsMTQgQEAKICAgICBwdWJsaWMgc3RhdGljIElwUHJvdG9jb2wgcmVhZEJ5dGUoQ2hhbm5lbEJ1ZmZlciBjKSB7CiAgICAgICAgIHJldHVybiBJcFByb3RvY29sLm9mKGMucmVhZFVuc2lnbmVkQnl0ZSgpKTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSXBQcm90b2NvbCBhcHBseU1hc2soSXBQcm90b2NvbCBtYXNrKSB7CisgICAgICAgIHJldHVybiBJcFByb3RvY29sLm9mKChzaG9ydCkodGhpcy5wcm90byAmIG1hc2sucHJvdG8pKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc2hvcnQgZ2V0SXBQcm90b2NvbE51bWJlcigpIHsKKyAgICAgICAgcmV0dXJuIHByb3RvOworICAgIH0KKyAgICAKIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL01hY0FkZHJlc3MuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL01hY0FkZHJlc3MuamF2YQppbmRleCBhMThkZmYzLi5jYjhjZTg0IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9NYWNBZGRyZXNzLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvTWFjQWRkcmVzcy5qYXZhCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBAYXV0aG9yIEFuZHJlYXMgV3VuZHNhbSA8YW5kcmVhcy53dW5kc2FtQGJpZ3N3aXRjaC5jb20+CiAgKi8KIAotcHVibGljIGNsYXNzIE1hY0FkZHJlc3MgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgTWFjQWRkcmVzcyBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPE1hY0FkZHJlc3M+IHsKICAgICBzdGF0aWMgZmluYWwgaW50IE1hY0FkZHJMZW4gPSA2OwogICAgIHByaXZhdGUgZmluYWwgbG9uZyByYXdWYWx1ZTsKIApAQCAtMTE2LDYgKzExNiwxMSBAQAogICAgICAgICBsb25nIHJhdyA9IGMucmVhZFVuc2lnbmVkSW50KCkgPDwgMTYgfCBjLnJlYWRVbnNpZ25lZFNob3J0KCk7CiAgICAgICAgIHJldHVybiBNYWNBZGRyZXNzLm9mKHJhdyk7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE1hY0FkZHJlc3MgYXBwbHlNYXNrKE1hY0FkZHJlc3MgbWFzaykgeworICAgICAgICByZXR1cm4gTWFjQWRkcmVzcy5vZih0aGlzLnJhd1ZhbHVlICYgbWFzay5yYXdWYWx1ZSk7CisgICAgfQogICAgIAogICAgIAogCmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9NYXNrZWQuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL01hc2tlZC5qYXZhCmluZGV4IDAxMWJhZTguLjA0M2MwMGEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL01hc2tlZC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL01hc2tlZC5qYXZhCkBAIC0yLDEyICsyLDEyIEBACiAKIAogCi1wdWJsaWMgY2xhc3MgTWFza2VkPFQgZXh0ZW5kcyBPRlZhbHVlVHlwZT4gaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgTWFza2VkPFQgZXh0ZW5kcyBPRlZhbHVlVHlwZTxUPj4gaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxNYXNrZWQ8VD4+IHsKICAgICBwcm90ZWN0ZWQgVCB2YWx1ZTsKICAgICBwcm90ZWN0ZWQgVCBtYXNrOwogICAgIAogICAgIHByb3RlY3RlZCBNYXNrZWQoVCB2YWx1ZSwgVCBtYXNrKSB7Ci0gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlLmFwcGx5TWFzayhtYXNrKTsKICAgICAgICAgdGhpcy5tYXNrID0gbWFzazsKICAgICB9CiAgICAgCkBAIC00OCw1ICs0OCwxMCBAQAogICAgICAgICBzYi5hcHBlbmQodmFsdWUudG9TdHJpbmcoKSkuYXBwZW5kKCcvJykuYXBwZW5kKG1hc2sudG9TdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNYXNrZWQ8VD4gYXBwbHlNYXNrKE1hc2tlZDxUPiBtYXNrKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KICAgICAKIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL09GUGh5c2ljYWxQb3J0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlBoeXNpY2FsUG9ydC5qYXZhCmluZGV4IGQ4ZjcxYTMuLjc3NTVhNGEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL09GUGh5c2ljYWxQb3J0LmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvT0ZQaHlzaWNhbFBvcnQuamF2YQpAQCAtMTAsNyArMTAsNyBAQAogICogQGF1dGhvciBjYXB2ZWcKICAqLwogCi1wdWJsaWMgY2xhc3MgT0ZQaHlzaWNhbFBvcnQgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgT0ZQaHlzaWNhbFBvcnQgaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxPRlBoeXNpY2FsUG9ydD4gewogCiAgICAgc3RhdGljIGZpbmFsIGludCBMRU5HVEggPSA0OwogICAgIApAQCAtNjAsNCArNjAsMTIgQEAKICAgICAgICAgcmV0dXJuIE9GUGh5c2ljYWxQb3J0Lm9mKChpbnQpKGMucmVhZFVuc2lnbmVkSW50KCkgJiAweEZGRkZGRkZGKSk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE9GUGh5c2ljYWxQb3J0IGFwcGx5TWFzayhPRlBoeXNpY2FsUG9ydCBtYXNrKSB7CisgICAgICAgIHJldHVybiBPRlBoeXNpY2FsUG9ydC5vZih0aGlzLnBvcnQgJiBtYXNrLnBvcnQpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0UG9ydE51bWJlcigpIHsKKyAgICAgICAgcmV0dXJuIHBvcnQ7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvT0ZQb3J0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlBvcnQuamF2YQppbmRleCAzMjcyNjYwLi45ZGMxOTdmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlBvcnQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlBvcnQuamF2YQpAQCAtMTUsNyArMTUsNyBAQAogICogQGF1dGhvciBBbmRyZWFzIFd1bmRzYW0gPGFuZHJlYXMud3VuZHNhbUBiaWdzd2l0Y2guY29tPgogICovCiBASW1tdXRhYmxlCi1wdWJsaWMgY2xhc3MgT0ZQb3J0IGltcGxlbWVudHMgT0ZWYWx1ZVR5cGUgeworcHVibGljIGNsYXNzIE9GUG9ydCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPE9GUG9ydD4gewogICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gNDsKICAgICAKICAgICAvLyBwcml2YXRlIGludCBjb25zdGFudHMgKE9GMS4xKykgdG8gYXZvaWQgZHVwbGljYXRpb24gaW4gdGhlIGNvZGUKQEAgLTUzMCw0ICs1MzAsOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgT0ZQb3J0IHJlYWQ0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIE9GUG9ydC5vZigoaW50KShjLnJlYWRVbnNpZ25lZEludCgpICYgMHhGRkZGRkZGRikpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBPRlBvcnQgYXBwbHlNYXNrKE9GUG9ydCBtYXNrKSB7CisgICAgICAgIHJldHVybiBPRlBvcnQub2YodGhpcy5wb3J0TnVtYmVyICYgbWFzay5wb3J0TnVtYmVyKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlZhbHVlVHlwZS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvT0ZWYWx1ZVR5cGUuamF2YQppbmRleCA1MWM4YjM2Li44ZTJmOWVkIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlZhbHVlVHlwZS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL09GVmFsdWVUeXBlLmphdmEKQEAgLTMsOCArMywxMCBAQAogCiAKIAotcHVibGljIGludGVyZmFjZSBPRlZhbHVlVHlwZSB7CitwdWJsaWMgaW50ZXJmYWNlIE9GVmFsdWVUeXBlPFQgZXh0ZW5kcyBPRlZhbHVlVHlwZTxUPj4gewogCiAgICAgcHVibGljIGludCBnZXRMZW5ndGgoKTsKKyAgICAKKyAgICBwdWJsaWMgVCBhcHBseU1hc2soVCBtYXNrKTsKIAogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvVHJhbnNwb3J0UG9ydC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvVHJhbnNwb3J0UG9ydC5qYXZhCmluZGV4IGNlY2IzNDkuLjgyZGFiNDEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL1RyYW5zcG9ydFBvcnQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9UcmFuc3BvcnRQb3J0LmphdmEKQEAgLTgsNyArOCw3IEBACiAgKiAKICAqIEBhdXRob3IgWW90YW0gSGFyY2hvbCAoeW90YW0uaGFyY2hvbEBiaWdzd2l0Y2guY29tKQogICovCi1wdWJsaWMgY2xhc3MgVHJhbnNwb3J0UG9ydCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRQb3J0IGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8VHJhbnNwb3J0UG9ydD4gewogICAgIAogICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gMjsKICAgICBzdGF0aWMgZmluYWwgaW50IE1BWF9QT1JUID0gMHhGRkZGOwpAQCAtMzEsNiArMzEsMTAgQEAKICAgICBwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKICAgICAgICAgcmV0dXJuIExFTkdUSDsKICAgICB9CisgICAgCisgICAgcHVibGljIGludCBnZXRQb3J0KCkgeworICAgICAgICByZXR1cm4gcG9ydDsKKyAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewpAQCAtNjMsNCArNjcsOSBAQAogICAgICAgICByZXR1cm4gVHJhbnNwb3J0UG9ydC5vZigoYy5yZWFkVW5zaWduZWRTaG9ydCgpICYgMHgwRkZGRikpOwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBUcmFuc3BvcnRQb3J0IGFwcGx5TWFzayhUcmFuc3BvcnRQb3J0IG1hc2spIHsKKyAgICAgICAgcmV0dXJuIFRyYW5zcG9ydFBvcnQub2YodGhpcy5wb3J0ICYgbWFzay5wb3J0KTsKKyAgICB9CisgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9WbGFuUGNwLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9WbGFuUGNwLmphdmEKaW5kZXggMmY0MDZjOC4uNTMxZjg3OCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvVmxhblBjcC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL1ZsYW5QY3AuamF2YQpAQCAtMyw3ICszLDcgQEAKIGltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CiBpbXBvcnQgb3JnLm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCi1wdWJsaWMgY2xhc3MgVmxhblBjcCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBWbGFuUGNwIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8VmxhblBjcD4gewogICAgIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgVkFMSURBVElPTl9NQVNLID0gMHgwNzsKICAgICBzdGF0aWMgZmluYWwgaW50IExFTkdUSCA9IDE7IApAQCAtNTcsNSArNTcsMTAgQEAKICAgICBwdWJsaWMgc3RhdGljIFZsYW5QY3AgcmVhZEJ5dGUoQ2hhbm5lbEJ1ZmZlciBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIFZsYW5QY3Aub2YoKGJ5dGUpKGMucmVhZFVuc2lnbmVkQnl0ZSgpICYgMHhGRikpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBWbGFuUGNwIGFwcGx5TWFzayhWbGFuUGNwIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIFZsYW5QY3Aub2YoKGJ5dGUpKHRoaXMucGNwICYgbWFzay5wY3ApKTsKKyAgICB9CiAgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9WbGFuVmlkLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9WbGFuVmlkLmphdmEKaW5kZXggYTJiMzhiMi4uY2EyYzNjMiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvVmxhblZpZC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL1ZsYW5WaWQuamF2YQpAQCAtMyw3ICszLDcgQEAKIGltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CiBpbXBvcnQgb3JnLm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCi1wdWJsaWMgY2xhc3MgVmxhblZpZCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBWbGFuVmlkIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8VmxhblZpZD4gewogICAgIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IFZBTElEQVRJT05fTUFTSyA9IDB4MEZGRjsKICAgICBmaW5hbCBzdGF0aWMgaW50IExFTkdUSCA9IDI7CkBAIC03Myw1ICs3MywxMCBAQAogICAgIHB1YmxpYyBWbGFuVmlkIHJlYWQyQnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIFZsYW5WaWQub2YoYy5yZWFkU2hvcnQoKSk7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFZsYW5WaWQgYXBwbHlNYXNrKFZsYW5WaWQgbWFzaykgeworICAgICAgICByZXR1cm4gVmxhblZpZC5vZigoc2hvcnQpKHRoaXMudmlkICYgbWFzay52aWQpKTsKKyAgICB9CiAgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfY2xhc3MuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9jbGFzcy5qYXZhCmluZGV4IDc3Mjg1OGEuLjk2NjVjNDkgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9jbGFzcy5qYXZhCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9jbGFzcy5qYXZhCkBAIC0xNDgsOCArMTQ4LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBpbnQgd3JpdGVUbyhDaGFubmVsQnVmZmVyIGJiKSB7Ci0gICAgICAgIHJldHVybiBXUklURVIud3JpdGUoYmIsIHRoaXMpOworICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBiYikgeworICAgICAgICBXUklURVIud3JpdGUoYmIsIHRoaXMpOwogICAgIH0KIAogICAgIGZpbmFsIHN0YXRpYyBXcml0ZXIgV1JJVEVSID0gbmV3IFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL29mX2ludGVyZmFjZS5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL29mX2ludGVyZmFjZS5qYXZhCmluZGV4IGFmNjQ5M2UuLmI5NjlkNTAgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9pbnRlcmZhY2UuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfaW50ZXJmYWNlLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAke3Byb3AuamF2YV90eXBlLnB1YmxpY190eXBlfSBnZXQke3Byb3AudGl0bGVfbmFtZX0oKSR7ICIiIGlmIHByb3AuaXNfdW5pdmVyc2FsIGVsc2UgIiB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24ifTsKIC8vOjogI2VuZGZvcgogCi0gICAgaW50IHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBjaGFubmVsQnVmZmVyKTsKKyAgICB2b2lkIHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBjaGFubmVsQnVmZmVyKTsKIAogICAgIEJ1aWxkZXIgY3JlYXRlQnVpbGRlcigpOwogICAgIHB1YmxpYyBpbnRlcmZhY2UgQnVpbGRlciAkeyJleHRlbmRzICVzLkJ1aWxkZXIiICUgbXNnLnBhcmVudF9pbnRlcmZhY2UgaWYgbXNnLnBhcmVudF9pbnRlcmZhY2UgZWxzZSAiIn0gewo=