ZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDE3MzIzOWQuLmJiMmI2YjYgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMjEsMyArMjEsNCBAQAogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBFeHBvcnQtUGFja2FnZTogY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmCitJbXBvcnQtUGFja2FnZTogY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnNjb3BpbmcKZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvYmluLy5wcm9qZWN0IGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9iaW4vLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlODlhN2UuLjAwMDAwMDAKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9iaW4vLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UueHRleHQudWkuc2hhcmVkLnh0ZXh0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnh0ZXh0LnVpLnNoYXJlZC54dGV4dE5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL0dlbmVyYXRlUHJvdG9idWYubXdlMiBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9HZW5lcmF0ZVByb3RvYnVmLm13ZTIKaW5kZXggMDk3ODUyYi4uNDczYTAxNiAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL0dlbmVyYXRlUHJvdG9idWYubXdlMgorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvR2VuZXJhdGVQcm90b2J1Zi5td2UyCkBAIC00MiwxNCArNDIsMTQgQEAKICAgICAgIHVyaSA9IGdyYW1tYXJVUkkKICAgICAgIGZpbGVFeHRlbnNpb25zID0gZmlsZS5leHRlbnNpb25zCiAKLSAgICAgIC8vIEphdmEgQVBJIHRvIGFjY2VzcyBncmFtbWFyIGVsZW1lbnRzIChyZXF1aXJlZCBieSBzZXZlcmFsIG90aGVyIGZyYWdtZW50cykKKyAgICAgIC8vIEphdmEgQVBJdG8gYWNjZXNzIGdyYW1tYXIgZWxlbWVudHMgKHJlcXVpcmVkIGJ5IHNldmVyYWwgb3RoZXIgZnJhZ21lbnRzKQogICAgICAgZnJhZ21lbnQgPSBncmFtbWFyQWNjZXNzLkdyYW1tYXJBY2Nlc3NGcmFnbWVudCB7fQogCi0gICAgICAvLyBnZW5lcmF0ZXMgSmF2YSBBUEkgZm9yIHRoZSBnZW5lcmF0ZWQgRVBhY2thZ2VzIAorICAgICAgLy8gZ2VuZXJhdGVzIEphdmEgQVBJZm9yIHRoZSBnZW5lcmF0ZWQgRVBhY2thZ2VzCiAgICAgICBmcmFnbWVudCA9IGVjb3JlLkVNRkdlbmVyYXRvckZyYWdtZW50IHsKICAgICAgIC8vIHJlZmVyZW5jZWRHZW5Nb2RlbHMgPSAidXJpIHRvIGdlbm1vZGVsLCB1cmkgdG8gbmV4dCBnZW5tb2RlbCIKICAgICAgIH0KLSAgICAgIAorCiAgICAgICAvLyBTZXJpYWxpemVyIDIuMAogICAgICAgZnJhZ21lbnQgPSBzZXJpYWxpemVyLlNlcmlhbGl6ZXJGcmFnbWVudCB7CiAgICAgICAgIGdlbmVyYXRlU3R1YiA9IGZhbHNlCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAvLyB0aGUgc2VyaWFsaXphdGlvbiBjb21wb25lbnQKICAgICAgIC8vIGZyYWdtZW50ID0gcGFyc2VUcmVlQ29uc3RydWN0b3IuUGFyc2VUcmVlQ29uc3RydWN0b3JGcmFnbWVudCB7fQogCi0gICAgICAvLyBhIGN1c3RvbSBSZXNvdXJjZUZhY3RvcnkgZm9yIHVzZSB3aXRoIEVNRiAKKyAgICAgIC8vIGEgY3VzdG9tIFJlc291cmNlRmFjdG9yeSBmb3IgdXNlIHdpdGggRU1GCiAgICAgICBmcmFnbWVudCA9IHJlc291cmNlRmFjdG9yeS5SZXNvdXJjZUZhY3RvcnlGcmFnbWVudCB7CiAgICAgICAgIGZpbGVFeHRlbnNpb25zID0gZmlsZS5leHRlbnNpb25zCiAgICAgICB9CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIC8vIH0KICAgICAgIH0KIAotICAgICAgLy8gamF2YS1iYXNlZCBBUEkgZm9yIHZhbGlkYXRpb24gCisgICAgICAvLyBqYXZhLWJhc2VkIEFQSWZvciB2YWxpZGF0aW9uCiAgICAgICBmcmFnbWVudCA9IHZhbGlkYXRpb24uSmF2YVZhbGlkYXRvckZyYWdtZW50IHsKICAgICAgIC8vIGNvbXBvc2VkQ2hlY2sgPSAib3JnLmVjbGlwc2UueHRleHQudmFsaWRhdGlvbi5JbXBvcnRVcmlWYWxpZGF0b3IiCiAgICAgICAvLyBjb21wb3NlZENoZWNrID0gIm9yZy5lY2xpcHNlLnh0ZXh0LnZhbGlkYXRpb24uTmFtZXNBcmVVbmlxdWVWYWxpZGF0b3IiCkBAIC04MSw0MSArODEsNDEgQEAKICAgICAgIC8vIGZyYWdtZW50ID0gc2NvcGluZy5JbXBvcnRVUklTY29waW5nRnJhZ21lbnQge30KICAgICAgIC8vIGZyYWdtZW50ID0gZXhwb3J0aW5nLlNpbXBsZU5hbWVzRnJhZ21lbnQge30KIAotICAgICAgLy8gc2NvcGluZyBhbmQgZXhwb3J0aW5nIEFQSSAKLSAgICAgIGZyYWdtZW50ID0gc2NvcGluZy5JbXBvcnROYW1lc3BhY2VzU2NvcGluZ0ZyYWdtZW50IHt9CisgICAgICAvLyBzY29waW5nIGFuZCBleHBvcnRpbmcgQVBJCisgICAgICBmcmFnbWVudCA9IHNjb3BpbmcuUHJvdG9idWZJbXBvcnROYW1lc3BhY2VzU2NvcGluZ0ZyYWdtZW50IHt9CiAgICAgICBmcmFnbWVudCA9IGV4cG9ydGluZy5RdWFsaWZpZWROYW1lc0ZyYWdtZW50IHt9CiAgICAgICBmcmFnbWVudCA9IGJ1aWxkZXIuQnVpbGRlckludGVncmF0aW9uRnJhZ21lbnQge30KIAotICAgICAgLy8gZm9ybWF0dGVyIEFQSSAKKyAgICAgIC8vIGZvcm1hdHRlciBBUEkKICAgICAgIGZyYWdtZW50ID0gZm9ybWF0dGluZy5Gb3JtYXR0ZXJGcmFnbWVudCB7fQogCi0gICAgICAvLyBsYWJlbGluZyBBUEkgCisgICAgICAvLyBsYWJlbGluZyBBUEkKICAgICAgIGZyYWdtZW50ID0gbGFiZWxpbmcuTGFiZWxQcm92aWRlckZyYWdtZW50IHt9CiAKLSAgICAgIC8vIG91dGxpbmUgQVBJIAorICAgICAgLy8gb3V0bGluZSBBUEkKICAgICAgIGZyYWdtZW50ID0gb3V0bGluZS5PdXRsaW5lVHJlZVByb3ZpZGVyRnJhZ21lbnQge30KICAgICAgIGZyYWdtZW50ID0gb3V0bGluZS5RdWlja091dGxpbmVGcmFnbWVudCB7fQogCi0gICAgICAvLyBxdWlja2ZpeCBBUEkgCisgICAgICAvLyBxdWlja2ZpeCBBUEkKICAgICAgIGZyYWdtZW50ID0gcXVpY2tmaXguUXVpY2tmaXhQcm92aWRlckZyYWdtZW50IHt9CiAKICAgICAgIC8vIHJlbmFtZSByZWZhY3RvcmluZwogICAgICAgZnJhZ21lbnQgPSByZWZhY3RvcmluZy5SZWZhY3RvckVsZW1lbnROYW1lRnJhZ21lbnQge30KIAotICAgICAgLy8gY29udGVudCBhc3Npc3QgQVBJICAKKyAgICAgIC8vIGNvbnRlbnQgYXNzaXN0IEFQSQogICAgICAgZnJhZ21lbnQgPSBjb250ZW50QXNzaXN0LkphdmFCYXNlZENvbnRlbnRBc3Npc3RGcmFnbWVudCB7fQogCi0gICAgICAvLyBnZW5lcmF0ZXMgYSBtb3JlIGxpZ2h0d2VpZ2h0IEFudGxyIHBhcnNlciBhbmQgbGV4ZXIgdGFpbG9yZWQgZm9yIGNvbnRlbnQgYXNzaXN0ICAKKyAgICAgIC8vIGdlbmVyYXRlcyBhIG1vcmUgbGlnaHR3ZWlnaHQgQW50bHIgcGFyc2VyIGFuZCBsZXhlciB0YWlsb3JlZCBmb3IgY29udGVudCBhc3Npc3QKICAgICAgIGZyYWdtZW50ID0gcGFyc2VyLmFudGxyLlh0ZXh0QW50bHJVaUdlbmVyYXRvckZyYWdtZW50IHsKICAgICAgICAgLy8gb3B0aW9ucyA9IHsKICAgICAgICAgLy8gICBiYWNrdHJhY2sgPSB0cnVlCiAgICAgICAgIC8vIH0KICAgICAgIH0KIAotICAgICAgLy8gcHJvamVjdCB3aXphcmQgKG9wdGlvbmFsKSAKKyAgICAgIC8vIHByb2plY3Qgd2l6YXJkIChvcHRpb25hbCkKICAgICAgIC8vIGZyYWdtZW50ID0gcHJvamVjdFdpemFyZC5TaW1wbGVQcm9qZWN0V2l6YXJkRnJhZ21lbnQgewotICAgICAgLy8gCQlnZW5lcmF0b3JQcm9qZWN0TmFtZSA9ICIke3Byb2plY3ROYW1lfS5nZW5lcmF0b3IiIAotICAgICAgLy8JCW1vZGVsRmlsZUV4dGVuc2lvbiA9IGZpbGUuZXh0ZW5zaW9ucworICAgICAgLy8gICBnZW5lcmF0b3JQcm9qZWN0TmFtZSA9ICIke3Byb2plY3ROYW1lfS5nZW5lcmF0b3IiCisgICAgICAvLyAgIG1vZGVsRmlsZUV4dGVuc2lvbiA9IGZpbGUuZXh0ZW5zaW9ucwogICAgICAgLy8gfQogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL1Byb3RvYnVmLnh0ZXh0IGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL1Byb3RvYnVmLnh0ZXh0CmluZGV4IDJhMzliYTYuLjJiOTllYTcgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9Qcm90b2J1Zi54dGV4dAorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWYueHRleHQKQEAgLTI0LDcgKzI0LDcgQEAKICAgUGFja2FnZSB8IEltcG9ydCB8IE9wdGlvbiB8IENvbXBsZXhUeXBlIHwgVHlwZUV4dGVuc2lvbiB8IFNlcnZpY2U7CiAKIFBhY2thZ2U6Ci0gICdwYWNrYWdlJyBuYW1lPVBhY2thZ2VOYW1lICgnOycpKzsKKyAgJ3BhY2thZ2UnIGltcG9ydGVkTmFtZXNwYWNlPVBhY2thZ2VOYW1lICgnOycpKzsKIAogUGFja2FnZU5hbWU6CiAgIElkT3JSZXNlcnZlZFdvcmQgKCcuJyBJZE9yUmVzZXJ2ZWRXb3JkKSo7CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1ZkltcG9ydE5hbWVzcGFjZXNTY29waW5nRnJhZ21lbnQuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2I2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1ZkltcG9ydE5hbWVzcGFjZXNTY29waW5nRnJhZ21lbnQuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IEdvb2dsZSBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlCisgKiBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKgorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqLworcGFja2FnZSBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuc2NvcGluZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LmdlbmVyYXRvci5zY29waW5nLkFic3RyYWN0U2NvcGluZ0ZyYWdtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuSUdsb2JhbFNjb3BlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuc2NvcGluZy5JU2NvcGVQcm92aWRlcjsKKworcHVibGljIGNsYXNzIFByb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0U2NvcGluZ0ZyYWdtZW50IHsKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBDbGFzczw/IGV4dGVuZHMgSUdsb2JhbFNjb3BlUHJvdmlkZXI+IGdldEdsb2JhbFNjb3BlUHJvdmlkZXIoKSB7CisgICAgcmV0dXJuIFByb3RvYnVmSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlci5jbGFzczsKKyAgfQorCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIElTY29wZVByb3ZpZGVyPiBnZXRMb2NhbFNjb3BlUHJvdmlkZXIoKSB7CisgICAgcmV0dXJuIFByb3RvYnVmSW1wb3J0ZWROYW1lc3BhY2VBd2FyZUxvY2FsU2NvcGVQcm92aWRlci5jbGFzczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnROYW1lc3BhY2VzU2NvcGluZ0ZyYWdtZW50LnhwdCBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudC54cHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjNmNjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudC54cHQKQEAgLTAsMCArMSwyMyBAQAorq1JFTbsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggaXRlbWlzIEFHIChodHRwOi8vd3d3Lml0ZW1pcy5ldSkgYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiurRU5EUkVNuworCiurSU1QT1JUIG9yZzo6ZWNsaXBzZTo6eHRleHS7CisKKworq0RFRklORSBhZGRUb1BsdWdpblhtbFJ0KFN0cmluZyBzY29wZVByb3ZpZGVyU3VwZXJDbGFzc05hbWUsIEJvb2xlYW4gZ2VuZXJhdGVTdHViLCBCb29sZWFuIGdlbmVyYXRlWHRlbmRTdHViKSBGT1IgR3JhbW1hcrurRU5EREVGSU5FuworCiurREVGSU5FIGFkZFRvUGx1Z2luWG1sVWkoU3RyaW5nIHNjb3BlUHJvdmlkZXJTdXBlckNsYXNzTmFtZSwgQm9vbGVhbiBnZW5lcmF0ZVN0dWIsIEJvb2xlYW4gZ2VuZXJhdGVYdGVuZFN0dWIpIEZPUiBHcmFtbWFyu6tFTkRERUZJTkW7CisKK6tERUZJTkUgYWRkVG9TdGFuZGFsb25lU2V0dXAoU3RyaW5nIHNjb3BlUHJvdmlkZXJTdXBlckNsYXNzTmFtZSwgQm9vbGVhbiBnZW5lcmF0ZVN0dWIsIEJvb2xlYW4gZ2VuZXJhdGVYdGVuZFN0dWIpIEZPUiBHcmFtbWFyu6tFTkRERUZJTkW7CisKK6tERUZJTkUgZ2VuZXJhdGUoU3RyaW5nIHNjb3BlUHJvdmlkZXJTdXBlckNsYXNzTmFtZSwgQm9vbGVhbiBnZW5lcmF0ZVN0dWIsIEJvb2xlYW4gZ2VuZXJhdGVYdGVuZFN0dWIpIEZPUiBHcmFtbWFyuworCatFWFBBTkQgZ2VuZXJhdG9yOjpzY29waW5nOjpBYnN0cmFjdFNjb3BpbmdGcmFnbWVudDo6Z2VuZXJhdGVTY29wZVByb3ZpZGVyKHNjb3BlUHJvdmlkZXJTdXBlckNsYXNzTmFtZSwgZ2VuZXJhdGVTdHViLCBnZW5lcmF0ZVh0ZW5kU3R1Yim7CiurRU5EREVGSU5FuwpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL01vZGVsT2JqZWN0c19wYWNrYWdlT2ZfVGVzdC5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL01vZGVsT2JqZWN0c19wYWNrYWdlT2ZfVGVzdC5qYXZhCmluZGV4IDAxNDEyZDUuLjA0M2Q0NjcgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9Nb2RlbE9iamVjdHNfcGFja2FnZU9mX1Rlc3QuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL21vZGVsL3V0aWwvTW9kZWxPYmplY3RzX3BhY2thZ2VPZl9UZXN0LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgQFRlc3QgcHVibGljIHZvaWQgc2hvdWxkX3JldHVybl9wYWNrYWdlX2lmX3Byb3RvX2hhc19vbmUoKSB7CiAgICAgTWVzc2FnZUZpZWxkIGZpZWxkID0geHRleHQuZmluZCgiaWQiLCBNZXNzYWdlRmllbGQuY2xhc3MpOwogICAgIFBhY2thZ2UgYVBhY2thZ2UgPSBtb2RlbE9iamVjdHMucGFja2FnZU9mKGZpZWxkKTsKLSAgICBhc3NlcnRUaGF0KGFQYWNrYWdlLmdldE5hbWUoKSwgZXF1YWxUbygicGVyc29uLnRlc3QiKSk7CisgICAgYXNzZXJ0VGhhdChhUGFja2FnZS5nZXRJbXBvcnRlZE5hbWVzcGFjZSgpLCBlcXVhbFRvKCJwZXJzb24udGVzdCIpKTsKICAgfQogCiAgIC8vIHN5bnRheCA9ICJwcm90bzIiOwpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL1BhY2thZ2VzX2FyZVJlbGF0ZWRfVGVzdC5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL1BhY2thZ2VzX2FyZVJlbGF0ZWRfVGVzdC5qYXZhCmluZGV4IDJlYmZhMTIuLmM5YWVlYzQgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlc19hcmVSZWxhdGVkX1Rlc3QuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL21vZGVsL3V0aWwvUGFja2FnZXNfYXJlUmVsYXRlZF9UZXN0LmphdmEKQEAgLTQ5LDM2ICs0OSwzNiBAQAogICAgICAgICAibWF5IgogICAgIH07CiAgICAgcDEgPSBtb2NrKFBhY2thZ2UuY2xhc3MpOwotICAgIHdoZW4ocDEuZ2V0TmFtZSgpKS50aGVuUmV0dXJuKGJhc2VOYW1lKTsKKyAgICB3aGVuKHAxLmdldEltcG9ydGVkTmFtZXNwYWNlKCkpLnRoZW5SZXR1cm4oYmFzZU5hbWUpOwogICAgIHAyID0gbW9jayhQYWNrYWdlLmNsYXNzKTsKICAgfQogCiAgIEBUZXN0IHB1YmxpYyB2b2lkIHNob3VsZF9yZXR1cm5fdHJ1ZV9pZl9wYWNrYWdlc19hcmVfZXF1YWwoKSB7Ci0gICAgd2hlbihwMi5nZXROYW1lKCkpLnRoZW5SZXR1cm4oYmFzZU5hbWUpOworICAgIHdoZW4ocDIuZ2V0SW1wb3J0ZWROYW1lc3BhY2UoKSkudGhlblJldHVybihiYXNlTmFtZSk7CiAgICAgYXNzZXJ0VHJ1ZShwYWNrYWdlcy5hcmVSZWxhdGVkKHAxLCBwMikpOwogICB9CiAKICAgQFRlc3QgcHVibGljIHZvaWQgc2hvdWxkX3JldHVybl90cnVlX3NlY29uZF9pc19zdWJQYWNrYWdlX29mX2ZpcnN0KCkgewogICAgIGZvciAoU3RyaW5nIG5hbWUgOiBzdWJwYWNrYWdlTmFtZXMpIHsKLSAgICAgIHdoZW4ocDIuZ2V0TmFtZSgpKS50aGVuUmV0dXJuKG5hbWUpOworICAgICAgd2hlbihwMi5nZXRJbXBvcnRlZE5hbWVzcGFjZSgpKS50aGVuUmV0dXJuKG5hbWUpOwogICAgICAgYXNzZXJ0VHJ1ZShwYWNrYWdlcy5hcmVSZWxhdGVkKHAxLCBwMikpOwogICAgIH0KICAgfQogCiAgIEBUZXN0IHB1YmxpYyB2b2lkIHNob3VsZF9yZXR1cm5fdHJ1ZV9maXJzdF9pc19zdWJQYWNrYWdlX29mX3NlY29uZCgpIHsKICAgICBmb3IgKFN0cmluZyBuYW1lIDogc3VicGFja2FnZU5hbWVzKSB7Ci0gICAgICB3aGVuKHAyLmdldE5hbWUoKSkudGhlblJldHVybihuYW1lKTsKKyAgICAgIHdoZW4ocDIuZ2V0SW1wb3J0ZWROYW1lc3BhY2UoKSkudGhlblJldHVybihuYW1lKTsKICAgICAgIGFzc2VydFRydWUocGFja2FnZXMuYXJlUmVsYXRlZChwMiwgcDEpKTsKICAgICB9CiAgIH0KIAogICBAVGVzdCBwdWJsaWMgdm9pZCBzaG91bGRfcmV0dXJuX2ZhbHNlX2lmX3NlY29uZF9zdGFydHNfd2l0aF9mZXdfc2VnbWVudHNfb2ZfZmlyc3RfYnV0X2lzX25vdF9zdWJwYWNrYWdlKCkgewotICAgIHdoZW4ocDIuZ2V0TmFtZSgpKS50aGVuUmV0dXJuKCJtYXkudGhlLnJpbmciKTsKKyAgICB3aGVuKHAyLmdldEltcG9ydGVkTmFtZXNwYWNlKCkpLnRoZW5SZXR1cm4oIm1heS50aGUucmluZyIpOwogICAgIGFzc2VydEZhbHNlKHBhY2thZ2VzLmFyZVJlbGF0ZWQocDEsIHAyKSk7CiAgIH0KIAogICBAVGVzdCBwdWJsaWMgdm9pZCBzaG91bGRfcmV0dXJuX2ZhbHNlX2lmX25hbWVzX2FyZV9jb21wbGV0ZWx5X2RpZmZlcmVudCgpIHsKLSAgICB3aGVuKHAyLmdldE5hbWUoKSkudGhlblJldHVybigicGVhY2UuZG9nIik7CisgICAgd2hlbihwMi5nZXRJbXBvcnRlZE5hbWVzcGFjZSgpKS50aGVuUmV0dXJuKCJwZWFjZS5kb2ciKTsKICAgICBhc3NlcnRGYWxzZShwYWNrYWdlcy5hcmVSZWxhdGVkKHAxLCBwMikpOwogICB9CiB9CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vSW1wb3J0VmFsaWRhdG9yX2NoZWNrVW5rbm93blN5bnRheEltcG9ydHNfd2l0aE5vblByb3RvMkltcG9ydHNfVGVzdHMuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9JbXBvcnRWYWxpZGF0b3JfY2hlY2tVbmtub3duU3ludGF4SW1wb3J0c193aXRoTm9uUHJvdG8ySW1wb3J0c19UZXN0cy5qYXZhCmluZGV4IGM4YjkxYmMuLjQ3ZTRlNmMgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9JbXBvcnRWYWxpZGF0b3JfY2hlY2tVbmtub3duU3ludGF4SW1wb3J0c193aXRoTm9uUHJvdG8ySW1wb3J0c19UZXN0cy5qYXZhCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9JbXBvcnRWYWxpZGF0b3JfY2hlY2tVbmtub3duU3ludGF4SW1wb3J0c193aXRoTm9uUHJvdG8ySW1wb3J0c19UZXN0cy5qYXZhCkBAIC0xMCw3ICsxMCw3IEBACiAKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmp1bml0LmNvcmUuSW50ZWdyYXRpb25UZXN0TW9kdWxlLmludGVncmF0aW9uVGVzdE1vZHVsZTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmp1bml0LmNvcmUuWHRleHRSdWxlLm92ZXJyaWRlUnVudGltZU1vZHVsZVdpdGg7Ci1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZlBhY2thZ2UuTGl0ZXJhbHMuSU1QT1JUX19QQVRIOworaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uTWVzc2FnZXMuaW1wb3J0aW5nVW5zdXBwb3J0ZWRTeW50YXg7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLnh0ZXh0LnZhbGlkYXRpb24uVmFsaWRhdGlvbk1lc3NhZ2VBY2NlcHRvci5JTlNJR05JRklDQU5UX0lOREVYOwogaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLm1vY2s7CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgcHJpdmF0ZSB2b2lkIHZlcmlmeVRoYXRJbXBvcnRpbmdVbmtub3duU3ludGF4RmlsZUNyZWF0ZWRXYXJuaW5nKEltcG9ydCBhbkltcG9ydCkgewogICAgIHZlcmlmeShtZXNzYWdlQWNjZXB0b3IpLmFjY2VwdFdhcm5pbmcoaW1wb3J0aW5nVW5zdXBwb3J0ZWRTeW50YXgsCiAgICAgICAgIGFuSW1wb3J0LAotICAgICAgICBJTVBPUlRfX1BBVEgsCisgICAgICAgIFBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRSwKICAgICAgICAgSU5TSUdOSUZJQ0FOVF9JTkRFWCwKICAgICAgICAgbnVsbCwKICAgICAgICAgbmV3IFN0cmluZ1swXSk7CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yX2NoZWNrT25seU9uZVBhY2thZ2VEZWZpbml0aW9uX1Rlc3QuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9Qcm90b2J1ZkphdmFWYWxpZGF0b3JfY2hlY2tPbmx5T25lUGFja2FnZURlZmluaXRpb25fVGVzdC5qYXZhCmluZGV4IGRmODgwZjQuLjViZjU0NTcgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9Qcm90b2J1ZkphdmFWYWxpZGF0b3JfY2hlY2tPbmx5T25lUGFja2FnZURlZmluaXRpb25fVGVzdC5qYXZhCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9Qcm90b2J1ZkphdmFWYWxpZGF0b3JfY2hlY2tPbmx5T25lUGFja2FnZURlZmluaXRpb25fVGVzdC5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiAKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmp1bml0LmNvcmUuVW5pdFRlc3RNb2R1bGUudW5pdFRlc3RNb2R1bGU7CiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5qdW5pdC5jb3JlLlh0ZXh0UnVsZS5vdmVycmlkZVJ1bnRpbWVNb2R1bGVXaXRoOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX05BTUU7CitpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZlBhY2thZ2UuTGl0ZXJhbHMuUEFDS0FHRV9fSU1QT1JURURfTkFNRVNQQUNFOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudmFsaWRhdGlvbi5NZXNzYWdlcy5tdWx0aXBsZVBhY2thZ2VzOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudmFsaWRhdGlvbi5Qcm90b2J1ZkphdmFWYWxpZGF0b3IuTU9SRV9USEFOX09ORV9QQUNLQUdFX0VSUk9SOwogCkBAIC01MSw3ICs1MSw3IEBACiAgIEBUZXN0IHB1YmxpYyB2b2lkIHNob3VsZF9jcmVhdGVfZXJyb3JfaWZfdGhlcmVfYXJlX21vcmVfdGhhbl9vbmVfcGFja2FnZV9kZWZpbml0aW9ucygpIHsKICAgICBQYWNrYWdlIHAgPSB4dGV4dC5maW5kKCJjb20uZ29vZ2xlLmVjbGlwc2UiLCBQYWNrYWdlLmNsYXNzKTsKICAgICB2YWxpZGF0b3IuY2hlY2tPbmx5T25lUGFja2FnZURlZmluaXRpb24ocCk7Ci0gICAgdmVyaWZ5KG1lc3NhZ2VBY2NlcHRvcikuYWNjZXB0RXJyb3IobXVsdGlwbGVQYWNrYWdlcywgcCwgUEFDS0FHRV9fTkFNRSwgSU5TSUdOSUZJQ0FOVF9JTkRFWCwgTU9SRV9USEFOX09ORV9QQUNLQUdFX0VSUk9SKTsKKyAgICB2ZXJpZnkobWVzc2FnZUFjY2VwdG9yKS5hY2NlcHRFcnJvcihtdWx0aXBsZVBhY2thZ2VzLCBwLCBQQUNLQUdFX19JTVBPUlRFRF9OQU1FU1BBQ0UsIElOU0lHTklGSUNBTlRfSU5ERVgsIE1PUkVfVEhBTl9PTkVfUEFDS0FHRV9FUlJPUik7CiAgIH0KIAogICAvLyBzeW50YXggPSAicHJvdG8yIjsKZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3VpL1Byb3RvYnVmVWlNb2R1bGUuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3VpL1Byb3RvYnVmVWlNb2R1bGUuamF2YQppbmRleCAwYjkwMTcxLi5hNDBkNDNhIDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9Qcm90b2J1ZlVpTW9kdWxlLmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvUHJvdG9idWZVaU1vZHVsZS5qYXZhCkBAIC00Myw2ICs0Myw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5kb2N1bWVudGF0aW9uLklFT2JqZWN0RG9jdW1lbnRhdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LmlkZS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuSVNlbWFudGljSGlnaGxpZ2h0aW5nQ2FsY3VsYXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5wYXJzZXIuSVBhcnNlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5yZXNvdXJjZS5JUmVzb3VyY2VTZXJ2aWNlUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkuTGFuZ3VhZ2VTcGVjaWZpYzsKQEAgLTUzLDcgKzU0LDYgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5lZGl0b3IucHJlZmVyZW5jZXMuSVByZWZlcmVuY2VTdG9yZUluaXRpYWxpemVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnVpLmVkaXRvci5zeW50YXhjb2xvcmluZy5BYnN0cmFjdEFudGxyVG9rZW5Ub0F0dHJpYnV0ZUlkTWFwcGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnVpLmVkaXRvci5zeW50YXhjb2xvcmluZy5JSGlnaGxpZ2h0aW5nQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuSVNlbWFudGljSGlnaGxpZ2h0aW5nQ2FsY3VsYXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5yZXNvdXJjZS5JUmVzb3VyY2VTZXRQcm92aWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5yZXNvdXJjZS5TaW1wbGVSZXNvdXJjZVNldFByb3ZpZGVyOwogCmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3IvaHlwZXJsaW5raW5nL1Byb3RvYnVmSHlwZXJsaW5rRGV0ZWN0b3IuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3VpL2VkaXRvci9oeXBlcmxpbmtpbmcvUHJvdG9idWZIeXBlcmxpbmtEZXRlY3Rvci5qYXZhCmluZGV4IGMyNDgyZWUuLmU2YjRhYTkgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3VpL2VkaXRvci9oeXBlcmxpbmtpbmcvUHJvdG9idWZIeXBlcmxpbmtEZXRlY3Rvci5qYXZhCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3VpL2VkaXRvci9oeXBlcmxpbmtpbmcvUHJvdG9idWZIeXBlcmxpbmtEZXRlY3Rvci5qYXZhCkBAIC04LDcgKzgsNyBAQAogICovCiBwYWNrYWdlIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS5lZGl0b3IuaHlwZXJsaW5raW5nOwogCi1pbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZlBhY2thZ2UuTGl0ZXJhbHMuSU1QT1JUX19QQVRIOworaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRTsKIAogaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5tb2RlbC51dGlsLklOb2RlczsKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5JbXBvcnRzOwpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICBpZiAoIWltcG9ydHMuaXNSZXNvbHZlZChhbkltcG9ydCkpIHsKICAgICAgICAgICByZXR1cm4gTk9fSFlQRVJMSU5LUzsKICAgICAgICAgfQotICAgICAgICBJTm9kZSBpbXBvcnRVcmlOb2RlID0gbm9kZXMuZmlyc3ROb2RlRm9yRmVhdHVyZShhbkltcG9ydCwgSU1QT1JUX19QQVRIKTsKKyAgICAgICAgSU5vZGUgaW1wb3J0VXJpTm9kZSA9IG5vZGVzLmZpcnN0Tm9kZUZvckZlYXR1cmUoYW5JbXBvcnQsIFBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRSk7CiAgICAgICAgIGlmIChpbXBvcnRVcmlOb2RlLmdldExlbmd0aCgpID09IDApIHsKICAgICAgICAgICByZXR1cm4gTk9fSFlQRVJMSU5LUzsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvZWRpdG9yL3N5bnRheGNvbG9yaW5nL1Byb3RvYnVmU2VtYW50aWNIaWdobGlnaHRpbmdDYWxjdWxhdG9yLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3Ivc3ludGF4Y29sb3JpbmcvUHJvdG9idWZTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3IuamF2YQppbmRleCA5NWFiMWJiLi5iMDA0NmFhIDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3Ivc3ludGF4Y29sb3JpbmcvUHJvdG9idWZTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3IuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3Ivc3ludGF4Y29sb3JpbmcvUHJvdG9idWZTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3IuamF2YQpAQCAtMzUsMTAgKzM1LDExIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuaWRlLmVkaXRvci5zeW50YXhjb2xvcmluZy5JSGlnaGxpZ2h0ZWRQb3NpdGlvbkFjY2VwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LmlkZS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuSVNlbWFudGljSGlnaGxpZ2h0aW5nQ2FsY3VsYXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5ub2RlbW9kZWwuSU5vZGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQucmVzb3VyY2UuWHRleHRSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuSUhpZ2hsaWdodGVkUG9zaXRpb25BY2NlcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuSVNlbWFudGljSGlnaGxpZ2h0aW5nQ2FsY3VsYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51dGlsLkNhbmNlbEluZGljYXRvcjsKIAogaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5tb2RlbC51dGlsLklOb2RlczsKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5JbmRleGVkRWxlbWVudHM7CkBAIC03Nyw3ICs3OCwxMSBAQAogICBASW5qZWN0IHByaXZhdGUgSU5vZGVzIG5vZGVzOwogICBASW5qZWN0IHByaXZhdGUgT3B0aW9ucyBvcHRpb25zOwogCi0gIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBwcm92aWRlSGlnaGxpZ2h0aW5nRm9yKFh0ZXh0UmVzb3VyY2UgcmVzb3VyY2UsIElIaWdobGlnaHRlZFBvc2l0aW9uQWNjZXB0b3IgYWNjZXB0b3IpIHsKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHByb3ZpZGVIaWdobGlnaHRpbmdGb3IoCisgICAgICBYdGV4dFJlc291cmNlIHJlc291cmNlLAorICAgICAgSUhpZ2hsaWdodGVkUG9zaXRpb25BY2NlcHRvciBhY2NlcHRvciwKKyAgICAgIENhbmNlbEluZGljYXRvciBjYW5jZWxJbmRpY2F0b3IpIHsKICAgICBpZiAocmVzb3VyY2UgPT0gbnVsbCkgewogICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1Nyw3ICsxNjIsOCBAQAogCiAgIHByaXZhdGUgdm9pZCBoaWdobGlnaHQoSW5kZXhlZEVsZW1lbnQgZWxlbWVudCwgSUhpZ2hsaWdodGVkUG9zaXRpb25BY2NlcHRvciBhY2NlcHRvcikgewogICAgIGhpZ2hsaWdodE5hbWUoZWxlbWVudCwgYWNjZXB0b3IsIERFRkFVTFRfSUQpOwotICAgIGhpZ2hsaWdodEZpcnN0RmVhdHVyZShlbGVtZW50LCBpbmRleGVkRWxlbWVudHMuaW5kZXhGZWF0dXJlT2YoZWxlbWVudCksIGFjY2VwdG9yLCBNRVNTQUdFX0ZJRUxEX0lOREVYX0lEKTsKKyAgICBoaWdobGlnaHRGaXJzdEZlYXR1cmUoCisgICAgICAgIGVsZW1lbnQsIGluZGV4ZWRFbGVtZW50cy5pbmRleEZlYXR1cmVPZihlbGVtZW50KSwgYWNjZXB0b3IsIE1FU1NBR0VfRklFTERfSU5ERVhfSUQpOwogICAgIGhpZ2hsaWdodE9wdGlvbnMoZWxlbWVudCwgYWNjZXB0b3IpOwogICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgR3JvdXApIHsKICAgICAgIGhpZ2hsaWdodCgoR3JvdXApIGVsZW1lbnQsIGFjY2VwdG9yKTsKQEAgLTI2OSwxMSArMjc1LDE4IEBACiAgIH0KIAogICBwcml2YXRlIHZvaWQgaGlnaGxpZ2h0TmFtZShFT2JqZWN0IG8sIElIaWdobGlnaHRlZFBvc2l0aW9uQWNjZXB0b3IgYWNjZXB0b3IsIFN0cmluZyBoaWdobGlnaHRJZCkgewotICAgIGhpZ2hsaWdodEZpcnN0RmVhdHVyZShvLCBvLmVDbGFzcygpLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgibmFtZSIpLCBhY2NlcHRvciwgaGlnaGxpZ2h0SWQpOworICAgIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gby5lQ2xhc3MoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoIm5hbWUiKTsKKyAgICBpZiAoZmVhdHVyZSA9PSBudWxsKSB7CisgICAgICBmZWF0dXJlID0gby5lQ2xhc3MoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoImltcG9ydGVkTmFtZXNwYWNlIik7CisgICAgfQorICAgIGhpZ2hsaWdodEZpcnN0RmVhdHVyZShvLCBmZWF0dXJlLCBhY2NlcHRvciwgaGlnaGxpZ2h0SWQpOwogICB9CiAKLSAgcHJpdmF0ZSB2b2lkIGhpZ2hsaWdodEZpcnN0RmVhdHVyZShFT2JqZWN0IHNlbWFudGljLCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwKLSAgICAgIElIaWdobGlnaHRlZFBvc2l0aW9uQWNjZXB0b3IgYWNjZXB0b3IsIFN0cmluZyBoaWdobGlnaHRJZCkgeworICBwcml2YXRlIHZvaWQgaGlnaGxpZ2h0Rmlyc3RGZWF0dXJlKAorICAgICAgRU9iamVjdCBzZW1hbnRpYywKKyAgICAgIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLAorICAgICAgSUhpZ2hsaWdodGVkUG9zaXRpb25BY2NlcHRvciBhY2NlcHRvciwKKyAgICAgIFN0cmluZyBoaWdobGlnaHRJZCkgewogICAgIElOb2RlIG5vZGUgPSBub2Rlcy5maXJzdE5vZGVGb3JGZWF0dXJlKHNlbWFudGljLCBmZWF0dXJlKTsKICAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNTg5ZGFjMS4uZTc2NDMxZCAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMTgsOCArMTgsNyBAQAogIG9yZy5lY2xpcHNlLnh0ZXh0LA0KICBvcmcuZWNsaXBzZS54dGV4dC5nZW5lcmF0b3I7cmVzb2x1dGlvbjo9b3B0aW9uYWwsDQogIG9yZy5lY2xpcHNlLnh0ZXh0LnVpLA0KLSBvcmcuZWNsaXBzZS54dGV4dC51dGlsLA0KLSBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCINCisgb3JnLmVjbGlwc2UueHRleHQudXRpbA0KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44DQogRXhwb3J0LVBhY2thZ2U6IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1ZiwNCiAgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmNvbnZlcnNpb24sDQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWZSdW50aW1lTW9kdWxlLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9Qcm90b2J1ZlJ1bnRpbWVNb2R1bGUuamF2YQppbmRleCA1NDFiMWExLi4zNzhmZTg2IDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9Qcm90b2J1ZlJ1bnRpbWVNb2R1bGUuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9Qcm90b2J1ZlJ1bnRpbWVNb2R1bGUuamF2YQpAQCAtMTUsNyArMTUsNiBAQAogaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5yZXNvdXJjZS5GYXN0WHRleHRSZXNvdXJjZVNldDsKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucmVzb3VyY2UuR2xvYmFsUmVzb3VyY2VTZXJ2aWNlUHJvdmlkZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnNjb3BpbmcuRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcjsKLWltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuc2NvcGluZy5Qcm90b2J1Zkdsb2JhbFNjb3BlUHJvdmlkZXI7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uUHJvdG9idWZSZXNvdXJjZVZhbGlkYXRvcjsKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudmFsaWRhdGlvbi5Qcm90b2J1ZlN5bnRheEVycm9yTWVzc2FnZVByb3ZpZGVyOwogaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkJpbmRlcjsKQEAgLTI4LDExICsyNywxMSBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnJlc291cmNlLklHbG9iYWxTZXJ2aWNlUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQucmVzb3VyY2UuWHRleHRSZXNvdXJjZTsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5yZXNvdXJjZS5YdGV4dFJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuSUdsb2JhbFNjb3BlUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudmFsaWRhdGlvbi5JUmVzb3VyY2VWYWxpZGF0b3I7CiAKIC8qKgotICogVXNlIHRoaXMgY2xhc3MgdG8gcmVnaXN0ZXIgY29tcG9uZW50cyB0byBiZSB1c2VkIGF0IHJ1bnRpbWUgLyB3aXRob3V0IHRoZSBFcXVpbm94IGV4dGVuc2lvbiByZWdpc3RyeS4KKyAqIFVzZSB0aGlzIGNsYXNzIHRvIHJlZ2lzdGVyIGNvbXBvbmVudHMgdG8gYmUgdXNlZCBhdCBydW50aW1lIC8gd2l0aG91dCB0aGUgRXF1aW5veCBleHRlbnNpb24KKyAqIHJlZ2lzdHJ5LgogICovCiBwdWJsaWMgY2xhc3MgUHJvdG9idWZSdW50aW1lTW9kdWxlIGV4dGVuZHMgQWJzdHJhY3RQcm90b2J1ZlJ1bnRpbWVNb2R1bGUgewogICBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIElHbG9iYWxTZXJ2aWNlUHJvdmlkZXI+IGJpbmRJR2xvYmFsU2VydmljZVByb3ZpZGVyKCkgewpAQCAtNDMsNyArNDIsOCBAQAogICAgIHJldHVybiBQcm90b2J1ZlF1YWxpZmllZE5hbWVDb252ZXJ0ZXIuY2xhc3M7CiAgIH0KIAotICBAT3ZlcnJpZGUgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBJUXVhbGlmaWVkTmFtZVByb3ZpZGVyPiBiaW5kSVF1YWxpZmllZE5hbWVQcm92aWRlcigpIHsKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgSVF1YWxpZmllZE5hbWVQcm92aWRlcj4gYmluZElRdWFsaWZpZWROYW1lUHJvdmlkZXIoKSB7CiAgICAgcmV0dXJuIFByb3RvYnVmUXVhbGlmaWVkTmFtZVByb3ZpZGVyLmNsYXNzOwogICB9CiAKQEAgLTU1LDIyICs1NSwyMSBAQAogICAgIHJldHVybiBQcm90b2J1ZlN5bnRheEVycm9yTWVzc2FnZVByb3ZpZGVyLmNsYXNzOwogICB9CiAKLSAgQE92ZXJyaWRlIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgSVZhbHVlQ29udmVydGVyU2VydmljZT4gYmluZElWYWx1ZUNvbnZlcnRlclNlcnZpY2UoKSB7CisgIEBPdmVycmlkZQorICBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIElWYWx1ZUNvbnZlcnRlclNlcnZpY2U+IGJpbmRJVmFsdWVDb252ZXJ0ZXJTZXJ2aWNlKCkgewogICAgIHJldHVybiBQcm90b2J1ZlRlcm1pbmFsQ29udmVydGVycy5jbGFzczsKICAgfQogCi0gIEBPdmVycmlkZSBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIFh0ZXh0UmVzb3VyY2U+IGJpbmRYdGV4dFJlc291cmNlKCkgeworICBAT3ZlcnJpZGUKKyAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBYdGV4dFJlc291cmNlPiBiaW5kWHRleHRSZXNvdXJjZSgpIHsKICAgICByZXR1cm4gUHJvdG9idWZSZXNvdXJjZS5jbGFzczsKICAgfQogCi0gIEBPdmVycmlkZSBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIFh0ZXh0UmVzb3VyY2VTZXQ+IGJpbmRYdGV4dFJlc291cmNlU2V0KCkgeworICBAT3ZlcnJpZGUKKyAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBYdGV4dFJlc291cmNlU2V0PiBiaW5kWHRleHRSZXNvdXJjZVNldCgpIHsKICAgICByZXR1cm4gRmFzdFh0ZXh0UmVzb3VyY2VTZXQuY2xhc3M7CiAgIH0KIAotICBAT3ZlcnJpZGUgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBJR2xvYmFsU2NvcGVQcm92aWRlcj4gYmluZElHbG9iYWxTY29wZVByb3ZpZGVyKCkgewotICAgIHJldHVybiBQcm90b2J1Zkdsb2JhbFNjb3BlUHJvdmlkZXIuY2xhc3M7Ci0gIH0KLQogICBwdWJsaWMgdm9pZCBjb25maWd1cmVFeHRlbnNpb25SZWdpc3RyeShCaW5kZXIgYmluZGVyKSB7CiAgICAgYmluZGVyLmJpbmQoSUV4dGVuc2lvblJlZ2lzdHJ5LmNsYXNzKS50b1Byb3ZpZGVyKEV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIuY2xhc3MpOwogICB9CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL1BhY2thZ2VzLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL1BhY2thZ2VzLmphdmEKaW5kZXggNjZhNTdmNi4uMzI0YjljMyAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlcy5qYXZhCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL21vZGVsL3V0aWwvUGFja2FnZXMuamF2YQpAQCAtMTMwLDcgKzEzMCw3IEBACiAgIH0KIAogICBwcml2YXRlIFF1YWxpZmllZE5hbWUgbmFtZU9mKFBhY2thZ2UgcCkgewotICAgIFN0cmluZyBuYW1lID0gcC5nZXROYW1lKCk7CisgICAgU3RyaW5nIG5hbWUgPSBwLmdldEltcG9ydGVkTmFtZXNwYWNlKCk7CiAgICAgcmV0dXJuIChpc0VtcHR5KG5hbWUpKSA/IG51bGwgOiBxdWFsaWZpZWROYW1lQ29udmVydGVyLnRvUXVhbGlmaWVkTmFtZShuYW1lKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1Zkdsb2JhbFNjb3BlUHJvdmlkZXIuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMTBlYjAuLjAwMDAwMDAKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1Zkdsb2JhbFNjb3BlUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQgR29vZ2xlIEluYy4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UKLSAqIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICovCi1wYWNrYWdlIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5zY29waW5nOwotCi1pbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuUHJvdG9idWZzOwotaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5tb2RlbC51dGlsLlJlc291cmNlczsKLWltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuSW1wb3J0OwotaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZjsKLWltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5JbmplY3Q7Ci1pbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuUHJvdmlkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5FY29yZVV0aWwyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuaW1wbC5JbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnV0aWwuSUFjY2VwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnV0aWwuSVJlc291cmNlU2NvcGVDYWNoZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaFNldDsKLQotLyoqCi0gKiBBIGdsb2JhbCBzY29wZSBwcm92aWRlciB0aGF0IHJlYWRzIGVhY2gge0BsaW5rIEltcG9ydH0gaW4gdGhlIHByb3RvYnVmIGZpbGUsIHJlc29sdmVzIGl0LCBhbmQKLSAqIGNhY2hlcyB0aGUgcmVzdWx0LgotICovCi1wdWJsaWMgY2xhc3MgUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyIGV4dGVuZHMgSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlciB7Ci0gIEBJbmplY3QKLSAgcHJpdmF0ZSBJUmVzb3VyY2VTY29wZUNhY2hlIGNhY2hlOwotCi0gIEBJbmplY3QKLSAgcHJpdmF0ZSBSZXNvdXJjZXMgcmVzb3VyY2VzOwotCi0gIEBJbmplY3QKLSAgcHJpdmF0ZSBQcm90b2J1ZnMgcHJvdG9idWZzOwotCi0gIEBJbmplY3QKLSAgcHJpdmF0ZSBJSW1wb3J0UmVzb2x2ZXIgaW1wb3J0UmVzb2x2ZXI7Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCBMaW5rZWRIYXNoU2V0PFVSST4gZ2V0SW1wb3J0ZWRVcmlzKGZpbmFsIFJlc291cmNlIHJlc291cmNlKSB7Ci0gICAgcmV0dXJuIGNhY2hlLmdldChQcm90b2J1Zkdsb2JhbFNjb3BlUHJvdmlkZXIuY2xhc3MuZ2V0TmFtZSgpLCByZXNvdXJjZSwKLSAgICAgICAgbmV3IFByb3ZpZGVyPExpbmtlZEhhc2hTZXQ8VVJJPj4oKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIExpbmtlZEhhc2hTZXQ8VVJJPiBnZXQoKSB7Ci0gICAgICAgICAgICBmaW5hbCBMaW5rZWRIYXNoU2V0PFVSST4gdW5pcXVlSW1wb3J0VVJJcyA9IG5ldyBMaW5rZWRIYXNoU2V0PD4oNSk7Ci0gICAgICAgICAgICBJQWNjZXB0b3I8U3RyaW5nPiBjb2xsZWN0b3IgPSBjcmVhdGVVUklDb2xsZWN0b3IocmVzb3VyY2UsIHVuaXF1ZUltcG9ydFVSSXMpOwotICAgICAgICAgICAgUHJvdG9idWYgcHJvdG9idWYgPSByZXNvdXJjZXMucm9vdE9mKHJlc291cmNlKTsKLSAgICAgICAgICAgIGlmIChwcm90b2J1ZiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIHJldHVybiB1bmlxdWVJbXBvcnRVUklzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChJbXBvcnQgYW5JbXBvcnQgOiBwcm90b2J1ZnMuaW1wb3J0c0luKHByb3RvYnVmKSkgewotICAgICAgICAgICAgICBjb2xsZWN0b3IuYWNjZXB0KGltcG9ydFJlc29sdmVyLnJlc29sdmUoYW5JbXBvcnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEl0ZXJhdG9yPFVSST4gdXJpSXRlciA9IHVuaXF1ZUltcG9ydFVSSXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlICh1cmlJdGVyLmhhc05leHQoKSkgewotICAgICAgICAgICAgICBpZiAoIUVjb3JlVXRpbDIuaXNWYWxpZFVyaShyZXNvdXJjZSwgdXJpSXRlci5uZXh0KCkpKSB7Ci0gICAgICAgICAgICAgICAgdXJpSXRlci5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHVuaXF1ZUltcG9ydFVSSXM7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1ZkltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXIuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4NDI1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBHb29nbGUgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZQorICogUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnNjb3Bpbmc7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5JbXBvcnRzOworaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5tb2RlbC51dGlsLlByb3RvYnVmczsKK2ltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5SZXNvdXJjZXM7CitpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLkltcG9ydDsKK2ltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWY7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuSW5qZWN0OworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LlByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuc2NvcGluZy5pbXBsLkltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudXRpbC5JUmVzb3VyY2VTY29wZUNhY2hlOworCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hTZXQ7CisKKy8qKgorICogQSBnbG9iYWwgc2NvcGUgcHJvdmlkZXIgdGhhdCByZWFkcyBlYWNoIHtAbGluayBJbXBvcnR9IGluIHRoZSBwcm90b2J1ZiBmaWxlLCByZXNvbHZlcyBpdCwgYW5kCisgKiBjYWNoZXMgdGhlIHJlc3VsdC4KKyAqLworcHVibGljIGNsYXNzIFByb3RvYnVmSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlciBleHRlbmRzIEltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXIgeworICBASW5qZWN0IHByaXZhdGUgUHJvdG9idWZzIHByb3RvYnVmczsKKyAgQEluamVjdCBwcml2YXRlIFJlc291cmNlcyByZXNvdXJjZXM7CisgIEBJbmplY3QgcHJpdmF0ZSBJbXBvcnRzIGltcG9ydHM7CisgIEBJbmplY3QgcHJpdmF0ZSBJUmVzb3VyY2VTY29wZUNhY2hlIGNhY2hlOworCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgTGlua2VkSGFzaFNldDxVUkk+IGdldEltcG9ydGVkVXJpcyhmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSkgeworICAgIHJldHVybiBjYWNoZS5nZXQoCisgICAgICAgIFByb3RvYnVmSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlci5jbGFzcy5nZXROYW1lKCksCisgICAgICAgIHJlc291cmNlLAorICAgICAgICBuZXcgUHJvdmlkZXI8TGlua2VkSGFzaFNldDxVUkk+PigpIHsKKyAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICBwdWJsaWMgTGlua2VkSGFzaFNldDxVUkk+IGdldCgpIHsKKyAgICAgICAgICAgIExpbmtlZEhhc2hTZXQ8VVJJPiBpbXBvcnRlZFVyaXMgPSBuZXcgTGlua2VkSGFzaFNldDw+KCk7CisgICAgICAgICAgICBQcm90b2J1ZiBwcm90b2J1ZiA9IHJlc291cmNlcy5yb290T2YocmVzb3VyY2UpOworICAgICAgICAgICAgaWYgKHByb3RvYnVmID09IG51bGwpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGltcG9ydGVkVXJpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoSW1wb3J0IHNpbmdsZUltcG9ydCA6IHByb3RvYnVmcy5pbXBvcnRzSW4ocHJvdG9idWYpKSB7CisgICAgICAgICAgICAgIHJlc29sdmVJbXBvcnQoaW1wb3J0ZWRVcmlzLCBzaW5nbGVJbXBvcnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGltcG9ydGVkVXJpczsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBwcml2YXRlIHZvaWQgYWRkUHVibGljSW1wb3J0ZWRVcmlzKFByb3RvYnVmIHByb3RvYnVmLCBMaW5rZWRIYXNoU2V0PFVSST4gaW1wb3J0ZWRVcmlzKSB7CisgICAgICAgICAgICBmb3IgKEltcG9ydCBzaW5nbGVJbXBvcnQgOiBwcm90b2J1ZnMucHVibGljSW1wb3J0c0luKHByb3RvYnVmKSkgeworICAgICAgICAgICAgICByZXNvbHZlSW1wb3J0KGltcG9ydGVkVXJpcywgc2luZ2xlSW1wb3J0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBwcml2YXRlIHZvaWQgcmVzb2x2ZUltcG9ydChMaW5rZWRIYXNoU2V0PFVSST4gaW1wb3J0ZWRVcmlzLCBJbXBvcnQgc2luZ2xlSW1wb3J0KSB7CisgICAgICAgICAgICBpZiAoaW1wb3J0cy5pc1Jlc29sdmVkKHNpbmdsZUltcG9ydCkpIHsKKyAgICAgICAgICAgICAgaW1wb3J0ZWRVcmlzLmFkZChpbXBvcnRzLnJlc29sdmVkVXJpT2Yoc2luZ2xlSW1wb3J0KSk7CisgICAgICAgICAgICAgIFByb3RvYnVmIHJvb3QgPSByZXNvdXJjZXMucm9vdE9mKGltcG9ydHMuaW1wb3J0ZWRSZXNvdXJjZShzaW5nbGVJbXBvcnQpKTsKKyAgICAgICAgICAgICAgaWYgKHJvb3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFkZFB1YmxpY0ltcG9ydGVkVXJpcyhyb290LCBpbXBvcnRlZFVyaXMpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1ZkltcG9ydGVkTmFtZXNwYWNlQXdhcmVMb2NhbFNjb3BlUHJvdmlkZXIuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnRlZE5hbWVzcGFjZUF3YXJlTG9jYWxTY29wZVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzY2NiMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnRlZE5hbWVzcGFjZUF3YXJlTG9jYWxTY29wZVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBHb29nbGUgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZQorICogUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKi8KK3BhY2thZ2UgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnNjb3Bpbmc7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5uYW1pbmcuUXVhbGlmaWVkTmFtZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5zY29waW5nLmltcGwuSW1wb3J0Tm9ybWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5zY29waW5nLmltcGwuSW1wb3J0ZWROYW1lc3BhY2VBd2FyZUxvY2FsU2NvcGVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51dGlsLlN0cmluZ3M7CitpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm5hbWluZy5Qcm90b2J1ZlF1YWxpZmllZE5hbWVDb252ZXJ0ZXI7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuSW5qZWN0OworCitwdWJsaWMgY2xhc3MgUHJvdG9idWZJbXBvcnRlZE5hbWVzcGFjZUF3YXJlTG9jYWxTY29wZVByb3ZpZGVyCisgICAgZXh0ZW5kcyBJbXBvcnRlZE5hbWVzcGFjZUF3YXJlTG9jYWxTY29wZVByb3ZpZGVyIHsKKyAgQEluamVjdCBwcml2YXRlIFByb3RvYnVmUXVhbGlmaWVkTmFtZUNvbnZlcnRlciBxdWFsaWZpZWROYW1lQ29udmVydGVyOworCisgIC8qKgorICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBJbXBvcnROb3JtYWxpemVyfSBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZS4KKyAgICoKKyAgICogQHBhcmFtIG5hbWVzcGFjZSB0aGUgbmFtZXNwYWNlLgorICAgKiBAcGFyYW0gaWdub3JlQ2FzZSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcmVzb2x2ZXIgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUuCisgICAqIEByZXR1cm4gYSBuZXcge0BsaW5rIEltcG9ydE5vcm1hbGl6ZXJ9IG9yIHtAY29kZSBudWxsfSBpZiB0aGUgbmFtZXNwYWNlIGNhbm5vdCBiZQorICAgKiBjb252ZXJ0ZWQgdG8gYSB2YWxpZCBxdWFsaWZpZWQgbmFtZS4KKyAgICovCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgSW1wb3J0Tm9ybWFsaXplciBjcmVhdGVJbXBvcnRlZE5hbWVzcGFjZVJlc29sdmVyKAorICAgICAgZmluYWwgU3RyaW5nIG5hbWVzcGFjZSwgYm9vbGVhbiBpZ25vcmVDYXNlKSB7CisgICAgaWYgKFN0cmluZ3MuaXNFbXB0eShuYW1lc3BhY2UpKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgUXVhbGlmaWVkTmFtZSBpbXBvcnRlZE5hbWVzcGFjZSA9IHF1YWxpZmllZE5hbWVDb252ZXJ0ZXIudG9RdWFsaWZpZWROYW1lKG5hbWVzcGFjZSk7CisgICAgaWYgKGltcG9ydGVkTmFtZXNwYWNlID09IG51bGwgfHwgaW1wb3J0ZWROYW1lc3BhY2UuaXNFbXB0eSgpKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGRvQ3JlYXRlSW1wb3J0Tm9ybWFsaXplcihpbXBvcnRlZE5hbWVzcGFjZSwgdHJ1ZSwgaWdub3JlQ2FzZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi92YWxpZGF0aW9uL1Byb3RvYnVmSmF2YVZhbGlkYXRvci5qYXZhCmluZGV4IDNjNmUxNzMuLmIxNjQ5NTcgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yLmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9Qcm90b2J1ZkphdmFWYWxpZGF0b3IuamF2YQpAQCAtMTEsNyArMTEsNyBAQAogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLk1BUF9UWVBFX19LRVlfVFlQRTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5NQVBfVFlQRV9fVkFMVUVfVFlQRTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5NRVNTQUdFX0ZJRUxEX19NT0RJRklFUjsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5QQUNLQUdFX19OQU1FOworaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5TWU5UQVhfX05BTUU7CiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi52YWxpZGF0aW9uLk1lc3NhZ2VzLmV4cGVjdGVkRmllbGROdW1iZXI7CiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi52YWxpZGF0aW9uLk1lc3NhZ2VzLmV4cGVjdGVkU3ludGF4SWRlbnRpZmllcjsKQEAgLTM4MCw3ICszODAsNyBAQAogICAgIGZvciAoUHJvdG9idWZFbGVtZW50IGUgOiByb290LmdldEVsZW1lbnRzKCkpIHsKICAgICAgIGlmIChlID09IGFQYWNrYWdlKSB7CiAgICAgICAgIGlmIChmaXJzdEZvdW5kKSB7Ci0gICAgICAgICAgZXJyb3IobXVsdGlwbGVQYWNrYWdlcywgYVBhY2thZ2UsIFBBQ0tBR0VfX05BTUUsIE1PUkVfVEhBTl9PTkVfUEFDS0FHRV9FUlJPUik7CisgICAgICAgICAgZXJyb3IobXVsdGlwbGVQYWNrYWdlcywgYVBhY2thZ2UsIFBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRSwgTU9SRV9USEFOX09ORV9QQUNLQUdFX0VSUk9SKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgICB9Cg==