ZGlmZiAtLWdpdCBhL2FkZG9ucy9wb20ueG1sIGIvYWRkb25zL3BvbS54bWwKaW5kZXggZTdlZmUxMy4uODM3ZjdiYSAxMDA2NDQKLS0tIGEvYWRkb25zL3BvbS54bWwKKysrIGIvYWRkb25zL3BvbS54bWwKQEAgLTEyLDYgKzEyLDcgQEAKIAogCTxtb2R1bGVzPgogCQk8IS0tPG1vZHVsZT5zaW11bGF0aW9uPC9tb2R1bGU+LS0+CisJCTxtb2R1bGU+d290PC9tb2R1bGU+CiAJPC9tb2R1bGVzPgogCQogPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS8uY2xhc3NwYXRoIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhN2JkYgotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KYXZhU0UtMS44Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS8ucHJvamVjdCBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2M1NmRjCi0tLSAvZGV2L251bGwKKysrIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWk8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2OGE2MQotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw3IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuOApkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTFlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWk7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpLkFjdGl2YXRvcgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwuZGlhZ3JhbS5jb21tb247YnVuZGxlLXZlcnNpb249IlszLjAuMCw0LjAuMCkiLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIubGFuZ3VhZ2VzLmNvbW1vbi5iYXNlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjQsMi4wLjApIgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvYnVpbGQucHJvcGVydGllcyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhY2IyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAxOSBDRUEgTElTVC4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYyLjAKKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjIwLmh0bWwKKyMKKyMgQ29udHJpYnV0b3JzOgorIyAgICAgCVNodWFpIExpIChDRUEgTElTVCkgPHNodWFpLmxpQGNlYS5mcj4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvcGx1Z2luLnByb3BlcnRpZXMgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlNjdlYwotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDE2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAxOSBDRUEgTElTVC4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYyLjAKKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjIwLmh0bWwKKyMKKyMgQ29udHJpYnV0b3JzOgorIyAgICAgCVNodWFpIExpIChDRUEgTElTVCkgPHNodWFpLmxpQGNlYS5mcj4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3BsdWdpbk5hbWU9UGFweXJ1cyBJb1QtTUwgV29UIFREIGNvZGUgZ2VuZXJhdGlvbiBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2UgTW9kZWxpbmcgUHJvamVjdAorCit0ZC5jb2RlZ2VuLnVtbC5jb21tYW5kLm5hbWU9R2VuZXJhdGUgV29UIFRECit0ZC5jb2RlZ2VuLnVtbC5jb21tYW5kLmRlc2NyaXB0aW9uPUdlbmVyYXRlIFdvVCBUaGluZyBEZXNjcmlwdGlvbiBmcm9tIElvVC1NTCBtb2RlbAordGQuY29kZWdlbi51bWwucGFnZS5uYW1lPVdvVCBURCBjb2RlIGdlbmVyYXRpb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvcGx1Z2luLnhtbCBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OTM0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvcGx1Z2luLnhtbApAQCAtMCwwICsxLDY1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuNCI/PgorPCEtLQorICAgIENvcHlyaWdodCAoYykgMjAxOSBDRUEgTElTVC4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgICAgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2Mi4wCisgICAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MjAuaHRtbAorICAgCisgICAgQ29udHJpYnV0b3JzOgorICAgICAgICAJU2h1YWkgTGkgKENFQSBMSVNUKSA8c2h1YWkubGlAY2VhLmZyPiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIC0tPgorCis8cGx1Z2luPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm1lbnVzIj4KKyAgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgICBhbGxQb3B1cHM9ImZhbHNlIgorICAgICAgICAgICAgbG9jYXRpb25VUkk9InBvcHVwOm9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIucG9wdXA/YWZ0ZXI9Y29kZWdlbiI+CisgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpLmNvbW1hbmQiCisgICAgICAgICAgICAgICBsYWJlbD0iJXRkLmNvZGVnZW4udW1sLmNvbW1hbmQubmFtZSIKKyAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIj4KKyAgICAgICAgICAgIDx2aXNpYmxlV2hlbgorICAgICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJ0cnVlIj4KKyAgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+CisgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICA8L21lbnVDb250cmlidXRpb24+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+CisgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgY2F0ZWdvcnlJZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5lZGl0b3IuY2F0ZWdvcnkiCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWNvbW1hbmQuZGVzY3JpcHRpb24iCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS5jb21tYW5kIgorICAgICAgICAgICAgbmFtZT0iJXRkLmNvZGVnZW4udW1sLmNvbW1hbmQubmFtZSI+CisgICAgICA8L2NvbW1hbmQ+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5oYW5kbGVycyI+CisgICAgICA8aGFuZGxlcgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkuaGFuZGxlcnMuR2VuZXJhdGVUREhhbmRsZXIiCisgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkuY29tbWFuZCI+CisgICAgICAgICAgICA8YWN0aXZlV2hlbj4KKyAgICAgICAgICAgIDxhbmQ+CisgICAgICAgICAgICAgICA8d2l0aAorICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9InNlbGVjdGlvbiI+CisgICAgICAgICAgICAgICAgICA8aXRlcmF0ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS51bWwyLnVtbC5QYWNrYWdlYWJsZUVsZW1lbnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgICAgICAgIDwvaXRlcmF0ZT4KKyAgICAgICAgICAgICAgIDwvd2l0aD4KKyAgICAgICAgICAgICAgIDxjb3VudAorICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjEiPgorICAgICAgICAgICAgICAgPC9jb3VudD4KKyAgICAgICAgICAgIDwvYW5kPgorICAgICAgICAgPC9hY3RpdmVXaGVuPgorICAgICAgPC9oYW5kbGVyPgorICAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpL3BvbS54bWwgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWNhOTUxCi0tLSAvZGV2L251bGwKKysrIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpL3BvbS54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKwk8cGFyZW50PgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLmFkZG9ucy53b3Q8L2FydGlmYWN0SWQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWw8L2dyb3VwSWQ+CisJCTx2ZXJzaW9uPjEuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvcGFyZW50PgorCisJPCEtLSBQT00gRGVzY3JpcHRpb24gLS0+CisJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aTwvYXJ0aWZhY3RJZD4KKwk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+CisJPG5hbWU+b3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aTwvbmFtZT4KKwk8ZGVzY3JpcHRpb24+UGFweXJ1cyBJb1QtTUwgV29UIFREIGdlbmVyYXRpb24gVUk8L2Rlc2NyaXB0aW9uPgorCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC90ZC9jb2RlZ2VuL3VpL0FjdGl2YXRvci5qYXZhIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC90ZC9jb2RlZ2VuL3VpL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODg5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3RkL2NvZGVnZW4vdWkvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxOSBDRUEgTElTVC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjIuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYyMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIAlTaHVhaSBMaSAoQ0VBIExJU1QpIDxzaHVhaS5saUBjZWEuZnI+IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEuY29yZS5sb2cuTG9nSGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICogCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8vIFRoZSBwbHVnLWluIElECisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCXB1YmxpYyBzdGF0aWMgTG9nSGVscGVyIGxvZzsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJcGx1Z2luID0gdGhpczsKKwkJbG9nID0gbmV3IExvZ0hlbHBlcigpOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC90ZC9jb2RlZ2VuL3VpL2hhbmRsZXJzL0dlbmVyYXRlVERIYW5kbGVyLmphdmEgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWkvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3RkL2NvZGVnZW4vdWkvaGFuZGxlcnMvR2VuZXJhdGVUREhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWYyZTFjCi0tLSAvZGV2L251bGwKKysrIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnVpL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC90ZC9jb2RlZ2VuL3VpL2hhbmRsZXJzL0dlbmVyYXRlVERIYW5kbGVyLmphdmEKQEAgLTAsMCArMSw3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxOSBDRUEgTElTVC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjIuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYyMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIAlTaHVhaSBMaSAoQ0VBIExJU1QpIDxzaHVhaS5saUBjZWEuZnI+IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aS5oYW5kbGVyczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi50cmFuc2Zvcm1hdGlvbi5URE1vZGVsRWxlbWVudHNDcmVhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMudW1sLmRpYWdyYW0uY29tbW9uLmhhbmRsZXJzLkNtZEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUGFja2FnZWFibGVFbGVtZW50OworCisvKioKKyAqIEhhbmRsZXIgY2xhc3MgZm9yIGdlbmVyYXRpbmcgVkRITCBjb2RlIGZyb20gVU1MIG1vZGVsLgorICovCitwdWJsaWMgY2xhc3MgR2VuZXJhdGVUREhhbmRsZXIgZXh0ZW5kcyBDbWRIYW5kbGVyIHsKKworCS8qKgorCSAqIEV4ZWN1dGUgdGhlIGdlbmVyYXRpb24gVEQgY29kZSBmcm9tIHRoZSBzZWxlY3RlZCBVTUwgQ2xhc3MuCisJICogCisJICoge0Bpbmhlcml0RG9jfQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShFeGVjdXRpb25FdmVudCBldmVudCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCXVwZGF0ZVNlbGVjdGVkRU9iamVjdCgpOworCisJCWlmIChzZWxlY3RlZEVPYmplY3QgaW5zdGFuY2VvZiBQYWNrYWdlYWJsZUVsZW1lbnQpIHsKKwkJCVBhY2thZ2VhYmxlRWxlbWVudCBwZSA9IChQYWNrYWdlYWJsZUVsZW1lbnQpIHNlbGVjdGVkRU9iamVjdDsKKworCQkJVVJJIHVyaSA9IHBlLmVSZXNvdXJjZSgpLmdldFVSSSgpOworCQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7CisJCQlpZiAodXJpLnNlZ21lbnRDb3VudCgpIDwgMikgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJSVByb2plY3QgbW9kZWxQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KHVyaS5zZWdtZW50KDEpKTsKKwkJCWlmIChtb2RlbFByb2plY3QgPT0gbnVsbCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJCisJCQlpZiAobW9kZWxQcm9qZWN0LmV4aXN0cygpKSB7CisJCQkJVERNb2RlbEVsZW1lbnRzQ3JlYXRvciBtZWMgPSBuZXcgVERNb2RlbEVsZW1lbnRzQ3JlYXRvcihtb2RlbFByb2plY3QsIHBlKTsKKwkJCQltZWMuY3JlYXRlUGFja2FnZWFibGVFbGVtZW50KHBlLCBudWxsKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGUgaGFuZGxlciBpcyBjYXBhYmxlIG9mIGV4ZWN1dGluZyBhdCB0aGlzIHRpbWUgaWYgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaXMgYSBVTUwgQ2xhc3MuCisJICogCisJICoge0Bpbmhlcml0RG9jfQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJdXBkYXRlU2VsZWN0ZWRFT2JqZWN0KCk7CisKKwkJaWYgKHNlbGVjdGVkRU9iamVjdCBpbnN0YW5jZW9mIENsYXNzKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuaXNFbmFibGVkKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vLmNsYXNzcGF0aCBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTdiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuOCIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vLnByb2plY3QgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNGQwNAotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjhhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjgKZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzEwOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjEgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5wYXB5cnVzLmRlc2lnbmVyLmxhbmd1YWdlcy5jb21tb24uYmFzZTtidW5kbGUtdmVyc2lvbj0iWzEuMC40LDIuMC4wKSIsCisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwudG9vbHMudXRpbHM7YnVuZGxlLXZlcnNpb249IlszLjAuMCw0LjAuMCkiLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIubGFuZ3VhZ2VzLmNvbW1vbi5leHRlbnNpb25wb2ludHM7YnVuZGxlLXZlcnNpb249IlsxLjAuNCwyLjAuMCkiLAorIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nO2J1bmRsZS12ZXJzaW9uPSJbMi42LjAsMy4wLjApIiwKKyBvcmcuZWNsaXBzZS51bWwyLnVtbDtidW5kbGUtdmVyc2lvbj0iWzUuMC4wLDYuMC4wKSIsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKKyBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZS5qYWNrc29uLWFubm90YXRpb25zO2J1bmRsZS12ZXJzaW9uPSJbMi45LjAsMy4wLjApIiwKKyBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZS5qYWNrc29uLWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjkuMCwzLjAuMCkiLAorIGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLmphY2tzb24tZGF0YWJpbmQ7YnVuZGxlLXZlcnNpb249IlsyLjkuMCwzLjAuMCkiCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLkFjdGl2YXRvcgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udHJhbnNmb3JtYXRpb24KKwpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL2J1aWxkLnByb3BlcnRpZXMgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGUzMmYwCi0tLSAvZGV2L251bGwKKysrIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTkgQ0VBIExJU1QuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2Mi4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYyMC5odG1sCisjCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIAlTaHVhaSBMaSAoQ0VBIExJU1QpIDxzaHVhaS5saUBjZWEuZnI+IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbApkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZmMwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTkgQ0VBIExJU1QuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2Mi4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYyMC5odG1sCisjCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIAlTaHVhaSBMaSAoQ0VBIExJU1QpIDxzaHVhaS5saUBjZWEuZnI+IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitwbHVnaW5OYW1lPVBhcHlydXMgSW9ULU1MIFdvVCBURCBjb2RlIGdlbmVyYXRpb24KK3Byb3ZpZGVyTmFtZT1FY2xpcHNlIE1vZGVsaW5nIFByb2plY3QKKworZ2VuZXJhdG9yLmxhbmd1YWdlPVdvVCBURAorZ2VuZXJhdG9yLmlkPVN0YW5kYXJkIFdvVCBURApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9wbHVnaW4ueG1sIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiYzZlZQotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Cis8IS0tCisgICAgQ29weXJpZ2h0IChjKSAyMDE5IENFQSBMSVNULgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAgICBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYyLjAKKyAgICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYyMC5odG1sCisgICAKKyAgICBDb250cmlidXRvcnM6CisgICAgICAgIAlTaHVhaSBMaSAoQ0VBIExJU1QpIDxzaHVhaS5saUBjZWEuZnI+IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgLS0+CisKKzxwbHVnaW4+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL3BvbS54bWwgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjQ3NzI1Ci0tLSAvZGV2L251bGwKKysrIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL3BvbS54bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKwk8cGFyZW50PgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLmFkZG9ucy53b3Q8L2FydGlmYWN0SWQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWw8L2dyb3VwSWQ+CisJCTx2ZXJzaW9uPjEuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvcGFyZW50PgorCisJPCEtLSBQT00gRGVzY3JpcHRpb24gLS0+CisJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbjwvYXJ0aWZhY3RJZD4KKwk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+CisJPG5hbWU+b3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbjwvbmFtZT4KKwk8ZGVzY3JpcHRpb24+UGFweXJ1cyBJb1QtTUwgV29UIFREIGdlbmVyYXRpb248L2Rlc2NyaXB0aW9uPgorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvdGQvY29kZWdlbi9BY3RpdmF0b3IuamF2YSBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvdGQvY29kZWdlbi9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI4MGIzCi0tLSAvZGV2L251bGwKKysrIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC90ZC9jb2RlZ2VuL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsNjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQ0VBIExJU1QuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYyLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MjAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICAJU2h1YWkgTGkgKENFQSBMSVNUKSA8c2h1YWkubGlAY2VhLmZyPiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmNvcmUubG9nLkxvZ0hlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqIAorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvLyBUaGUgcGx1Zy1pbiBJRAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJcHVibGljIHN0YXRpYyBMb2dIZWxwZXIgbG9nOworCQorCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJcGx1Z2luID0gdGhpczsKKwkJbG9nID0gbmV3IExvZ0hlbHBlcigpOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC90ZC9jb2RlZ2VuL1RETGFuZ0NvZGVnZW4uamF2YSBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvdGQvY29kZWdlbi9URExhbmdDb2RlZ2VuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxNmIyMAotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvdGQvY29kZWdlbi9URExhbmdDb2RlZ2VuLmphdmEKQEAgLTAsMCArMSwxNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQ0VBIExJU1QuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYyLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MjAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICAJU2h1YWkgTGkgKENFQSBMSVNUKSA8c2h1YWkubGlAY2VhLmZyPiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmRlc2lnbmVyLmxhbmd1YWdlcy5jb21tb24uYmFzZS5Nb2RlbEVsZW1lbnRzQ3JlYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmRlc2lnbmVyLmxhbmd1YWdlcy5jb21tb24uZXh0ZW5zaW9ucG9pbnRzLklMYW5nQ29kZWdlbjI7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5kZXNpZ25lci5sYW5ndWFnZXMuY29tbW9uLmV4dGVuc2lvbnBvaW50cy5NZXRob2RJbmZvOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIubGFuZ3VhZ2VzLmNvbW1vbi5leHRlbnNpb25wb2ludHMuU3luY0luZm9ybWF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udHJhbnNmb3JtYXRpb24uVERNb2RlbEVsZW1lbnRzQ3JlYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlBhY2thZ2VhYmxlRWxlbWVudDsKKworLyoqCisgKiBURCBsYW5ndWFnZSBzdXBwb3J0LgorICoKKyAqLworcHVibGljIGNsYXNzIFRETGFuZ0NvZGVnZW4gaW1wbGVtZW50cyBJTGFuZ0NvZGVnZW4yIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURF9HRU5FUkFUT1JfREVTQyA9ICJBIFdvVCBURCBnZW5lcmF0b3IuIjsgLy8kTk9OLU5MUy0xJAorCisJcHJvdGVjdGVkIE1vZGVsRWxlbWVudHNDcmVhdG9yIGNyZWF0b3IgPSBudWxsOworCQorCS8qKgorCSAqIFRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgTW9kZWwgdG8gdGhlIFREIGNvZGUuCisJICovCisJcHJvdGVjdGVkIFBhY2thZ2VhYmxlRWxlbWVudCBwZTsKKworCXByb3RlY3RlZCBJUHJvamVjdCBsYXN0UHJvamVjdCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3Rvci4KKwkgKgorCSAqIEBwYXJhbSBtb2RlbFRvVERRdWVyaWVzCisJICogICAgICAgICAgICBUaGUgdHJhbnNsYXRpb24gb2YgdGhlIE1vZGVsIHRvIHRoZSBURCBjb2RlCisJICovCisJcHVibGljIFRETGFuZ0NvZGVnZW4oUGFja2FnZWFibGVFbGVtZW50IHBlKSB7CisJCXRoaXMucGUgPSBwZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIubGFuZ3VhZ2VzLmNvbW1vbi5leHRlbnNpb25wb2ludHMuSUxhbmdDb2RlZ2VuMiNnZXREZXNjcmlwdGlvbigpCisJICoKKwkgKiBAcmV0dXJuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJcmV0dXJuIFREX0dFTkVSQVRPUl9ERVNDOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5kZXNpZ25lci5sYW5ndWFnZXMuY29tbW9uLmV4dGVuc2lvbnBvaW50cy5JTGFuZ0NvZGVnZW4yI2lzRWxpZ2libGUob3JnLmVjbGlwc2UudW1sMi51bWwuRWxlbWVudCkKKwkgKgorCSAqIEBwYXJhbSBtb2RlbEVsZW1lbnQKKwkgKiBAcmV0dXJuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNFbGlnaWJsZShFbGVtZW50IG1vZGVsRWxlbWVudCkgeworCQlpZiAobW9kZWxFbGVtZW50IGluc3RhbmNlb2YgUGFja2FnZWFibGVFbGVtZW50KSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmRlc2lnbmVyLmxhbmd1YWdlcy5jb21tb24uZXh0ZW5zaW9ucG9pbnRzLklMYW5nQ29kZWdlbjIjZ2V0U3VmZml4KG9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIubGFuZ3VhZ2VzLmNvbW1vbi5leHRlbnNpb25wb2ludHMuSUxhbmdDb2RlZ2VuLkZJTEVfS0lORCkKKwkgKgorCSAqIEBwYXJhbSBmaWxlS2luZAorCSAqIEByZXR1cm4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFN1ZmZpeChGSUxFX0tJTkQgZmlsZUtpbmQpIHsKKwkJcmV0dXJuICJqc29uIjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIubGFuZ3VhZ2VzLmNvbW1vbi5leHRlbnNpb25wb2ludHMuSUxhbmdDb2RlZ2VuI2dlbmVyYXRlQ29kZShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCwgb3JnLmVjbGlwc2UudW1sMi51bWwuUGFja2FnZWFibGVFbGVtZW50LCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKKwkgKgorCSAqIEBwYXJhbSBwcm9qZWN0CisJICogQHBhcmFtIGVsZW1lbnQKKwkgKiBAcGFyYW0gbW9uaXRvcgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGdlbmVyYXRlQ29kZShJUHJvamVjdCBwcm9qZWN0LCBQYWNrYWdlYWJsZUVsZW1lbnQgZWxlbWVudCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCW1hbmFnZUNyZWF0b3IocHJvamVjdCwgZWxlbWVudCk7CisJCWNyZWF0b3IuY3JlYXRlUGFja2FnZWFibGVFbGVtZW50KGVsZW1lbnQsIG1vbml0b3IpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5kZXNpZ25lci5sYW5ndWFnZXMuY29tbW9uLmV4dGVuc2lvbnBvaW50cy5JTGFuZ0NvZGVnZW4jY2xlYW5Db2RlKG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0LCBvcmcuZWNsaXBzZS51bWwyLnVtbC5QYWNrYWdlYWJsZUVsZW1lbnQsIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yKQorCSAqCisJICogQHBhcmFtIHByb2plY3QKKwkgKiBAcGFyYW0gZWxlbWVudAorCSAqIEBwYXJhbSBtb25pdG9yCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY2xlYW5Db2RlKElQcm9qZWN0IHByb2plY3QsIFBhY2thZ2VhYmxlRWxlbWVudCBlbGVtZW50LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJbWFuYWdlQ3JlYXRvcihwcm9qZWN0LCBlbGVtZW50KTsKKwkJY3JlYXRvci5yZW1vdmVQYWNrYWdlYWJsZUVsZW1lbnQoZWxlbWVudCwgbW9uaXRvcik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmRlc2lnbmVyLmxhbmd1YWdlcy5jb21tb24uZXh0ZW5zaW9ucG9pbnRzLklMYW5nQ29kZWdlbiNnZXRGaWxlTmFtZShvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCwgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50KQorCSAqCisJICogQHBhcmFtIHByb2plY3QKKwkgKiBAcGFyYW0gZWxlbWVudAorCSAqIEByZXR1cm4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldEZpbGVOYW1lKElQcm9qZWN0IHByb2plY3QsIE5hbWVkRWxlbWVudCBlbGVtZW50KSB7CisJCW1hbmFnZUNyZWF0b3IocHJvamVjdCwgZWxlbWVudCk7CisJCXJldHVybiBjcmVhdG9yLmdldEZpbGVOYW1lKGVsZW1lbnQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5kZXNpZ25lci5sYW5ndWFnZXMuY29tbW9uLmV4dGVuc2lvbnBvaW50cy5JTGFuZ0NvZGVnZW4jZ2V0VGFyZ2V0UHJvamVjdChvcmcuZWNsaXBzZS51bWwyLnVtbC5QYWNrYWdlYWJsZUVsZW1lbnQsIGJvb2xlYW4pCisJICoKKwkgKiBAcGFyYW0gcGUKKwkgKiBAcGFyYW0gY3JlYXRlSWZNaXNzaW5nCisJICogQHJldHVybgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJUHJvamVjdCBnZXRUYXJnZXRQcm9qZWN0KFBhY2thZ2VhYmxlRWxlbWVudCBwZSwgYm9vbGVhbiBjcmVhdGVJZk1pc3NpbmcpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogTWFuYWdlIHRoZSBURE1vZGVsRWxlbWVudHNDcmVhdG9yLgorCSAqIAorCSAqIEBwYXJhbSBwcm9qZWN0CisJICogICAgICAgICAgICBUaGUgdGFyZ2V0IHByb2plY3QKKwkgKiBAcGFyYW0gZWxlbWVudAorCSAqICAgICAgICAgICAgdGhlIHNlbGVjdGVkIGVsZW1lbnQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBtYW5hZ2VDcmVhdG9yKElQcm9qZWN0IHByb2plY3QsIEVsZW1lbnQgZWxlbWVudCkgeworCQlpZiAoKHByb2plY3QgPT0gbnVsbCkgJiYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQYWNrYWdlYWJsZUVsZW1lbnQpKSB7CisJCQlwcm9qZWN0ID0gZ2V0VGFyZ2V0UHJvamVjdCgoUGFja2FnZWFibGVFbGVtZW50KSBlbGVtZW50LCBmYWxzZSk7CisJCX0KKworCQlpZiAoKGNyZWF0b3IgPT0gbnVsbCkgfHwgKHByb2plY3QgIT0gbGFzdFByb2plY3QpKSB7CisJCQlsYXN0UHJvamVjdCA9IHByb2plY3Q7CisJCQljcmVhdG9yID0gbmV3IFRETW9kZWxFbGVtZW50c0NyZWF0b3IocHJvamVjdCwgKFBhY2thZ2VhYmxlRWxlbWVudCkgZWxlbWVudCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIubGFuZ3VhZ2VzLmNvbW1vbi5leHRlbnNpb25wb2ludHMuSUxhbmdDb2RlZ2VuMiNnZXRTeW5jSW5mb3JtYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKKwkgKgorCSAqIEBwYXJhbSBtZXRob2ROYW1lCisJICogQHBhcmFtIGJvZHkKKwkgKiBAcmV0dXJuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN5bmNJbmZvcm1hdGlvbiBnZXRTeW5jSW5mb3JtYXRpb24oU3RyaW5nIG1ldGhvZE5hbWUsIFN0cmluZyBib2R5KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5kZXNpZ25lci5sYW5ndWFnZXMuY29tbW9uLmV4dGVuc2lvbnBvaW50cy5JTGFuZ0NvZGVnZW4yI2dldE1ldGhvZEluZm8ob3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50KQorCSAqCisJICogQHBhcmFtIG9wZXJhdGlvbk9yQmVoYXZpb3IKKwkgKiBAcmV0dXJuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE1ldGhvZEluZm8gZ2V0TWV0aG9kSW5mbyhOYW1lZEVsZW1lbnQgb3BlcmF0aW9uT3JCZWhhdmlvcikgeworCQlyZXR1cm4gbnVsbDsKKwl9Cit9CmRpZmYgLS1naXQgYS9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3RkL2NvZGVnZW4vZ2VuZXJhdG9yL1RoaW5nR2VuZXJhdG9yLmphdmEgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3RkL2NvZGVnZW4vZ2VuZXJhdG9yL1RoaW5nR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwOGJiYgotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvdGQvY29kZWdlbi9nZW5lcmF0b3IvVGhpbmdHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4uZ2VuZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmc7CisKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uSW5jbHVkZS5JbmNsdWRlOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLkpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CisKK3B1YmxpYyBjbGFzcyBUaGluZ0dlbmVyYXRvciB7CisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVURENvZGUoVGhpbmcgdGhpbmcpIHsKKwkJT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKKwkJbWFwcGVyLnNldFNlcmlhbGl6YXRpb25JbmNsdXNpb24oSW5jbHVkZS5OT05fTlVMTCk7CisJCW1hcHBlci5zZXRTZXJpYWxpemF0aW9uSW5jbHVzaW9uKEluY2x1ZGUuTk9OX0VNUFRZKTsKKwkJdHJ5IHsKKwkJCVN0cmluZyBqc29uU3RyaW5nID0gbWFwcGVyLndyaXRlcldpdGhEZWZhdWx0UHJldHR5UHJpbnRlcigpLndyaXRlVmFsdWVBc1N0cmluZyh0aGluZyk7CisJCQlyZXR1cm4ganNvblN0cmluZzsKKwkJfSBjYXRjaCAoSnNvblByb2Nlc3NpbmdFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCXJldHVybiAiIjsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvdGQvY29kZWdlbi90cmFuc2Zvcm1hdGlvbi9UREdlbmVyYXRpb25VdGlsLmphdmEgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3RkL2NvZGVnZW4vdHJhbnNmb3JtYXRpb24vVERHZW5lcmF0aW9uVXRpbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMzJmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3RkL2NvZGVnZW4vdHJhbnNmb3JtYXRpb24vVERHZW5lcmF0aW9uVXRpbC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi50cmFuc2Zvcm1hdGlvbjsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgVERHZW5lcmF0aW9uVXRpbCB7CisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm90TnVsbE9yRW1wdHkgKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBudWxsKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQlyZXR1cm4gKChTdHJpbmcpIG9iamVjdCkuaXNFbXB0eSgpOworCQl9CisJCQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgTGlzdCkgeworCQkJcmV0dXJuICgoTGlzdCkgb2JqZWN0KS5pc0VtcHR5KCk7CisJCX0KKwkJCisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvdGQvY29kZWdlbi90cmFuc2Zvcm1hdGlvbi9URE1vZGVsRWxlbWVudHNDcmVhdG9yLmphdmEgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3RkL2NvZGVnZW4vdHJhbnNmb3JtYXRpb24vVERNb2RlbEVsZW1lbnRzQ3JlYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwODQzOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4vc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3RkL2NvZGVnZW4vdHJhbnNmb3JtYXRpb24vVERNb2RlbEVsZW1lbnRzQ3JlYXRvci5qYXZhCkBAIC0wLDAgKzEsMTIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE5IENFQSBMSVNULgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2Mi4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjIwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgCVNodWFpIExpIChDRUEgTElTVCkgPHNodWFpLmxpQGNlYS5mcj4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLnRyYW5zZm9ybWF0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5kZXNpZ25lci5sYW5ndWFnZXMuY29tbW9uLmJhc2UuSGllcmFyY2h5TG9jYXRpb25TdHJhdGVneTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmRlc2lnbmVyLmxhbmd1YWdlcy5jb21tb24uYmFzZS5Nb2RlbEVsZW1lbnRzQ3JlYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLnRvb2xzLmZpbGUuUHJvamVjdEJhc2VkRmlsZUFjY2VzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuLmdlbmVyYXRvci5UaGluZ0dlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlBhY2thZ2VhYmxlRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC51dGlsLlVNTFV0aWw7CisKKy8qKgorICogTWFpbiBjbGFzcyBvZiBURCBjb2RlIGdlbmVyYXRvci4KKyAqLworcHVibGljIGNsYXNzIFRETW9kZWxFbGVtZW50c0NyZWF0b3IgZXh0ZW5kcyBNb2RlbEVsZW1lbnRzQ3JlYXRvciB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVERfTEFORyA9ICJURCI7IC8vJE5PTi1OTFMtMSQKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSlNPTl9TVUZGSVggPSAianNvbiI7CisKKwlwcm90ZWN0ZWQgU3RyaW5nIHRkRXh0OworCisJLyoqCisJICogQ29uc3RydWN0b3IuCisJICogCisJICogQHBhcmFtIHByb2plY3QKKwkgKiAgICAgICAgICAgIHRoZSBwcm9qZWN0IGluIHdoaWNoIHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgYmUgcGxhY2VkCisJICogQHBhcmFtIG1vZGVsVG9URAorCSAqICAgICAgICAgICAgdGhlIHRyYW5zbGF0aW9uIG9mIHRoZSBNb2RlbCB0byB0aGUgVEQgY29kZQorCSAqLworCXB1YmxpYyBURE1vZGVsRWxlbWVudHNDcmVhdG9yKElQcm9qZWN0IHByb2plY3QsIFBhY2thZ2VhYmxlRWxlbWVudCBwZSkgeworCQl0aGlzKHByb2plY3QsIFREX0xBTkcsIHBlKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3Rvci4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvamVjdAorCSAqICAgICAgICAgICAgdGhlIHByb2plY3QgaW4gd2hpY2ggdGhlIGdlbmVyYXRlZCBjb2RlIHNob3VsZCBiZSBwbGFjZWQKKwkgKiBAcGFyYW0gbGFuZ3VhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBnZW5lcmF0b3IgbGFuZ3VhZ2UKKwkgKiBAcGFyYW0gbW9kZWxUb1RECisJICogICAgICAgICAgICB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIE1vZGVsIHRvIHRoZSBURCBjb2RlCisJICovCisJcHVibGljIFRETW9kZWxFbGVtZW50c0NyZWF0b3IoSVByb2plY3QgcHJvamVjdCwgU3RyaW5nIGxhbmd1YWdlLCBQYWNrYWdlYWJsZUVsZW1lbnQgcGUpIHsKKwkJc3VwZXIobmV3IFByb2plY3RCYXNlZEZpbGVBY2Nlc3MocHJvamVjdCksIG5ldyBIaWVyYXJjaHlMb2NhdGlvblN0cmF0ZWd5KCksIGxhbmd1YWdlKTsKKwkJdGhpcy5wcm9qZWN0ID0gcHJvamVjdDsKKwkJdGRFeHQgPSBKU09OX1NVRkZJWDsKKwl9CisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5kZXNpZ25lci5sYW5ndWFnZXMuY29tbW9uLmJhc2UuTW9kZWxFbGVtZW50c0NyZWF0b3Ijbm9Db2RlR2VuKG9yZy5lY2xpcHNlLnVtbDIudW1sLkVsZW1lbnQpCisJICoKKwkgKiBAcGFyYW0gZWxlbWVudAorCSAqIEByZXR1cm4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBub0NvZGVHZW4oRWxlbWVudCBlbGVtZW50KSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIubGFuZ3VhZ2VzLmNvbW1vbi5iYXNlLk1vZGVsRWxlbWVudHNDcmVhdG9yI2NyZWF0ZVBhY2thZ2VhYmxlRWxlbWVudEZpbGUob3JnLmVjbGlwc2UudW1sMi51bWwuUGFja2FnZWFibGVFbGVtZW50LCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKKwkgKgorCSAqIEBwYXJhbSBwZQorCSAqIEBwYXJhbSBtb25pdG9yCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlUGFja2FnZWFibGVFbGVtZW50RmlsZShQYWNrYWdlYWJsZUVsZW1lbnQgcGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQlnZW5lcmF0ZVRoaW5nKHBlKTsKKwkJZm9yIChFbGVtZW50IGVsZW1lbnQgOiBwZS5hbGxPd25lZEVsZW1lbnRzKCkpIHsKKwkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgUHJvcGVydHkpIHsKKwkJCQlQcm9wZXJ0eSBwcm9wZXJ0eSA9IChQcm9wZXJ0eSkgZWxlbWVudDsKKwkJCQlpZiAocHJvcGVydHkuZ2V0VHlwZSgpICE9IG51bGwpIHsKKwkJCQkJZ2VuZXJhdGVUaGluZyhwcm9wZXJ0eS5nZXRUeXBlKCkpOworCQkJCX0KKwkJCX0KKwkJCWdlbmVyYXRlVGhpbmcoZWxlbWVudCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBHZW5lcmF0ZSB0aGUgVEQgY29kZSBmb3IgZWFjaCBzdWIgZW50aXR5LgorCSAqIAorCSAqIEBwYXJhbSB0b3BFbnRpdHkKKwkgKiAgICAgICAgICAgIHRoZSB0b3AgZW50aXR5ICh0b3AgY2xhc3MpCisJICogQHBhcmFtIG1vZGVsVG9URAorCSAqICAgICAgICAgICAgdGhlIHRyYW5zbGF0aW9uIG9mIHRoZSBNb2RlbCB0byB0aGUgVEQgY29kZQorCSAqLworCXByaXZhdGUgdm9pZCBnZW5lcmF0ZVRoaW5nKEVsZW1lbnQgZWxlbWVudCkgeworCQlUaGluZyB0aGluZyA9IFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKGVsZW1lbnQsIFRoaW5nLmNsYXNzKTsKKwkJaWYgKHRoaW5nICE9IG51bGwpIHsKKwkJCWdlbmVyYXRlVERDb2RlKHRoaW5nKTsKKwkJfQorCX0KKworCisJLyoqCisJICogR2VuZXJhdGUgdGhlIGZpbmFsIFREIGNvZGUgZmlsZS4KKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2VuZXJhdGVURENvZGUoVGhpbmcgdGhpbmcpIHsKKwkJU3RyaW5nIHJlc3VsdCA9IFRoaW5nR2VuZXJhdG9yLmdlbmVyYXRlVERDb2RlKHRoaW5nKS50b1N0cmluZygpOworCQlTdHJpbmcgZmlsZU5hbWVURCA9IGxvY1N0cmF0ZWd5LmdldEZpbGVOYW1lKHRoaW5nLmdldEJhc2VfQ2xhc3MoKSkgKyAiLiIgKyB0ZEV4dDsgLy8kTk9OLU5MUy0xJAorCQlmaWxlU3lzdGVtQWNjZXNzLmdlbmVyYXRlRmlsZShmaWxlTmFtZVRELCByZXN1bHQpOworCX0KK30KZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS8uY2xhc3NwYXRoIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkZTUyMAotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIG91dHB1dD0idGFyZ2V0L2NsYXNzZXMiIHBhdGg9InNyYy9tYWluL2phdmEiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ib3B0aW9uYWwiIHZhbHVlPSJ0cnVlIi8+CisJCQk8YXR0cmlidXRlIG5hbWU9Im1hdmVuLnBvbWRlcml2ZWQiIHZhbHVlPSJ0cnVlIi8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIG91dHB1dD0idGFyZ2V0L3Rlc3QtY2xhc3NlcyIgcGF0aD0ic3JjL3Rlc3QvamF2YSI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJvcHRpb25hbCIgdmFsdWU9InRydWUiLz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ibWF2ZW4ucG9tZGVyaXZlZCIgdmFsdWU9InRydWUiLz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0idGVzdCIgdmFsdWU9InRydWUiLz4KKwkJPC9hdHRyaWJ1dGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtYXZlbi5wb21kZXJpdmVkIiB2YWx1ZT0idHJ1ZSIvPgorCQk8L2F0dHJpYnV0ZXM+CisJPC9jbGFzc3BhdGhlbnRyeT4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5tMmUuTUFWRU4yX0NMQVNTUEFUSF9DT05UQUlORVIiPgorCQk8YXR0cmlidXRlcz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0ibWF2ZW4ucG9tZGVyaXZlZCIgdmFsdWU9InRydWUiLz4KKwkJPC9hdHRyaWJ1dGVzPgorCTwvY2xhc3NwYXRoZW50cnk+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0idGFyZ2V0L2NsYXNzZXMiLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlLy5wcm9qZWN0IGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTFhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUvLnByb2plY3QKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5tMmUuY29yZS5tYXZlbjJCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UubTJlLmNvcmUubWF2ZW4yTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjI2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2VuY29kaW5nLzxwcm9qZWN0Pj1VVEYtOApkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhYzMwMQotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw2IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5yZWxlYXNlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm0yZS5jb3JlLnByZWZzIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5tMmUuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODk3YTdmCi0tLSAvZGV2L251bGwKKysrIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5tMmUuY29yZS5wcmVmcwpAQCAtMCwwICsxLDQgQEAKK2FjdGl2ZVByb2ZpbGVzPQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Jlc29sdmVXb3Jrc3BhY2VQcm9qZWN0cz10cnVlCit2ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0YmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNiBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwKK3NyYy5pbmNsdWRlcyA9IGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTA3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzA0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJeworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCX0KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJfQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCQorCX0KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmY2VkOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTM4IEBACisjIE5MU19NRVNTQUdFRk9STUFUX1ZBUgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1XZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uIEpTT04tTEQgR2VuZXJhdG9yIChJbmN1YmF0aW9uKQorCisjICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCitwcm92aWRlck5hbWU9RWNsaXBzZSBNb2RlbGluZyBQcm9qZWN0IAorCisjICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKKyMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQorbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKKworIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKKyMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgorbGljZW5zZT1cCitFY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnRcblwKK0FwcmlsIDksIDIwMTRcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKK1x0LSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAorXHQgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKK1x0ICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorXHQtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSlcblwKK1x0ICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCitcdC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCitcdCAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKK1x0ICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKK1x0ICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCitcdC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCitcdCAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCitcblwKK1RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKK2NvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAorY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKK2luIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKK0xpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAorXG5cCitcdC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCitcdC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKK1x0LSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCitcdC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorXHQtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKK1xuXAorTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAorUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFxuXAorVXBkYXRlIExpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAorSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKK3dpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCit5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCit0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiIGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuXG5cCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlXG5cCit0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0XG5cCitnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKK1xuXAorVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAorVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCitTT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCitcblwKK1x0LSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saWNlbnNlcy9lZGwtdjEuMC5odG1sKVxuXAorXHQtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAorXHQtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAorXHQtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKK1x0LSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAorXG5cCitJVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCitUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKK2lzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCitnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCitcblwKK1xuXFVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAorXG5cCitUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsXG5cCitidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIgKCJQcm92aXNpb25pbmcgVGVjaG5vbG9neSIpIGZvclxuXAordGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yXG5cCitvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAiSW5zdGFsbGFibGUgU29mdHdhcmUiKS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGhcblwKK3RoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLlxuXAorSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCAoIlNwZWNpZmljYXRpb24iKS5cblwKK1xuXAorWW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlXG5cCitJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAoraW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZFxuXAorbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXJcblwKK2FncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzpcblwKK1xuXAorXHQxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCitcdCAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCJUYXJnZXQgTWFjaGluZSIpIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLFxuXAorXHQgICBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZCBwcm9kdWN0LlxuXAorXHQyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCitcdCAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLlxuXAorXHQzLiBQdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdFxuXAorXHQgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorXHQgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmUgaW4gYWNjb3JkYW5jZVxuXAorXHQgICB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGVcblwKK1x0ICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorXHQgICB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2hcblwKK1x0ICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvblxuXAorXHQgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMWU4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9hZGRvbnMvd290L29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTAsMCArMSw0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmZWF0dXJlCisgICAgICBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjAuMC5xdWFsaWZpZXIiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cHM6Ly9lY2xpcHNlLm9yZy9wYXB5cnVzLyI+CisgICAgICBQcm92aWRlIHRoZSBjYXBhYmlsaXR5IHRvIGV4ZWN1dGUgYSBzdWJzZXQgb2YgVU1MIGludGVyYWN0aW9ucworICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodCB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj4KKyAgICAgIENvcHlyaWdodCAoYykgMjAyMCBDRUEKK0FsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZQordjEuMAord2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCitDb250cmlidXRvcnM6CisqICBTaHVhaSBMaSAoQ0VBIExJU1QpIHNodWFpLmxpQGNlYS5mciAtIEluaXRpYWwgQVBJCithbmQgaW1wbGVtZW50YXRpb24KKyAgIDwvY29weXJpZ2h0PgorCisgICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KKyAgICAgICVsaWNlbnNlCisgICA8L2xpY2Vuc2U+CisKKyAgIDxyZXF1aXJlcz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UucGFweXJ1cy5kZXNpZ25lci5sYW5ndWFnZXMuY29tbW9uLmZlYXR1cmUiLz4KKyAgIDwvcmVxdWlyZXM+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5jb2RlZ2VuIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbi51aSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkMzRjMwotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Cis8dGl0bGU+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5BcHJpbCA5LCAyMDE0PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5FY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saWNlbnNlcy9lZGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGljZW5zZXMvZWRsLXYxLjAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS9wb20ueG1sIGIvYWRkb25zL3dvdC9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1NWNkMwotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3Qvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZS9wb20ueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgoreHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCTxwYXJlbnQ+CisJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuYWRkb25zLndvdDwvYXJ0aWZhY3RJZD4KKwkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbDwvZ3JvdXBJZD4KKwkJPHZlcnNpb24+MS4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZTwvYXJ0aWZhY3RJZD4KKwk8cGFja2FnaW5nPmVjbGlwc2UtZmVhdHVyZTwvcGFja2FnaW5nPgorCTxuYW1lPm9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmU8L25hbWU+CisJPGRlc2NyaXB0aW9uPlBhcHlydXMgSW9ULU1MIFdvVCBURCBmZWF0dXJlPC9kZXNjcmlwdGlvbj4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hZGRvbnMvd290L3BvbS54bWwgYi9hZGRvbnMvd290L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzNDA4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FkZG9ucy93b3QvcG9tLnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisJPHBhcmVudD4KKwkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5hZGRvbnM8L2FydGlmYWN0SWQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWw8L2dyb3VwSWQ+CisJCTx2ZXJzaW9uPjEuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvcGFyZW50PgorCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuYWRkb25zLndvdDwvYXJ0aWZhY3RJZD4KKwk8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorCisJPG1vZHVsZXM+CisJCTxtb2R1bGU+b3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuY29kZWdlbjwvbW9kdWxlPgorCQk8bW9kdWxlPm9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmNvZGVnZW4udWk8L21vZHVsZT4KKwkJPG1vZHVsZT5vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlPC9tb2R1bGU+CisJCQorCTwvbW9kdWxlcz4KKwkKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggM2JhNDE3MS4uOWViY2U1MSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtNzEsNyArNzEsMTAgQEAKICBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEwMCwyLjAuMCkiO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAogIG9yZy5lY2xpcHNlLnVtbDIudHlwZXM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCiAgb3JnLmVjbGlwc2UudW1sMi51bWw7dmlzaWJpbGl0eTo9cmVleHBvcnQsCi0gb3JnLmVjbGlwc2UudW1sMi51bWwucmVzb3VyY2VzCisgb3JnLmVjbGlwc2UudW1sMi51bWwucmVzb3VyY2VzLAorIGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLmphY2tzb24tYW5ub3RhdGlvbnM7YnVuZGxlLXZlcnNpb249IlsyLjkuMCwgMy4wLjApIiwKKyBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZS5qYWNrc29uLWNvcmU7YnVuZGxlLXZlcnNpb249IlsyLjkuMCwgMy4wLjApIiwKKyBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZS5qYWNrc29uLWRhdGFiaW5kO2J1bmRsZS12ZXJzaW9uPSJbMi45LjAsIDMuMC4wKSIKIEVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9tb2RlbC9Jb1QtTUwucHJvZmlsZS5nZW5tb2RlbCBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9tb2RlbC9Jb1QtTUwucHJvZmlsZS5nZW5tb2RlbAppbmRleCBjOGY4ZTNmLi4xOWUzYTljIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvbW9kZWwvSW9ULU1MLnByb2ZpbGUuZ2VubW9kZWwKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL21vZGVsL0lvVC1NTC5wcm9maWxlLmdlbm1vZGVsCkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvMi4yLjAvR2VuTW9kZWwiCi0gICAgY29weXJpZ2h0VGV4dD0iQ29weXJpZ2h0IChjKSAyMDE4IENFQSYjeEQ7JiN4QTsmI3hEOyYjeEE7IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMmI3hEOyYjeEE7IGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCYjeEQ7JiN4QTsgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQmI3hEOyYjeEE7IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJiN4RDsmI3hBOyYjeEQ7JiN4QTtDb250cmlidXRvcnM6JiN4RDsmI3hBOyAgSsOpcsOpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24mI3hEOyYjeEE7ICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiYjeEQ7JiN4QTsiCisgICAgY29weXJpZ2h0VGV4dD0iQ29weXJpZ2h0IChjKSAyMDE4IENFQSYjeEE7JiN4QTsgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyYjeEE7IGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCYjeEE7IHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0JiN4QTsgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmI3hBOyYjeEE7Q29udHJpYnV0b3JzOiYjeEE7ICBKw6lyw6ltaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiYjeEE7ICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiYjeEE7ICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24mI3hBOyIKICAgICBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuIiBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUiCiAgICAgbW9kZWxOYW1lPSJJb1QtTUwiIHJvb3RFeHRlbmRzQ2xhc3M9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbCRDb250YWluZXIiCiAgICAgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UudW1sMi51bWwuZWNvcmUuaW1wb3J0ZXIiIGNvbXBsaWFuY2VMZXZlbD0iOC4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIgpAQCAtNDE2LDExICs0MTYsMTUgQEAKICAgICAgICAgPGdlbkVudW1MaXRlcmFscyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRW51bUxpdGVyYWwiIGVjb3JlRW51bUxpdGVyYWw9ImlvdG1sLmVjb3JlIy8vd290L1N1YlByb3RvY29sS2luZC9zc2UiLz4KICAgICAgIDwvZ2VuRW51bXM+CiAgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9ImlvdG1sLmVjb3JlIy8vd290L1RoaW5nIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpb3RtbC5lY29yZSMvL3dvdC9UaGluZy90aXRsZSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGlvdG1sLmVjb3JlIy8vd290L1RoaW5nL2Rlc2NyaXB0aW9uIi8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgogICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGlvdG1sLmVjb3JlIy8vd290L1RoaW5nL2Jhc2UiLz4KICAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpb3RtbC5lY29yZSMvL3dvdC9UaGluZy9pZCIvPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGlvdG1sLmVjb3JlIy8vd290L1RoaW5nL3N1cHBvcnQiLz4KICAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvVGhpbmcvc2VjdXJpdHkiLz4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCiAgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvVGhpbmcvc2VjdXJpdHlEZWZpbml0aW9ucyIvPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKICAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9UaGluZy9saW5rcyIvPgpAQCAtNDMyLDE1ICs0MzYsMTkgQEAKICAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9UaGluZy9wcm9wZXJ0aWVzIi8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvVGhpbmcvdmVyc2lvbiIvPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKLSAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9UaGluZy90eXBlIi8+CisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvVGhpbmcvYVR5cGUiLz4KICAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCi0gICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvVGhpbmcvY29udGV4dCIvPgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L1RoaW5nL2FDb250ZXh0Ii8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgogICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L1RoaW5nL2Zvcm1zIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L1RoaW5nL2Jhc2VfQ2xhc3MiLz4KICAgICAgIDwvZ2VuQ2xhc3Nlcz4KICAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0iaW90bWwuZWNvcmUjLy93b3QvU2VjdXJpdHlTY2hlbWUiPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKICAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9TZWN1cml0eVNjaGVtZS9iYXNlX0NsYXNzaWZpZXIiLz4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpb3RtbC5lY29yZSMvL3dvdC9TZWN1cml0eVNjaGVtZS90aXRsZSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGlvdG1sLmVjb3JlIy8vd290L1NlY3VyaXR5U2NoZW1lL2Rlc2NyaXB0aW9uIi8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvU2VjdXJpdHlTY2hlbWUvc2NoZW1lIi8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvU2VjdXJpdHlTY2hlbWUvcHJveHkiLz4KICAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpb3RtbC5lY29yZSMvL3dvdC9TZWN1cml0eVNjaGVtZS9pbiIvPgpAQCAtNDY3LDcgKzQ3NSw3IEBACiAgICAgICA8L2dlbkNsYXNzZXM+CiAgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9ImlvdG1sLmVjb3JlIy8vd290L0V2ZW50QWZmb3JkYW5jZSI+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgotICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L0V2ZW50QWZmb3JkYW5jZS9iYXNlX1NpZ25hbCIvPgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L0V2ZW50QWZmb3JkYW5jZS9iYXNlX1JlY2VwdGlvbiIvPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKICAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9FdmVudEFmZm9yZGFuY2UvZGF0YSIvPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKQEAgLTQ3NiwxMCArNDg0LDEyIEBACiAgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvRXZlbnRBZmZvcmRhbmNlL2NhbmNlbGxhdGlvbiIvPgogICAgICAgPC9nZW5DbGFzc2VzPgogICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImlvdG1sLmVjb3JlIy8vd290L0ludGVyYWN0aW9uQWZmb3JkYW5jZSI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvSW50ZXJhY3Rpb25BZmZvcmRhbmNlL3RpdGxlIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvSW50ZXJhY3Rpb25BZmZvcmRhbmNlL2Rlc2NyaXB0aW9uIi8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgogICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L0ludGVyYWN0aW9uQWZmb3JkYW5jZS9mb3JtcyIvPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKLSAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9JbnRlcmFjdGlvbkFmZm9yZGFuY2UvdHlwZSIvPgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L0ludGVyYWN0aW9uQWZmb3JkYW5jZS9hVHlwZSIvPgogICAgICAgPC9nZW5DbGFzc2VzPgogICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJpb3RtbC5lY29yZSMvL3dvdC9Gb3JtIj4KICAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpb3RtbC5lY29yZSMvL3dvdC9Gb3JtL29wIi8+CkBAIC00OTAsNiArNTAwLDEwIEBACiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvRm9ybS9zdWJQcm90b2NvbCIvPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGlvdG1sLmVjb3JlIy8vd290L0Zvcm0vc2NvcGVzIi8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvRm9ybS9yZXNwb25zZSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9Gb3JtL3NlY3VyaXR5Ii8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L0Zvcm0vYmFzZV9Db21tZW50Ii8+CiAgICAgICA8L2dlbkNsYXNzZXM+CiAgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9ImlvdG1sLmVjb3JlIy8vd290L1R5cGUiPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGlvdG1sLmVjb3JlIy8vd290L1R5cGUvbmFtZSIvPgpAQCAtNDk3LDEyICs1MTEsMTIgQEAKICAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9UeXBlL2Jhc2VfVHlwZSIvPgogICAgICAgPC9nZW5DbGFzc2VzPgogICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJpb3RtbC5lY29yZSMvL3dvdC9EYXRhU2NoZW1hIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpb3RtbC5lY29yZSMvL3dvdC9EYXRhU2NoZW1hL3RpdGxlIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvRGF0YVNjaGVtYS9kZXNjcmlwdGlvbiIvPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKICAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9EYXRhU2NoZW1hL2Jhc2VfVHlwZWRFbGVtZW50Ii8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgotICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L0RhdGFTY2hlbWEvZW51bSIvPgotICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKLSAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9EYXRhU2NoZW1hL251bWJlckludGVydmFsIi8+CisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvRGF0YVNjaGVtYS9lbnVtIi8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgogICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L0RhdGFTY2hlbWEvcmVxdWlyZWQiLz4KICAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCkBAIC01MTAsMTkgKzUyNCwyNSBAQAogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKICAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9EYXRhU2NoZW1hL3Byb3BlcnRpZXMiLz4KICAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCi0gICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvRGF0YVNjaGVtYS90eXBlIi8+CisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvRGF0YVNjaGVtYS9hVHlwZSIvPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGlvdG1sLmVjb3JlIy8vd290L0RhdGFTY2hlbWEvd3JpdGVPbmx5Ii8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvRGF0YVNjaGVtYS9mb3JtYXQiLz4KICAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCiAgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvRGF0YVNjaGVtYS9vbmVPZiIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpb3RtbC5lY29yZSMvL3dvdC9EYXRhU2NoZW1hL3R5cGUiLz4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpb3RtbC5lY29yZSMvL3dvdC9EYXRhU2NoZW1hL2NvbnN0Ii8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvRGF0YVNjaGVtYS9taW5JdGVtcyIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGlvdG1sLmVjb3JlIy8vd290L0RhdGFTY2hlbWEvbWF4SXRlbXMiLz4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpb3RtbC5lY29yZSMvL3dvdC9EYXRhU2NoZW1hL3JlYWRPbmx5Ii8+CiAgICAgICA8L2dlbkNsYXNzZXM+CiAgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9ImlvdG1sLmVjb3JlIy8vd290L0FjdGlvbkFmZm9yZGFuY2UiPgogICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBpb3RtbC5lY29yZSMvL3dvdC9BY3Rpb25BZmZvcmRhbmNlL2Jhc2VfT3BlcmF0aW9uIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgogICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGlvdG1sLmVjb3JlIy8vd290L0FjdGlvbkFmZm9yZGFuY2UvaW5wdXQiLz4KICAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCiAgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvQWN0aW9uQWZmb3JkYW5jZS9vdXRwdXQiLz4KLSAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCi0gICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgaW90bWwuZWNvcmUjLy93b3QvQWN0aW9uQWZmb3JkYW5jZS9iYXNlX0JlaGF2aW9yYWxGZWF0dXJlIi8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvQWN0aW9uQWZmb3JkYW5jZS9zYWZlIi8+CiAgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW90bWwuZWNvcmUjLy93b3QvQWN0aW9uQWZmb3JkYW5jZS9pZGVtcG90ZW50Ii8+CiAgICAgICA8L2dlbkNsYXNzZXM+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvbW9kZWwvSW9ULU1MLnByb2ZpbGUubGF5ZXJzIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL21vZGVsL0lvVC1NTC5wcm9maWxlLmxheWVycwppbmRleCBjZDAxOWM0Li4yOTEzM2JlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvbW9kZWwvSW9ULU1MLnByb2ZpbGUubGF5ZXJzCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9tb2RlbC9Jb1QtTUwucHJvZmlsZS5sYXllcnMKQEAgLTEwNCw0ICsxMDQsMTIgQEAKICAgICA8bGF5ZXJzIHhtaTp0eXBlPSJsYXllcnM6VG9wTGF5ZXJPcGVyYXRvciIgeG1pOmlkPSJfdUhQdllUZVNFZXF5SWVVb19EQ083dyIgYXBwbGljYXRpb249Il91RE95RURlU0VlcXlJZVVvX0RDTzd3IiBuYW1lPSJUb3AgTGF5ZXIiIGlzTGF5ZXJFbmFibGVkPSJ0cnVlIiBvd25pbmdMYXllcnNTdGFjaz0iX3VIUHZZRGVTRWVxeUllVW9fRENPN3ciIHN0YXRlPSJkZXRhY2hlZCIvPgogICAgIDxkaWFncmFtIHhtaTp0eXBlPSJub3RhdGlvbjpEaWFncmFtIiBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9tb2RlbC9Jb1QtTUwucHJvZmlsZS5ub3RhdGlvbiNfMDFmS3dDdU5FZW1BT0wxZVJqcjNCQSIvPgogICA8L2xheWVyc1N0YWNrcz4KKyAgPGxheWVyc1N0YWNrcyB4bWk6dHlwZT0ibGF5ZXJzOkxheWVyc1N0YWNrIiB4bWk6aWQ9Il9wNEVlNEhOTEVlcXd6NGtfdmJDUERRIiBzdGF0ZT0iZGV0YWNoZWQiPgorICAgIDxsYXllcnMgeG1pOnR5cGU9ImxheWVyczpUb3BMYXllck9wZXJhdG9yIiB4bWk6aWQ9Il9wNEVlNFhOTEVlcXd6NGtfdmJDUERRIiBhcHBsaWNhdGlvbj0iX3VET3lFRGVTRWVxeUllVW9fRENPN3ciIG5hbWU9IlRvcCBMYXllciIgaXNMYXllckVuYWJsZWQ9InRydWUiIG93bmluZ0xheWVyc1N0YWNrPSJfcDRFZTRITkxFZXF3ejRrX3ZiQ1BEUSIgc3RhdGU9ImRldGFjaGVkIi8+CisgICAgPGRpYWdyYW0geG1pOnR5cGU9Im5vdGF0aW9uOkRpYWdyYW0iIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL21vZGVsL0lvVC1NTC5wcm9maWxlLm5vdGF0aW9uI19Zc2U1Y0N0dkVlZVpJNnJNVFlWNjB3Ii8+CisgIDwvbGF5ZXJzU3RhY2tzPgorICA8bGF5ZXJzU3RhY2tzIHhtaTp0eXBlPSJsYXllcnM6TGF5ZXJzU3RhY2siIHhtaTppZD0iX3A0TkJ3SE5MRWVxd3o0a192YkNQRFEiIHN0YXRlPSJkZXRhY2hlZCI+CisgICAgPGxheWVycyB4bWk6dHlwZT0ibGF5ZXJzOlRvcExheWVyT3BlcmF0b3IiIHhtaTppZD0iX3A0TkJ3WE5MRWVxd3o0a192YkNQRFEiIGFwcGxpY2F0aW9uPSJfdURPeUVEZVNFZXF5SWVVb19EQ083dyIgbmFtZT0iVG9wIExheWVyIiBpc0xheWVyRW5hYmxlZD0idHJ1ZSIgb3duaW5nTGF5ZXJzU3RhY2s9Il9wNE5Cd0hOTEVlcXd6NGtfdmJDUERRIiBzdGF0ZT0iZGV0YWNoZWQiLz4KKyAgICA8ZGlhZ3JhbSB4bWk6dHlwZT0ibm90YXRpb246RGlhZ3JhbSIgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvbW9kZWwvSW9ULU1MLnByb2ZpbGUubm90YXRpb24jX21ZR1lFQ3R6RWVlWkk2ck1UWVY2MHciLz4KKyAgPC9sYXllcnNTdGFja3M+CiA8L2xheWVyczpMYXllcnNTdGFja0FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL21vZGVsL0lvVC1NTC5wcm9maWxlLm5vdGF0aW9uIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL21vZGVsL0lvVC1NTC5wcm9maWxlLm5vdGF0aW9uCmluZGV4IGY2NmU5M2MuLjdiZGVhNzAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9tb2RlbC9Jb1QtTUwucHJvZmlsZS5ub3RhdGlvbgorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvbW9kZWwvSW9ULU1MLnByb2ZpbGUubm90YXRpb24KQEAgLTQxOTgsMTQgKzQxOTgsNiBAQAogICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI09wZXJhdGlvbiIvPgogICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfLV9EZThTdVJFZW1BT0wxZVJqcjNCQSIgeD0iNzIwIiB5PSI2MCIvPgogICAgIDwvY2hpbGRyZW4+Ci0gICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfZUIyd3gzZlNFZW1FRDlwMTdMLWJqQSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfZUIyd3lIZlNFZW1FRDlwMTdMLWJqQSIvPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iX2VCMnd5bmZTRWVtRUQ5cDE3TC1iakEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+Ci0gICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI09wZXJhdGlvbiIvPgotICAgICAgPC9zdHlsZXM+Ci0gICAgICA8ZWxlbWVudCB4c2k6bmlsPSJ0cnVlIi8+Ci0gICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il9lQjJ3eVhmU0VlbUVEOXAxN0wtYmpBIiB4PSI5MjAiIHk9IjYwIi8+Ci0gICAgPC9jaGlsZHJlbj4KICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOlNoYXBlIiB4bWk6aWQ9Il90YldJb0hmbEVlbUVEOXAxN0wtYmpBIiB0eXBlPSJTdGVyZW90eXBlX1NoYXBlIiBmaWxsQ29sb3I9IjEyNjMyMjU2Ij4KICAgICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246RGVjb3JhdGlvbk5vZGUiIHhtaTppZD0iX3RiV0lvbmZsRWVtRUQ5cDE3TC1iakEiIHR5cGU9IlN0ZXJlb3R5cGVfTmFtZUxhYmVsIi8+CiAgICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkJhc2ljQ29tcGFydG1lbnQiIHhtaTppZD0iX3RiV0lvM2ZsRWVtRUQ5cDE3TC1iakEiIHZpc2libGU9ImZhbHNlIiB0eXBlPSJTdGVyZW90eXBlX0F0dHJpYnV0ZUNvbXBhcnRtZW50Ij4KQEAgLTQyNjIsMjYgKzQyNTQsMzQgQEAKICAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQcm9wZXJ0eSIvPgogICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfNU9DelFYZm9FZW1FRDlwMTdMLWJqQSIgeD0iODQwIiB5PSI2MCIvPgogICAgIDwvY2hpbGRyZW4+Ci0gICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfNU9WSEkzZm9FZW1FRDlwMTdMLWJqQSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfNU9WSEpIZm9FZW1FRDlwMTdMLWJqQSIvPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iXzVPVkhKbmZvRWVtRUQ5cDE3TC1iakEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+Ci0gICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI1Byb3BlcnR5Ii8+Ci0gICAgICA8L3N0eWxlcz4KLSAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KLSAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iXzVPVkhKWGZvRWVtRUQ5cDE3TC1iakEiIHg9IjIwMCIvPgotICAgIDwvY2hpbGRyZW4+CiAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfNi1TbzRIZm9FZW1FRDlwMTdMLWJqQSIgdHlwZT0iQ2xhc3NfTWV0YWNsYXNzU2hhcGUiPgogICAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpEZWNvcmF0aW9uTm9kZSIgeG1pOmlkPSJfNi1TbzRuZm9FZW1FRDlwMTdMLWJqQSIgdHlwZT0iQ2xhc3NfTWV0YWNsYXNzTmFtZUxhYmVsIi8+CiAgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjUGFyYW1ldGVyIi8+CiAgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il82LVNvNFhmb0VlbUVEOXAxN0wtYmpBIiB4PSI5NjAiIHk9IjYwIi8+CiAgICAgPC9jaGlsZHJlbj4KLSAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOlNoYXBlIiB4bWk6aWQ9Il82LWUySTNmb0VlbUVEOXAxN0wtYmpBIiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudCI+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpUaXRsZVN0eWxlIiB4bWk6aWQ9Il82LWUySkhmb0VlbUVEOXAxN0wtYmpBIi8+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfNi1lMkpuZm9FZW1FRDlwMTdMLWJqQSIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KKyAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOlNoYXBlIiB4bWk6aWQ9Il9aeXFQZzNKa0VlcXZhS0NSeXNhNTZBIiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudCI+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpUaXRsZVN0eWxlIiB4bWk6aWQ9Il9aeXFQaEhKa0VlcXZhS0NSeXNhNTZBIi8+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfWnlxUGhuSmtFZXF2YUtDUnlzYTU2QSIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KKyAgICAgICAgPGVPYmplY3RWYWx1ZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjT3BlcmF0aW9uIi8+CisgICAgICA8L3N0eWxlcz4KKyAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KKyAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX1p5cVBoWEprRWVxdmFLQ1J5c2E1NkEiIHg9IjkyMCIgeT0iNjAiLz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX1p5cVBxSEprRWVxdmFLQ1J5c2E1NkEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50Ij4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlRpdGxlU3R5bGUiIHhtaTppZD0iX1p5cVBxWEprRWVxdmFLQ1J5c2E1NkEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9aeTBBZ0hKa0VlcXZhS0NSeXNhNTZBIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQcm9wZXJ0eSIvPgorICAgICAgPC9zdHlsZXM+CisgICAgICA8ZWxlbWVudCB4c2k6bmlsPSJ0cnVlIi8+CisgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il9aeXFQcW5Ka0VlcXZhS0NSeXNhNTZBIiB4PSIxMDQwIiB5PSI2MCIvPgorICAgIDwvY2hpbGRyZW4+CisgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfWnkwQW1YSmtFZXF2YUtDUnlzYTU2QSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfWnkwQW1uSmtFZXF2YUtDUnlzYTU2QSIvPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iX1p5MEFuSEprRWVxdmFLQ1J5c2E1NkEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+CiAgICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI1BhcmFtZXRlciIvPgogICAgICAgPC9zdHlsZXM+CiAgICAgICA8ZWxlbWVudCB4c2k6bmlsPSJ0cnVlIi8+Ci0gICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il82LWUySlhmb0VlbUVEOXAxN0wtYmpBIiB4PSIyMDAiLz4KKyAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX1p5MEFtM0prRWVxdmFLQ1J5c2E1NkEiIHg9IjExNjAiIHk9IjYwIi8+CiAgICAgPC9jaGlsZHJlbj4KICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpTdHJpbmdWYWx1ZVN0eWxlIiB4bWk6aWQ9Il8wMWZLd1N1TkVlbUFPTDFlUmpyM0JBIiBuYW1lPSJkaWFncmFtX2NvbXBhdGliaWxpdHlfdmVyc2lvbiIgc3RyaW5nVmFsdWU9IjEuNC4wIi8+CiAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RGlhZ3JhbVN0eWxlIiB4bWk6aWQ9Il8wMWZLd2l1TkVlbUFPTDFlUmpyM0JBIi8+CkBAIC00MzQ5LDE2ICs0MzQ5LDYgQEAKICAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9Sd0lZVUN1U0VlbUFPTDFlUmpyM0JBIiBpZD0iKDAuNCwwLjApIi8+CiAgICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfUndJWVVTdVNFZW1BT0wxZVJqcjNCQSIgaWQ9IigwLjYsMS4wKSIvPgogICAgIDwvZWRnZXM+Ci0gICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iX2VCMnd5M2ZTRWVtRUQ5cDE3TC1iakEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfLV9EZThDdVJFZW1BT0wxZVJqcjNCQSIgdGFyZ2V0PSJfZUIyd3gzZlNFZW1FRDlwMTdMLWJqQSI+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX2VCMnd6SGZTRWVtRUQ5cDE3TC1iakEiLz4KLSAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9lQjJ3MEhmU0VlbUVEOXAxN0wtYmpBIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgotICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNPcGVyYXRpb24iLz4KLSAgICAgIDwvc3R5bGVzPgotICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgotICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfZUIyd3pYZlNFZW1FRDlwMTdMLWJqQSIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+Ci0gICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfZUIyd3puZlNFZW1FRDlwMTdMLWJqQSIvPgotICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX2VCMnd6M2ZTRWVtRUQ5cDE3TC1iakEiLz4KLSAgICA8L2VkZ2VzPgogICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il9acU1Id0hma0VlbUVEOXAxN0wtYmpBIiB0eXBlPSJHZW5lcmFsaXphdGlvbl9FZGdlIiBzb3VyY2U9Il9idVgxQUN1UUVlbUFPTDFlUmpyM0JBIiB0YXJnZXQ9Il9HZGc3OEN1UEVlbUFPTDFlUmpyM0JBIj4KICAgICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246RGVjb3JhdGlvbk5vZGUiIHhtaTppZD0iX1pxU09ZSGZrRWVtRUQ5cDE3TC1iakEiIHR5cGU9IkdlbmVyYWxpemF0aW9uX1N0ZXJlb3R5cGVMYWJlbCI+CiAgICAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkJvb2xlYW5WYWx1ZVN0eWxlIiB4bWk6aWQ9Il9iSVhWOEhma0VlbUVEOXAxN0wtYmpBIiBuYW1lPSJJU19VUERBVEVEX1BPU0lUSU9OIiBib29sZWFuVmFsdWU9InRydWUiLz4KQEAgLTQ0MDIsMTYgKzQzOTIsNiBAQAogICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX3ZNN2JBSGZsRWVtRUQ5cDE3TC1iakEiIGlkPSIoMC40LDAuMCkiLz4KICAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il92TTdiQVhmbEVlbUVEOXAxN0wtYmpBIiBpZD0iKDAuNCwxLjApIi8+CiAgICAgPC9lZGdlcz4KLSAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfNU9WSEozZm9FZW1FRDlwMTdMLWJqQSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnRMaW5rIiBzb3VyY2U9Il81T0N6UUhmb0VlbUVEOXAxN0wtYmpBIiB0YXJnZXQ9Il81T1ZISTNmb0VlbUVEOXAxN0wtYmpBIj4KLSAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkZvbnRTdHlsZSIgeG1pOmlkPSJfNU9WSEtIZm9FZW1FRDlwMTdMLWJqQSIvPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iXzVPVkhMSGZvRWVtRUQ5cDE3TC1iakEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+Ci0gICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI1Byb3BlcnR5Ii8+Ci0gICAgICA8L3N0eWxlcz4KLSAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KLSAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iXzVPVkhLWGZvRWVtRUQ5cDE3TC1iakEiIHBvaW50cz0iWzAsIDAsIDAsIDBdJFswLCAwLCAwLCAwXSIvPgotICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzVPVkhLbmZvRWVtRUQ5cDE3TC1iakEiLz4KLSAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il81T1ZISzNmb0VlbUVEOXAxN0wtYmpBIi8+Ci0gICAgPC9lZGdlcz4KICAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfNkFOUUFIZm9FZW1FRDlwMTdMLWJqQSIgdHlwZT0iRXh0ZW5zaW9uX0VkZ2UiIHNvdXJjZT0iX2tZaHlZSGZuRWVtRUQ5cDE3TC1iakEiIHRhcmdldD0iXzVPQ3pRSGZvRWVtRUQ5cDE3TC1iakEiPgogICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il82QU5RQVhmb0VlbUVEOXAxN0wtYmpBIi8+CiAgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgaHJlZj0iSW9ULU1MLnByb2ZpbGUudW1sI181X2NiQUhmb0VlbUVEOXAxN0wtYmpBIi8+CkBAIC00NDE5LDE2ICs0Mzk5LDYgQEAKICAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il82QWxxZ0hmb0VlbUVEOXAxN0wtYmpBIiBpZD0iKDAuNiwwLjApIi8+CiAgICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfNkFscWdYZm9FZW1FRDlwMTdMLWJqQSIgaWQ9IigwLjYsMC45OTIwMDAwMDAwMDAwMDAyKSIvPgogICAgIDwvZWRnZXM+Ci0gICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iXzYtZTJKM2ZvRWVtRUQ5cDE3TC1iakEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfNi1TbzRIZm9FZW1FRDlwMTdMLWJqQSIgdGFyZ2V0PSJfNi1lMkkzZm9FZW1FRDlwMTdMLWJqQSI+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iXzYtZTJLSGZvRWVtRUQ5cDE3TC1iakEiLz4KLSAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il82LWUyTEhmb0VlbUVEOXAxN0wtYmpBIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgotICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQYXJhbWV0ZXIiLz4KLSAgICAgIDwvc3R5bGVzPgotICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgotICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfNi1lMktYZm9FZW1FRDlwMTdMLWJqQSIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+Ci0gICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfNi1lMktuZm9FZW1FRDlwMTdMLWJqQSIvPgotICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzYtZTJLM2ZvRWVtRUQ5cDE3TC1iakEiLz4KLSAgICA8L2VkZ2VzPgogICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il83MlJad0hmb0VlbUVEOXAxN0wtYmpBIiB0eXBlPSJFeHRlbnNpb25fRWRnZSIgc291cmNlPSJfbEhpMGdIZm5FZW1FRDlwMTdMLWJqQSIgdGFyZ2V0PSJfNi1TbzRIZm9FZW1FRDlwMTdMLWJqQSI+CiAgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iXzcyUlp3WGZvRWVtRUQ5cDE3TC1iakEiLz4KICAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiBocmVmPSJJb1QtTUwucHJvZmlsZS51bWwjXzcxeTRvSGZvRWVtRUQ5cDE3TC1iakEiLz4KQEAgLTQ0MzYsNiArNDQwNiwzNiBAQAogICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzcycDBRSGZvRWVtRUQ5cDE3TC1iakEiIGlkPSIoMC42LDAuMCkiLz4KICAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il83MnAwUVhmb0VlbUVEOXAxN0wtYmpBIiBpZD0iKDAuNiwwLjk5MjAwMDAwMDAwMDAwMDIpIi8+CiAgICAgPC9lZGdlcz4KKyAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfWnlxUGgzSmtFZXF2YUtDUnlzYTU2QSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnRMaW5rIiBzb3VyY2U9Il8tX0RlOEN1UkVlbUFPTDFlUmpyM0JBIiB0YXJnZXQ9Il9aeXFQZzNKa0VlcXZhS0NSeXNhNTZBIj4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkZvbnRTdHlsZSIgeG1pOmlkPSJfWnlxUGlISmtFZXF2YUtDUnlzYTU2QSIvPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iX1p5cVBqSEprRWVxdmFLQ1J5c2E1NkEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+CisgICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI09wZXJhdGlvbiIvPgorICAgICAgPC9zdHlsZXM+CisgICAgICA8ZWxlbWVudCB4c2k6bmlsPSJ0cnVlIi8+CisgICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il9aeXFQaVhKa0VlcXZhS0NSeXNhNTZBIiBwb2ludHM9IlswLCAwLCAwLCAwXSRbMCwgMCwgMCwgMF0iLz4KKyAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9aeXFQaW5Ka0VlcXZhS0NSeXNhNTZBIi8+CisgICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfWnlxUGkzSmtFZXF2YUtDUnlzYTU2QSIvPgorICAgIDwvZWRnZXM+CisgICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iX1p5MEFnWEprRWVxdmFLQ1J5c2E1NkEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfNU9DelFIZm9FZW1FRDlwMTdMLWJqQSIgdGFyZ2V0PSJfWnlxUHFISmtFZXF2YUtDUnlzYTU2QSI+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX1p5MEFnbkprRWVxdmFLQ1J5c2E1NkEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9aeTBBaG5Ka0VlcXZhS0NSeXNhNTZBIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQcm9wZXJ0eSIvPgorICAgICAgPC9zdHlsZXM+CisgICAgICA8ZWxlbWVudCB4c2k6bmlsPSJ0cnVlIi8+CisgICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il9aeTBBZzNKa0VlcXZhS0NSeXNhNTZBIiBwb2ludHM9IlswLCAwLCAwLCAwXSRbMCwgMCwgMCwgMF0iLz4KKyAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9aeTBBaEhKa0VlcXZhS0NSeXNhNTZBIi8+CisgICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfWnkwQWhYSmtFZXF2YUtDUnlzYTU2QSIvPgorICAgIDwvZWRnZXM+CisgICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iX1p5MEFuWEprRWVxdmFLQ1J5c2E1NkEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfNi1TbzRIZm9FZW1FRDlwMTdMLWJqQSIgdGFyZ2V0PSJfWnkwQW1YSmtFZXF2YUtDUnlzYTU2QSI+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX1p5MEFubkprRWVxdmFLQ1J5c2E1NkEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9aeTBBb25Ka0VlcXZhS0NSeXNhNTZBIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQYXJhbWV0ZXIiLz4KKyAgICAgIDwvc3R5bGVzPgorICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfWnkwQW4zSmtFZXF2YUtDUnlzYTU2QSIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+CisgICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfWnkwQW9ISmtFZXF2YUtDUnlzYTU2QSIvPgorICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX1p5MEFvWEprRWVxdmFLQ1J5c2E1NkEiLz4KKyAgICA8L2VkZ2VzPgogICA8L25vdGF0aW9uOkRpYWdyYW0+CiAgIDxub3RhdGlvbjpEaWFncmFtIHhtaTppZD0iX2xydlJnRVoxRWVtanM0S01DMkNoUGciIHR5cGU9IlBhcHlydXNVTUxQcm9maWxlRGlhZ3JhbSIgbmFtZT0iV29ULVN0ZXJlb3R5cGVzIiBtZWFzdXJlbWVudFVuaXQ9IlBpeGVsIj4KICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOlNoYXBlIiB4bWk6aWQ9Il9ucG1zWUVaMUVlbWpzNEtNQzJDaFBnIiB0eXBlPSJTdGVyZW90eXBlX1NoYXBlIj4KQEAgLTU1ODQsNiArNTU4NCwzMSBAQAogICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzNaMHpBRDZ1RWVxQWZLZGxkelljLXciIGlkPSIoMC4zNjE0NDU3ODMxMzI1MzAxLDEuMCkiLz4KICAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il8zWjB6QVQ2dUVlcUFmS2RsZHpZYy13IiBpZD0iKDEuMCwwLjQ2MTUzODQ2MTUzODQ2MTU2KSIvPgogICAgIDwvZWRnZXM+CisgICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iXy1sMWNZSEprRWVxdmFLQ1J5c2E1NkEiIHR5cGU9IkFzc29jaWF0aW9uX0VkZ2UiIHNvdXJjZT0iX25wbXNZRVoxRWVtanM0S01DMkNoUGciIHRhcmdldD0iX0dkRzEwVVoyRWVtanM0S01DMkNoUGciPgorICAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpEZWNvcmF0aW9uTm9kZSIgeG1pOmlkPSJfLWwxY1kzSmtFZXF2YUtDUnlzYTU2QSIgdHlwZT0iQXNzb2NpYXRpb25fU3RlcmVvdHlwZUxhYmVsIj4KKyAgICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkxvY2F0aW9uIiB4bWk6aWQ9Il8tbDFjWkhKa0VlcXZhS0NSeXNhNTZBIiB5PSI2MCIvPgorICAgICAgPC9jaGlsZHJlbj4KKyAgICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246RGVjb3JhdGlvbk5vZGUiIHhtaTppZD0iXy1sMWNaWEprRWVxdmFLQ1J5c2E1NkEiIHR5cGU9IkFzc29jaWF0aW9uX05hbWVMYWJlbCI+CisgICAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpMb2NhdGlvbiIgeG1pOmlkPSJfLWwxY1puSmtFZXF2YUtDUnlzYTU2QSIgeT0iMjAiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkRlY29yYXRpb25Ob2RlIiB4bWk6aWQ9Il8tbDFjWjNKa0VlcXZhS0NSeXNhNTZBIiB0eXBlPSJBc3NvY2lhdGlvbl9UYXJnZXRSb2xlTGFiZWwiPgorICAgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246TG9jYXRpb24iIHhtaTppZD0iXy1sMWNhSEprRWVxdmFLQ1J5c2E1NkEiIHk9IjIwIi8+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpEZWNvcmF0aW9uTm9kZSIgeG1pOmlkPSJfLWwxY2FYSmtFZXF2YUtDUnlzYTU2QSIgdHlwZT0iQXNzb2NpYXRpb25fU291cmNlUm9sZUxhYmVsIj4KKyAgICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkxvY2F0aW9uIiB4bWk6aWQ9Il8tbDFjYW5Ka0VlcXZhS0NSeXNhNTZBIiB5PSItMjAiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkRlY29yYXRpb25Ob2RlIiB4bWk6aWQ9Il8tbDFjYTNKa0VlcXZhS0NSeXNhNTZBIiB0eXBlPSJBc3NvY2lhdGlvbl9Tb3VyY2VNdWx0aXBsaWNpdHlMYWJlbCI+CisgICAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpMb2NhdGlvbiIgeG1pOmlkPSJfLWwxY2JISmtFZXF2YUtDUnlzYTU2QSIgeT0iMjAiLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkRlY29yYXRpb25Ob2RlIiB4bWk6aWQ9Il8tbDFjYlhKa0VlcXZhS0NSeXNhNTZBIiB0eXBlPSJBc3NvY2lhdGlvbl9UYXJnZXRNdWx0aXBsaWNpdHlMYWJlbCI+CisgICAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpMb2NhdGlvbiIgeG1pOmlkPSJfLWwxY2JuSmtFZXF2YUtDUnlzYTU2QSIgeT0iLTIwIi8+CisgICAgICA8L2NoaWxkcmVuPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il8tbDFjWVhKa0VlcXZhS0NSeXNhNTZBIi8+CisgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOkFzc29jaWF0aW9uIiBocmVmPSJJb1QtTUwucHJvZmlsZS51bWwjXy1sRjFnSEprRWVxdmFLQ1J5c2E1NkEiLz4KKyAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iXy1sMWNZbkprRWVxdmFLQ1J5c2E1NkEiIHBvaW50cz0iWzM0NiwgMjAwLCAtNjQzOTg0LCAtNjQzOTg0XSRbNTQwLCAyMDAsIC02NDM5ODQsIC02NDM5ODRdIi8+CisgICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfLW5Cdk1ISmtFZXF2YUtDUnlzYTU2QSIgaWQ9IigxLjAsMC42ODAyNzIxMDg4NDM1Mzc0KSIvPgorICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXy1uQnZNWEprRWVxdmFLQ1J5c2E1NkEiIGlkPSIoMC4wLDAuNjMzNDg0MTYyODk1OTI3NikiLz4KKyAgICA8L2VkZ2VzPgogICA8L25vdGF0aW9uOkRpYWdyYW0+CiAgIDxub3RhdGlvbjpEaWFncmFtIHhtaTppZD0iXzdBY0w4RVo2RWVtanM0S01DMkNoUGciIHR5cGU9IlBhcHlydXNVTUxQcm9maWxlRGlhZ3JhbSIgbmFtZT0iV29ULUV4dGVuc2lvbnMiIG1lYXN1cmVtZW50VW5pdD0iUGl4ZWwiPgogICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX08xdlk4RmJDRWVtbXM2NU1iQXpOUHciIHR5cGU9IlN0ZXJlb3R5cGVfU2hhcGUiPgpAQCAtNTcyMiwzMyArNTc0Nyw2IEBACiAgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIGhyZWY9IklvVC1NTC5wcm9maWxlLnVtbCNfUGQ3V0VFWjJFZW1qczRLTUMyQ2hQZyIvPgogICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfTTFkaFFWYllFZW1tczY1TWJBek5QdyIgeD0iMTgwIiB5PSIyMDAiLz4KICAgICA8L2NoaWxkcmVuPgotICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX0hhWFNrSGZxRWVtRUQ5cDE3TC1iakEiIHR5cGU9IlN0ZXJlb3R5cGVfU2hhcGUiIGZpbGxDb2xvcj0iMTI2MzIyNTYiPgotICAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpEZWNvcmF0aW9uTm9kZSIgeG1pOmlkPSJfSGFkWk1IZnFFZW1FRDlwMTdMLWJqQSIgdHlwZT0iU3RlcmVvdHlwZV9OYW1lTGFiZWwiLz4KLSAgICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246QmFzaWNDb21wYXJ0bWVudCIgeG1pOmlkPSJfSGFkWk1YZnFFZW1FRDlwMTdMLWJqQSIgdmlzaWJsZT0iZmFsc2UiIHR5cGU9IlN0ZXJlb3R5cGVfQXR0cmlidXRlQ29tcGFydG1lbnQiPgotICAgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpUaXRsZVN0eWxlIiB4bWk6aWQ9Il9IYWRaTW5mcUVlbUVEOXAxN0wtYmpBIi8+Ci0gICAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlNvcnRpbmdTdHlsZSIgeG1pOmlkPSJfSGFkWk0zZnFFZW1FRDlwMTdMLWJqQSIvPgotICAgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGaWx0ZXJpbmdTdHlsZSIgeG1pOmlkPSJfSGFkWk5IZnFFZW1FRDlwMTdMLWJqQSIvPgotICAgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il9IYWRaTlhmcUVlbUVEOXAxN0wtYmpBIi8+Ci0gICAgICA8L2NoaWxkcmVuPgotICAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpCYXNpY0NvbXBhcnRtZW50IiB4bWk6aWQ9Il9IYWRaTm5mcUVlbUVEOXAxN0wtYmpBIiB2aXNpYmxlPSJmYWxzZSIgdHlwZT0iU3RlcmVvdHlwZV9PcGVyYXRpb25Db21wYXJ0bWVudCI+Ci0gICAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlRpdGxlU3R5bGUiIHhtaTppZD0iX0hhZFpOM2ZxRWVtRUQ5cDE3TC1iakEiLz4KLSAgICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246U29ydGluZ1N0eWxlIiB4bWk6aWQ9Il9IYWRaT0hmcUVlbUVEOXAxN0wtYmpBIi8+Ci0gICAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkZpbHRlcmluZ1N0eWxlIiB4bWk6aWQ9Il9IYWRaT1hmcUVlbUVEOXAxN0wtYmpBIi8+Ci0gICAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX0hhZFpPbmZxRWVtRUQ5cDE3TC1iakEiLz4KLSAgICAgIDwvY2hpbGRyZW4+Ci0gICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIGhyZWY9IklvVC1NTC5wcm9maWxlLnVtbCNfbXhQcUlDdHVFZWVaSTZyTVRZVjYwdyIvPgotICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfSGFYU2tYZnFFZW1FRDlwMTdMLWJqQSIgeD0iMjAiIHk9IjQwIi8+Ci0gICAgPC9jaGlsZHJlbj4KLSAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOlNoYXBlIiB4bWk6aWQ9Il9Cdmc1QUh1aUVlbVNtOHlfa3RFQkhRIiB0eXBlPSJDbGFzc19NZXRhY2xhc3NTaGFwZSI+Ci0gICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkRlY29yYXRpb25Ob2RlIiB4bWk6aWQ9Il9CdnFxQUh1aUVlbVNtOHlfa3RFQkhRIiB0eXBlPSJDbGFzc19NZXRhY2xhc3NOYW1lTGFiZWwiLz4KLSAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNTaWduYWwiLz4KLSAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX0J2ZzVBWHVpRWVtU204eV9rdEVCSFEiIHg9Ijk0MCIgeT0iNDAiLz4KLSAgICA8L2NoaWxkcmVuPgotICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX1AyNjRrSHVpRWVtU204eV9rdEVCSFEiIHR5cGU9IkNsYXNzX01ldGFjbGFzc1NoYXBlIj4KLSAgICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246RGVjb3JhdGlvbk5vZGUiIHhtaTppZD0iX1AyNjRrbnVpRWVtU204eV9rdEVCSFEiIHR5cGU9IkNsYXNzX01ldGFjbGFzc05hbWVMYWJlbCIvPgotICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0JlaGF2aW9yYWxGZWF0dXJlIi8+Ci0gICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il9QMjY0a1h1aUVlbVNtOHlfa3RFQkhRIiB4PSI3ODAiIHk9IjQwIi8+Ci0gICAgPC9jaGlsZHJlbj4KICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOlNoYXBlIiB4bWk6aWQ9Il9GMk80OEh1eEVlbVNtOHlfa3RFQkhRIiB0eXBlPSJDbGFzc19NZXRhY2xhc3NTaGFwZSI+CiAgICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkRlY29yYXRpb25Ob2RlIiB4bWk6aWQ9Il9GMk80OG51eEVlbVNtOHlfa3RFQkhRIiB0eXBlPSJDbGFzc19NZXRhY2xhc3NOYW1lTGFiZWwiLz4KICAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNUeXBlZEVsZW1lbnQiLz4KQEAgLTU3NTksMjMgKzU3NTcsNiBAQAogICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0NsYXNzaWZpZXIiLz4KICAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX0VaWUQ4WHV5RWVtU204eV9rdEVCSFEiIHg9IjQ4MCIgeT0iNDAiLz4KICAgICA8L2NoaWxkcmVuPgotICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX181R1o0SHUxRWVtU204eV9rdEVCSFEiIHR5cGU9IlN0ZXJlb3R5cGVfU2hhcGUiIGZpbGxDb2xvcj0iMTI2MzIyNTYiPgotICAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpEZWNvcmF0aW9uTm9kZSIgeG1pOmlkPSJfXzVHWjRudTFFZW1TbTh5X2t0RUJIUSIgdHlwZT0iU3RlcmVvdHlwZV9OYW1lTGFiZWwiLz4KLSAgICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246QmFzaWNDb21wYXJ0bWVudCIgeG1pOmlkPSJfXzVHWjQzdTFFZW1TbTh5X2t0RUJIUSIgdmlzaWJsZT0iZmFsc2UiIHR5cGU9IlN0ZXJlb3R5cGVfQXR0cmlidXRlQ29tcGFydG1lbnQiPgotICAgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpUaXRsZVN0eWxlIiB4bWk6aWQ9Il9fNUdaNUh1MUVlbVNtOHlfa3RFQkhRIi8+Ci0gICAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlNvcnRpbmdTdHlsZSIgeG1pOmlkPSJfXzVHWjVYdTFFZW1TbTh5X2t0RUJIUSIvPgotICAgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGaWx0ZXJpbmdTdHlsZSIgeG1pOmlkPSJfXzVHWjVudTFFZW1TbTh5X2t0RUJIUSIvPgotICAgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il9fNUdaNTN1MUVlbVNtOHlfa3RFQkhRIi8+Ci0gICAgICA8L2NoaWxkcmVuPgotICAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpCYXNpY0NvbXBhcnRtZW50IiB4bWk6aWQ9Il9fNUdaNkh1MUVlbVNtOHlfa3RFQkhRIiB2aXNpYmxlPSJmYWxzZSIgdHlwZT0iU3RlcmVvdHlwZV9PcGVyYXRpb25Db21wYXJ0bWVudCI+Ci0gICAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlRpdGxlU3R5bGUiIHhtaTppZD0iX181R1o2WHUxRWVtU204eV9rdEVCSFEiLz4KLSAgICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246U29ydGluZ1N0eWxlIiB4bWk6aWQ9Il9fNUdaNm51MUVlbVNtOHlfa3RFQkhRIi8+Ci0gICAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkZpbHRlcmluZ1N0eWxlIiB4bWk6aWQ9Il9fNUdaNjN1MUVlbVNtOHlfa3RFQkhRIi8+Ci0gICAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX181R1o3SHUxRWVtU204eV9rdEVCSFEiLz4KLSAgICAgIDwvY2hpbGRyZW4+Ci0gICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIGhyZWY9IklvVC1NTC5wcm9maWxlLnVtbCNfcm02NFFDdHhFZWVaSTZyTVRZVjYwdyIvPgotICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfXzVHWjRYdTFFZW1TbTh5X2t0RUJIUSIgeD0iMTYwIiB5PSI0MCIvPgotICAgIDwvY2hpbGRyZW4+CiAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfRDAxZUVEdUJFZXFSZFlMNGw0ajgzdyIgdHlwZT0iU3RlcmVvdHlwZV9TaGFwZSI+CiAgICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkRlY29yYXRpb25Ob2RlIiB4bWk6aWQ9Il9EMDFlRWp1QkVlcVJkWUw0bDRqODN3IiB0eXBlPSJTdGVyZW90eXBlX05hbWVMYWJlbCIvPgogICAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpCYXNpY0NvbXBhcnRtZW50IiB4bWk6aWQ9Il9EMDFlRXp1QkVlcVJkWUw0bDRqODN3IiB0eXBlPSJTdGVyZW90eXBlX0F0dHJpYnV0ZUNvbXBhcnRtZW50Ij4KQEAgLTU4NDIsNjEgKzU4MjMsOTcgQEAKICAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgaHJlZj0iSW9ULU1MLnByb2ZpbGUudW1sI19JazhGQUVaMkVlbWpzNEtNQzJDaFBnIi8+CiAgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il9WVWc2a1Q2dUVlcUFmS2RsZHpZYy13IiB4PSI4NjAiIHk9IjM4MCIvPgogICAgIDwvY2hpbGRyZW4+Ci0gICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfOVdxOU1ENjBFZXFiV2ZPRHZUS0hUdyIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfOVdxOU1UNjBFZXFiV2ZPRHZUS0hUdyIvPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iXzlXcTlNejYwRWVxYldmT0R2VEtIVHciIG5hbWU9IkJBU0VfRUxFTUVOVCI+Ci0gICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI1NpZ25hbCIvPgotICAgICAgPC9zdHlsZXM+Ci0gICAgICA8ZWxlbWVudCB4c2k6bmlsPSJ0cnVlIi8+Ci0gICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il85V3E5TWo2MEVlcWJXZk9EdlRLSFR3IiB4PSIxMTQwIiB5PSI0MCIvPgorICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iXy1nUEhzSEtGRWVxdmFLQ1J5c2E1NkEiIHR5cGU9IkNsYXNzX01ldGFjbGFzc1NoYXBlIj4KKyAgICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246RGVjb3JhdGlvbk5vZGUiIHhtaTppZD0iXy1nUEhzbktGRWVxdmFLQ1J5c2E1NkEiIHR5cGU9IkNsYXNzX01ldGFjbGFzc05hbWVMYWJlbCIvPgorICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI09wZXJhdGlvbiIvPgorICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfLWdQSHNYS0ZFZXF2YUtDUnlzYTU2QSIgeD0iODAwIiB5PSI0MCIvPgogICAgIDwvY2hpbGRyZW4+Ci0gICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfOVcwdU1ENjBFZXFiV2ZPRHZUS0hUdyIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfOVcwdU1UNjBFZXFiV2ZPRHZUS0hUdyIvPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iXzlXMHVNejYwRWVxYldmT0R2VEtIVHciIG5hbWU9IkJBU0VfRUxFTUVOVCI+Ci0gICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0JlaGF2aW9yYWxGZWF0dXJlIi8+Ci0gICAgICA8L3N0eWxlcz4KLSAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KLSAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iXzlXMHVNajYwRWVxYldmT0R2VEtIVHciIHg9Ijk4MCIgeT0iNDAiLz4KKyAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOlNoYXBlIiB4bWk6aWQ9Il8tTWhGQUhLR0VlcXZhS0NSeXNhNTZBIiB0eXBlPSJDbGFzc19NZXRhY2xhc3NTaGFwZSI+CisgICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkRlY29yYXRpb25Ob2RlIiB4bWk6aWQ9Il8tTWhGQW5LR0VlcXZhS0NSeXNhNTZBIiB0eXBlPSJDbGFzc19NZXRhY2xhc3NOYW1lTGFiZWwiLz4KKyAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNSZWNlcHRpb24iLz4KKyAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iXy1NaEZBWEtHRWVxdmFLQ1J5c2E1NkEiIHg9Ijk2MCIgeT0iNDAiLz4KICAgICA8L2NoaWxkcmVuPgotICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iXzlXOEM4RDYwRWVxYldmT0R2VEtIVHciIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50Ij4KLSAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlRpdGxlU3R5bGUiIHhtaTppZD0iXzlXOEM4VDYwRWVxYldmT0R2VEtIVHciLz4KLSAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il85VzhDOHo2MEVlcWJXZk9EdlRLSFR3IiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX1FNTEgwSE9nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IkNsYXNzX01ldGFjbGFzc1NoYXBlIj4KKyAgICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246RGVjb3JhdGlvbk5vZGUiIHhtaTppZD0iX1FNTEgwbk9nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IkNsYXNzX01ldGFjbGFzc05hbWVMYWJlbCIvPgorICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0NvbW1lbnQiLz4KKyAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX1FNTEgwWE9nRWVxUWtmcW5aaGJGcVEiIHg9IjE4MCIgeT0iNDAiLz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX25GRlpSM09nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50Ij4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlRpdGxlU3R5bGUiIHhtaTppZD0iX25GRlpTSE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9uRkZaU25PZ0VlcVFrZnFuWmhiRnFRIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgogICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNUeXBlZEVsZW1lbnQiLz4KICAgICAgIDwvc3R5bGVzPgogICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgotICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfOVc4QzhqNjBFZXFiV2ZPRHZUS0hUdyIgeD0iODIwIiB5PSI0MCIvPgorICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfbkZGWlNYT2dFZXFRa2ZxblpoYkZxUSIgeD0iODIwIiB5PSI0MCIvPgogICAgIDwvY2hpbGRyZW4+Ci0gICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfOVhDd296NjBFZXFiV2ZPRHZUS0hUdyIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfOVhDd3BENjBFZXFiV2ZPRHZUS0hUdyIvPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iXzlYQ3dwajYwRWVxYldmT0R2VEtIVHciIG5hbWU9IkJBU0VfRUxFTUVOVCI+CisgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfbkZQS1IzT2dFZXFRa2ZxblpoYkZxUSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfbkZQS1NIT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iX25GUEtTbk9nRWVxUWtmcW5aaGJGcVEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+CiAgICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0NsYXNzaWZpZXIiLz4KICAgICAgIDwvc3R5bGVzPgogICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgotICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfOVhDd3BUNjBFZXFiV2ZPRHZUS0hUdyIgeD0iNjgwIiB5PSI0MCIvPgorICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfbkZQS1NYT2dFZXFRa2ZxblpoYkZxUSIgeD0iNjgwIiB5PSI0MCIvPgogICAgIDwvY2hpbGRyZW4+Ci0gICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfOVhOdndENjBFZXFiV2ZPRHZUS0hUdyIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfOVhOdndUNjBFZXFiV2ZPRHZUS0hUdyIvPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iXzlYTnZ3ejYwRWVxYldmT0R2VEtIVHciIG5hbWU9IkJBU0VfRUxFTUVOVCI+CisgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfbkZZVVBYT2dFZXFRa2ZxblpoYkZxUSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfbkZZVVBuT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iX25GWVVRSE9nRWVxUWtmcW5aaGJGcVEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+CiAgICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI1R5cGUiLz4KICAgICAgIDwvc3R5bGVzPgogICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgotICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfOVhOdndqNjBFZXFiV2ZPRHZUS0hUdyIgeD0iMTQwMCIgeT0iNDAiLz4KKyAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX25GWVVQM09nRWVxUWtmcW5aaGJGcVEiIHg9IjE0MDAiIHk9IjQwIi8+CiAgICAgPC9jaGlsZHJlbj4KLSAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOlNoYXBlIiB4bWk6aWQ9Il85WFZFZ0Q2MEVlcWJXZk9EdlRLSFR3IiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudCI+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpUaXRsZVN0eWxlIiB4bWk6aWQ9Il85WFZFZ1Q2MEVlcWJXZk9EdlRLSFR3Ii8+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfOVhWRWd6NjBFZXFiV2ZPRHZUS0hUdyIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KKyAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOlNoYXBlIiB4bWk6aWQ9Il9uRnJQSTNPZ0VlcVFrZnFuWmhiRnFRIiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudCI+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpUaXRsZVN0eWxlIiB4bWk6aWQ9Il9uRnJQSkhPZ0VlcVFrZnFuWmhiRnFRIi8+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfbkZyUEpuT2dFZXFRa2ZxblpoYkZxUSIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KICAgICAgICAgPGVPYmplY3RWYWx1ZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjTmFtZXNwYWNlIi8+CiAgICAgICA8L3N0eWxlcz4KICAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KLSAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iXzlYVkVnajYwRWVxYldmT0R2VEtIVHciIHg9IjE1NDAiIHk9IjQwIi8+CisgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il9uRnJQSlhPZ0VlcVFrZnFuWmhiRnFRIiB4PSIxNTQwIiB5PSI0MCIvPgogICAgIDwvY2hpbGRyZW4+Ci0gICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfOVhjWlFENjBFZXFiV2ZPRHZUS0hUdyIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfOVhjWlFUNjBFZXFiV2ZPRHZUS0hUdyIvPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iXzlYY1pRejYwRWVxYldmT0R2VEtIVHciIG5hbWU9IkJBU0VfRUxFTUVOVCI+CisgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpTaGFwZSIgeG1pOmlkPSJfbkYxQUozT2dFZXFRa2ZxblpoYkZxUSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnQiPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246VGl0bGVTdHlsZSIgeG1pOmlkPSJfbkYxQUtIT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iX25GMUFLbk9nRWVxUWtmcW5aaGJGcVEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+CiAgICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0Fzc29jaWF0aW9uIi8+CiAgICAgICA8L3N0eWxlcz4KICAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KLSAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iXzlYY1pRajYwRWVxYldmT0R2VEtIVHciIHg9IjU0MCIgeT0iNDAiLz4KKyAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX25GMUFLWE9nRWVxUWtmcW5aaGJGcVEiIHg9IjU0MCIgeT0iNDAiLz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX25GLXhLbk9nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50Ij4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlRpdGxlU3R5bGUiIHhtaTppZD0iX25GLXhLM09nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9uRi14TFhPZ0VlcVFrZnFuWmhiRnFRIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNPcGVyYXRpb24iLz4KKyAgICAgIDwvc3R5bGVzPgorICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfbkYteExIT2dFZXFRa2ZxblpoYkZxUSIgeD0iMTAwMCIgeT0iNDAiLz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX25HSDdHbk9nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50Ij4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlRpdGxlU3R5bGUiIHhtaTppZD0iX25HSDdHM09nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9uR0g3SFhPZ0VlcVFrZnFuWmhiRnFRIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNSZWNlcHRpb24iLz4KKyAgICAgIDwvc3R5bGVzPgorICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgPGxheW91dENvbnN0cmFpbnQgeG1pOnR5cGU9Im5vdGF0aW9uOkJvdW5kcyIgeG1pOmlkPSJfbkdIN0hIT2dFZXFRa2ZxblpoYkZxUSIgeD0iMTE2MCIgeT0iNDAiLz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX25Ha25BM09nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50Ij4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlRpdGxlU3R5bGUiIHhtaTppZD0iX25Ha25CSE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9uR2tuQm5PZ0VlcVFrZnFuWmhiRnFRIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNDb21tZW50Ii8+CisgICAgICA8L3N0eWxlcz4KKyAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KKyAgICAgIDxsYXlvdXRDb25zdHJhaW50IHhtaTp0eXBlPSJub3RhdGlvbjpCb3VuZHMiIHhtaTppZD0iX25Ha25CWE9nRWVxUWtmcW5aaGJGcVEiIHg9IjM4MCIgeT0iNDAiLz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX3YyYlRFSE9nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IkNsYXNzX01ldGFjbGFzc1NoYXBlIj4KKyAgICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246RGVjb3JhdGlvbk5vZGUiIHhtaTppZD0iX3YyYlRFbk9nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IkNsYXNzX01ldGFjbGFzc05hbWVMYWJlbCIvPgorICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0NsYXNzIi8+CisgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il92MmJURVhPZ0VlcVFrZnFuWmhiRnFRIiB4PSIyMCIgeT0iNDAiLz4KKyAgICA8L2NoaWxkcmVuPgorICAgIDxjaGlsZHJlbiB4bWk6dHlwZT0ibm90YXRpb246U2hhcGUiIHhtaTppZD0iX3YybEVHbk9nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50Ij4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlRpdGxlU3R5bGUiIHhtaTppZD0iX3YybEVHM09nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il92MmxFSFhPZ0VlcVFrZnFuWmhiRnFRIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNDbGFzcyIvPgorICAgICAgPC9zdHlsZXM+CisgICAgICA8ZWxlbWVudCB4c2k6bmlsPSJ0cnVlIi8+CisgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246Qm91bmRzIiB4bWk6aWQ9Il92MmxFSEhPZ0VlcVFrZnFuWmhiRnFRIiB4PSIyMDAiLz4KICAgICA8L2NoaWxkcmVuPgogICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOlN0cmluZ1ZhbHVlU3R5bGUiIHhtaTppZD0iXzdBY0w4VVo2RWVtanM0S01DMkNoUGciIG5hbWU9ImRpYWdyYW1fY29tcGF0aWJpbGl0eV92ZXJzaW9uIiBzdHJpbmdWYWx1ZT0iMS40LjAiLz4KICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpEaWFncmFtU3R5bGUiIHhtaTppZD0iXzdBY0w4a1o2RWVtanM0S01DMkNoUGciLz4KQEAgLTU5MDQsMjMgKzU5MjEsNiBAQAogICAgICAgPG93bmVyIHhtaTp0eXBlPSJ1bWw6UGFja2FnZSIgaHJlZj0iSW9ULU1MLnByb2ZpbGUudW1sI19hQVJJNEVaMUVlbWpzNEtNQzJDaFBnIi8+CiAgICAgPC9zdHlsZXM+CiAgICAgPGVsZW1lbnQgeG1pOnR5cGU9InVtbDpQYWNrYWdlIiBocmVmPSJJb1QtTUwucHJvZmlsZS51bWwjX2FBUkk0RVoxRWVtanM0S01DMkNoUGciLz4KLSAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfTTlKbHNIZnFFZW1FRDlwMTdMLWJqQSIgdHlwZT0iR2VuZXJhbGl6YXRpb25fRWRnZSIgc291cmNlPSJfTzF2WThGYkNFZW1tczY1TWJBek5QdyIgdGFyZ2V0PSJfSGFYU2tIZnFFZW1FRDlwMTdMLWJqQSI+Ci0gICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkRlY29yYXRpb25Ob2RlIiB4bWk6aWQ9Il9NOUpsczNmcUVlbUVEOXAxN0wtYmpBIiB0eXBlPSJHZW5lcmFsaXphdGlvbl9TdGVyZW90eXBlTGFiZWwiPgotICAgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246TG9jYXRpb24iIHhtaTppZD0iX005Smx0SGZxRWVtRUQ5cDE3TC1iakEiIHk9IjYwIi8+Ci0gICAgICA8L2NoaWxkcmVuPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il9NOUpsc1hmcUVlbUVEOXAxN0wtYmpBIi8+Ci0gICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOkdlbmVyYWxpemF0aW9uIiBocmVmPSJJb1QtTUwucHJvZmlsZS51bWwjX00xYk5FSGZxRWVtRUQ5cDE3TC1iakEiLz4KLSAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iX005SmxzbmZxRWVtRUQ5cDE3TC1iakEiIHBvaW50cz0iWzYwLCAyMDAsIC02NDM5ODQsIC02NDM5ODRdJFs2MCwgMTQwLCAtNjQzOTg0LCAtNjQzOTg0XSIvPgotICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX005aUFNSGZxRWVtRUQ5cDE3TC1iakEiIGlkPSIoMC40LDAuMCkiLz4KLSAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9NOWlBTVhmcUVlbUVEOXAxN0wtYmpBIiBpZD0iKDAuNCwxLjApIi8+Ci0gICAgPC9lZGdlcz4KLSAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfUXpUQlFIdWlFZW1TbTh5X2t0RUJIUSIgdHlwZT0iRXh0ZW5zaW9uX0VkZ2UiIHNvdXJjZT0iX19kRi1nRmJDRWVtbXM2NU1iQXpOUHciIHRhcmdldD0iX1AyNjRrSHVpRWVtU204eV9rdEVCSFEiPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il9RelRCUVh1aUVlbVNtOHlfa3RFQkhRIi8+Ci0gICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgaHJlZj0iSW9ULU1MLnByb2ZpbGUudW1sI19RdERQVUh1aUVlbVNtOHlfa3RFQkhRIi8+Ci0gICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il9RelRCUW51aUVlbVNtOHlfa3RFQkhRIiBwb2ludHM9Ils4NDAsIDIwMCwgLTY0Mzk4NCwgLTY0Mzk4NF0kWzg0MCwgOTAsIC02NDM5ODQsIC02NDM5ODRdIi8+Ci0gICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfUXpsOE1IdWlFZW1TbTh5X2t0RUJIUSIgaWQ9IigwLjQsMC4wKSIvPgotICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX1F6bDhNWHVpRWVtU204eV9rdEVCSFEiIGlkPSIoMC41LDEuMCkiLz4KLSAgICA8L2VkZ2VzPgogICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il9IWFg3a0h1eEVlbVNtOHlfa3RFQkhRIiB0eXBlPSJFeHRlbnNpb25fRWRnZSIgc291cmNlPSJfdHNnRk1GYlhFZW1tczY1TWJBek5QdyIgdGFyZ2V0PSJfRjJPNDhIdXhFZW1TbTh5X2t0RUJIUSI+CiAgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX0hYWDdrWHV4RWVtU204eV9rdEVCSFEiLz4KICAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiBocmVmPSJJb1QtTUwucHJvZmlsZS51bWwjX0hLU2gwSHV4RWVtU204eV9rdEVCSFEiLz4KQEAgLTU5MzUsMjQgKzU5MzUsNiBAQAogICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX1pVUjdJSHV6RWVtU204eV9rdEVCSFEiIGlkPSIoMC40NDU1NDQ1NTQ0NTU0NDU1NSwwLjApIi8+CiAgICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfWlVSN0lYdXpFZW1TbTh5X2t0RUJIUSIgaWQ9IigwLjYsMS4wKSIvPgogICAgIDwvZWRnZXM+Ci0gICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iX3ZCZWdBSHUyRWVtU204eV9rdEVCSFEiIHR5cGU9IkdlbmVyYWxpemF0aW9uX0VkZ2UiIHNvdXJjZT0iX00xZGhRRmJZRWVtbXM2NU1iQXpOUHciIHRhcmdldD0iX181R1o0SHUxRWVtU204eV9rdEVCSFEiPgotICAgICAgPGNoaWxkcmVuIHhtaTp0eXBlPSJub3RhdGlvbjpEZWNvcmF0aW9uTm9kZSIgeG1pOmlkPSJfdkJlZ0EzdTJFZW1TbTh5X2t0RUJIUSIgdHlwZT0iR2VuZXJhbGl6YXRpb25fU3RlcmVvdHlwZUxhYmVsIj4KLSAgICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Qm9vbGVhblZhbHVlU3R5bGUiIHhtaTppZD0iX0FYVXhnSHUzRWVtU204eV9rdEVCSFEiIG5hbWU9IklTX1VQREFURURfUE9TSVRJT04iIGJvb2xlYW5WYWx1ZT0idHJ1ZSIvPgotICAgICAgICA8bGF5b3V0Q29uc3RyYWludCB4bWk6dHlwZT0ibm90YXRpb246TG9jYXRpb24iIHhtaTppZD0iX3ZCZWdCSHUyRWVtU204eV9rdEVCSFEiIHk9IjYwIi8+Ci0gICAgICA8L2NoaWxkcmVuPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il92QmVnQVh1MkVlbVNtOHlfa3RFQkhRIi8+Ci0gICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOkdlbmVyYWxpemF0aW9uIiBocmVmPSJJb1QtTUwucHJvZmlsZS51bWwjX3UxM3M4SHUyRWVtU204eV9rdEVCSFEiLz4KLSAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iX3ZCZWdBbnUyRWVtU204eV9rdEVCSFEiIHBvaW50cz0iWzI0MCwgMjAwLCAtNjQzOTg0LCAtNjQzOTg0XSRbMjQwLCAxNDAsIC02NDM5ODQsIC02NDM5ODRdIi8+Ci0gICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfdkJ4YThIdTJFZW1TbTh5X2t0RUJIUSIgaWQ9IigwLjYsMC4wKSIvPgotICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX3ZCeGE4WHUyRWVtU204eV9rdEVCSFEiIGlkPSIoMC41Nzk3MTAxNDQ5Mjc1MzYzLDEuMCkiLz4KLSAgICA8L2VkZ2VzPgotICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il9yVHJSTUh1NUVlbVNtOHlfa3RFQkhRIiB0eXBlPSJFeHRlbnNpb25fRWRnZSIgc291cmNlPSJfSjczcWdGYkRFZW1tczY1TWJBek5QdyIgdGFyZ2V0PSJfQnZnNUFIdWlFZW1TbTh5X2t0RUJIUSI+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX3JUclJNWHU1RWVtU204eV9rdEVCSFEiLz4KLSAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiBocmVmPSJJb1QtTUwucHJvZmlsZS51bWwjX3JTb3ZZSHU1RWVtU204eV9rdEVCSFEiLz4KLSAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iX3JUclJNbnU1RWVtU204eV9rdEVCSFEiIHBvaW50cz0iWzEwMDAsIDIwMCwgLTY0Mzk4NCwgLTY0Mzk4NF0kWzEwMDAsIDkwLCAtNjQzOTg0LCAtNjQzOTg0XSIvPgotICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX3JVUnVJSHU1RWVtU204eV9rdEVCSFEiIGlkPSIoMC40LDAuMCkiLz4KLSAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9yVVJ1SVh1NUVlbVNtOHlfa3RFQkhRIiBpZD0iKDAuNiwxLjApIi8+Ci0gICAgPC9lZGdlcz4KICAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfUUg4R1lIdS1FZW1TbTh5X2t0RUJIUSIgdHlwZT0iR2VuZXJhbGl6YXRpb25fRWRnZSIgc291cmNlPSJfMm8zSXdGYkNFZW1tczY1TWJBek5QdyIgdGFyZ2V0PSJfdHNnRk1GYlhFZW1tczY1TWJBek5QdyI+CiAgICAgICA8Y2hpbGRyZW4geG1pOnR5cGU9Im5vdGF0aW9uOkRlY29yYXRpb25Ob2RlIiB4bWk6aWQ9Il9RSDhHWTN1LUVlbVNtOHlfa3RFQkhRIiB0eXBlPSJHZW5lcmFsaXphdGlvbl9TdGVyZW90eXBlTGFiZWwiPgogICAgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpCb29sZWFuVmFsdWVTdHlsZSIgeG1pOmlkPSJfTFFUT01ENnZFZXFBZktkbGR6WWMtdyIgbmFtZT0iSVNfVVBEQVRFRF9QT1NJVElPTiIgYm9vbGVhblZhbHVlPSJ0cnVlIi8+CkBAIC02MDA5LDc1ICs1OTkxLDEyMyBAQAogICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9InVtbDpHZW5lcmFsaXphdGlvbiIgaHJlZj0iSW9ULU1MLnByb2ZpbGUudW1sI19hMWNlY0ZhOUVlbUJZczUtZkRJOHV3Ii8+CiAgICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il9SWVFxOGo2dkVlcUFmS2RsZHpZYy13IiBwb2ludHM9Ils3NzUsIDQzMCwgLTY0Mzk4NCwgLTY0Mzk4NF0kWzg2MCwgNDMwLCAtNjQzOTg0LCAtNjQzOTg0XSIvPgogICAgIDwvZWRnZXM+Ci0gICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iXzlXcmtRRDYwRWVxYldmT0R2VEtIVHciIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfQnZnNUFIdWlFZW1TbTh5X2t0RUJIUSIgdGFyZ2V0PSJfOVdxOU1ENjBFZXFiV2ZPRHZUS0hUdyI+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iXzlXcmtRVDYwRWVxYldmT0R2VEtIVHciLz4KLSAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il85V3JrUlQ2MEVlcWJXZk9EdlRLSFR3IiBuYW1lPSJCQVNFX0VMRU1FTlQiPgotICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNTaWduYWwiLz4KLSAgICAgIDwvc3R5bGVzPgotICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgotICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfOVdya1FqNjBFZXFiV2ZPRHZUS0hUdyIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+Ci0gICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfOVdya1F6NjBFZXFiV2ZPRHZUS0hUdyIvPgotICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzlXcmtSRDYwRWVxYldmT0R2VEtIVHciLz4KKyAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfMHNHZXNIS0dFZXF2YUtDUnlzYTU2QSIgdHlwZT0iRXh0ZW5zaW9uX0VkZ2UiIHNvdXJjZT0iX19kRi1nRmJDRWVtbXM2NU1iQXpOUHciIHRhcmdldD0iXy1nUEhzSEtGRWVxdmFLQ1J5c2E1NkEiPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il8wc0dlc1hLR0VlcXZhS0NSeXNhNTZBIi8+CisgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgaHJlZj0iSW9ULU1MLnByb2ZpbGUudW1sI18wcldRd0hLR0VlcXZhS0NSeXNhNTZBIi8+CisgICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il8wc0dlc25LR0VlcXZhS0NSeXNhNTZBIiBwb2ludHM9Ils4NjAsIDIwMCwgLTY0Mzk4NCwgLTY0Mzk4NF0kWzg2MCwgOTAsIC02NDM5ODQsIC02NDM5ODRdIi8+CisgICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfMHNaWm9IS0dFZXF2YUtDUnlzYTU2QSIgaWQ9IigwLjUsMC4wKSIvPgorICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzBzWlpvWEtHRWVxdmFLQ1J5c2E1NkEiIGlkPSIoMC42LDEuMCkiLz4KICAgICA8L2VkZ2VzPgotICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il85VzB1TkQ2MEVlcWJXZk9EdlRLSFR3IiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudExpbmsiIHNvdXJjZT0iX1AyNjRrSHVpRWVtU204eV9rdEVCSFEiIHRhcmdldD0iXzlXMHVNRDYwRWVxYldmT0R2VEtIVHciPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il85VzB1TlQ2MEVlcWJXZk9EdlRLSFR3Ii8+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfOVcwdU9UNjBFZXFiV2ZPRHZUS0hUdyIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KLSAgICAgICAgPGVPYmplY3RWYWx1ZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQmVoYXZpb3JhbEZlYXR1cmUiLz4KLSAgICAgIDwvc3R5bGVzPgotICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgotICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfOVcwdU5qNjBFZXFiV2ZPRHZUS0hUdyIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+Ci0gICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfOVcwdU56NjBFZXFiV2ZPRHZUS0hUdyIvPgotICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzlXMHVPRDYwRWVxYldmT0R2VEtIVHciLz4KKyAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfX2thc0VIS0dFZXF2YUtDUnlzYTU2QSIgdHlwZT0iRXh0ZW5zaW9uX0VkZ2UiIHNvdXJjZT0iX0o3M3FnRmJERWVtbXM2NU1iQXpOUHciIHRhcmdldD0iXy1NaEZBSEtHRWVxdmFLQ1J5c2E1NkEiPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il9fa2FzRVhLR0VlcXZhS0NSeXNhNTZBIi8+CisgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgaHJlZj0iSW9ULU1MLnByb2ZpbGUudW1sI19famhVTUhLR0VlcXZhS0NSeXNhNTZBIi8+CisgICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il9fa2FzRW5LR0VlcXZhS0NSeXNhNTZBIiBwb2ludHM9IlsxMDAwLCAyMDAsIC02NDM5ODQsIC02NDM5ODRdJFsxMDAwLCA5MCwgLTY0Mzk4NCwgLTY0Mzk4NF0iLz4KKyAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9fbEFoOEhLR0VlcXZhS0NSeXNhNTZBIiBpZD0iKDAuMzQxODgwMzQxODgwMzQxOSwwLjApIi8+CisgICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfX2xBaDhYS0dFZXF2YUtDUnlzYTU2QSIgaWQ9IigwLjQsMS4wKSIvPgogICAgIDwvZWRnZXM+Ci0gICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iXzlXOEM5RDYwRWVxYldmT0R2VEtIVHciIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfRjJPNDhIdXhFZW1TbTh5X2t0RUJIUSIgdGFyZ2V0PSJfOVc4QzhENjBFZXFiV2ZPRHZUS0hUdyI+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iXzlXOEM5VDYwRWVxYldmT0R2VEtIVHciLz4KLSAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il85VzhDLVQ2MEVlcWJXZk9EdlRLSFR3IiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il9SRnJpc0hPZ0VlcVFrZnFuWmhiRnFRIiB0eXBlPSJFeHRlbnNpb25fRWRnZSIgc291cmNlPSJfTTFkaFFGYllFZW1tczY1TWJBek5QdyIgdGFyZ2V0PSJfUU1MSDBIT2dFZXFRa2ZxblpoYkZxUSI+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX1JGcmlzWE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiBocmVmPSJJb1QtTUwucHJvZmlsZS51bWwjX1JFeUswSE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iX1JGcmlzbk9nRWVxUWtmcW5aaGJGcVEiIHBvaW50cz0iWzI0MCwgMjAwLCAtNjQzOTg0LCAtNjQzOTg0XSRbMjQwLCA5MCwgLTY0Mzk4NCwgLTY0Mzk4NF0iLz4KKyAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9SR0lPb0hPZ0VlcVFrZnFuWmhiRnFRIiBpZD0iKDAuNiwwLjApIi8+CisgICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfUkdJT29YT2dFZXFRa2ZxblpoYkZxUSIgaWQ9IigwLjYsMS4wKSIvPgorICAgIDwvZWRnZXM+CisgICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iX25GRlpTM09nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfRjJPNDhIdXhFZW1TbTh5X2t0RUJIUSIgdGFyZ2V0PSJfbkZGWlIzT2dFZXFRa2ZxblpoYkZxUSI+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX25GRlpUSE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9uRkZaVUhPZ0VlcVFrZnFuWmhiRnFRIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgogICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNUeXBlZEVsZW1lbnQiLz4KICAgICAgIDwvc3R5bGVzPgogICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgotICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfOVc4QzlqNjBFZXFiV2ZPRHZUS0hUdyIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+Ci0gICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfOVc4Qzl6NjBFZXFiV2ZPRHZUS0hUdyIvPgotICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzlXOEMtRDYwRWVxYldmT0R2VEtIVHciLz4KKyAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iX25GRlpUWE9nRWVxUWtmcW5aaGJGcVEiIHBvaW50cz0iWzAsIDAsIDAsIDBdJFswLCAwLCAwLCAwXSIvPgorICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX25GRlpUbk9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9uRkZaVDNPZ0VlcVFrZnFuWmhiRnFRIi8+CiAgICAgPC9lZGdlcz4KLSAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfOVhDd3B6NjBFZXFiV2ZPRHZUS0hUdyIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnRMaW5rIiBzb3VyY2U9Il9FWllEOEh1eUVlbVNtOHlfa3RFQkhRIiB0YXJnZXQ9Il85WEN3b3o2MEVlcWJXZk9EdlRLSFR3Ij4KLSAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkZvbnRTdHlsZSIgeG1pOmlkPSJfOVhDd3FENjBFZXFiV2ZPRHZUS0hUdyIvPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iXzlYRFhzajYwRWVxYldmT0R2VEtIVHciIG5hbWU9IkJBU0VfRUxFTUVOVCI+CisgICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iX25GUEtTM09nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfRVpZRDhIdXlFZW1TbTh5X2t0RUJIUSIgdGFyZ2V0PSJfbkZQS1IzT2dFZXFRa2ZxblpoYkZxUSI+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX25GUEtUSE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9uRlBLVUhPZ0VlcVFrZnFuWmhiRnFRIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgogICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNDbGFzc2lmaWVyIi8+CiAgICAgICA8L3N0eWxlcz4KICAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KLSAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iXzlYQ3dxVDYwRWVxYldmT0R2VEtIVHciIHBvaW50cz0iWzAsIDAsIDAsIDBdJFswLCAwLCAwLCAwXSIvPgotICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzlYRFhzRDYwRWVxYldmT0R2VEtIVHciLz4KLSAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il85WERYc1Q2MEVlcWJXZk9EdlRLSFR3Ii8+CisgICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il9uRlBLVFhPZ0VlcVFrZnFuWmhiRnFRIiBwb2ludHM9IlswLCAwLCAwLCAwXSRbMCwgMCwgMCwgMF0iLz4KKyAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9uRlBLVG5PZ0VlcVFrZnFuWmhiRnFRIi8+CisgICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfbkZQS1QzT2dFZXFRa2ZxblpoYkZxUSIvPgogICAgIDwvZWRnZXM+Ci0gICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iXzlYTnZ4RDYwRWVxYldmT0R2VEtIVHciIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfY0pmVXdEdUJFZXFSZFlMNGw0ajgzdyIgdGFyZ2V0PSJfOVhOdndENjBFZXFiV2ZPRHZUS0hUdyI+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iXzlYTnZ4VDYwRWVxYldmT0R2VEtIVHciLz4KLSAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il85WE52eVQ2MEVlcWJXZk9EdlRLSFR3IiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il9uRllVUVhPZ0VlcVFrZnFuWmhiRnFRIiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudExpbmsiIHNvdXJjZT0iX2NKZlV3RHVCRWVxUmRZTDRsNGo4M3ciIHRhcmdldD0iX25GWVVQWE9nRWVxUWtmcW5aaGJGcVEiPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il9uRllVUW5PZ0VlcVFrZnFuWmhiRnFRIi8+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfbkZZVVJuT2dFZXFRa2ZxblpoYkZxUSIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KICAgICAgICAgPGVPYmplY3RWYWx1ZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjVHlwZSIvPgogICAgICAgPC9zdHlsZXM+CiAgICAgICA8ZWxlbWVudCB4c2k6bmlsPSJ0cnVlIi8+Ci0gICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il85WE52eGo2MEVlcWJXZk9EdlRLSFR3IiBwb2ludHM9IlswLCAwLCAwLCAwXSRbMCwgMCwgMCwgMF0iLz4KLSAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il85WE52eHo2MEVlcWJXZk9EdlRLSFR3Ii8+Ci0gICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfOVhOdnlENjBFZXFiV2ZPRHZUS0hUdyIvPgorICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfbkZZVVEzT2dFZXFRa2ZxblpoYkZxUSIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+CisgICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfbkZZVVJIT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX25GWVVSWE9nRWVxUWtmcW5aaGJGcVEiLz4KICAgICA8L2VkZ2VzPgotICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il85WFZFaEQ2MEVlcWJXZk9EdlRLSFR3IiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudExpbmsiIHNvdXJjZT0iX2xtN2ZrRHVCRWVxUmRZTDRsNGo4M3ciIHRhcmdldD0iXzlYVkVnRDYwRWVxYldmT0R2VEtIVHciPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il85WFZFaFQ2MEVlcWJXZk9EdlRLSFR3Ii8+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfOVhWRWlUNjBFZXFiV2ZPRHZUS0hUdyIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KKyAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfbkZyUEozT2dFZXFRa2ZxblpoYkZxUSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnRMaW5rIiBzb3VyY2U9Il9sbTdma0R1QkVlcVJkWUw0bDRqODN3IiB0YXJnZXQ9Il9uRnJQSTNPZ0VlcVFrZnFuWmhiRnFRIj4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkZvbnRTdHlsZSIgeG1pOmlkPSJfbkZyUEtIT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iX25GclBMSE9nRWVxUWtmcW5aaGJGcVEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+CiAgICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI05hbWVzcGFjZSIvPgogICAgICAgPC9zdHlsZXM+CiAgICAgICA8ZWxlbWVudCB4c2k6bmlsPSJ0cnVlIi8+Ci0gICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il85WFZFaGo2MEVlcWJXZk9EdlRLSFR3IiBwb2ludHM9IlswLCAwLCAwLCAwXSRbMCwgMCwgMCwgMF0iLz4KLSAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il85WFZFaHo2MEVlcWJXZk9EdlRLSFR3Ii8+Ci0gICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfOVhWRWlENjBFZXFiV2ZPRHZUS0hUdyIvPgorICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfbkZyUEtYT2dFZXFRa2ZxblpoYkZxUSIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+CisgICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfbkZyUEtuT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX25GclBLM09nRWVxUWtmcW5aaGJGcVEiLz4KICAgICA8L2VkZ2VzPgotICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il85WGNaUkQ2MEVlcWJXZk9EdlRLSFR3IiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudExpbmsiIHNvdXJjZT0iX0c2bjVVRDZ0RWVxQWZLZGxkelljLXciIHRhcmdldD0iXzlYY1pRRDYwRWVxYldmT0R2VEtIVHciPgotICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il85WGNaUlQ2MEVlcWJXZk9EdlRLSFR3Ii8+Ci0gICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfOVhkQVVENjBFZXFiV2ZPRHZUS0hUdyIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KKyAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfbkYxQUszT2dFZXFRa2ZxblpoYkZxUSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnRMaW5rIiBzb3VyY2U9Il9HNm41VUQ2dEVlcUFmS2RsZHpZYy13IiB0YXJnZXQ9Il9uRjFBSjNPZ0VlcVFrZnFuWmhiRnFRIj4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkZvbnRTdHlsZSIgeG1pOmlkPSJfbkYxQUxIT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iX25GMUFNSE9nRWVxUWtmcW5aaGJGcVEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+CiAgICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0Fzc29jaWF0aW9uIi8+CiAgICAgICA8L3N0eWxlcz4KICAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KLSAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iXzlYY1pSajYwRWVxYldmT0R2VEtIVHciIHBvaW50cz0iWzAsIDAsIDAsIDBdJFswLCAwLCAwLCAwXSIvPgotICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iXzlYY1pSejYwRWVxYldmT0R2VEtIVHciLz4KLSAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il85WGNaU0Q2MEVlcWJXZk9EdlRLSFR3Ii8+CisgICAgICA8YmVuZHBvaW50cyB4bWk6dHlwZT0ibm90YXRpb246UmVsYXRpdmVCZW5kcG9pbnRzIiB4bWk6aWQ9Il9uRjFBTFhPZ0VlcVFrZnFuWmhiRnFRIiBwb2ludHM9IlswLCAwLCAwLCAwXSRbMCwgMCwgMCwgMF0iLz4KKyAgICAgIDxzb3VyY2VBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9uRjFBTG5PZ0VlcVFrZnFuWmhiRnFRIi8+CisgICAgICA8dGFyZ2V0QW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfbkYxQUwzT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgIDwvZWRnZXM+CisgICAgPGVkZ2VzIHhtaTp0eXBlPSJub3RhdGlvbjpDb25uZWN0b3IiIHhtaTppZD0iX25GLXhMbk9nRWVxUWtmcW5aaGJGcVEiIHR5cGU9IlN0ZXJlb3R5cGVDb21tZW50TGluayIgc291cmNlPSJfLWdQSHNIS0ZFZXF2YUtDUnlzYTU2QSIgdGFyZ2V0PSJfbkYteEtuT2dFZXFRa2ZxblpoYkZxUSI+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX25GLXhMM09nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkVPYmplY3RWYWx1ZVN0eWxlIiB4bWk6aWQ9Il9uRi14TTNPZ0VlcVFrZnFuWmhiRnFRIiBuYW1lPSJCQVNFX0VMRU1FTlQiPgorICAgICAgICA8ZU9iamVjdFZhbHVlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNPcGVyYXRpb24iLz4KKyAgICAgIDwvc3R5bGVzPgorICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfbkYteE1IT2dFZXFRa2ZxblpoYkZxUSIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+CisgICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfbkYteE1YT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX25GLXhNbk9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICA8L2VkZ2VzPgorICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il9uR0g3SG5PZ0VlcVFrZnFuWmhiRnFRIiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudExpbmsiIHNvdXJjZT0iXy1NaEZBSEtHRWVxdmFLQ1J5c2E1NkEiIHRhcmdldD0iX25HSDdHbk9nRWVxUWtmcW5aaGJGcVEiPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il9uR0g3SDNPZ0VlcVFrZnFuWmhiRnFRIi8+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfbkdSc0VYT2dFZXFRa2ZxblpoYkZxUSIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KKyAgICAgICAgPGVPYmplY3RWYWx1ZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjUmVjZXB0aW9uIi8+CisgICAgICA8L3N0eWxlcz4KKyAgICAgIDxlbGVtZW50IHhzaTpuaWw9InRydWUiLz4KKyAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iX25HSDdJSE9nRWVxUWtmcW5aaGJGcVEiIHBvaW50cz0iWzAsIDAsIDAsIDBdJFswLCAwLCAwLCAwXSIvPgorICAgICAgPHNvdXJjZUFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX25HSDdJWE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDx0YXJnZXRBbmNob3IgeG1pOnR5cGU9Im5vdGF0aW9uOklkZW50aXR5QW5jaG9yIiB4bWk6aWQ9Il9uR1JzRUhPZ0VlcVFrZnFuWmhiRnFRIi8+CisgICAgPC9lZGdlcz4KKyAgICA8ZWRnZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkNvbm5lY3RvciIgeG1pOmlkPSJfbkdrbkIzT2dFZXFRa2ZxblpoYkZxUSIgdHlwZT0iU3RlcmVvdHlwZUNvbW1lbnRMaW5rIiBzb3VyY2U9Il9RTUxIMEhPZ0VlcVFrZnFuWmhiRnFRIiB0YXJnZXQ9Il9uR2tuQTNPZ0VlcVFrZnFuWmhiRnFRIj4KKyAgICAgIDxzdHlsZXMgeG1pOnR5cGU9Im5vdGF0aW9uOkZvbnRTdHlsZSIgeG1pOmlkPSJfbkdrbkNIT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246RU9iamVjdFZhbHVlU3R5bGUiIHhtaTppZD0iX25Ha25ESE9nRWVxUWtmcW5aaGJGcVEiIG5hbWU9IkJBU0VfRUxFTUVOVCI+CisgICAgICAgIDxlT2JqZWN0VmFsdWUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0NvbW1lbnQiLz4KKyAgICAgIDwvc3R5bGVzPgorICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfbkdrbkNYT2dFZXFRa2ZxblpoYkZxUSIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+CisgICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfbkdrbkNuT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX25Ha25DM09nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICA8L2VkZ2VzPgorICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il92MmxFSG5PZ0VlcVFrZnFuWmhiRnFRIiB0eXBlPSJTdGVyZW90eXBlQ29tbWVudExpbmsiIHNvdXJjZT0iX3YyYlRFSE9nRWVxUWtmcW5aaGJGcVEiIHRhcmdldD0iX3YybEVHbk9nRWVxUWtmcW5aaGJGcVEiPgorICAgICAgPHN0eWxlcyB4bWk6dHlwZT0ibm90YXRpb246Rm9udFN0eWxlIiB4bWk6aWQ9Il92MmxFSDNPZ0VlcVFrZnFuWmhiRnFRIi8+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpFT2JqZWN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfdjJsRUkzT2dFZXFRa2ZxblpoYkZxUSIgbmFtZT0iQkFTRV9FTEVNRU5UIj4KKyAgICAgICAgPGVPYmplY3RWYWx1ZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQ2xhc3MiLz4KKyAgICAgIDwvc3R5bGVzPgorICAgICAgPGVsZW1lbnQgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgPGJlbmRwb2ludHMgeG1pOnR5cGU9Im5vdGF0aW9uOlJlbGF0aXZlQmVuZHBvaW50cyIgeG1pOmlkPSJfdjJsRUlIT2dFZXFRa2ZxblpoYkZxUSIgcG9pbnRzPSJbMCwgMCwgMCwgMF0kWzAsIDAsIDAsIDBdIi8+CisgICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfdjJsRUlYT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX3YybEVJbk9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICA8L2VkZ2VzPgorICAgIDxlZGdlcyB4bWk6dHlwZT0ibm90YXRpb246Q29ubmVjdG9yIiB4bWk6aWQ9Il93dzFGMEhPZ0VlcVFrZnFuWmhiRnFRIiB0eXBlPSJFeHRlbnNpb25fRWRnZSIgc291cmNlPSJfTzF2WThGYkNFZW1tczY1TWJBek5QdyIgdGFyZ2V0PSJfdjJiVEVIT2dFZXFRa2ZxblpoYkZxUSI+CisgICAgICA8c3R5bGVzIHhtaTp0eXBlPSJub3RhdGlvbjpGb250U3R5bGUiIHhtaTppZD0iX3d3MUYwWE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiBocmVmPSJJb1QtTUwucHJvZmlsZS51bWwjX3d3clUwSE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDxiZW5kcG9pbnRzIHhtaTp0eXBlPSJub3RhdGlvbjpSZWxhdGl2ZUJlbmRwb2ludHMiIHhtaTppZD0iX3d3MUYwbk9nRWVxUWtmcW5aaGJGcVEiIHBvaW50cz0iWzYwLCAyMDAsIC02NDM5ODQsIC02NDM5ODRdJFs2MCwgOTAsIC02NDM5ODQsIC02NDM5ODRdIi8+CisgICAgICA8c291cmNlQW5jaG9yIHhtaTp0eXBlPSJub3RhdGlvbjpJZGVudGl0eUFuY2hvciIgeG1pOmlkPSJfd3hSeHdIT2dFZXFRa2ZxblpoYkZxUSIgaWQ9IigwLjQsMC4wKSIvPgorICAgICAgPHRhcmdldEFuY2hvciB4bWk6dHlwZT0ibm90YXRpb246SWRlbnRpdHlBbmNob3IiIHhtaTppZD0iX3d4Unh3WE9nRWVxUWtmcW5aaGJGcVEiIGlkPSIoMC40LDEuMCkiLz4KICAgICA8L2VkZ2VzPgogICA8L25vdGF0aW9uOkRpYWdyYW0+CiA8L3htaTpYTUk+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvbW9kZWwvSW9ULU1MLnByb2ZpbGUudW1sIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL21vZGVsL0lvVC1NTC5wcm9maWxlLnVtbAppbmRleCA3MmJmNDRmLi43OTUzYTRjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvbW9kZWwvSW9ULU1MLnByb2ZpbGUudW1sCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9tb2RlbC9Jb1QtTUwucHJvZmlsZS51bWwKQEAgLTgzMCwxNyArODMwLDE5IEBACiAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CiAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlBhY2thZ2UiIHhtaTppZD0iX2FBUkk0RVoxRWVtanM0S01DMkNoUGciIG5hbWU9IldvVCI+CiAgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfbnBjN1lFWjFFZW1qczRLTUMyQ2hQZyIgbmFtZT0iVGhpbmciPgotICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfYXVIRFVGZXRFZW1obE5EYnlTbG5ZQSI+Ci0gICAgICAgICAgPGJvZHk+JnF1b3Q7dGl0bGUmcXVvdDsgaXMgVU1MOjpOYW1lZEVsZW1lbnQ6Om5hbWU8L2JvZHk+Ci0gICAgICAgIDwvb3duZWRDb21tZW50PgotICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfZG5heXdGZXRFZW1obE5EYnlTbG5ZQSI+Ci0gICAgICAgICAgPGJvZHk+JnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDsgaXMgYSBDb21tZW50IGF0dGFjaGVkIHRvIHRoZSBDbGFzcyBvbiB3aGljaCAmbHQ7Jmx0O1RoaW5nPj4gaXMgYXBwbGllZC4mI3hEOworICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfemZOVDhISnBFZXF2YUtDUnlzYTU2QSIgbmFtZT0idGl0bGUiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNEZXJpdmVkPSJ0cnVlIj4KKyAgICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfYXVIRFVGZXRFZW1obE5EYnlTbG5ZQSI+CisgICAgICAgICAgICA8Ym9keT4mcXVvdDt0aXRsZSZxdW90OyBpcyBVTUw6Ok5hbWVkRWxlbWVudDo6bmFtZTwvYm9keT4KKyAgICAgICAgICA8L293bmVkQ29tbWVudD4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI1N0cmluZyIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfMnZwSjhISnBFZXF2YUtDUnlzYTU2QSIgbmFtZT0iZGVzY3JpcHRpb24iIHZpc2liaWxpdHk9InB1YmxpYyIgaXNEZXJpdmVkPSJ0cnVlIj4KKyAgICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfZG5heXdGZXRFZW1obE5EYnlTbG5ZQSI+CisgICAgICAgICAgICA8Ym9keT4mcXVvdDtkZXNjcmlwdGlvbiZxdW90OyBpcyBhIENvbW1lbnQgYXR0YWNoZWQgdG8gdGhlIENsYXNzIG9uIHdoaWNoICZsdDsmbHQ7VGhpbmc+PiBpcyBhcHBsaWVkLiYjeEQ7CiAmcXVvdDtkZXNjcmlwdGlvbnMmcXVvdDsgaXMgc2V2ZXJhbCBDb21tZW50cyBhdHRhY2hlZCB0byB0aGUgQ2xhc3Mgb24gd2hpY2ggJmx0OyZsdDtUaGluZz4+IGlzIGFwcGxpZWQuPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX29zcHZ3RDYxRWVxYldmT0R2VEtIVHciPgotICAgICAgICAgIDxib2R5PiZxdW90O3NlY3VyaXR5JnF1b3Q7IGlzIGRlcml2ZWQgZnJvbSAmcXVvdDtzZWN1cml0eURlZmluaXRpb24mcXVvdDsuIFRoZXJlZm9yZSB3ZSBjYW5ub3QgaGF2ZSBzZWN1cml0eURlZmluaXRpb25zIHRoYXQgYXJlIG5vdCBhY3RpdmUgaW4gc2VjdXJpdHkuPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KLSAgICAgICAgPGdlbmVyYWxpemF0aW9uIHhtaTp0eXBlPSJ1bWw6R2VuZXJhbGl6YXRpb24iIHhtaTppZD0iX00xYk5FSGZxRWVtRUQ5cDE3TC1iakEiIGdlbmVyYWw9Il9teFBxSUN0dUVlZVpJNnJNVFlWNjB3Ii8+CisgICAgICAgICAgPC9vd25lZENvbW1lbnQ+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNTdHJpbmciLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KICAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX3ZYS2ZJRGVTRWVxeUllVW9fRENPN3ciIG5hbWU9ImJhc2UiPgogICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjU3RyaW5nIi8+CiAgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfdlhLZklUZVNFZXF5SWVVb19EQ083dyIvPgpAQCAtODU1LDMzICs4NTcsNDggQEAKICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9yaEtmd0ZhN0VlbUJZczUtZkRJOHV3Ii8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfcmhWZTRGYTdFZW1CWXM1LWZESTh1dyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iXy1sRjFnM0prRWVxdmFLQ1J5c2E1NkEiIG5hbWU9InNlY3VyaXR5IiB0eXBlPSJfR2RHMTBFWjJFZW1qczRLTUMyQ2hQZyIgYXNzb2NpYXRpb249Il8tbEYxZ0hKa0VlcXZhS0NSeXNhNTZBIj4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9ETlFUY0hKbEVlcXZhS0NSeXNhNTZBIiB2YWx1ZT0iKiIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgogICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfZl9wSDRGYThFZW1CWXM1LWZESTh1dyIgbmFtZT0ic2VjdXJpdHlEZWZpbml0aW9ucyIgdHlwZT0iX0dkRzEwRVoyRWVtanM0S01DMkNoUGciIGFzc29jaWF0aW9uPSJfZl9qQlFGYThFZW1CWXM1LWZESTh1dyI+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfbTRMdEFGYThFZW1CWXM1LWZESTh1dyIgdmFsdWU9IioiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KICAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iXzBBaGNRVmE4RWVtQllzNS1mREk4dXciIG5hbWU9ImxpbmtzIiB0eXBlPSJfUVd3YmdFWjJFZW1qczRLTUMyQ2hQZyIgaXNEZXJpdmVkPSJ0cnVlIiBhc3NvY2lhdGlvbj0iXzBBZ09JRmE4RWVtQllzNS1mREk4dXciPgorICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il83NGt5b0hKcEVlcXZhS0NSeXNhNTZBIj4KKyAgICAgICAgICAgIDxib2R5PiZxdW90O2xpbmtzJnF1b3Q7IGlzIGRlcml2ZWQgZnJvbSB0aGUgYXNzb2NpYXRpb25zIGZvciB3aGljaCB0aGUgVGhpbmcgaXMgYSBzb3VyY2UuPC9ib2R5PgorICAgICAgICAgIDwvb3duZWRDb21tZW50PgogICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iXzN2MW1vRmE4RWVtQllzNS1mREk4dXciLz4KICAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il8zd0loa0ZhOEVlbUJZczUtZkRJOHV3IiB2YWx1ZT0iKiIvPgogICAgICAgICA8L293bmVkQXR0cmlidXRlPgotICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfOHlUYThGYThFZW1CWXM1LWZESTh1dyIgbmFtZT0iZXZlbnRzIiB0eXBlPSJfTHhYa3dFWjJFZW1qczRLTUMyQ2hQZyIgYXNzb2NpYXRpb249Il84eVJsd0ZhOEVlbUJZczUtZkRJOHV3Ij4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iXzh5VGE4RmE4RWVtQllzNS1mREk4dXciIG5hbWU9ImV2ZW50cyIgdHlwZT0iX0x4WGt3RVoyRWVtanM0S01DMkNoUGciIGlzRGVyaXZlZD0idHJ1ZSIgYXNzb2NpYXRpb249Il84eVJsd0ZhOEVlbUJZczUtZkRJOHV3Ij4KKyAgICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfQTVnVjRISnFFZXF2YUtDUnlzYTU2QSI+CisgICAgICAgICAgICA8Ym9keT4mcXVvdDtldmVudHMmcXVvdDsgaXMgZGVyaXZlZCBmcm9tIHRoZSBzaWduYWxzLCBzdGVyZW90eXBlZCAmbHQ7Jmx0O0V2ZW50QWZmb3JkYW5jZT4+LCByZWZlcmVuY2VkIGJ5IHRoZSB0cmlnZ2VycyBvZiB0aGUgc3RhdGUgbWFjaGluZXMgYWN0aW5nIGFzIGNsYXNzaWZpZXIgYmVoYXZpb3Igb2YgJmx0OyZsdDtUaGluZz4+LjwvYm9keT4KKyAgICAgICAgICA8L293bmVkQ29tbWVudD4KICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il85SFlhMEh1aUVlbVNtOHlfa3RFQkhRIi8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfOUhpTDBIdWlFZW1TbTh5X2t0RUJIUSIgdmFsdWU9IioiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KLSAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX0hDRzIwbGE5RWVtQllzNS1mREk4dXciIG5hbWU9ImFjdGlvbnMiIHR5cGU9Il9MTFIxSUVaMkVlbWpzNEtNQzJDaFBnIiBhc3NvY2lhdGlvbj0iX0hDRm9zRmE5RWVtQllzNS1mREk4dXciPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfSENHMjBsYTlFZW1CWXM1LWZESTh1dyIgbmFtZT0iYWN0aW9ucyIgdHlwZT0iX0xMUjFJRVoyRWVtanM0S01DMkNoUGciIGlzRGVyaXZlZD0idHJ1ZSIgYXNzb2NpYXRpb249Il9IQ0Zvc0ZhOUVlbUJZczUtZkRJOHV3Ij4KKyAgICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfSmU3VGtISnFFZXF2YUtDUnlzYTU2QSI+CisgICAgICAgICAgICA8Ym9keT4mcXVvdDthY3Rpb25zJnF1b3Q7IGlzIGRlcml2ZWQgZnJvbSB0aGUgT3BlcmF0aW9ucyBvZiAmbHQ7Jmx0O1RoaW5nPj4gc3RlcmVvdHlwZWQgJmx0OyZsdDtBY3Rpb25BZmZvcmRhbmNlPj4uPC9ib2R5PgorICAgICAgICAgIDwvb3duZWRDb21tZW50PgogICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iXzdtaTZNSHVpRWVtU204eV9rdEVCSFEiLz4KICAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il83bTExSUh1aUVlbVNtOHlfa3RFQkhRIiB2YWx1ZT0iKiIvPgogICAgICAgICA8L293bmVkQXR0cmlidXRlPgotICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfUzI3dndGYTlFZW1CWXM1LWZESTh1dyIgbmFtZT0icHJvcGVydGllcyIgdHlwZT0iX0pyVDNNRVoyRWVtanM0S01DMkNoUGciIGFzc29jaWF0aW9uPSJfUzI2aG9GYTlFZW1CWXM1LWZESTh1dyI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9TMjd2d0ZhOUVlbUJZczUtZkRJOHV3IiBuYW1lPSJwcm9wZXJ0aWVzIiB0eXBlPSJfSnJUM01FWjJFZW1qczRLTUMyQ2hQZyIgaXNEZXJpdmVkPSJ0cnVlIiBhc3NvY2lhdGlvbj0iX1MyNmhvRmE5RWVtQllzNS1mREk4dXciPgorICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9NMVRaZ0hKcUVlcXZhS0NSeXNhNTZBIj4KKyAgICAgICAgICAgIDxib2R5PiZxdW90O3Byb3BlcnRpZXMmcXVvdDsgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9wZXJ0aWVzIG9mICZsdDsmbHQ7VGhpbmc+PiBzdGVyZW90eXBlZCAmbHQ7Jmx0O1Byb3BlcnR5QWZmb3JkYW5jZT4+LjwvYm9keT4KKyAgICAgICAgICA8L293bmVkQ29tbWVudD4KICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9VWVVxQUZhOUVlbUJZczUtZkRJOHV3Ii8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfVVlpc2NGYTlFZW1CWXM1LWZESTh1dyIgdmFsdWU9IioiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KICAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX3lJc01jRHVBRWVxUmRZTDRsNGo4M3ciIG5hbWU9InZlcnNpb24iPgogICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjU3RyaW5nIi8+CiAgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+Ci0gICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9KUHpSOER1QkVlcVJkWUw0bDRqODN3IiBuYW1lPSJ0eXBlIiB0eXBlPSJfblRtc2dEdHdFZXFSZFlMNGw0ajgzdyIgYXNzb2NpYXRpb249Il9KUHBnOER1QkVlcVJkWUw0bDRqODN3Ij4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX0pQelI4RHVCRWVxUmRZTDRsNGo4M3ciIG5hbWU9ImFUeXBlIiB0eXBlPSJfblRtc2dEdHdFZXFSZFlMNGw0ajgzdyIgYXNzb2NpYXRpb249Il9KUHBnOER1QkVlcVJkWUw0bDRqODN3Ij4KICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9KOERrNEQzN0VlcWF6dHlGcVNHUWJBIi8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfSjhKcmdEMzdFZXFhenR5RnFTR1FiQSIgdmFsdWU9IioiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KLSAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX05udVVjenVCRWVxUmRZTDRsNGo4M3ciIG5hbWU9ImNvbnRleHQiIHR5cGU9Il9DUnBBUUR0eEVlcVJkWUw0bDRqODN3IiBhc3NvY2lhdGlvbj0iX05udVVjRHVCRWVxUmRZTDRsNGo4M3ciPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfTm51VWN6dUJFZXFSZFlMNGw0ajgzdyIgbmFtZT0iYUNvbnRleHQiIHR5cGU9Il9DUnBBUUR0eEVlcVJkWUw0bDRqODN3IiBhc3NvY2lhdGlvbj0iX05udVVjRHVCRWVxUmRZTDRsNGo4M3ciPgogICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX0tUNWRJRDM3RWVxYXp0eUZxU0dRYkEiLz4KICAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9LVDlIZ0QzN0VlcWF6dHlGcVNHUWJBIiB2YWx1ZT0iKiIvPgogICAgICAgICA8L293bmVkQXR0cmlidXRlPgpAQCAtODg5LDE4ICs5MDYsMjkgQEAKICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9JTFVnc0R1Q0VlcVJkWUw0bDRqODN3Ii8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfSUxlUnNEdUNFZXFSZFlMNGw0ajgzdyIgdmFsdWU9IioiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX3d3clUwbk9nRWVxUWtmcW5aaGJGcVEiIG5hbWU9ImJhc2VfQ2xhc3MiIGFzc29jaWF0aW9uPSJfd3dyVTBIT2dFZXFRa2ZxblpoYkZxUSI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0NsYXNzIi8+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfd3dyVTAzT2dFZXFRa2ZxblpoYkZxUSIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgogICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CiAgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfR2RHMTBFWjJFZW1qczRLTUMyQ2hQZyIgbmFtZT0iU2VjdXJpdHlTY2hlbWUiPgotICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfRF83eGtIdWtFZW1TbTh5X2t0RUJIUSI+Ci0gICAgICAgICAgPGJvZHk+JnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDsgaXMgYSBDb21tZW50IGF0dGFjaGVkIHRvIHRoZSBDbGFzc2lmaWVyIG9uIHdoaWNoICZsdDsmbHQ7U2VjdXJpdHlTY2hlbWU+PiBpcyBhcHBsaWVkLjwvYm9keT4KLSAgICAgICAgPC9vd25lZENvbW1lbnQ+Ci0gICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9Ia2tTWUQ2bUVlcUFmS2RsZHpZYy13Ij4KLSAgICAgICAgICA8Ym9keT4mcXVvdDtuYW1lJnF1b3Q7IGlzIFVNTDo6TmFtZWRFbGVtZW50OjpuYW1lPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KICAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX1pIN2hNbnV6RWVtU204eV9rdEVCSFEiIG5hbWU9ImJhc2VfQ2xhc3NpZmllciIgYXNzb2NpYXRpb249Il9aSDdoTUh1ekVlbVNtOHlfa3RFQkhRIj4KICAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQ2xhc3NpZmllciIvPgogICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX1pIN2hNM3V6RWVtU204eV9rdEVCSFEiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX2l5ZDBZSEpxRWVxdmFLQ1J5c2E1NkEiIG5hbWU9InRpdGxlIiB2aXNpYmlsaXR5PSJwdWJsaWMiIGlzRGVyaXZlZD0idHJ1ZSI+CisgICAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2l5ZDBZWEpxRWVxdmFLQ1J5c2E1NkEiPgorICAgICAgICAgICAgPGJvZHk+JnF1b3Q7dGl0bGUmcXVvdDsgaXMgVU1MOjpOYW1lZEVsZW1lbnQ6Om5hbWU8L2JvZHk+CisgICAgICAgICAgPC9vd25lZENvbW1lbnQ+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNTdHJpbmciLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX2l5bmxZSEpxRWVxdmFLQ1J5c2E1NkEiIG5hbWU9ImRlc2NyaXB0aW9uIiB2aXNpYmlsaXR5PSJwdWJsaWMiIGlzRGVyaXZlZD0idHJ1ZSI+CisgICAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2l5bmxZWEpxRWVxdmFLQ1J5c2E1NkEiPgorICAgICAgICAgICAgPGJvZHk+JnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDsgaXMgYSBDb21tZW50IGF0dGFjaGVkIHRvIHRoZSBDbGFzcyBvbiB3aGljaCAmbHQ7Jmx0O1NlY3VyaXR5U2NoZW1lPj4gaXMgYXBwbGllZC4mI3hEOworJnF1b3Q7ZGVzY3JpcHRpb25zJnF1b3Q7IGlzIHNldmVyYWwgQ29tbWVudHMgYXR0YWNoZWQgdG8gdGhlIENsYXNzIG9uIHdoaWNoICZsdDsmbHQ7U2VjdXJpdHlTY2hlbWU+PiBpcyBhcHBsaWVkLjwvYm9keT4KKyAgICAgICAgICA8L293bmVkQ29tbWVudD4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI1N0cmluZyIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgogICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfSG5HdVVFWjNFZW1qczRLTUMyQ2hQZyIgbmFtZT0ic2NoZW1lIiB0eXBlPSJfUDV5N2dIdWtFZW1TbTh5X2t0RUJIUSIvPgogICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfYmpTdU1IdWtFZW1TbTh5X2t0RUJIUSIgbmFtZT0icHJveHkiIGFzc29jaWF0aW9uPSJfYmpKa1FIdWtFZW1TbTh5X2t0RUJIUSI+CiAgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNTdHJpbmciLz4KQEAgLTk0NiwxNyArOTc0LDIzIEBACiAgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9TZXpEOEQ2cEVlcUFmS2RsZHpZYy13IiBuYW1lPSJmbG93IiB0eXBlPSJfelVHdEVENnBFZXFBZktkbGR6WWMtdyIvPgogICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CiAgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfSWs4RkFFWjJFZW1qczRLTUMyQ2hQZyIgbmFtZT0iSW50ZXJhY3Rpb25BZmZvcmRhbmNlIiBpc0Fic3RyYWN0PSJ0cnVlIj4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2ptTUF3RDM3RWVxYXp0eUZxU0dRYkEiPgotICAgICAgICAgIDxib2R5PiZxdW90O3RpdGxlJnF1b3Q7IGlzIFVNTDo6TmFtZWRFbGVtZW50OjpuYW1lPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2xXcXN3SHVrRWVtU204eV9rdEVCSFEiPgotICAgICAgICAgIDxib2R5PiZxdW90O2Rlc2NyaXB0aW9uJnF1b3Q7IGlzIGEgQ29tbWVudCBhdHRhY2hlZCB0byB0aGUgWFhYIG9uIHdoaWNoICZsdDsmbHQ7SVA+PiBpcyBhcHBsaWVkLjwvYm9keT4KLSAgICAgICAgPC9vd25lZENvbW1lbnQ+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9FZGd5c0hKckVlcXZhS0NSeXNhNTZBIiBuYW1lPSJ0aXRsZSIgdmlzaWJpbGl0eT0icHVibGljIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9FZGd5c1hKckVlcXZhS0NSeXNhNTZBIj4KKyAgICAgICAgICAgIDxib2R5PiZxdW90O3RpdGxlJnF1b3Q7IGlzIFVNTDo6TmFtZWRFbGVtZW50OjpuYW1lPC9ib2R5PgorICAgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjU3RyaW5nIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9FZGd5c25KckVlcXZhS0NSeXNhNTZBIiBuYW1lPSJkZXNjcmlwdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9sV3Fzd0h1a0VlbVNtOHlfa3RFQkhRIj4KKyAgICAgICAgICAgIDxib2R5PiZxdW90O2Rlc2NyaXB0aW9uJnF1b3Q7IGlzIGEgQ29tbWVudCBhdHRhY2hlZCB0byB0aGUgWFhYIG9uIHdoaWNoICZsdDsmbHQ7SW50ZXJhY3Rpb25BZmZvcmRhbmNlPj4gaXMgYXBwbGllZC48L2JvZHk+CisgICAgICAgICAgPC9vd25lZENvbW1lbnQ+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNTdHJpbmciLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KICAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX01OOWJNRmEtRWVtQllzNS1mREk4dXciIG5hbWU9ImZvcm1zIiB0eXBlPSJfUGQ3V0VFWjJFZW1qczRLTUMyQ2hQZyIgYXNzb2NpYXRpb249Il9NTjdtQUZhLUVlbUJZczUtZkRJOHV3Ij4KICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9OcWRPWUZhLUVlbUJZczUtZkRJOHV3IiB2YWx1ZT0iMSIvPgogICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX05xc2U4RmEtRWVtQllzNS1mREk4dXciIHZhbHVlPSIqIi8+CiAgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+Ci0gICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9sY2VwY0QzNkVlcWF6dHlGcVNHUWJBIiBuYW1lPSJ0eXBlIiB0eXBlPSJfblRtc2dEdHdFZXFSZFlMNGw0ajgzdyIgYXNzb2NpYXRpb249Il9sY2FfRUQzNkVlcWF6dHlGcVNHUWJBIj4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX2xjZXBjRDM2RWVxYXp0eUZxU0dRYkEiIG5hbWU9ImFUeXBlIiB0eXBlPSJfblRtc2dEdHdFZXFSZFlMNGw0ajgzdyIgYXNzb2NpYXRpb249Il9sY2FfRUQzNkVlcWF6dHlGcVNHUWJBIj4KICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9MOWt3c0QzN0VlcWF6dHlGcVNHUWJBIi8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfTDlvYkVEMzdFZXFhenR5RnFTR1FiQSIgdmFsdWU9IioiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KQEAgLTk3MSwyMyArMTAwNSwyNyBAQAogICAgICAgICA8L293bmVkQXR0cmlidXRlPgogICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CiAgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfTExSMUlFWjJFZW1qczRLTUMyQ2hQZyIgbmFtZT0iQWN0aW9uQWZmb3JkYW5jZSI+Ci0gICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9UdGNJRUh1ckVlbVNtOHlfa3RFQkhRIj4KLSAgICAgICAgICA8Ym9keT4mcXVvdDtpbnB1dCZxdW90OyBhbmQgJnF1b3Q7b3V0cHV0JnF1b3Q7IGFyZSB0byBiZSBQYXJhbWV0ZXJzICh3aXRoIGRpcmVjdGlvbnMgaW4sIG91dCwgcmV0dXJuLCBldGMuLi4pIGNvbnRhaW5lZCBieSB0aGUgT3BlcmF0aW9uIG9uIHdoaWNoICZsdDsmbHQ7QWN0aW9uPj4gaXMgYXBwbGllZC4mI3hEOwotSW4gdGhpcyBjYXNlIERhdGFTY2hlbWUgc2hvdWxkIGJlIGFwcGxpZWQgb24gdGhlIFBhcmFtZXRlciB0aGF0IHNlcnZlcyBhcyBpbnB1dCBvciBvdXRwdXQuPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KICAgICAgICAgPGdlbmVyYWxpemF0aW9uIHhtaTp0eXBlPSJ1bWw6R2VuZXJhbGl6YXRpb24iIHhtaTppZD0iX1l5LTNjRmE5RWVtQllzNS1mREk4dXciIGdlbmVyYWw9Il9JazhGQUVaMkVlbWpzNEtNQzJDaFBnIi8+Ci0gICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9WWEl3d0ZhX0VlbUJZczUtZkRJOHV3IiBuYW1lPSJpbnB1dCIgdHlwZT0iX09PeGJVRVoyRWVtanM0S01DMkNoUGciIGFzc29jaWF0aW9uPSJfVlhIaW9GYV9FZW1CWXM1LWZESTh1dyI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il8wcldRd25LR0VlcXZhS0NSeXNhNTZBIiBuYW1lPSJiYXNlX09wZXJhdGlvbiIgYXNzb2NpYXRpb249Il8wcldRd0hLR0VlcXZhS0NSeXNhNTZBIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjT3BlcmF0aW9uIi8+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfMHJXUXczS0dFZXF2YUtDUnlzYTU2QSIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfVlhJd3dGYV9FZW1CWXM1LWZESTh1dyIgbmFtZT0iaW5wdXQiIHR5cGU9Il9PT3hiVUVaMkVlbWpzNEtNQzJDaFBnIiBpc0Rlcml2ZWQ9InRydWUiIGFzc29jaWF0aW9uPSJfVlhIaW9GYV9FZW1CWXM1LWZESTh1dyI+CisgICAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX1U3emZNSEp0RWVxdmFLQ1J5c2E1NkEiPgorICAgICAgICAgICAgPGJvZHk+JnF1b3Q7aW5wdXQmcXVvdDsgYW5kICZxdW90O291dHB1dCZxdW90OyBhcmUgdG8gYmUgUGFyYW1ldGVycyAod2l0aCBkaXJlY3Rpb25zIGluLCBvdXQsIHJldHVybiwgZXRjLi4uKSBjb250YWluZWQgYnkgdGhlIEJlaGF2aW9yYWxGZWF0dXJlIG9uIHdoaWNoICZsdDsmbHQ7QWN0aW9uQWZmb3JkYW5jZT4+IGlzIGFwcGxpZWQuJiN4RDsKK0luIHRoaXMgY2FzZSBEYXRhU2NoZW1lIHNob3VsZCBiZSBhcHBsaWVkIG9uIHRoZSBQYXJhbWV0ZXIgdGhhdCBzZXJ2ZXMgYXMgaW5wdXQgb3Igb3V0cHV0LjwvYm9keT4KKyAgICAgICAgICA8L293bmVkQ29tbWVudD4KICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9YbUM0VUZhX0VlbUJZczUtZkRJOHV3Ii8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfWG1OM2NGYV9FZW1CWXM1LWZESTh1dyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KLSAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX1lpY1BJVmFfRWVtQllzNS1mREk4dXciIG5hbWU9Im91dHB1dCIgdHlwZT0iX09PeGJVRVoyRWVtanM0S01DMkNoUGciIGFzc29jaWF0aW9uPSJfWWlib0VGYV9FZW1CWXM1LWZESTh1dyI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9ZaWNQSVZhX0VlbUJZczUtZkRJOHV3IiBuYW1lPSJvdXRwdXQiIHR5cGU9Il9PT3hiVUVaMkVlbWpzNEtNQzJDaFBnIiBpc0Rlcml2ZWQ9InRydWUiIGFzc29jaWF0aW9uPSJfWWlib0VGYV9FZW1CWXM1LWZESTh1dyI+CisgICAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX1ZCVVJVSEp0RWVxdmFLQ1J5c2E1NkEiPgorICAgICAgICAgICAgPGJvZHk+JnF1b3Q7aW5wdXQmcXVvdDsgYW5kICZxdW90O291dHB1dCZxdW90OyBhcmUgdG8gYmUgUGFyYW1ldGVycyAod2l0aCBkaXJlY3Rpb25zIGluLCBvdXQsIHJldHVybiwgZXRjLi4uKSBjb250YWluZWQgYnkgdGhlIEJlaGF2aW9yYWxGZWF0dXJlIG9uIHdoaWNoICZsdDsmbHQ7QWN0aW9uQWZmb3JkYW5jZT4+IGlzIGFwcGxpZWQuJiN4RDsKK0luIHRoaXMgY2FzZSBEYXRhU2NoZW1lIHNob3VsZCBiZSBhcHBsaWVkIG9uIHRoZSBQYXJhbWV0ZXIgdGhhdCBzZXJ2ZXMgYXMgaW5wdXQgb3Igb3V0cHV0LjwvYm9keT4KKyAgICAgICAgICA8L293bmVkQ29tbWVudD4KICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9Sdmt0TUh1ckVlbVNtOHlfa3RFQkhRIi8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfUnZ1ZU1IdXJFZW1TbTh5X2t0RUJIUSIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KLSAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX1F0RFBVbnVpRWVtU204eV9rdEVCSFEiIG5hbWU9ImJhc2VfQmVoYXZpb3JhbEZlYXR1cmUiIGFzc29jaWF0aW9uPSJfUXREUFVIdWlFZW1TbTh5X2t0RUJIUSI+Ci0gICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0JlaGF2aW9yYWxGZWF0dXJlIi8+Ci0gICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfUXREUFUzdWlFZW1TbTh5X2t0RUJIUSIvPgotICAgICAgICA8L293bmVkQXR0cmlidXRlPgogICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfdm43RFlEdUJFZXFSZFlMNGw0ajgzdyIgbmFtZT0ic2FmZSI+CiAgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNCb29sZWFuIi8+CiAgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CkBAIC05OTYsMTggKzEwMzQsMTAgQEAKICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KICAgICAgIDwvcGFja2FnZWRFbGVtZW50PgogICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iX0x4WGt3RVoyRWVtanM0S01DMkNoUGciIG5hbWU9IkV2ZW50QWZmb3JkYW5jZSI+Ci0gICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il8zTlJmOEh1NkVlbVNtOHlfa3RFQkhRIj4KLSAgICAgICAgICA8Ym9keT4mcXVvdDt0eXBlJnF1b3Q7IGlzIGluZmVycmVkIGZyb20gdGhlIHR5cGUgb2YgdGhlIFNpZ25hbCdzIFByb3BlcnRpZXMgb24gd2hpY2ggJmx0OyZsdDtFdmVudD4+IGlzIGFwcGxpZWQuJiN4RDsKLVRoZXkgYXJlIFR5cGVkRWxlbWVudHMgc28gdXNlIHRoZSBzYW1lIGluZmVyZW5jZSBhbGdvcml0aG0gYXMgZm9yIFR5cGVkRWxlbWVudHMuJiN4RDsKLU9uZSBvZiBib29sZWFuLCBpbnRlZ2VyLCBzdHJpbmcsIG9iamVjdCwgYXJyYXksIG51bGwuPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iXzNOUmY4WHU2RWVtU204eV9rdEVCSFEiPgotICAgICAgICAgIDxib2R5PiZxdW90O2NvbnN0JnF1b3Q7IGlzIHRoZSBUeXBlZEVsZW1lbnQ6OmRlZmF1bHRWYWx1ZSBvZiB0aGUgUHJvcGVydHkgY29udGFpbmVkIGJ5IHRoZSBTaWduYWwgc3RlcmVvdHlwZWQgJmx0OyZsdDtFdmVudD4+LjwvYm9keT4KLSAgICAgICAgPC9vd25lZENvbW1lbnQ+CiAgICAgICAgIDxnZW5lcmFsaXphdGlvbiB4bWk6dHlwZT0idW1sOkdlbmVyYWxpemF0aW9uIiB4bWk6aWQ9Il9aYm5rd0ZhOUVlbUJZczUtZkRJOHV3IiBnZW5lcmFsPSJfSWs4RkFFWjJFZW1qczRLTUMyQ2hQZyIvPgotICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfclNvdlludTVFZW1TbTh5X2t0RUJIUSIgbmFtZT0iYmFzZV9TaWduYWwiIGFzc29jaWF0aW9uPSJfclNvdllIdTVFZW1TbTh5X2t0RUJIUSI+Ci0gICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI1NpZ25hbCIvPgotICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX3JTb3ZZM3U1RWVtU204eV9rdEVCSFEiLz4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX19qaFVNbktHRWVxdmFLQ1J5c2E1NkEiIG5hbWU9ImJhc2VfUmVjZXB0aW9uIiBhc3NvY2lhdGlvbj0iX19qaFVNSEtHRWVxdmFLQ1J5c2E1NkEiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNSZWNlcHRpb24iLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9famhVTTNLR0VlcXZhS0NSeXNhNTZBIi8+CiAgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CiAgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9zaDc0NHo2dEVlcUFmS2RsZHpZYy13IiBuYW1lPSJkYXRhIiB0eXBlPSJfT094YlVFWjJFZW1qczRLTUMyQ2hQZyIgYXNzb2NpYXRpb249Il9zaDc0NEQ2dEVlcUFmS2RsZHpZYy13Ij4KICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il95RzZINEQ2dUVlcUFmS2RsZHpZYy13Ii8+CkBAIC0xMDI0LDQwICsxMDU0LDI3IEBACiAgICAgICAgICAgPGJvZHk+RGF0YVNjaGVtYSBzaG91bGQgYmUgYSBUeXBlZEVsZW1lbnQsIGkuZS4sIFByb3BlcnR5IGZvciAmbHQ7Jmx0O1Byb3BlcnR5Pj4sIFBhcmFtZXRlciBmb3IgJmx0OyZsdDtBY3Rpb24+PiBpbnB1dC9vdXRwdXQuJiN4RDsKIFRoZSB0eXBlIGFuZCBtdWx0aXBsaWNpdHkgb2YgdGhlIFR5cGVkRWxlbWVudCBnaXZlcyB0aGUgbmF0dXJlIG9mIHRoZSBEYXRhU2NoZW1hIChlLmcuLCBhIFByb3BlcnR5IHR5cGVkIGJ5IEludGVnZXIgaXMgYW4gSW50ZWdlclNjaGVtYSkuPC9ib2R5PgogICAgICAgICA8L293bmVkQ29tbWVudD4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX0R3b0g4RDM4RWVxYXp0eUZxU0dRYkEiPgotICAgICAgICAgIDxib2R5PiZxdW90O3RpdGxlJnF1b3Q7IGlzIFVNTDo6TmFtZWRFbGVtZW50OjpuYW1lPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2d4MlNNSHV1RWVtU204eV9rdEVCSFEiPgotICAgICAgICAgIDxib2R5PiZxdW90O2Rlc2NyaXB0aW9uJnF1b3Q7IGlzIGEgQ29tbWVudCBhdHRhY2hlZCB0byB0aGUgWFhYIG9uIHdoaWNoICZsdDsmbHQ7RGF0YVNjaGVtYT4+IGlzIGFwcGxpZWQuPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX0pyZ3pVSHV2RWVtU204eV9rdEVCSFEiPgotICAgICAgICAgIDxib2R5PiZxdW90O3R5cGUmcXVvdDsgaXMgaW5mZXJyZWQgZnJvbSB0aGUgVHlwZWRFbGVtZW50Ojp0eXBlIG9uIHdoaWNoICZsdDsmbHQ7RGF0YVNjaGVtYT4+IGlzIGFwcGxpZWQuJiN4RDsKLU9uZSBvZiBib29sZWFuLCBpbnRlZ2VyLCBzdHJpbmcsIG9iamVjdCwgYXJyYXksIG51bGwuPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2NmMU44SHV2RWVtU204eV9rdEVCSFEiPgotICAgICAgICAgIDxib2R5PiZxdW90O2NvbnN0JnF1b3Q7IGlzIHRoZSBUeXBlZEVsZW1lbnQ6OmRlZmF1bHRWYWx1ZSBvZiB0aGUgVHlwZWRFbGVtZW50IHN0ZXJlb3R5cGVkICZsdDsmbHQ7RGF0YVNjaGVtYT4+LiYjeEQ7Ci1BbiBPQ0wgcnVsZSBzaG91bGQgbWVudGlvbiB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIG11c3QgYmUgYSBWYWx1ZVNwZWNpZmljYXRpb24gc3RlcmVvdHlwZWQgJmx0OyZsdDtEZXRhaWxlZFZhbHVlU3BlY2lmaWNhdGlvbj4+LCBpZiBpdCBpcyBzcGVjaWZpZWQgZm9yIGEgVHlwZWRFbGVtZW50IHN0ZXJlb3R5cGVkICZsdDsmbHQ7RGF0YVNjaGVtYT4+LjwvYm9keT4KLSAgICAgICAgPC9vd25lZENvbW1lbnQ+Ci0gICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9tT2gwOEh1OEVlbVNtOHlfa3RFQkhRIj4KLSAgICAgICAgICA8Ym9keT4mcXVvdDttaW5JdGVtcyZxdW90OyBhbmQgJnF1b3Q7bWF4SXRlbXMmcXVvdDsgZm9yIGFuIEFycmF5U2NoZW1hIGFyZSBpbmZlcnJlZCBmcm9tIHRoZSBtdWx0aXBsaWNpdHkuPC9ib2R5PgotICAgICAgICA8L293bmVkQ29tbWVudD4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX0t5NzNvRDM5RWVxYXp0eUZxU0dRYkEiPgotICAgICAgICAgIDxib2R5PiZxdW90O3JlYWRPbmx5JnF1b3Q7IGlzIFVNTDo6UHJvcGVydHk6OnJlYWRPbmx5LjwvYm9keT4KLSAgICAgICAgPC9vd25lZENvbW1lbnQ+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9sMS16UUhKckVlcXZhS0NSeXNhNTZBIiBuYW1lPSJ0aXRsZSIgdmlzaWJpbGl0eT0icHVibGljIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9sMS16UVhKckVlcXZhS0NSeXNhNTZBIj4KKyAgICAgICAgICAgIDxib2R5PiZxdW90O3RpdGxlJnF1b3Q7IGlzIFVNTDo6TmFtZWRFbGVtZW50OjpuYW1lPC9ib2R5PgorICAgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjU3RyaW5nIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9sMklrUUhKckVlcXZhS0NSeXNhNTZBIiBuYW1lPSJkZXNjcmlwdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9sMklrUVhKckVlcXZhS0NSeXNhNTZBIj4KKyAgICAgICAgICAgIDxib2R5PiZxdW90O2Rlc2NyaXB0aW9uJnF1b3Q7IGlzIGEgQ29tbWVudCBhdHRhY2hlZCB0byB0aGUgVHlwZWRFbGVtZW50IG9uIHdoaWNoICZsdDsmbHQ7RGF0YVNjaGVtYT4+IGlzIGFwcGxpZWQuPC9ib2R5PgorICAgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjU3RyaW5nIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CiAgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9IS1NoMG51eEVlbVNtOHlfa3RFQkhRIiBuYW1lPSJiYXNlX1R5cGVkRWxlbWVudCIgYXNzb2NpYXRpb249Il9IS1NoMEh1eEVlbVNtOHlfa3RFQkhRIj4KICAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjVHlwZWRFbGVtZW50Ii8+CiAgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfSEtTaDAzdXhFZW1TbTh5X2t0RUJIUSIvPgogICAgICAgICA8L293bmVkQXR0cmlidXRlPgotICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfNXBUaFFFWjNFZW1qczRLTUMyQ2hQZyIgbmFtZT0iZW51bSIgdHlwZT0iX3JtNjRRQ3R4RWVlWkk2ck1UWVY2MHciPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfNXBUaFFFWjNFZW1qczRLTUMyQ2hQZyIgbmFtZT0iZW51bSI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNTdHJpbmciLz4KICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9teUFCVUh1dkVlbVNtOHlfa3RFQkhRIi8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfbXlKeVVIdXZFZW1TbTh5X2t0RUJIUSIgdmFsdWU9IioiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KLSAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX2VzTlRBSHU4RWVtU204eV9rdEVCSFEiIG5hbWU9Im51bWJlckludGVydmFsIiB2aXNpYmlsaXR5PSJwdWJsaWMiPgotICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il85STM3WUQzOEVlcWF6dHlGcVNHUWJBIj4KLSAgICAgICAgICAgIDxib2R5PiZxdW90O21pbmltdW0mcXVvdDsgYW5kICZxdW90O21heGltdW0mcXVvdDsgb2YgTnVtYmVyU2NoZW1hIGFuZCBJbnRlZ2VyU2NoZW1hPC9ib2R5PgotICAgICAgICAgIDwvb3duZWRDb21tZW50PgotICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNJbnRlcnZhbCIvPgotICAgICAgICA8L293bmVkQXR0cmlidXRlPgogICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfTm5mWVVIdTlFZW1TbTh5X2t0RUJIUSIgbmFtZT0icmVxdWlyZWQiIHZpc2liaWxpdHk9InB1YmxpYyI+CiAgICAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX0NWLVNZRDM5RWVxYXp0eUZxU0dRYkEiPgogICAgICAgICAgICAgPGJvZHk+JnF1b3Q7cmVxdWlyZWQmcXVvdDsgb2YgT2JqZWN0U2NoZW1hPC9ib2R5PgpAQCAtMTA4MCw3ICsxMDk3LDcgQEAKICAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il91NldBSUQzOEVlcWF6dHlGcVNHUWJBIi8+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfdTZhNG9EMzhFZXFhenR5RnFTR1FiQSIgdmFsdWU9IioiLz4KICAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KLSAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX0Zfc25rajM4RWVxYXp0eUZxU0dRYkEiIG5hbWU9InR5cGUiIHR5cGU9Il9uVG1zZ0R0d0VlcVJkWUw0bDRqODN3IiBhc3NvY2lhdGlvbj0iX0Zfc0FnRDM4RWVxYXp0eUZxU0dRYkEiPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfRl9zbmtqMzhFZXFhenR5RnFTR1FiQSIgbmFtZT0iYVR5cGUiIHR5cGU9Il9uVG1zZ0R0d0VlcVJkWUw0bDRqODN3IiBhc3NvY2lhdGlvbj0iX0Zfc0FnRDM4RWVxYXp0eUZxU0dRYkEiPgogICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX0hxcTdvRDM4RWVxYXp0eUZxU0dRYkEiLz4KICAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9IcXQtOEQzOEVlcWF6dHlGcVNHUWJBIiB2YWx1ZT0iKiIvPgogICAgICAgICA8L293bmVkQXR0cmlidXRlPgpAQCAtMTA5NiwxMiArMTExMyw0MCBAQAogICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iXzhHY1lrRDM5RWVxYXp0eUZxU0dRYkEiLz4KICAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il84R2lmTUQzOUVlcWF6dHlGcVNHUWJBIiB2YWx1ZT0iKiIvPgogICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfdzhBRmNISnJFZXF2YUtDUnlzYTU2QSIgbmFtZT0idHlwZSIgdmlzaWJpbGl0eT0icHVibGljIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9Kcmd6VUh1dkVlbVNtOHlfa3RFQkhRIj4KKyAgICAgICAgICAgIDxib2R5PiZxdW90O3R5cGUmcXVvdDsgaXMgaW5mZXJyZWQgZnJvbSB0aGUgVHlwZWRFbGVtZW50Ojp0eXBlIG9uIHdoaWNoICZsdDsmbHQ7RGF0YVNjaGVtYT4+IGlzIGFwcGxpZWQuJiN4RDsKK09uZSBvZiBib29sZWFuLCBpbnRlZ2VyLCBzdHJpbmcsIG9iamVjdCwgYXJyYXksIG51bGwuPC9ib2R5PgorICAgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjU3RyaW5nIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9SOS00b0hKc0VlcXZhS0NSeXNhNTZBIiBuYW1lPSJjb25zdCIgdmlzaWJpbGl0eT0icHVibGljIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9jZjFOOEh1dkVlbVNtOHlfa3RFQkhRIj4KKyAgICAgICAgICAgIDxib2R5PiZxdW90O2NvbnN0JnF1b3Q7IGlzIHRoZSBUeXBlZEVsZW1lbnQ6OmRlZmF1bHRWYWx1ZSBvZiB0aGUgVHlwZWRFbGVtZW50IHN0ZXJlb3R5cGVkICZsdDsmbHQ7RGF0YVNjaGVtYT4+LiYjeEQ7CitBbiBPQ0wgcnVsZSBzaG91bGQgbWVudGlvbiB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIG11c3QgYmUgYSBWYWx1ZVNwZWNpZmljYXRpb24gc3RlcmVvdHlwZWQgJmx0OyZsdDtEZXRhaWxlZFZhbHVlU3BlY2lmaWNhdGlvbj4+LCBpZiBpdCBpcyBzcGVjaWZpZWQgZm9yIGEgVHlwZWRFbGVtZW50IHN0ZXJlb3R5cGVkICZsdDsmbHQ7RGF0YVNjaGVtYT4+LjwvYm9keT4KKyAgICAgICAgICA8L293bmVkQ29tbWVudD4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI1N0cmluZyIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfWGJvTkVISnNFZXF2YUtDUnlzYTU2QSIgbmFtZT0ibWluSXRlbXMiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNEZXJpdmVkPSJ0cnVlIj4KKyAgICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfY2ppaUVISnNFZXF2YUtDUnlzYTU2QSI+CisgICAgICAgICAgICA8Ym9keT4mcXVvdDttaW5JdGVtcyZxdW90OyBhbmQgJnF1b3Q7bWF4SXRlbXMmcXVvdDsgZm9yIGFuIEFycmF5U2NoZW1hIGFyZSBpbmZlcnJlZCBmcm9tIHRoZSBtdWx0aXBsaWNpdHkuPC9ib2R5PgorICAgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjSW50ZWdlciIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfYVNTUklISnNFZXF2YUtDUnlzYTU2QSIgbmFtZT0ibWF4SXRlbXMiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNEZXJpdmVkPSJ0cnVlIj4KKyAgICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfY3FpaDhISnNFZXF2YUtDUnlzYTU2QSI+CisgICAgICAgICAgICA8Ym9keT4mcXVvdDttaW5JdGVtcyZxdW90OyBhbmQgJnF1b3Q7bWF4SXRlbXMmcXVvdDsgZm9yIGFuIEFycmF5U2NoZW1hIGFyZSBpbmZlcnJlZCBmcm9tIHRoZSBtdWx0aXBsaWNpdHkuPC9ib2R5PgorICAgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjSW50ZWdlciIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfZUVPUnNISnNFZXF2YUtDUnlzYTU2QSIgbmFtZT0icmVhZE9ubHkiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNEZXJpdmVkPSJ0cnVlIj4KKyAgICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfaEs4TEFISnNFZXF2YUtDUnlzYTU2QSI+CisgICAgICAgICAgICA8Ym9keT4mcXVvdDtyZWFkT25seSZxdW90OyBpcyBVTUw6OlByb3BlcnR5OjpyZWFkT25seS48L2JvZHk+CisgICAgICAgICAgPC9vd25lZENvbW1lbnQ+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNCb29sZWFuIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CiAgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KICAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il9QZDdXRUVaMkVlbWpzNEtNQzJDaFBnIiBuYW1lPSJGb3JtIj4KLSAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2tYSlNvRDYyRWVxYldmT0R2VEtIVHciPgotICAgICAgICAgIDxib2R5PiZxdW90O3NlY3VyaXR5JnF1b3Q7IGlzIGRlcml2ZWQgZnJvbSAmcXVvdDtzZWN1cml0eURlZmluaXRpb24mcXVvdDsgb2YgVGhpbmcgdGhhdCBvd25zIHRoaXMgRm9ybS48L2JvZHk+Ci0gICAgICAgIDwvb3duZWRDb21tZW50PgotICAgICAgICA8Z2VuZXJhbGl6YXRpb24geG1pOnR5cGU9InVtbDpHZW5lcmFsaXphdGlvbiIgeG1pOmlkPSJfdTEzczhIdTJFZW1TbTh5X2t0RUJIUSIgZ2VuZXJhbD0iX3JtNjRRQ3R4RWVlWkk2ck1UWVY2MHciLz4KICAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX29qTHQwVVozRWVtanM0S01DMkNoUGciIG5hbWU9Im9wIiB0eXBlPSJfdXpSM2dIdXNFZW1TbTh5X2t0RUJIUSI+CiAgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfX3Y2NEVGYTdFZW1CWXM1LWZESTh1dyIgdmFsdWU9IioiLz4KICAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6SW5zdGFuY2VWYWx1ZSIgeG1pOmlkPSJfbE12Q1lENnNFZXFBZktkbGR6WWMtdyIgdHlwZT0iX3V6UjNnSHVzRWVtU204eV9rdEVCSFEiIGluc3RhbmNlPSJfekhaX0lIdXNFZW1TbTh5X2t0RUJIUSIvPgpAQCAtMTEyOCwxMCArMTE3Myw3IEBACiAgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfQVpmWmdGYThFZW1CWXM1LWZESTh1dyIvPgogICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX0Facm13RmE4RWVtQllzNS1mREk4dXciIHZhbHVlPSIxIi8+CiAgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+Ci0gICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il9zaXlXOEVaM0VlbWpzNEtNQzJDaFBnIiBuYW1lPSJzY29wZXMiIGlzRGVyaXZlZD0idHJ1ZSI+Ci0gICAgICAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2c3X3BJRDZ3RWVxQWZLZGxkelljLXciPgotICAgICAgICAgICAgPGJvZHk+RGVyaXZlZCBmcm9tIHNjb3BlcyBvZiBPQXV0aDJTZWN1cml0eVNjaGVtZSByZWZlcmVuY2VkIGluIEZvcm06OnNlY3VyaXR5PC9ib2R5PgotICAgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOnR5cGU9InVtbDpQcm9wZXJ0eSIgeG1pOmlkPSJfc2l5VzhFWjNFZW1qczRLTUMyQ2hQZyIgbmFtZT0ic2NvcGVzIj4KICAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI1N0cmluZyIvPgogICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX292VEJ3RVo0RWVtanM0S01DMkNoUGciLz4KICAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9vdjVlc0VaNEVlbWpzNEtNQzJDaFBnIiB2YWx1ZT0iKiIvPgpAQCAtMTE0NiwxMCArMTE4OCwyMCBAQAogICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX0lJMnFNejZ4RWVxQWZLZGxkelljLXciIHZhbHVlPSIxIi8+CiAgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iX0lJMnFORDZ4RWVxQWZLZGxkelljLXciIHZhbHVlPSJhcHBsaWNhdGlvbi9qc29uIi8+CiAgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6dHlwZT0idW1sOlByb3BlcnR5IiB4bWk6aWQ9Il83NWVESUhKc0VlcXZhS0NSeXNhNTZBIiBuYW1lPSJzZWN1cml0eSIgdHlwZT0iX0dkRzEwRVoyRWVtanM0S01DMkNoUGciPgorICAgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9rWEpTb0Q2MkVlcWJXZk9EdlRLSFR3Ij4KKyAgICAgICAgICAgIDxib2R5PiZxdW90O3NlY3VyaXR5JnF1b3Q7IGlzIG9uZSBlbnRyeSBpbiB0aGUgJnF1b3Q7c2VjdXJpdHlEZWZpbml0aW9ucyZxdW90OyBvZiB0aGUgVGhpbmcgdGhhdCBvd25zIHRoaXMgRm9ybS48L2JvZHk+CisgICAgICAgICAgPC9vd25lZENvbW1lbnQ+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfNzVlRElYSnNFZXF2YUtDUnlzYTU2QSIgdmFsdWU9IioiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX1JFeUswbk9nRWVxUWtmcW5aaGJGcVEiIG5hbWU9ImJhc2VfQ29tbWVudCIgYXNzb2NpYXRpb249Il9SRXlLMEhPZ0VlcVFrZnFuWmhiRnFRIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQ29tbWVudCIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX1JFeUswM09nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KICAgICAgIDwvcGFja2FnZWRFbGVtZW50PgogICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iX1FXd2JnRVoyRWVtanM0S01DMkNoUGciIG5hbWU9IkxpbmsiPgogICAgICAgICA8b3duZWRDb21tZW50IHhtaTp0eXBlPSJ1bWw6Q29tbWVudCIgeG1pOmlkPSJfNEgtNDRIdXpFZW1TbTh5X2t0RUJIUSI+Ci0gICAgICAgICAgPGJvZHk+QSBUaGluZywgU2VjdXJpdHlTY2hlbWEsIG9yIEZvcm0gc2hvdWxkIGhhdmUgYW4gQXNzb2NpYXRpb24gc3RlcmVvdHlwZWQgJmx0OyZsdDtMaW5rPj4uJiN4RDsKKyAgICAgICAgICA8Ym9keT5BIFRoaW5nIG1heSBoYXZlIGFuIEFzc29jaWF0aW9uIHN0ZXJlb3R5cGVkICZsdDsmbHQ7TGluaz4+LiYjeEQ7CiBUaGUgQXNzb2NpYXRpb24gcG9pbnRzIHRvd2FyZHMgYSBDbGFzc2lmaWVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHJlbW90ZSBvYmplY3Qgb3IgYW4gYWJzdHJhY3QgZW50aXR5IGxpa2UgSW50ZXJuZXQuPC9ib2R5PgogICAgICAgICA8L293bmVkQ29tbWVudD4KICAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX0h1VW5JajZ0RWVxQWZLZGxkelljLXciIG5hbWU9ImJhc2VfQXNzb2NpYXRpb24iIGFzc29jaWF0aW9uPSJfSHVVbklENnRFZXFBZktkbGR6WWMtdyI+CkBAIC0xMjM4LDkgKzEyOTAsNiBAQAogICAgICAgICA8L2VBbm5vdGF0aW9ucz4KICAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iX2JqU3VNWHVrRWVtU204eV9rdEVCSFEiIG5hbWU9InNlY3VyaXR5c2NoZW1lIiB0eXBlPSJfR2RHMTBFWjJFZW1qczRLTUMyQ2hQZyIgYXNzb2NpYXRpb249Il9iakprUUh1a0VlbVNtOHlfa3RFQkhRIi8+CiAgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KLSAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX1F0RFBVSHVpRWVtU204eV9rdEVCSFEiIG5hbWU9IkVfQWN0aW9uQWZmb3JkYW5jZV9CZWhhdmlvcmFsRmVhdHVyZTEiIG1lbWJlckVuZD0iX1F0RFBVWHVpRWVtU204eV9rdEVCSFEgX1F0RFBVbnVpRWVtU204eV9rdEVCSFEiPgotICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX1F0RFBVWHVpRWVtU204eV9rdEVCSFEiIG5hbWU9ImV4dGVuc2lvbl9BY3Rpb25BZmZvcmRhbmNlIiB0eXBlPSJfTExSMUlFWjJFZW1qczRLTUMyQ2hQZyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9RdERQVUh1aUVlbVNtOHlfa3RFQkhRIi8+Ci0gICAgICA8L3BhY2thZ2VkRWxlbWVudD4KICAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFbnVtZXJhdGlvbiIgeG1pOmlkPSJfUDV5N2dIdWtFZW1TbTh5X2t0RUJIUSIgbmFtZT0iU2VjdXJpdHlTY2hlbWVLaW5kIj4KICAgICAgICAgPG93bmVkTGl0ZXJhbCB4bWk6dHlwZT0idW1sOkVudW1lcmF0aW9uTGl0ZXJhbCIgeG1pOmlkPSJfRDZzVklIdTRFZW1TbTh5X2t0RUJIUSIgbmFtZT0ibm9zZWMiLz4KICAgICAgICAgPG93bmVkTGl0ZXJhbCB4bWk6dHlwZT0idW1sOkVudW1lcmF0aW9uTGl0ZXJhbCIgeG1pOmlkPSJfRDZzVklYdTRFZW1TbTh5X2t0RUJIUSIgbmFtZT0iYmFzaWMiLz4KQEAgLTEyNzgsOSArMTMyNyw2IEBACiAgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiB4bWk6aWQ9Il9aSDdoTUh1ekVlbVNtOHlfa3RFQkhRIiBuYW1lPSJFX1NlY3VyaXR5U2NoZW1lX0NsYXNzaWZpZXIzMiIgbWVtYmVyRW5kPSJfWkg3aE1YdXpFZW1TbTh5X2t0RUJIUSBfWkg3aE1udXpFZW1TbTh5X2t0RUJIUSI+CiAgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfWkg3aE1YdXpFZW1TbTh5X2t0RUJIUSIgbmFtZT0iZXh0ZW5zaW9uX1NlY3VyaXR5U2NoZW1lIiB0eXBlPSJfR2RHMTBFWjJFZW1qczRLTUMyQ2hQZyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9aSDdoTUh1ekVlbVNtOHlfa3RFQkhRIi8+CiAgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KLSAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX3JTb3ZZSHU1RWVtU204eV9rdEVCSFEiIG5hbWU9IkVfRXZlbnRBZmZvcmRhbmNlX1NpZ25hbDEiIG1lbWJlckVuZD0iX3JTb3ZZWHU1RWVtU204eV9rdEVCSFEgX3JTb3ZZbnU1RWVtU204eV9rdEVCSFEiPgotICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX3JTb3ZZWHU1RWVtU204eV9rdEVCSFEiIG5hbWU9ImV4dGVuc2lvbl9FdmVudEFmZm9yZGFuY2UiIHR5cGU9Il9MeFhrd0VaMkVlbWpzNEtNQzJDaFBnIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX3JTb3ZZSHU1RWVtU204eV9rdEVCSFEiLz4KLSAgICAgIDwvcGFja2FnZWRFbGVtZW50PgogICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkFzc29jaWF0aW9uIiB4bWk6aWQ9Il91cHppc0h1OUVlbVNtOHlfa3RFQkhRIiBtZW1iZXJFbmQ9Il91cHppczN1OUVlbVNtOHlfa3RFQkhRIF91cHppdEh1OUVlbVNtOHlfa3RFQkhRIj4KICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6dHlwZT0iZWNvcmU6RUFubm90YXRpb24iIHhtaTppZD0iX3VwemlzWHU5RWVtU204eV9rdEVCSFEiIHNvdXJjZT0ib3JnLmVjbGlwc2UucGFweXJ1cyI+CiAgICAgICAgICAgPGRldGFpbHMgeG1pOnR5cGU9ImVjb3JlOkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiB4bWk6aWQ9Il91cHppc251OUVlbVNtOHlfa3RFQkhRIiBrZXk9Im5hdHVyZSIgdmFsdWU9IlVNTF9OYXR1cmUiLz4KQEAgLTE0MDEsNiArMTQ0NywyNCBAQAogICAgICAgICA8L2VBbm5vdGF0aW9ucz4KICAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iXzNZb2dNRDZ1RWVxQWZLZGxkelljLXciIG5hbWU9ImV2ZW50YWZmb3JkYW5jZSIgdHlwZT0iX0x4WGt3RVoyRWVtanM0S01DMkNoUGciIGFzc29jaWF0aW9uPSJfM1lmV1FENnVFZXFBZktkbGR6WWMtdyIvPgogICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6QXNzb2NpYXRpb24iIHhtaTppZD0iXy1sRjFnSEprRWVxdmFLQ1J5c2E1NkEiIG1lbWJlckVuZD0iXy1sRjFnM0prRWVxdmFLQ1J5c2E1NkEgXy1sRjFoSEprRWVxdmFLQ1J5c2E1NkEiPgorICAgICAgICA8ZUFubm90YXRpb25zIHhtaTp0eXBlPSJlY29yZTpFQW5ub3RhdGlvbiIgeG1pOmlkPSJfLWxGMWdYSmtFZXF2YUtDUnlzYTU2QSIgc291cmNlPSJvcmcuZWNsaXBzZS5wYXB5cnVzIj4KKyAgICAgICAgICA8ZGV0YWlscyB4bWk6dHlwZT0iZWNvcmU6RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIHhtaTppZD0iXy1sRjFnbkprRWVxdmFLQ1J5c2E1NkEiIGtleT0ibmF0dXJlIiB2YWx1ZT0iVU1MX05hdHVyZSIvPgorICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6UHJvcGVydHkiIHhtaTppZD0iXy1sRjFoSEprRWVxdmFLQ1J5c2E1NkEiIG5hbWU9InRoaW5nIiB0eXBlPSJfbnBjN1lFWjFFZW1qczRLTUMyQ2hQZyIgYXNzb2NpYXRpb249Il8tbEYxZ0hKa0VlcXZhS0NSeXNhNTZBIi8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iXzByV1F3SEtHRWVxdmFLQ1J5c2E1NkEiIG5hbWU9IkVfQWN0aW9uQWZmb3JkYW5jZV9PcGVyYXRpb240NyIgbWVtYmVyRW5kPSJfMHJXUXdYS0dFZXF2YUtDUnlzYTU2QSBfMHJXUXduS0dFZXF2YUtDUnlzYTU2QSI+CisgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfMHJXUXdYS0dFZXF2YUtDUnlzYTU2QSIgbmFtZT0iZXh0ZW5zaW9uX0FjdGlvbkFmZm9yZGFuY2UiIHR5cGU9Il9MTFIxSUVaMkVlbWpzNEtNQzJDaFBnIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iXzByV1F3SEtHRWVxdmFLQ1J5c2E1NkEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfX2poVU1IS0dFZXF2YUtDUnlzYTU2QSIgbmFtZT0iRV9FdmVudEFmZm9yZGFuY2VfUmVjZXB0aW9uNDciIG1lbWJlckVuZD0iX19qaFVNWEtHRWVxdmFLQ1J5c2E1NkEgX19qaFVNbktHRWVxdmFLQ1J5c2E1NkEiPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX19qaFVNWEtHRWVxdmFLQ1J5c2E1NkEiIG5hbWU9ImV4dGVuc2lvbl9FdmVudEFmZm9yZGFuY2UiIHR5cGU9Il9MeFhrd0VaMkVlbWpzNEtNQzJDaFBnIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX19qaFVNSEtHRWVxdmFLQ1J5c2E1NkEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfUkV5SzBIT2dFZXFRa2ZxblpoYkZxUSIgbmFtZT0iRV9Gb3JtX0NvbW1lbnQ0OSIgbWVtYmVyRW5kPSJfUkV5SzBYT2dFZXFRa2ZxblpoYkZxUSBfUkV5SzBuT2dFZXFRa2ZxblpoYkZxUSI+CisgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfUkV5SzBYT2dFZXFRa2ZxblpoYkZxUSIgbmFtZT0iZXh0ZW5zaW9uX0Zvcm0iIHR5cGU9Il9QZDdXRUVaMkVlbWpzNEtNQzJDaFBnIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX1JFeUswSE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfd3dyVTBIT2dFZXFRa2ZxblpoYkZxUSIgbmFtZT0iRV9UaGluZ19DbGFzczQ5IiBtZW1iZXJFbmQ9Il93d3JVMFhPZ0VlcVFrZnFuWmhiRnFRIF93d3JVMG5PZ0VlcVFrZnFuWmhiRnFRIj4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il93d3JVMFhPZ0VlcVFrZnFuWmhiRnFRIiBuYW1lPSJleHRlbnNpb25fVGhpbmciIHR5cGU9Il9ucGM3WUVaMUVlbWpzNEtNQzJDaFBnIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX3d3clUwSE9nRWVxUWtmcW5aaGJGcVEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgogICAgIDwvcGFja2FnZWRFbGVtZW50PgogICAgIDxwcm9maWxlQXBwbGljYXRpb24geG1pOnR5cGU9InVtbDpQcm9maWxlQXBwbGljYXRpb24iIHhtaTppZD0iX3BWZzNRQXBWRWVpNTNfRVpyampHZUEiPgogICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6dHlwZT0iZWNvcmU6RUFubm90YXRpb24iIHhtaTppZD0iX3BWajZrQXBWRWVpNTNfRVpyampHZUEiIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzIuMC4wL1VNTCI+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvbW9kZWwvaW90bWwuZWNvcmUgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvbW9kZWwvaW90bWwuZWNvcmUKaW5kZXggZjI1MmMwYS4uMjlmZTk5NSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL21vZGVsL2lvdG1sLmVjb3JlCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9tb2RlbC9pb3RtbC5lY29yZQpAQCAtNTY5LDM0ICs1NjksNTMgQEAKICAgICA8ZUFubm90YXRpb25zIHNvdXJjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzIuMC4wL1VNTCI+CiAgICAgICA8ZGV0YWlscyBrZXk9Im9yaWdpbmFsTmFtZSIgdmFsdWU9IldvVCIvPgogICAgIDwvZUFubm90YXRpb25zPgotICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGhpbmciIGVTdXBlclR5cGVzPSIjLy9zb2Z0d2FyZS9hcnRlZmFjdC9WaXJ0dWFsRW50aXR5Ij4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRoaW5nIj4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0aXRsZSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9TdHJpbmciCisgICAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRlc2NyaXB0aW9uIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL1N0cmluZyIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYmFzZSIgb3JkZXJlZD0iZmFsc2UiCiAgICAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9TdHJpbmciLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpZCIgb3JkZXJlZD0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIi8+CiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3VwcG9ydCIgb3JkZXJlZD0iZmFsc2UiCiAgICAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9TdHJpbmciLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJzZWN1cml0eSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgbG93ZXJCb3VuZD0iMSIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy93b3QvU2VjdXJpdHlTY2hlbWUiLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJzZWN1cml0eURlZmluaXRpb25zIgogICAgICAgICAgIG9yZGVyZWQ9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9TZWN1cml0eVNjaGVtZSIvPgogICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImxpbmtzIiBvcmRlcmVkPSJmYWxzZSIKICAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9MaW5rIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZXZlbnRzIiBvcmRlcmVkPSJmYWxzZSIKLSAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9FdmVudEFmZm9yZGFuY2UiLz4KKyAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9FdmVudEFmZm9yZGFuY2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiCisgICAgICAgICAgZGVyaXZlZD0idHJ1ZSIvPgogICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImFjdGlvbnMiIG9yZGVyZWQ9ImZhbHNlIgotICAgICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vd290L0FjdGlvbkFmZm9yZGFuY2UiLz4KKyAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9BY3Rpb25BZmZvcmRhbmNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIgorICAgICAgICAgIGRlcml2ZWQ9InRydWUiLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwcm9wZXJ0aWVzIiBvcmRlcmVkPSJmYWxzZSIKLSAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9Qcm9wZXJ0eUFmZm9yZGFuY2UiLz4KKyAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9Qcm9wZXJ0eUFmZm9yZGFuY2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiCisgICAgICAgICAgZGVyaXZlZD0idHJ1ZSIvPgogICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlcnNpb24iIG9yZGVyZWQ9ImZhbHNlIgogICAgICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIi8+Ci0gICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idHlwZSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYVR5cGUiIG9yZGVyZWQ9ImZhbHNlIgogICAgICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vd290L1R5cGUiLz4KLSAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjb250ZXh0IiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJhQ29udGV4dCIgb3JkZXJlZD0iZmFsc2UiCiAgICAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy93b3QvQ29udGV4dCIvPgogICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImZvcm1zIiBvcmRlcmVkPSJmYWxzZSIKICAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9Gb3JtIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9DbGFzcyIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL0NsYXNzIi8+CiAgICAgPC9lQ2xhc3NpZmllcnM+CiAgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTZWN1cml0eVNjaGVtZSI+CiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9DbGFzc2lmaWVyIiBvcmRlcmVkPSJmYWxzZSIKICAgICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vQ2xhc3NpZmllciIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpdGxlIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL1N0cmluZyIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVzY3JpcHRpb24iIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIgorICAgICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzY2hlbWUiIG9yZGVyZWQ9ImZhbHNlIgogICAgICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSIjLy93b3QvU2VjdXJpdHlTY2hlbWVLaW5kIi8+CiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icHJveHkiIG9yZGVyZWQ9ImZhbHNlIgpAQCAtNjgxLDggKzcwMCw4IEBACiAgICAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9TdHJpbmciLz4KICAgICA8L2VDbGFzc2lmaWVycz4KICAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkV2ZW50QWZmb3JkYW5jZSIgZVN1cGVyVHlwZXM9IiMvL3dvdC9JbnRlcmFjdGlvbkFmZm9yZGFuY2UiPgotICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfU2lnbmFsIiBvcmRlcmVkPSJmYWxzZSIKLSAgICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vU2lnbmFsIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9SZWNlcHRpb24iIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9SZWNlcHRpb24iLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkYXRhIiBvcmRlcmVkPSJmYWxzZSIKICAgICAgICAgICBlVHlwZT0iIy8vd290L0RhdGFTY2hlbWEiLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJzdWJzY3JpcHRpb24iIG9yZGVyZWQ9ImZhbHNlIgpAQCAtNjkxLDEyICs3MTAsMTggQEAKICAgICAgICAgICBlVHlwZT0iIy8vd290L0RhdGFTY2hlbWEiLz4KICAgICA8L2VDbGFzc2lmaWVycz4KICAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkludGVyYWN0aW9uQWZmb3JkYW5jZSIgYWJzdHJhY3Q9InRydWUiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpdGxlIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL1N0cmluZyIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVzY3JpcHRpb24iIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIgorICAgICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJmb3JtcyIgb3JkZXJlZD0iZmFsc2UiCiAgICAgICAgICAgbG93ZXJCb3VuZD0iMSIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy93b3QvRm9ybSIvPgotICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InR5cGUiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImFUeXBlIiBvcmRlcmVkPSJmYWxzZSIKICAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9UeXBlIi8+CiAgICAgPC9lQ2xhc3NpZmllcnM+Ci0gICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJGb3JtIiBlU3VwZXJUeXBlcz0iIy8vc29mdHdhcmUvY29yZS9zdHJ1Y3R1cmUvTWV0YVZhbHVlU3BlY2lmaWNhdGlvbiI+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJGb3JtIj4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJvcCIgb3JkZXJlZD0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiCiAgICAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy93b3QvT3BLaW5kIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSJyZWFkcHJvcGVydHkiLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJocmVmIiBvcmRlcmVkPSJmYWxzZSIKQEAgLTcwOSwxMSArNzM0LDE0IEBACiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3ViUHJvdG9jb2wiIG9yZGVyZWQ9ImZhbHNlIgogICAgICAgICAgIGVUeXBlPSIjLy93b3QvU3ViUHJvdG9jb2xLaW5kIi8+CiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2NvcGVzIiBvcmRlcmVkPSJmYWxzZSIKLSAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9TdHJpbmciCi0gICAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIvPgorICAgICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL1N0cmluZyIvPgogICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlc3BvbnNlIiBvcmRlcmVkPSJmYWxzZSIKICAgICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL1N0cmluZyIKICAgICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic2VjdXJpdHkiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIGxvd2VyQm91bmQ9IjEiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vd290L1NlY3VyaXR5U2NoZW1lIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9Db21tZW50IiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vQ29tbWVudCIvPgogICAgIDwvZUNsYXNzaWZpZXJzPgogICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVFbnVtIiBuYW1lPSJPcEtpbmQiPgogICAgICAgPGVMaXRlcmFscyBuYW1lPSJyZWFkcHJvcGVydHkiLz4KQEAgLTc0MSwxOSArNzY5LDIzIEBACiAgICAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL1R5cGUiLz4KICAgICA8L2VDbGFzc2lmaWVycz4KICAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRhdGFTY2hlbWEiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpdGxlIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL1N0cmluZyIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVzY3JpcHRpb24iIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIgorICAgICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX1R5cGVkRWxlbWVudCIgb3JkZXJlZD0iZmFsc2UiCiAgICAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL1R5cGVkRWxlbWVudCIvPgotICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVudW0iIG9yZGVyZWQ9ImZhbHNlIgotICAgICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vc29mdHdhcmUvY29yZS9zdHJ1Y3R1cmUvTWV0YVZhbHVlU3BlY2lmaWNhdGlvbiIvPgotICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im51bWJlckludGVydmFsIiBvcmRlcmVkPSJmYWxzZSIKLSAgICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vSW50ZXJ2YWwiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbnVtIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9TdHJpbmciLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJyZXF1aXJlZCIgb3JkZXJlZD0iZmFsc2UiCiAgICAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9Qcm9wZXJ0eSIvPgogICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Iml0ZW1zIiBvcmRlcmVkPSJmYWxzZSIKICAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9EYXRhU2NoZW1hIi8+CiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icHJvcGVydGllcyIgb3JkZXJlZD0iZmFsc2UiCiAgICAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSIjLy93b3QvRGF0YVNjaGVtYSIvPgotICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InR5cGUiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImFUeXBlIiBvcmRlcmVkPSJmYWxzZSIKICAgICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3dvdC9UeXBlIi8+CiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0id3JpdGVPbmx5IiBvcmRlcmVkPSJmYWxzZSIKICAgICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL0Jvb2xlYW4iCkBAIC03NjIsMTQgKzc5NCwyOSBAQAogICAgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIi8+CiAgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ib25lT2YiIG9yZGVyZWQ9ImZhbHNlIgogICAgICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vd290L0RhdGFTY2hlbWEiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0eXBlIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL1N0cmluZyIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY29uc3QiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIgorICAgICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaW5JdGVtcyIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9JbnRlZ2VyIgorICAgICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXhJdGVtcyIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9JbnRlZ2VyIgorICAgICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyZWFkT25seSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9Cb29sZWFuIgorICAgICAgICAgIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KICAgICA8L2VDbGFzc2lmaWVycz4KICAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkFjdGlvbkFmZm9yZGFuY2UiIGVTdXBlclR5cGVzPSIjLy93b3QvSW50ZXJhY3Rpb25BZmZvcmRhbmNlIj4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX09wZXJhdGlvbiIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL09wZXJhdGlvbiIvPgogICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImlucHV0IiBvcmRlcmVkPSJmYWxzZSIKLSAgICAgICAgICBlVHlwZT0iIy8vd290L0RhdGFTY2hlbWEiLz4KKyAgICAgICAgICBlVHlwZT0iIy8vd290L0RhdGFTY2hlbWEiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KICAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJvdXRwdXQiIG9yZGVyZWQ9ImZhbHNlIgotICAgICAgICAgIGVUeXBlPSIjLy93b3QvRGF0YVNjaGVtYSIvPgotICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfQmVoYXZpb3JhbEZlYXR1cmUiCi0gICAgICAgICAgb3JkZXJlZD0iZmFsc2UiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9CZWhhdmlvcmFsRmVhdHVyZSIvPgorICAgICAgICAgIGVUeXBlPSIjLy93b3QvRGF0YVNjaGVtYSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIvPgogICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNhZmUiIG9yZGVyZWQ9ImZhbHNlIgogICAgICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vQm9vbGVhbiIvPgogICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlkZW1wb3RlbnQiIG9yZGVyZWQ9ImZhbHNlIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvQWNjZXNzTWV0aG9kLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9BY2Nlc3NNZXRob2QuamF2YQppbmRleCBmZWNjMjgzLi4wMTkzZTllIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9BY2Nlc3NNZXRob2QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9BY2Nlc3NNZXRob2QuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3Q7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9BY2Nlc3NNZXRob2RUeXBlLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9BY2Nlc3NNZXRob2RUeXBlLmphdmEKaW5kZXggYTdhYjVlNi4uNDkwMDIxMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvQWNjZXNzTWV0aG9kVHlwZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L0FjY2Vzc01ldGhvZFR5cGUuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3Q7CkBAIC04MiwxMCArODMsNiBAQAogCS8qKgogCSAqIFRoZSAnPGVtPjxiPkdFVDwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mICc8ZW0+PGI+R0VUPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdCBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogCSAqIEBzZWUgI0dFVAogCSAqIEBtb2RlbApAQCAtOTcsMTAgKzk0LDYgQEAKIAkvKioKIAkgKiBUaGUgJzxlbT48Yj5TRVQ8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPlNFVDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAc2VlICNTRVQKIAkgKiBAbW9kZWwKQEAgLTExMiwxMCArMTA1LDYgQEAKIAkvKioKIAkgKiBUaGUgJzxlbT48Yj5BQ1Q8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPkFDVDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAc2VlICNBQ1QKIAkgKiBAbW9kZWwKQEAgLTEyNywxMCArMTE2LDYgQEAKIAkvKioKIAkgKiBUaGUgJzxlbT48Yj5TVUJTQ1JJQkU8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPlNVQlNDUklCRTwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAc2VlICNTVUJTQ1JJQkUKIAkgKiBAbW9kZWwKQEAgLTE0MiwxMCArMTI3LDYgQEAKIAkvKioKIAkgKiBUaGUgJzxlbT48Yj5VTlNVQlNDUklCRTwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mICc8ZW0+PGI+VU5TVUJTQ1JJQkU8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLAotCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KLQkgKiA8L3A+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQHNlZSAjVU5TVUJTQ1JJQkUKIAkgKiBAbW9kZWwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L0FjdGlvbi5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvQWN0aW9uLmphdmEKaW5kZXggY2UzYjk1My4uMTYxNWU1OSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvQWN0aW9uLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvQWN0aW9uLmphdmEKQEAgLTksMTAgKzksMTIgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3Q7CiAKKwogLyoqCiAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWN0aW9uPC9iPjwvZW0+Jy4KQEAgLTI0LDUgKzI2LDQgQEAKICAqIEBnZW5lcmF0ZWQKICAqLwogcHVibGljIGludGVyZmFjZSBBY3Rpb24gZXh0ZW5kcyBSZXNvdXJjZSB7Ci0KIH0gLy8gQWN0aW9uCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9BdHRyaWJ1dGUuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L0F0dHJpYnV0ZS5qYXZhCmluZGV4IGM1OWNhZGIuLjM1MjQzMTIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L0F0dHJpYnV0ZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L0F0dHJpYnV0ZS5qYXZhCkBAIC05LDExICs5LDEzIEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworCiBpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvR2F0ZXdheS5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvR2F0ZXdheS5qYXZhCmluZGV4IDBiY2VlNjIuLmI3YzIwOTUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L0dhdGV3YXkuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9HYXRld2F5LmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0OwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvTWV0YWRhdGEuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L01ldGFkYXRhLmphdmEKaW5kZXggN2RkNTlkNi4uMGY2ODI2YSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvTWV0YWRhdGEuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9NZXRhZGF0YS5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1BhcmFtZXRlci5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvUGFyYW1ldGVyLmphdmEKaW5kZXggN2U0MjgzMC4uZWU3OTZmNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvUGFyYW1ldGVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvUGFyYW1ldGVyLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0OwpAQCAtMzEsNyArMzIsNiBAQAogICogQGdlbmVyYXRlZAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFBhcmFtZXRlciBleHRlbmRzIFR5cGVkRWxlbWVudCB7Ci0KIAkvKioKIAkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIFBhcmFtZXRlcjwvYj48L2VtPicgcmVmZXJlbmNlLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CkBAIC01Nyw0ICs1Nyw1IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCXZvaWQgc2V0QmFzZV9QYXJhbWV0ZXIob3JnLmVjbGlwc2UudW1sMi51bWwuUGFyYW1ldGVyIHZhbHVlKTsKKwogfSAvLyBQYXJhbWV0ZXIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1Byb3BlcnR5LmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9Qcm9wZXJ0eS5qYXZhCmluZGV4IGYwM2IxMzguLjQ5NTgzMjkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1Byb3BlcnR5LmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvUHJvcGVydHkuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3Q7CkBAIC0yNSw1ICsyNiw0IEBACiAgKiBAZ2VuZXJhdGVkCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHkgZXh0ZW5kcyBSZXNvdXJjZSB7Ci0KIH0gLy8gUHJvcGVydHkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1Jlc291cmNlLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9SZXNvdXJjZS5qYXZhCmluZGV4IDhhZTI0NDMuLjVmNmE2YzkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1Jlc291cmNlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvUmVzb3VyY2UuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3Q7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TZW5zaW5hY3RGYWN0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TZW5zaW5hY3RGYWN0b3J5LmphdmEKaW5kZXggODgyNjJjYi4uNjJmY2I2YyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvU2Vuc2luYWN0RmFjdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1NlbnNpbmFjdEZhY3RvcnkuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3Q7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TZW5zaW5hY3RQYWNrYWdlLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TZW5zaW5hY3RQYWNrYWdlLmphdmEKaW5kZXggMWJiMTRiZS4uMDlmZTY2YiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvU2Vuc2luYWN0UGFja2FnZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1NlbnNpbmFjdFBhY2thZ2UuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3Q7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TZW5zb3JEYXRhLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TZW5zb3JEYXRhLmphdmEKaW5kZXggNmQ5MDdkNS4uMDliOGY4MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvU2Vuc29yRGF0YS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1NlbnNvckRhdGEuamF2YQpAQCAtOSwxMCArOSwxMiBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdDsKIAorCiAvKioKICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZW5zb3IgRGF0YTwvYj48L2VtPicuCkBAIC0yNCw1ICsyNiw0IEBACiAgKiBAZ2VuZXJhdGVkCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgU2Vuc29yRGF0YSBleHRlbmRzIFJlc291cmNlIHsKLQogfSAvLyBTZW5zb3JEYXRhCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TZXJ2aWNlLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TZXJ2aWNlLmphdmEKaW5kZXggMjQ2ZDA4MC4uNzdiODhiZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvU2VydmljZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1NlcnZpY2UuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3Q7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TZXJ2aWNlUHJvdmlkZXIuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1NlcnZpY2VQcm92aWRlci5qYXZhCmluZGV4IDU5NzI4ZTkuLjRlYTFiZWMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1NlcnZpY2VQcm92aWRlci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1NlcnZpY2VQcm92aWRlci5qYXZhCkBAIC05LDExICs5LDEzIEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworCiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5hcnRlZmFjdC5WaXJ0dWFsRW50aXR5OwogCiAvKioKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1N0YXRlVmFyaWFibGUuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1N0YXRlVmFyaWFibGUuamF2YQppbmRleCBhODU5Mzk2Li5lMzdiM2I3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9TdGF0ZVZhcmlhYmxlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvU3RhdGVWYXJpYWJsZS5qYXZhCkBAIC05LDEwICs5LDEyIEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0OwogCisKIC8qKgogICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KICAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YXRlIFZhcmlhYmxlPC9iPjwvZW0+Jy4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L1N0dWRpby5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvU3R1ZGlvLmphdmEKaW5kZXggYTk5ZDJjOC4uODVhZWQyNSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvU3R1ZGlvLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvU3R1ZGlvLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0OwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvVHlwZWRFbGVtZW50LmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9UeXBlZEVsZW1lbnQuamF2YQppbmRleCBjN2M5NjlhLi5iOGNlNDBlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9UeXBlZEVsZW1lbnQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9UeXBlZEVsZW1lbnQuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3Q7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL0FjY2Vzc01ldGhvZEltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvQWNjZXNzTWV0aG9kSW1wbC5qYXZhCmluZGV4IGZlZGJiMTUuLjZiYjkxNzQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvQWNjZXNzTWV0aG9kSW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvQWNjZXNzTWV0aG9kSW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5pbXBsOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9BY3Rpb25JbXBsLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL0FjdGlvbkltcGwuamF2YQppbmRleCBhMmViNzM2Li45YzBlYzljIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL0FjdGlvbkltcGwuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL0FjdGlvbkltcGwuamF2YQpAQCAtOSwxMSArOSwxMyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5pbXBsOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKKwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LkFjdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5TZW5zaW5hY3RQYWNrYWdlOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL0F0dHJpYnV0ZUltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvQXR0cmlidXRlSW1wbC5qYXZhCmluZGV4IDBjMmRkYmYuLjc2N2VkNDEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvQXR0cmlidXRlSW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvQXR0cmlidXRlSW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5pbXBsOwpAQCAtMTYsMTcgKzE3LDIwIEBACiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKKwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuQXR0cmlidXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0Lk1ldGFkYXRhOwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LlNlbnNpbmFjdFBhY2thZ2U7CisKIGltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKIAogLyoqCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL0dhdGV3YXlJbXBsLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL0dhdGV3YXlJbXBsLmphdmEKaW5kZXggYmMyZjAyOS4uZWMyMWMzNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9HYXRld2F5SW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvR2F0ZXdheUltcGwuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuaW1wbDsKQEAgLTIwLDYgKzIxLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworCiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuR2F0ZXdheTsKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5TZW5zaW5hY3RQYWNrYWdlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LlNlcnZpY2VQcm92aWRlcjsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvTWV0YWRhdGFJbXBsLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL01ldGFkYXRhSW1wbC5qYXZhCmluZGV4IGVkYzcwOWIuLjBmNWY5ZjQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvTWV0YWRhdGFJbXBsLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9NZXRhZGF0YUltcGwuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuaW1wbDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvUGFyYW1ldGVySW1wbC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9QYXJhbWV0ZXJJbXBsLmphdmEKaW5kZXggMTRlNGY0MC4uN2JkYzEzMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9QYXJhbWV0ZXJJbXBsLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9QYXJhbWV0ZXJJbXBsLmphdmEKQEAgLTksMTUgKzksMTggQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuaW1wbDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CisKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5QYXJhbWV0ZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuU2Vuc2luYWN0UGFja2FnZTsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9Qcm9wZXJ0eUltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvUHJvcGVydHlJbXBsLmphdmEKaW5kZXggNWYxOTRlYi4uMTliMWI4OSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9Qcm9wZXJ0eUltcGwuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1Byb3BlcnR5SW1wbC5qYXZhCkBAIC05LDExICs5LDEzIEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LmltcGw7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworCiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuUHJvcGVydHk7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuU2Vuc2luYWN0UGFja2FnZTsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9SZXNvdXJjZUltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggOTVjMGM1Ni4uOTA3N2E3NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9SZXNvdXJjZUltcGwuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1Jlc291cmNlSW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5pbXBsOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TZW5zaW5hY3RGYWN0b3J5SW1wbC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TZW5zaW5hY3RGYWN0b3J5SW1wbC5qYXZhCmluZGV4IDE2MDVhMzIuLjExMzg1M2EgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvU2Vuc2luYWN0RmFjdG9yeUltcGwuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1NlbnNpbmFjdEZhY3RvcnlJbXBsLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LmltcGw7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1NlbnNpbmFjdFBhY2thZ2VJbXBsLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1NlbnNpbmFjdFBhY2thZ2VJbXBsLmphdmEKaW5kZXggOWI3YTg1Mi4uMDYwOGJhOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TZW5zaW5hY3RQYWNrYWdlSW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvU2Vuc2luYWN0UGFja2FnZUltcGwuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuaW1wbDsKQEAgLTExMSw3ICsxMTIsOSBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVBhY2thZ2VJbXBsOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZTsKKwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuV29UUGFja2FnZUltcGw7CisKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuc3lzbWxQYWNrYWdlOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi50eXBlcy5UeXBlc1BhY2thZ2U7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1NlbnNvckRhdGFJbXBsLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1NlbnNvckRhdGFJbXBsLmphdmEKaW5kZXggMGM1MzI3NS4uNDFlMjEzYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TZW5zb3JEYXRhSW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvU2Vuc29yRGF0YUltcGwuamF2YQpAQCAtOSwxMSArOSwxMyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5pbXBsOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKKwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LlNlbnNpbmFjdFBhY2thZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuU2Vuc29yRGF0YTsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TZXJ2aWNlSW1wbC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TZXJ2aWNlSW1wbC5qYXZhCmluZGV4IGU1NTcxZTguLjBmMDkzNjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvU2VydmljZUltcGwuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1NlcnZpY2VJbXBsLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LmltcGw7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1NlcnZpY2VQcm92aWRlckltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvU2VydmljZVByb3ZpZGVySW1wbC5qYXZhCmluZGV4IDYzMjk2OTAuLjk3NWI2YjQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvU2VydmljZVByb3ZpZGVySW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvU2VydmljZVByb3ZpZGVySW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5pbXBsOwpAQCAtMjQsOSArMjUsMTEgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKKwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LlNlbnNpbmFjdFBhY2thZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuU2VydmljZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5TZXJ2aWNlUHJvdmlkZXI7CisKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLmFydGVmYWN0LmltcGwuVmlydHVhbEVudGl0eUltcGw7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TdGF0ZVZhcmlhYmxlSW1wbC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TdGF0ZVZhcmlhYmxlSW1wbC5qYXZhCmluZGV4IDQ5M2RkNWEuLmY3OWExMTUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvU3RhdGVWYXJpYWJsZUltcGwuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1N0YXRlVmFyaWFibGVJbXBsLmphdmEKQEAgLTksMTQgKzksMTggQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuaW1wbDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKKwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworCiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuQWN0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LlNlbnNpbmFjdFBhY2thZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zZW5zaW5hY3QuU3RhdGVWYXJpYWJsZTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvU3R1ZGlvSW1wbC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TdHVkaW9JbXBsLmphdmEKaW5kZXggY2M5MjJjZC4uODg1MjUyOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TdHVkaW9JbXBsLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvaW1wbC9TdHVkaW9JbXBsLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LmltcGw7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC9pbXBsL1R5cGVkRWxlbWVudEltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvVHlwZWRFbGVtZW50SW1wbC5qYXZhCmluZGV4IDdjMWYxMWIuLjU5YTBjODkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvVHlwZWRFbGVtZW50SW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L2ltcGwvVHlwZWRFbGVtZW50SW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC5pbXBsOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvdXRpbC9TZW5zaW5hY3RBZGFwdGVyRmFjdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvdXRpbC9TZW5zaW5hY3RBZGFwdGVyRmFjdG9yeS5qYXZhCmluZGV4IDdkMmQ5ZTMuLmJhNmExNGQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L3V0aWwvU2Vuc2luYWN0QWRhcHRlckZhY3RvcnkuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC91dGlsL1NlbnNpbmFjdEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc2Vuc2luYWN0LnV0aWw7CkBAIC0zOSw2ICs0MCw3IEBACiAKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLmFydGVmYWN0LkRpZ2l0YWxBcnRlZmFjdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLmFydGVmYWN0LlZpcnR1YWxFbnRpdHk7CisKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLnJlc291cmNlLk9uRGV2aWNlUmVzb3VyY2U7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvdXRpbC9TZW5zaW5hY3RTd2l0Y2guamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvc2Vuc2luYWN0L3V0aWwvU2Vuc2luYWN0U3dpdGNoLmphdmEKaW5kZXggMjJiYTBiYi4uNDA3OWM3OSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC9zZW5zaW5hY3QvdXRpbC9TZW5zaW5hY3RTd2l0Y2guamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3NlbnNpbmFjdC91dGlsL1NlbnNpbmFjdFN3aXRjaC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNlbnNpbmFjdC51dGlsOwpAQCAtMzcsNiArMzgsNyBAQAogCiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5hcnRlZmFjdC5EaWdpdGFsQXJ0ZWZhY3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5hcnRlZmFjdC5WaXJ0dWFsRW50aXR5OworCiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5yZXNvdXJjZS5PbkRldmljZVJlc291cmNlOwogCiAvKioKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0FjdGlvbkFmZm9yZGFuY2UuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0FjdGlvbkFmZm9yZGFuY2UuamF2YQppbmRleCAzZjI3NWRiLi42YTgyNWU5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9BY3Rpb25BZmZvcmRhbmNlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvQWN0aW9uQWZmb3JkYW5jZS5qYXZhCkBAIC05LDExICs5LDEyIEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290OwogCi1pbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQmVoYXZpb3JhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuT3BlcmF0aW9uOwogCiAvKioKICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CkBAIC0yNCw5ICsyNSw5IEBACiAgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CiAgKiA8L3A+CiAgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuQWN0aW9uQWZmb3JkYW5jZSNnZXRCYXNlX09wZXJhdGlvbiA8ZW0+QmFzZSBPcGVyYXRpb248L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkFjdGlvbkFmZm9yZGFuY2UjZ2V0SW5wdXQgPGVtPklucHV0PC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5BY3Rpb25BZmZvcmRhbmNlI2dldE91dHB1dCA8ZW0+T3V0cHV0PC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5BY3Rpb25BZmZvcmRhbmNlI2dldEJhc2VfQmVoYXZpb3JhbEZlYXR1cmUgPGVtPkJhc2UgQmVoYXZpb3JhbCBGZWF0dXJlPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5BY3Rpb25BZmZvcmRhbmNlI2lzU2FmZSA8ZW0+U2FmZTwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuQWN0aW9uQWZmb3JkYW5jZSNpc0lkZW1wb3RlbnQgPGVtPklkZW1wb3RlbnQ8L2VtPn08L2xpPgogICogPC91bD4KQEAgLTQ3LDcgKzQ4LDcgQEAKIAkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbnB1dDwvZW0+JyByZWZlcmVuY2UuCiAJICogQHNlZSAjc2V0SW5wdXQoRGF0YVNjaGVtYSkKIAkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2UjZ2V0QWN0aW9uQWZmb3JkYW5jZV9JbnB1dCgpCi0JICogQG1vZGVsIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBtb2RlbCB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJRGF0YVNjaGVtYSBnZXRJbnB1dCgpOwpAQCAtNzMsNyArNzQsNyBAQAogCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk91dHB1dDwvZW0+JyByZWZlcmVuY2UuCiAJICogQHNlZSAjc2V0T3V0cHV0KERhdGFTY2hlbWEpCiAJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldEFjdGlvbkFmZm9yZGFuY2VfT3V0cHV0KCkKLQkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCisJICogQG1vZGVsIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlEYXRhU2NoZW1hIGdldE91dHB1dCgpOwpAQCAtODksMzIgKzkwLDYgQEAKIAl2b2lkIHNldE91dHB1dChEYXRhU2NoZW1hIHZhbHVlKTsKIAogCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgQmVoYXZpb3JhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIEJlaGF2aW9yYWwgRmVhdHVyZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCi0JICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgotCSAqIDwvcD4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIEJlaGF2aW9yYWwgRmVhdHVyZTwvZW0+JyByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0QmFzZV9CZWhhdmlvcmFsRmVhdHVyZShCZWhhdmlvcmFsRmVhdHVyZSkKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2UjZ2V0QWN0aW9uQWZmb3JkYW5jZV9CYXNlX0JlaGF2aW9yYWxGZWF0dXJlKCkKLQkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUJlaGF2aW9yYWxGZWF0dXJlIGdldEJhc2VfQmVoYXZpb3JhbEZlYXR1cmUoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkFjdGlvbkFmZm9yZGFuY2UjZ2V0QmFzZV9CZWhhdmlvcmFsRmVhdHVyZSA8ZW0+QmFzZSBCZWhhdmlvcmFsIEZlYXR1cmU8L2VtPn0nIHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgQmVoYXZpb3JhbCBGZWF0dXJlPC9lbT4nIHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0Jdm9pZCBzZXRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlKEJlaGF2aW9yYWxGZWF0dXJlIHZhbHVlKTsKLQotCS8qKgogCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNhZmU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDxwPgpAQCAtMTY2LDQgKzE0MSwzMCBAQAogCSAqLwogCXZvaWQgc2V0SWRlbXBvdGVudChib29sZWFuIHZhbHVlKTsKIAorCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9PcGVyYXRpb24oT3BlcmF0aW9uKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRBY3Rpb25BZmZvcmRhbmNlX0Jhc2VfT3BlcmF0aW9uKCkKKwkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCU9wZXJhdGlvbiBnZXRCYXNlX09wZXJhdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuQWN0aW9uQWZmb3JkYW5jZSNnZXRCYXNlX09wZXJhdGlvbiA8ZW0+QmFzZSBPcGVyYXRpb248L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgT3BlcmF0aW9uPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX09wZXJhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9PcGVyYXRpb24oT3BlcmF0aW9uIHZhbHVlKTsKKwogfSAvLyBBY3Rpb25BZmZvcmRhbmNlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9BdXRob3JpemF0aW9uRmxvd0tpbmQuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0F1dGhvcml6YXRpb25GbG93S2luZC5qYXZhCmluZGV4IDMyYmE1OGYuLjkxYTEzNDQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0F1dGhvcml6YXRpb25GbG93S2luZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0F1dGhvcml6YXRpb25GbG93S2luZC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0NvbnRleHQuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0NvbnRleHQuamF2YQppbmRleCBhM2JhMTY3Li4zMjMyMDlmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9Db250ZXh0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvQ29udGV4dC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0RhdGFTY2hlbWEuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0RhdGFTY2hlbWEuamF2YQppbmRleCA3NTBmMDk2Li5hZmYwNDllIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9EYXRhU2NoZW1hLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvRGF0YVNjaGVtYS5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKQEAgLTE3LDEwICsxOCw2IEBACiAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5jb3JlLnN0cnVjdHVyZS5NZXRhVmFsdWVTcGVjaWZpY2F0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuSW50ZXJ2YWw7CiBpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHk7CiBpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuVHlwZTsKIGltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5UeXBlZEVsZW1lbnQ7CkBAIC0zNCwxNiArMzEsMjIgQEAKICAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKICAqIDwvcD4KICAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldFRpdGxlIDxlbT5UaXRsZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjZ2V0QmFzZV9UeXBlZEVsZW1lbnQgPGVtPkJhc2UgVHlwZWQgRWxlbWVudDwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRFbnVtIDxlbT5FbnVtPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldE51bWJlckludGVydmFsIDxlbT5OdW1iZXIgSW50ZXJ2YWw8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjZ2V0UmVxdWlyZWQgPGVtPlJlcXVpcmVkPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldEl0ZW1zIDxlbT5JdGVtczwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRQcm9wZXJ0aWVzIDxlbT5Qcm9wZXJ0aWVzPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldFR5cGUgPGVtPlR5cGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjZ2V0QVR5cGUgPGVtPkFUeXBlPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2lzV3JpdGVPbmx5IDxlbT5Xcml0ZSBPbmx5PC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldEZvcm1hdCA8ZW0+Rm9ybWF0PC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldE9uZU9mIDxlbT5PbmUgT2Y8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjZ2V0VHlwZSA8ZW0+VHlwZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRDb25zdCA8ZW0+Q29uc3Q8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjZ2V0TWluSXRlbXMgPGVtPk1pbiBJdGVtczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRNYXhJdGVtcyA8ZW0+TWF4IEl0ZW1zPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2lzUmVhZE9ubHkgPGVtPlJlYWQgT25seTwvZW0+fTwvbGk+CiAgKiA8L3VsPgogICoKICAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXREYXRhU2NoZW1hKCkKQEAgLTUyLDYgKzU1LDU4IEBACiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRGF0YVNjaGVtYSBleHRlbmRzIEVPYmplY3QgewogCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRpdGxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UaXRsZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UaXRsZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGl0bGUoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXREYXRhU2NoZW1hX1RpdGxlKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRUaXRsZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRUaXRsZSA8ZW0+VGl0bGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRpdGxlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUaXRsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGl0bGUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0RGVzY3JpcHRpb24oU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXREYXRhU2NoZW1hX0Rlc2NyaXB0aW9uKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXREZXNjcmlwdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIHZhbHVlKTsKKworCS8qKgogCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgVHlwZWQgRWxlbWVudDwvYj48L2VtPicgcmVmZXJlbmNlLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPHA+CkBAIC03OCw0NiArMTMzLDIwIEBACiAJdm9pZCBzZXRCYXNlX1R5cGVkRWxlbWVudChUeXBlZEVsZW1lbnQgdmFsdWUpOwogCiAJLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RW51bTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0JICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUuY29yZS5zdHJ1Y3R1cmUuTWV0YVZhbHVlU3BlY2lmaWNhdGlvbn0uCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RW51bTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPHA+CiAJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RW51bTwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKIAkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCiAJICogPC9wPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVudW08L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RW51bTwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KIAkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2UjZ2V0RGF0YVNjaGVtYV9FbnVtKCkKLQkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCisJICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS51bWwyLnR5cGVzLlN0cmluZyIgb3JkZXJlZD0iZmFsc2UiCiAJICogQGdlbmVyYXRlZAogCSAqLwotCUVMaXN0PE1ldGFWYWx1ZVNwZWNpZmljYXRpb24+IGdldEVudW0oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk51bWJlciBJbnRlcnZhbDwvYj48L2VtPicgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TnVtYmVyIEludGVydmFsPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk51bWJlciBJbnRlcnZhbDwvZW0+JyByZWZlcmVuY2UuCi0JICogQHNlZSAjc2V0TnVtYmVySW50ZXJ2YWwoSW50ZXJ2YWwpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldERhdGFTY2hlbWFfTnVtYmVySW50ZXJ2YWwoKQotCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUludGVydmFsIGdldE51bWJlckludGVydmFsKCk7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldE51bWJlckludGVydmFsIDxlbT5OdW1iZXIgSW50ZXJ2YWw8L2VtPn0nIHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk51bWJlciBJbnRlcnZhbDwvZW0+JyByZWZlcmVuY2UuCi0JICogQHNlZSAjZ2V0TnVtYmVySW50ZXJ2YWwoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQl2b2lkIHNldE51bWJlckludGVydmFsKEludGVydmFsIHZhbHVlKTsKKwlFTGlzdDxTdHJpbmc+IGdldEVudW0oKTsKIAogCS8qKgogCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KQEAgLTE5NCwyMCArMjIzLDIwIEBACiAJRUxpc3Q8RGF0YVNjaGVtYT4gZ2V0UHJvcGVydGllcygpOwogCiAJLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QVR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UeXBlfS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlR5cGU8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QVR5cGU8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCiAJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgogCSAqIDwvcD4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXREYXRhU2NoZW1hX1R5cGUoKQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkFUeXBlPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXREYXRhU2NoZW1hX0FUeXBlKCkKIAkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCiAJICogQGdlbmVyYXRlZAogCSAqLwotCUVMaXN0PG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlR5cGU+IGdldFR5cGUoKTsKKwlFTGlzdDxvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UeXBlPiBnZXRBVHlwZSgpOwogCiAJLyoqCiAJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+V3JpdGUgT25seTwvYj48L2VtPicgYXR0cmlidXRlLgpAQCAtMjc4LDQgKzMwNywxMzQgQEAKIAkgKi8KIAlFTGlzdDxEYXRhU2NoZW1hPiBnZXRPbmVPZigpOwogCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUeXBlKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2UjZ2V0RGF0YVNjaGVtYV9UeXBlKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRUeXBlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldFR5cGUgPGVtPlR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlR5cGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFR5cGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFR5cGUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvbnN0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db25zdDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Db25zdDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0Q29uc3QoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXREYXRhU2NoZW1hX0NvbnN0KCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRDb25zdCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRDb25zdCA8ZW0+Q29uc3Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNvbnN0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRDb25zdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Q29uc3QoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1pbiBJdGVtczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWluIEl0ZW1zPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1pbiBJdGVtczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TWluSXRlbXMoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXREYXRhU2NoZW1hX01pbkl0ZW1zKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuSW50ZWdlciIgcmVxdWlyZWQ9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0TWluSXRlbXMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjZ2V0TWluSXRlbXMgPGVtPk1pbiBJdGVtczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWluIEl0ZW1zPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNaW5JdGVtcygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TWluSXRlbXMoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1heCBJdGVtczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWF4IEl0ZW1zPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1heCBJdGVtczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TWF4SXRlbXMoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXREYXRhU2NoZW1hX01heEl0ZW1zKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuSW50ZWdlciIgcmVxdWlyZWQ9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0TWF4SXRlbXMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjZ2V0TWF4SXRlbXMgPGVtPk1heCBJdGVtczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWF4IEl0ZW1zPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNYXhJdGVtcygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TWF4SXRlbXMoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlYWQgT25seTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVhZCBPbmx5PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlYWQgT25seTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UmVhZE9ubHkoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2UjZ2V0RGF0YVNjaGVtYV9SZWFkT25seSgpCisJICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS51bWwyLnR5cGVzLkJvb2xlYW4iIHJlcXVpcmVkPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc1JlYWRPbmx5KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2lzUmVhZE9ubHkgPGVtPlJlYWQgT25seTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVhZCBPbmx5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc1JlYWRPbmx5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSZWFkT25seShib29sZWFuIHZhbHVlKTsKKwogfSAvLyBEYXRhU2NoZW1hCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9FdmVudEFmZm9yZGFuY2UuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0V2ZW50QWZmb3JkYW5jZS5qYXZhCmluZGV4IDgwNmQzYmEuLjY5NDlkZGYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0V2ZW50QWZmb3JkYW5jZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0V2ZW50QWZmb3JkYW5jZS5qYXZhCkBAIC05LDExICs5LDEyIEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290OwogCi1pbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuU2lnbmFsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlJlY2VwdGlvbjsKIAogLyoqCiAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgpAQCAtMjQsNyArMjUsNyBAQAogICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgogICogPC9wPgogICogPHVsPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkV2ZW50QWZmb3JkYW5jZSNnZXRCYXNlX1NpZ25hbCA8ZW0+QmFzZSBTaWduYWw8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkV2ZW50QWZmb3JkYW5jZSNnZXRCYXNlX1JlY2VwdGlvbiA8ZW0+QmFzZSBSZWNlcHRpb248L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkV2ZW50QWZmb3JkYW5jZSNnZXREYXRhIDxlbT5EYXRhPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5FdmVudEFmZm9yZGFuY2UjZ2V0U3Vic2NyaXB0aW9uIDxlbT5TdWJzY3JpcHRpb248L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkV2ZW50QWZmb3JkYW5jZSNnZXRDYW5jZWxsYXRpb24gPGVtPkNhbmNlbGxhdGlvbjwvZW0+fTwvbGk+CkBAIC0zNiwzMiArMzcsNiBAQAogICovCiBwdWJsaWMgaW50ZXJmYWNlIEV2ZW50QWZmb3JkYW5jZSBleHRlbmRzIEludGVyYWN0aW9uQWZmb3JkYW5jZSB7CiAJLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBTaWduYWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgU2lnbmFsPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKLQkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCi0JICogPC9wPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgU2lnbmFsPC9lbT4nIHJlZmVyZW5jZS4KLQkgKiBAc2VlICNzZXRCYXNlX1NpZ25hbChTaWduYWwpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldEV2ZW50QWZmb3JkYW5jZV9CYXNlX1NpZ25hbCgpCi0JICogQG1vZGVsIG9yZGVyZWQ9ImZhbHNlIgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlTaWduYWwgZ2V0QmFzZV9TaWduYWwoKTsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkV2ZW50QWZmb3JkYW5jZSNnZXRCYXNlX1NpZ25hbCA8ZW0+QmFzZSBTaWduYWw8L2VtPn0nIHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgU2lnbmFsPC9lbT4nIHJlZmVyZW5jZS4KLQkgKiBAc2VlICNnZXRCYXNlX1NpZ25hbCgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCXZvaWQgc2V0QmFzZV9TaWduYWwoU2lnbmFsIHZhbHVlKTsKLQotCS8qKgogCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRhdGE8L2I+PC9lbT4nIHJlZmVyZW5jZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDxwPgpAQCAtMTM5LDQgKzExNCwzMCBAQAogCSAqLwogCXZvaWQgc2V0Q2FuY2VsbGF0aW9uKERhdGFTY2hlbWEgdmFsdWUpOwogCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBSZWNlcHRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgUmVjZXB0aW9uPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUmVjZXB0aW9uPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX1JlY2VwdGlvbihSZWNlcHRpb24pCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldEV2ZW50QWZmb3JkYW5jZV9CYXNlX1JlY2VwdGlvbigpCisJICogQG1vZGVsIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlSZWNlcHRpb24gZ2V0QmFzZV9SZWNlcHRpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkV2ZW50QWZmb3JkYW5jZSNnZXRCYXNlX1JlY2VwdGlvbiA8ZW0+QmFzZSBSZWNlcHRpb248L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUmVjZXB0aW9uPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX1JlY2VwdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9SZWNlcHRpb24oUmVjZXB0aW9uIHZhbHVlKTsKKwogfSAvLyBFdmVudEFmZm9yZGFuY2UKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0Zvcm0uamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0Zvcm0uamF2YQppbmRleCBjZDY2ZTY2Li4wZTNiZTkxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9Gb3JtLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvRm9ybS5qYXZhCkBAIC05LDEzICs5LDE1IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwogCi1pbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5jb3JlLnN0cnVjdHVyZS5NZXRhVmFsdWVTcGVjaWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkNvbW1lbnQ7CiAKIC8qKgogICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KQEAgLTMzLDEzICszNSwxNSBAQAogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkZvcm0jZ2V0U3ViUHJvdG9jb2wgPGVtPlN1YiBQcm90b2NvbDwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRm9ybSNnZXRTY29wZXMgPGVtPlNjb3BlczwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRm9ybSNnZXRSZXNwb25zZSA8ZW0+UmVzcG9uc2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkZvcm0jZ2V0U2VjdXJpdHkgPGVtPlNlY3VyaXR5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Gb3JtI2dldEJhc2VfQ29tbWVudCA8ZW0+QmFzZSBDb21tZW50PC9lbT59PC9saT4KICAqIDwvdWw+CiAgKgogICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldEZvcm0oKQogICogQG1vZGVsCiAgKiBAZ2VuZXJhdGVkCiAgKi8KLXB1YmxpYyBpbnRlcmZhY2UgRm9ybSBleHRlbmRzIE1ldGFWYWx1ZVNwZWNpZmljYXRpb24geworcHVibGljIGludGVyZmFjZSBGb3JtIGV4dGVuZHMgRU9iamVjdCB7CiAJLyoqCiAJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+T3A8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgogCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5PcEtpbmR9LgpAQCAtMTc3LDcgKzE4MSw3IEBACiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U2NvcGVzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgogCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRGb3JtX1Njb3BlcygpCi0JICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS51bWwyLnR5cGVzLlN0cmluZyIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS51bWwyLnR5cGVzLlN0cmluZyIgb3JkZXJlZD0iZmFsc2UiCiAJICogQGdlbmVyYXRlZAogCSAqLwogCUVMaXN0PFN0cmluZz4gZ2V0U2NvcGVzKCk7CkBAIC0yMDksNCArMjEzLDQ2IEBACiAJICovCiAJdm9pZCBzZXRSZXNwb25zZShTdHJpbmcgdmFsdWUpOwogCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2VjdXJpdHk8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5TZWN1cml0eVNjaGVtZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TZWN1cml0eTwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNlY3VyaXR5PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRGb3JtX1NlY3VyaXR5KCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxTZWN1cml0eVNjaGVtZT4gZ2V0U2VjdXJpdHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgQ29tbWVudDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBDb21tZW50PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgQ29tbWVudDwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9Db21tZW50KENvbW1lbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldEZvcm1fQmFzZV9Db21tZW50KCkKKwkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbW1lbnQgZ2V0QmFzZV9Db21tZW50KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Gb3JtI2dldEJhc2VfQ29tbWVudCA8ZW0+QmFzZSBDb21tZW50PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIENvbW1lbnQ8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfQ29tbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9Db21tZW50KENvbW1lbnQgdmFsdWUpOworCiB9IC8vIEZvcm0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0ludGVyYWN0aW9uQWZmb3JkYW5jZS5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvSW50ZXJhY3Rpb25BZmZvcmRhbmNlLmphdmEKaW5kZXggNTYyYzBhNi4uYjkxZGI1NCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvSW50ZXJhY3Rpb25BZmZvcmRhbmNlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvSW50ZXJhY3Rpb25BZmZvcmRhbmNlLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290OwpAQCAtMjYsOCArMjcsMTAgQEAKICAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKICAqIDwvcD4KICAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5JbnRlcmFjdGlvbkFmZm9yZGFuY2UjZ2V0VGl0bGUgPGVtPlRpdGxlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5JbnRlcmFjdGlvbkFmZm9yZGFuY2UjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5JbnRlcmFjdGlvbkFmZm9yZGFuY2UjZ2V0Rm9ybXMgPGVtPkZvcm1zPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5JbnRlcmFjdGlvbkFmZm9yZGFuY2UjZ2V0VHlwZSA8ZW0+VHlwZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuSW50ZXJhY3Rpb25BZmZvcmRhbmNlI2dldEFUeXBlIDxlbT5BVHlwZTwvZW0+fTwvbGk+CiAgKiA8L3VsPgogICoKICAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2UoKQpAQCAtMzYsNiArMzksNTggQEAKICAqLwogcHVibGljIGludGVyZmFjZSBJbnRlcmFjdGlvbkFmZm9yZGFuY2UgZXh0ZW5kcyBFT2JqZWN0IHsKIAkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UaXRsZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGl0bGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGl0bGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFRpdGxlKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2UjZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX1RpdGxlKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRUaXRsZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuSW50ZXJhY3Rpb25BZmZvcmRhbmNlI2dldFRpdGxlIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGl0bGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRpdGxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUaXRsZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXREZXNjcmlwdGlvbihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldEludGVyYWN0aW9uQWZmb3JkYW5jZV9EZXNjcmlwdGlvbigpCisJICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS51bWwyLnR5cGVzLlN0cmluZyIgcmVxdWlyZWQ9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkludGVyYWN0aW9uQWZmb3JkYW5jZSNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIHZhbHVlKTsKKworCS8qKgogCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkZvcm1zPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KIAkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRm9ybX0uCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KQEAgLTUyLDE5ICsxMDcsMTkgQEAKIAlFTGlzdDxGb3JtPiBnZXRGb3JtcygpOwogCiAJLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QVR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UeXBlfS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDxwPgotCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlR5cGU8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QVR5cGU8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCiAJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgogCSAqIDwvcD4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgotCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2VfVHlwZSgpCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QVR5cGU8L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldEludGVyYWN0aW9uQWZmb3JkYW5jZV9BVHlwZSgpCiAJICogQG1vZGVsIG9yZGVyZWQ9ImZhbHNlIgogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KLQlFTGlzdDxUeXBlPiBnZXRUeXBlKCk7CisJRUxpc3Q8VHlwZT4gZ2V0QVR5cGUoKTsKIAogfSAvLyBJbnRlcmFjdGlvbkFmZm9yZGFuY2UKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0xpbmsuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L0xpbmsuamF2YQppbmRleCA2NDQ2NDBhLi5jMjFmNzE1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9MaW5rLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvTGluay5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L09wS2luZC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvT3BLaW5kLmphdmEKaW5kZXggYTEzOTJkZC4uNzMwNTFhZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvT3BLaW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvT3BLaW5kLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290OwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvUHJvcGVydHlBZmZvcmRhbmNlLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9Qcm9wZXJ0eUFmZm9yZGFuY2UuamF2YQppbmRleCAzYTkyMjc3Li43NzhiMjkwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9Qcm9wZXJ0eUFmZm9yZGFuY2UuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9Qcm9wZXJ0eUFmZm9yZGFuY2UuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3Q7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9Rb1BLaW5kLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9Rb1BLaW5kLmphdmEKaW5kZXggMjEyMjk3My4uMzcyYzlkMSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvUW9QS2luZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1FvUEtpbmQuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3Q7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9TZWN1cml0eUFsZ29yaXRobUtpbmQuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5QWxnb3JpdGhtS2luZC5qYXZhCmluZGV4IGZjMGY3MmMuLjA2NWQ5M2IgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5QWxnb3JpdGhtS2luZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5QWxnb3JpdGhtS2luZC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5QXV0aGVudGljYXRpb25Gb3JtYXRLaW5kLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9TZWN1cml0eUF1dGhlbnRpY2F0aW9uRm9ybWF0S2luZC5qYXZhCmluZGV4IDUyOWNlZjIuLjA5NzkxNzEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5QXV0aGVudGljYXRpb25Gb3JtYXRLaW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvU2VjdXJpdHlBdXRoZW50aWNhdGlvbkZvcm1hdEtpbmQuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3Q7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9TZWN1cml0eUF1dGhlbnRpY2F0aW9uSW5mb3JtYXRpb25Mb2NhdGlvbktpbmQuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5QXV0aGVudGljYXRpb25JbmZvcm1hdGlvbkxvY2F0aW9uS2luZC5qYXZhCmluZGV4IGU0ZDQxNDcuLjI5MTA0MWQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5QXV0aGVudGljYXRpb25JbmZvcm1hdGlvbkxvY2F0aW9uS2luZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5QXV0aGVudGljYXRpb25JbmZvcm1hdGlvbkxvY2F0aW9uS2luZC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5U2NoZW1lLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9TZWN1cml0eVNjaGVtZS5qYXZhCmluZGV4IDJiN2YzOTUuLjNjOGVhYzYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5U2NoZW1lLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvU2VjdXJpdHlTY2hlbWUuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3Q7CkBAIC0yOSw2ICszMCw4IEBACiAgKiA8L3A+CiAgKiA8dWw+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuU2VjdXJpdHlTY2hlbWUjZ2V0QmFzZV9DbGFzc2lmaWVyIDxlbT5CYXNlIENsYXNzaWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlNlY3VyaXR5U2NoZW1lI2dldFRpdGxlIDxlbT5UaXRsZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuU2VjdXJpdHlTY2hlbWUjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5TZWN1cml0eVNjaGVtZSNnZXRTY2hlbWUgPGVtPlNjaGVtZTwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuU2VjdXJpdHlTY2hlbWUjZ2V0UHJveHkgPGVtPlByb3h5PC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5TZWN1cml0eVNjaGVtZSNnZXRJbiA8ZW0+SW48L2VtPn08L2xpPgpAQCAtNzYsNiArNzksNTggQEAKIAl2b2lkIHNldEJhc2VfQ2xhc3NpZmllcihDbGFzc2lmaWVyIHZhbHVlKTsKIAogCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRpdGxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UaXRsZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UaXRsZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGl0bGUoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRTZWN1cml0eVNjaGVtZV9UaXRsZSgpCisJICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS51bWwyLnR5cGVzLlN0cmluZyIgcmVxdWlyZWQ9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0VGl0bGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlNlY3VyaXR5U2NoZW1lI2dldFRpdGxlIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGl0bGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRpdGxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUaXRsZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXREZXNjcmlwdGlvbihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldFNlY3VyaXR5U2NoZW1lX0Rlc2NyaXB0aW9uKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXREZXNjcmlwdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuU2VjdXJpdHlTY2hlbWUjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKIAkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TY2hlbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KIAkgKiBUaGUgbGl0ZXJhbHMgYXJlIGZyb20gdGhlIGVudW1lcmF0aW9uIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5TZWN1cml0eVNjaGVtZUtpbmR9LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9TZWN1cml0eVNjaGVtZUtpbmQuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5U2NoZW1lS2luZC5qYXZhCmluZGV4IGMwN2Q4M2EuLjg5ZDAxOGEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5U2NoZW1lS2luZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1NlY3VyaXR5U2NoZW1lS2luZC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1N1YlByb3RvY29sS2luZC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvU3ViUHJvdG9jb2xLaW5kLmphdmEKaW5kZXggODcyMjdhYi4uMzgzZmViOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvU3ViUHJvdG9jb2xLaW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvU3ViUHJvdG9jb2xLaW5kLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290OwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvVGhpbmcuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1RoaW5nLmphdmEKaW5kZXggNzRhMDQwMS4uNTZjNDRiYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvVGhpbmcuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9UaGluZy5qYXZhCkBAIC05LDEzICs5LDE0IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwogCi1pbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5hcnRlZmFjdC5WaXJ0dWFsRW50aXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwogCiAvKioKICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CkBAIC0yNiwyNSArMjcsODEgQEAKICAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKICAqIDwvcD4KICAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRUaXRsZSA8ZW0+VGl0bGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0QmFzZSA8ZW0+QmFzZTwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0SWQgPGVtPklkPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRTdXBwb3J0IDxlbT5TdXBwb3J0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRTZWN1cml0eSA8ZW0+U2VjdXJpdHk8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldFNlY3VyaXR5RGVmaW5pdGlvbnMgPGVtPlNlY3VyaXR5IERlZmluaXRpb25zPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRMaW5rcyA8ZW0+TGlua3M8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldEV2ZW50cyA8ZW0+RXZlbnRzPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRBY3Rpb25zIDxlbT5BY3Rpb25zPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRQcm9wZXJ0aWVzIDxlbT5Qcm9wZXJ0aWVzPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRWZXJzaW9uIDxlbT5WZXJzaW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRDb250ZXh0IDxlbT5Db250ZXh0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRBVHlwZSA8ZW0+QVR5cGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldEFDb250ZXh0IDxlbT5BQ29udGV4dDwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0Rm9ybXMgPGVtPkZvcm1zPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRCYXNlX0NsYXNzIDxlbT5CYXNlIENsYXNzPC9lbT59PC9saT4KICAqIDwvdWw+CiAgKgogICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldFRoaW5nKCkKICAqIEBtb2RlbAogICogQGdlbmVyYXRlZAogICovCi1wdWJsaWMgaW50ZXJmYWNlIFRoaW5nIGV4dGVuZHMgVmlydHVhbEVudGl0eSB7CitwdWJsaWMgaW50ZXJmYWNlIFRoaW5nIGV4dGVuZHMgRU9iamVjdCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGl0bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRpdGxlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRpdGxlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUaXRsZShTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldFRoaW5nX1RpdGxlKCkKKwkgKiBAbW9kZWwgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuU3RyaW5nIiByZXF1aXJlZD0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRUaXRsZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0VGl0bGUgPGVtPlRpdGxlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UaXRsZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGl0bGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRpdGxlKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVzY3JpcHRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldERlc2NyaXB0aW9uKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2UjZ2V0VGhpbmdfRGVzY3JpcHRpb24oKQorCSAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2UudW1sMi50eXBlcy5TdHJpbmciIHJlcXVpcmVkPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIHZhbHVlKTsKKwogCS8qKgogCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgpAQCAtMTI0LDYgKzE4MSwyMiBAQAogCXZvaWQgc2V0U3VwcG9ydChTdHJpbmcgdmFsdWUpOwogCiAJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2VjdXJpdHk8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5TZWN1cml0eVNjaGVtZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TZWN1cml0eTwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNlY3VyaXR5PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRUaGluZ19TZWN1cml0eSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8U2VjdXJpdHlTY2hlbWU+IGdldFNlY3VyaXR5KCk7CisKKwkvKioKIAkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TZWN1cml0eSBEZWZpbml0aW9uczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCiAJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlNlY3VyaXR5U2NoZW1lfS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgpAQCAtMTY2LDcgKzIzOSw3IEBACiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RXZlbnRzPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRUaGluZ19FdmVudHMoKQotCSAqIEBtb2RlbCBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCiAJICogQGdlbmVyYXRlZAogCSAqLwogCUVMaXN0PEV2ZW50QWZmb3JkYW5jZT4gZ2V0RXZlbnRzKCk7CkBAIC0xODIsNyArMjU1LDcgQEAKIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BY3Rpb25zPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRUaGluZ19BY3Rpb25zKCkKLQkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCisJICogQG1vZGVsIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlFTGlzdDxBY3Rpb25BZmZvcmRhbmNlPiBnZXRBY3Rpb25zKCk7CkBAIC0xOTgsNyArMjcxLDcgQEAKIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qcm9wZXJ0aWVzPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRUaGluZ19Qcm9wZXJ0aWVzKCkKLQkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCisJICogQG1vZGVsIHRyYW5zaWVudD0idHJ1ZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlFTGlzdDxQcm9wZXJ0eUFmZm9yZGFuY2U+IGdldFByb3BlcnRpZXMoKTsKQEAgLTIzMCwzNiArMzAzLDM2IEBACiAJdm9pZCBzZXRWZXJzaW9uKFN0cmluZyB2YWx1ZSk7CiAKIAkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5BVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCiAJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlR5cGV9LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPHA+Ci0JICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5BVHlwZTwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKIAkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCiAJICogPC9wPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlR5cGU8L2VtPicgcmVmZXJlbmNlIGxpc3QuCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldFRoaW5nX1R5cGUoKQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkFUeXBlPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZSNnZXRUaGluZ19BVHlwZSgpCiAJICogQG1vZGVsIG9yZGVyZWQ9ImZhbHNlIgogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KLQlFTGlzdDxUeXBlPiBnZXRUeXBlKCk7CisJRUxpc3Q8VHlwZT4gZ2V0QVR5cGUoKTsKIAogCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvbnRleHQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkFDb250ZXh0PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KIAkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuQ29udGV4dH0uCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8cD4KLQkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db250ZXh0PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkFDb250ZXh0PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAogCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KIAkgKiA8L3A+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q29udGV4dDwvZW0+JyByZWZlcmVuY2UgbGlzdC4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2UjZ2V0VGhpbmdfQ29udGV4dCgpCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QUNvbnRleHQ8L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldFRoaW5nX0FDb250ZXh0KCkKIAkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCiAJICogQGdlbmVyYXRlZAogCSAqLwotCUVMaXN0PENvbnRleHQ+IGdldENvbnRleHQoKTsKKwlFTGlzdDxDb250ZXh0PiBnZXRBQ29udGV4dCgpOwogCiAJLyoqCiAJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Rm9ybXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgpAQCAtMjc3LDQgKzM1MCwzMCBAQAogCSAqLwogCUVMaXN0PEZvcm0+IGdldEZvcm1zKCk7CiAKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIENsYXNzPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIENsYXNzPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgQ2xhc3M8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfQ2xhc3Mob3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlI2dldFRoaW5nX0Jhc2VfQ2xhc3MoKQorCSAqIEBtb2RlbCBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgZ2V0QmFzZV9DbGFzcygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0QmFzZV9DbGFzcyA8ZW0+QmFzZSBDbGFzczwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBDbGFzczwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9DbGFzcygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9DbGFzcyhvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyB2YWx1ZSk7CisKIH0gLy8gVGhpbmcKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1R5cGUuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1R5cGUuamF2YQppbmRleCA4MjNjYjIxLi5hM2JiNzg5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9UeXBlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvVHlwZS5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1dvVEZhY3RvcnkuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1dvVEZhY3RvcnkuamF2YQppbmRleCAxMDJiNzkxLi40M2FhMWE1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9Xb1RGYWN0b3J5LmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvV29URmFjdG9yeS5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1dvVFBhY2thZ2UuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L1dvVFBhY2thZ2UuamF2YQppbmRleCBkZmUyYThiLi4yYTUzYTM2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9Xb1RQYWNrYWdlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvV29UUGFja2FnZS5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdDsKQEAgLTE5LDEwICsyMCw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwogCi1pbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5hcnRlZmFjdC5BcnRlZmFjdFBhY2thZ2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLmNvcmUuc3RydWN0dXJlLlN0cnVjdHVyZVBhY2thZ2U7Ci0KIC8qKgogICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KICAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgpAQCAtODMsMzEgKzgwLDIyIEBACiAJaW50IFRISU5HID0gMDsKIAogCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIENsYXNzPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpdGxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgVEhJTkdfX0JBU0VfQ0xBU1MgPSBBcnRlZmFjdFBhY2thZ2UuVklSVFVBTF9FTlRJVFlfX0JBU0VfQ0xBU1M7CisJaW50IFRISU5HX19USVRMRSA9IDA7CiAKIAkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGhpc2ljYWwgRW50aXR5IFNwZWNpZmljYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBUSElOR19fUEhJU0lDQUxfRU5USVRZX1NQRUNJRklDQVRJT04gPSBBcnRlZmFjdFBhY2thZ2UuVklSVFVBTF9FTlRJVFlfX1BISVNJQ0FMX0VOVElUWV9TUEVDSUZJQ0FUSU9OOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBoeXNpY2FsIEVudGl0eTwvYj48L2VtPicgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IFRISU5HX19QSFlTSUNBTF9FTlRJVFkgPSBBcnRlZmFjdFBhY2thZ2UuVklSVFVBTF9FTlRJVFlfX1BIWVNJQ0FMX0VOVElUWTsKKwlpbnQgVEhJTkdfX0RFU0NSSVBUSU9OID0gMTsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC0xMTYsNyArMTA0LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgVEhJTkdfX0JBU0UgPSBBcnRlZmFjdFBhY2thZ2UuVklSVFVBTF9FTlRJVFlfRkVBVFVSRV9DT1VOVCArIDA7CisJaW50IFRISU5HX19CQVNFID0gMjsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLgpAQCAtMTI1LDcgKzExMyw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IFRISU5HX19JRCA9IEFydGVmYWN0UGFja2FnZS5WSVJUVUFMX0VOVElUWV9GRUFUVVJFX0NPVU5UICsgMTsKKwlpbnQgVEhJTkdfX0lEID0gMzsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdXBwb3J0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC0xMzQsNyArMTIyLDE2IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IFRISU5HX19TVVBQT1JUID0gQXJ0ZWZhY3RQYWNrYWdlLlZJUlRVQUxfRU5USVRZX0ZFQVRVUkVfQ09VTlQgKyAyOworCWludCBUSElOR19fU1VQUE9SVCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VjdXJpdHk8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRISU5HX19TRUNVUklUWSA9IDU7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VjdXJpdHkgRGVmaW5pdGlvbnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgpAQCAtMTQzLDcgKzE0MCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IFRISU5HX19TRUNVUklUWV9ERUZJTklUSU9OUyA9IEFydGVmYWN0UGFja2FnZS5WSVJUVUFMX0VOVElUWV9GRUFUVVJFX0NPVU5UICsgMzsKKwlpbnQgVEhJTkdfX1NFQ1VSSVRZX0RFRklOSVRJT05TID0gNjsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MaW5rczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCkBAIC0xNTIsNyArMTQ5LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgVEhJTkdfX0xJTktTID0gQXJ0ZWZhY3RQYWNrYWdlLlZJUlRVQUxfRU5USVRZX0ZFQVRVUkVfQ09VTlQgKyA0OworCWludCBUSElOR19fTElOS1MgPSA3OwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkV2ZW50czwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCkBAIC0xNjEsNyArMTU4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgVEhJTkdfX0VWRU5UUyA9IEFydGVmYWN0UGFja2FnZS5WSVJUVUFMX0VOVElUWV9GRUFUVVJFX0NPVU5UICsgNTsKKwlpbnQgVEhJTkdfX0VWRU5UUyA9IDg7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QWN0aW9uczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCkBAIC0xNzAsNyArMTY3LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgVEhJTkdfX0FDVElPTlMgPSBBcnRlZmFjdFBhY2thZ2UuVklSVFVBTF9FTlRJVFlfRkVBVFVSRV9DT1VOVCArIDY7CisJaW50IFRISU5HX19BQ1RJT05TID0gOTsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9wZXJ0aWVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KQEAgLTE3OSw3ICsxNzYsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBUSElOR19fUFJPUEVSVElFUyA9IEFydGVmYWN0UGFja2FnZS5WSVJUVUFMX0VOVElUWV9GRUFUVVJFX0NPVU5UICsgNzsKKwlpbnQgVEhJTkdfX1BST1BFUlRJRVMgPSAxMDsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZXJzaW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC0xODgsMjUgKzE4NSwyNSBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBUSElOR19fVkVSU0lPTiA9IEFydGVmYWN0UGFja2FnZS5WSVJUVUFMX0VOVElUWV9GRUFUVVJFX0NPVU5UICsgODsKKwlpbnQgVEhJTkdfX1ZFUlNJT04gPSAxMTsKIAogCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QVR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IFRISU5HX19UWVBFID0gQXJ0ZWZhY3RQYWNrYWdlLlZJUlRVQUxfRU5USVRZX0ZFQVRVUkVfQ09VTlQgKyA5OworCWludCBUSElOR19fQVRZUEUgPSAxMjsKIAogCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db250ZXh0PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QUNvbnRleHQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IFRISU5HX19DT05URVhUID0gQXJ0ZWZhY3RQYWNrYWdlLlZJUlRVQUxfRU5USVRZX0ZFQVRVUkVfQ09VTlQgKyAxMDsKKwlpbnQgVEhJTkdfX0FDT05URVhUID0gMTM7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Rm9ybXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgpAQCAtMjE1LDcgKzIxMiwxNiBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBUSElOR19fRk9STVMgPSBBcnRlZmFjdFBhY2thZ2UuVklSVFVBTF9FTlRJVFlfRkVBVFVSRV9DT1VOVCArIDExOworCWludCBUSElOR19fRk9STVMgPSAxNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIENsYXNzPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEhJTkdfX0JBU0VfQ0xBU1MgPSAxNTsKIAogCS8qKgogCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UaGluZzwvZW0+JyBjbGFzcy4KQEAgLTIyNCw3ICsyMzAsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBUSElOR19GRUFUVVJFX0NPVU5UID0gQXJ0ZWZhY3RQYWNrYWdlLlZJUlRVQUxfRU5USVRZX0ZFQVRVUkVfQ09VTlQgKyAxMjsKKwlpbnQgVEhJTkdfRkVBVFVSRV9DT1VOVCA9IDE2OwogCiAJLyoqCiAJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlNlY3VyaXR5U2NoZW1lSW1wbCA8ZW0+U2VjdXJpdHkgU2NoZW1lPC9lbT59JyBjbGFzcy4KQEAgLTI0NiwxMyArMjUyLDMxIEBACiAJaW50IFNFQ1VSSVRZX1NDSEVNRV9fQkFTRV9DTEFTU0lGSUVSID0gMDsKIAogCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaXRsZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFQ1VSSVRZX1NDSEVNRV9fVElUTEUgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VDVVJJVFlfU0NIRU1FX19ERVNDUklQVElPTiA9IDI7CisKKwkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2NoZW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgU0VDVVJJVFlfU0NIRU1FX19TQ0hFTUUgPSAxOworCWludCBTRUNVUklUWV9TQ0hFTUVfX1NDSEVNRSA9IDM7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJveHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KQEAgLTI2MSw3ICsyODUsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBTRUNVUklUWV9TQ0hFTUVfX1BST1hZID0gMjsKKwlpbnQgU0VDVVJJVFlfU0NIRU1FX19QUk9YWSA9IDQ7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KQEAgLTI3MCw3ICsyOTQsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBTRUNVUklUWV9TQ0hFTUVfX0lOID0gMzsKKwlpbnQgU0VDVVJJVFlfU0NIRU1FX19JTiA9IDU7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UW9wPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC0yNzksNyArMzAzLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgU0VDVVJJVFlfU0NIRU1FX19RT1AgPSA0OworCWludCBTRUNVUklUWV9TQ0hFTUVfX1FPUCA9IDY7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgpAQCAtMjg4LDcgKzMxMiw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IFNFQ1VSSVRZX1NDSEVNRV9fTkFNRSA9IDU7CisJaW50IFNFQ1VSSVRZX1NDSEVNRV9fTkFNRSA9IDc7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXV0aG9yaXphdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgpAQCAtMjk3LDcgKzMyMSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IFNFQ1VSSVRZX1NDSEVNRV9fQVVUSE9SSVpBVElPTiA9IDY7CisJaW50IFNFQ1VSSVRZX1NDSEVNRV9fQVVUSE9SSVpBVElPTiA9IDg7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QWxnPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC0zMDYsNyArMzMwLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgU0VDVVJJVFlfU0NIRU1FX19BTEcgPSA3OworCWludCBTRUNVUklUWV9TQ0hFTUVfX0FMRyA9IDk7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Rm9ybWF0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC0zMTUsNyArMzM5LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgU0VDVVJJVFlfU0NIRU1FX19GT1JNQVQgPSA4OworCWludCBTRUNVUklUWV9TQ0hFTUVfX0ZPUk1BVCA9IDEwOwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC0zMjQsNyArMzQ4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgU0VDVVJJVFlfU0NIRU1FX19JREVOVElUWSA9IDk7CisJaW50IFNFQ1VSSVRZX1NDSEVNRV9fSURFTlRJVFkgPSAxMTsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ub2tlbjwvYj48L2VtPicgYXR0cmlidXRlLgpAQCAtMzMzLDcgKzM1Nyw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IFNFQ1VSSVRZX1NDSEVNRV9fVE9LRU4gPSAxMDsKKwlpbnQgU0VDVVJJVFlfU0NIRU1FX19UT0tFTiA9IDEyOwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZnJlc2g8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KQEAgLTM0Miw3ICszNjYsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBTRUNVUklUWV9TQ0hFTUVfX1JFRlJFU0ggPSAxMTsKKwlpbnQgU0VDVVJJVFlfU0NIRU1FX19SRUZSRVNIID0gMTM7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2NvcGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KQEAgLTM1MSw3ICszNzUsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBTRUNVUklUWV9TQ0hFTUVfX1NDT1BFUyA9IDEyOworCWludCBTRUNVUklUWV9TQ0hFTUVfX1NDT1BFUyA9IDE0OwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZsb3c8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KQEAgLTM2MCw3ICszODQsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBTRUNVUklUWV9TQ0hFTUVfX0ZMT1cgPSAxMzsKKwlpbnQgU0VDVVJJVFlfU0NIRU1FX19GTE9XID0gMTU7CiAKIAkvKioKIAkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2VjdXJpdHkgU2NoZW1lPC9lbT4nIGNsYXNzLgpAQCAtMzY5LDcgKzM5Myw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IFNFQ1VSSVRZX1NDSEVNRV9GRUFUVVJFX0NPVU5UID0gMTQ7CisJaW50IFNFQ1VSSVRZX1NDSEVNRV9GRUFUVVJFX0NPVU5UID0gMTY7CiAKIAkvKioKIAkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuTGlua0ltcGwgPGVtPkxpbms8L2VtPn0nIGNsYXNzLgpAQCAtNDQ2LDIyICs0NzAsNDAgQEAKIAlpbnQgSU5URVJBQ1RJT05fQUZGT1JEQU5DRSA9IDQ7CiAKIAkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGl0bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19USVRMRSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19ERVNDUklQVElPTiA9IDE7CisKKwkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Rm9ybXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0ZPUk1TID0gMDsKKwlpbnQgSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fRk9STVMgPSAyOwogCiAJLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fVFlQRSA9IDE7CisJaW50IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0FUWVBFID0gMzsKIAogCS8qKgogCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnRlcmFjdGlvbiBBZmZvcmRhbmNlPC9lbT4nIGNsYXNzLgpAQCAtNDcwLDcgKzUxMiw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfRkVBVFVSRV9DT1VOVCA9IDI7CisJaW50IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfRkVBVFVSRV9DT1VOVCA9IDQ7CiAKIAkvKioKIAkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRXZlbnRBZmZvcmRhbmNlSW1wbCA8ZW0+RXZlbnQgQWZmb3JkYW5jZTwvZW0+fScgY2xhc3MuCkBAIC00ODMsNiArNTI1LDI0IEBACiAJaW50IEVWRU5UX0FGRk9SREFOQ0UgPSAzOwogCiAJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpdGxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVZFTlRfQUZGT1JEQU5DRV9fVElUTEUgPSBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19USVRMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVWRU5UX0FGRk9SREFOQ0VfX0RFU0NSSVBUSU9OID0gSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fREVTQ1JJUFRJT047CisKKwkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Rm9ybXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC00OTIsMjIgKzU1MiwyMiBAQAogCWludCBFVkVOVF9BRkZPUkRBTkNFX19GT1JNUyA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0ZPUk1TOwogCiAJLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgRVZFTlRfQUZGT1JEQU5DRV9fVFlQRSA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX1RZUEU7CisJaW50IEVWRU5UX0FGRk9SREFOQ0VfX0FUWVBFID0gSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fQVRZUEU7CiAKIAkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBTaWduYWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBSZWNlcHRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBFVkVOVF9BRkZPUkRBTkNFX19CQVNFX1NJR05BTCA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfRkVBVFVSRV9DT1VOVCArIDA7CisJaW50IEVWRU5UX0FGRk9SREFOQ0VfX0JBU0VfUkVDRVBUSU9OID0gSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9GRUFUVVJFX0NPVU5UICsgMDsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EYXRhPC9iPjwvZW0+JyByZWZlcmVuY2UuCkBAIC01NTYsNDAgKzYxNiwxMyBAQAogCWludCBGT1JNID0gNTsKIAogCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIFZhbHVlIFNwZWNpZmljYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBGT1JNX19CQVNFX1ZBTFVFX1NQRUNJRklDQVRJT04gPSBTdHJ1Y3R1cmVQYWNrYWdlLk1FVEFfVkFMVUVfU1BFQ0lGSUNBVElPTl9fQkFTRV9WQUxVRV9TUEVDSUZJQ0FUSU9OOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBGT1JNX19UWVBFID0gU3RydWN0dXJlUGFja2FnZS5NRVRBX1ZBTFVFX1NQRUNJRklDQVRJT05fX1RZUEU7Ci0KLQkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCWludCBGT1JNX19ERVNDUklQVElPTiA9IFN0cnVjdHVyZVBhY2thZ2UuTUVUQV9WQUxVRV9TUEVDSUZJQ0FUSU9OX19ERVNDUklQVElPTjsKLQotCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcDwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgRk9STV9fT1AgPSBTdHJ1Y3R1cmVQYWNrYWdlLk1FVEFfVkFMVUVfU1BFQ0lGSUNBVElPTl9GRUFUVVJFX0NPVU5UICsgMDsKKwlpbnQgRk9STV9fT1AgPSAwOwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhyZWY8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KQEAgLTU5OCw3ICs2MzEsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBGT1JNX19IUkVGID0gU3RydWN0dXJlUGFja2FnZS5NRVRBX1ZBTFVFX1NQRUNJRklDQVRJT05fRkVBVFVSRV9DT1VOVCArIDE7CisJaW50IEZPUk1fX0hSRUYgPSAxOwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbnRlbnQgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgpAQCAtNjA3LDcgKzY0MCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IEZPUk1fX0NPTlRFTlRfVFlQRSA9IFN0cnVjdHVyZVBhY2thZ2UuTUVUQV9WQUxVRV9TUEVDSUZJQ0FUSU9OX0ZFQVRVUkVfQ09VTlQgKyAyOworCWludCBGT1JNX19DT05URU5UX1RZUEUgPSAyOwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbnRlbnQgQ29kaW5nPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC02MTYsNyArNjQ5LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgRk9STV9fQ09OVEVOVF9DT0RJTkcgPSBTdHJ1Y3R1cmVQYWNrYWdlLk1FVEFfVkFMVUVfU1BFQ0lGSUNBVElPTl9GRUFUVVJFX0NPVU5UICsgMzsKKwlpbnQgRk9STV9fQ09OVEVOVF9DT0RJTkcgPSAzOwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN1YiBQcm90b2NvbDwvYj48L2VtPicgYXR0cmlidXRlLgpAQCAtNjI1LDcgKzY1OCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IEZPUk1fX1NVQl9QUk9UT0NPTCA9IFN0cnVjdHVyZVBhY2thZ2UuTUVUQV9WQUxVRV9TUEVDSUZJQ0FUSU9OX0ZFQVRVUkVfQ09VTlQgKyA0OworCWludCBGT1JNX19TVUJfUFJPVE9DT0wgPSA0OwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNjb3BlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCkBAIC02MzQsNyArNjY3LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgRk9STV9fU0NPUEVTID0gU3RydWN0dXJlUGFja2FnZS5NRVRBX1ZBTFVFX1NQRUNJRklDQVRJT05fRkVBVFVSRV9DT1VOVCArIDU7CisJaW50IEZPUk1fX1NDT1BFUyA9IDU7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVzcG9uc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KQEAgLTY0Myw3ICs2NzYsMjUgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgRk9STV9fUkVTUE9OU0UgPSBTdHJ1Y3R1cmVQYWNrYWdlLk1FVEFfVkFMVUVfU1BFQ0lGSUNBVElPTl9GRUFUVVJFX0NPVU5UICsgNjsKKwlpbnQgRk9STV9fUkVTUE9OU0UgPSA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlY3VyaXR5PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JNX19TRUNVUklUWSA9IDc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBDb21tZW50PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9STV9fQkFTRV9DT01NRU5UID0gODsKIAogCS8qKgogCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Gb3JtPC9lbT4nIGNsYXNzLgpAQCAtNjUyLDcgKzcwMyw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IEZPUk1fRkVBVFVSRV9DT1VOVCA9IFN0cnVjdHVyZVBhY2thZ2UuTUVUQV9WQUxVRV9TUEVDSUZJQ0FUSU9OX0ZFQVRVUkVfQ09VTlQgKyA3OworCWludCBGT1JNX0ZFQVRVUkVfQ09VTlQgPSA5OwogCiAJLyoqCiAJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlR5cGVJbXBsIDxlbT5UeXBlPC9lbT59JyBjbGFzcy4KQEAgLTcwMiwzMSArNzUzLDQwIEBACiAJaW50IERBVEFfU0NIRU1BID0gNzsKIAogCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaXRsZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERBVEFfU0NIRU1BX19USVRMRSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEQVRBX1NDSEVNQV9fREVTQ1JJUFRJT04gPSAxOworCisJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgVHlwZWQgRWxlbWVudDwvYj48L2VtPicgcmVmZXJlbmNlLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IERBVEFfU0NIRU1BX19CQVNFX1RZUEVEX0VMRU1FTlQgPSAwOworCWludCBEQVRBX1NDSEVNQV9fQkFTRV9UWVBFRF9FTEVNRU5UID0gMjsKIAogCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbnVtPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW51bTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgREFUQV9TQ0hFTUFfX0VOVU0gPSAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bWJlciBJbnRlcnZhbDwvYj48L2VtPicgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JaW50IERBVEFfU0NIRU1BX19OVU1CRVJfSU5URVJWQUwgPSAyOworCWludCBEQVRBX1NDSEVNQV9fRU5VTSA9IDM7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgpAQCAtNzM1LDcgKzc5NSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IERBVEFfU0NIRU1BX19SRVFVSVJFRCA9IDM7CisJaW50IERBVEFfU0NIRU1BX19SRVFVSVJFRCA9IDQ7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SXRlbXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgpAQCAtNzQ0LDcgKzgwNCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IERBVEFfU0NIRU1BX19JVEVNUyA9IDQ7CisJaW50IERBVEFfU0NIRU1BX19JVEVNUyA9IDU7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvcGVydGllczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCkBAIC03NTMsMTYgKzgxMywxNiBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBEQVRBX1NDSEVNQV9fUFJPUEVSVElFUyA9IDU7CisJaW50IERBVEFfU0NIRU1BX19QUk9QRVJUSUVTID0gNjsKIAogCS8qKgotCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QVR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IERBVEFfU0NIRU1BX19UWVBFID0gNjsKKwlpbnQgREFUQV9TQ0hFTUFfX0FUWVBFID0gNzsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Xcml0ZSBPbmx5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC03NzEsNyArODMxLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgREFUQV9TQ0hFTUFfX1dSSVRFX09OTFkgPSA3OworCWludCBEQVRBX1NDSEVNQV9fV1JJVEVfT05MWSA9IDg7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Rm9ybWF0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCkBAIC03ODAsNyArODQwLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgREFUQV9TQ0hFTUFfX0ZPUk1BVCA9IDg7CisJaW50IERBVEFfU0NIRU1BX19GT1JNQVQgPSA5OwogCiAJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9uZSBPZjwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCkBAIC03ODksNyArODQ5LDUyIEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IERBVEFfU0NIRU1BX19PTkVfT0YgPSA5OworCWludCBEQVRBX1NDSEVNQV9fT05FX09GID0gMTA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERBVEFfU0NIRU1BX19UWVBFID0gMTE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29uc3Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEQVRBX1NDSEVNQV9fQ09OU1QgPSAxMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaW4gSXRlbXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEQVRBX1NDSEVNQV9fTUlOX0lURU1TID0gMTM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWF4IEl0ZW1zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREFUQV9TQ0hFTUFfX01BWF9JVEVNUyA9IDE0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlYWQgT25seTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERBVEFfU0NIRU1BX19SRUFEX09OTFkgPSAxNTsKIAogCS8qKgogCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EYXRhIFNjaGVtYTwvZW0+JyBjbGFzcy4KQEAgLTc5OCw3ICs5MDMsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBEQVRBX1NDSEVNQV9GRUFUVVJFX0NPVU5UID0gMTA7CisJaW50IERBVEFfU0NIRU1BX0ZFQVRVUkVfQ09VTlQgPSAxNjsKIAogCS8qKgogCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5BY3Rpb25BZmZvcmRhbmNlSW1wbCA8ZW0+QWN0aW9uIEFmZm9yZGFuY2U8L2VtPn0nIGNsYXNzLgpAQCAtODExLDYgKzkxNiwyNCBAQAogCWludCBBQ1RJT05fQUZGT1JEQU5DRSA9IDg7CiAKIAkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGl0bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBQ1RJT05fQUZGT1JEQU5DRV9fVElUTEUgPSBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19USVRMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFDVElPTl9BRkZPUkRBTkNFX19ERVNDUklQVElPTiA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0RFU0NSSVBUSU9OOworCisJLyoqCiAJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZvcm1zPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgpAQCAtODIwLDEzICs5NDMsMjIgQEAKIAlpbnQgQUNUSU9OX0FGRk9SREFOQ0VfX0ZPUk1TID0gSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fRk9STVM7CiAKIAkvKioKLQkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCWludCBBQ1RJT05fQUZGT1JEQU5DRV9fVFlQRSA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX1RZUEU7CisJaW50IEFDVElPTl9BRkZPUkRBTkNFX19BVFlQRSA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0FUWVBFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgT3BlcmF0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQUNUSU9OX0FGRk9SREFOQ0VfX0JBU0VfT1BFUkFUSU9OID0gSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9GRUFUVVJFX0NPVU5UICsgMDsKIAogCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbnB1dDwvYj48L2VtPicgcmVmZXJlbmNlLgpAQCAtODM1LDcgKzk2Nyw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IEFDVElPTl9BRkZPUkRBTkNFX19JTlBVVCA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfRkVBVFVSRV9DT1VOVCArIDA7CisJaW50IEFDVElPTl9BRkZPUkRBTkNFX19JTlBVVCA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfRkVBVFVSRV9DT1VOVCArIDE7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3V0cHV0PC9iPjwvZW0+JyByZWZlcmVuY2UuCkBAIC04NDQsMTYgKzk3Niw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JaW50IEFDVElPTl9BRkZPUkRBTkNFX19PVVRQVVQgPSBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX0ZFQVRVUkVfQ09VTlQgKyAxOwotCi0JLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQmVoYXZpb3JhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlpbnQgQUNUSU9OX0FGRk9SREFOQ0VfX0JBU0VfQkVIQVZJT1JBTF9GRUFUVVJFID0gSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9GRUFUVVJFX0NPVU5UICsgMjsKKwlpbnQgQUNUSU9OX0FGRk9SREFOQ0VfX09VVFBVVCA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfRkVBVFVSRV9DT1VOVCArIDI7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2FmZTwvYj48L2VtPicgYXR0cmlidXRlLgpAQCAtODkzLDYgKzEwMTYsMjQgQEAKIAlpbnQgUFJPUEVSVFlfQUZGT1JEQU5DRSA9IDk7CiAKIAkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGl0bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9QRVJUWV9BRkZPUkRBTkNFX19USVRMRSA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX1RJVExFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPUEVSVFlfQUZGT1JEQU5DRV9fREVTQ1JJUFRJT04gPSBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19ERVNDUklQVElPTjsKKworCS8qKgogCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Gb3JtczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTkwMiwxMyArMTA0MywxMyBAQAogCWludCBQUk9QRVJUWV9BRkZPUkRBTkNFX19GT1JNUyA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0ZPUk1TOwogCiAJLyoqCi0JICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlpbnQgUFJPUEVSVFlfQUZGT1JEQU5DRV9fVFlQRSA9IElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX1RZUEU7CisJaW50IFBST1BFUlRZX0FGRk9SREFOQ0VfX0FUWVBFID0gSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fQVRZUEU7CiAKIAkvKioKIAkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T2JzZXJ2YWJsZTwvYj48L2VtPicgYXR0cmlidXRlLgpAQCAtMTA1Nyw2ICsxMTk4LDI4IEBACiAJRUNsYXNzIGdldFRoaW5nKCk7CiAKIAkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldFRpdGxlIDxlbT5UaXRsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpdGxlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0VGl0bGUoKQorCSAqIEBzZWUgI2dldFRoaW5nKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUaGluZ19UaXRsZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldERlc2NyaXB0aW9uKCkKKwkgKiBAc2VlICNnZXRUaGluZygpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VGhpbmdfRGVzY3JpcHRpb24oKTsKKworCS8qKgogCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0QmFzZSA8ZW0+QmFzZTwvZW0+fScuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTEwOTAsNiArMTI1MywxNyBAQAogCUVBdHRyaWJ1dGUgZ2V0VGhpbmdfU3VwcG9ydCgpOwogCiAJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldFNlY3VyaXR5IDxlbT5TZWN1cml0eTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+U2VjdXJpdHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRTZWN1cml0eSgpCisJICogQHNlZSAjZ2V0VGhpbmcoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFRoaW5nX1NlY3VyaXR5KCk7CisKKwkvKioKIAkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0U2VjdXJpdHlEZWZpbml0aW9ucyA8ZW0+U2VjdXJpdHkgRGVmaW5pdGlvbnM8L2VtPn0nLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0xMTU2LDI2ICsxMzMwLDI2IEBACiAJRUF0dHJpYnV0ZSBnZXRUaGluZ19WZXJzaW9uKCk7CiAKIAkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0VHlwZSA8ZW0+VHlwZTwvZW0+fScuCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldEFUeXBlIDxlbT5BVHlwZTwvZW0+fScuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+VHlwZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldFR5cGUoKQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5BVHlwZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldEFUeXBlKCkKIAkgKiBAc2VlICNnZXRUaGluZygpCiAJICogQGdlbmVyYXRlZAogCSAqLwotCUVSZWZlcmVuY2UgZ2V0VGhpbmdfVHlwZSgpOworCUVSZWZlcmVuY2UgZ2V0VGhpbmdfQVR5cGUoKTsKIAogCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZyNnZXRDb250ZXh0IDxlbT5Db250ZXh0PC9lbT59Jy4KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0QUNvbnRleHQgPGVtPkFDb250ZXh0PC9lbT59Jy4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5Db250ZXh0PC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0Q29udGV4dCgpCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkFDb250ZXh0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0QUNvbnRleHQoKQogCSAqIEBzZWUgI2dldFRoaW5nKCkKIAkgKiBAZ2VuZXJhdGVkCiAJICovCi0JRVJlZmVyZW5jZSBnZXRUaGluZ19Db250ZXh0KCk7CisJRVJlZmVyZW5jZSBnZXRUaGluZ19BQ29udGV4dCgpOwogCiAJLyoqCiAJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldEZvcm1zIDxlbT5Gb3JtczwvZW0+fScuCkBAIC0xMTg5LDYgKzEzNjMsMTcgQEAKIAlFUmVmZXJlbmNlIGdldFRoaW5nX0Zvcm1zKCk7CiAKIAkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlRoaW5nI2dldEJhc2VfQ2xhc3MgPGVtPkJhc2UgQ2xhc3M8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIENsYXNzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVGhpbmcjZ2V0QmFzZV9DbGFzcygpCisJICogQHNlZSAjZ2V0VGhpbmcoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFRoaW5nX0Jhc2VfQ2xhc3MoKTsKKworCS8qKgogCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlNlY3VyaXR5U2NoZW1lIDxlbT5TZWN1cml0eSBTY2hlbWU8L2VtPn0nLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0xMjEwLDYgKzEzOTUsMjggQEAKIAlFUmVmZXJlbmNlIGdldFNlY3VyaXR5U2NoZW1lX0Jhc2VfQ2xhc3NpZmllcigpOwogCiAJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5TZWN1cml0eVNjaGVtZSNnZXRUaXRsZSA8ZW0+VGl0bGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UaXRsZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlNlY3VyaXR5U2NoZW1lI2dldFRpdGxlKCkKKwkgKiBAc2VlICNnZXRTZWN1cml0eVNjaGVtZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfVGl0bGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuU2VjdXJpdHlTY2hlbWUjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5TZWN1cml0eVNjaGVtZSNnZXREZXNjcmlwdGlvbigpCisJICogQHNlZSAjZ2V0U2VjdXJpdHlTY2hlbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNlY3VyaXR5U2NoZW1lX0Rlc2NyaXB0aW9uKCk7CisKKwkvKioKIAkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlNlY3VyaXR5U2NoZW1lI2dldFNjaGVtZSA8ZW0+U2NoZW1lPC9lbT59Jy4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgpAQCAtMTQyOCwxNyArMTYzNSw2IEBACiAJRUNsYXNzIGdldEV2ZW50QWZmb3JkYW5jZSgpOwogCiAJLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5FdmVudEFmZm9yZGFuY2UjZ2V0QmFzZV9TaWduYWwgPGVtPkJhc2UgU2lnbmFsPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBTaWduYWw8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5FdmVudEFmZm9yZGFuY2UjZ2V0QmFzZV9TaWduYWwoKQotCSAqIEBzZWUgI2dldEV2ZW50QWZmb3JkYW5jZSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RXZlbnRBZmZvcmRhbmNlX0Jhc2VfU2lnbmFsKCk7Ci0KLQkvKioKIAkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkV2ZW50QWZmb3JkYW5jZSNnZXREYXRhIDxlbT5EYXRhPC9lbT59Jy4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgpAQCAtMTQ3Miw2ICsxNjY4LDE3IEBACiAJRVJlZmVyZW5jZSBnZXRFdmVudEFmZm9yZGFuY2VfQ2FuY2VsbGF0aW9uKCk7CiAKIAkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkV2ZW50QWZmb3JkYW5jZSNnZXRCYXNlX1JlY2VwdGlvbiA8ZW0+QmFzZSBSZWNlcHRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIFJlY2VwdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkV2ZW50QWZmb3JkYW5jZSNnZXRCYXNlX1JlY2VwdGlvbigpCisJICogQHNlZSAjZ2V0RXZlbnRBZmZvcmRhbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRFdmVudEFmZm9yZGFuY2VfQmFzZV9SZWNlcHRpb24oKTsKKworCS8qKgogCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkludGVyYWN0aW9uQWZmb3JkYW5jZSA8ZW0+SW50ZXJhY3Rpb24gQWZmb3JkYW5jZTwvZW0+fScuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTE0ODIsNiArMTY4OSwyOCBAQAogCUVDbGFzcyBnZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2UoKTsKIAogCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuSW50ZXJhY3Rpb25BZmZvcmRhbmNlI2dldFRpdGxlIDxlbT5UaXRsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpdGxlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuSW50ZXJhY3Rpb25BZmZvcmRhbmNlI2dldFRpdGxlKCkKKwkgKiBAc2VlICNnZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEludGVyYWN0aW9uQWZmb3JkYW5jZV9UaXRsZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5JbnRlcmFjdGlvbkFmZm9yZGFuY2UjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5JbnRlcmFjdGlvbkFmZm9yZGFuY2UjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBzZWUgI2dldEludGVyYWN0aW9uQWZmb3JkYW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX0Rlc2NyaXB0aW9uKCk7CisKKwkvKioKIAkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuSW50ZXJhY3Rpb25BZmZvcmRhbmNlI2dldEZvcm1zIDxlbT5Gb3JtczwvZW0+fScuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTE0OTMsMTUgKzE3MjIsMTUgQEAKIAlFUmVmZXJlbmNlIGdldEludGVyYWN0aW9uQWZmb3JkYW5jZV9Gb3JtcygpOwogCiAJLyoqCi0JICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkludGVyYWN0aW9uQWZmb3JkYW5jZSNnZXRUeXBlIDxlbT5UeXBlPC9lbT59Jy4KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuSW50ZXJhY3Rpb25BZmZvcmRhbmNlI2dldEFUeXBlIDxlbT5BVHlwZTwvZW0+fScuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+VHlwZTwvZW0+Jy4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkludGVyYWN0aW9uQWZmb3JkYW5jZSNnZXRUeXBlKCkKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+QVR5cGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5JbnRlcmFjdGlvbkFmZm9yZGFuY2UjZ2V0QVR5cGUoKQogCSAqIEBzZWUgI2dldEludGVyYWN0aW9uQWZmb3JkYW5jZSgpCiAJICogQGdlbmVyYXRlZAogCSAqLwotCUVSZWZlcmVuY2UgZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX1R5cGUoKTsKKwlFUmVmZXJlbmNlIGdldEludGVyYWN0aW9uQWZmb3JkYW5jZV9BVHlwZSgpOwogCiAJLyoqCiAJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRm9ybSA8ZW0+Rm9ybTwvZW0+fScuCkBAIC0xNTkxLDYgKzE4MjAsMjggQEAKIAlFQXR0cmlidXRlIGdldEZvcm1fUmVzcG9uc2UoKTsKIAogCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Gb3JtI2dldFNlY3VyaXR5IDxlbT5TZWN1cml0eTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+U2VjdXJpdHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Gb3JtI2dldFNlY3VyaXR5KCkKKwkgKiBAc2VlICNnZXRGb3JtKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRGb3JtX1NlY3VyaXR5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkZvcm0jZ2V0QmFzZV9Db21tZW50IDxlbT5CYXNlIENvbW1lbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIENvbW1lbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Gb3JtI2dldEJhc2VfQ29tbWVudCgpCisJICogQHNlZSAjZ2V0Rm9ybSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0Rm9ybV9CYXNlX0NvbW1lbnQoKTsKKworCS8qKgogCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LlR5cGUgPGVtPlR5cGU8L2VtPn0nLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0xNjMzLDYgKzE4ODQsMjggQEAKIAlFQ2xhc3MgZ2V0RGF0YVNjaGVtYSgpOwogCiAJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldFRpdGxlIDxlbT5UaXRsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpdGxlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRUaXRsZSgpCisJICogQHNlZSAjZ2V0RGF0YVNjaGVtYSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGF0YVNjaGVtYV9UaXRsZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlc2NyaXB0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXREZXNjcmlwdGlvbigpCisJICogQHNlZSAjZ2V0RGF0YVNjaGVtYSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGF0YVNjaGVtYV9EZXNjcmlwdGlvbigpOworCisJLyoqCiAJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldEJhc2VfVHlwZWRFbGVtZW50IDxlbT5CYXNlIFR5cGVkIEVsZW1lbnQ8L2VtPn0nLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0xNjQ0LDI2ICsxOTE3LDE1IEBACiAJRVJlZmVyZW5jZSBnZXREYXRhU2NoZW1hX0Jhc2VfVHlwZWRFbGVtZW50KCk7CiAKIAkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRFbnVtIDxlbT5FbnVtPC9lbT59Jy4KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRFbnVtIDxlbT5FbnVtPC9lbT59Jy4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5FbnVtPC9lbT4nLgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5FbnVtPC9lbT4nLgogCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRFbnVtKCkKIAkgKiBAc2VlICNnZXREYXRhU2NoZW1hKCkKIAkgKiBAZ2VuZXJhdGVkCiAJICovCi0JRVJlZmVyZW5jZSBnZXREYXRhU2NoZW1hX0VudW0oKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXROdW1iZXJJbnRlcnZhbCA8ZW0+TnVtYmVyIEludGVydmFsPC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+TnVtYmVyIEludGVydmFsPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXROdW1iZXJJbnRlcnZhbCgpCi0JICogQHNlZSAjZ2V0RGF0YVNjaGVtYSgpCi0JICogQGdlbmVyYXRlZAotCSAqLwotCUVSZWZlcmVuY2UgZ2V0RGF0YVNjaGVtYV9OdW1iZXJJbnRlcnZhbCgpOworCUVBdHRyaWJ1dGUgZ2V0RGF0YVNjaGVtYV9FbnVtKCk7CiAKIAkvKioKIAkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRSZXF1aXJlZCA8ZW0+UmVxdWlyZWQ8L2VtPn0nLgpAQCAtMTY5OSwxNSArMTk2MSwxNSBAQAogCUVSZWZlcmVuY2UgZ2V0RGF0YVNjaGVtYV9Qcm9wZXJ0aWVzKCk7CiAKIAkvKioKLQkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRUeXBlIDxlbT5UeXBlPC9lbT59Jy4KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRBVHlwZSA8ZW0+QVR5cGU8L2VtPn0nLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPlR5cGU8L2VtPicuCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldFR5cGUoKQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5BVHlwZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjZ2V0QVR5cGUoKQogCSAqIEBzZWUgI2dldERhdGFTY2hlbWEoKQogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KLQlFUmVmZXJlbmNlIGdldERhdGFTY2hlbWFfVHlwZSgpOworCUVSZWZlcmVuY2UgZ2V0RGF0YVNjaGVtYV9BVHlwZSgpOwogCiAJLyoqCiAJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2lzV3JpdGVPbmx5IDxlbT5Xcml0ZSBPbmx5PC9lbT59Jy4KQEAgLTE3NDMsNiArMjAwNSw2MSBAQAogCUVSZWZlcmVuY2UgZ2V0RGF0YVNjaGVtYV9PbmVPZigpOwogCiAJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldFR5cGUgPGVtPlR5cGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UeXBlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRUeXBlKCkKKwkgKiBAc2VlICNnZXREYXRhU2NoZW1hKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREYXRhU2NoZW1hX1R5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRDb25zdCA8ZW0+Q29uc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Db25zdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjZ2V0Q29uc3QoKQorCSAqIEBzZWUgI2dldERhdGFTY2hlbWEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERhdGFTY2hlbWFfQ29uc3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRNaW5JdGVtcyA8ZW0+TWluIEl0ZW1zPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TWluIEl0ZW1zPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNnZXRNaW5JdGVtcygpCisJICogQHNlZSAjZ2V0RGF0YVNjaGVtYSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGF0YVNjaGVtYV9NaW5JdGVtcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldE1heEl0ZW1zIDxlbT5NYXggSXRlbXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5NYXggSXRlbXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5EYXRhU2NoZW1hI2dldE1heEl0ZW1zKCkKKwkgKiBAc2VlICNnZXREYXRhU2NoZW1hKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREYXRhU2NoZW1hX01heEl0ZW1zKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWEjaXNSZWFkT25seSA8ZW0+UmVhZCBPbmx5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVhZCBPbmx5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRGF0YVNjaGVtYSNpc1JlYWRPbmx5KCkKKwkgKiBAc2VlICNnZXREYXRhU2NoZW1hKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREYXRhU2NoZW1hX1JlYWRPbmx5KCk7CisKKwkvKioKIAkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5BY3Rpb25BZmZvcmRhbmNlIDxlbT5BY3Rpb24gQWZmb3JkYW5jZTwvZW0+fScuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTE3NzUsMTcgKzIwOTIsNiBAQAogCUVSZWZlcmVuY2UgZ2V0QWN0aW9uQWZmb3JkYW5jZV9PdXRwdXQoKTsKIAogCS8qKgotCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuQWN0aW9uQWZmb3JkYW5jZSNnZXRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlIDxlbT5CYXNlIEJlaGF2aW9yYWwgRmVhdHVyZTwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgQmVoYXZpb3JhbCBGZWF0dXJlPC9lbT4nLgotCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuQWN0aW9uQWZmb3JkYW5jZSNnZXRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlKCkKLQkgKiBAc2VlICNnZXRBY3Rpb25BZmZvcmRhbmNlKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JRVJlZmVyZW5jZSBnZXRBY3Rpb25BZmZvcmRhbmNlX0Jhc2VfQmVoYXZpb3JhbEZlYXR1cmUoKTsKLQotCS8qKgogCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuQWN0aW9uQWZmb3JkYW5jZSNpc1NhZmUgPGVtPlNhZmU8L2VtPn0nLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0xODA4LDYgKzIxMTQsMTcgQEAKIAlFQXR0cmlidXRlIGdldEFjdGlvbkFmZm9yZGFuY2VfSWRlbXBvdGVudCgpOwogCiAJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5BY3Rpb25BZmZvcmRhbmNlI2dldEJhc2VfT3BlcmF0aW9uIDxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgT3BlcmF0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuQWN0aW9uQWZmb3JkYW5jZSNnZXRCYXNlX09wZXJhdGlvbigpCisJICogQHNlZSAjZ2V0QWN0aW9uQWZmb3JkYW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0QWN0aW9uQWZmb3JkYW5jZV9CYXNlX09wZXJhdGlvbigpOworCisJLyoqCiAJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuUHJvcGVydHlBZmZvcmRhbmNlIDxlbT5Qcm9wZXJ0eSBBZmZvcmRhbmNlPC9lbT59Jy4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgpAQCAtMTk3Myw2ICsyMjkwLDIyIEBACiAJCUVDbGFzcyBUSElORyA9IGVJTlNUQU5DRS5nZXRUaGluZygpOwogCiAJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGl0bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBUSElOR19fVElUTEUgPSBlSU5TVEFOQ0UuZ2V0VGhpbmdfVGl0bGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVEhJTkdfX0RFU0NSSVBUSU9OID0gZUlOU1RBTkNFLmdldFRoaW5nX0Rlc2NyaXB0aW9uKCk7CisKKwkJLyoqCiAJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KIAkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0xOTk3LDYgKzIzMzAsMTQgQEAKIAkJRUF0dHJpYnV0ZSBUSElOR19fU1VQUE9SVCA9IGVJTlNUQU5DRS5nZXRUaGluZ19TdXBwb3J0KCk7CiAKIAkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TZWN1cml0eTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVEhJTkdfX1NFQ1VSSVRZID0gZUlOU1RBTkNFLmdldFRoaW5nX1NlY3VyaXR5KCk7CisKKwkJLyoqCiAJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TZWN1cml0eSBEZWZpbml0aW9uczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KIAkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0yMDQ1LDIwICsyMzg2LDIwIEBACiAJCUVBdHRyaWJ1dGUgVEhJTkdfX1ZFUlNJT04gPSBlSU5TVEFOQ0UuZ2V0VGhpbmdfVmVyc2lvbigpOwogCiAJCS8qKgotCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkFUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgogCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkJICogQGdlbmVyYXRlZAogCQkgKi8KLQkJRVJlZmVyZW5jZSBUSElOR19fVFlQRSA9IGVJTlNUQU5DRS5nZXRUaGluZ19UeXBlKCk7CisJCUVSZWZlcmVuY2UgVEhJTkdfX0FUWVBFID0gZUlOU1RBTkNFLmdldFRoaW5nX0FUeXBlKCk7CiAKIAkJLyoqCi0JCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Db250ZXh0PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QUNvbnRleHQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCiAJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogCQkgKiBAZ2VuZXJhdGVkCiAJCSAqLwotCQlFUmVmZXJlbmNlIFRISU5HX19DT05URVhUID0gZUlOU1RBTkNFLmdldFRoaW5nX0NvbnRleHQoKTsKKwkJRVJlZmVyZW5jZSBUSElOR19fQUNPTlRFWFQgPSBlSU5TVEFOQ0UuZ2V0VGhpbmdfQUNvbnRleHQoKTsKIAogCQkvKioKIAkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZvcm1zPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgpAQCAtMjA2OSw2ICsyNDEwLDE0IEBACiAJCUVSZWZlcmVuY2UgVEhJTkdfX0ZPUk1TID0gZUlOU1RBTkNFLmdldFRoaW5nX0Zvcm1zKCk7CiAKIAkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIENsYXNzPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVEhJTkdfX0JBU0VfQ0xBU1MgPSBlSU5TVEFOQ0UuZ2V0VGhpbmdfQmFzZV9DbGFzcygpOworCisJCS8qKgogCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5TZWN1cml0eVNjaGVtZUltcGwgPGVtPlNlY3VyaXR5IFNjaGVtZTwvZW0+fScgY2xhc3MuCiAJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgpAQCAtMjA4Nyw2ICsyNDM2LDIyIEBACiAJCUVSZWZlcmVuY2UgU0VDVVJJVFlfU0NIRU1FX19CQVNFX0NMQVNTSUZJRVIgPSBlSU5TVEFOQ0UuZ2V0U2VjdXJpdHlTY2hlbWVfQmFzZV9DbGFzc2lmaWVyKCk7CiAKIAkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UaXRsZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFQ1VSSVRZX1NDSEVNRV9fVElUTEUgPSBlSU5TVEFOQ0UuZ2V0U2VjdXJpdHlTY2hlbWVfVGl0bGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0VDVVJJVFlfU0NIRU1FX19ERVNDUklQVElPTiA9IGVJTlNUQU5DRS5nZXRTZWN1cml0eVNjaGVtZV9EZXNjcmlwdGlvbigpOworCisJCS8qKgogCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2NoZW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KIAkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0yMjUxLDE0ICsyNjE2LDYgQEAKIAkJRUNsYXNzIEVWRU5UX0FGRk9SREFOQ0UgPSBlSU5TVEFOQ0UuZ2V0RXZlbnRBZmZvcmRhbmNlKCk7CiAKIAkJLyoqCi0JCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIFNpZ25hbDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0JCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCQkgKiBAZ2VuZXJhdGVkCi0JCSAqLwotCQlFUmVmZXJlbmNlIEVWRU5UX0FGRk9SREFOQ0VfX0JBU0VfU0lHTkFMID0gZUlOU1RBTkNFLmdldEV2ZW50QWZmb3JkYW5jZV9CYXNlX1NpZ25hbCgpOwotCi0JCS8qKgogCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGF0YTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCiAJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgpAQCAtMjI4Myw2ICsyNjQwLDE0IEBACiAJCUVSZWZlcmVuY2UgRVZFTlRfQUZGT1JEQU5DRV9fQ0FOQ0VMTEFUSU9OID0gZUlOU1RBTkNFLmdldEV2ZW50QWZmb3JkYW5jZV9DYW5jZWxsYXRpb24oKTsKIAogCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgUmVjZXB0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRVZFTlRfQUZGT1JEQU5DRV9fQkFTRV9SRUNFUFRJT04gPSBlSU5TVEFOQ0UuZ2V0RXZlbnRBZmZvcmRhbmNlX0Jhc2VfUmVjZXB0aW9uKCk7CisKKwkJLyoqCiAJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkludGVyYWN0aW9uQWZmb3JkYW5jZUltcGwgPGVtPkludGVyYWN0aW9uIEFmZm9yZGFuY2U8L2VtPn0nIGNsYXNzLgogCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTIyOTMsNiArMjY1OCwyMiBAQAogCQlFQ2xhc3MgSU5URVJBQ1RJT05fQUZGT1JEQU5DRSA9IGVJTlNUQU5DRS5nZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2UoKTsKIAogCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRpdGxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fVElUTEUgPSBlSU5TVEFOQ0UuZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX1RpdGxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZXNjcmlwdGlvbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0RFU0NSSVBUSU9OID0gZUlOU1RBTkNFLmdldEludGVyYWN0aW9uQWZmb3JkYW5jZV9EZXNjcmlwdGlvbigpOworCisJCS8qKgogCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Rm9ybXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCiAJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgpAQCAtMjMwMSwxMiArMjY4MiwxMiBAQAogCQlFUmVmZXJlbmNlIElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0ZPUk1TID0gZUlOU1RBTkNFLmdldEludGVyYWN0aW9uQWZmb3JkYW5jZV9Gb3JtcygpOwogCiAJCS8qKgotCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkFUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgogCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkJICogQGdlbmVyYXRlZAogCQkgKi8KLQkJRVJlZmVyZW5jZSBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19UWVBFID0gZUlOU1RBTkNFLmdldEludGVyYWN0aW9uQWZmb3JkYW5jZV9UeXBlKCk7CisJCUVSZWZlcmVuY2UgSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fQVRZUEUgPSBlSU5TVEFOQ0UuZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX0FUeXBlKCk7CiAKIAkJLyoqCiAJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkZvcm1JbXBsIDxlbT5Gb3JtPC9lbT59JyBjbGFzcy4KQEAgLTIzNzUsNiArMjc1NiwyMiBAQAogCQlFQXR0cmlidXRlIEZPUk1fX1JFU1BPTlNFID0gZUlOU1RBTkNFLmdldEZvcm1fUmVzcG9uc2UoKTsKIAogCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlY3VyaXR5PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBGT1JNX19TRUNVUklUWSA9IGVJTlNUQU5DRS5nZXRGb3JtX1NlY3VyaXR5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIENvbW1lbnQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBGT1JNX19CQVNFX0NPTU1FTlQgPSBlSU5TVEFOQ0UuZ2V0Rm9ybV9CYXNlX0NvbW1lbnQoKTsKKworCQkvKioKIAkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuVHlwZUltcGwgPGVtPlR5cGU8L2VtPn0nIGNsYXNzLgogCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTI0MTEsNiArMjgwOCwyMiBAQAogCQlFQ2xhc3MgREFUQV9TQ0hFTUEgPSBlSU5TVEFOQ0UuZ2V0RGF0YVNjaGVtYSgpOwogCiAJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGl0bGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEQVRBX1NDSEVNQV9fVElUTEUgPSBlSU5TVEFOQ0UuZ2V0RGF0YVNjaGVtYV9UaXRsZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVzY3JpcHRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEQVRBX1NDSEVNQV9fREVTQ1JJUFRJT04gPSBlSU5TVEFOQ0UuZ2V0RGF0YVNjaGVtYV9EZXNjcmlwdGlvbigpOworCisJCS8qKgogCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBUeXBlZCBFbGVtZW50PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KIAkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0yNDE5LDIwICsyODMyLDEyIEBACiAJCUVSZWZlcmVuY2UgREFUQV9TQ0hFTUFfX0JBU0VfVFlQRURfRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXREYXRhU2NoZW1hX0Jhc2VfVHlwZWRFbGVtZW50KCk7CiAKIAkJLyoqCi0JCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbnVtPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW51bTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KIAkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJCSAqIEBnZW5lcmF0ZWQKIAkJICovCi0JCUVSZWZlcmVuY2UgREFUQV9TQ0hFTUFfX0VOVU0gPSBlSU5TVEFOQ0UuZ2V0RGF0YVNjaGVtYV9FbnVtKCk7Ci0KLQkJLyoqCi0JCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW1iZXIgSW50ZXJ2YWw8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgotCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkJICogQGdlbmVyYXRlZAotCQkgKi8KLQkJRVJlZmVyZW5jZSBEQVRBX1NDSEVNQV9fTlVNQkVSX0lOVEVSVkFMID0gZUlOU1RBTkNFLmdldERhdGFTY2hlbWFfTnVtYmVySW50ZXJ2YWwoKTsKKwkJRUF0dHJpYnV0ZSBEQVRBX1NDSEVNQV9fRU5VTSA9IGVJTlNUQU5DRS5nZXREYXRhU2NoZW1hX0VudW0oKTsKIAogCQkvKioKIAkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgpAQCAtMjQ1OSwxMiArMjg2NCwxMiBAQAogCQlFUmVmZXJlbmNlIERBVEFfU0NIRU1BX19QUk9QRVJUSUVTID0gZUlOU1RBTkNFLmdldERhdGFTY2hlbWFfUHJvcGVydGllcygpOwogCiAJCS8qKgotCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkFUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgogCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkJICogQGdlbmVyYXRlZAogCQkgKi8KLQkJRVJlZmVyZW5jZSBEQVRBX1NDSEVNQV9fVFlQRSA9IGVJTlNUQU5DRS5nZXREYXRhU2NoZW1hX1R5cGUoKTsKKwkJRVJlZmVyZW5jZSBEQVRBX1NDSEVNQV9fQVRZUEUgPSBlSU5TVEFOQ0UuZ2V0RGF0YVNjaGVtYV9BVHlwZSgpOwogCiAJCS8qKgogCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+V3JpdGUgT25seTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCkBAIC0yNDkxLDYgKzI4OTYsNDYgQEAKIAkJRVJlZmVyZW5jZSBEQVRBX1NDSEVNQV9fT05FX09GID0gZUlOU1RBTkNFLmdldERhdGFTY2hlbWFfT25lT2YoKTsKIAogCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEQVRBX1NDSEVNQV9fVFlQRSA9IGVJTlNUQU5DRS5nZXREYXRhU2NoZW1hX1R5cGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvbnN0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREFUQV9TQ0hFTUFfX0NPTlNUID0gZUlOU1RBTkNFLmdldERhdGFTY2hlbWFfQ29uc3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1pbiBJdGVtczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERBVEFfU0NIRU1BX19NSU5fSVRFTVMgPSBlSU5TVEFOQ0UuZ2V0RGF0YVNjaGVtYV9NaW5JdGVtcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TWF4IEl0ZW1zPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREFUQV9TQ0hFTUFfX01BWF9JVEVNUyA9IGVJTlNUQU5DRS5nZXREYXRhU2NoZW1hX01heEl0ZW1zKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SZWFkIE9ubHk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEQVRBX1NDSEVNQV9fUkVBRF9PTkxZID0gZUlOU1RBTkNFLmdldERhdGFTY2hlbWFfUmVhZE9ubHkoKTsKKworCQkvKioKIAkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuQWN0aW9uQWZmb3JkYW5jZUltcGwgPGVtPkFjdGlvbiBBZmZvcmRhbmNlPC9lbT59JyBjbGFzcy4KIAkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0yNTE3LDE0ICsyOTYyLDYgQEAKIAkJRVJlZmVyZW5jZSBBQ1RJT05fQUZGT1JEQU5DRV9fT1VUUFVUID0gZUlOU1RBTkNFLmdldEFjdGlvbkFmZm9yZGFuY2VfT3V0cHV0KCk7CiAKIAkJLyoqCi0JCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIEJlaGF2aW9yYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCi0JCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCQkgKiBAZ2VuZXJhdGVkCi0JCSAqLwotCQlFUmVmZXJlbmNlIEFDVElPTl9BRkZPUkRBTkNFX19CQVNFX0JFSEFWSU9SQUxfRkVBVFVSRSA9IGVJTlNUQU5DRS5nZXRBY3Rpb25BZmZvcmRhbmNlX0Jhc2VfQmVoYXZpb3JhbEZlYXR1cmUoKTsKLQotCQkvKioKIAkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNhZmU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgogCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTI1NDEsNiArMjk3OCwxNCBAQAogCQlFQXR0cmlidXRlIEFDVElPTl9BRkZPUkRBTkNFX19JREVNUE9URU5UID0gZUlOU1RBTkNFLmdldEFjdGlvbkFmZm9yZGFuY2VfSWRlbXBvdGVudCgpOwogCiAJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBBQ1RJT05fQUZGT1JEQU5DRV9fQkFTRV9PUEVSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0QWN0aW9uQWZmb3JkYW5jZV9CYXNlX09wZXJhdGlvbigpOworCisJCS8qKgogCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5Qcm9wZXJ0eUFmZm9yZGFuY2VJbXBsIDxlbT5Qcm9wZXJ0eSBBZmZvcmRhbmNlPC9lbT59JyBjbGFzcy4KIAkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL0FjdGlvbkFmZm9yZGFuY2VJbXBsLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL0FjdGlvbkFmZm9yZGFuY2VJbXBsLmphdmEKaW5kZXggYmMwMDFhNC4uOGNhMTU5NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9BY3Rpb25BZmZvcmRhbmNlSW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvQWN0aW9uQWZmb3JkYW5jZUltcGwuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbDsKQEAgLTI1LDYgKzI2LDEzIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZTsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkJlaGF2aW9yYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5QYXJhbWV0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwudXRpbC5VTUxVdGlsOworCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbkdldHRlcjsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uSWdub3JlOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25Qcm9wZXJ0eU9yZGVyOwogCiAvKioKICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CkBAIC0zNCw0NSArNDIsMjYgQEAKICAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgogICogPC9wPgogICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuQWN0aW9uQWZmb3JkYW5jZUltcGwjZ2V0QmFzZV9PcGVyYXRpb24gPGVtPkJhc2UgT3BlcmF0aW9uPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkFjdGlvbkFmZm9yZGFuY2VJbXBsI2dldElucHV0IDxlbT5JbnB1dDwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5BY3Rpb25BZmZvcmRhbmNlSW1wbCNnZXRPdXRwdXQgPGVtPk91dHB1dDwvZW0+fTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5BY3Rpb25BZmZvcmRhbmNlSW1wbCNnZXRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlIDxlbT5CYXNlIEJlaGF2aW9yYWwgRmVhdHVyZTwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5BY3Rpb25BZmZvcmRhbmNlSW1wbCNpc1NhZmUgPGVtPlNhZmU8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuQWN0aW9uQWZmb3JkYW5jZUltcGwjaXNJZGVtcG90ZW50IDxlbT5JZGVtcG90ZW50PC9lbT59PC9saT4KICAqIDwvdWw+CiAgKgogICogQGdlbmVyYXRlZAogICovCitASnNvblByb3BlcnR5T3JkZXIoeyJAdHlwZSIsICJ0aXRsZSIsICJkZXNjcmlwdGlvbiIsICJpbnB1dCIsICJvdXRwdXQiLCAic2FmZSIsICJpZGVtcG90ZW50In0pCiBwdWJsaWMgY2xhc3MgQWN0aW9uQWZmb3JkYW5jZUltcGwgZXh0ZW5kcyBJbnRlcmFjdGlvbkFmZm9yZGFuY2VJbXBsIGltcGxlbWVudHMgQWN0aW9uQWZmb3JkYW5jZSB7CiAJLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5wdXQoKSA8ZW0+SW5wdXQ8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX09wZXJhdGlvbigpIDxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+fScgcmVmZXJlbmNlLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0SW5wdXQoKQorCSAqIEBzZWUgI2dldEJhc2VfT3BlcmF0aW9uKCkKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlwcm90ZWN0ZWQgRGF0YVNjaGVtYSBpbnB1dDsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE91dHB1dCgpIDxlbT5PdXRwdXQ8L2VtPn0nIHJlZmVyZW5jZS4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldE91dHB1dCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIERhdGFTY2hlbWEgb3V0cHV0OwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9CZWhhdmlvcmFsRmVhdHVyZSgpIDxlbT5CYXNlIEJlaGF2aW9yYWwgRmVhdHVyZTwvZW0+fScgcmVmZXJlbmNlLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0QmFzZV9CZWhhdmlvcmFsRmVhdHVyZSgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEJlaGF2aW9yYWxGZWF0dXJlIGJhc2VfQmVoYXZpb3JhbEZlYXR1cmU7CisJcHJvdGVjdGVkIE9wZXJhdGlvbiBiYXNlX09wZXJhdGlvbjsKIAogCS8qKgogCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1NhZmUoKSA8ZW0+U2FmZTwvZW0+fScgYXR0cmlidXRlLgpAQCAtMTM5LDU2ICsxMjgsMjggQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoImlucHV0IikKIAlwdWJsaWMgRGF0YVNjaGVtYSBnZXRJbnB1dCgpIHsKLQkJaWYgKGlucHV0ICE9IG51bGwgJiYgaW5wdXQuZUlzUHJveHkoKSkgewotCQkJSW50ZXJuYWxFT2JqZWN0IG9sZElucHV0ID0gKEludGVybmFsRU9iamVjdClpbnB1dDsKLQkJCWlucHV0ID0gKERhdGFTY2hlbWEpZVJlc29sdmVQcm94eShvbGRJbnB1dCk7Ci0JCQlpZiAoaW5wdXQgIT0gb2xkSW5wdXQpIHsKLQkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19JTlBVVCwgb2xkSW5wdXQsIGlucHV0KSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGlucHV0OworCQlEYXRhU2NoZW1hIGlucHV0ID0gYmFzaWNHZXRJbnB1dCgpOworCQlyZXR1cm4gaW5wdXQgIT0gbnVsbCAmJiBpbnB1dC5lSXNQcm94eSgpID8gKERhdGFTY2hlbWEpZVJlc29sdmVQcm94eSgoSW50ZXJuYWxFT2JqZWN0KWlucHV0KSA6IGlucHV0OwogCX0KIAogCS8qKgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAorCSAqIEBnZW5lcmF0ZWQgTk9UCiAJICovCiAJcHVibGljIERhdGFTY2hlbWEgYmFzaWNHZXRJbnB1dCgpIHsKLQkJcmV0dXJuIGlucHV0OwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldElucHV0KERhdGFTY2hlbWEgbmV3SW5wdXQpIHsKLQkJRGF0YVNjaGVtYSBvbGRJbnB1dCA9IGlucHV0OwotCQlpbnB1dCA9IG5ld0lucHV0OwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19JTlBVVCwgb2xkSW5wdXQsIGlucHV0KSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIERhdGFTY2hlbWEgZ2V0T3V0cHV0KCkgewotCQlpZiAob3V0cHV0ICE9IG51bGwgJiYgb3V0cHV0LmVJc1Byb3h5KCkpIHsKLQkJCUludGVybmFsRU9iamVjdCBvbGRPdXRwdXQgPSAoSW50ZXJuYWxFT2JqZWN0KW91dHB1dDsKLQkJCW91dHB1dCA9IChEYXRhU2NoZW1hKWVSZXNvbHZlUHJveHkob2xkT3V0cHV0KTsKLQkJCWlmIChvdXRwdXQgIT0gb2xkT3V0cHV0KSB7Ci0JCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fT1VUUFVULCBvbGRPdXRwdXQsIG91dHB1dCkpOworCQlCZWhhdmlvcmFsRmVhdHVyZSBiZWhhdmlvckZlYXR1cmUgPSB0aGlzLmdldEJhc2VfT3BlcmF0aW9uKCk7CisJCWlmIChiZWhhdmlvckZlYXR1cmUgIT0gbnVsbCkgeworCQkJZm9yIChQYXJhbWV0ZXIgaW5wdXRQYXJhbWV0ZXIgOiBiZWhhdmlvckZlYXR1cmUuaW5wdXRQYXJhbWV0ZXJzKCkpIHsKKwkJCQlEYXRhU2NoZW1hIGRhdGFTY2hlbWEgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihpbnB1dFBhcmFtZXRlciwgRGF0YVNjaGVtYS5jbGFzcyk7CisJCQkJaWYgKGRhdGFTY2hlbWEgIT0gbnVsbCkgeworCQkJCQlyZXR1cm4gZGF0YVNjaGVtYTsKKwkJCQl9CiAJCQl9CiAJCX0KLQkJcmV0dXJuIG91dHB1dDsKKwkJcmV0dXJuIG51bGw7CiAJfQogCiAJLyoqCkBAIC0xOTYsNDggKzE1Nyw0MiBAQAogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQorCXB1YmxpYyB2b2lkIHNldElucHV0KERhdGFTY2hlbWEgbmV3SW5wdXQpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ0lucHV0JyByZWZlcmVuY2UKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoIm91dHB1dCIpCisJcHVibGljIERhdGFTY2hlbWEgZ2V0T3V0cHV0KCkgeworCQlEYXRhU2NoZW1hIG91dHB1dCA9IGJhc2ljR2V0T3V0cHV0KCk7CisJCXJldHVybiBvdXRwdXQgIT0gbnVsbCAmJiBvdXRwdXQuZUlzUHJveHkoKSA/IChEYXRhU2NoZW1hKWVSZXNvbHZlUHJveHkoKEludGVybmFsRU9iamVjdClvdXRwdXQpIDogb3V0cHV0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KIAlwdWJsaWMgRGF0YVNjaGVtYSBiYXNpY0dldE91dHB1dCgpIHsKLQkJcmV0dXJuIG91dHB1dDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRPdXRwdXQoRGF0YVNjaGVtYSBuZXdPdXRwdXQpIHsKLQkJRGF0YVNjaGVtYSBvbGRPdXRwdXQgPSBvdXRwdXQ7Ci0JCW91dHB1dCA9IG5ld091dHB1dDsKLQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fT1VUUFVULCBvbGRPdXRwdXQsIG91dHB1dCkpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBCZWhhdmlvcmFsRmVhdHVyZSBnZXRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlKCkgewotCQlpZiAoYmFzZV9CZWhhdmlvcmFsRmVhdHVyZSAhPSBudWxsICYmIGJhc2VfQmVoYXZpb3JhbEZlYXR1cmUuZUlzUHJveHkoKSkgewotCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfQmVoYXZpb3JhbEZlYXR1cmUgPSAoSW50ZXJuYWxFT2JqZWN0KWJhc2VfQmVoYXZpb3JhbEZlYXR1cmU7Ci0JCQliYXNlX0JlaGF2aW9yYWxGZWF0dXJlID0gKEJlaGF2aW9yYWxGZWF0dXJlKWVSZXNvbHZlUHJveHkob2xkQmFzZV9CZWhhdmlvcmFsRmVhdHVyZSk7Ci0JCQlpZiAoYmFzZV9CZWhhdmlvcmFsRmVhdHVyZSAhPSBvbGRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlKSB7Ci0JCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQotCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fQkFTRV9CRUhBVklPUkFMX0ZFQVRVUkUsIG9sZEJhc2VfQmVoYXZpb3JhbEZlYXR1cmUsIGJhc2VfQmVoYXZpb3JhbEZlYXR1cmUpKTsKKwkJQmVoYXZpb3JhbEZlYXR1cmUgYmVoYXZpb3JGZWF0dXJlID0gdGhpcy5nZXRCYXNlX09wZXJhdGlvbigpOworCQlpZiAoYmVoYXZpb3JGZWF0dXJlICE9IG51bGwpIHsKKwkJCWZvciAoUGFyYW1ldGVyIGlucHV0UGFyYW1ldGVyIDogYmVoYXZpb3JGZWF0dXJlLmlucHV0UGFyYW1ldGVycygpKSB7CisJCQkJRGF0YVNjaGVtYSBkYXRhU2NoZW1hID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oaW5wdXRQYXJhbWV0ZXIsIERhdGFTY2hlbWEuY2xhc3MpOworCQkJCWlmIChkYXRhU2NoZW1hICE9IG51bGwpIHsKKwkJCQkJcmV0dXJuIGRhdGFTY2hlbWE7CisJCQkJfQogCQkJfQogCQl9Ci0JCXJldHVybiBiYXNlX0JlaGF2aW9yYWxGZWF0dXJlOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCXB1YmxpYyBCZWhhdmlvcmFsRmVhdHVyZSBiYXNpY0dldEJhc2VfQmVoYXZpb3JhbEZlYXR1cmUoKSB7Ci0JCXJldHVybiBiYXNlX0JlaGF2aW9yYWxGZWF0dXJlOworCQlyZXR1cm4gbnVsbDsKIAl9CiAKIAkvKioKQEAgLTI0NiwxMSArMjAxLDExIEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldEJhc2VfQmVoYXZpb3JhbEZlYXR1cmUoQmVoYXZpb3JhbEZlYXR1cmUgbmV3QmFzZV9CZWhhdmlvcmFsRmVhdHVyZSkgewotCQlCZWhhdmlvcmFsRmVhdHVyZSBvbGRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlID0gYmFzZV9CZWhhdmlvcmFsRmVhdHVyZTsKLQkJYmFzZV9CZWhhdmlvcmFsRmVhdHVyZSA9IG5ld0Jhc2VfQmVoYXZpb3JhbEZlYXR1cmU7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdvVFBhY2thZ2UuQUNUSU9OX0FGRk9SREFOQ0VfX0JBU0VfQkVIQVZJT1JBTF9GRUFUVVJFLCBvbGRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlLCBiYXNlX0JlaGF2aW9yYWxGZWF0dXJlKSk7CisJQEpzb25JZ25vcmUKKwlwdWJsaWMgdm9pZCBzZXRPdXRwdXQoRGF0YVNjaGVtYSBuZXdPdXRwdXQpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ091dHB1dCcgcmVmZXJlbmNlCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogCX0KIAogCS8qKgpAQCAtMjU5LDYgKzIxNCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJzYWZlIikKIAlwdWJsaWMgYm9vbGVhbiBpc1NhZmUoKSB7CiAJCXJldHVybiBzYWZlOwogCX0KQEAgLTI2OSw2ICsyMjUsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFNhZmUoYm9vbGVhbiBuZXdTYWZlKSB7CiAJCWJvb2xlYW4gb2xkU2FmZSA9IHNhZmU7CiAJCXNhZmUgPSBuZXdTYWZlOwpAQCAtMjgyLDYgKzIzOSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJpZGVtcG90ZW50IikKIAlwdWJsaWMgYm9vbGVhbiBpc0lkZW1wb3RlbnQoKSB7CiAJCXJldHVybiBpZGVtcG90ZW50OwogCX0KQEAgLTI5Miw2ICsyNTAsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldElkZW1wb3RlbnQoYm9vbGVhbiBuZXdJZGVtcG90ZW50KSB7CiAJCWJvb2xlYW4gb2xkSWRlbXBvdGVudCA9IGlkZW1wb3RlbnQ7CiAJCWlkZW1wb3RlbnQgPSBuZXdJZGVtcG90ZW50OwpAQCAtMzA1LDE3ICsyNjQsNTkgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKKwlwdWJsaWMgT3BlcmF0aW9uIGdldEJhc2VfT3BlcmF0aW9uKCkgeworCQlpZiAoYmFzZV9PcGVyYXRpb24gIT0gbnVsbCAmJiBiYXNlX09wZXJhdGlvbi5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9PcGVyYXRpb24gPSAoSW50ZXJuYWxFT2JqZWN0KWJhc2VfT3BlcmF0aW9uOworCQkJYmFzZV9PcGVyYXRpb24gPSAoT3BlcmF0aW9uKWVSZXNvbHZlUHJveHkob2xkQmFzZV9PcGVyYXRpb24pOworCQkJaWYgKGJhc2VfT3BlcmF0aW9uICE9IG9sZEJhc2VfT3BlcmF0aW9uKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fQkFTRV9PUEVSQVRJT04sIG9sZEJhc2VfT3BlcmF0aW9uLCBiYXNlX09wZXJhdGlvbikpOworCQkJfQorCQl9CisJCXJldHVybiBiYXNlX09wZXJhdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgT3BlcmF0aW9uIGJhc2ljR2V0QmFzZV9PcGVyYXRpb24oKSB7CisJCXJldHVybiBiYXNlX09wZXJhdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQorCXB1YmxpYyB2b2lkIHNldEJhc2VfT3BlcmF0aW9uKE9wZXJhdGlvbiBuZXdCYXNlX09wZXJhdGlvbikgeworCQlPcGVyYXRpb24gb2xkQmFzZV9PcGVyYXRpb24gPSBiYXNlX09wZXJhdGlvbjsKKwkJYmFzZV9PcGVyYXRpb24gPSBuZXdCYXNlX09wZXJhdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fQkFTRV9PUEVSQVRJT04sIG9sZEJhc2VfT3BlcmF0aW9uLCBiYXNlX09wZXJhdGlvbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQogCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKIAkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fQkFTRV9PUEVSQVRJT046CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRCYXNlX09wZXJhdGlvbigpOworCQkJCXJldHVybiBiYXNpY0dldEJhc2VfT3BlcmF0aW9uKCk7CiAJCQljYXNlIFdvVFBhY2thZ2UuQUNUSU9OX0FGRk9SREFOQ0VfX0lOUFVUOgogCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0SW5wdXQoKTsKIAkJCQlyZXR1cm4gYmFzaWNHZXRJbnB1dCgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19PVVRQVVQ6CiAJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRPdXRwdXQoKTsKIAkJCQlyZXR1cm4gYmFzaWNHZXRPdXRwdXQoKTsKLQkJCWNhc2UgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fQkFTRV9CRUhBVklPUkFMX0ZFQVRVUkU6Ci0JCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRCYXNlX0JlaGF2aW9yYWxGZWF0dXJlKCk7Ci0JCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9CZWhhdmlvcmFsRmVhdHVyZSgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19TQUZFOgogCQkJCXJldHVybiBpc1NhZmUoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fSURFTVBPVEVOVDoKQEAgLTMzMiwxNSArMzMzLDE1IEBACiAJQE92ZXJyaWRlCiAJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKIAkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fQkFTRV9PUEVSQVRJT046CisJCQkJc2V0QmFzZV9PcGVyYXRpb24oKE9wZXJhdGlvbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOwogCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19JTlBVVDoKIAkJCQlzZXRJbnB1dCgoRGF0YVNjaGVtYSluZXdWYWx1ZSk7CiAJCQkJcmV0dXJuOwogCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19PVVRQVVQ6CiAJCQkJc2V0T3V0cHV0KChEYXRhU2NoZW1hKW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47Ci0JCQljYXNlIFdvVFBhY2thZ2UuQUNUSU9OX0FGRk9SREFOQ0VfX0JBU0VfQkVIQVZJT1JBTF9GRUFUVVJFOgotCQkJCXNldEJhc2VfQmVoYXZpb3JhbEZlYXR1cmUoKEJlaGF2aW9yYWxGZWF0dXJlKW5ld1ZhbHVlKTsKLQkJCQlyZXR1cm47CiAJCQljYXNlIFdvVFBhY2thZ2UuQUNUSU9OX0FGRk9SREFOQ0VfX1NBRkU6CiAJCQkJc2V0U2FmZSgoQm9vbGVhbiluZXdWYWx1ZSk7CiAJCQkJcmV0dXJuOwpAQCAtMzU5LDE1ICszNjAsMTUgQEAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgewogCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19CQVNFX09QRVJBVElPTjoKKwkJCQlzZXRCYXNlX09wZXJhdGlvbigoT3BlcmF0aW9uKW51bGwpOworCQkJCXJldHVybjsKIAkJCWNhc2UgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fSU5QVVQ6CiAJCQkJc2V0SW5wdXQoKERhdGFTY2hlbWEpbnVsbCk7CiAJCQkJcmV0dXJuOwogCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19PVVRQVVQ6CiAJCQkJc2V0T3V0cHV0KChEYXRhU2NoZW1hKW51bGwpOwogCQkJCXJldHVybjsKLQkJCWNhc2UgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fQkFTRV9CRUhBVklPUkFMX0ZFQVRVUkU6Ci0JCQkJc2V0QmFzZV9CZWhhdmlvcmFsRmVhdHVyZSgoQmVoYXZpb3JhbEZlYXR1cmUpbnVsbCk7Ci0JCQkJcmV0dXJuOwogCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19TQUZFOgogCQkJCXNldFNhZmUoU0FGRV9FREVGQVVMVCk7CiAJCQkJcmV0dXJuOwpAQCAtMzg2LDEyICszODcsMTIgQEAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgewogCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19CQVNFX09QRVJBVElPTjoKKwkJCQlyZXR1cm4gYmFzZV9PcGVyYXRpb24gIT0gbnVsbDsKIAkJCWNhc2UgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fSU5QVVQ6Ci0JCQkJcmV0dXJuIGlucHV0ICE9IG51bGw7CisJCQkJcmV0dXJuIGJhc2ljR2V0SW5wdXQoKSAhPSBudWxsOwogCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19PVVRQVVQ6Ci0JCQkJcmV0dXJuIG91dHB1dCAhPSBudWxsOwotCQkJY2FzZSBXb1RQYWNrYWdlLkFDVElPTl9BRkZPUkRBTkNFX19CQVNFX0JFSEFWSU9SQUxfRkVBVFVSRToKLQkJCQlyZXR1cm4gYmFzZV9CZWhhdmlvcmFsRmVhdHVyZSAhPSBudWxsOworCQkJCXJldHVybiBiYXNpY0dldE91dHB1dCgpICE9IG51bGw7CiAJCQljYXNlIFdvVFBhY2thZ2UuQUNUSU9OX0FGRk9SREFOQ0VfX1NBRkU6CiAJCQkJcmV0dXJuIHNhZmUgIT0gU0FGRV9FREVGQVVMVDsKIAkJCWNhc2UgV29UUGFja2FnZS5BQ1RJT05fQUZGT1JEQU5DRV9fSURFTVBPVEVOVDoKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvQ29udGV4dEltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvQ29udGV4dEltcGwuamF2YQppbmRleCA0MGNhMmRmLi5hOThiNjY0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL0NvbnRleHRJbXBsLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9Db250ZXh0SW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsOwpAQCAtMjYsNiArMjcsOCBAQAogCiBpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZXNwYWNlOwogCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbklnbm9yZTsKKwogLyoqCiAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbnRleHQ8L2I+PC9lbT4nLgpAQCAtMTE5LDYgKzEyMiw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIE5hbWVzcGFjZSBnZXRCYXNlX05hbWVzcGFjZSgpIHsKIAkJaWYgKGJhc2VfTmFtZXNwYWNlICE9IG51bGwgJiYgYmFzZV9OYW1lc3BhY2UuZUlzUHJveHkoKSkgewogCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfTmFtZXNwYWNlID0gKEludGVybmFsRU9iamVjdCliYXNlX05hbWVzcGFjZTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvRGF0YVNjaGVtYUltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvRGF0YVNjaGVtYUltcGwuamF2YQppbmRleCA2MjFmNjg4Li44OTVkYzI1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL0RhdGFTY2hlbWFJbXBsLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9EYXRhU2NoZW1hSW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsOwpAQCAtMTgsMjUgKzE5LDMxIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVuaXF1ZUVMaXN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZVVuaXF1ZUVMaXN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUuY29yZS5zdHJ1Y3R1cmUuTWV0YVZhbHVlU3BlY2lmaWNhdGlvbjsKLQogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWE7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVHlwZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuSW50ZXJ2YWw7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQ29tbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLk11bHRpcGxpY2l0eUVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlBhcmFtZXRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5TdHJ1Y3R1cmFsRmVhdHVyZTsKIGltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5UeXBlZEVsZW1lbnQ7CiAKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uR2V0dGVyOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25JZ25vcmU7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5T3JkZXI7CisKIC8qKgogICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KICAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EYXRhIFNjaGVtYTwvYj48L2VtPicuCkBAIC00NSwyMiArNTIsNDkgQEAKICAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgogICogPC9wPgogICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRGF0YVNjaGVtYUltcGwjZ2V0VGl0bGUgPGVtPlRpdGxlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkRhdGFTY2hlbWFJbXBsI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5EYXRhU2NoZW1hSW1wbCNnZXRCYXNlX1R5cGVkRWxlbWVudCA8ZW0+QmFzZSBUeXBlZCBFbGVtZW50PC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkRhdGFTY2hlbWFJbXBsI2dldEVudW0gPGVtPkVudW08L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRGF0YVNjaGVtYUltcGwjZ2V0TnVtYmVySW50ZXJ2YWwgPGVtPk51bWJlciBJbnRlcnZhbDwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5EYXRhU2NoZW1hSW1wbCNnZXRSZXF1aXJlZCA8ZW0+UmVxdWlyZWQ8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRGF0YVNjaGVtYUltcGwjZ2V0SXRlbXMgPGVtPkl0ZW1zPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkRhdGFTY2hlbWFJbXBsI2dldFByb3BlcnRpZXMgPGVtPlByb3BlcnRpZXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRGF0YVNjaGVtYUltcGwjZ2V0VHlwZSA8ZW0+VHlwZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5EYXRhU2NoZW1hSW1wbCNnZXRBVHlwZSA8ZW0+QVR5cGU8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRGF0YVNjaGVtYUltcGwjaXNXcml0ZU9ubHkgPGVtPldyaXRlIE9ubHk8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRGF0YVNjaGVtYUltcGwjZ2V0Rm9ybWF0IDxlbT5Gb3JtYXQ8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRGF0YVNjaGVtYUltcGwjZ2V0T25lT2YgPGVtPk9uZSBPZjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5EYXRhU2NoZW1hSW1wbCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkRhdGFTY2hlbWFJbXBsI2dldENvbnN0IDxlbT5Db25zdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5EYXRhU2NoZW1hSW1wbCNnZXRNaW5JdGVtcyA8ZW0+TWluIEl0ZW1zPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkRhdGFTY2hlbWFJbXBsI2dldE1heEl0ZW1zIDxlbT5NYXggSXRlbXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRGF0YVNjaGVtYUltcGwjaXNSZWFkT25seSA8ZW0+UmVhZCBPbmx5PC9lbT59PC9saT4KICAqIDwvdWw+CiAgKgogICogQGdlbmVyYXRlZAogICovCitASnNvblByb3BlcnR5T3JkZXIoeyJAdHlwZSIsICJ0aXRsZSIsICJkZXNjcmlwdGlvbiIsICJ0eXBlIiwgImNvbnN0IiwgIm9uZU9mIiwgImVudW0iLCAicmVhZE9ubHkiLCAid3JpdGVPbmx5IiwgImZvcm1hdCIsICJyZXF1aXJlZCIsICJwcm9wZXJ0aWVzIiwgIml0ZW1zIiwgIm1pbkl0ZW1zIiwgIm1heEl0ZW1zIn0pCiBwdWJsaWMgY2xhc3MgRGF0YVNjaGVtYUltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgRGF0YVNjaGVtYSB7CiAJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpdGxlKCkgPGVtPlRpdGxlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUaXRsZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElUTEVfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlc2NyaXB0aW9uKCkgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREZXNjcmlwdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ1JJUFRJT05fRURFRkFVTFQgPSBudWxsOworCisJLyoqCiAJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9UeXBlZEVsZW1lbnQoKSA8ZW0+QmFzZSBUeXBlZCBFbGVtZW50PC9lbT59JyByZWZlcmVuY2UuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTcxLDI0ICsxMDUsMTQgQEAKIAlwcm90ZWN0ZWQgVHlwZWRFbGVtZW50IGJhc2VfVHlwZWRFbGVtZW50OwogCiAJLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RW51bSgpIDxlbT5FbnVtPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbnVtKCkgPGVtPkVudW08L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQHNlZSAjZ2V0RW51bSgpCiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JcHJvdGVjdGVkIEVMaXN0PE1ldGFWYWx1ZVNwZWNpZmljYXRpb24+IGVudW1fOwotCi0JLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TnVtYmVySW50ZXJ2YWwoKSA8ZW0+TnVtYmVyIEludGVydmFsPC9lbT59JyByZWZlcmVuY2UuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXROdW1iZXJJbnRlcnZhbCgpCi0JICogQGdlbmVyYXRlZAotCSAqIEBvcmRlcmVkCi0JICovCi0JcHJvdGVjdGVkIEludGVydmFsIG51bWJlckludGVydmFsOworCXByb3RlY3RlZCBFTGlzdDxTdHJpbmc+IGVudW1fOwogCiAJLyoqCiAJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVxdWlyZWQoKSA8ZW0+UmVxdWlyZWQ8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgpAQCAtMTIxLDE0ICsxNDUsMTQgQEAKIAlwcm90ZWN0ZWQgRUxpc3Q8RGF0YVNjaGVtYT4gcHJvcGVydGllczsKIAogCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGUoKSA8ZW0+VHlwZTwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QVR5cGUoKSA8ZW0+QVR5cGU8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHNlZSAjZ2V0VHlwZSgpCisJICogQHNlZSAjZ2V0QVR5cGUoKQogCSAqIEBnZW5lcmF0ZWQKIAkgKiBAb3JkZXJlZAogCSAqLwotCXByb3RlY3RlZCBFTGlzdDxUeXBlPiB0eXBlOworCXByb3RlY3RlZCBFTGlzdDxUeXBlPiBhVHlwZTsKIAogCS8qKgogCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1dyaXRlT25seSgpIDxlbT5Xcml0ZSBPbmx5PC9lbT59JyBhdHRyaWJ1dGUuCkBAIC0xODEsNiArMjA1LDU2IEBACiAJcHJvdGVjdGVkIEVMaXN0PERhdGFTY2hlbWE+IG9uZU9mOwogCiAJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGUoKSA8ZW0+VHlwZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q29uc3QoKSA8ZW0+Q29uc3Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENvbnN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDT05TVF9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWluSXRlbXMoKSA8ZW0+TWluIEl0ZW1zPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNaW5JdGVtcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0lURU1TX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNYXhJdGVtcygpIDxlbT5NYXggSXRlbXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1heEl0ZW1zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVhfSVRFTVNfRURFRkFVTFQgPSAwOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzUmVhZE9ubHkoKSA8ZW0+UmVhZCBPbmx5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1JlYWRPbmx5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gUkVBRF9PTkxZX0VERUZBVUxUID0gZmFsc2U7CisKKwkvKioKIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogCSAqIEBnZW5lcmF0ZWQKQEAgLTIwMiw5ICsyNzYsNzAgQEAKIAkvKioKIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoInRpdGxlIikKKwlwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkgeworCQlOYW1lZEVsZW1lbnQgbmFtZWRFbGVtZW50ID0gdGhpcy5nZXRCYXNlX1R5cGVkRWxlbWVudCgpOworCQlpZiAobmFtZWRFbGVtZW50ICE9IG51bGwpIHsKKwkJCXJldHVybiBuYW1lZEVsZW1lbnQuZ2V0TmFtZSgpOworCQl9CisJCXJldHVybiAiIjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQorCXB1YmxpYyB2b2lkIHNldFRpdGxlKFN0cmluZyBuZXdUaXRsZSkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gc2V0IHRoZSAnVGl0bGUnIGF0dHJpYnV0ZQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoImRlc2NyaXB0aW9uIikKKwlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCQlFbGVtZW50IGVsZW1lbnQgPSB0aGlzLmdldEJhc2VfVHlwZWRFbGVtZW50KCk7CisJCWlmIChlbGVtZW50ICE9IG51bGwpIHsKKwkJCWZvciAoQ29tbWVudCBjb21tZW50IDogZWxlbWVudC5nZXRPd25lZENvbW1lbnRzKCkpIHsKKwkJCQlpZiAoY29tbWVudC5nZXRCb2R5KCkgIT0gbnVsbCAmJiAhY29tbWVudC5nZXRCb2R5KCkuaXNFbXB0eSgpKSB7CisJCQkJCXJldHVybiBjb21tZW50LmdldEJvZHkoKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuICIiOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBKc29uSWdub3JlCisJcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIG5ld0Rlc2NyaXB0aW9uKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBzZXQgdGhlICdEZXNjcmlwdGlvbicgYXR0cmlidXRlCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIFR5cGVkRWxlbWVudCBnZXRCYXNlX1R5cGVkRWxlbWVudCgpIHsKIAkJaWYgKGJhc2VfVHlwZWRFbGVtZW50ICE9IG51bGwgJiYgYmFzZV9UeXBlZEVsZW1lbnQuZUlzUHJveHkoKSkgewogCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfVHlwZWRFbGVtZW50ID0gKEludGVybmFsRU9iamVjdCliYXNlX1R5cGVkRWxlbWVudDsKQEAgLTIzMiw2ICszNjcsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldEJhc2VfVHlwZWRFbGVtZW50KFR5cGVkRWxlbWVudCBuZXdCYXNlX1R5cGVkRWxlbWVudCkgewogCQlUeXBlZEVsZW1lbnQgb2xkQmFzZV9UeXBlZEVsZW1lbnQgPSBiYXNlX1R5cGVkRWxlbWVudDsKIAkJYmFzZV9UeXBlZEVsZW1lbnQgPSBuZXdCYXNlX1R5cGVkRWxlbWVudDsKQEAgLTI0NSw5ICszODEsMTAgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVMaXN0PE1ldGFWYWx1ZVNwZWNpZmljYXRpb24+IGdldEVudW0oKSB7CisJQEpzb25HZXR0ZXIoImVudW0iKQorCXB1YmxpYyBFTGlzdDxTdHJpbmc+IGdldEVudW0oKSB7CiAJCWlmIChlbnVtXyA9PSBudWxsKSB7Ci0JCQllbnVtXyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8TWV0YVZhbHVlU3BlY2lmaWNhdGlvbj4oTWV0YVZhbHVlU3BlY2lmaWNhdGlvbi5jbGFzcywgdGhpcywgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fRU5VTSk7CisJCQllbnVtXyA9IG5ldyBFRGF0YVR5cGVVbmlxdWVFTGlzdDxTdHJpbmc+KFN0cmluZy5jbGFzcywgdGhpcywgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fRU5VTSk7CiAJCX0KIAkJcmV0dXJuIGVudW1fOwogCX0KQEAgLTI1OCw0NiArMzk1LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEludGVydmFsIGdldE51bWJlckludGVydmFsKCkgewotCQlpZiAobnVtYmVySW50ZXJ2YWwgIT0gbnVsbCAmJiBudW1iZXJJbnRlcnZhbC5lSXNQcm94eSgpKSB7Ci0JCQlJbnRlcm5hbEVPYmplY3Qgb2xkTnVtYmVySW50ZXJ2YWwgPSAoSW50ZXJuYWxFT2JqZWN0KW51bWJlckludGVydmFsOwotCQkJbnVtYmVySW50ZXJ2YWwgPSAoSW50ZXJ2YWwpZVJlc29sdmVQcm94eShvbGROdW1iZXJJbnRlcnZhbCk7Ci0JCQlpZiAobnVtYmVySW50ZXJ2YWwgIT0gb2xkTnVtYmVySW50ZXJ2YWwpIHsKLQkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19OVU1CRVJfSU5URVJWQUwsIG9sZE51bWJlckludGVydmFsLCBudW1iZXJJbnRlcnZhbCkpOwotCQkJfQotCQl9Ci0JCXJldHVybiBudW1iZXJJbnRlcnZhbDsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgSW50ZXJ2YWwgYmFzaWNHZXROdW1iZXJJbnRlcnZhbCgpIHsKLQkJcmV0dXJuIG51bWJlckludGVydmFsOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldE51bWJlckludGVydmFsKEludGVydmFsIG5ld051bWJlckludGVydmFsKSB7Ci0JCUludGVydmFsIG9sZE51bWJlckludGVydmFsID0gbnVtYmVySW50ZXJ2YWw7Ci0JCW51bWJlckludGVydmFsID0gbmV3TnVtYmVySW50ZXJ2YWw7Ci0JCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKLQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX05VTUJFUl9JTlRFUlZBTCwgb2xkTnVtYmVySW50ZXJ2YWwsIG51bWJlckludGVydmFsKSk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgRUxpc3Q8UHJvcGVydHk+IGdldFJlcXVpcmVkKCkgewogCQlpZiAocmVxdWlyZWQgPT0gbnVsbCkgewogCQkJcmVxdWlyZWQgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFByb3BlcnR5PihQcm9wZXJ0eS5jbGFzcywgdGhpcywgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fUkVRVUlSRUQpOwpAQCAtMzEwLDYgKzQwOCw3IEBACiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQGdlbmVyYXRlZAogCSAqLworCUBKc29uSWdub3JlCiAJcHVibGljIFByb3BlcnR5IGdldFJlcXVpcmVkKFN0cmluZyBuYW1lLCBvcmcuZWNsaXBzZS51bWwyLnVtbC5UeXBlIHR5cGUpIHsKIAkJcmV0dXJuIGdldFJlcXVpcmVkKG5hbWUsIHR5cGUsIGZhbHNlLCBudWxsKTsKIAl9CkBAIC0zMTksNiArNDE4LDcgQEAKIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICovCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgUHJvcGVydHkgZ2V0UmVxdWlyZWQoU3RyaW5nIG5hbWUsIG9yZy5lY2xpcHNlLnVtbDIudW1sLlR5cGUgdHlwZSwgYm9vbGVhbiBpZ25vcmVDYXNlLCBFQ2xhc3MgZUNsYXNzKSB7CiAJCXJlcXVpcmVkTG9vcDogZm9yIChQcm9wZXJ0eSByZXF1aXJlZCA6IGdldFJlcXVpcmVkKCkpIHsKIAkJCWlmIChlQ2xhc3MgIT0gbnVsbCAmJiAhZUNsYXNzLmlzSW5zdGFuY2UocmVxdWlyZWQpKQpAQCAtMzM4LDYgKzQzOCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJpdGVtcyIpCiAJcHVibGljIEVMaXN0PERhdGFTY2hlbWE+IGdldEl0ZW1zKCkgewogCQlpZiAoaXRlbXMgPT0gbnVsbCkgewogCQkJaXRlbXMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PERhdGFTY2hlbWE+KERhdGFTY2hlbWEuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0lURU1TKTsKQEAgLTM1MSw2ICs0NTIsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigicHJvcGVydGllcyIpCiAJcHVibGljIEVMaXN0PERhdGFTY2hlbWE+IGdldFByb3BlcnRpZXMoKSB7CiAJCWlmIChwcm9wZXJ0aWVzID09IG51bGwpIHsKIAkJCXByb3BlcnRpZXMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PERhdGFTY2hlbWE+KERhdGFTY2hlbWEuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1BST1BFUlRJRVMpOwpAQCAtMzY0LDExICs0NjYsMTIgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVMaXN0PFR5cGU+IGdldFR5cGUoKSB7Ci0JCWlmICh0eXBlID09IG51bGwpIHsKLQkJCXR5cGUgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFR5cGU+KFR5cGUuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1RZUEUpOworCUBKc29uR2V0dGVyKCJAdHlwZSIpCisJcHVibGljIEVMaXN0PFR5cGU+IGdldEFUeXBlKCkgeworCQlpZiAoYVR5cGUgPT0gbnVsbCkgeworCQkJYVR5cGUgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFR5cGU+KFR5cGUuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0FUWVBFKTsKIAkJfQotCQlyZXR1cm4gdHlwZTsKKwkJcmV0dXJuIGFUeXBlOwogCX0KIAogCS8qKgpAQCAtMzc3LDYgKzQ4MCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJ3cml0ZU9ubHkiKQogCXB1YmxpYyBib29sZWFuIGlzV3JpdGVPbmx5KCkgewogCQlyZXR1cm4gd3JpdGVPbmx5OwogCX0KQEAgLTM4Nyw2ICs0OTEsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFdyaXRlT25seShib29sZWFuIG5ld1dyaXRlT25seSkgewogCQlib29sZWFuIG9sZFdyaXRlT25seSA9IHdyaXRlT25seTsKIAkJd3JpdGVPbmx5ID0gbmV3V3JpdGVPbmx5OwpAQCAtNDAwLDYgKzUwNSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJmb3JtYXQiKQogCXB1YmxpYyBTdHJpbmcgZ2V0Rm9ybWF0KCkgewogCQlyZXR1cm4gZm9ybWF0OwogCX0KQEAgLTQxMCw2ICs1MTYsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldEZvcm1hdChTdHJpbmcgbmV3Rm9ybWF0KSB7CiAJCVN0cmluZyBvbGRGb3JtYXQgPSBmb3JtYXQ7CiAJCWZvcm1hdCA9IG5ld0Zvcm1hdDsKQEAgLTQyMyw2ICs1MzAsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigib25lT2YiKQogCXB1YmxpYyBFTGlzdDxEYXRhU2NoZW1hPiBnZXRPbmVPZigpIHsKIAkJaWYgKG9uZU9mID09IG51bGwpIHsKIAkJCW9uZU9mID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxEYXRhU2NoZW1hPihEYXRhU2NoZW1hLmNsYXNzLCB0aGlzLCBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19PTkVfT0YpOwpAQCAtNDMzLDMzICs1NDEsMjEyIEBACiAJLyoqCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJ0eXBlIikKKwlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7CisJCVR5cGVkRWxlbWVudCB0eXBlZEVsZW1lbnQgPSB0aGlzLmdldEJhc2VfVHlwZWRFbGVtZW50KCk7CisJCWlmICh0eXBlZEVsZW1lbnQgIT0gbnVsbCkgeworCQkJaWYgKHR5cGVkRWxlbWVudCBpbnN0YW5jZW9mIE11bHRpcGxpY2l0eUVsZW1lbnQpIHsKKwkJCQlNdWx0aXBsaWNpdHlFbGVtZW50IG11bHRpcGxpY2l0eUVsZW1lbnQgPSAoTXVsdGlwbGljaXR5RWxlbWVudCkgdHlwZWRFbGVtZW50OworCQkJCWlmIChtdWx0aXBsaWNpdHlFbGVtZW50LnVwcGVyQm91bmQoKSA+IDEpIHsKKwkJCQkJcmV0dXJuICJhcnJheSI7CisJCQkJfQorCQkJfQorCQkJaWYgKHR5cGVkRWxlbWVudC5nZXRUeXBlKCkgIT0gbnVsbCkgeworCQkJCVN0cmluZyB0eXBlTmFtZSA9IHR5cGVkRWxlbWVudC5nZXRUeXBlKCkuZ2V0TmFtZSgpOworCQkJCWlmICh0eXBlTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJCb29sZWFuIikpIHsKKwkJCQkJcmV0dXJuICJib29sZWFuIjsJCQorCQkJCX0gZWxzZSBpZiAodHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiSW50ZWdlciIpIHx8IHR5cGVOYW1lLmVxdWFsc0lnbm9yZUNhc2UoIlVubGltaXRlZE5hdHVyYWwiKSkgeworCQkJCQlyZXR1cm4gImludGVnZXIiOworCQkJCX0gZWxzZSBpZiAodHlwZU5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiU3RyaW5nIikpIHsKKwkJCQkJcmV0dXJuICJzdHJpbmciOworCQkJCX0gZWxzZSB7CisJCQkJCXJldHVybiAib2JqZWN0IjsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuICJudWxsIjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQorCXB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIG5ld1R5cGUpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ1R5cGUnIGF0dHJpYnV0ZQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoImNvbnN0IikKKwlwdWJsaWMgU3RyaW5nIGdldENvbnN0KCkgeworCQlUeXBlZEVsZW1lbnQgdHlwZWRFbGVtZW50ID0gdGhpcy5nZXRCYXNlX1R5cGVkRWxlbWVudCgpOworCQlpZiAodHlwZWRFbGVtZW50IGluc3RhbmNlb2YgUHJvcGVydHkpIHsKKwkJCVByb3BlcnR5IHByb3BlcnR5ID0gKFByb3BlcnR5KSB0eXBlZEVsZW1lbnQ7CisJCQlpZiAocHJvcGVydHkuZ2V0RGVmYXVsdCgpICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gcHJvcGVydHkuZ2V0RGVmYXVsdCgpOworCQkJfQorCQl9IGVsc2UgaWYgKHR5cGVkRWxlbWVudCBpbnN0YW5jZW9mIFBhcmFtZXRlcikgeworCQkJUGFyYW1ldGVyIHBhcmFtZXRlciA9IChQYXJhbWV0ZXIpIHR5cGVkRWxlbWVudDsKKwkJCWlmIChwYXJhbWV0ZXIuZ2V0RGVmYXVsdCgpICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gcGFyYW1ldGVyLmdldERlZmF1bHQoKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gIiI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKKwlwdWJsaWMgdm9pZCBzZXRDb25zdChTdHJpbmcgbmV3Q29uc3QpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ0NvbnN0JyBhdHRyaWJ1dGUKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJtaW5JdGVtcyIpCisJcHVibGljIGludCBnZXRNaW5JdGVtcygpIHsKKwkJVHlwZWRFbGVtZW50IHR5cGVkRWxlbWVudCA9IHRoaXMuZ2V0QmFzZV9UeXBlZEVsZW1lbnQoKTsKKwkJaWYgKHR5cGVkRWxlbWVudCBpbnN0YW5jZW9mIE11bHRpcGxpY2l0eUVsZW1lbnQpIHsKKwkJCU11bHRpcGxpY2l0eUVsZW1lbnQgbXVsdGlwbGljaXR5RWxlbWVudCA9IChNdWx0aXBsaWNpdHlFbGVtZW50KSB0eXBlZEVsZW1lbnQ7CisJCQlyZXR1cm4gbXVsdGlwbGljaXR5RWxlbWVudC5sb3dlckJvdW5kKCk7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKKwlwdWJsaWMgdm9pZCBzZXRNaW5JdGVtcyhpbnQgbmV3TWluSXRlbXMpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ01pbiBJdGVtcycgYXR0cmlidXRlCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigibWF4SXRlbXMiKQorCXB1YmxpYyBpbnQgZ2V0TWF4SXRlbXMoKSB7CisJCVR5cGVkRWxlbWVudCB0eXBlZEVsZW1lbnQgPSB0aGlzLmdldEJhc2VfVHlwZWRFbGVtZW50KCk7CisJCWlmICh0eXBlZEVsZW1lbnQgaW5zdGFuY2VvZiBNdWx0aXBsaWNpdHlFbGVtZW50KSB7CisJCQlNdWx0aXBsaWNpdHlFbGVtZW50IG11bHRpcGxpY2l0eUVsZW1lbnQgPSAoTXVsdGlwbGljaXR5RWxlbWVudCkgdHlwZWRFbGVtZW50OworCQkJcmV0dXJuIG11bHRpcGxpY2l0eUVsZW1lbnQudXBwZXJCb3VuZCgpOworCQl9CisJCXJldHVybiAxOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBKc29uSWdub3JlCisJcHVibGljIHZvaWQgc2V0TWF4SXRlbXMoaW50IG5ld01heEl0ZW1zKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBzZXQgdGhlICdNYXggSXRlbXMnIGF0dHJpYnV0ZQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoInJlYWRPbmx5IikKKwlwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgeworCQlUeXBlZEVsZW1lbnQgdHlwZWRFbGVtZW50ID0gdGhpcy5nZXRCYXNlX1R5cGVkRWxlbWVudCgpOworCQlpZiAodHlwZWRFbGVtZW50IGluc3RhbmNlb2YgU3RydWN0dXJhbEZlYXR1cmUpIHsKKwkJCVN0cnVjdHVyYWxGZWF0dXJlIHN0cnVjdHVyYWxGZWF0dXJlID0gKFN0cnVjdHVyYWxGZWF0dXJlKSB0eXBlZEVsZW1lbnQ7CisJCQlyZXR1cm4gc3RydWN0dXJhbEZlYXR1cmUuaXNSZWFkT25seSgpOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQorCXB1YmxpYyB2b2lkIHNldFJlYWRPbmx5KGJvb2xlYW4gbmV3UmVhZE9ubHkpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ1JlYWQgT25seScgYXR0cmlidXRlCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQogCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKIAkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fVElUTEU6CisJCQkJcmV0dXJuIGdldFRpdGxlKCk7CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0RFU0NSSVBUSU9OOgorCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19CQVNFX1RZUEVEX0VMRU1FTlQ6CiAJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRCYXNlX1R5cGVkRWxlbWVudCgpOwogCQkJCXJldHVybiBiYXNpY0dldEJhc2VfVHlwZWRFbGVtZW50KCk7CiAJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0VOVU06CiAJCQkJcmV0dXJuIGdldEVudW0oKTsKLQkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fTlVNQkVSX0lOVEVSVkFMOgotCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0TnVtYmVySW50ZXJ2YWwoKTsKLQkJCQlyZXR1cm4gYmFzaWNHZXROdW1iZXJJbnRlcnZhbCgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19SRVFVSVJFRDoKIAkJCQlyZXR1cm4gZ2V0UmVxdWlyZWQoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fSVRFTVM6CiAJCQkJcmV0dXJuIGdldEl0ZW1zKCk7CiAJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1BST1BFUlRJRVM6CiAJCQkJcmV0dXJuIGdldFByb3BlcnRpZXMoKTsKLQkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fVFlQRToKLQkJCQlyZXR1cm4gZ2V0VHlwZSgpOworCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19BVFlQRToKKwkJCQlyZXR1cm4gZ2V0QVR5cGUoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fV1JJVEVfT05MWToKIAkJCQlyZXR1cm4gaXNXcml0ZU9ubHkoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fRk9STUFUOgogCQkJCXJldHVybiBnZXRGb3JtYXQoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fT05FX09GOgogCQkJCXJldHVybiBnZXRPbmVPZigpOworCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19UWVBFOgorCQkJCXJldHVybiBnZXRUeXBlKCk7CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0NPTlNUOgorCQkJCXJldHVybiBnZXRDb25zdCgpOworCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19NSU5fSVRFTVM6CisJCQkJcmV0dXJuIGdldE1pbkl0ZW1zKCk7CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX01BWF9JVEVNUzoKKwkJCQlyZXR1cm4gZ2V0TWF4SXRlbXMoKTsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fUkVBRF9PTkxZOgorCQkJCXJldHVybiBpc1JlYWRPbmx5KCk7CiAJCX0KIAkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CiAJfQpAQCAtNDczLDE1ICs3NjAsMTggQEAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgewogCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19USVRMRToKKwkJCQlzZXRUaXRsZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0RFU0NSSVBUSU9OOgorCQkJCXNldERlc2NyaXB0aW9uKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fQkFTRV9UWVBFRF9FTEVNRU5UOgogCQkJCXNldEJhc2VfVHlwZWRFbGVtZW50KChUeXBlZEVsZW1lbnQpbmV3VmFsdWUpOwogCQkJCXJldHVybjsKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fRU5VTToKIAkJCQlnZXRFbnVtKCkuY2xlYXIoKTsKLQkJCQlnZXRFbnVtKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBNZXRhVmFsdWVTcGVjaWZpY2F0aW9uPiluZXdWYWx1ZSk7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19OVU1CRVJfSU5URVJWQUw6Ci0JCQkJc2V0TnVtYmVySW50ZXJ2YWwoKEludGVydmFsKW5ld1ZhbHVlKTsKKwkJCQlnZXRFbnVtKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBTdHJpbmc+KW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47CiAJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1JFUVVJUkVEOgogCQkJCWdldFJlcXVpcmVkKCkuY2xlYXIoKTsKQEAgLTQ5NSw5ICs3ODUsOSBAQAogCQkJCWdldFByb3BlcnRpZXMoKS5jbGVhcigpOwogCQkJCWdldFByb3BlcnRpZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERhdGFTY2hlbWE+KW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47Ci0JCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1RZUEU6Ci0JCQkJZ2V0VHlwZSgpLmNsZWFyKCk7Ci0JCQkJZ2V0VHlwZSgpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgVHlwZT4pbmV3VmFsdWUpOworCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19BVFlQRToKKwkJCQlnZXRBVHlwZSgpLmNsZWFyKCk7CisJCQkJZ2V0QVR5cGUoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFR5cGU+KW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47CiAJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1dSSVRFX09OTFk6CiAJCQkJc2V0V3JpdGVPbmx5KChCb29sZWFuKW5ld1ZhbHVlKTsKQEAgLTUwOSw2ICs3OTksMjEgQEAKIAkJCQlnZXRPbmVPZigpLmNsZWFyKCk7CiAJCQkJZ2V0T25lT2YoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERhdGFTY2hlbWE+KW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1RZUEU6CisJCQkJc2V0VHlwZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0NPTlNUOgorCQkJCXNldENvbnN0KChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fTUlOX0lURU1TOgorCQkJCXNldE1pbkl0ZW1zKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX01BWF9JVEVNUzoKKwkJCQlzZXRNYXhJdGVtcygoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19SRUFEX09OTFk6CisJCQkJc2V0UmVhZE9ubHkoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKIAkJfQogCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOwogCX0KQEAgLTUyMSwxNSArODI2LDE4IEBACiAJQE92ZXJyaWRlCiAJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKIAkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fVElUTEU6CisJCQkJc2V0VGl0bGUoVElUTEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fREVTQ1JJUFRJT046CisJCQkJc2V0RGVzY3JpcHRpb24oREVTQ1JJUFRJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fQkFTRV9UWVBFRF9FTEVNRU5UOgogCQkJCXNldEJhc2VfVHlwZWRFbGVtZW50KChUeXBlZEVsZW1lbnQpbnVsbCk7CiAJCQkJcmV0dXJuOwogCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19FTlVNOgogCQkJCWdldEVudW0oKS5jbGVhcigpOwogCQkJCXJldHVybjsKLQkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fTlVNQkVSX0lOVEVSVkFMOgotCQkJCXNldE51bWJlckludGVydmFsKChJbnRlcnZhbCludWxsKTsKLQkJCQlyZXR1cm47CiAJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1JFUVVJUkVEOgogCQkJCWdldFJlcXVpcmVkKCkuY2xlYXIoKTsKIAkJCQlyZXR1cm47CkBAIC01MzksOCArODQ3LDggQEAKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fUFJPUEVSVElFUzoKIAkJCQlnZXRQcm9wZXJ0aWVzKCkuY2xlYXIoKTsKIAkJCQlyZXR1cm47Ci0JCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1RZUEU6Ci0JCQkJZ2V0VHlwZSgpLmNsZWFyKCk7CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0FUWVBFOgorCQkJCWdldEFUeXBlKCkuY2xlYXIoKTsKIAkJCQlyZXR1cm47CiAJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1dSSVRFX09OTFk6CiAJCQkJc2V0V3JpdGVPbmx5KFdSSVRFX09OTFlfRURFRkFVTFQpOwpAQCAtNTUxLDYgKzg1OSwyMSBAQAogCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19PTkVfT0Y6CiAJCQkJZ2V0T25lT2YoKS5jbGVhcigpOwogCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fVFlQRToKKwkJCQlzZXRUeXBlKFRZUEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fQ09OU1Q6CisJCQkJc2V0Q29uc3QoQ09OU1RfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fTUlOX0lURU1TOgorCQkJCXNldE1pbkl0ZW1zKE1JTl9JVEVNU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19NQVhfSVRFTVM6CisJCQkJc2V0TWF4SXRlbXMoTUFYX0lURU1TX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1JFQURfT05MWToKKwkJCQlzZXRSZWFkT25seShSRUFEX09OTFlfRURFRkFVTFQpOworCQkJCXJldHVybjsKIAkJfQogCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKIAl9CkBAIC01NjMsMjYgKzg4NiwzOCBAQAogCUBPdmVycmlkZQogCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CiAJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1RJVExFOgorCQkJCXJldHVybiBUSVRMRV9FREVGQVVMVCA9PSBudWxsID8gZ2V0VGl0bGUoKSAhPSBudWxsIDogIVRJVExFX0VERUZBVUxULmVxdWFscyhnZXRUaXRsZSgpKTsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fREVTQ1JJUFRJT046CisJCQkJcmV0dXJuIERFU0NSSVBUSU9OX0VERUZBVUxUID09IG51bGwgPyBnZXREZXNjcmlwdGlvbigpICE9IG51bGwgOiAhREVTQ1JJUFRJT05fRURFRkFVTFQuZXF1YWxzKGdldERlc2NyaXB0aW9uKCkpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19CQVNFX1RZUEVEX0VMRU1FTlQ6CiAJCQkJcmV0dXJuIGJhc2VfVHlwZWRFbGVtZW50ICE9IG51bGw7CiAJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0VOVU06CiAJCQkJcmV0dXJuIGVudW1fICE9IG51bGwgJiYgIWVudW1fLmlzRW1wdHkoKTsKLQkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fTlVNQkVSX0lOVEVSVkFMOgotCQkJCXJldHVybiBudW1iZXJJbnRlcnZhbCAhPSBudWxsOwogCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19SRVFVSVJFRDoKIAkJCQlyZXR1cm4gcmVxdWlyZWQgIT0gbnVsbCAmJiAhcmVxdWlyZWQuaXNFbXB0eSgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19JVEVNUzoKIAkJCQlyZXR1cm4gaXRlbXMgIT0gbnVsbCAmJiAhaXRlbXMuaXNFbXB0eSgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19QUk9QRVJUSUVTOgogCQkJCXJldHVybiBwcm9wZXJ0aWVzICE9IG51bGwgJiYgIXByb3BlcnRpZXMuaXNFbXB0eSgpOwotCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19UWVBFOgotCQkJCXJldHVybiB0eXBlICE9IG51bGwgJiYgIXR5cGUuaXNFbXB0eSgpOworCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19BVFlQRToKKwkJCQlyZXR1cm4gYVR5cGUgIT0gbnVsbCAmJiAhYVR5cGUuaXNFbXB0eSgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkRBVEFfU0NIRU1BX19XUklURV9PTkxZOgogCQkJCXJldHVybiB3cml0ZU9ubHkgIT0gV1JJVEVfT05MWV9FREVGQVVMVDsKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fRk9STUFUOgogCQkJCXJldHVybiBGT1JNQVRfRURFRkFVTFQgPT0gbnVsbCA/IGZvcm1hdCAhPSBudWxsIDogIUZPUk1BVF9FREVGQVVMVC5lcXVhbHMoZm9ybWF0KTsKIAkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fT05FX09GOgogCQkJCXJldHVybiBvbmVPZiAhPSBudWxsICYmICFvbmVPZi5pc0VtcHR5KCk7CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1RZUEU6CisJCQkJcmV0dXJuIFRZUEVfRURFRkFVTFQgPT0gbnVsbCA/IGdldFR5cGUoKSAhPSBudWxsIDogIVRZUEVfRURFRkFVTFQuZXF1YWxzKGdldFR5cGUoKSk7CisJCQljYXNlIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX0NPTlNUOgorCQkJCXJldHVybiBDT05TVF9FREVGQVVMVCA9PSBudWxsID8gZ2V0Q29uc3QoKSAhPSBudWxsIDogIUNPTlNUX0VERUZBVUxULmVxdWFscyhnZXRDb25zdCgpKTsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fTUlOX0lURU1TOgorCQkJCXJldHVybiBnZXRNaW5JdGVtcygpICE9IE1JTl9JVEVNU19FREVGQVVMVDsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fTUFYX0lURU1TOgorCQkJCXJldHVybiBnZXRNYXhJdGVtcygpICE9IE1BWF9JVEVNU19FREVGQVVMVDsKKwkJCWNhc2UgV29UUGFja2FnZS5EQVRBX1NDSEVNQV9fUkVBRF9PTkxZOgorCQkJCXJldHVybiBpc1JlYWRPbmx5KCkgIT0gUkVBRF9PTkxZX0VERUZBVUxUOwogCQl9CiAJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKIAl9CkBAIC01OTcsMTIgKzkzMiwzMiBAQAogCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CiAKIAkJU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlcihzdXBlci50b1N0cmluZygpKTsKLQkJcmVzdWx0LmFwcGVuZCgiICh3cml0ZU9ubHk6ICIpOworCQlyZXN1bHQuYXBwZW5kKCIgKGVudW06ICIpOworCQlyZXN1bHQuYXBwZW5kKGVudW1fKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB3cml0ZU9ubHk6ICIpOwogCQlyZXN1bHQuYXBwZW5kKHdyaXRlT25seSk7CiAJCXJlc3VsdC5hcHBlbmQoIiwgZm9ybWF0OiAiKTsKIAkJcmVzdWx0LmFwcGVuZChmb3JtYXQpOwogCQlyZXN1bHQuYXBwZW5kKCcpJyk7CiAJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIAl9CisJCisJLyoqCisJICogR2V0dGVyIGZvciBKU09OIHNlcmlhbGl6YXRpb24KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBKc29uR2V0dGVyKCJyZXF1aXJlZCIpCisJcHVibGljIEVMaXN0PFN0cmluZz4gZ2V0UmVxdWlyZWRBc1N0cmluZygpIHsKKwkJRUxpc3Q8U3RyaW5nPiByZXF1aXJlZEFzU3RyaW5nID0gbmV3IFVuaXF1ZUVMaXN0PFN0cmluZz4oKTsKKwkJaWYgKHJlcXVpcmVkID09IG51bGwpIHsKKwkJCXJlcXVpcmVkID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxQcm9wZXJ0eT4oUHJvcGVydHkuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuREFUQV9TQ0hFTUFfX1JFUVVJUkVEKTsKKwkJfQorCQlmb3IgKFByb3BlcnR5IHByb3BlcnR5IDogcmVxdWlyZWQpIHsKKwkJCWlmICghcHJvcGVydHkuZ2V0TmFtZSgpLmlzRW1wdHkoKSkgeworCQkJCXJlcXVpcmVkQXNTdHJpbmcuYWRkKHByb3BlcnR5LmdldE5hbWUoKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlcXVpcmVkQXNTdHJpbmc7CisJfQogCiB9IC8vRGF0YVNjaGVtYUltcGwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvRXZlbnRBZmZvcmRhbmNlSW1wbC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9FdmVudEFmZm9yZGFuY2VJbXBsLmphdmEKaW5kZXggNjg2OTBhNy4uNWM5ZGQ2NSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9FdmVudEFmZm9yZGFuY2VJbXBsLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9FdmVudEFmZm9yZGFuY2VJbXBsLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGw7CkBAIC0yMyw4ICsyNCwxMSBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkRhdGFTY2hlbWE7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRXZlbnRBZmZvcmRhbmNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUmVjZXB0aW9uOwogCi1pbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuU2lnbmFsOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25HZXR0ZXI7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbklnbm9yZTsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uUHJvcGVydHlPcmRlcjsKIAogLyoqCiAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgpAQCAtMzQsNyArMzgsNyBAQAogICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CiAgKiA8L3A+CiAgKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5FdmVudEFmZm9yZGFuY2VJbXBsI2dldEJhc2VfU2lnbmFsIDxlbT5CYXNlIFNpZ25hbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5FdmVudEFmZm9yZGFuY2VJbXBsI2dldEJhc2VfUmVjZXB0aW9uIDxlbT5CYXNlIFJlY2VwdGlvbjwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5FdmVudEFmZm9yZGFuY2VJbXBsI2dldERhdGEgPGVtPkRhdGE8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRXZlbnRBZmZvcmRhbmNlSW1wbCNnZXRTdWJzY3JpcHRpb24gPGVtPlN1YnNjcmlwdGlvbjwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5FdmVudEFmZm9yZGFuY2VJbXBsI2dldENhbmNlbGxhdGlvbiA8ZW0+Q2FuY2VsbGF0aW9uPC9lbT59PC9saT4KQEAgLTQyLDE2ICs0NiwxNyBAQAogICoKICAqIEBnZW5lcmF0ZWQKICAqLworQEpzb25Qcm9wZXJ0eU9yZGVyKHsiQHR5cGUiLCAidGl0bGUiLCAiZGVzY3JpcHRpb24iLCAiZGF0YSIsICJzdWJzY3JpcHRpb24iLCAiY2FuY2VsbGF0aW9uIn0pCiBwdWJsaWMgY2xhc3MgRXZlbnRBZmZvcmRhbmNlSW1wbCBleHRlbmRzIEludGVyYWN0aW9uQWZmb3JkYW5jZUltcGwgaW1wbGVtZW50cyBFdmVudEFmZm9yZGFuY2UgewogCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfU2lnbmFsKCkgPGVtPkJhc2UgU2lnbmFsPC9lbT59JyByZWZlcmVuY2UuCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9SZWNlcHRpb24oKSA8ZW0+QmFzZSBSZWNlcHRpb248L2VtPn0nIHJlZmVyZW5jZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldEJhc2VfU2lnbmFsKCkKKwkgKiBAc2VlICNnZXRCYXNlX1JlY2VwdGlvbigpCiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JcHJvdGVjdGVkIFNpZ25hbCBiYXNlX1NpZ25hbDsKKwlwcm90ZWN0ZWQgUmVjZXB0aW9uIGJhc2VfUmVjZXB0aW9uOwogCiAJLyoqCiAJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGF0YSgpIDxlbT5EYXRhPC9lbT59JyByZWZlcmVuY2UuCkBAIC0xMDgsNDYgKzExMyw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBTaWduYWwgZ2V0QmFzZV9TaWduYWwoKSB7Ci0JCWlmIChiYXNlX1NpZ25hbCAhPSBudWxsICYmIGJhc2VfU2lnbmFsLmVJc1Byb3h5KCkpIHsKLQkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX1NpZ25hbCA9IChJbnRlcm5hbEVPYmplY3QpYmFzZV9TaWduYWw7Ci0JCQliYXNlX1NpZ25hbCA9IChTaWduYWwpZVJlc29sdmVQcm94eShvbGRCYXNlX1NpZ25hbCk7Ci0JCQlpZiAoYmFzZV9TaWduYWwgIT0gb2xkQmFzZV9TaWduYWwpIHsKLQkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBXb1RQYWNrYWdlLkVWRU5UX0FGRk9SREFOQ0VfX0JBU0VfU0lHTkFMLCBvbGRCYXNlX1NpZ25hbCwgYmFzZV9TaWduYWwpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmFzZV9TaWduYWw7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFNpZ25hbCBiYXNpY0dldEJhc2VfU2lnbmFsKCkgewotCQlyZXR1cm4gYmFzZV9TaWduYWw7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc2V0QmFzZV9TaWduYWwoU2lnbmFsIG5ld0Jhc2VfU2lnbmFsKSB7Ci0JCVNpZ25hbCBvbGRCYXNlX1NpZ25hbCA9IGJhc2VfU2lnbmFsOwotCQliYXNlX1NpZ25hbCA9IG5ld0Jhc2VfU2lnbmFsOwotCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCi0JCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXb1RQYWNrYWdlLkVWRU5UX0FGRk9SREFOQ0VfX0JBU0VfU0lHTkFMLCBvbGRCYXNlX1NpZ25hbCwgYmFzZV9TaWduYWwpKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigiZGF0YSIpCiAJcHVibGljIERhdGFTY2hlbWEgZ2V0RGF0YSgpIHsKIAkJaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhLmVJc1Byb3h5KCkpIHsKIAkJCUludGVybmFsRU9iamVjdCBvbGREYXRhID0gKEludGVybmFsRU9iamVjdClkYXRhOwpAQCAtMTc1LDYgKzE0MSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIHZvaWQgc2V0RGF0YShEYXRhU2NoZW1hIG5ld0RhdGEpIHsKIAkJRGF0YVNjaGVtYSBvbGREYXRhID0gZGF0YTsKIAkJZGF0YSA9IG5ld0RhdGE7CkBAIC0xODgsNiArMTU1LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoInN1YnNjcmlwdGlvbiIpCiAJcHVibGljIERhdGFTY2hlbWEgZ2V0U3Vic2NyaXB0aW9uKCkgewogCQlpZiAoc3Vic2NyaXB0aW9uICE9IG51bGwgJiYgc3Vic2NyaXB0aW9uLmVJc1Byb3h5KCkpIHsKIAkJCUludGVybmFsRU9iamVjdCBvbGRTdWJzY3JpcHRpb24gPSAoSW50ZXJuYWxFT2JqZWN0KXN1YnNjcmlwdGlvbjsKQEAgLTIxNSw2ICsxODMsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFN1YnNjcmlwdGlvbihEYXRhU2NoZW1hIG5ld1N1YnNjcmlwdGlvbikgewogCQlEYXRhU2NoZW1hIG9sZFN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjsKIAkJc3Vic2NyaXB0aW9uID0gbmV3U3Vic2NyaXB0aW9uOwpAQCAtMjI4LDYgKzE5Nyw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJjYW5jZWxsYXRpb24iKQogCXB1YmxpYyBEYXRhU2NoZW1hIGdldENhbmNlbGxhdGlvbigpIHsKIAkJaWYgKGNhbmNlbGxhdGlvbiAhPSBudWxsICYmIGNhbmNlbGxhdGlvbi5lSXNQcm94eSgpKSB7CiAJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQ2FuY2VsbGF0aW9uID0gKEludGVybmFsRU9iamVjdCljYW5jZWxsYXRpb247CkBAIC0yNTUsNiArMjI1LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRDYW5jZWxsYXRpb24oRGF0YVNjaGVtYSBuZXdDYW5jZWxsYXRpb24pIHsKIAkJRGF0YVNjaGVtYSBvbGRDYW5jZWxsYXRpb24gPSBjYW5jZWxsYXRpb247CiAJCWNhbmNlbGxhdGlvbiA9IG5ld0NhbmNlbGxhdGlvbjsKQEAgLTI2OCwxMSArMjM5LDUzIEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCisJcHVibGljIFJlY2VwdGlvbiBnZXRCYXNlX1JlY2VwdGlvbigpIHsKKwkJaWYgKGJhc2VfUmVjZXB0aW9uICE9IG51bGwgJiYgYmFzZV9SZWNlcHRpb24uZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfUmVjZXB0aW9uID0gKEludGVybmFsRU9iamVjdCliYXNlX1JlY2VwdGlvbjsKKwkJCWJhc2VfUmVjZXB0aW9uID0gKFJlY2VwdGlvbillUmVzb2x2ZVByb3h5KG9sZEJhc2VfUmVjZXB0aW9uKTsKKwkJCWlmIChiYXNlX1JlY2VwdGlvbiAhPSBvbGRCYXNlX1JlY2VwdGlvbikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdvVFBhY2thZ2UuRVZFTlRfQUZGT1JEQU5DRV9fQkFTRV9SRUNFUFRJT04sIG9sZEJhc2VfUmVjZXB0aW9uLCBiYXNlX1JlY2VwdGlvbikpOworCQkJfQorCQl9CisJCXJldHVybiBiYXNlX1JlY2VwdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVjZXB0aW9uIGJhc2ljR2V0QmFzZV9SZWNlcHRpb24oKSB7CisJCXJldHVybiBiYXNlX1JlY2VwdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQorCXB1YmxpYyB2b2lkIHNldEJhc2VfUmVjZXB0aW9uKFJlY2VwdGlvbiBuZXdCYXNlX1JlY2VwdGlvbikgeworCQlSZWNlcHRpb24gb2xkQmFzZV9SZWNlcHRpb24gPSBiYXNlX1JlY2VwdGlvbjsKKwkJYmFzZV9SZWNlcHRpb24gPSBuZXdCYXNlX1JlY2VwdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgV29UUGFja2FnZS5FVkVOVF9BRkZPUkRBTkNFX19CQVNFX1JFQ0VQVElPTiwgb2xkQmFzZV9SZWNlcHRpb24sIGJhc2VfUmVjZXB0aW9uKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCiAJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgewogCQlzd2l0Y2ggKGZlYXR1cmVJRCkgewotCQkJY2FzZSBXb1RQYWNrYWdlLkVWRU5UX0FGRk9SREFOQ0VfX0JBU0VfU0lHTkFMOgotCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0QmFzZV9TaWduYWwoKTsKLQkJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX1NpZ25hbCgpOworCQkJY2FzZSBXb1RQYWNrYWdlLkVWRU5UX0FGRk9SREFOQ0VfX0JBU0VfUkVDRVBUSU9OOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0QmFzZV9SZWNlcHRpb24oKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX1JlY2VwdGlvbigpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkVWRU5UX0FGRk9SREFOQ0VfX0RBVEE6CiAJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXREYXRhKCk7CiAJCQkJcmV0dXJuIGJhc2ljR2V0RGF0YSgpOwpAQCAtMjk0LDggKzMwNyw4IEBACiAJQE92ZXJyaWRlCiAJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKIAkJc3dpdGNoIChmZWF0dXJlSUQpIHsKLQkJCWNhc2UgV29UUGFja2FnZS5FVkVOVF9BRkZPUkRBTkNFX19CQVNFX1NJR05BTDoKLQkJCQlzZXRCYXNlX1NpZ25hbCgoU2lnbmFsKW5ld1ZhbHVlKTsKKwkJCWNhc2UgV29UUGFja2FnZS5FVkVOVF9BRkZPUkRBTkNFX19CQVNFX1JFQ0VQVElPTjoKKwkJCQlzZXRCYXNlX1JlY2VwdGlvbigoUmVjZXB0aW9uKW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47CiAJCQljYXNlIFdvVFBhY2thZ2UuRVZFTlRfQUZGT1JEQU5DRV9fREFUQToKIAkJCQlzZXREYXRhKChEYXRhU2NoZW1hKW5ld1ZhbHVlKTsKQEAgLTMxOCw4ICszMzEsOCBAQAogCUBPdmVycmlkZQogCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CiAJCXN3aXRjaCAoZmVhdHVyZUlEKSB7Ci0JCQljYXNlIFdvVFBhY2thZ2UuRVZFTlRfQUZGT1JEQU5DRV9fQkFTRV9TSUdOQUw6Ci0JCQkJc2V0QmFzZV9TaWduYWwoKFNpZ25hbCludWxsKTsKKwkJCWNhc2UgV29UUGFja2FnZS5FVkVOVF9BRkZPUkRBTkNFX19CQVNFX1JFQ0VQVElPTjoKKwkJCQlzZXRCYXNlX1JlY2VwdGlvbigoUmVjZXB0aW9uKW51bGwpOwogCQkJCXJldHVybjsKIAkJCWNhc2UgV29UUGFja2FnZS5FVkVOVF9BRkZPUkRBTkNFX19EQVRBOgogCQkJCXNldERhdGEoKERhdGFTY2hlbWEpbnVsbCk7CkBAIC0zNDIsOCArMzU1LDggQEAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgewogCQlzd2l0Y2ggKGZlYXR1cmVJRCkgewotCQkJY2FzZSBXb1RQYWNrYWdlLkVWRU5UX0FGRk9SREFOQ0VfX0JBU0VfU0lHTkFMOgotCQkJCXJldHVybiBiYXNlX1NpZ25hbCAhPSBudWxsOworCQkJY2FzZSBXb1RQYWNrYWdlLkVWRU5UX0FGRk9SREFOQ0VfX0JBU0VfUkVDRVBUSU9OOgorCQkJCXJldHVybiBiYXNlX1JlY2VwdGlvbiAhPSBudWxsOwogCQkJY2FzZSBXb1RQYWNrYWdlLkVWRU5UX0FGRk9SREFOQ0VfX0RBVEE6CiAJCQkJcmV0dXJuIGRhdGEgIT0gbnVsbDsKIAkJCWNhc2UgV29UUGFja2FnZS5FVkVOVF9BRkZPUkRBTkNFX19TVUJTQ1JJUFRJT046CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL0Zvcm1JbXBsLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL0Zvcm1JbXBsLmphdmEKaW5kZXggMGEzYjIxNC4uZGNiYzFlYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9Gb3JtSW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvRm9ybUltcGwuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbDsKQEAgLTE4LDE4ICsxOSwyNSBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VbmlxdWVFTGlzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FRGF0YVR5cGVVbmlxdWVFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLmNvcmUuc3RydWN0dXJlLmltcGwuTWV0YVZhbHVlU3BlY2lmaWNhdGlvbkltcGw7Ci0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0UmVzb2x2aW5nRUxpc3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRm9ybTsKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5PcEtpbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuU2VjdXJpdHlTY2hlbWU7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuU3ViUHJvdG9jb2xLaW5kOwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQ29tbWVudDsKKworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25HZXR0ZXI7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbklnbm9yZTsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uUHJvcGVydHlPcmRlcjsKIAogLyoqCiAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgpAQCAtNDYsMTEgKzU0LDE0IEBACiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5Gb3JtSW1wbCNnZXRTdWJQcm90b2NvbCA8ZW0+U3ViIFByb3RvY29sPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkZvcm1JbXBsI2dldFNjb3BlcyA8ZW0+U2NvcGVzPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkZvcm1JbXBsI2dldFJlc3BvbnNlIDxlbT5SZXNwb25zZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5Gb3JtSW1wbCNnZXRTZWN1cml0eSA8ZW0+U2VjdXJpdHk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuRm9ybUltcGwjZ2V0QmFzZV9Db21tZW50IDxlbT5CYXNlIENvbW1lbnQ8L2VtPn08L2xpPgogICogPC91bD4KICAqCiAgKiBAZ2VuZXJhdGVkCiAgKi8KLXB1YmxpYyBjbGFzcyBGb3JtSW1wbCBleHRlbmRzIE1ldGFWYWx1ZVNwZWNpZmljYXRpb25JbXBsIGltcGxlbWVudHMgRm9ybSB7CitASnNvblByb3BlcnR5T3JkZXIoeyJvcCIsICJocmVmIiwgImNvbnRlbnRUeXBlIiwgImNvbnRlbnRDb2RpbmciLCAic3ViUHJvdG9jb2wiLCAic2VjdXJpdHkiLCAic2NvcGVzIiwgInJlc3BvbnNlIn0pCitwdWJsaWMgY2xhc3MgRm9ybUltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgRm9ybSB7CiAJLyoqCiAJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3AoKSA8ZW0+T3A8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CkBAIC0xNDIsNiArMTUzLDE2IEBACiAJcHJvdGVjdGVkIFN1YlByb3RvY29sS2luZCBzdWJQcm90b2NvbCA9IFNVQl9QUk9UT0NPTF9FREVGQVVMVDsKIAogCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNjb3BlcygpIDxlbT5TY29wZXM8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2NvcGVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8U3RyaW5nPiBzY29wZXM7CisKKwkvKioKIAkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVzcG9uc2UoKSA8ZW0+UmVzcG9uc2U8L2VtPn0nIGF0dHJpYnV0ZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgpAQCAtMTYyLDYgKzE4MywyNiBAQAogCXByb3RlY3RlZCBTdHJpbmcgcmVzcG9uc2UgPSBSRVNQT05TRV9FREVGQVVMVDsKIAogCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlY3VyaXR5KCkgPGVtPlNlY3VyaXR5PC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNlY3VyaXR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8U2VjdXJpdHlTY2hlbWU+IHNlY3VyaXR5OworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9Db21tZW50KCkgPGVtPkJhc2UgQ29tbWVudDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QmFzZV9Db21tZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tbWVudCBiYXNlX0NvbW1lbnQ7CisKKwkvKioKIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogCSAqIEBnZW5lcmF0ZWQKQEAgLTE4Niw2ICsyMjcsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigib3AiKQogCXB1YmxpYyBFTGlzdDxPcEtpbmQ+IGdldE9wKCkgewogCQlpZiAob3AgPT0gbnVsbCkgewogCQkJb3AgPSBuZXcgRURhdGFUeXBlVW5pcXVlRUxpc3Q8T3BLaW5kPihPcEtpbmQuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuRk9STV9fT1ApOwpAQCAtMTk5LDYgKzI0MSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJvcCIpCiAJcHVibGljIFN0cmluZyBnZXRIcmVmKCkgewogCQlyZXR1cm4gaHJlZjsKIAl9CkBAIC0yMDksNiArMjUyLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRIcmVmKFN0cmluZyBuZXdIcmVmKSB7CiAJCVN0cmluZyBvbGRIcmVmID0gaHJlZjsKIAkJaHJlZiA9IG5ld0hyZWY7CkBAIC0yMjIsNiArMjY2LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoImNvbnRlbnRUeXBlIikKIAlwdWJsaWMgU3RyaW5nIGdldENvbnRlbnRUeXBlKCkgewogCQlyZXR1cm4gY29udGVudFR5cGU7CiAJfQpAQCAtMjMyLDYgKzI3Nyw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIHZvaWQgc2V0Q29udGVudFR5cGUoU3RyaW5nIG5ld0NvbnRlbnRUeXBlKSB7CiAJCVN0cmluZyBvbGRDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwogCQljb250ZW50VHlwZSA9IG5ld0NvbnRlbnRUeXBlOwpAQCAtMjQ1LDYgKzI5MSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJjb250ZW50Q29kaW5nIikKIAlwdWJsaWMgU3RyaW5nIGdldENvbnRlbnRDb2RpbmcoKSB7CiAJCXJldHVybiBjb250ZW50Q29kaW5nOwogCX0KQEAgLTI1NSw2ICszMDIsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldENvbnRlbnRDb2RpbmcoU3RyaW5nIG5ld0NvbnRlbnRDb2RpbmcpIHsKIAkJU3RyaW5nIG9sZENvbnRlbnRDb2RpbmcgPSBjb250ZW50Q29kaW5nOwogCQljb250ZW50Q29kaW5nID0gbmV3Q29udGVudENvZGluZzsKQEAgLTI2OCw2ICszMTYsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigic3ViUHJvdG9jb2wiKQogCXB1YmxpYyBTdWJQcm90b2NvbEtpbmQgZ2V0U3ViUHJvdG9jb2woKSB7CiAJCXJldHVybiBzdWJQcm90b2NvbDsKIAl9CkBAIC0yNzgsNiArMzI3LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRTdWJQcm90b2NvbChTdWJQcm90b2NvbEtpbmQgbmV3U3ViUHJvdG9jb2wpIHsKIAkJU3ViUHJvdG9jb2xLaW5kIG9sZFN1YlByb3RvY29sID0gc3ViUHJvdG9jb2w7CiAJCXN1YlByb3RvY29sID0gbmV3U3ViUHJvdG9jb2wgPT0gbnVsbCA/IFNVQl9QUk9UT0NPTF9FREVGQVVMVCA6IG5ld1N1YlByb3RvY29sOwpAQCAtMjkxLDEwICszNDEsMTIgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoInNjb3BlcyIpCiAJcHVibGljIEVMaXN0PFN0cmluZz4gZ2V0U2NvcGVzKCkgewotCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmV0dXJuIHRoZSAnU2NvcGVzJyBhdHRyaWJ1dGUgbGlzdAotCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAotCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwkJaWYgKHNjb3BlcyA9PSBudWxsKSB7CisJCQlzY29wZXMgPSBuZXcgRURhdGFUeXBlVW5pcXVlRUxpc3Q8U3RyaW5nPihTdHJpbmcuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuRk9STV9fU0NPUEVTKTsKKwkJfQorCQlyZXR1cm4gc2NvcGVzOwogCX0KIAogCS8qKgpAQCAtMzAzLDYgKzM1NSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJyZXNwb25zZSIpCiAJcHVibGljIFN0cmluZyBnZXRSZXNwb25zZSgpIHsKIAkJcmV0dXJuIHJlc3BvbnNlOwogCX0KQEAgLTMxMyw2ICszNjYsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFJlc3BvbnNlKFN0cmluZyBuZXdSZXNwb25zZSkgewogCQlTdHJpbmcgb2xkUmVzcG9uc2UgPSByZXNwb25zZTsKIAkJcmVzcG9uc2UgPSBuZXdSZXNwb25zZTsKQEAgLTMyNiw2ICszODAsNjIgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKKwlwdWJsaWMgRUxpc3Q8U2VjdXJpdHlTY2hlbWU+IGdldFNlY3VyaXR5KCkgeworCQlpZiAoc2VjdXJpdHkgPT0gbnVsbCkgeworCQkJc2VjdXJpdHkgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFNlY3VyaXR5U2NoZW1lPihTZWN1cml0eVNjaGVtZS5jbGFzcywgdGhpcywgV29UUGFja2FnZS5GT1JNX19TRUNVUklUWSk7CisJCX0KKwkJcmV0dXJuIHNlY3VyaXR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBKc29uSWdub3JlCisJcHVibGljIENvbW1lbnQgZ2V0QmFzZV9Db21tZW50KCkgeworCQlpZiAoYmFzZV9Db21tZW50ICE9IG51bGwgJiYgYmFzZV9Db21tZW50LmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0NvbW1lbnQgPSAoSW50ZXJuYWxFT2JqZWN0KWJhc2VfQ29tbWVudDsKKwkJCWJhc2VfQ29tbWVudCA9IChDb21tZW50KWVSZXNvbHZlUHJveHkob2xkQmFzZV9Db21tZW50KTsKKwkJCWlmIChiYXNlX0NvbW1lbnQgIT0gb2xkQmFzZV9Db21tZW50KSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgV29UUGFja2FnZS5GT1JNX19CQVNFX0NPTU1FTlQsIG9sZEJhc2VfQ29tbWVudCwgYmFzZV9Db21tZW50KSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGJhc2VfQ29tbWVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbWVudCBiYXNpY0dldEJhc2VfQ29tbWVudCgpIHsKKwkJcmV0dXJuIGJhc2VfQ29tbWVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQorCXB1YmxpYyB2b2lkIHNldEJhc2VfQ29tbWVudChDb21tZW50IG5ld0Jhc2VfQ29tbWVudCkgeworCQlDb21tZW50IG9sZEJhc2VfQ29tbWVudCA9IGJhc2VfQ29tbWVudDsKKwkJYmFzZV9Db21tZW50ID0gbmV3QmFzZV9Db21tZW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBXb1RQYWNrYWdlLkZPUk1fX0JBU0VfQ09NTUVOVCwgb2xkQmFzZV9Db21tZW50LCBiYXNlX0NvbW1lbnQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKIAlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CiAJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CiAJCQljYXNlIFdvVFBhY2thZ2UuRk9STV9fT1A6CkBAIC0zNDIsNiArNDUyLDExIEBACiAJCQkJcmV0dXJuIGdldFNjb3BlcygpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkZPUk1fX1JFU1BPTlNFOgogCQkJCXJldHVybiBnZXRSZXNwb25zZSgpOworCQkJY2FzZSBXb1RQYWNrYWdlLkZPUk1fX1NFQ1VSSVRZOgorCQkJCXJldHVybiBnZXRTZWN1cml0eSgpOworCQkJY2FzZSBXb1RQYWNrYWdlLkZPUk1fX0JBU0VfQ09NTUVOVDoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldEJhc2VfQ29tbWVudCgpOworCQkJCXJldHVybiBiYXNpY0dldEJhc2VfQ29tbWVudCgpOwogCQl9CiAJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwogCX0KQEAgLTM3OCw2ICs0OTMsMTMgQEAKIAkJCWNhc2UgV29UUGFja2FnZS5GT1JNX19SRVNQT05TRToKIAkJCQlzZXRSZXNwb25zZSgoU3RyaW5nKW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuRk9STV9fU0VDVVJJVFk6CisJCQkJZ2V0U2VjdXJpdHkoKS5jbGVhcigpOworCQkJCWdldFNlY3VyaXR5KCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBTZWN1cml0eVNjaGVtZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5GT1JNX19CQVNFX0NPTU1FTlQ6CisJCQkJc2V0QmFzZV9Db21tZW50KChDb21tZW50KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CiAJCX0KIAkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKIAl9CkBAIC00MTEsNiArNTMzLDEyIEBACiAJCQljYXNlIFdvVFBhY2thZ2UuRk9STV9fUkVTUE9OU0U6CiAJCQkJc2V0UmVzcG9uc2UoUkVTUE9OU0VfRURFRkFVTFQpOwogCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5GT1JNX19TRUNVUklUWToKKwkJCQlnZXRTZWN1cml0eSgpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBXb1RQYWNrYWdlLkZPUk1fX0JBU0VfQ09NTUVOVDoKKwkJCQlzZXRCYXNlX0NvbW1lbnQoKENvbW1lbnQpbnVsbCk7CisJCQkJcmV0dXJuOwogCQl9CiAJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOwogCX0KQEAgLTQzNCw5ICs1NjIsMTMgQEAKIAkJCWNhc2UgV29UUGFja2FnZS5GT1JNX19TVUJfUFJPVE9DT0w6CiAJCQkJcmV0dXJuIHN1YlByb3RvY29sICE9IFNVQl9QUk9UT0NPTF9FREVGQVVMVDsKIAkJCWNhc2UgV29UUGFja2FnZS5GT1JNX19TQ09QRVM6Ci0JCQkJcmV0dXJuICFnZXRTY29wZXMoKS5pc0VtcHR5KCk7CisJCQkJcmV0dXJuIHNjb3BlcyAhPSBudWxsICYmICFzY29wZXMuaXNFbXB0eSgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLkZPUk1fX1JFU1BPTlNFOgogCQkJCXJldHVybiBSRVNQT05TRV9FREVGQVVMVCA9PSBudWxsID8gcmVzcG9uc2UgIT0gbnVsbCA6ICFSRVNQT05TRV9FREVGQVVMVC5lcXVhbHMocmVzcG9uc2UpOworCQkJY2FzZSBXb1RQYWNrYWdlLkZPUk1fX1NFQ1VSSVRZOgorCQkJCXJldHVybiBzZWN1cml0eSAhPSBudWxsICYmICFzZWN1cml0eS5pc0VtcHR5KCk7CisJCQljYXNlIFdvVFBhY2thZ2UuRk9STV9fQkFTRV9DT01NRU5UOgorCQkJCXJldHVybiBiYXNlX0NvbW1lbnQgIT0gbnVsbDsKIAkJfQogCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CiAJfQpAQCAtNDYxLDEwICs1OTMsMzAgQEAKIAkJcmVzdWx0LmFwcGVuZChjb250ZW50Q29kaW5nKTsKIAkJcmVzdWx0LmFwcGVuZCgiLCBzdWJQcm90b2NvbDogIik7CiAJCXJlc3VsdC5hcHBlbmQoc3ViUHJvdG9jb2wpOworCQlyZXN1bHQuYXBwZW5kKCIsIHNjb3BlczogIik7CisJCXJlc3VsdC5hcHBlbmQoc2NvcGVzKTsKIAkJcmVzdWx0LmFwcGVuZCgiLCByZXNwb25zZTogIik7CiAJCXJlc3VsdC5hcHBlbmQocmVzcG9uc2UpOwogCQlyZXN1bHQuYXBwZW5kKCcpJyk7CiAJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIAl9CisJCisJLyoqCisJICogU2VjdXJpdHkgYXR0cmlidXRlIGdldHRlciBmb3IgSlNPTiBzZXJpYWxpemF0aW9uCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlASnNvbkdldHRlcigic2VjdXJpdHkiKQorCXB1YmxpYyBFTGlzdDxTdHJpbmc+IGdldFNlY3VyaXR5QXNTdHJpbmcoKSB7CisJCUVMaXN0PFN0cmluZz4gc2VjdXJpdHlBc1N0cmluZyA9IG5ldyBVbmlxdWVFTGlzdDxTdHJpbmc+KCk7CisJCWlmIChzZWN1cml0eSA9PSBudWxsKSB7CisJCQlzZWN1cml0eSA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8U2VjdXJpdHlTY2hlbWU+KFNlY3VyaXR5U2NoZW1lLmNsYXNzLCB0aGlzLCBXb1RQYWNrYWdlLlRISU5HX19TRUNVUklUWSk7CisJCX0KKwkJZm9yIChTZWN1cml0eVNjaGVtZSBzZWN1cml0eVNjaGVtZSA6IHNlY3VyaXR5KSB7CisJCQlpZiAoc2VjdXJpdHlTY2hlbWUuZ2V0VGl0bGUoKSAhPSBudWxsICYmICFzZWN1cml0eVNjaGVtZS5nZXRUaXRsZSgpLmlzRW1wdHkoKSkgeworCQkJCXNlY3VyaXR5QXNTdHJpbmcuYWRkKHNlY3VyaXR5U2NoZW1lLmdldFRpdGxlKCkpOworCQkJfQorCQl9CisJCXJldHVybiBzZWN1cml0eUFzU3RyaW5nOworCX0KIAogfSAvL0Zvcm1JbXBsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL0ludGVyYWN0aW9uQWZmb3JkYW5jZUltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvSW50ZXJhY3Rpb25BZmZvcmRhbmNlSW1wbC5qYXZhCmluZGV4IDM4NTY4OGEuLjliN2RhZTkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvSW50ZXJhY3Rpb25BZmZvcmRhbmNlSW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvSW50ZXJhY3Rpb25BZmZvcmRhbmNlSW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsOwpAQCAtMjIsMTEgKzIzLDE3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OwotCitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuQWN0aW9uQWZmb3JkYW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5FdmVudEFmZm9yZGFuY2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRm9ybTsKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5JbnRlcmFjdGlvbkFmZm9yZGFuY2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuVHlwZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkNvbW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnQ7CisKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uR2V0dGVyOwogCiAvKioKICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CkBAIC0zNiwxNCArNDMsMzYgQEAKICAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgogICogPC9wPgogICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuSW50ZXJhY3Rpb25BZmZvcmRhbmNlSW1wbCNnZXRUaXRsZSA8ZW0+VGl0bGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuSW50ZXJhY3Rpb25BZmZvcmRhbmNlSW1wbCNnZXREZXNjcmlwdGlvbiA8ZW0+RGVzY3JpcHRpb248L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuSW50ZXJhY3Rpb25BZmZvcmRhbmNlSW1wbCNnZXRGb3JtcyA8ZW0+Rm9ybXM8L2VtPn08L2xpPgotICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuSW50ZXJhY3Rpb25BZmZvcmRhbmNlSW1wbCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLkludGVyYWN0aW9uQWZmb3JkYW5jZUltcGwjZ2V0QVR5cGUgPGVtPkFUeXBlPC9lbT59PC9saT4KICAqIDwvdWw+CiAgKgogICogQGdlbmVyYXRlZAogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZXJhY3Rpb25BZmZvcmRhbmNlSW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBJbnRlcmFjdGlvbkFmZm9yZGFuY2UgewogCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaXRsZSgpIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGl0bGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRJVExFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZXNjcmlwdGlvbigpIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgogCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZvcm1zKCkgPGVtPkZvcm1zPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgpAQCAtNTQsMTQgKzgzLDE0IEBACiAJcHJvdGVjdGVkIEVMaXN0PEZvcm0+IGZvcm1zOwogCiAJLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZSgpIDxlbT5UeXBlPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBVHlwZSgpIDxlbT5BVHlwZTwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRUeXBlKCkKKwkgKiBAc2VlICNnZXRBVHlwZSgpCiAJICogQGdlbmVyYXRlZAogCSAqIEBvcmRlcmVkCiAJICovCi0JcHJvdGVjdGVkIEVMaXN0PFR5cGU+IHR5cGU7CisJcHJvdGVjdGVkIEVMaXN0PFR5cGU+IGFUeXBlOwogCiAJLyoqCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KQEAgLTg1LDYgKzExNCw3NiBAQAogCS8qKgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkgeworCQlOYW1lZEVsZW1lbnQgbmFtZWRFbGVtZW50ID0gbnVsbDsKKwkJaWYgKHRoaXMgaW5zdGFuY2VvZiBBY3Rpb25BZmZvcmRhbmNlKSB7CisJCQlBY3Rpb25BZmZvcmRhbmNlIGFmZm9yZGFuY2UgPSAoQWN0aW9uQWZmb3JkYW5jZSkgdGhpczsKKwkJCW5hbWVkRWxlbWVudCA9IGFmZm9yZGFuY2UuZ2V0QmFzZV9PcGVyYXRpb24oKTsKKwkJfSBlbHNlIGlmICh0aGlzIGluc3RhbmNlb2YgRXZlbnRBZmZvcmRhbmNlKSB7CisJCQlFdmVudEFmZm9yZGFuY2UgYWZmb3JkYW5jZSA9IChFdmVudEFmZm9yZGFuY2UpIHRoaXM7CisJCQluYW1lZEVsZW1lbnQgPSBhZmZvcmRhbmNlLmdldEJhc2VfUmVjZXB0aW9uKCk7CisJCX0KKwkJaWYgKG5hbWVkRWxlbWVudCAhPSBudWxsKSB7CisJCQlyZXR1cm4gbmFtZWRFbGVtZW50LmdldE5hbWUoKTsKKwkJfQorCQlyZXR1cm4gIiI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0VGl0bGUoU3RyaW5nIG5ld1RpdGxlKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBzZXQgdGhlICdUaXRsZScgYXR0cmlidXRlCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCQlFbGVtZW50IGVsZW1lbnQgPSBudWxsOworCQlpZiAodGhpcyBpbnN0YW5jZW9mIEFjdGlvbkFmZm9yZGFuY2UpIHsKKwkJCUFjdGlvbkFmZm9yZGFuY2UgYWZmb3JkYW5jZSA9IChBY3Rpb25BZmZvcmRhbmNlKSB0aGlzOworCQkJZWxlbWVudCA9IGFmZm9yZGFuY2UuZ2V0QmFzZV9PcGVyYXRpb24oKTsKKwkJfSBlbHNlIGlmICh0aGlzIGluc3RhbmNlb2YgRXZlbnRBZmZvcmRhbmNlKSB7CisJCQlFdmVudEFmZm9yZGFuY2UgYWZmb3JkYW5jZSA9IChFdmVudEFmZm9yZGFuY2UpIHRoaXM7CisJCQllbGVtZW50ID0gYWZmb3JkYW5jZS5nZXRCYXNlX1JlY2VwdGlvbigpOworCQl9CisJCWlmIChlbGVtZW50ICE9IG51bGwpIHsKKwkJCWZvciAoQ29tbWVudCBjb21tZW50IDogZWxlbWVudC5nZXRPd25lZENvbW1lbnRzKCkpIHsKKwkJCQlpZiAoIWNvbW1lbnQuZ2V0Qm9keSgpLmlzRW1wdHkoKSkgeworCQkJCQlyZXR1cm4gY29tbWVudC5nZXRCb2R5KCk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiAiIjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgbmV3RGVzY3JpcHRpb24pIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ0Rlc2NyaXB0aW9uJyBhdHRyaWJ1dGUKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCkBAIC0xMDEsMTEgKzIwMCwxMiBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgRUxpc3Q8VHlwZT4gZ2V0VHlwZSgpIHsKLQkJaWYgKHR5cGUgPT0gbnVsbCkgewotCQkJdHlwZSA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8VHlwZT4oVHlwZS5jbGFzcywgdGhpcywgV29UUGFja2FnZS5JTlRFUkFDVElPTl9BRkZPUkRBTkNFX19UWVBFKTsKKwlASnNvbkdldHRlcigiQHR5cGUiKQorCXB1YmxpYyBFTGlzdDxUeXBlPiBnZXRBVHlwZSgpIHsKKwkJaWYgKGFUeXBlID09IG51bGwpIHsKKwkJCWFUeXBlID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxUeXBlPihUeXBlLmNsYXNzLCB0aGlzLCBXb1RQYWNrYWdlLklOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0FUWVBFKTsKIAkJfQotCQlyZXR1cm4gdHlwZTsKKwkJcmV0dXJuIGFUeXBlOwogCX0KIAogCS8qKgpAQCAtMTE2LDEwICsyMTYsMTQgQEAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CiAJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFdvVFBhY2thZ2UuSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fVElUTEU6CisJCQkJcmV0dXJuIGdldFRpdGxlKCk7CisJCQljYXNlIFdvVFBhY2thZ2UuSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fREVTQ1JJUFRJT046CisJCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7CiAJCQljYXNlIFdvVFBhY2thZ2UuSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fRk9STVM6CiAJCQkJcmV0dXJuIGdldEZvcm1zKCk7Ci0JCQljYXNlIFdvVFBhY2thZ2UuSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fVFlQRToKLQkJCQlyZXR1cm4gZ2V0VHlwZSgpOworCQkJY2FzZSBXb1RQYWNrYWdlLklOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0FUWVBFOgorCQkJCXJldHVybiBnZXRBVHlwZSgpOwogCQl9CiAJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwogCX0KQEAgLTEzMywxMyArMjM3LDE5IEBACiAJQE92ZXJyaWRlCiAJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKIAkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgV29UUGFja2FnZS5JTlRFUkFDVElPTl9BRkZPUkRBTkNFX19USVRMRToKKwkJCQlzZXRUaXRsZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fREVTQ1JJUFRJT046CisJCQkJc2V0RGVzY3JpcHRpb24oKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOwogCQkJY2FzZSBXb1RQYWNrYWdlLklOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0ZPUk1TOgogCQkJCWdldEZvcm1zKCkuY2xlYXIoKTsKIAkJCQlnZXRGb3JtcygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRm9ybT4pbmV3VmFsdWUpOwogCQkJCXJldHVybjsKLQkJCWNhc2UgV29UUGFja2FnZS5JTlRFUkFDVElPTl9BRkZPUkRBTkNFX19UWVBFOgotCQkJCWdldFR5cGUoKS5jbGVhcigpOwotCQkJCWdldFR5cGUoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFR5cGU+KW5ld1ZhbHVlKTsKKwkJCWNhc2UgV29UUGFja2FnZS5JTlRFUkFDVElPTl9BRkZPUkRBTkNFX19BVFlQRToKKwkJCQlnZXRBVHlwZSgpLmNsZWFyKCk7CisJCQkJZ2V0QVR5cGUoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFR5cGU+KW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47CiAJCX0KIAkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKQEAgLTE1MywxMSArMjYzLDE3IEBACiAJQE92ZXJyaWRlCiAJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKIAkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgV29UUGFja2FnZS5JTlRFUkFDVElPTl9BRkZPUkRBTkNFX19USVRMRToKKwkJCQlzZXRUaXRsZShUSVRMRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBXb1RQYWNrYWdlLklOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0RFU0NSSVBUSU9OOgorCQkJCXNldERlc2NyaXB0aW9uKERFU0NSSVBUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CiAJCQljYXNlIFdvVFBhY2thZ2UuSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fRk9STVM6CiAJCQkJZ2V0Rm9ybXMoKS5jbGVhcigpOwogCQkJCXJldHVybjsKLQkJCWNhc2UgV29UUGFja2FnZS5JTlRFUkFDVElPTl9BRkZPUkRBTkNFX19UWVBFOgotCQkJCWdldFR5cGUoKS5jbGVhcigpOworCQkJY2FzZSBXb1RQYWNrYWdlLklOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0FUWVBFOgorCQkJCWdldEFUeXBlKCkuY2xlYXIoKTsKIAkJCQlyZXR1cm47CiAJCX0KIAkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CkBAIC0xNzEsMTAgKzI4NywxNCBAQAogCUBPdmVycmlkZQogCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CiAJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFdvVFBhY2thZ2UuSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fVElUTEU6CisJCQkJcmV0dXJuIFRJVExFX0VERUZBVUxUID09IG51bGwgPyBnZXRUaXRsZSgpICE9IG51bGwgOiAhVElUTEVfRURFRkFVTFQuZXF1YWxzKGdldFRpdGxlKCkpOworCQkJY2FzZSBXb1RQYWNrYWdlLklOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0RFU0NSSVBUSU9OOgorCQkJCXJldHVybiBERVNDUklQVElPTl9FREVGQVVMVCA9PSBudWxsID8gZ2V0RGVzY3JpcHRpb24oKSAhPSBudWxsIDogIURFU0NSSVBUSU9OX0VERUZBVUxULmVxdWFscyhnZXREZXNjcmlwdGlvbigpKTsKIAkJCWNhc2UgV29UUGFja2FnZS5JTlRFUkFDVElPTl9BRkZPUkRBTkNFX19GT1JNUzoKIAkJCQlyZXR1cm4gZm9ybXMgIT0gbnVsbCAmJiAhZm9ybXMuaXNFbXB0eSgpOwotCQkJY2FzZSBXb1RQYWNrYWdlLklOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX1RZUEU6Ci0JCQkJcmV0dXJuIHR5cGUgIT0gbnVsbCAmJiAhdHlwZS5pc0VtcHR5KCk7CisJCQljYXNlIFdvVFBhY2thZ2UuSU5URVJBQ1RJT05fQUZGT1JEQU5DRV9fQVRZUEU6CisJCQkJcmV0dXJuIGFUeXBlICE9IG51bGwgJiYgIWFUeXBlLmlzRW1wdHkoKTsKIAkJfQogCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CiAJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9MaW5rSW1wbC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9MaW5rSW1wbC5qYXZhCmluZGV4IDlhNTM4ZGUuLmViNGEzZTYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvTGlua0ltcGwuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL0xpbmtJbXBsLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGw7CkBAIC0yNiw2ICsyNywxMCBAQAogCiBpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQXNzb2NpYXRpb247CiAKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uR2V0dGVyOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25JZ25vcmU7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5T3JkZXI7CisKIC8qKgogICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KICAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MaW5rPC9iPjwvZW0+Jy4KQEAgLTQzLDYgKzQ4LDcgQEAKICAqCiAgKiBAZ2VuZXJhdGVkCiAgKi8KK0BKc29uUHJvcGVydHlPcmRlcih7ImhyZWYiLCAidHlwZSIsICJyZWwiLCAiYW5jaG9yIn0pCiBwdWJsaWMgY2xhc3MgTGlua0ltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgTGluayB7CiAJLyoqCiAJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9Bc3NvY2lhdGlvbigpIDxlbT5CYXNlIEFzc29jaWF0aW9uPC9lbT59JyByZWZlcmVuY2UuCkBAIC0xNTksNiArMTY1LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgQXNzb2NpYXRpb24gZ2V0QmFzZV9Bc3NvY2lhdGlvbigpIHsKIAkJaWYgKGJhc2VfQXNzb2NpYXRpb24gIT0gbnVsbCAmJiBiYXNlX0Fzc29jaWF0aW9uLmVJc1Byb3h5KCkpIHsKIAkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0Fzc29jaWF0aW9uID0gKEludGVybmFsRU9iamVjdCliYXNlX0Fzc29jaWF0aW9uOwpAQCAtMTg2LDYgKzE5Myw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIHZvaWQgc2V0QmFzZV9Bc3NvY2lhdGlvbihBc3NvY2lhdGlvbiBuZXdCYXNlX0Fzc29jaWF0aW9uKSB7CiAJCUFzc29jaWF0aW9uIG9sZEJhc2VfQXNzb2NpYXRpb24gPSBiYXNlX0Fzc29jaWF0aW9uOwogCQliYXNlX0Fzc29jaWF0aW9uID0gbmV3QmFzZV9Bc3NvY2lhdGlvbjsKQEAgLTE5OSw2ICsyMDcsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigiaHJlZiIpCiAJcHVibGljIFN0cmluZyBnZXRIcmVmKCkgewogCQlyZXR1cm4gaHJlZjsKIAl9CkBAIC0yMDksNiArMjE4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRIcmVmKFN0cmluZyBuZXdIcmVmKSB7CiAJCVN0cmluZyBvbGRIcmVmID0gaHJlZjsKIAkJaHJlZiA9IG5ld0hyZWY7CkBAIC0yMjIsNiArMjMyLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoInR5cGUiKQogCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKIAkJcmV0dXJuIHR5cGU7CiAJfQpAQCAtMjMyLDYgKzI0Myw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgbmV3VHlwZSkgewogCQlTdHJpbmcgb2xkVHlwZSA9IHR5cGU7CiAJCXR5cGUgPSBuZXdUeXBlOwpAQCAtMjQ1LDYgKzI1Nyw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJyZWwiKQogCXB1YmxpYyBTdHJpbmcgZ2V0UmVsKCkgewogCQlyZXR1cm4gcmVsOwogCX0KQEAgLTI1NSw2ICsyNjgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFJlbChTdHJpbmcgbmV3UmVsKSB7CiAJCVN0cmluZyBvbGRSZWwgPSByZWw7CiAJCXJlbCA9IG5ld1JlbDsKQEAgLTI2OCw2ICsyODIsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigiYW5jaG9yIikKIAlwdWJsaWMgU3RyaW5nIGdldEFuY2hvcigpIHsKIAkJcmV0dXJuIGFuY2hvcjsKIAl9CkBAIC0yNzgsNiArMjkzLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRBbmNob3IoU3RyaW5nIG5ld0FuY2hvcikgewogCQlTdHJpbmcgb2xkQW5jaG9yID0gYW5jaG9yOwogCQlhbmNob3IgPSBuZXdBbmNob3I7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL1Byb3BlcnR5QWZmb3JkYW5jZUltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvUHJvcGVydHlBZmZvcmRhbmNlSW1wbC5qYXZhCmluZGV4IGE2YjFhZTkuLjdjMDRlZWYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvUHJvcGVydHlBZmZvcmRhbmNlSW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvUHJvcGVydHlBZmZvcmRhbmNlSW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsOwpAQCAtMjIsNiArMjMsMTAgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Qcm9wZXJ0eUFmZm9yZGFuY2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuV29UUGFja2FnZTsKIAoraW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25HZXR0ZXI7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbklnbm9yZTsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uUHJvcGVydHlPcmRlcjsKKwogLyoqCiAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlByb3BlcnR5IEFmZm9yZGFuY2U8L2I+PC9lbT4nLgpAQCAtMzUsNiArNDAsNyBAQAogICoKICAqIEBnZW5lcmF0ZWQKICAqLworQEpzb25Qcm9wZXJ0eU9yZGVyKHsiQHR5cGUiLCAidGl0bGUiLCAiZGVzY3JpcHRpb24iLCAib2JzZXJ2YWJsZSJ9KQogcHVibGljIGNsYXNzIFByb3BlcnR5QWZmb3JkYW5jZUltcGwgZXh0ZW5kcyBJbnRlcmFjdGlvbkFmZm9yZGFuY2VJbXBsIGltcGxlbWVudHMgUHJvcGVydHlBZmZvcmRhbmNlIHsKIAkvKioKIAkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNPYnNlcnZhYmxlKCkgPGVtPk9ic2VydmFibGU8L2VtPn0nIGF0dHJpYnV0ZS4KQEAgLTgxLDYgKzg3LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoIm9ic2VydmFibGUiKQogCXB1YmxpYyBib29sZWFuIGlzT2JzZXJ2YWJsZSgpIHsKIAkJcmV0dXJuIG9ic2VydmFibGU7CiAJfQpAQCAtOTEsNiArOTgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldE9ic2VydmFibGUoYm9vbGVhbiBuZXdPYnNlcnZhYmxlKSB7CiAJCWJvb2xlYW4gb2xkT2JzZXJ2YWJsZSA9IG9ic2VydmFibGU7CiAJCW9ic2VydmFibGUgPSBuZXdPYnNlcnZhYmxlOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9TZWN1cml0eVNjaGVtZUltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvU2VjdXJpdHlTY2hlbWVJbXBsLmphdmEKaW5kZXggMGU4ZmJlZC4uY2RhNTFhYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9TZWN1cml0eVNjaGVtZUltcGwuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL1NlY3VyaXR5U2NoZW1lSW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsOwpAQCAtMzcsNiArMzgsMTMgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5Xb1RQYWNrYWdlOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Db21tZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50OworCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbkdldHRlcjsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uSWdub3JlOworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25Qcm9wZXJ0eU9yZGVyOwogCiAvKioKICAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CkBAIC00Nyw2ICs1NSw4IEBACiAgKiA8L3A+CiAgKiA8dWw+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5TZWN1cml0eVNjaGVtZUltcGwjZ2V0QmFzZV9DbGFzc2lmaWVyIDxlbT5CYXNlIENsYXNzaWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuU2VjdXJpdHlTY2hlbWVJbXBsI2dldFRpdGxlIDxlbT5UaXRsZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5TZWN1cml0eVNjaGVtZUltcGwjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlNlY3VyaXR5U2NoZW1lSW1wbCNnZXRTY2hlbWUgPGVtPlNjaGVtZTwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5TZWN1cml0eVNjaGVtZUltcGwjZ2V0UHJveHkgPGVtPlByb3h5PC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlNlY3VyaXR5U2NoZW1lSW1wbCNnZXRJbiA8ZW0+SW48L2VtPn08L2xpPgpAQCAtNjQsNiArNzQsNyBAQAogICoKICAqIEBnZW5lcmF0ZWQKICAqLworQEpzb25Qcm9wZXJ0eU9yZGVyKHsiQHR5cGUiLCAidGl0bGUiLCAiZGVzY3JpcHRpb24iLCAic2NoZW1lIiwgInByb3h5IiwgImluIiwgInFvcCIsICJuYW1lIiwgImF1dGhvcml6YXRpb24iLCAiYWxnIiwgImZvcm1hdCIsICJpZGVudGl0eSIsICJ0b2tlbiIsICJyZWZyZXNoIiwgInNjb3BlcyIsICJmbG93In0pCiBwdWJsaWMgY2xhc3MgU2VjdXJpdHlTY2hlbWVJbXBsIGV4dGVuZHMgTWluaW1hbEVPYmplY3RJbXBsLkNvbnRhaW5lciBpbXBsZW1lbnRzIFNlY3VyaXR5U2NoZW1lIHsKIAkvKioKIAkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX0NsYXNzaWZpZXIoKSA8ZW0+QmFzZSBDbGFzc2lmaWVyPC9lbT59JyByZWZlcmVuY2UuCkBAIC03Niw2ICs4NywyNiBAQAogCXByb3RlY3RlZCBDbGFzc2lmaWVyIGJhc2VfQ2xhc3NpZmllcjsKIAogCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaXRsZSgpIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGl0bGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRJVExFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZXNjcmlwdGlvbigpIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgogCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTY2hlbWUoKSA8ZW0+U2NoZW1lPC9lbT59JyBhdHRyaWJ1dGUuCiAJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KIAkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KQEAgLTM1MCw2ICszODEsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyBDbGFzc2lmaWVyIGdldEJhc2VfQ2xhc3NpZmllcigpIHsKIAkJaWYgKGJhc2VfQ2xhc3NpZmllciAhPSBudWxsICYmIGJhc2VfQ2xhc3NpZmllci5lSXNQcm94eSgpKSB7CiAJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9DbGFzc2lmaWVyID0gKEludGVybmFsRU9iamVjdCliYXNlX0NsYXNzaWZpZXI7CkBAIC0zNzcsNiArNDA5LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRCYXNlX0NsYXNzaWZpZXIoQ2xhc3NpZmllciBuZXdCYXNlX0NsYXNzaWZpZXIpIHsKIAkJQ2xhc3NpZmllciBvbGRCYXNlX0NsYXNzaWZpZXIgPSBiYXNlX0NsYXNzaWZpZXI7CiAJCWJhc2VfQ2xhc3NpZmllciA9IG5ld0Jhc2VfQ2xhc3NpZmllcjsKQEAgLTM4Nyw5ICs0MjAsNzAgQEAKIAkvKioKIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoInRpdGxlIikKKwlwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkgeworCQlOYW1lZEVsZW1lbnQgbmFtZWRFbGVtZW50ID0gdGhpcy5nZXRCYXNlX0NsYXNzaWZpZXIoKTsKKwkJaWYgKG5hbWVkRWxlbWVudCAhPSBudWxsKSB7CisJCQlyZXR1cm4gbmFtZWRFbGVtZW50LmdldE5hbWUoKTsKKwkJfQorCQlyZXR1cm4gIiI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKKwlwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgbmV3VGl0bGUpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ1RpdGxlJyBhdHRyaWJ1dGUKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJkZXNjcmlwdGlvbiIpCisJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJRWxlbWVudCBlbGVtZW50ID0gdGhpcy5nZXRCYXNlX0NsYXNzaWZpZXIoKTsKKwkJaWYgKGVsZW1lbnQgIT0gbnVsbCkgeworCQkJZm9yIChDb21tZW50IGNvbW1lbnQgOiBlbGVtZW50LmdldE93bmVkQ29tbWVudHMoKSkgeworCQkJCWlmICghY29tbWVudC5nZXRCb2R5KCkuaXNFbXB0eSgpKSB7CisJCQkJCXJldHVybiBjb21tZW50LmdldEJvZHkoKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuICIiOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBKc29uSWdub3JlCisJcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIG5ld0Rlc2NyaXB0aW9uKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBzZXQgdGhlICdEZXNjcmlwdGlvbicgYXR0cmlidXRlCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJzY2hlbWUiKQogCXB1YmxpYyBTZWN1cml0eVNjaGVtZUtpbmQgZ2V0U2NoZW1lKCkgewogCQlyZXR1cm4gc2NoZW1lOwogCX0KQEAgLTQwMCw2ICs0OTQsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFNjaGVtZShTZWN1cml0eVNjaGVtZUtpbmQgbmV3U2NoZW1lKSB7CiAJCVNlY3VyaXR5U2NoZW1lS2luZCBvbGRTY2hlbWUgPSBzY2hlbWU7CiAJCXNjaGVtZSA9IG5ld1NjaGVtZSA9PSBudWxsID8gU0NIRU1FX0VERUZBVUxUIDogbmV3U2NoZW1lOwpAQCAtNDEzLDYgKzUwOCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJwcm94eSIpCiAJcHVibGljIFN0cmluZyBnZXRQcm94eSgpIHsKIAkJcmV0dXJuIHByb3h5OwogCX0KQEAgLTQyMyw2ICs1MTksNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFByb3h5KFN0cmluZyBuZXdQcm94eSkgewogCQlTdHJpbmcgb2xkUHJveHkgPSBwcm94eTsKIAkJcHJveHkgPSBuZXdQcm94eTsKQEAgLTQzNiw2ICs1MzMsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigiaW4iKQogCXB1YmxpYyBTZWN1cml0eUF1dGhlbnRpY2F0aW9uSW5mb3JtYXRpb25Mb2NhdGlvbktpbmQgZ2V0SW4oKSB7CiAJCXJldHVybiBpbjsKIAl9CkBAIC00NDYsNiArNTQ0LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRJbihTZWN1cml0eUF1dGhlbnRpY2F0aW9uSW5mb3JtYXRpb25Mb2NhdGlvbktpbmQgbmV3SW4pIHsKIAkJU2VjdXJpdHlBdXRoZW50aWNhdGlvbkluZm9ybWF0aW9uTG9jYXRpb25LaW5kIG9sZEluID0gaW47CiAJCWluID0gbmV3SW4gPT0gbnVsbCA/IElOX0VERUZBVUxUIDogbmV3SW47CkBAIC00NTksNiArNTU4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoInFvcCIpCiAJcHVibGljIFFvUEtpbmQgZ2V0UW9wKCkgewogCQlyZXR1cm4gcW9wOwogCX0KQEAgLTQ2OSw2ICs1NjksNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFFvcChRb1BLaW5kIG5ld1FvcCkgewogCQlRb1BLaW5kIG9sZFFvcCA9IHFvcDsKIAkJcW9wID0gbmV3UW9wID09IG51bGwgPyBRT1BfRURFRkFVTFQgOiBuZXdRb3A7CkBAIC00ODIsNiArNTgzLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoIm5hbWUiKQogCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKIAkJcmV0dXJuIG5hbWU7CiAJfQpAQCAtNDkyLDYgKzU5NCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkgewogCQlTdHJpbmcgb2xkTmFtZSA9IG5hbWU7CiAJCW5hbWUgPSBuZXdOYW1lOwpAQCAtNTA1LDYgKzYwOCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJhdXRob3JpemF0aW9uIikKIAlwdWJsaWMgU3RyaW5nIGdldEF1dGhvcml6YXRpb24oKSB7CiAJCXJldHVybiBhdXRob3JpemF0aW9uOwogCX0KQEAgLTUxNSw2ICs2MTksNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldEF1dGhvcml6YXRpb24oU3RyaW5nIG5ld0F1dGhvcml6YXRpb24pIHsKIAkJU3RyaW5nIG9sZEF1dGhvcml6YXRpb24gPSBhdXRob3JpemF0aW9uOwogCQlhdXRob3JpemF0aW9uID0gbmV3QXV0aG9yaXphdGlvbjsKQEAgLTUyOCw2ICs2MzMsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigiYWxnIikKIAlwdWJsaWMgU2VjdXJpdHlBbGdvcml0aG1LaW5kIGdldEFsZygpIHsKIAkJcmV0dXJuIGFsZzsKIAl9CkBAIC01MzgsNiArNjQ0LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRBbGcoU2VjdXJpdHlBbGdvcml0aG1LaW5kIG5ld0FsZykgewogCQlTZWN1cml0eUFsZ29yaXRobUtpbmQgb2xkQWxnID0gYWxnOwogCQlhbGcgPSBuZXdBbGcgPT0gbnVsbCA/IEFMR19FREVGQVVMVCA6IG5ld0FsZzsKQEAgLTU1MSw2ICs2NTgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigiZm9ybWF0IikKIAlwdWJsaWMgU2VjdXJpdHlBdXRoZW50aWNhdGlvbkZvcm1hdEtpbmQgZ2V0Rm9ybWF0KCkgewogCQlyZXR1cm4gZm9ybWF0OwogCX0KQEAgLTU2MSw2ICs2NjksNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldEZvcm1hdChTZWN1cml0eUF1dGhlbnRpY2F0aW9uRm9ybWF0S2luZCBuZXdGb3JtYXQpIHsKIAkJU2VjdXJpdHlBdXRoZW50aWNhdGlvbkZvcm1hdEtpbmQgb2xkRm9ybWF0ID0gZm9ybWF0OwogCQlmb3JtYXQgPSBuZXdGb3JtYXQgPT0gbnVsbCA/IEZPUk1BVF9FREVGQVVMVCA6IG5ld0Zvcm1hdDsKQEAgLTU3NCw2ICs2ODMsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigiaWRlbnRpdHkiKQogCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpdHkoKSB7CiAJCXJldHVybiBpZGVudGl0eTsKIAl9CkBAIC01ODQsNiArNjk0LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRJZGVudGl0eShTdHJpbmcgbmV3SWRlbnRpdHkpIHsKIAkJU3RyaW5nIG9sZElkZW50aXR5ID0gaWRlbnRpdHk7CiAJCWlkZW50aXR5ID0gbmV3SWRlbnRpdHk7CkBAIC01OTcsNiArNzA4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoInRva2VuIikKIAlwdWJsaWMgU3RyaW5nIGdldFRva2VuKCkgewogCQlyZXR1cm4gdG9rZW47CiAJfQpAQCAtNjA3LDYgKzcxOSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIHZvaWQgc2V0VG9rZW4oU3RyaW5nIG5ld1Rva2VuKSB7CiAJCVN0cmluZyBvbGRUb2tlbiA9IHRva2VuOwogCQl0b2tlbiA9IG5ld1Rva2VuOwpAQCAtNjIwLDYgKzczMyw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJyZWZyZXNoIikKIAlwdWJsaWMgU3RyaW5nIGdldFJlZnJlc2goKSB7CiAJCXJldHVybiByZWZyZXNoOwogCX0KQEAgLTYzMCw2ICs3NDQsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFJlZnJlc2goU3RyaW5nIG5ld1JlZnJlc2gpIHsKIAkJU3RyaW5nIG9sZFJlZnJlc2ggPSByZWZyZXNoOwogCQlyZWZyZXNoID0gbmV3UmVmcmVzaDsKQEAgLTY0Myw2ICs3NTgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigic2NvcGVzIikKIAlwdWJsaWMgRUxpc3Q8U3RyaW5nPiBnZXRTY29wZXMoKSB7CiAJCWlmIChzY29wZXMgPT0gbnVsbCkgewogCQkJc2NvcGVzID0gbmV3IEVEYXRhVHlwZVVuaXF1ZUVMaXN0PFN0cmluZz4oU3RyaW5nLmNsYXNzLCB0aGlzLCBXb1RQYWNrYWdlLlNFQ1VSSVRZX1NDSEVNRV9fU0NPUEVTKTsKQEAgLTY1Niw2ICs3NzIsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigiZmxvdyIpCiAJcHVibGljIEF1dGhvcml6YXRpb25GbG93S2luZCBnZXRGbG93KCkgewogCQlyZXR1cm4gZmxvdzsKIAl9CkBAIC02NjYsNiArNzgzLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRGbG93KEF1dGhvcml6YXRpb25GbG93S2luZCBuZXdGbG93KSB7CiAJCUF1dGhvcml6YXRpb25GbG93S2luZCBvbGRGbG93ID0gZmxvdzsKIAkJZmxvdyA9IG5ld0Zsb3cgPT0gbnVsbCA/IEZMT1dfRURFRkFVTFQgOiBuZXdGbG93OwpAQCAtNjg0LDYgKzgwMiwxMCBAQAogCQkJY2FzZSBXb1RQYWNrYWdlLlNFQ1VSSVRZX1NDSEVNRV9fQkFTRV9DTEFTU0lGSUVSOgogCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0QmFzZV9DbGFzc2lmaWVyKCk7CiAJCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9DbGFzc2lmaWVyKCk7CisJCQljYXNlIFdvVFBhY2thZ2UuU0VDVVJJVFlfU0NIRU1FX19USVRMRToKKwkJCQlyZXR1cm4gZ2V0VGl0bGUoKTsKKwkJCWNhc2UgV29UUGFja2FnZS5TRUNVUklUWV9TQ0hFTUVfX0RFU0NSSVBUSU9OOgorCQkJCXJldHVybiBnZXREZXNjcmlwdGlvbigpOwogCQkJY2FzZSBXb1RQYWNrYWdlLlNFQ1VSSVRZX1NDSEVNRV9fU0NIRU1FOgogCQkJCXJldHVybiBnZXRTY2hlbWUoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5TRUNVUklUWV9TQ0hFTUVfX1BST1hZOgpAQCAtNzI2LDYgKzg0OCwxMiBAQAogCQkJY2FzZSBXb1RQYWNrYWdlLlNFQ1VSSVRZX1NDSEVNRV9fQkFTRV9DTEFTU0lGSUVSOgogCQkJCXNldEJhc2VfQ2xhc3NpZmllcigoQ2xhc3NpZmllciluZXdWYWx1ZSk7CiAJCQkJcmV0dXJuOworCQkJY2FzZSBXb1RQYWNrYWdlLlNFQ1VSSVRZX1NDSEVNRV9fVElUTEU6CisJCQkJc2V0VGl0bGUoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBXb1RQYWNrYWdlLlNFQ1VSSVRZX1NDSEVNRV9fREVTQ1JJUFRJT046CisJCQkJc2V0RGVzY3JpcHRpb24oKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOwogCQkJY2FzZSBXb1RQYWNrYWdlLlNFQ1VSSVRZX1NDSEVNRV9fU0NIRU1FOgogCQkJCXNldFNjaGVtZSgoU2VjdXJpdHlTY2hlbWVLaW5kKW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47CkBAIC03ODEsNiArOTA5LDEyIEBACiAJCQljYXNlIFdvVFBhY2thZ2UuU0VDVVJJVFlfU0NIRU1FX19CQVNFX0NMQVNTSUZJRVI6CiAJCQkJc2V0QmFzZV9DbGFzc2lmaWVyKChDbGFzc2lmaWVyKW51bGwpOwogCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5TRUNVUklUWV9TQ0hFTUVfX1RJVExFOgorCQkJCXNldFRpdGxlKFRJVExFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuU0VDVVJJVFlfU0NIRU1FX19ERVNDUklQVElPTjoKKwkJCQlzZXREZXNjcmlwdGlvbihERVNDUklQVElPTl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOwogCQkJY2FzZSBXb1RQYWNrYWdlLlNFQ1VSSVRZX1NDSEVNRV9fU0NIRU1FOgogCQkJCXNldFNjaGVtZShTQ0hFTUVfRURFRkFVTFQpOwogCQkJCXJldHVybjsKQEAgLTgzNCw2ICs5NjgsMTAgQEAKIAkJc3dpdGNoIChmZWF0dXJlSUQpIHsKIAkJCWNhc2UgV29UUGFja2FnZS5TRUNVUklUWV9TQ0hFTUVfX0JBU0VfQ0xBU1NJRklFUjoKIAkJCQlyZXR1cm4gYmFzZV9DbGFzc2lmaWVyICE9IG51bGw7CisJCQljYXNlIFdvVFBhY2thZ2UuU0VDVVJJVFlfU0NIRU1FX19USVRMRToKKwkJCQlyZXR1cm4gVElUTEVfRURFRkFVTFQgPT0gbnVsbCA/IGdldFRpdGxlKCkgIT0gbnVsbCA6ICFUSVRMRV9FREVGQVVMVC5lcXVhbHMoZ2V0VGl0bGUoKSk7CisJCQljYXNlIFdvVFBhY2thZ2UuU0VDVVJJVFlfU0NIRU1FX19ERVNDUklQVElPTjoKKwkJCQlyZXR1cm4gREVTQ1JJUFRJT05fRURFRkFVTFQgPT0gbnVsbCA/IGdldERlc2NyaXB0aW9uKCkgIT0gbnVsbCA6ICFERVNDUklQVElPTl9FREVGQVVMVC5lcXVhbHMoZ2V0RGVzY3JpcHRpb24oKSk7CiAJCQljYXNlIFdvVFBhY2thZ2UuU0VDVVJJVFlfU0NIRU1FX19TQ0hFTUU6CiAJCQkJcmV0dXJuIHNjaGVtZSAhPSBTQ0hFTUVfRURFRkFVTFQ7CiAJCQljYXNlIFdvVFBhY2thZ2UuU0VDVVJJVFlfU0NIRU1FX19QUk9YWToKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvVGhpbmdJbXBsLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL1RoaW5nSW1wbC5qYXZhCmluZGV4IDE4ODE4OWIuLjgxNzY3YWQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvVGhpbmdJbXBsLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9UaGluZ0ltcGwuamF2YQpAQCAtOSwyNCArOSwyNCBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsOwogCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247Ci0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTWFwOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VbmlxdWVFTGlzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0UmVzb2x2aW5nRUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLmFydGVmYWN0LmltcGwuVmlydHVhbEVudGl0eUltcGw7Ci0KIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5BY3Rpb25BZmZvcmRhbmNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LkNvbnRleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuRXZlbnRBZmZvcmRhbmNlOwpAQCAtMzcsNiArMzcsMTggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UaGluZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5UeXBlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LldvVFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQXNzb2NpYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQ29tbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5PcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHk7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUmVjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLnV0aWwuVU1MVXRpbDsKKworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25HZXR0ZXI7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbklnbm9yZTsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uUHJvcGVydHlPcmRlcjsKIAogLyoqCiAgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgpAQCAtNDYsMjMgKzU4LDQ4IEBACiAgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKICAqIDwvcD4KICAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRUaXRsZSA8ZW0+VGl0bGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuVGhpbmdJbXBsI2dldERlc2NyaXB0aW9uIDxlbT5EZXNjcmlwdGlvbjwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5UaGluZ0ltcGwjZ2V0QmFzZSA8ZW0+QmFzZTwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5UaGluZ0ltcGwjZ2V0SWQgPGVtPklkPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRTdXBwb3J0IDxlbT5TdXBwb3J0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRTZWN1cml0eSA8ZW0+U2VjdXJpdHk8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuVGhpbmdJbXBsI2dldFNlY3VyaXR5RGVmaW5pdGlvbnMgPGVtPlNlY3VyaXR5IERlZmluaXRpb25zPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRMaW5rcyA8ZW0+TGlua3M8L2VtPn08L2xpPgogICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuVGhpbmdJbXBsI2dldEV2ZW50cyA8ZW0+RXZlbnRzPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRBY3Rpb25zIDxlbT5BY3Rpb25zPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRQcm9wZXJ0aWVzIDxlbT5Qcm9wZXJ0aWVzPC9lbT59PC9saT4KICAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRWZXJzaW9uIDxlbT5WZXJzaW9uPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4KLSAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRDb250ZXh0IDxlbT5Db250ZXh0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRBVHlwZSA8ZW0+QVR5cGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGwuVGhpbmdJbXBsI2dldEFDb250ZXh0IDxlbT5BQ29udGV4dDwvZW0+fTwvbGk+CiAgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbC5UaGluZ0ltcGwjZ2V0Rm9ybXMgPGVtPkZvcm1zPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsLlRoaW5nSW1wbCNnZXRCYXNlX0NsYXNzIDxlbT5CYXNlIENsYXNzPC9lbT59PC9saT4KICAqIDwvdWw+CiAgKgogICogQGdlbmVyYXRlZAogICovCi1wdWJsaWMgY2xhc3MgVGhpbmdJbXBsIGV4dGVuZHMgVmlydHVhbEVudGl0eUltcGwgaW1wbGVtZW50cyBUaGluZyB7CitASnNvblByb3BlcnR5T3JkZXIoeyJAY29udGV4dCIsICJAdHlwZSIsICJpZCIsICJ0aXRsZSIsICJkZXNjcmlwdGlvbiIsICJ2ZXJzaW9uIiwgInN1cHBvcnQiLCAiYmFzZSIsICJwcm9wZXJ0aWVzIiwgImFjdGlvbnMiLCAiZXZlbnRzIiwgImxpbmtzIiwgImZvcm1zIiwgInNlY3VyaXR5IiwgInNlY3VyaXR5RGVmaW5pdGlvbnMifSkKK3B1YmxpYyBjbGFzcyBUaGluZ0ltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgVGhpbmcgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaXRsZSgpIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGl0bGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRJVExFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZXNjcmlwdGlvbigpIDxlbT5EZXNjcmlwdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX0VERUZBVUxUID0gbnVsbDsKKwogCS8qKgogCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlKCkgPGVtPkJhc2U8L2VtPn0nIGF0dHJpYnV0ZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgpAQCAtMTI0LDYgKzE2MSwxNiBAQAogCXByb3RlY3RlZCBTdHJpbmcgc3VwcG9ydCA9IFNVUFBPUlRfRURFRkFVTFQ7CiAKIAkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWN1cml0eSgpIDxlbT5TZWN1cml0eTwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZWN1cml0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PFNlY3VyaXR5U2NoZW1lPiBzZWN1cml0eTsKKworCS8qKgogCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlY3VyaXR5RGVmaW5pdGlvbnMoKSA8ZW0+U2VjdXJpdHkgRGVmaW5pdGlvbnM8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0xMzQsMzYgKzE4MSw2IEBACiAJcHJvdGVjdGVkIEVMaXN0PFNlY3VyaXR5U2NoZW1lPiBzZWN1cml0eURlZmluaXRpb25zOwogCiAJLyoqCi0JICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXZlbnRzKCkgPGVtPkV2ZW50czwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRFdmVudHMoKQotCSAqIEBnZW5lcmF0ZWQKLQkgKiBAb3JkZXJlZAotCSAqLwotCXByb3RlY3RlZCBFTGlzdDxFdmVudEFmZm9yZGFuY2U+IGV2ZW50czsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFjdGlvbnMoKSA8ZW0+QWN0aW9uczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRBY3Rpb25zKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3Q8QWN0aW9uQWZmb3JkYW5jZT4gYWN0aW9uczsKLQotCS8qKgotCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByb3BlcnRpZXMoKSA8ZW0+UHJvcGVydGllczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAc2VlICNnZXRQcm9wZXJ0aWVzKCkKLQkgKiBAZ2VuZXJhdGVkCi0JICogQG9yZGVyZWQKLQkgKi8KLQlwcm90ZWN0ZWQgRUxpc3Q8UHJvcGVydHlBZmZvcmRhbmNlPiBwcm9wZXJ0aWVzOwotCi0JLyoqCiAJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlcnNpb24oKSA8ZW0+VmVyc2lvbjwvZW0+fScgYXR0cmlidXRlLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CkBAIC0xODQsMjQgKzIwMSwyNCBAQAogCXByb3RlY3RlZCBTdHJpbmcgdmVyc2lvbiA9IFZFUlNJT05fRURFRkFVTFQ7CiAKIAkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlKCkgPGVtPlR5cGU8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFUeXBlKCkgPGVtPkFUeXBlPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldFR5cGUoKQorCSAqIEBzZWUgI2dldEFUeXBlKCkKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlwcm90ZWN0ZWQgRUxpc3Q8VHlwZT4gdHlwZTsKKwlwcm90ZWN0ZWQgRUxpc3Q8VHlwZT4gYVR5cGU7CiAKIAkvKioKLQkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb250ZXh0KCkgPGVtPkNvbnRleHQ8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFDb250ZXh0KCkgPGVtPkFDb250ZXh0PC9lbT59JyByZWZlcmVuY2UgbGlzdC4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBzZWUgI2dldENvbnRleHQoKQorCSAqIEBzZWUgI2dldEFDb250ZXh0KCkKIAkgKiBAZ2VuZXJhdGVkCiAJICogQG9yZGVyZWQKIAkgKi8KLQlwcm90ZWN0ZWQgRUxpc3Q8Q29udGV4dD4gY29udGV4dDsKKwlwcm90ZWN0ZWQgRUxpc3Q8Q29udGV4dD4gYUNvbnRleHQ7CiAKIAkvKioKIAkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRGb3JtcygpIDxlbT5Gb3JtczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCkBAIC0yMTQsNiArMjMxLDE2IEBACiAJcHJvdGVjdGVkIEVMaXN0PEZvcm0+IGZvcm1zOwogCiAJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9DbGFzcygpIDxlbT5CYXNlIENsYXNzPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRCYXNlX0NsYXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgYmFzZV9DbGFzczsKKworCS8qKgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAJICogQGdlbmVyYXRlZApAQCAtMjM1LDkgKzI2Miw3MCBAQAogCS8qKgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigidGl0bGUiKQorCXB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSB7CisJCU5hbWVkRWxlbWVudCBuYW1lZEVsZW1lbnQgPSB0aGlzLmdldEJhc2VfQ2xhc3MoKTsKKwkJaWYgKG5hbWVkRWxlbWVudCAhPSBudWxsKSB7CisJCQlyZXR1cm4gbmFtZWRFbGVtZW50LmdldE5hbWUoKTsKKwkJfQorCQlyZXR1cm4gIiI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKKwlwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgbmV3VGl0bGUpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ1RpdGxlJyBhdHRyaWJ1dGUKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJkZXNjcmlwdGlvbiIpCisJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJRWxlbWVudCBlbGVtZW50ID0gdGhpcy5nZXRCYXNlX0NsYXNzKCk7CisJCWlmIChlbGVtZW50ICE9IG51bGwpIHsKKwkJCWZvciAoQ29tbWVudCBjb21tZW50IDogZWxlbWVudC5nZXRPd25lZENvbW1lbnRzKCkpIHsKKwkJCQlpZiAoIWNvbW1lbnQuZ2V0Qm9keSgpLmlzRW1wdHkoKSkgeworCQkJCQlyZXR1cm4gY29tbWVudC5nZXRCb2R5KCk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiAiIjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQorCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBuZXdEZXNjcmlwdGlvbikgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gc2V0IHRoZSAnRGVzY3JpcHRpb24nIGF0dHJpYnV0ZQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbkdldHRlcigiYmFzZSIpCiAJcHVibGljIFN0cmluZyBnZXRCYXNlKCkgewogCQlyZXR1cm4gYmFzZTsKIAl9CkBAIC0yNDgsNiArMzM2LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgdm9pZCBzZXRCYXNlKFN0cmluZyBuZXdCYXNlKSB7CiAJCVN0cmluZyBvbGRCYXNlID0gYmFzZTsKIAkJYmFzZSA9IG5ld0Jhc2U7CkBAIC0yNjEsNiArMzUwLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoImlkIikKIAlwdWJsaWMgU3RyaW5nIGdldElkKCkgewogCQlyZXR1cm4gaWQ7CiAJfQpAQCAtMjcxLDYgKzM2MSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIG5ld0lkKSB7CiAJCVN0cmluZyBvbGRJZCA9IGlkOwogCQlpZCA9IG5ld0lkOwpAQCAtMjg0LDYgKzM3NSw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uR2V0dGVyKCJzdXBwb3J0IikKIAlwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnQoKSB7CiAJCXJldHVybiBzdXBwb3J0OwogCX0KQEAgLTI5NCw2ICszODYsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyB2b2lkIHNldFN1cHBvcnQoU3RyaW5nIG5ld1N1cHBvcnQpIHsKIAkJU3RyaW5nIG9sZFN1cHBvcnQgPSBzdXBwb3J0OwogCQlzdXBwb3J0ID0gbmV3U3VwcG9ydDsKQEAgLTMwNyw2ICs0MDAsMjEgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKKwlwdWJsaWMgRUxpc3Q8U2VjdXJpdHlTY2hlbWU+IGdldFNlY3VyaXR5KCkgeworCQlpZiAoc2VjdXJpdHkgPT0gbnVsbCkgeworCQkJc2VjdXJpdHkgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFNlY3VyaXR5U2NoZW1lPihTZWN1cml0eVNjaGVtZS5jbGFzcywgdGhpcywgV29UUGFja2FnZS5USElOR19fU0VDVVJJVFkpOworCQl9CisJCXJldHVybiBzZWN1cml0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQogCXB1YmxpYyBFTGlzdDxTZWN1cml0eVNjaGVtZT4gZ2V0U2VjdXJpdHlEZWZpbml0aW9ucygpIHsKIAkJaWYgKHNlY3VyaXR5RGVmaW5pdGlvbnMgPT0gbnVsbCkgewogCQkJc2VjdXJpdHlEZWZpbml0aW9ucyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8U2VjdXJpdHlTY2hlbWU+KFNlY3VyaXR5U2NoZW1lLmNsYXNzLCB0aGlzLCBXb1RQYWNrYWdlLlRISU5HX19TRUNVUklUWV9ERUZJTklUSU9OUyk7CkBAIC0zMTcsNTIgKzQyNSw4NCBAQAogCS8qKgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAorCSAqIEBnZW5lcmF0ZWQgTk9UCiAJICovCiAJQE92ZXJyaWRlCiAJcHVibGljIEVMaXN0PExpbms+IGdldExpbmtzKCkgewotCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmV0dXJuIHRoZSAnTGlua3MnIHJlZmVyZW5jZSBsaXN0Ci0JCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCi0JCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCQlFTGlzdDxMaW5rPiBsaW5rcyA9IG5ldyBVbmlxdWVFTGlzdDxMaW5rPigpOworCQlvcmcuZWNsaXBzZS51bWwyLnVtbC5UeXBlIHRoaXNUeXBlID0gdGhpcy5nZXRCYXNlX0NsYXNzKCk7CisJCWZvciAoQXNzb2NpYXRpb24gYXNzb2NpYXRpb24gOiB0aGlzVHlwZS5nZXRBc3NvY2lhdGlvbnMoKSkgeworCQkJTGluayBsaW5rID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oYXNzb2NpYXRpb24sIExpbmsuY2xhc3MpOworCQkJaWYgKGxpbmsgIT0gbnVsbCkgeworCQkJCWlmIChhc3NvY2lhdGlvbi5nZXRPd25lZEVuZHMoKS5jb250YWluc0FsbChhc3NvY2lhdGlvbi5nZXRNZW1iZXJFbmRzKCkpKSB7CisJCQkJCWxpbmtzLmFkZChsaW5rKTsKKwkJCQl9IGVsc2UgeworCQkJCQlmb3IgKFByb3BlcnR5IGVuZCA6IGFzc29jaWF0aW9uLmdldE1lbWJlckVuZHMoKSkgeworCQkJCQkJaWYgKGVuZC5pc05hdmlnYWJsZSgpICYmIGVuZC5nZXRUeXBlKCkgIT0gdGhpc1R5cGUpIHsKKwkJCQkJCQlsaW5rcy5hZGQobGluayk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGxpbmtzOwogCX0KIAogCS8qKgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAorCSAqIEBnZW5lcmF0ZWQgTk9UCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgRUxpc3Q8RXZlbnRBZmZvcmRhbmNlPiBnZXRFdmVudHMoKSB7Ci0JCWlmIChldmVudHMgPT0gbnVsbCkgewotCQkJZXZlbnRzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxFdmVudEFmZm9yZGFuY2U+KEV2ZW50QWZmb3JkYW5jZS5jbGFzcywgdGhpcywgV29UUGFja2FnZS5USElOR19fRVZFTlRTKTsKKwkJRUxpc3Q8RXZlbnRBZmZvcmRhbmNlPiBhZmZvcmRhbmNlcyA9IG5ldyBVbmlxdWVFTGlzdDxFdmVudEFmZm9yZGFuY2U+KCk7CisJCW9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzIHRoaXNUeXBlID0gdGhpcy5nZXRCYXNlX0NsYXNzKCk7CisJCWZvciAoUmVjZXB0aW9uIHJlY2VwdGlvbiA6IHRoaXNUeXBlLmdldE93bmVkUmVjZXB0aW9ucygpKSB7CisJCQlFdmVudEFmZm9yZGFuY2UgYWZmb3JkYW5jZSA9IFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKHJlY2VwdGlvbiwgRXZlbnRBZmZvcmRhbmNlLmNsYXNzKTsKKwkJCWlmIChhZmZvcmRhbmNlICE9IG51bGwpIHsKKwkJCQlhZmZvcmRhbmNlcy5hZGQoYWZmb3JkYW5jZSk7CisJCQl9CiAJCX0KLQkJcmV0dXJuIGV2ZW50czsKKwkJcmV0dXJuIGFmZm9yZGFuY2VzOwogCX0KIAogCS8qKgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAorCSAqIEBnZW5lcmF0ZWQgTk9UCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgRUxpc3Q8QWN0aW9uQWZmb3JkYW5jZT4gZ2V0QWN0aW9ucygpIHsKLQkJaWYgKGFjdGlvbnMgPT0gbnVsbCkgewotCQkJYWN0aW9ucyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8QWN0aW9uQWZmb3JkYW5jZT4oQWN0aW9uQWZmb3JkYW5jZS5jbGFzcywgdGhpcywgV29UUGFja2FnZS5USElOR19fQUNUSU9OUyk7CisJCUVMaXN0PEFjdGlvbkFmZm9yZGFuY2U+IGFmZm9yZGFuY2VzID0gbmV3IFVuaXF1ZUVMaXN0PEFjdGlvbkFmZm9yZGFuY2U+KCk7CisJCW9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzIHRoaXNUeXBlID0gdGhpcy5nZXRCYXNlX0NsYXNzKCk7CisJCWZvciAoT3BlcmF0aW9uIG9wZXJhdGlvbiA6IHRoaXNUeXBlLmdldE93bmVkT3BlcmF0aW9ucygpKSB7CisJCQlBY3Rpb25BZmZvcmRhbmNlIGFmZm9yZGFuY2UgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihvcGVyYXRpb24sIEFjdGlvbkFmZm9yZGFuY2UuY2xhc3MpOworCQkJaWYgKGFmZm9yZGFuY2UgIT0gbnVsbCkgeworCQkJCWFmZm9yZGFuY2VzLmFkZChhZmZvcmRhbmNlKTsKKwkJCX0KIAkJfQotCQlyZXR1cm4gYWN0aW9uczsKKwkJcmV0dXJuIGFmZm9yZGFuY2VzOwogCX0KIAogCS8qKgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAorCSAqIEBnZW5lcmF0ZWQgTk9UCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKIAlwdWJsaWMgRUxpc3Q8UHJvcGVydHlBZmZvcmRhbmNlPiBnZXRQcm9wZXJ0aWVzKCkgewotCQlpZiAocHJvcGVydGllcyA9PSBudWxsKSB7Ci0JCQlwcm9wZXJ0aWVzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxQcm9wZXJ0eUFmZm9yZGFuY2U+KFByb3BlcnR5QWZmb3JkYW5jZS5jbGFzcywgdGhpcywgV29UUGFja2FnZS5USElOR19fUFJPUEVSVElFUyk7CisJCUVMaXN0PFByb3BlcnR5QWZmb3JkYW5jZT4gYWZmb3JkYW5jZXMgPSBuZXcgVW5pcXVlRUxpc3Q8UHJvcGVydHlBZmZvcmRhbmNlPigpOworCQlvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyB0aGlzVHlwZSA9IHRoaXMuZ2V0QmFzZV9DbGFzcygpOworCQlmb3IgKE9wZXJhdGlvbiBvcGVyYXRpb24gOiB0aGlzVHlwZS5nZXRPd25lZE9wZXJhdGlvbnMoKSkgeworCQkJUHJvcGVydHlBZmZvcmRhbmNlIGFmZm9yZGFuY2UgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihvcGVyYXRpb24sIFByb3BlcnR5QWZmb3JkYW5jZS5jbGFzcyk7CisJCQlpZiAoYWZmb3JkYW5jZSAhPSBudWxsKSB7CisJCQkJYWZmb3JkYW5jZXMuYWRkKGFmZm9yZGFuY2UpOworCQkJfQogCQl9Ci0JCXJldHVybiBwcm9wZXJ0aWVzOworCQlyZXR1cm4gYWZmb3JkYW5jZXM7CiAJfQogCiAJLyoqCkBAIC0zNzEsNiArNTExLDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25HZXR0ZXIoInZlcnNpb24iKQogCXB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbigpIHsKIAkJcmV0dXJuIHZlcnNpb247CiAJfQpAQCAtMzgxLDYgKzUyMiw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCUBKc29uSWdub3JlCiAJcHVibGljIHZvaWQgc2V0VmVyc2lvbihTdHJpbmcgbmV3VmVyc2lvbikgewogCQlTdHJpbmcgb2xkVmVyc2lvbiA9IHZlcnNpb247CiAJCXZlcnNpb24gPSBuZXdWZXJzaW9uOwpAQCAtMzk0LDExICs1MzYsMTIgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVMaXN0PFR5cGU+IGdldFR5cGUoKSB7Ci0JCWlmICh0eXBlID09IG51bGwpIHsKLQkJCXR5cGUgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFR5cGU+KFR5cGUuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuVEhJTkdfX1RZUEUpOworCUBKc29uSWdub3JlCisJcHVibGljIEVMaXN0PFR5cGU+IGdldEFUeXBlKCkgeworCQlpZiAoYVR5cGUgPT0gbnVsbCkgeworCQkJYVR5cGUgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFR5cGU+KFR5cGUuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuVEhJTkdfX0FUWVBFKTsKIAkJfQotCQlyZXR1cm4gdHlwZTsKKwkJcmV0dXJuIGFUeXBlOwogCX0KIAogCS8qKgpAQCAtNDA3LDExICs1NTAsMTIgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVMaXN0PENvbnRleHQ+IGdldENvbnRleHQoKSB7Ci0JCWlmIChjb250ZXh0ID09IG51bGwpIHsKLQkJCWNvbnRleHQgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PENvbnRleHQ+KENvbnRleHQuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuVEhJTkdfX0NPTlRFWFQpOworCUBKc29uSWdub3JlCisJcHVibGljIEVMaXN0PENvbnRleHQ+IGdldEFDb250ZXh0KCkgeworCQlpZiAoYUNvbnRleHQgPT0gbnVsbCkgeworCQkJYUNvbnRleHQgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PENvbnRleHQ+KENvbnRleHQuY2xhc3MsIHRoaXMsIFdvVFBhY2thZ2UuVEhJTkdfX0FDT05URVhUKTsKIAkJfQotCQlyZXR1cm4gY29udGV4dDsKKwkJcmV0dXJuIGFDb250ZXh0OwogCX0KIAogCS8qKgpAQCAtNDMzLDE0ICs1NzcsNjIgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJQEpzb25JZ25vcmUKKwlwdWJsaWMgb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgZ2V0QmFzZV9DbGFzcygpIHsKKwkJaWYgKGJhc2VfQ2xhc3MgIT0gbnVsbCAmJiBiYXNlX0NsYXNzLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0NsYXNzID0gKEludGVybmFsRU9iamVjdCliYXNlX0NsYXNzOworCQkJYmFzZV9DbGFzcyA9IChvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyllUmVzb2x2ZVByb3h5KG9sZEJhc2VfQ2xhc3MpOworCQkJaWYgKGJhc2VfQ2xhc3MgIT0gb2xkQmFzZV9DbGFzcykgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFdvVFBhY2thZ2UuVEhJTkdfX0JBU0VfQ0xBU1MsIG9sZEJhc2VfQ2xhc3MsIGJhc2VfQ2xhc3MpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9DbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgYmFzaWNHZXRCYXNlX0NsYXNzKCkgeworCQlyZXR1cm4gYmFzZV9DbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlASnNvbklnbm9yZQorCXB1YmxpYyB2b2lkIHNldEJhc2VfQ2xhc3Mob3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgbmV3QmFzZV9DbGFzcykgeworCQlvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyBvbGRCYXNlX0NsYXNzID0gYmFzZV9DbGFzczsKKwkJYmFzZV9DbGFzcyA9IG5ld0Jhc2VfQ2xhc3M7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFdvVFBhY2thZ2UuVEhJTkdfX0JBU0VfQ0xBU1MsIG9sZEJhc2VfQ2xhc3MsIGJhc2VfQ2xhc3MpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKIAlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CiAJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX1RJVExFOgorCQkJCXJldHVybiBnZXRUaXRsZSgpOworCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19ERVNDUklQVElPTjoKKwkJCQlyZXR1cm4gZ2V0RGVzY3JpcHRpb24oKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fQkFTRToKIAkJCQlyZXR1cm4gZ2V0QmFzZSgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19JRDoKIAkJCQlyZXR1cm4gZ2V0SWQoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fU1VQUE9SVDoKIAkJCQlyZXR1cm4gZ2V0U3VwcG9ydCgpOworCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19TRUNVUklUWToKKwkJCQlyZXR1cm4gZ2V0U2VjdXJpdHkoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fU0VDVVJJVFlfREVGSU5JVElPTlM6CiAJCQkJcmV0dXJuIGdldFNlY3VyaXR5RGVmaW5pdGlvbnMoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fTElOS1M6CkBAIC00NTMsMTIgKzY0NSwxNSBAQAogCQkJCXJldHVybiBnZXRQcm9wZXJ0aWVzKCk7CiAJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX1ZFUlNJT046CiAJCQkJcmV0dXJuIGdldFZlcnNpb24oKTsKLQkJCWNhc2UgV29UUGFja2FnZS5USElOR19fVFlQRToKLQkJCQlyZXR1cm4gZ2V0VHlwZSgpOwotCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19DT05URVhUOgotCQkJCXJldHVybiBnZXRDb250ZXh0KCk7CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0FUWVBFOgorCQkJCXJldHVybiBnZXRBVHlwZSgpOworCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19BQ09OVEVYVDoKKwkJCQlyZXR1cm4gZ2V0QUNvbnRleHQoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fRk9STVM6CiAJCQkJcmV0dXJuIGdldEZvcm1zKCk7CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0JBU0VfQ0xBU1M6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRCYXNlX0NsYXNzKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9DbGFzcygpOwogCQl9CiAJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOwogCX0KQEAgLTQ3Miw2ICs2NjcsMTIgQEAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgewogCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19USVRMRToKKwkJCQlzZXRUaXRsZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0RFU0NSSVBUSU9OOgorCQkJCXNldERlc2NyaXB0aW9uKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fQkFTRToKIAkJCQlzZXRCYXNlKChTdHJpbmcpbmV3VmFsdWUpOwogCQkJCXJldHVybjsKQEAgLTQ4MSw2ICs2ODIsMTAgQEAKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fU1VQUE9SVDoKIAkJCQlzZXRTdXBwb3J0KChTdHJpbmcpbmV3VmFsdWUpOwogCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5USElOR19fU0VDVVJJVFk6CisJCQkJZ2V0U2VjdXJpdHkoKS5jbGVhcigpOworCQkJCWdldFNlY3VyaXR5KCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBTZWN1cml0eVNjaGVtZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fU0VDVVJJVFlfREVGSU5JVElPTlM6CiAJCQkJZ2V0U2VjdXJpdHlEZWZpbml0aW9ucygpLmNsZWFyKCk7CiAJCQkJZ2V0U2VjdXJpdHlEZWZpbml0aW9ucygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgU2VjdXJpdHlTY2hlbWU+KW5ld1ZhbHVlKTsKQEAgLTUwNCwxOCArNzA5LDIxIEBACiAJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX1ZFUlNJT046CiAJCQkJc2V0VmVyc2lvbigoU3RyaW5nKW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47Ci0JCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX1RZUEU6Ci0JCQkJZ2V0VHlwZSgpLmNsZWFyKCk7Ci0JCQkJZ2V0VHlwZSgpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgVHlwZT4pbmV3VmFsdWUpOworCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19BVFlQRToKKwkJCQlnZXRBVHlwZSgpLmNsZWFyKCk7CisJCQkJZ2V0QVR5cGUoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFR5cGU+KW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47Ci0JCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0NPTlRFWFQ6Ci0JCQkJZ2V0Q29udGV4dCgpLmNsZWFyKCk7Ci0JCQkJZ2V0Q29udGV4dCgpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgQ29udGV4dD4pbmV3VmFsdWUpOworCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19BQ09OVEVYVDoKKwkJCQlnZXRBQ29udGV4dCgpLmNsZWFyKCk7CisJCQkJZ2V0QUNvbnRleHQoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIENvbnRleHQ+KW5ld1ZhbHVlKTsKIAkJCQlyZXR1cm47CiAJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0ZPUk1TOgogCQkJCWdldEZvcm1zKCkuY2xlYXIoKTsKIAkJCQlnZXRGb3JtcygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRm9ybT4pbmV3VmFsdWUpOwogCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5USElOR19fQkFTRV9DTEFTUzoKKwkJCQlzZXRCYXNlX0NsYXNzKChvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOwogCQl9CiAJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CiAJfQpAQCAtNTI4LDYgKzczNiwxMiBAQAogCUBPdmVycmlkZQogCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CiAJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX1RJVExFOgorCQkJCXNldFRpdGxlKFRJVExFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0RFU0NSSVBUSU9OOgorCQkJCXNldERlc2NyaXB0aW9uKERFU0NSSVBUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CiAJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0JBU0U6CiAJCQkJc2V0QmFzZShCQVNFX0VERUZBVUxUKTsKIAkJCQlyZXR1cm47CkBAIC01MzcsNiArNzUxLDkgQEAKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fU1VQUE9SVDoKIAkJCQlzZXRTdXBwb3J0KFNVUFBPUlRfRURFRkFVTFQpOwogCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5USElOR19fU0VDVVJJVFk6CisJCQkJZ2V0U2VjdXJpdHkoKS5jbGVhcigpOworCQkJCXJldHVybjsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fU0VDVVJJVFlfREVGSU5JVElPTlM6CiAJCQkJZ2V0U2VjdXJpdHlEZWZpbml0aW9ucygpLmNsZWFyKCk7CiAJCQkJcmV0dXJuOwpAQCAtNTU1LDE1ICs3NzIsMTggQEAKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fVkVSU0lPTjoKIAkJCQlzZXRWZXJzaW9uKFZFUlNJT05fRURFRkFVTFQpOwogCQkJCXJldHVybjsKLQkJCWNhc2UgV29UUGFja2FnZS5USElOR19fVFlQRToKLQkJCQlnZXRUeXBlKCkuY2xlYXIoKTsKKwkJCWNhc2UgV29UUGFja2FnZS5USElOR19fQVRZUEU6CisJCQkJZ2V0QVR5cGUoKS5jbGVhcigpOwogCQkJCXJldHVybjsKLQkJCWNhc2UgV29UUGFja2FnZS5USElOR19fQ09OVEVYVDoKLQkJCQlnZXRDb250ZXh0KCkuY2xlYXIoKTsKKwkJCWNhc2UgV29UUGFja2FnZS5USElOR19fQUNPTlRFWFQ6CisJCQkJZ2V0QUNvbnRleHQoKS5jbGVhcigpOwogCQkJCXJldHVybjsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fRk9STVM6CiAJCQkJZ2V0Rm9ybXMoKS5jbGVhcigpOwogCQkJCXJldHVybjsKKwkJCWNhc2UgV29UUGFja2FnZS5USElOR19fQkFTRV9DTEFTUzoKKwkJCQlzZXRCYXNlX0NsYXNzKChvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyludWxsKTsKKwkJCQlyZXR1cm47CiAJCX0KIAkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CiAJfQpAQCAtNTc2LDMwICs3OTYsMzggQEAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgewogCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19USVRMRToKKwkJCQlyZXR1cm4gVElUTEVfRURFRkFVTFQgPT0gbnVsbCA/IGdldFRpdGxlKCkgIT0gbnVsbCA6ICFUSVRMRV9FREVGQVVMVC5lcXVhbHMoZ2V0VGl0bGUoKSk7CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0RFU0NSSVBUSU9OOgorCQkJCXJldHVybiBERVNDUklQVElPTl9FREVGQVVMVCA9PSBudWxsID8gZ2V0RGVzY3JpcHRpb24oKSAhPSBudWxsIDogIURFU0NSSVBUSU9OX0VERUZBVUxULmVxdWFscyhnZXREZXNjcmlwdGlvbigpKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fQkFTRToKIAkJCQlyZXR1cm4gQkFTRV9FREVGQVVMVCA9PSBudWxsID8gYmFzZSAhPSBudWxsIDogIUJBU0VfRURFRkFVTFQuZXF1YWxzKGJhc2UpOwogCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19JRDoKIAkJCQlyZXR1cm4gSURfRURFRkFVTFQgPT0gbnVsbCA/IGlkICE9IG51bGwgOiAhSURfRURFRkFVTFQuZXF1YWxzKGlkKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fU1VQUE9SVDoKIAkJCQlyZXR1cm4gU1VQUE9SVF9FREVGQVVMVCA9PSBudWxsID8gc3VwcG9ydCAhPSBudWxsIDogIVNVUFBPUlRfRURFRkFVTFQuZXF1YWxzKHN1cHBvcnQpOworCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19TRUNVUklUWToKKwkJCQlyZXR1cm4gc2VjdXJpdHkgIT0gbnVsbCAmJiAhc2VjdXJpdHkuaXNFbXB0eSgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19TRUNVUklUWV9ERUZJTklUSU9OUzoKIAkJCQlyZXR1cm4gc2VjdXJpdHlEZWZpbml0aW9ucyAhPSBudWxsICYmICFzZWN1cml0eURlZmluaXRpb25zLmlzRW1wdHkoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fTElOS1M6CiAJCQkJcmV0dXJuICFnZXRMaW5rcygpLmlzRW1wdHkoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fRVZFTlRTOgotCQkJCXJldHVybiBldmVudHMgIT0gbnVsbCAmJiAhZXZlbnRzLmlzRW1wdHkoKTsKKwkJCQlyZXR1cm4gIWdldEV2ZW50cygpLmlzRW1wdHkoKTsKIAkJCWNhc2UgV29UUGFja2FnZS5USElOR19fQUNUSU9OUzoKLQkJCQlyZXR1cm4gYWN0aW9ucyAhPSBudWxsICYmICFhY3Rpb25zLmlzRW1wdHkoKTsKKwkJCQlyZXR1cm4gIWdldEFjdGlvbnMoKS5pc0VtcHR5KCk7CiAJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX1BST1BFUlRJRVM6Ci0JCQkJcmV0dXJuIHByb3BlcnRpZXMgIT0gbnVsbCAmJiAhcHJvcGVydGllcy5pc0VtcHR5KCk7CisJCQkJcmV0dXJuICFnZXRQcm9wZXJ0aWVzKCkuaXNFbXB0eSgpOwogCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HX19WRVJTSU9OOgogCQkJCXJldHVybiBWRVJTSU9OX0VERUZBVUxUID09IG51bGwgPyB2ZXJzaW9uICE9IG51bGwgOiAhVkVSU0lPTl9FREVGQVVMVC5lcXVhbHModmVyc2lvbik7Ci0JCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX1RZUEU6Ci0JCQkJcmV0dXJuIHR5cGUgIT0gbnVsbCAmJiAhdHlwZS5pc0VtcHR5KCk7Ci0JCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0NPTlRFWFQ6Ci0JCQkJcmV0dXJuIGNvbnRleHQgIT0gbnVsbCAmJiAhY29udGV4dC5pc0VtcHR5KCk7CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0FUWVBFOgorCQkJCXJldHVybiBhVHlwZSAhPSBudWxsICYmICFhVHlwZS5pc0VtcHR5KCk7CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0FDT05URVhUOgorCQkJCXJldHVybiBhQ29udGV4dCAhPSBudWxsICYmICFhQ29udGV4dC5pc0VtcHR5KCk7CiAJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0ZPUk1TOgogCQkJCXJldHVybiBmb3JtcyAhPSBudWxsICYmICFmb3Jtcy5pc0VtcHR5KCk7CisJCQljYXNlIFdvVFBhY2thZ2UuVEhJTkdfX0JBU0VfQ0xBU1M6CisJCQkJcmV0dXJuIGJhc2VfQ2xhc3MgIT0gbnVsbDsKIAkJfQogCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CiAJfQpAQCAtNjI1LDUgKzg1MywxMjcgQEAKIAkJcmVzdWx0LmFwcGVuZCgnKScpOwogCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAJfQorCQorCS8qKgorCSAqIFNlY3VyaXR5IGF0dHJpYnV0ZSBnZXR0ZXIgZm9yIEpTT04gc2VyaWFsaXphdGlvbgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQEpzb25HZXR0ZXIoInNlY3VyaXR5IikKKwlwdWJsaWMgRUxpc3Q8U3RyaW5nPiBnZXRTZWN1cml0eUFzU3RyaW5nKCkgeworCQlFTGlzdDxTdHJpbmc+IHNlY3VyaXR5QXNTdHJpbmcgPSBuZXcgVW5pcXVlRUxpc3Q8U3RyaW5nPigpOworCQlpZiAoc2VjdXJpdHkgPT0gbnVsbCkgeworCQkJc2VjdXJpdHkgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFNlY3VyaXR5U2NoZW1lPihTZWN1cml0eVNjaGVtZS5jbGFzcywgdGhpcywgV29UUGFja2FnZS5USElOR19fU0VDVVJJVFkpOworCQl9CisJCWZvciAoU2VjdXJpdHlTY2hlbWUgc2VjdXJpdHlTY2hlbWUgOiBzZWN1cml0eSkgeworCQkJaWYgKHNlY3VyaXR5U2NoZW1lLmdldFRpdGxlKCkgIT0gbnVsbCAmJiAhc2VjdXJpdHlTY2hlbWUuZ2V0VGl0bGUoKS5pc0VtcHR5KCkpIHsKKwkJCQlzZWN1cml0eUFzU3RyaW5nLmFkZChzZWN1cml0eVNjaGVtZS5nZXRUaXRsZSgpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gc2VjdXJpdHlBc1N0cmluZzsKKwl9CisJCisJLyoqCisJICogU2VjdXJpdHlEZWZpbml0aW9uIGF0dHJpYnV0ZSBnZXR0ZXIgZm9yIEpTT04gc2VyaWFsaXphdGlvbgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQEpzb25HZXR0ZXIoInNlY3VyaXR5RGVmaW5pdGlvbnMiKQorCXB1YmxpYyBFTWFwPFN0cmluZywgU2VjdXJpdHlTY2hlbWU+IGdldFNlY3VyaXR5RGVmaW5pdGlvbnNBc01hcCgpIHsKKwkJRU1hcDxTdHJpbmcsIFNlY3VyaXR5U2NoZW1lPiBzZWN1cml0eURlZmluaXRpb25zQXNNYXAgPSBuZXcgQmFzaWNFTWFwPFN0cmluZywgU2VjdXJpdHlTY2hlbWU+KCk7CisJCWlmIChzZWN1cml0eURlZmluaXRpb25zID09IG51bGwpIHsKKwkJCXNlY3VyaXR5RGVmaW5pdGlvbnMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFNlY3VyaXR5U2NoZW1lPihTZWN1cml0eVNjaGVtZS5jbGFzcywgdGhpcywgV29UUGFja2FnZS5USElOR19fU0VDVVJJVFlfREVGSU5JVElPTlMpOworCQl9CisJCWZvciAoU2VjdXJpdHlTY2hlbWUgc2VjdXJpdHlTY2hlbWUgOiBzZWN1cml0eURlZmluaXRpb25zKSB7CisJCQlpZiAoc2VjdXJpdHlTY2hlbWUuZ2V0VGl0bGUoKSAhPSBudWxsICYmICFzZWN1cml0eVNjaGVtZS5nZXRUaXRsZSgpLmlzRW1wdHkoKSkgeworCQkJCXNlY3VyaXR5RGVmaW5pdGlvbnNBc01hcC5wdXQoc2VjdXJpdHlTY2hlbWUuZ2V0VGl0bGUoKSwgc2VjdXJpdHlTY2hlbWUpOworCQkJfQorCQl9CisJCXJldHVybiBzZWN1cml0eURlZmluaXRpb25zQXNNYXA7CisJfQorCQorCS8qKgorCSAqIEV2ZW50cyBhdHRyaWJ1dGUgZ2V0dGVyIGZvciBKU09OIHNlcmlhbGl6YXRpb24KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBKc29uR2V0dGVyKCJldmVudHMiKQorCXB1YmxpYyBFTWFwPFN0cmluZywgRXZlbnRBZmZvcmRhbmNlPiBnZXRFdmVudHNBc01hcCgpIHsKKwkJRU1hcDxTdHJpbmcsIEV2ZW50QWZmb3JkYW5jZT4gZXZlbnRzQXNNYXAgPSBuZXcgQmFzaWNFTWFwPFN0cmluZywgRXZlbnRBZmZvcmRhbmNlPigpOworCQlFTGlzdDxFdmVudEFmZm9yZGFuY2U+IGFmZm9yZGFuY2VzID0gdGhpcy5nZXRFdmVudHMoKTsKKwkJZm9yIChFdmVudEFmZm9yZGFuY2UgYWZmb3JkYW5jZSA6IGFmZm9yZGFuY2VzKSB7CisJCQlpZiAoYWZmb3JkYW5jZS5nZXRUaXRsZSgpICE9IG51bGwgJiYgIWFmZm9yZGFuY2UuZ2V0VGl0bGUoKS5pc0VtcHR5KCkpIHsKKwkJCQlldmVudHNBc01hcC5wdXQoYWZmb3JkYW5jZS5nZXRUaXRsZSgpLCBhZmZvcmRhbmNlKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZXZlbnRzQXNNYXA7CisJfQorCisJLyoqCisJICogQWN0aW9ucyBhdHRyaWJ1dGUgZ2V0dGVyIGZvciBKU09OIHNlcmlhbGl6YXRpb24KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBKc29uR2V0dGVyKCJhY3Rpb25zIikKKwlwdWJsaWMgRU1hcDxTdHJpbmcsIEFjdGlvbkFmZm9yZGFuY2U+IGdldEFjdGlvbnNBc01hcCgpIHsKKwkJRU1hcDxTdHJpbmcsIEFjdGlvbkFmZm9yZGFuY2U+IGFjdGlvbnNBc01hcCA9IG5ldyBCYXNpY0VNYXA8U3RyaW5nLCBBY3Rpb25BZmZvcmRhbmNlPigpOworCQlFTGlzdDxBY3Rpb25BZmZvcmRhbmNlPiBhZmZvcmRhbmNlcyA9IHRoaXMuZ2V0QWN0aW9ucygpOworCQlmb3IgKEFjdGlvbkFmZm9yZGFuY2UgYWZmb3JkYW5jZSA6IGFmZm9yZGFuY2VzKSB7CisJCQlpZiAoYWZmb3JkYW5jZS5nZXRUaXRsZSgpICE9IG51bGwgJiYgIWFmZm9yZGFuY2UuZ2V0VGl0bGUoKS5pc0VtcHR5KCkpIHsKKwkJCQlhY3Rpb25zQXNNYXAucHV0KGFmZm9yZGFuY2UuZ2V0VGl0bGUoKSwgYWZmb3JkYW5jZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnNBc01hcDsKKwl9CisKKwkvKioKKwkgKiBQcm9wZXJ0aWVzIGF0dHJpYnV0ZSBnZXR0ZXIgZm9yIEpTT04gc2VyaWFsaXphdGlvbgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQEpzb25HZXR0ZXIoInByb3BlcnRpZXMiKQorCXB1YmxpYyBFTWFwPFN0cmluZywgUHJvcGVydHlBZmZvcmRhbmNlPiBnZXRQcm9wZXJ0aWVzQXNNYXAoKSB7CisJCUVNYXA8U3RyaW5nLCBQcm9wZXJ0eUFmZm9yZGFuY2U+IGFjdGlvbnNBc01hcCA9IG5ldyBCYXNpY0VNYXA8U3RyaW5nLCBQcm9wZXJ0eUFmZm9yZGFuY2U+KCk7CisJCUVMaXN0PFByb3BlcnR5QWZmb3JkYW5jZT4gYWZmb3JkYW5jZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKTsKKwkJZm9yIChQcm9wZXJ0eUFmZm9yZGFuY2UgYWZmb3JkYW5jZSA6IGFmZm9yZGFuY2VzKSB7CisJCQlpZiAoYWZmb3JkYW5jZS5nZXRUaXRsZSgpICE9IG51bGwgJiYgIWFmZm9yZGFuY2UuZ2V0VGl0bGUoKS5pc0VtcHR5KCkpIHsKKwkJCQlhY3Rpb25zQXNNYXAucHV0KGFmZm9yZGFuY2UuZ2V0VGl0bGUoKSwgYWZmb3JkYW5jZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnNBc01hcDsKKwl9CisJCisJLyoqCisJICogQVR5cGUgYXR0cmlidXRlIGdldHRlciBmb3IgSlNPTiBzZXJpYWxpemF0aW9uCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlASnNvbkdldHRlcigiQHR5cGUiKQorCXB1YmxpYyBFTGlzdDxTdHJpbmc+IGdldEFUeXBlQXNTdHJpbmdMaXN0KCkgeworCQlFTGlzdDxTdHJpbmc+IGFUeXBlQXNMaXN0ID0gbmV3IFVuaXF1ZUVMaXN0PFN0cmluZz4oKTsKKwkJRUxpc3Q8VHlwZT4gdHlwZXMgPSB0aGlzLmdldEFUeXBlKCk7CisJCWZvciAoVHlwZSB0eXBlIDogdHlwZXMpIHsKKwkJCWlmICh0eXBlLmdldE5hbWUoKSAhPSBudWxsICYmICF0eXBlLmdldE5hbWUoKS5pc0VtcHR5KCkpIHsKKwkJCQlhVHlwZUFzTGlzdC5hZGQodHlwZS5nZXROYW1lKCkpOworCQkJfSBlbHNlIGlmICh0eXBlLmdldEJhc2VfVHlwZSgpIGluc3RhbmNlb2YgTmFtZWRFbGVtZW50KSB7CisJCQkJTmFtZWRFbGVtZW50IG5hbWVkRWxlbWVudCA9IChOYW1lZEVsZW1lbnQpIHR5cGUuZ2V0QmFzZV9UeXBlKCk7CisJCQkJaWYgKCFuYW1lZEVsZW1lbnQuZ2V0TmFtZSgpLmlzRW1wdHkoKSkgeworCQkJCQlhVHlwZUFzTGlzdC5hZGQobmFtZWRFbGVtZW50LmdldE5hbWUoKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBhVHlwZUFzTGlzdDsKKwl9CisKKwkvKioKKwkgKiBBQ29udGV4dCBhdHRyaWJ1dGUgZ2V0dGVyIGZvciBKU09OIHNlcmlhbGl6YXRpb24KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBKc29uR2V0dGVyKCJAY29udGV4dCIpCisJcHVibGljIEVNYXA8U3RyaW5nLCBTdHJpbmc+IGdldEFDb250ZXh0QXNNYXAoKSB7CisJCUVNYXA8U3RyaW5nLCBTdHJpbmc+IGFDb250ZXh0QXNNYXAgPSBuZXcgQmFzaWNFTWFwPFN0cmluZywgU3RyaW5nPigpOworCQlhQ29udGV4dEFzTWFwLnB1dCgiIiwgImh0dHBzOi8vd3d3LnczLm9yZy8yMDE5L3dvdC90ZC92MSIpOworCQlFTGlzdDxDb250ZXh0PiBjb250ZXh0cyA9IHRoaXMuZ2V0QUNvbnRleHQoKTsKKwkJZm9yIChDb250ZXh0IGNvbnRleHQgOiBjb250ZXh0cykgeworCQkJaWYgKGNvbnRleHQuZ2V0VXJpKCkgIT0gbnVsbCAmJiAhY29udGV4dC5nZXRVcmkoKS5pc0VtcHR5KCkgJiYgIWNvbnRleHQuZ2V0QmFzZV9OYW1lc3BhY2UoKS5nZXROYW1lKCkuaXNFbXB0eSgpKSB7CisJCQkJYUNvbnRleHRBc01hcC5wdXQoY29udGV4dC5nZXRCYXNlX05hbWVzcGFjZSgpLmdldE5hbWUoKSwgY29udGV4dC5nZXRVcmkoKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFDb250ZXh0QXNNYXA7CisJfQogCiB9IC8vVGhpbmdJbXBsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL1R5cGVJbXBsLmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL1R5cGVJbXBsLmphdmEKaW5kZXggNDNkZWYyYS4uZmNiMzY4NyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9UeXBlSW1wbC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvVHlwZUltcGwuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QuaW1wbDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvV29URmFjdG9yeUltcGwuamF2YSBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvV29URmFjdG9yeUltcGwuamF2YQppbmRleCAzMDM1NmY0Li41NDJjOGRjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL1dvVEZhY3RvcnlJbXBsLmphdmEKKysrIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9Xb1RGYWN0b3J5SW1wbC5qYXZhCkBAIC05LDYgKzksNyBAQAogICogQ29udHJpYnV0b3JzOgogICogICBK6XLpbWllIFRhdGlib3VldCAoQ0VBKSBqZXJlbWllLnRhdGlib3VldEBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqICAgQmVub2l0IE1hZ2dpIChDRUEpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqICAgU2h1YWkgTGkgKENFQSkgc2h1YWkubGlAY2VhLmZyIC0gSW50ZWdyYXRpb24gb2Ygc2Vuc2lOYWN0IGFuZCBXZWIgb2YgVGhpbmdzIFRoaW5nIERlc2NyaXB0aW9uCiAgKiAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC5pbXBsOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9Xb1RQYWNrYWdlSW1wbC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvaW1wbC9Xb1RQYWNrYWdlSW1wbC5qYXZhCmluZGV4IDc1OTU4MmUuLmQ1NWFhMmEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L2ltcGwvV29UUGFja2FnZUltcGwuamF2YQorKysgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC9pbXBsL1dvVFBhY2thZ2VJbXBsLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LmltcGw7CkBAIC00MTcsNyArNDE4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGhpbmdfQmFzZSgpIHsKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUaGluZ19UaXRsZSgpIHsKIAkJcmV0dXJuIChFQXR0cmlidXRlKXRoaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CiAJfQogCkBAIC00MjcsNyArNDI4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGhpbmdfSWQoKSB7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGhpbmdfRGVzY3JpcHRpb24oKSB7CiAJCXJldHVybiAoRUF0dHJpYnV0ZSl0aGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwogCX0KIApAQCAtNDM3LDcgKzQzOCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFQXR0cmlidXRlIGdldFRoaW5nX1N1cHBvcnQoKSB7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGhpbmdfQmFzZSgpIHsKIAkJcmV0dXJuIChFQXR0cmlidXRlKXRoaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CiAJfQogCkBAIC00NDcsOCArNDQ4LDggQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0VGhpbmdfU2VjdXJpdHlEZWZpbml0aW9ucygpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKXRoaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGhpbmdfSWQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0aGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwogCX0KIAogCS8qKgpAQCAtNDU3LDggKzQ1OCw4IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRoaW5nX0xpbmtzKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGhpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUaGluZ19TdXBwb3J0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGhpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKIAl9CiAKIAkvKioKQEAgLTQ2Nyw3ICs0NjgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUaGluZ19FdmVudHMoKSB7CisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VGhpbmdfU2VjdXJpdHkoKSB7CiAJCXJldHVybiAoRVJlZmVyZW5jZSl0aGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwogCX0KIApAQCAtNDc3LDcgKzQ3OCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRoaW5nX0FjdGlvbnMoKSB7CisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VGhpbmdfU2VjdXJpdHlEZWZpbml0aW9ucygpIHsKIAkJcmV0dXJuIChFUmVmZXJlbmNlKXRoaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7CiAJfQogCkBAIC00ODcsNyArNDg4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0VGhpbmdfUHJvcGVydGllcygpIHsKKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUaGluZ19MaW5rcygpIHsKIAkJcmV0dXJuIChFUmVmZXJlbmNlKXRoaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNyk7CiAJfQogCkBAIC00OTcsOCArNDk4LDggQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGhpbmdfVmVyc2lvbigpIHsKLQkJcmV0dXJuIChFQXR0cmlidXRlKXRoaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOCk7CisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VGhpbmdfRXZlbnRzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGhpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsKIAl9CiAKIAkvKioKQEAgLTUwNyw3ICs1MDgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUaGluZ19UeXBlKCkgeworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRoaW5nX0FjdGlvbnMoKSB7CiAJCXJldHVybiAoRVJlZmVyZW5jZSl0aGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDkpOwogCX0KIApAQCAtNTE3LDcgKzUxOCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRoaW5nX0NvbnRleHQoKSB7CisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VGhpbmdfUHJvcGVydGllcygpIHsKIAkJcmV0dXJuIChFUmVmZXJlbmNlKXRoaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTApOwogCX0KIApAQCAtNTI3LDggKzUyOCw0OCBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUaGluZ19WZXJzaW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGhpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VGhpbmdfQVR5cGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl0aGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUaGluZ19BQ29udGV4dCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXRoaW5nRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQogCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRoaW5nX0Zvcm1zKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGhpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMSk7CisJCXJldHVybiAoRVJlZmVyZW5jZSl0aGluZ0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUaGluZ19CYXNlX0NsYXNzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGhpbmdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNSk7CiAJfQogCiAJLyoqCkBAIC01NTcsNyArNTk4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfU2NoZW1lKCkgeworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlY3VyaXR5U2NoZW1lX1RpdGxlKCkgewogCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VjdXJpdHlTY2hlbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKIAl9CiAKQEAgLTU2Nyw3ICs2MDgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWN1cml0eVNjaGVtZV9Qcm94eSgpIHsKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWN1cml0eVNjaGVtZV9EZXNjcmlwdGlvbigpIHsKIAkJcmV0dXJuIChFQXR0cmlidXRlKXNlY3VyaXR5U2NoZW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CiAJfQogCkBAIC01NzcsNyArNjE4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfSW4oKSB7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfU2NoZW1lKCkgewogCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VjdXJpdHlTY2hlbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKIAl9CiAKQEAgLTU4Nyw3ICs2MjgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWN1cml0eVNjaGVtZV9Rb3AoKSB7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfUHJveHkoKSB7CiAJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWN1cml0eVNjaGVtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOwogCX0KIApAQCAtNTk3LDcgKzYzOCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlY3VyaXR5U2NoZW1lX05hbWUoKSB7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfSW4oKSB7CiAJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWN1cml0eVNjaGVtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwogCX0KIApAQCAtNjA3LDcgKzY0OCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlY3VyaXR5U2NoZW1lX0F1dGhvcml6YXRpb24oKSB7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfUW9wKCkgewogCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VjdXJpdHlTY2hlbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKIAl9CiAKQEAgLTYxNyw3ICs2NTgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWN1cml0eVNjaGVtZV9BbGcoKSB7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfTmFtZSgpIHsKIAkJcmV0dXJuIChFQXR0cmlidXRlKXNlY3VyaXR5U2NoZW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNyk7CiAJfQogCkBAIC02MjcsNyArNjY4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfRm9ybWF0KCkgeworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlY3VyaXR5U2NoZW1lX0F1dGhvcml6YXRpb24oKSB7CiAJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWN1cml0eVNjaGVtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDgpOwogCX0KIApAQCAtNjM3LDcgKzY3OCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlY3VyaXR5U2NoZW1lX0lkZW50aXR5KCkgeworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlY3VyaXR5U2NoZW1lX0FsZygpIHsKIAkJcmV0dXJuIChFQXR0cmlidXRlKXNlY3VyaXR5U2NoZW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOSk7CiAJfQogCkBAIC02NDcsNyArNjg4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfVG9rZW4oKSB7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfRm9ybWF0KCkgewogCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VjdXJpdHlTY2hlbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMCk7CiAJfQogCkBAIC02NTcsNyArNjk4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfUmVmcmVzaCgpIHsKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWN1cml0eVNjaGVtZV9JZGVudGl0eSgpIHsKIAkJcmV0dXJuIChFQXR0cmlidXRlKXNlY3VyaXR5U2NoZW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTEpOwogCX0KIApAQCAtNjY3LDcgKzcwOCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlY3VyaXR5U2NoZW1lX1Njb3BlcygpIHsKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWN1cml0eVNjaGVtZV9Ub2tlbigpIHsKIAkJcmV0dXJuIChFQXR0cmlidXRlKXNlY3VyaXR5U2NoZW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTIpOwogCX0KIApAQCAtNjc3LDcgKzcxOCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlY3VyaXR5U2NoZW1lX0Zsb3coKSB7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VjdXJpdHlTY2hlbWVfUmVmcmVzaCgpIHsKIAkJcmV0dXJuIChFQXR0cmlidXRlKXNlY3VyaXR5U2NoZW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTMpOwogCX0KIApAQCAtNjg3LDYgKzcyOCwyNiBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWN1cml0eVNjaGVtZV9TY29wZXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWN1cml0eVNjaGVtZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWN1cml0eVNjaGVtZV9GbG93KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VjdXJpdHlTY2hlbWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCiAJcHVibGljIEVDbGFzcyBnZXRMaW5rKCkgewogCQlyZXR1cm4gbGlua0VDbGFzczsKIAl9CkBAIC03NTcsMTYgKzgxOCw2IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFUmVmZXJlbmNlIGdldEV2ZW50QWZmb3JkYW5jZV9CYXNlX1NpZ25hbCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWV2ZW50QWZmb3JkYW5jZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUBPdmVycmlkZQogCXB1YmxpYyBFUmVmZXJlbmNlIGdldEV2ZW50QWZmb3JkYW5jZV9EYXRhKCkgewogCQlyZXR1cm4gKEVSZWZlcmVuY2UpZXZlbnRBZmZvcmRhbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CiAJfQpAQCAtNzk3LDYgKzg0OCwxNiBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFdmVudEFmZm9yZGFuY2VfQmFzZV9SZWNlcHRpb24oKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlldmVudEFmZm9yZGFuY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKIAlwdWJsaWMgRUNsYXNzIGdldEludGVyYWN0aW9uQWZmb3JkYW5jZSgpIHsKIAkJcmV0dXJuIGludGVyYWN0aW9uQWZmb3JkYW5jZUVDbGFzczsKIAl9CkBAIC04MDcsOCArODY4LDggQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX0Zvcm1zKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX1RpdGxlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CiAJfQogCiAJLyoqCkBAIC04MTcsOCArODc4LDI4IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFUmVmZXJlbmNlIGdldEludGVyYWN0aW9uQWZmb3JkYW5jZV9UeXBlKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX0Rlc2NyaXB0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX0Zvcm1zKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX0FUeXBlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CiAJfQogCiAJLyoqCkBAIC05MDcsNiArOTg4LDI2IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQorCXB1YmxpYyBFUmVmZXJlbmNlIGdldEZvcm1fU2VjdXJpdHkoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlmb3JtRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0Rm9ybV9CYXNlX0NvbW1lbnQoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlmb3JtRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCiAJcHVibGljIEVDbGFzcyBnZXRUeXBlKCkgewogCQlyZXR1cm4gdHlwZUVDbGFzczsKIAl9CkBAIC05NDcsMjcgKzEwNDgsMjcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGF0YVNjaGVtYV9UaXRsZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRhdGFTY2hlbWFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREYXRhU2NoZW1hX0Rlc2NyaXB0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGF0YVNjaGVtYUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQogCXB1YmxpYyBFUmVmZXJlbmNlIGdldERhdGFTY2hlbWFfQmFzZV9UeXBlZEVsZW1lbnQoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7Ci0JfQotCi0JLyoqCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RGF0YVNjaGVtYV9FbnVtKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZGF0YVNjaGVtYUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOwotCX0KLQotCS8qKgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQGdlbmVyYXRlZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERhdGFTY2hlbWFfTnVtYmVySW50ZXJ2YWwoKSB7CiAJCXJldHVybiAoRVJlZmVyZW5jZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CiAJfQogCkBAIC05NzcsOCArMTA3OCw4IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERhdGFTY2hlbWFfUmVxdWlyZWQoKSB7Ci0JCXJldHVybiAoRVJlZmVyZW5jZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGF0YVNjaGVtYV9FbnVtKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGF0YVNjaGVtYUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOwogCX0KIAogCS8qKgpAQCAtOTg3LDcgKzEwODgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXREYXRhU2NoZW1hX0l0ZW1zKCkgeworCXB1YmxpYyBFUmVmZXJlbmNlIGdldERhdGFTY2hlbWFfUmVxdWlyZWQoKSB7CiAJCXJldHVybiAoRVJlZmVyZW5jZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CiAJfQogCkBAIC05OTcsNyArMTA5OCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFUmVmZXJlbmNlIGdldERhdGFTY2hlbWFfUHJvcGVydGllcygpIHsKKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREYXRhU2NoZW1hX0l0ZW1zKCkgewogCQlyZXR1cm4gKEVSZWZlcmVuY2UpZGF0YVNjaGVtYUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOwogCX0KIApAQCAtMTAwNyw3ICsxMTA4LDcgQEAKIAkgKiBAZ2VuZXJhdGVkCiAJICovCiAJQE92ZXJyaWRlCi0JcHVibGljIEVSZWZlcmVuY2UgZ2V0RGF0YVNjaGVtYV9UeXBlKCkgeworCXB1YmxpYyBFUmVmZXJlbmNlIGdldERhdGFTY2hlbWFfUHJvcGVydGllcygpIHsKIAkJcmV0dXJuIChFUmVmZXJlbmNlKWRhdGFTY2hlbWFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKIAl9CiAKQEAgLTEwMTcsOCArMTExOCw4IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFQXR0cmlidXRlIGdldERhdGFTY2hlbWFfV3JpdGVPbmx5KCkgewotCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGF0YVNjaGVtYUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcpOworCXB1YmxpYyBFUmVmZXJlbmNlIGdldERhdGFTY2hlbWFfQVR5cGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNyk7CiAJfQogCiAJLyoqCkBAIC0xMDI3LDcgKzExMjgsNyBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREYXRhU2NoZW1hX0Zvcm1hdCgpIHsKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREYXRhU2NoZW1hX1dyaXRlT25seSgpIHsKIAkJcmV0dXJuIChFQXR0cmlidXRlKWRhdGFTY2hlbWFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsKIAl9CiAKQEAgLTEwMzcsOCArMTEzOCw2OCBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREYXRhU2NoZW1hX0Zvcm1hdCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRhdGFTY2hlbWFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKIAlwdWJsaWMgRVJlZmVyZW5jZSBnZXREYXRhU2NoZW1hX09uZU9mKCkgewotCQlyZXR1cm4gKEVSZWZlcmVuY2UpZGF0YVNjaGVtYUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDkpOworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZGF0YVNjaGVtYUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREYXRhU2NoZW1hX1R5cGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFQXR0cmlidXRlIGdldERhdGFTY2hlbWFfQ29uc3QoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFQXR0cmlidXRlIGdldERhdGFTY2hlbWFfTWluSXRlbXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFQXR0cmlidXRlIGdldERhdGFTY2hlbWFfTWF4SXRlbXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFQXR0cmlidXRlIGdldERhdGFTY2hlbWFfUmVhZE9ubHkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkYXRhU2NoZW1hRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTUpOwogCX0KIAogCS8qKgpAQCAtMTA1OCwxNiArMTIxOSw2IEBACiAJICovCiAJQE92ZXJyaWRlCiAJcHVibGljIEVSZWZlcmVuY2UgZ2V0QWN0aW9uQWZmb3JkYW5jZV9JbnB1dCgpIHsKLQkJcmV0dXJuIChFUmVmZXJlbmNlKWFjdGlvbkFmZm9yZGFuY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKLQl9Ci0KLQkvKioKLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBY3Rpb25BZmZvcmRhbmNlX091dHB1dCgpIHsKIAkJcmV0dXJuIChFUmVmZXJlbmNlKWFjdGlvbkFmZm9yZGFuY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKIAl9CiAKQEAgLTEwNzcsNyArMTIyOCw3IEBACiAJICogQGdlbmVyYXRlZAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBFUmVmZXJlbmNlIGdldEFjdGlvbkFmZm9yZGFuY2VfQmFzZV9CZWhhdmlvcmFsRmVhdHVyZSgpIHsKKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBY3Rpb25BZmZvcmRhbmNlX091dHB1dCgpIHsKIAkJcmV0dXJuIChFUmVmZXJlbmNlKWFjdGlvbkFmZm9yZGFuY2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKIAl9CiAKQEAgLTExMDcsNiArMTI1OCwxNiBAQAogCSAqIEBnZW5lcmF0ZWQKIAkgKi8KIAlAT3ZlcnJpZGUKKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBY3Rpb25BZmZvcmRhbmNlX0Jhc2VfT3BlcmF0aW9uKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpYWN0aW9uQWZmb3JkYW5jZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQogCXB1YmxpYyBFQ2xhc3MgZ2V0UHJvcGVydHlBZmZvcmRhbmNlKCkgewogCQlyZXR1cm4gcHJvcGVydHlBZmZvcmRhbmNlRUNsYXNzOwogCX0KQEAgLTEyNjEsMjEgKzE0MjIsMjcgQEAKIAogCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKIAkJdGhpbmdFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEhJTkcpOworCQljcmVhdGVFQXR0cmlidXRlKHRoaW5nRUNsYXNzLCBUSElOR19fVElUTEUpOworCQljcmVhdGVFQXR0cmlidXRlKHRoaW5nRUNsYXNzLCBUSElOR19fREVTQ1JJUFRJT04pOwogCQljcmVhdGVFQXR0cmlidXRlKHRoaW5nRUNsYXNzLCBUSElOR19fQkFTRSk7CiAJCWNyZWF0ZUVBdHRyaWJ1dGUodGhpbmdFQ2xhc3MsIFRISU5HX19JRCk7CiAJCWNyZWF0ZUVBdHRyaWJ1dGUodGhpbmdFQ2xhc3MsIFRISU5HX19TVVBQT1JUKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh0aGluZ0VDbGFzcywgVEhJTkdfX1NFQ1VSSVRZKTsKIAkJY3JlYXRlRVJlZmVyZW5jZSh0aGluZ0VDbGFzcywgVEhJTkdfX1NFQ1VSSVRZX0RFRklOSVRJT05TKTsKIAkJY3JlYXRlRVJlZmVyZW5jZSh0aGluZ0VDbGFzcywgVEhJTkdfX0xJTktTKTsKIAkJY3JlYXRlRVJlZmVyZW5jZSh0aGluZ0VDbGFzcywgVEhJTkdfX0VWRU5UUyk7CiAJCWNyZWF0ZUVSZWZlcmVuY2UodGhpbmdFQ2xhc3MsIFRISU5HX19BQ1RJT05TKTsKIAkJY3JlYXRlRVJlZmVyZW5jZSh0aGluZ0VDbGFzcywgVEhJTkdfX1BST1BFUlRJRVMpOwogCQljcmVhdGVFQXR0cmlidXRlKHRoaW5nRUNsYXNzLCBUSElOR19fVkVSU0lPTik7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UodGhpbmdFQ2xhc3MsIFRISU5HX19UWVBFKTsKLQkJY3JlYXRlRVJlZmVyZW5jZSh0aGluZ0VDbGFzcywgVEhJTkdfX0NPTlRFWFQpOworCQljcmVhdGVFUmVmZXJlbmNlKHRoaW5nRUNsYXNzLCBUSElOR19fQVRZUEUpOworCQljcmVhdGVFUmVmZXJlbmNlKHRoaW5nRUNsYXNzLCBUSElOR19fQUNPTlRFWFQpOwogCQljcmVhdGVFUmVmZXJlbmNlKHRoaW5nRUNsYXNzLCBUSElOR19fRk9STVMpOworCQljcmVhdGVFUmVmZXJlbmNlKHRoaW5nRUNsYXNzLCBUSElOR19fQkFTRV9DTEFTUyk7CiAKIAkJc2VjdXJpdHlTY2hlbWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0VDVVJJVFlfU0NIRU1FKTsKIAkJY3JlYXRlRVJlZmVyZW5jZShzZWN1cml0eVNjaGVtZUVDbGFzcywgU0VDVVJJVFlfU0NIRU1FX19CQVNFX0NMQVNTSUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKHNlY3VyaXR5U2NoZW1lRUNsYXNzLCBTRUNVUklUWV9TQ0hFTUVfX1RJVExFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzZWN1cml0eVNjaGVtZUVDbGFzcywgU0VDVVJJVFlfU0NIRU1FX19ERVNDUklQVElPTik7CiAJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VjdXJpdHlTY2hlbWVFQ2xhc3MsIFNFQ1VSSVRZX1NDSEVNRV9fU0NIRU1FKTsKIAkJY3JlYXRlRUF0dHJpYnV0ZShzZWN1cml0eVNjaGVtZUVDbGFzcywgU0VDVVJJVFlfU0NIRU1FX19QUk9YWSk7CiAJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VjdXJpdHlTY2hlbWVFQ2xhc3MsIFNFQ1VSSVRZX1NDSEVNRV9fSU4pOwpAQCAtMTI5OCwxNCArMTQ2NSwxNiBAQAogCQljcmVhdGVFQXR0cmlidXRlKGxpbmtFQ2xhc3MsIExJTktfX0FOQ0hPUik7CiAKIAkJZXZlbnRBZmZvcmRhbmNlRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVWRU5UX0FGRk9SREFOQ0UpOwotCQljcmVhdGVFUmVmZXJlbmNlKGV2ZW50QWZmb3JkYW5jZUVDbGFzcywgRVZFTlRfQUZGT1JEQU5DRV9fQkFTRV9TSUdOQUwpOworCQljcmVhdGVFUmVmZXJlbmNlKGV2ZW50QWZmb3JkYW5jZUVDbGFzcywgRVZFTlRfQUZGT1JEQU5DRV9fQkFTRV9SRUNFUFRJT04pOwogCQljcmVhdGVFUmVmZXJlbmNlKGV2ZW50QWZmb3JkYW5jZUVDbGFzcywgRVZFTlRfQUZGT1JEQU5DRV9fREFUQSk7CiAJCWNyZWF0ZUVSZWZlcmVuY2UoZXZlbnRBZmZvcmRhbmNlRUNsYXNzLCBFVkVOVF9BRkZPUkRBTkNFX19TVUJTQ1JJUFRJT04pOwogCQljcmVhdGVFUmVmZXJlbmNlKGV2ZW50QWZmb3JkYW5jZUVDbGFzcywgRVZFTlRfQUZGT1JEQU5DRV9fQ0FOQ0VMTEFUSU9OKTsKIAogCQlpbnRlcmFjdGlvbkFmZm9yZGFuY2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5URVJBQ1RJT05fQUZGT1JEQU5DRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLCBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19USVRMRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLCBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19ERVNDUklQVElPTik7CiAJCWNyZWF0ZUVSZWZlcmVuY2UoaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLCBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19GT1JNUyk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoaW50ZXJhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLCBJTlRFUkFDVElPTl9BRkZPUkRBTkNFX19UWVBFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShpbnRlcmFjdGlvbkFmZm9yZGFuY2VFQ2xhc3MsIElOVEVSQUNUSU9OX0FGRk9SREFOQ0VfX0FUWVBFKTsKIAogCQlmb3JtRUNsYXNzID0gY3JlYXRlRUNsYXNzKEZPUk0pOwogCQljcmVhdGVFQXR0cmlidXRlKGZvcm1FQ2xhc3MsIEZPUk1fX09QKTsKQEAgLTEzMTUsMjcgKzE0ODQsMzUgQEAKIAkJY3JlYXRlRUF0dHJpYnV0ZShmb3JtRUNsYXNzLCBGT1JNX19TVUJfUFJPVE9DT0wpOwogCQljcmVhdGVFQXR0cmlidXRlKGZvcm1FQ2xhc3MsIEZPUk1fX1NDT1BFUyk7CiAJCWNyZWF0ZUVBdHRyaWJ1dGUoZm9ybUVDbGFzcywgRk9STV9fUkVTUE9OU0UpOworCQljcmVhdGVFUmVmZXJlbmNlKGZvcm1FQ2xhc3MsIEZPUk1fX1NFQ1VSSVRZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShmb3JtRUNsYXNzLCBGT1JNX19CQVNFX0NPTU1FTlQpOwogCiAJCXR5cGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVFlQRSk7CiAJCWNyZWF0ZUVBdHRyaWJ1dGUodHlwZUVDbGFzcywgVFlQRV9fTkFNRSk7CiAJCWNyZWF0ZUVSZWZlcmVuY2UodHlwZUVDbGFzcywgVFlQRV9fQkFTRV9UWVBFKTsKIAogCQlkYXRhU2NoZW1hRUNsYXNzID0gY3JlYXRlRUNsYXNzKERBVEFfU0NIRU1BKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkYXRhU2NoZW1hRUNsYXNzLCBEQVRBX1NDSEVNQV9fVElUTEUpOworCQljcmVhdGVFQXR0cmlidXRlKGRhdGFTY2hlbWFFQ2xhc3MsIERBVEFfU0NIRU1BX19ERVNDUklQVElPTik7CiAJCWNyZWF0ZUVSZWZlcmVuY2UoZGF0YVNjaGVtYUVDbGFzcywgREFUQV9TQ0hFTUFfX0JBU0VfVFlQRURfRUxFTUVOVCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoZGF0YVNjaGVtYUVDbGFzcywgREFUQV9TQ0hFTUFfX0VOVU0pOwotCQljcmVhdGVFUmVmZXJlbmNlKGRhdGFTY2hlbWFFQ2xhc3MsIERBVEFfU0NIRU1BX19OVU1CRVJfSU5URVJWQUwpOworCQljcmVhdGVFQXR0cmlidXRlKGRhdGFTY2hlbWFFQ2xhc3MsIERBVEFfU0NIRU1BX19FTlVNKTsKIAkJY3JlYXRlRVJlZmVyZW5jZShkYXRhU2NoZW1hRUNsYXNzLCBEQVRBX1NDSEVNQV9fUkVRVUlSRUQpOwogCQljcmVhdGVFUmVmZXJlbmNlKGRhdGFTY2hlbWFFQ2xhc3MsIERBVEFfU0NIRU1BX19JVEVNUyk7CiAJCWNyZWF0ZUVSZWZlcmVuY2UoZGF0YVNjaGVtYUVDbGFzcywgREFUQV9TQ0hFTUFfX1BST1BFUlRJRVMpOwotCQljcmVhdGVFUmVmZXJlbmNlKGRhdGFTY2hlbWFFQ2xhc3MsIERBVEFfU0NIRU1BX19UWVBFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShkYXRhU2NoZW1hRUNsYXNzLCBEQVRBX1NDSEVNQV9fQVRZUEUpOwogCQljcmVhdGVFQXR0cmlidXRlKGRhdGFTY2hlbWFFQ2xhc3MsIERBVEFfU0NIRU1BX19XUklURV9PTkxZKTsKIAkJY3JlYXRlRUF0dHJpYnV0ZShkYXRhU2NoZW1hRUNsYXNzLCBEQVRBX1NDSEVNQV9fRk9STUFUKTsKIAkJY3JlYXRlRVJlZmVyZW5jZShkYXRhU2NoZW1hRUNsYXNzLCBEQVRBX1NDSEVNQV9fT05FX09GKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkYXRhU2NoZW1hRUNsYXNzLCBEQVRBX1NDSEVNQV9fVFlQRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGF0YVNjaGVtYUVDbGFzcywgREFUQV9TQ0hFTUFfX0NPTlNUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkYXRhU2NoZW1hRUNsYXNzLCBEQVRBX1NDSEVNQV9fTUlOX0lURU1TKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkYXRhU2NoZW1hRUNsYXNzLCBEQVRBX1NDSEVNQV9fTUFYX0lURU1TKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkYXRhU2NoZW1hRUNsYXNzLCBEQVRBX1NDSEVNQV9fUkVBRF9PTkxZKTsKIAogCQlhY3Rpb25BZmZvcmRhbmNlRUNsYXNzID0gY3JlYXRlRUNsYXNzKEFDVElPTl9BRkZPUkRBTkNFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLCBBQ1RJT05fQUZGT1JEQU5DRV9fQkFTRV9PUEVSQVRJT04pOwogCQljcmVhdGVFUmVmZXJlbmNlKGFjdGlvbkFmZm9yZGFuY2VFQ2xhc3MsIEFDVElPTl9BRkZPUkRBTkNFX19JTlBVVCk7CiAJCWNyZWF0ZUVSZWZlcmVuY2UoYWN0aW9uQWZmb3JkYW5jZUVDbGFzcywgQUNUSU9OX0FGRk9SREFOQ0VfX09VVFBVVCk7Ci0JCWNyZWF0ZUVSZWZlcmVuY2UoYWN0aW9uQWZmb3JkYW5jZUVDbGFzcywgQUNUSU9OX0FGRk9SREFOQ0VfX0JBU0VfQkVIQVZJT1JBTF9GRUFUVVJFKTsKIAkJY3JlYXRlRUF0dHJpYnV0ZShhY3Rpb25BZmZvcmRhbmNlRUNsYXNzLCBBQ1RJT05fQUZGT1JEQU5DRV9fU0FGRSk7CiAJCWNyZWF0ZUVBdHRyaWJ1dGUoYWN0aW9uQWZmb3JkYW5jZUVDbGFzcywgQUNUSU9OX0FGRk9SREFOQ0VfX0lERU1QT1RFTlQpOwogCkBAIC0xMzgxLDM5ICsxNTU4LDQxIEBACiAJCXNldE5zVVJJKGVOU19VUkkpOwogCiAJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKLQkJQXJ0ZWZhY3RQYWNrYWdlIHRoZUFydGVmYWN0UGFja2FnZSA9IChBcnRlZmFjdFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQXJ0ZWZhY3RQYWNrYWdlLmVOU19VUkkpOwogCQlUeXBlc1BhY2thZ2UgdGhlVHlwZXNQYWNrYWdlID0gKFR5cGVzUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUeXBlc1BhY2thZ2UuZU5TX1VSSSk7CiAJCVVNTFBhY2thZ2UgdGhlVU1MUGFja2FnZSA9IChVTUxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVNTFBhY2thZ2UuZU5TX1VSSSk7Ci0JCVN0cnVjdHVyZVBhY2thZ2UgdGhlU3RydWN0dXJlUGFja2FnZSA9IChTdHJ1Y3R1cmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0cnVjdHVyZVBhY2thZ2UuZU5TX1VSSSk7CiAKIAkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycwogCiAJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycwogCiAJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKLQkJdGhpbmdFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQXJ0ZWZhY3RQYWNrYWdlLmdldFZpcnR1YWxFbnRpdHkoKSk7CiAJCWV2ZW50QWZmb3JkYW5jZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEludGVyYWN0aW9uQWZmb3JkYW5jZSgpKTsKLQkJZm9ybUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTdHJ1Y3R1cmVQYWNrYWdlLmdldE1ldGFWYWx1ZVNwZWNpZmljYXRpb24oKSk7CiAJCWFjdGlvbkFmZm9yZGFuY2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2UoKSk7CiAJCXByb3BlcnR5QWZmb3JkYW5jZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEludGVyYWN0aW9uQWZmb3JkYW5jZSgpKTsKIAogCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycwogCQlpbml0RUNsYXNzKHRoaW5nRUNsYXNzLCBUaGluZy5jbGFzcywgIlRoaW5nIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXRUaGluZ19UaXRsZSgpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0U3RyaW5nKCksICJ0aXRsZSIsIG51bGwsIDEsIDEsIFRoaW5nLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGhpbmdfRGVzY3JpcHRpb24oKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiZGVzY3JpcHRpb24iLCBudWxsLCAxLCAxLCBUaGluZy5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAJCWluaXRFQXR0cmlidXRlKGdldFRoaW5nX0Jhc2UoKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiYmFzZSIsIG51bGwsIDAsIDEsIFRoaW5nLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGhpbmdfSWQoKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiaWQiLCBudWxsLCAwLCAxLCBUaGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAJCWluaXRFQXR0cmlidXRlKGdldFRoaW5nX1N1cHBvcnQoKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAic3VwcG9ydCIsIG51bGwsIDAsIDEsIFRoaW5nLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VGhpbmdfU2VjdXJpdHkoKSwgdGhpcy5nZXRTZWN1cml0eVNjaGVtZSgpLCBudWxsLCAic2VjdXJpdHkiLCBudWxsLCAxLCAtMSwgVGhpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCQlpbml0RVJlZmVyZW5jZShnZXRUaGluZ19TZWN1cml0eURlZmluaXRpb25zKCksIHRoaXMuZ2V0U2VjdXJpdHlTY2hlbWUoKSwgbnVsbCwgInNlY3VyaXR5RGVmaW5pdGlvbnMiLCBudWxsLCAxLCAtMSwgVGhpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCQlpbml0RVJlZmVyZW5jZShnZXRUaGluZ19MaW5rcygpLCB0aGlzLmdldExpbmsoKSwgbnVsbCwgImxpbmtzIiwgbnVsbCwgMCwgLTEsIFRoaW5nLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0VGhpbmdfRXZlbnRzKCksIHRoaXMuZ2V0RXZlbnRBZmZvcmRhbmNlKCksIG51bGwsICJldmVudHMiLCBudWxsLCAwLCAtMSwgVGhpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRUaGluZ19BY3Rpb25zKCksIHRoaXMuZ2V0QWN0aW9uQWZmb3JkYW5jZSgpLCBudWxsLCAiYWN0aW9ucyIsIG51bGwsIDAsIC0xLCBUaGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldFRoaW5nX1Byb3BlcnRpZXMoKSwgdGhpcy5nZXRQcm9wZXJ0eUFmZm9yZGFuY2UoKSwgbnVsbCwgInByb3BlcnRpZXMiLCBudWxsLCAwLCAtMSwgVGhpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRUaGluZ19FdmVudHMoKSwgdGhpcy5nZXRFdmVudEFmZm9yZGFuY2UoKSwgbnVsbCwgImV2ZW50cyIsIG51bGwsIDAsIC0xLCBUaGluZy5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFRoaW5nX0FjdGlvbnMoKSwgdGhpcy5nZXRBY3Rpb25BZmZvcmRhbmNlKCksIG51bGwsICJhY3Rpb25zIiwgbnVsbCwgMCwgLTEsIFRoaW5nLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VGhpbmdfUHJvcGVydGllcygpLCB0aGlzLmdldFByb3BlcnR5QWZmb3JkYW5jZSgpLCBudWxsLCAicHJvcGVydGllcyIsIG51bGwsIDAsIC0xLCBUaGluZy5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAJCWluaXRFQXR0cmlidXRlKGdldFRoaW5nX1ZlcnNpb24oKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAidmVyc2lvbiIsIG51bGwsIDEsIDEsIFRoaW5nLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0VGhpbmdfVHlwZSgpLCB0aGlzLmdldFR5cGUoKSwgbnVsbCwgInR5cGUiLCBudWxsLCAwLCAtMSwgVGhpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRUaGluZ19Db250ZXh0KCksIHRoaXMuZ2V0Q29udGV4dCgpLCBudWxsLCAiY29udGV4dCIsIG51bGwsIDAsIC0xLCBUaGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFRoaW5nX0FUeXBlKCksIHRoaXMuZ2V0VHlwZSgpLCBudWxsLCAiYVR5cGUiLCBudWxsLCAwLCAtMSwgVGhpbmcuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRUaGluZ19BQ29udGV4dCgpLCB0aGlzLmdldENvbnRleHQoKSwgbnVsbCwgImFDb250ZXh0IiwgbnVsbCwgMCwgLTEsIFRoaW5nLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVSZWZlcmVuY2UoZ2V0VGhpbmdfRm9ybXMoKSwgdGhpcy5nZXRGb3JtKCksIG51bGwsICJmb3JtcyIsIG51bGwsIDAsIC0xLCBUaGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFRoaW5nX0Jhc2VfQ2xhc3MoKSwgdGhlVU1MUGFja2FnZS5nZXRDbGFzc18oKSwgbnVsbCwgImJhc2VfQ2xhc3MiLCBudWxsLCAwLCAxLCBUaGluZy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAKIAkJaW5pdEVDbGFzcyhzZWN1cml0eVNjaGVtZUVDbGFzcywgU2VjdXJpdHlTY2hlbWUuY2xhc3MsICJTZWN1cml0eVNjaGVtZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKIAkJaW5pdEVSZWZlcmVuY2UoZ2V0U2VjdXJpdHlTY2hlbWVfQmFzZV9DbGFzc2lmaWVyKCksIHRoZVVNTFBhY2thZ2UuZ2V0Q2xhc3NpZmllcigpLCBudWxsLCAiYmFzZV9DbGFzc2lmaWVyIiwgbnVsbCwgMCwgMSwgU2VjdXJpdHlTY2hlbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTZWN1cml0eVNjaGVtZV9UaXRsZSgpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0U3RyaW5nKCksICJ0aXRsZSIsIG51bGwsIDEsIDEsIFNlY3VyaXR5U2NoZW1lLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2VjdXJpdHlTY2hlbWVfRGVzY3JpcHRpb24oKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiZGVzY3JpcHRpb24iLCBudWxsLCAxLCAxLCBTZWN1cml0eVNjaGVtZS5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAJCWluaXRFQXR0cmlidXRlKGdldFNlY3VyaXR5U2NoZW1lX1NjaGVtZSgpLCB0aGlzLmdldFNlY3VyaXR5U2NoZW1lS2luZCgpLCAic2NoZW1lIiwgbnVsbCwgMSwgMSwgU2VjdXJpdHlTY2hlbWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCQlpbml0RUF0dHJpYnV0ZShnZXRTZWN1cml0eVNjaGVtZV9Qcm94eSgpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0U3RyaW5nKCksICJwcm94eSIsIG51bGwsIDAsIDEsIFNlY3VyaXR5U2NoZW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2VjdXJpdHlTY2hlbWVfSW4oKSwgdGhpcy5nZXRTZWN1cml0eUF1dGhlbnRpY2F0aW9uSW5mb3JtYXRpb25Mb2NhdGlvbktpbmQoKSwgImluIiwgImhlYWRlciIsIDEsIDEsIFNlY3VyaXR5U2NoZW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKQEAgLTE0MzYsMTQgKzE2MTUsMTYgQEAKIAkJaW5pdEVBdHRyaWJ1dGUoZ2V0TGlua19BbmNob3IoKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiYW5jaG9yIiwgbnVsbCwgMSwgMSwgTGluay5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAKIAkJaW5pdEVDbGFzcyhldmVudEFmZm9yZGFuY2VFQ2xhc3MsIEV2ZW50QWZmb3JkYW5jZS5jbGFzcywgIkV2ZW50QWZmb3JkYW5jZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RXZlbnRBZmZvcmRhbmNlX0Jhc2VfU2lnbmFsKCksIHRoZVVNTFBhY2thZ2UuZ2V0U2lnbmFsKCksIG51bGwsICJiYXNlX1NpZ25hbCIsIG51bGwsIDAsIDEsIEV2ZW50QWZmb3JkYW5jZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldEV2ZW50QWZmb3JkYW5jZV9CYXNlX1JlY2VwdGlvbigpLCB0aGVVTUxQYWNrYWdlLmdldFJlY2VwdGlvbigpLCBudWxsLCAiYmFzZV9SZWNlcHRpb24iLCBudWxsLCAwLCAxLCBFdmVudEFmZm9yZGFuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCQlpbml0RVJlZmVyZW5jZShnZXRFdmVudEFmZm9yZGFuY2VfRGF0YSgpLCB0aGlzLmdldERhdGFTY2hlbWEoKSwgbnVsbCwgImRhdGEiLCBudWxsLCAwLCAxLCBFdmVudEFmZm9yZGFuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCQlpbml0RVJlZmVyZW5jZShnZXRFdmVudEFmZm9yZGFuY2VfU3Vic2NyaXB0aW9uKCksIHRoaXMuZ2V0RGF0YVNjaGVtYSgpLCBudWxsLCAic3Vic2NyaXB0aW9uIiwgbnVsbCwgMCwgMSwgRXZlbnRBZmZvcmRhbmNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVSZWZlcmVuY2UoZ2V0RXZlbnRBZmZvcmRhbmNlX0NhbmNlbGxhdGlvbigpLCB0aGlzLmdldERhdGFTY2hlbWEoKSwgbnVsbCwgImNhbmNlbGxhdGlvbiIsIG51bGwsIDAsIDEsIEV2ZW50QWZmb3JkYW5jZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAKIAkJaW5pdEVDbGFzcyhpbnRlcmFjdGlvbkFmZm9yZGFuY2VFQ2xhc3MsIEludGVyYWN0aW9uQWZmb3JkYW5jZS5jbGFzcywgIkludGVyYWN0aW9uQWZmb3JkYW5jZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2VfVGl0bGUoKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAidGl0bGUiLCBudWxsLCAxLCAxLCBJbnRlcmFjdGlvbkFmZm9yZGFuY2UuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2VfRGVzY3JpcHRpb24oKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiZGVzY3JpcHRpb24iLCBudWxsLCAxLCAxLCBJbnRlcmFjdGlvbkFmZm9yZGFuY2UuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCQlpbml0RVJlZmVyZW5jZShnZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2VfRm9ybXMoKSwgdGhpcy5nZXRGb3JtKCksIG51bGwsICJmb3JtcyIsIG51bGwsIDEsIC0xLCBJbnRlcmFjdGlvbkFmZm9yZGFuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRJbnRlcmFjdGlvbkFmZm9yZGFuY2VfVHlwZSgpLCB0aGlzLmdldFR5cGUoKSwgbnVsbCwgInR5cGUiLCBudWxsLCAwLCAtMSwgSW50ZXJhY3Rpb25BZmZvcmRhbmNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0SW50ZXJhY3Rpb25BZmZvcmRhbmNlX0FUeXBlKCksIHRoaXMuZ2V0VHlwZSgpLCBudWxsLCAiYVR5cGUiLCBudWxsLCAwLCAtMSwgSW50ZXJhY3Rpb25BZmZvcmRhbmNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAogCQlpbml0RUNsYXNzKGZvcm1FQ2xhc3MsIEZvcm0uY2xhc3MsICJGb3JtIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOwogCQlpbml0RUF0dHJpYnV0ZShnZXRGb3JtX09wKCksIHRoaXMuZ2V0T3BLaW5kKCksICJvcCIsICJyZWFkcHJvcGVydHkiLCAxLCAtMSwgRm9ybS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CkBAIC0xNDUxLDI5ICsxNjMyLDM3IEBACiAJCWluaXRFQXR0cmlidXRlKGdldEZvcm1fQ29udGVudFR5cGUoKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiY29udGVudFR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIsIDEsIDEsIEZvcm0uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCQlpbml0RUF0dHJpYnV0ZShnZXRGb3JtX0NvbnRlbnRDb2RpbmcoKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiY29udGVudENvZGluZyIsIG51bGwsIDAsIDEsIEZvcm0uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCQlpbml0RUF0dHJpYnV0ZShnZXRGb3JtX1N1YlByb3RvY29sKCksIHRoaXMuZ2V0U3ViUHJvdG9jb2xLaW5kKCksICJzdWJQcm90b2NvbCIsIG51bGwsIDAsIDEsIEZvcm0uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwotCQlpbml0RUF0dHJpYnV0ZShnZXRGb3JtX1Njb3BlcygpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0U3RyaW5nKCksICJzY29wZXMiLCBudWxsLCAwLCAtMSwgRm9ybS5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldEZvcm1fU2NvcGVzKCksIHRoZVR5cGVzUGFja2FnZS5nZXRTdHJpbmcoKSwgInNjb3BlcyIsIG51bGwsIDAsIC0xLCBGb3JtLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVBdHRyaWJ1dGUoZ2V0Rm9ybV9SZXNwb25zZSgpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0U3RyaW5nKCksICJyZXNwb25zZSIsICJhcHBsaWNhdGlvbi9qc29uIiwgMCwgMSwgRm9ybS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldEZvcm1fU2VjdXJpdHkoKSwgdGhpcy5nZXRTZWN1cml0eVNjaGVtZSgpLCBudWxsLCAic2VjdXJpdHkiLCBudWxsLCAxLCAtMSwgRm9ybS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldEZvcm1fQmFzZV9Db21tZW50KCksIHRoZVVNTFBhY2thZ2UuZ2V0Q29tbWVudCgpLCBudWxsLCAiYmFzZV9Db21tZW50IiwgbnVsbCwgMCwgMSwgRm9ybS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAKIAkJaW5pdEVDbGFzcyh0eXBlRUNsYXNzLCBUeXBlLmNsYXNzLCAiVHlwZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKIAkJaW5pdEVBdHRyaWJ1dGUoZ2V0VHlwZV9OYW1lKCksIHRoZVR5cGVzUGFja2FnZS5nZXRTdHJpbmcoKSwgIm5hbWUiLCBudWxsLCAxLCAxLCBUeXBlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVSZWZlcmVuY2UoZ2V0VHlwZV9CYXNlX1R5cGUoKSwgdGhlVU1MUGFja2FnZS5nZXRUeXBlKCksIG51bGwsICJiYXNlX1R5cGUiLCBudWxsLCAwLCAxLCBUeXBlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAogCQlpbml0RUNsYXNzKGRhdGFTY2hlbWFFQ2xhc3MsIERhdGFTY2hlbWEuY2xhc3MsICJEYXRhU2NoZW1hIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXREYXRhU2NoZW1hX1RpdGxlKCksIHRoZVR5cGVzUGFja2FnZS5nZXRTdHJpbmcoKSwgInRpdGxlIiwgbnVsbCwgMSwgMSwgRGF0YVNjaGVtYS5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCBJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERhdGFTY2hlbWFfRGVzY3JpcHRpb24oKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiZGVzY3JpcHRpb24iLCBudWxsLCAxLCAxLCBEYXRhU2NoZW1hLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVSZWZlcmVuY2UoZ2V0RGF0YVNjaGVtYV9CYXNlX1R5cGVkRWxlbWVudCgpLCB0aGVVTUxQYWNrYWdlLmdldFR5cGVkRWxlbWVudCgpLCBudWxsLCAiYmFzZV9UeXBlZEVsZW1lbnQiLCBudWxsLCAwLCAxLCBEYXRhU2NoZW1hLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RGF0YVNjaGVtYV9FbnVtKCksIHRoZVN0cnVjdHVyZVBhY2thZ2UuZ2V0TWV0YVZhbHVlU3BlY2lmaWNhdGlvbigpLCBudWxsLCAiZW51bSIsIG51bGwsIDAsIC0xLCBEYXRhU2NoZW1hLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKLQkJaW5pdEVSZWZlcmVuY2UoZ2V0RGF0YVNjaGVtYV9OdW1iZXJJbnRlcnZhbCgpLCB0aGVVTUxQYWNrYWdlLmdldEludGVydmFsKCksIG51bGwsICJudW1iZXJJbnRlcnZhbCIsIG51bGwsIDEsIDEsIERhdGFTY2hlbWEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREYXRhU2NoZW1hX0VudW0oKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiZW51bSIsIG51bGwsIDAsIC0xLCBEYXRhU2NoZW1hLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVSZWZlcmVuY2UoZ2V0RGF0YVNjaGVtYV9SZXF1aXJlZCgpLCB0aGVVTUxQYWNrYWdlLmdldFByb3BlcnR5KCksIG51bGwsICJyZXF1aXJlZCIsIG51bGwsIDAsIC0xLCBEYXRhU2NoZW1hLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVSZWZlcmVuY2UoZ2V0RGF0YVNjaGVtYV9JdGVtcygpLCB0aGlzLmdldERhdGFTY2hlbWEoKSwgbnVsbCwgIml0ZW1zIiwgbnVsbCwgMCwgLTEsIERhdGFTY2hlbWEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCQlpbml0RVJlZmVyZW5jZShnZXREYXRhU2NoZW1hX1Byb3BlcnRpZXMoKSwgdGhpcy5nZXREYXRhU2NoZW1hKCksIG51bGwsICJwcm9wZXJ0aWVzIiwgbnVsbCwgMCwgLTEsIERhdGFTY2hlbWEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXREYXRhU2NoZW1hX1R5cGUoKSwgdGhpcy5nZXRUeXBlKCksIG51bGwsICJ0eXBlIiwgbnVsbCwgMCwgLTEsIERhdGFTY2hlbWEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXREYXRhU2NoZW1hX0FUeXBlKCksIHRoaXMuZ2V0VHlwZSgpLCBudWxsLCAiYVR5cGUiLCBudWxsLCAwLCAtMSwgRGF0YVNjaGVtYS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAJCWluaXRFQXR0cmlidXRlKGdldERhdGFTY2hlbWFfV3JpdGVPbmx5KCksIHRoZVR5cGVzUGFja2FnZS5nZXRCb29sZWFuKCksICJ3cml0ZU9ubHkiLCAiZmFsc2UiLCAxLCAxLCBEYXRhU2NoZW1hLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGF0YVNjaGVtYV9Gb3JtYXQoKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAiZm9ybWF0IiwgbnVsbCwgMCwgMSwgRGF0YVNjaGVtYS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAJCWluaXRFUmVmZXJlbmNlKGdldERhdGFTY2hlbWFfT25lT2YoKSwgdGhpcy5nZXREYXRhU2NoZW1hKCksIG51bGwsICJvbmVPZiIsIG51bGwsIDAsIC0xLCBEYXRhU2NoZW1hLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGF0YVNjaGVtYV9UeXBlKCksIHRoZVR5cGVzUGFja2FnZS5nZXRTdHJpbmcoKSwgInR5cGUiLCBudWxsLCAxLCAxLCBEYXRhU2NoZW1hLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGF0YVNjaGVtYV9Db25zdCgpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0U3RyaW5nKCksICJjb25zdCIsIG51bGwsIDEsIDEsIERhdGFTY2hlbWEuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREYXRhU2NoZW1hX01pbkl0ZW1zKCksIHRoZVR5cGVzUGFja2FnZS5nZXRJbnRlZ2VyKCksICJtaW5JdGVtcyIsIG51bGwsIDEsIDEsIERhdGFTY2hlbWEuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREYXRhU2NoZW1hX01heEl0ZW1zKCksIHRoZVR5cGVzUGFja2FnZS5nZXRJbnRlZ2VyKCksICJtYXhJdGVtcyIsIG51bGwsIDEsIDEsIERhdGFTY2hlbWEuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREYXRhU2NoZW1hX1JlYWRPbmx5KCksIHRoZVR5cGVzUGFja2FnZS5nZXRCb29sZWFuKCksICJyZWFkT25seSIsIG51bGwsIDEsIDEsIERhdGFTY2hlbWEuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCiAJCWluaXRFQ2xhc3MoYWN0aW9uQWZmb3JkYW5jZUVDbGFzcywgQWN0aW9uQWZmb3JkYW5jZS5jbGFzcywgIkFjdGlvbkFmZm9yZGFuY2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7Ci0JCWluaXRFUmVmZXJlbmNlKGdldEFjdGlvbkFmZm9yZGFuY2VfSW5wdXQoKSwgdGhpcy5nZXREYXRhU2NoZW1hKCksIG51bGwsICJpbnB1dCIsIG51bGwsIDAsIDEsIEFjdGlvbkFmZm9yZGFuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRBY3Rpb25BZmZvcmRhbmNlX091dHB1dCgpLCB0aGlzLmdldERhdGFTY2hlbWEoKSwgbnVsbCwgIm91dHB1dCIsIG51bGwsIDAsIDEsIEFjdGlvbkFmZm9yZGFuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwotCQlpbml0RVJlZmVyZW5jZShnZXRBY3Rpb25BZmZvcmRhbmNlX0Jhc2VfQmVoYXZpb3JhbEZlYXR1cmUoKSwgdGhlVU1MUGFja2FnZS5nZXRCZWhhdmlvcmFsRmVhdHVyZSgpLCBudWxsLCAiYmFzZV9CZWhhdmlvcmFsRmVhdHVyZSIsIG51bGwsIDAsIDEsIEFjdGlvbkFmZm9yZGFuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRBY3Rpb25BZmZvcmRhbmNlX0Jhc2VfT3BlcmF0aW9uKCksIHRoZVVNTFBhY2thZ2UuZ2V0T3BlcmF0aW9uKCksIG51bGwsICJiYXNlX09wZXJhdGlvbiIsIG51bGwsIDAsIDEsIEFjdGlvbkFmZm9yZGFuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRBY3Rpb25BZmZvcmRhbmNlX0lucHV0KCksIHRoaXMuZ2V0RGF0YVNjaGVtYSgpLCBudWxsLCAiaW5wdXQiLCBudWxsLCAwLCAxLCBBY3Rpb25BZmZvcmRhbmNlLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0QWN0aW9uQWZmb3JkYW5jZV9PdXRwdXQoKSwgdGhpcy5nZXREYXRhU2NoZW1hKCksIG51bGwsICJvdXRwdXQiLCBudWxsLCAwLCAxLCBBY3Rpb25BZmZvcmRhbmNlLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKIAkJaW5pdEVBdHRyaWJ1dGUoZ2V0QWN0aW9uQWZmb3JkYW5jZV9TYWZlKCksIHRoZVR5cGVzUGFja2FnZS5nZXRCb29sZWFuKCksICJzYWZlIiwgbnVsbCwgMSwgMSwgQWN0aW9uQWZmb3JkYW5jZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CiAJCWluaXRFQXR0cmlidXRlKGdldEFjdGlvbkFmZm9yZGFuY2VfSWRlbXBvdGVudCgpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0Qm9vbGVhbigpLCAiaWRlbXBvdGVudCIsIG51bGwsIDEsIDEsIEFjdGlvbkFmZm9yZGFuY2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC91dGlsL1dvVEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC91dGlsL1dvVEFkYXB0ZXJGYWN0b3J5LmphdmEKaW5kZXggMTgxMjRjMi4uZjNlOGI1MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvdXRpbC9Xb1RBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3V0aWwvV29UQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgSuly6W1pZSBUYXRpYm91ZXQgKENFQSkgamVyZW1pZS50YXRpYm91ZXRAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKiAgIEJlbm9pdCBNYWdnaSAoQ0VBKSBiZW5vaXQubWFnZ2lAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgIFNodWFpIExpIChDRUEpIHNodWFpLmxpQGNlYS5mciAtIEludGVncmF0aW9uIG9mIHNlbnNpTmFjdCBhbmQgV2ViIG9mIFRoaW5ncyBUaGluZyBEZXNjcmlwdGlvbgogICogCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudXRpbDsKQEAgLTE5LDEyICsyMCw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUuYXJ0ZWZhY3QuRGlnaXRhbEFydGVmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUuYXJ0ZWZhY3QuVmlydHVhbEVudGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUuY29yZS5zdHJ1Y3R1cmUuTWV0YVZhbHVlU3BlY2lmaWNhdGlvbjsKLQogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290Lio7CiAKIC8qKgpAQCAtMTI4LDE4ICsxMjMsNiBAQAogCQkJCXJldHVybiBjcmVhdGVDb250ZXh0QWRhcHRlcigpOwogCQkJfQogCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlnaXRhbEFydGVmYWN0KERpZ2l0YWxBcnRlZmFjdCBvYmplY3QpIHsKLQkJCQlyZXR1cm4gY3JlYXRlRGlnaXRhbEFydGVmYWN0QWRhcHRlcigpOwotCQkJfQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgQWRhcHRlciBjYXNlVmlydHVhbEVudGl0eShWaXJ0dWFsRW50aXR5IG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVWaXJ0dWFsRW50aXR5QWRhcHRlcigpOwotCQkJfQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgQWRhcHRlciBjYXNlTWV0YVZhbHVlU3BlY2lmaWNhdGlvbihNZXRhVmFsdWVTcGVjaWZpY2F0aW9uIG9iamVjdCkgewotCQkJCXJldHVybiBjcmVhdGVNZXRhVmFsdWVTcGVjaWZpY2F0aW9uQWRhcHRlcigpOwotCQkJfQotCQkJQE92ZXJyaWRlCiAJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgewogCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOwogCQkJfQpAQCAtMzE0LDQ4ICsyOTcsNiBAQAogCX0KIAogCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5hcnRlZmFjdC5EaWdpdGFsQXJ0ZWZhY3QgPGVtPkRpZ2l0YWwgQXJ0ZWZhY3Q8L2VtPn0nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOwotCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgotCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgotCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgotCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5zb2Z0d2FyZS5hcnRlZmFjdC5EaWdpdGFsQXJ0ZWZhY3QKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlnaXRhbEFydGVmYWN0QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLmFydGVmYWN0LlZpcnR1YWxFbnRpdHkgPGVtPlZpcnR1YWwgRW50aXR5PC9lbT59Jy4KLQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgotCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKLQkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUuYXJ0ZWZhY3QuVmlydHVhbEVudGl0eQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgQWRhcHRlciBjcmVhdGVWaXJ0dWFsRW50aXR5QWRhcHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLmNvcmUuc3RydWN0dXJlLk1ldGFWYWx1ZVNwZWNpZmljYXRpb24gPGVtPk1ldGEgVmFsdWUgU3BlY2lmaWNhdGlvbjwvZW0+fScuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7Ci0JICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnNvZnR3YXJlLmNvcmUuc3RydWN0dXJlLk1ldGFWYWx1ZVNwZWNpZmljYXRpb24KLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIEFkYXB0ZXIgY3JlYXRlTWV0YVZhbHVlU3BlY2lmaWNhdGlvbkFkYXB0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgogCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KIAkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC91dGlsL1dvVFN3aXRjaC5qYXZhIGIvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9maWxlL3NyYy1nZW4vb3JnL2VjbGlwc2UvcGFweXJ1cy9pb3RtbC93b3QvdXRpbC9Xb1RTd2l0Y2guamF2YQppbmRleCA1NDczOWI5Li4wOWEyNDE3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2ZpbGUvc3JjLWdlbi9vcmcvZWNsaXBzZS9wYXB5cnVzL2lvdG1sL3dvdC91dGlsL1dvVFN3aXRjaC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZmlsZS9zcmMtZ2VuL29yZy9lY2xpcHNlL3BhcHlydXMvaW90bWwvd290L3V0aWwvV29UU3dpdGNoLmphdmEKQEAgLTksNiArOSw3IEBACiAgKiBDb250cmlidXRvcnM6CiAgKiAgIErpcultaWUgVGF0aWJvdWV0IChDRUEpIGplcmVtaWUudGF0aWJvdWV0QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICogICBCZW5vaXQgTWFnZ2kgKENFQSkgYmVub2l0Lm1hZ2dpQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICogICBTaHVhaSBMaSAoQ0VBKSBzaHVhaS5saUBjZWEuZnIgLSBJbnRlZ3JhdGlvbiBvZiBzZW5zaU5hY3QgYW5kIFdlYiBvZiBUaGluZ3MgVGhpbmcgRGVzY3JpcHRpb24KICAqIAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnV0aWw7CkBAIC0xNywxMiArMTgsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLlN3aXRjaDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUuYXJ0ZWZhY3QuRGlnaXRhbEFydGVmYWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUuYXJ0ZWZhY3QuVmlydHVhbEVudGl0eTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuc29mdHdhcmUuY29yZS5zdHJ1Y3R1cmUuTWV0YVZhbHVlU3BlY2lmaWNhdGlvbjsKLQogaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290Lio7CiAKIC8qKgpAQCAtODUsOCArODAsNiBAQAogCQkJY2FzZSBXb1RQYWNrYWdlLlRISU5HOiB7CiAJCQkJVGhpbmcgdGhpbmcgPSAoVGhpbmcpdGhlRU9iamVjdDsKIAkJCQlUIHJlc3VsdCA9IGNhc2VUaGluZyh0aGluZyk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVmlydHVhbEVudGl0eSh0aGluZyk7Ci0JCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlnaXRhbEFydGVmYWN0KHRoaW5nKTsKIAkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOwogCQkJCXJldHVybiByZXN1bHQ7CiAJCQl9CkBAIC0xMTgsNyArMTExLDYgQEAKIAkJCWNhc2UgV29UUGFja2FnZS5GT1JNOiB7CiAJCQkJRm9ybSBmb3JtID0gKEZvcm0pdGhlRU9iamVjdDsKIAkJCQlUIHJlc3VsdCA9IGNhc2VGb3JtKGZvcm0pOwotCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1ldGFWYWx1ZVNwZWNpZmljYXRpb24oZm9ybSk7CiAJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKIAkJCQlyZXR1cm4gcmVzdWx0OwogCQkJfQpAQCAtMzI0LDUxICszMTYsNiBAQAogCX0KIAogCS8qKgotCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpZ2l0YWwgQXJ0ZWZhY3Q8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaWdpdGFsIEFydGVmYWN0PC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVCBjYXNlRGlnaXRhbEFydGVmYWN0KERpZ2l0YWxBcnRlZmFjdCBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VmlydHVhbCBFbnRpdHk8L2VtPicuCi0JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KLQkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKLQkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KLQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KLQkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KLQkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5WaXJ0dWFsIEVudGl0eTwvZW0+Jy4KLQkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKLQkgKiBAZ2VuZXJhdGVkCi0JICovCi0JcHVibGljIFQgY2FzZVZpcnR1YWxFbnRpdHkoVmlydHVhbEVudGl0eSBvYmplY3QpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWV0YSBWYWx1ZSBTcGVjaWZpY2F0aW9uPC9lbT4nLgotCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+Ci0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7Ci0JICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCi0JICogPCEtLSBlbmQtdXNlci1kb2MgLS0+Ci0JICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCi0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWV0YSBWYWx1ZSBTcGVjaWZpY2F0aW9uPC9lbT4nLgotCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQotCSAqIEBnZW5lcmF0ZWQKLQkgKi8KLQlwdWJsaWMgVCBjYXNlTWV0YVZhbHVlU3BlY2lmaWNhdGlvbihNZXRhVmFsdWVTcGVjaWZpY2F0aW9uIG9iamVjdCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKIAkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgogCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnRhcmdldHBsYXRmb3JtLnBob3Rvbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnRhcmdldHBsYXRmb3JtLnBob3Rvbi50YXJnZXQgYi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnRhcmdldHBsYXRmb3JtLnBob3Rvbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnRhcmdldHBsYXRmb3JtLnBob3Rvbi50YXJnZXQKaW5kZXggNzgwNWE2NC4uOTJiNDJkMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC50YXJnZXRwbGF0Zm9ybS5waG90b24vb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC50YXJnZXRwbGF0Zm9ybS5waG90b24udGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwudGFyZ2V0cGxhdGZvcm0ucGhvdG9uL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwudGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnRhcmdldApAQCAtODIsNSArODIsMTUgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnRvb2xzbWl0aHMuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgogICAgICAgPHJlcG9zaXRvcnkgaWQ9InBhcHlydXMtdG9vbHNtaXRoIiBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL3VwZGF0ZXMvcmVsZWFzZXMvMjAxOS0wMy8iLz4KICAgICA8L2xvY2F0aW9uPgorCQk8bG9jYXRpb24gaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlU291cmNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorCQk8dW5pdCBpZD0iY29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmUuamFja3Nvbi1hbm5vdGF0aW9ucyIgdmVyc2lvbj0iMC4wLjAiLz4KKwkJPHVuaXQgaWQ9ImNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLmphY2tzb24tY29yZSIgdmVyc2lvbj0iMC4wLjAiLz4KKwkJPHVuaXQgaWQ9ImNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLmphY2tzb24tZGF0YWJpbmQiIHZlcnNpb249IjAuMC4wIi8+CisJCTxyZXBvc2l0b3J5IGlkPSJvcmJpdCIgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIwMDIyNDE4MzIxMy9yZXBvc2l0b3J5LyIvPgorCTwvbG9jYXRpb24+CisJPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKwkJPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuZGVzaWduZXIubGFuZ3VhZ2VzLmNvbW1vbi5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+CisJCTxyZXBvc2l0b3J5IGlkPSJzd2Rlc2lnbmVyIiBsb2NhdGlvbj0iaHR0cHM6Ly9jaS5lY2xpcHNlLm9yZy9wYXB5cnVzL2pvYi9wYXB5cnVzLWRlc2lnbmVyLXBob3Rvbi9sYXN0U3VjY2Vzc2Z1bEJ1aWxkL2FydGlmYWN0L3JlbGVuZy9vcmcuZWNsaXBzZS5wYXB5cnVzLmRlc2lnbmVyLnAyL3RhcmdldC9yZXBvc2l0b3J5LyIvPgorCTwvbG9jYXRpb24+CiAgIDwvbG9jYXRpb25zPgogPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wMi9jYXRlZ29yeS54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wMi9jYXRlZ29yeS54bWwKaW5kZXggMDIxZThmNS4uNDA0YjJmYSAxMDA2NDQKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucDIvY2F0ZWdvcnkueG1sCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnAyL2NhdGVnb3J5LnhtbApAQCAtMSw5ICsxLDEyIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPHNpdGU+CiAgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuZmVhdHVyZV8xLjAuMC5xdWFsaWZpZXIuamFyIiBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5mZWF0dXJlIiB2ZXJzaW9uPSIxLjAuMC5xdWFsaWZpZXIiPgotICAgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlLnBhcHlydXMuY2F0ZWdvcnkiLz4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLmNhdGVnb3J5Ii8+CiAgICA8L2ZlYXR1cmU+Ci0gICA8Y2F0ZWdvcnktZGVmIG5hbWU9Im9yZy5lY2xpcHNlLnBhcHlydXMuY2F0ZWdvcnkiIGxhYmVsPSJQYXB5cnVzIElvVE1MIENhdGVnb3J5Ij4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZV8xLjAuMC5xdWFsaWZpZXIuamFyIiBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC53b3QudGQuZmVhdHVyZSIgdmVyc2lvbj0iMS4wLjAucXVhbGlmaWVyIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLmNhdGVnb3J5Ii8+CisgICA8L2ZlYXR1cmU+CisgICA8Y2F0ZWdvcnktZGVmIG5hbWU9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuY2F0ZWdvcnkiIGxhYmVsPSJQYXB5cnVzIElvVE1MIENhdGVnb3J5Ij4KICAgICAgIDxkZXNjcmlwdGlvbj4KICAgICAgICAgIFBhcHlydXMgSW9UTUwgQ2F0ZWdvcnkKICAgICAgIDwvZGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9kdWN0L2NhdGVnb3J5LnhtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2R1Y3QvY2F0ZWdvcnkueG1sCmluZGV4IDk3NDRiOGQuLjJhNTUwMWIgMTAwNjQ0Ci0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2R1Y3QvY2F0ZWdvcnkueG1sCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2R1Y3QvY2F0ZWdvcnkueG1sCkBAIC0xLDQgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxzaXRlPgogICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLmZlYXR1cmVfMS4wLjAucXVhbGlmaWVyLmphciIgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwuZmVhdHVyZSIgdmVyc2lvbj0iMS4wLjAucXVhbGlmaWVyIi8+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmVfMS4wLjAucXVhbGlmaWVyLmphciIgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwud290LnRkLmZlYXR1cmUiIHZlcnNpb249IjEuMC4wLnF1YWxpZmllciIvPgogPC9zaXRlPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZHVjdC9wYXB5cnVzSW90bWwucHJvZHVjdCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLnByb2R1Y3QvcGFweXJ1c0lvdG1sLnByb2R1Y3QKaW5kZXggZDRhM2QzMC4uNzBiODAwYiAxMDA2NDQKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnBhcHlydXMuaW90bWwucHJvZHVjdC9wYXB5cnVzSW90bWwucHJvZHVjdAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5wcm9kdWN0L3BhcHlydXNJb3RtbC5wcm9kdWN0CkBAIC0xOTMsNiArMTkzLDcgQEAKICAgICAgIDxmZWF0dXJlIGlkPSJvcmcuZWNsaXBzZS5yY3AiLz4KICAgICAgIDxmZWF0dXJlIGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLmZlYXR1cmUiIGluc3RhbGxNb2RlPSJyb290Ii8+CiAgICAgICA8ZmVhdHVyZSBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pb3RtbC5yY3AuZmVhdHVyZSIgaW5zdGFsbE1vZGU9InJvb3QiLz4KKwkgIDxmZWF0dXJlIGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmlvdG1sLndvdC50ZC5mZWF0dXJlIiBpbnN0YWxsTW9kZT0icm9vdCIvPgogICAgICAgPGZlYXR1cmUgaWQ9Im9yZy5lY2xpcHNlLmVtZi5jb21wYXJlIi8+CiAgICAgICA8ZmVhdHVyZSBpZD0ib3JnLmVjbGlwc2UuZW1mLmNvbXBhcmUuZGlhZ3JhbS5nbWYiLz4KICAgICAgIDxmZWF0dXJlIGlkPSJvcmcuZWNsaXBzZS5lbWYuY29tcGFyZS5lZ2l0Ii8+Cg==