ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC5kZW1vL3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2RlbW8vQXBwbGljYXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC5kZW1vL3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2RlbW8vQXBwbGljYXRpb24uamF2YQppbmRleCBiZjNhYWYxLi5mNjA3OWZkIDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQuZGVtby9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9kZW1vL0FwcGxpY2F0aW9uLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0LmRlbW8vc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvZGVtby9BcHBsaWNhdGlvbi5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAxMC0yMDExIFRleGFzIENlbnRlciBmb3IgQXBwbGllZCBUZWNobm9sb2d5CisgKiBDb3B5cmlnaHQg77+9IDIwMTAtMjAxMSBUZXhhcyBDZW50ZXIgZm9yIEFwcGxpZWQgVGVjaG5vbG9neQogICogVGV4YXMgRW5naW5lZXJpbmcgRXhwZXJpbWVudCBTdGF0aW9uCiAgKiBUaGUgVGV4YXMgQSZNIFVuaXZlcnNpdHkgU3lzdGVtCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgpAQCAtMjM4LDYgKzIzOCw4IEBACiAgICAgICB2aXogPSBuZXcgU3BhY2VUcmVlKHBhcmVudCwgU1dULkJPUkRFUik7CiAgICAgICBTdHJpbmcgc2FtcGxlRGF0YSA9IGxvYWRTYW1wbGVEYXRhKCJzYW1wbGVzL3NwYWNldHJlZS5qc29uIik7CiAgICAgICB2aXouc2V0SlNPTkRhdGEoc2FtcGxlRGF0YSk7CisgICAgICB2aXouc2V0UHJvcGVydHkoIm9yaWVudGF0aW9uIiwgInRvcCIpOworICAgICAgdml6LnNldEVkZ2VQcm9wZXJ0eSgidHlwZSIsICJiZXppZXIiKTsKICAgICAgIHZpei5zZXRCYWNrZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9CTEFDSykpOwogICAgICAgdml6LmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGNyZWF0ZVNlbGVjdGlvbkxpc3RlbmVyKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9IeXBlclRyZWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9IeXBlclRyZWUuamF2YQppbmRleCA2ZjhiODE0Li42NzQ1YWU1IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvSHlwZXJUcmVlLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L0h5cGVyVHJlZS5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IKkgMjAxMC0yMDExIEF1c3RpbiBSaWRkbGUKKyAqIENvcHlyaWdodCDvv70gMjAxMC0yMDExIEF1c3RpbiBSaWRkbGUKICAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKQEAgLTIzLDggKzIzLDggQEAKICAgcHVibGljIEh5cGVyVHJlZSggZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlICkKICAgewogICAgIHN1cGVyKCBwYXJlbnQsIHN0eWxlICk7Ci0gICAgbm9kZUNvbG9yID0gbmV3IFJHQigyNDAsMCwwKTsKLSAgICBlZGdlQ29sb3IgPSBuZXcgUkdCKDgsMTQzLDI1NSk7CisgICAgc2V0Tm9kZUNvbG9yKG5ldyBSR0IoMjQwLDAsMCkpOworICAgIHNldEVkZ2VDb2xvcihuZXcgUkdCKDgsMTQzLDI1NSkpOwogICB9CiAKICAgcHVibGljIHZvaWQgcHJldmlvdXNTdGF0ZSgpIHsKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9KSVRHcmFwaFdpZGdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L0pJVEdyYXBoV2lkZ2V0LmphdmEKaW5kZXggN2ViZmYyNS4uZTRhNTE1YiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L0pJVEdyYXBoV2lkZ2V0LmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L0pJVEdyYXBoV2lkZ2V0LmphdmEKQEAgLTE5LDYgKzE5LDcgQEAKICAgICovCiAgIHB1YmxpYyB2b2lkIHNldE5vZGVDb2xvcihSR0Igbm9kZUNvbG9yKSB7CiAgICAgdGhpcy5ub2RlQ29sb3IgPSBub2RlQ29sb3I7CisgICAgc2V0Tm9kZVByb3BlcnR5KCJjb2xvciIsY29udmVydFJHQlRvQ1NTU3RyaW5nKGdldE5vZGVDb2xvcigpKSk7CiAgIH0KIAogICAvKioKQEAgLTI4LDYgKzI5LDcgQEAKICAgICovCiAgIHB1YmxpYyB2b2lkIHNldEVkZ2VDb2xvcihSR0IgZWRnZUNvbG9yKSB7CiAgICAgdGhpcy5lZGdlQ29sb3IgPSBlZGdlQ29sb3I7CisgICAgc2V0RWRnZVByb3BlcnR5KCJjb2xvciIsY29udmVydFJHQlRvQ1NTU3RyaW5nKGdldEVkZ2VDb2xvcigpKSk7CiAgIH0KICAgCiAgIC8qKgpAQCAtNDYsNSArNDgsNDUgQEAKICAgICByZXR1cm4gZWRnZUNvbG9yOwogICB9CiAgIAorICAvKioKKyAgICogU2V0cyBhIGN1c3RvbSBwcm9wZXJ0eSBvZiB0aGUgZ3JhcGggaW1wbGVtZW50YXRpb24uCisgICAqIEBzZWUgPEEgaHJlZj0iaHR0cDovL3RoZWppdC5vcmciPkpJVCBBUEkgZG9jdW1lbnRhdGlvbiA8L0E+CisgICAqIEBwYXJhbSBwcm9wTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eQorICAgKiBAcGFyYW0gcHJvcFZhbHVlIC0gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eQorICAgKi8KKyAgcHVibGljIHZvaWQgc2V0UHJvcGVydHkgKFN0cmluZyBwcm9wTmFtZSwgU3RyaW5nIHByb3BWYWx1ZSkgeworICAgICBhZGRDb21tYW5kKCJzZXRQcm9wZXJ0eSIsIG5ldyBPYmplY3RbXSB7cHJvcE5hbWUsIHByb3BWYWx1ZX0pOworICB9CisgIAorICAvKioKKyAgICogU2V0cyBhIGN1c3RvbSBwcm9wZXJ0eSBvZiB0aGUgZ3JhcGggbm9kZSBpbXBsZW1lbnRhdGlvbi4KKyAgICogQHNlZSA8QSBocmVmPSJodHRwOi8vdGhlaml0Lm9yZyI+SklUIEFQSSBkb2N1bWVudGF0aW9uIDwvQT4KKyAgICogCisgICAqIEBwYXJhbSBwcm9wTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eQorICAgKiBAcGFyYW0gcHJvcFZhbHVlIC0gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eQorICAgKi8KKyAgcHVibGljIHZvaWQgc2V0Tm9kZVByb3BlcnR5KFN0cmluZyBwcm9wTmFtZSwgU3RyaW5nIHByb3BWYWx1ZSkKKyAgeworICAgICBhZGRDb21tYW5kKCJzZXROb2RlUHJvcGVydHkiLCBuZXcgT2JqZWN0W10ge3Byb3BOYW1lLCBwcm9wVmFsdWV9KTsKKyAgfQogCisgIC8qKgorICAgKiBTZXRzIGEgY3VzdG9tIHByb3BlcnR5IG9mIHRoZSBncmFwaCBlZGdlIGltcGxlbWVudGF0aW9uLgorICAgKiBAc2VlIDxBIGhyZWY9Imh0dHA6Ly90aGVqaXQub3JnIj5KSVQgQVBJIGRvY3VtZW50YXRpb24gPC9BPgorICAgKiBAcGFyYW0gcHJvcE5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkKKyAgICogQHBhcmFtIHByb3BWYWx1ZSAtIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkKKyAgICovCisgIHB1YmxpYyB2b2lkIHNldEVkZ2VQcm9wZXJ0eShTdHJpbmcgcHJvcE5hbWUsIFN0cmluZyBwcm9wVmFsdWUpCisgIHsKKyAgICAgYWRkQ29tbWFuZCgic2V0RWRnZVByb3BlcnR5IiwgbmV3IE9iamVjdFtdIHtwcm9wTmFtZSwgcHJvcFZhbHVlfSk7CisgIH0KKworICBwcm90ZWN0ZWQgU3RyaW5nIGNvbnZlcnRSR0JUb0NTU1N0cmluZyhSR0IgY29sb3IpIHsKKyAgICAgaWYgKGNvbG9yID09IG51bGwpIHJldHVybiAiIjsKKyAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigicmdiKCIpOworICAgICBzYi5hcHBlbmQoY29sb3IucmVkKS5hcHBlbmQoIiwiKS4KKyAgICAgYXBwZW5kKGNvbG9yLmdyZWVuKS5hcHBlbmQoIiwiKS4KKyAgICAgYXBwZW5kKGNvbG9yLmJsdWUpLmFwcGVuZCgiKSIpLnRvU3RyaW5nKCk7CisgICAgIHJldHVybiBzYi50b1N0cmluZygpOworICB9CiB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvUkdyYXBoLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvUkdyYXBoLmphdmEKaW5kZXggYjNiODFhYi4uYzU2NTlkZiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L1JHcmFwaC5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9SR3JhcGguamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMTAtMjAxMSBBdXN0aW4gUmlkZGxlCisgKiBDb3B5cmlnaHQg77+9IDIwMTAtMjAxMSBBdXN0aW4gUmlkZGxlCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCkBAIC0yMiw4ICsyMiw4IEBACiAgICAgcHVibGljIFJHcmFwaCggZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlICkKICAgICB7CiAgICAgICBzdXBlciggcGFyZW50LCBzdHlsZSApOwotICAgICAgbm9kZUNvbG9yID0gbmV3IFJHQigyMDQsMjIxLDIzOCk7Ci0gICAgICBlZGdlQ29sb3IgPSBuZXcgUkdCKDExOSwzNCwxMTkpOworICAgICAgc2V0Tm9kZUNvbG9yKG5ldyBSR0IoMjA0LDIyMSwyMzgpKTsKKyAgICAgIHNldEVkZ2VDb2xvcihuZXcgUkdCKDExOSwzNCwxMTkpKTsKICAgICB9CiAgICAgCiB9CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvU3BhY2VUcmVlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvU3BhY2VUcmVlLmphdmEKaW5kZXggNDk4NzYwZS4uYWM2M2U1YSAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L1NwYWNlVHJlZS5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9TcGFjZVRyZWUuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCCpIDIwMTAtMjAxMSBBdXN0aW4gUmlkZGxlCisgKiBDb3B5cmlnaHQg77+9IDIwMTAtMjAxMSBBdXN0aW4gUmlkZGxlCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCkBAIC0yMiw4ICsyMiw4IEBACiAgICAgcHVibGljIFNwYWNlVHJlZSggZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlICkKICAgICB7CiAgICAgICBzdXBlciggcGFyZW50LCBzdHlsZSApOwotICAgICAgbm9kZUNvbG9yID0gbmV3IFJHQigyNTUsMjIxLDEzNik7Ci0gICAgICBlZGdlQ29sb3IgPSBuZXcgUkdCKDAsMCwyMDApOworICAgICAgc2V0Tm9kZUNvbG9yKG5ldyBSR0IoMjU1LDIyMSwxMzYpKTsKKyAgICAgIHNldEVkZ2VDb2xvcihuZXcgUkdCKDAsMCwyMDApKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9pbnRlcm5hbC9KSVRHcmFwaExDQS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2ludGVybmFsL0pJVEdyYXBoTENBLmphdmEKaW5kZXggNjRmODFkNi4uODM5NDgyNiAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2ludGVybmFsL0pJVEdyYXBoTENBLmphdmEKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2ludGVybmFsL0pJVEdyYXBoTENBLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgqSAyMDEwLTIwMTEgQXVzdGluIFJpZGRsZQorICogQ29weXJpZ2h0IO+/vSAyMDEwLTIwMTEgQXVzdGluIFJpZGRsZQogICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIAogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwpAQCAtMTMsNDQgKzEzLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC5pbnRlcm5hbDsKIAotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0LkpJVEdyYXBoV2lkZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnJ3dC5saWZlY3ljbGUuSVdpZGdldEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uucnd0LmxpZmVjeWNsZS5KU1dyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5yd3QubGlmZWN5Y2xlLldpZGdldFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQ7CiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBKSVRHcmFwaExDQSBleHRlbmRzIEpJVFdpZGdldExDQSB7Ci0gIAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUF9FREdFX0NPTE9SID0gImVkZ2VDb2xvciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QX05PREVfQ09MT1IgPSAibm9kZUNvbG9yIjsKLSAgCi0gIAotICBwdWJsaWMgdm9pZCBwcmVzZXJ2ZVZhbHVlcyggZmluYWwgV2lkZ2V0IHdpZGdldCApIHsKLSAgICBzdXBlci5wcmVzZXJ2ZVZhbHVlcyh3aWRnZXQpOwotICAgIEpJVEdyYXBoV2lkZ2V0IHZXaWRnZXQgPSAoSklUR3JhcGhXaWRnZXQpd2lkZ2V0OwotICAgIElXaWRnZXRBZGFwdGVyIGFkYXB0ZXIgPSBXaWRnZXRVdGlsLmdldEFkYXB0ZXIoIHZXaWRnZXQgKTsKLSAgICBhZGFwdGVyLnByZXNlcnZlKCBQUk9QX05PREVfQ09MT1IsIGNvbnZlcnRSR0JUb0NTU1N0cmluZyh2V2lkZ2V0LmdldE5vZGVDb2xvcigpKSk7Ci0gICAgYWRhcHRlci5wcmVzZXJ2ZSggUFJPUF9FREdFX0NPTE9SLCBjb252ZXJ0UkdCVG9DU1NTdHJpbmcodldpZGdldC5nZXRFZGdlQ29sb3IoKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVuZGVyQ2hhbmdlcyggZmluYWwgV2lkZ2V0IHdpZGdldCApIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgc3VwZXIucmVuZGVyQ2hhbmdlcyh3aWRnZXQpOwotICAgIEpJVEdyYXBoV2lkZ2V0IHZXaWRnZXQgPSAoIEpJVEdyYXBoV2lkZ2V0ICl3aWRnZXQ7Ci0gICAgSlNXcml0ZXIgd3JpdGVyID0gSlNXcml0ZXIuZ2V0V3JpdGVyRm9yKCB2V2lkZ2V0ICk7Ci0gICAgd3JpdGVyLnNldCggUFJPUF9OT0RFX0NPTE9SLCBQUk9QX05PREVfQ09MT1IsIGNvbnZlcnRSR0JUb0NTU1N0cmluZyh2V2lkZ2V0LmdldE5vZGVDb2xvcigpKSk7Ci0gICAgd3JpdGVyLnNldCggUFJPUF9FREdFX0NPTE9SLCBQUk9QX0VER0VfQ09MT1IsIGNvbnZlcnRSR0JUb0NTU1N0cmluZyh2V2lkZ2V0LmdldEVkZ2VDb2xvcigpKSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5nIGNvbnZlcnRSR0JUb0NTU1N0cmluZyhSR0IgY29sb3IpIHsKLSAgICBpZiAoY29sb3IgPT0gbnVsbCkgcmV0dXJuICIiOwotICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoInJnYigiKTsKLSAgICBzYi5hcHBlbmQoY29sb3IucmVkKS5hcHBlbmQoIiwiKS4KLSAgICBhcHBlbmQoY29sb3IuZ3JlZW4pLmFwcGVuZCgiLCIpLgotICAgIGFwcGVuZChjb2xvci5ibHVlKS5hcHBlbmQoIikiKS50b1N0cmluZygpOwotICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICB9Ci0gIAorICAvL2VtcHR5IGltcGxlbWVudGF0aW9uIG5vdwogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9pbnRlcm5hbC9oeXBlcnRyZWVraXQvSHlwZXJUcmVlLmpzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2ludGVybmFsL2h5cGVydHJlZWtpdC9IeXBlclRyZWUuanMKaW5kZXggYzMzODE0ZC4uNDkyMDRhMCAxMDA2NDQKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2ludGVybmFsL2h5cGVydHJlZWtpdC9IeXBlclRyZWUuanMKKysrIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2ludGVybmFsL2h5cGVydHJlZWtpdC9IeXBlclRyZWUuanMKQEAgLTI1LDE5ICsyNSwxMSBAQAogCQl2aXNpYmxlIDogewogCQkJaW5pdCA6IiIsCiAJCQlhcHBseSA6ImxvYWQiCi0JICAgIH0sCi0JICAgIHdpZGdldERhdGEgOiB7Ci0JICAgIAlpbml0IDoiIiwKKwkgIH0sCisJICB3aWRnZXREYXRhIDogeworCSAgCWluaXQgOiIiLAogCQkJYXBwbHkgOiJyZWZyZXNoRGF0YSIKLQkgICAgfSwKLQkgICAgbm9kZUNvbG9yIDogewotCSAgICAJaW5pdCA6IiIsCi0JCQlhcHBseSA6ImFwcGx5Tm9kZUNvbG9yIgotCSAgICB9LAotCSAgICBlZGdlQ29sb3IgOiB7Ci0JICAgIAlpbml0IDoiIiwKLQkJCWFwcGx5IDoiYXBwbHlFZGdlQ29sb3IiCi0JICAgIH0KKwkgIH0KIAl9LAogCiAJZGVzdHJ1Y3QgOiBmdW5jdGlvbigpIHsKQEAgLTIxNCwzMiArMjA2LDQ0IEBACiAJCQl9CiAJCX0sCiAJCQotCQlhcHBseU5vZGVDb2xvciA6IGZ1bmN0aW9uIChjb2xvcikgewotCQkJdHJ5IHsKLQkJCQl0aGlzLmluZm8oIlNldHRpbmcgbm9kZSBjb2xvcjogIitjb2xvcik7Ci0JCQkJdmFyIGh0ID0gdGhpcy5fdml6OwotCQkJCWlmIChodCAhPSBudWxsKSB7Ci0JCQkJCWh0LmNvbnRyb2xsZXIuTm9kZS5jb2xvciA9IGNvbG9yOwotCQkJCQlodC5yZWZyZXNoKHRydWUpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChlKSB7Ci0JCQkJdGhpcy5pbmZvKGUpOwotCQkJfQotCQl9LAotCQkKLQkJYXBwbHlFZGdlQ29sb3IgOiBmdW5jdGlvbiAoY29sb3IpIHsKLQkJCXRyeSB7Ci0JCQkJdGhpcy5pbmZvKCJTZXR0aW5nIGVkZ2UgY29sb3I6ICIrY29sb3IpOwotCQkJCXZhciBodCA9IHRoaXMuX3ZpejsKLQkJCQlpZiAoaHQgIT0gbnVsbCkgewotCQkJCQlodC5jb250cm9sbGVyLkVkZ2UuY29sb3IgPSBjb2xvcjsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoZSkgewotCQkJCXRoaXMuaW5mbyhlKTsKLQkJCX0KLQkJfSwKKwkJc2V0UHJvcGVydHkgOiBmdW5jdGlvbiAocHJvcE5hbWUsIHByb3BWYWx1ZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgdmFyIHN0ID0gdGhpcy5fdml6OworICAgICAgICBpZiAoc3QgIT0gbnVsbCkgeworICAgICAgICAgIHN0LmNvbnRyb2xsZXJbcHJvcE5hbWVdID0gcHJvcFZhbHVlOworICAgICAgICAgIHN0LnJlZnJlc2goKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhpcy5pbmZvKGUpOworICAgICAgfQorICAgIH0sCisgICAgCisgICAgc2V0Tm9kZVByb3BlcnR5IDogZnVuY3Rpb24gKHByb3BOYW1lLCBwcm9wVmFsdWUpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHZhciBzdCA9IHRoaXMuX3ZpejsKKyAgICAgICAgaWYgKHN0ICE9IG51bGwpIHsKKyAgICAgICAgICBzdC5jb250cm9sbGVyLk5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlOworICAgICAgICAgIHN0LnJlZnJlc2goKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhpcy5pbmZvKGUpOworICAgICAgfQorICAgIH0sCisgICAgCisgICAgc2V0RWRnZVByb3BlcnR5IDogZnVuY3Rpb24gKHByb3BOYW1lLCBwcm9wVmFsdWUpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHZhciBzdCA9IHRoaXMuX3ZpejsKKyAgICAgICAgaWYgKHN0ICE9IG51bGwpIHsKKyAgICAgICAgICBzdC5jb250cm9sbGVyLkVkZ2VbcHJvcE5hbWVdID0gcHJvcFZhbHVlOworICAgICAgICAgIHN0LnJlZnJlc2goKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhpcy5pbmZvKGUpOworICAgICAgfQorICAgIH0sCiAJCQogCQlzZWxlY3ROb2RlIDogZnVuY3Rpb24gKGlkKSB7CiAJCQl0cnkgewpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2ludGVybmFsL3JncmFwaGtpdC9SR3JhcGguanMgYi9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvaW50ZXJuYWwvcmdyYXBoa2l0L1JHcmFwaC5qcwppbmRleCBlYTg2NzY0Li4zZGM5ZTA0IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvaW50ZXJuYWwvcmdyYXBoa2l0L1JHcmFwaC5qcworKysgYi9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvaW50ZXJuYWwvcmdyYXBoa2l0L1JHcmFwaC5qcwpAQCAtMjgsMTkgKzI4LDExIEBACiAJCXZpc2libGUgOiB7CiAJCQlpbml0IDoiIiwKIAkJCWFwcGx5IDoibG9hZCIKLQkgICAgfSwKLQkgICAgd2lkZ2V0RGF0YSA6IHsKLQkgICAgCWluaXQgOiIiLAorCSAgfSwKKwkgIHdpZGdldERhdGEgOiB7CisJICAgCWluaXQgOiIiLAogCQkJYXBwbHkgOiJyZWZyZXNoRGF0YSIKLQkgICAgfSwKLQkgICAgbm9kZUNvbG9yIDogewotCSAgICAJaW5pdCA6IiIsCi0JCQlhcHBseSA6ImFwcGx5Tm9kZUNvbG9yIgotCSAgICB9LAotCSAgICBlZGdlQ29sb3IgOiB7Ci0JICAgIAlpbml0IDoiIiwKLQkJCWFwcGx5IDoiYXBwbHlFZGdlQ29sb3IiCi0JICAgIH0KKwkgIH0KIAl9LAogCiAJZGVzdHJ1Y3QgOiBmdW5jdGlvbigpIHsKQEAgLTI0OCwzMSArMjQwLDQ0IEBACiAJCQl9CiAJCX0sCiAJCQotCQlhcHBseU5vZGVDb2xvciA6IGZ1bmN0aW9uIChjb2xvcikgewotCQkJdHJ5IHsKLQkJCQl2YXIgcmcgPSB0aGlzLl92aXo7Ci0JCQkJaWYgKHJnICE9IG51bGwpIHsKLQkJCQkJcmcuY29udHJvbGxlci5Ob2RlLmNvbG9yID0gY29sb3I7Ci0JCQkJCXJnLnJlZnJlc2goKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoZSkgewotCQkJCXRoaXMuaW5mbyhlKTsKLQkJCX0KLQkJfSwKLQkJCi0JCWFwcGx5RWRnZUNvbG9yIDogZnVuY3Rpb24gKGNvbG9yKSB7Ci0JCQl0cnkgewotCQkJCXZhciByZyA9IHRoaXMuX3ZpejsKLQkJCQlpZiAocmcgIT0gbnVsbCkgewotCQkJCQlyZy5jb250cm9sbGVyLkVkZ2UuY29sb3IgPSBjb2xvcjsKLQkJCQkJcmcucmVmcmVzaCgpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChlKSB7Ci0JCQkJdGhpcy5pbmZvKGUpOwotCQkJfQotCQl9LAorCQlzZXRQcm9wZXJ0eSA6IGZ1bmN0aW9uIChwcm9wTmFtZSwgcHJvcFZhbHVlKSB7CisgICAgICB0cnkgeworICAgICAgICB2YXIgc3QgPSB0aGlzLl92aXo7CisgICAgICAgIGlmIChzdCAhPSBudWxsKSB7CisgICAgICAgICAgc3QuY29udHJvbGxlcltwcm9wTmFtZV0gPSBwcm9wVmFsdWU7CisgICAgICAgICAgc3QucmVmcmVzaCgpOworICAgICAgICB9CisgICAgICB9CisgICAgICBjYXRjaCAoZSkgeworICAgICAgICB0aGlzLmluZm8oZSk7CisgICAgICB9CisgICAgfSwKKyAgICAKKyAgICBzZXROb2RlUHJvcGVydHkgOiBmdW5jdGlvbiAocHJvcE5hbWUsIHByb3BWYWx1ZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgdmFyIHN0ID0gdGhpcy5fdml6OworICAgICAgICBpZiAoc3QgIT0gbnVsbCkgeworICAgICAgICAgIHN0LmNvbnRyb2xsZXIuTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7CisgICAgICAgICAgc3QucmVmcmVzaCgpOworICAgICAgICB9CisgICAgICB9CisgICAgICBjYXRjaCAoZSkgeworICAgICAgICB0aGlzLmluZm8oZSk7CisgICAgICB9CisgICAgfSwKKyAgICAKKyAgICBzZXRFZGdlUHJvcGVydHkgOiBmdW5jdGlvbiAocHJvcE5hbWUsIHByb3BWYWx1ZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgdmFyIHN0ID0gdGhpcy5fdml6OworICAgICAgICBpZiAoc3QgIT0gbnVsbCkgeworICAgICAgICAgIHN0LmNvbnRyb2xsZXIuRWRnZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7CisgICAgICAgICAgc3QucmVmcmVzaCgpOworICAgICAgICB9CisgICAgICB9CisgICAgICBjYXRjaCAoZSkgeworICAgICAgICB0aGlzLmluZm8oZSk7CisgICAgICB9CisgICAgfSwKIAkJCiAJCXNlbGVjdE5vZGUgOiBmdW5jdGlvbiAoaWQpIHsKIAkJCXRyeSB7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvaW50ZXJuYWwvc3BhY2V0cmVla2l0L1NwYWNlVHJlZS5qcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9pbnRlcm5hbC9zcGFjZXRyZWVraXQvU3BhY2VUcmVlLmpzCmluZGV4IDFhODU1MDguLmQ4MjU4NGQgMTAwNjQ0Ci0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9pbnRlcm5hbC9zcGFjZXRyZWVraXQvU3BhY2VUcmVlLmpzCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9pbnRlcm5hbC9zcGFjZXRyZWVraXQvU3BhY2VUcmVlLmpzCkBAIC0yOCwxOSArMjgsMTEgQEAKIAkJdmlzaWJsZSA6IHsKIAkJCWluaXQgOiIiLAogCQkJYXBwbHkgOiJsb2FkIgotCSAgICB9LAotCSAgICB3aWRnZXREYXRhIDogewotCSAgICAJaW5pdCA6IiIsCi0JCQlhcHBseSA6InJlZnJlc2hEYXRhIgotCSAgICB9LAotCSAgICBub2RlQ29sb3IgOiB7Ci0JICAgIAlpbml0IDoiIiwKLQkJCWFwcGx5IDoiYXBwbHlOb2RlQ29sb3IiCi0JICAgIH0sCi0JICAgIGVkZ2VDb2xvciA6IHsKLQkgICAgCWluaXQgOiIiLAotCQkJYXBwbHkgOiJhcHBseUVkZ2VDb2xvciIKLQkgICAgfQorCSAgfSwKKwkgIHdpZGdldERhdGEgOiB7CisJICAJaW5pdCA6IiIsCisJCSAgYXBwbHkgOiJyZWZyZXNoRGF0YSIKKwkgIH0KIAl9LAogCiAJZGVzdHJ1Y3QgOiBmdW5jdGlvbigpIHsKQEAgLTk0LDcgKzg2LDcgQEAKIAkJCQl2aXpQYXJlbnQud2lkdGggPSB0aGlzLmdldFdpZHRoKCk7CiAJCQkJdml6UGFyZW50LmhlaWdodCA9IHRoaXMuZ2V0SGVpZ2h0KCk7CiAJCQkgICAgdmFyIHN0ID0gbmV3IFNUKGNhbnZhcywgewotCQkJICAgIAlvcmllbnRhdGlvbjogImxlZnQiLCAgCisJCQkgICAgCSAgb3JpZW50YXRpb246ICJsZWZ0IiwgIAogCQkJICAgIAkgIGxldmVsc1RvU2hvdzogMiwgIAogCQkJICAgIAkgIHN1YnRyZWVPZmZzZXQ6IDgsICAKIAkJCSAgICAJICBzaWJsaW5nT2Zmc2V0OiA1LCAgCkBAIC0xMDQsNyArOTYsNyBAQAogCQkJICAgIAkgIG11bHRpdHJlZTogZmFsc2UsICAKIAkJCSAgICAJICBpbmRlbnQ6IDEwLCAgCiAJCQkgICAgCSAgLy9zZXQgZGlzdGFuY2UgYmV0d2VlbiBub2RlIGFuZCBpdHMgY2hpbGRyZW4KLQkJCSAgICAgICAgICBsZXZlbERpc3RhbmNlOiA1MCwKKwkJCSAgICAgICAgbGV2ZWxEaXN0YW5jZTogNTAsCiAJCQkgICAgCSAgTm9kZTogeyAgCiAJCQkgICAgCSAgICBvdmVycmlkYWJsZTogdHJ1ZSwgIAogCQkJICAgIAkgICAgdHlwZTogJ3JlY3RhbmdsZScsICAKQEAgLTI1NiwzMSArMjQ4LDQ0IEBACiAJCQl9CiAJCX0sCiAJCQotCQlhcHBseU5vZGVDb2xvciA6IGZ1bmN0aW9uIChjb2xvcikgewotCQkJdHJ5IHsKLQkJCQl2YXIgc3QgPSB0aGlzLl92aXo7Ci0JCQkJaWYgKHN0ICE9IG51bGwpIHsKLQkJCQkJc3QuY29udHJvbGxlci5Ob2RlLmNvbG9yID0gY29sb3I7Ci0JCQkJCXN0LnJlZnJlc2goKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoZSkgewotCQkJCXRoaXMuaW5mbyhlKTsKLQkJCX0KLQkJfSwKLQkJCi0JCWFwcGx5RWRnZUNvbG9yIDogZnVuY3Rpb24gKGNvbG9yKSB7Ci0JCQl0cnkgewotCQkJCXZhciBzdCA9IHRoaXMuX3ZpejsKLQkJCQlpZiAoc3QgIT0gbnVsbCkgewotCQkJCQlzdC5jb250cm9sbGVyLkVkZ2UuY29sb3IgPSBjb2xvcjsKLQkJCQkJc3QucmVmcmVzaCgpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChlKSB7Ci0JCQkJdGhpcy5pbmZvKGUpOwotCQkJfQotCQl9LAorCQlzZXRQcm9wZXJ0eSA6IGZ1bmN0aW9uIChwcm9wTmFtZSwgcHJvcFZhbHVlKSB7CisgICAgICB0cnkgeworICAgICAgICB2YXIgc3QgPSB0aGlzLl92aXo7CisgICAgICAgIGlmIChzdCAhPSBudWxsKSB7CisgICAgICAgICAgc3QuY29udHJvbGxlcltwcm9wTmFtZV0gPSBwcm9wVmFsdWU7CisgICAgICAgICAgc3QucmVmcmVzaCgpOworICAgICAgICB9CisgICAgICB9CisgICAgICBjYXRjaCAoZSkgeworICAgICAgICB0aGlzLmluZm8oZSk7CisgICAgICB9CisgICAgfSwKKyAgICAKKyAgICBzZXROb2RlUHJvcGVydHkgOiBmdW5jdGlvbiAocHJvcE5hbWUsIHByb3BWYWx1ZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgdmFyIHN0ID0gdGhpcy5fdml6OworICAgICAgICBpZiAoc3QgIT0gbnVsbCkgeworICAgICAgICAgIHN0LmNvbnRyb2xsZXIuTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7CisgICAgICAgICAgc3QucmVmcmVzaCgpOworICAgICAgICB9CisgICAgICB9CisgICAgICBjYXRjaCAoZSkgeworICAgICAgICB0aGlzLmluZm8oZSk7CisgICAgICB9CisgICAgfSwKKyAgICAKKyAgICBzZXRFZGdlUHJvcGVydHkgOiBmdW5jdGlvbiAocHJvcE5hbWUsIHByb3BWYWx1ZSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgdmFyIHN0ID0gdGhpcy5fdml6OworICAgICAgICBpZiAoc3QgIT0gbnVsbCkgeworICAgICAgICAgIHN0LmNvbnRyb2xsZXIuRWRnZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7CisgICAgICAgICAgc3QucmVmcmVzaCgpOworICAgICAgICB9CisgICAgICB9CisgICAgICBjYXRjaCAoZSkgeworICAgICAgICB0aGlzLmluZm8oZSk7CisgICAgICB9CisgICAgfSwKIAkJCiAJCXNlbGVjdE5vZGUgOiBmdW5jdGlvbiAoaWQpIHsKIAkJCXRyeSB7CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvaW50ZXJuYWwvc3BhY2V0cmVla2l0L1NwYWNlVHJlZUxDQS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0L3NyYy9vcmcvZWNsaXBzZS9yYXAvcnd0L3Zpc3VhbGl6YXRpb24vaml0L2ludGVybmFsL3NwYWNldHJlZWtpdC9TcGFjZVRyZWVMQ0EuamF2YQppbmRleCA0YmJlOTRlLi5lZjRjYzA2IDEwMDY0NAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQvc3JjL29yZy9lY2xpcHNlL3JhcC9yd3QvdmlzdWFsaXphdGlvbi9qaXQvaW50ZXJuYWwvc3BhY2V0cmVla2l0L1NwYWNlVHJlZUxDQS5qYXZhCisrKyBiL2J1bmRsZXMvb3JnLmVjbGlwc2UucmFwLnJ3dC52aXN1YWxpemF0aW9uLmppdC9zcmMvb3JnL2VjbGlwc2UvcmFwL3J3dC92aXN1YWxpemF0aW9uL2ppdC9pbnRlcm5hbC9zcGFjZXRyZWVraXQvU3BhY2VUcmVlTENBLmphdmEKQEAgLTEyLDggKzEyLDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0LmludGVybmFsLnNwYWNldHJlZWtpdDsKIAoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5yYXAucnd0LnZpc3VhbGl6YXRpb24uaml0LkpJVEdyYXBoV2lkZ2V0OwogaW1wb3J0IG9yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQuU3BhY2VUcmVlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnJhcC5yd3QudmlzdWFsaXphdGlvbi5qaXQuaW50ZXJuYWwuSklUR3JhcGhMQ0E7CitpbXBvcnQgb3JnLmVjbGlwc2Uucnd0LmxpZmVjeWNsZS5KU1dyaXRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQ7CiAKIHB1YmxpYyBjbGFzcyBTcGFjZVRyZWVMQ0EgZXh0ZW5kcyBKSVRHcmFwaExDQSB7CiAK