ZGlmZiAtLWdpdCBhL21vcmZvbG9naWstYWRkb24vc3JjL21haW4vamF2YS9vcGVubmxwL21vcmZvbG9naWsvYnVpbGRlci9Nb3Jmb2xvZ2lrRGljdGlvbmF5QnVpbGRlci5qYXZhIGIvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9idWlsZGVyL01vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyLmphdmEKaW5kZXggMDEzMTMxOC4uZGJiY2E0ZCAxMDA2NDQKLS0tIGEvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9idWlsZGVyL01vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyLmphdmEKKysrIGIvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9idWlsZGVyL01vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyLmphdmEKQEAgLTE3LDIxICsxNywxNSBAQAogCiBwYWNrYWdlIG9wZW5ubHAubW9yZm9sb2dpay5idWlsZGVyOwogCi1pbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKIGltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKIAogaW1wb3J0IG1vcmZvbG9naWsuc3RlbW1pbmcuRGljdGlvbmFyeU1ldGFkYXRhOwogaW1wb3J0IG1vcmZvbG9naWsuc3RlbW1pbmcuRW5jb2RlclR5cGU7Ci1pbXBvcnQgbW9yZm9sb2dpay50b29scy5GU0FDb21waWxlOwotaW1wb3J0IG1vcmZvbG9naWsudG9vbHMuTGF1bmNoZXI7CitpbXBvcnQgbW9yZm9sb2dpay50b29scy5EaWN0Q29tcGlsZTsKIAogLyoqCiAgKiBVdGlsaXR5IGNsYXNzIHRvIGJ1aWxkIE1vcmZvbG9naWsgZGljdGlvbmFyaWVzIGZyb20gYSB0YWIgc2VwYXJhdGVkIHZhbHVlcwpAQCAtNDEsMTE3ICszNSw2OSBAQAogcHVibGljIGNsYXNzIE1vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyIHsKIAogICAvKioKLSAgICogQnVpbGQgYSBNb3Jmb2xvZ2lrIGJpbmFyeSBkaWN0aW9uYXJ5Ci0gICAqCi0gICAqIEBwYXJhbSBkaWN0SW5GaWxlCi0gICAqICAgICAgICAgIHRoZSAzIGNvbHVtbiBUU1YgZGljdGlvbmFyeSBmaWxlCi0gICAqIEBwYXJhbSBkaWN0T3V0RmlsZQotICAgKiAgICAgICAgICB3aGVyZSB0byBzdG9yZSB0aGUgYmluYXJ5IE1vcmZvbG9naWsgZGljdGlvbmFyeQotICAgKiBAcGFyYW0gZW5jb2RpbmcKLSAgICogICAgICAgICAgdGhlIGVuY29kaW5nIHRvIGJlIHVzZWQgd2hpbGUgcmVhZGluZyBhbmQgd3JpdGluZwotICAgKiBAcGFyYW0gc2VwYXJhdG9yCi0gICAqICAgICAgICAgIGEgZmllbGQgc2VwYXJhdG9yLCB0aGUgZGVmYXVsdCBpcyAnKycuIElmIHlvdXIgdGFncyBjb250YWlucyAnKycKLSAgICogICAgICAgICAgY2hhbmdlIHRvIHNvbWV0aGluZyBlbHNlCi0gICAqIEBwYXJhbSBlbmNvZGVyVHlwZQotICAgKiAgICAgICAgICB0aGUgTW9yZm9sb2dpayBlbmNvbmRlciB0eXBlCi0gICAqIEBwYXJhbSBpc1VzZUluZml4ZXMKLSAgICogICAgICAgICAgaWYgdG8gY29tcGFjdCB1c2luZyBpbmZpeGVzCisgICAqIEhlbHBlciB0byBjb21waWxlIGEgbW9ycGhvbG9naWNhbCBkaWN0aW9uYXJ5IGF1dG9tYXRvbi4KKyAgICogCisgICAqIEBwYXJhbSBpbnB1dAorICAgKiAgICAgICAgICBUaGUgaW5wdXQgZmlsZSAoYmFzZSxpbmZsZWN0ZWQsdGFnKS4gQW4gYXNzb2NpYXRlZCBtZXRhZGF0YQorICAgKiAgICAgICAgICAoKi5pbmZvKSBmaWxlIG11c3QgZXhpc3QuCisgICAqIEBwYXJhbSBvdmVyd3JpdGUKKyAgICogICAgICAgICAgT3ZlcndyaXRlIHRoZSBvdXRwdXQgZmlsZSBpZiBpdCBleGlzdHMuCisgICAqIEBwYXJhbSB2YWxpZGF0ZQorICAgKiAgICAgICAgICBWYWxpZGF0ZSBpbnB1dCB0byBtYWtlIHN1cmUgaXQgbWFrZXMgc2Vuc2UuCisgICAqIEBwYXJhbSBhY2NlcHRCb20KKyAgICogICAgICAgICAgQWNjZXB0IGxlYWRpbmcgQk9NIGJ5dGVzIChVVEYtOCkuCisgICAqIEBwYXJhbSBhY2NlcHRDcgorICAgKiAgICAgICAgICBBY2NlcHQgQ1IgYnl0ZXMgaW4gaW5wdXQgc2VxdWVuY2VzIChccikuCisgICAqIEBwYXJhbSBpZ25vcmVFbXB0eQorICAgKiAgICAgICAgICBJZ25vcmUgZW1wdHkgbGluZXMgaW4gdGhlIGlucHV0LgorICAgKiBAcmV0dXJuIHRoZSBkaWN0aW9uYXJ5IHBhdGgKKyAgICogCiAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAqLwotICBwdWJsaWMgdm9pZCBidWlsZChGaWxlIGRpY3RJbkZpbGUsIEZpbGUgZGljdE91dEZpbGUsIENoYXJzZXQgZW5jb2RpbmcsCi0gICAgICBTdHJpbmcgc2VwYXJhdG9yLCBFbmNvZGVyVHlwZSBlbmNvZGVyVHlwZSkKKyAgcHVibGljIFBhdGggYnVpbGQoUGF0aCBpbnB1dCwgYm9vbGVhbiBvdmVyd3JpdGUsIGJvb2xlYW4gdmFsaWRhdGUsCisgICAgICBib29sZWFuIGFjY2VwdEJvbSwgYm9vbGVhbiBhY2NlcHRDciwgYm9vbGVhbiBpZ25vcmVFbXB0eSkKICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgIFBhdGggcHJvcGVydGllc1BhdGggPSBEaWN0aW9uYXJ5TWV0YWRhdGEKLSAgICAgICAgLmdldEV4cGVjdGVkTWV0YWRhdGFMb2NhdGlvbihkaWN0T3V0RmlsZS50b1BhdGgoKSk7IAorCisgICAgRGljdENvbXBpbGUgY29tcGlsZXIgPSBuZXcgRGljdENvbXBpbGUoaW5wdXQsIG92ZXJ3cml0ZSwgdmFsaWRhdGUsCisgICAgICAgIGFjY2VwdEJvbSwgYWNjZXB0Q3IsIGlnbm9yZUVtcHR5KTsKKyAgICBjb21waWxlci5jYWxsKCk7CisKICAgICAKLSAgICB0aGlzLmJ1aWxkKGRpY3RJbkZpbGUsIGRpY3RPdXRGaWxlLCBwcm9wZXJ0aWVzUGF0aC50b0ZpbGUoKSwgZW5jb2RpbmcsIHNlcGFyYXRvciwKLSAgICAgICAgZW5jb2RlclR5cGUpOworICAgIFBhdGggbWV0YWRhdGFQYXRoID0gRGljdGlvbmFyeU1ldGFkYXRhCisgICAgICAgIC5nZXRFeHBlY3RlZE1ldGFkYXRhTG9jYXRpb24oaW5wdXQpOworICAgIAorICAgIHJldHVybiBtZXRhZGF0YVBhdGgucmVzb2x2ZVNpYmxpbmcoCisgICAgICAgIG1ldGFkYXRhUGF0aC5nZXRGaWxlTmFtZSgpLnRvU3RyaW5nKCkucmVwbGFjZUFsbCgKKyAgICAgICAgICAgICJcXC4iICsgRGljdGlvbmFyeU1ldGFkYXRhLk1FVEFEQVRBX0ZJTEVfRVhURU5TSU9OICsgIiQiLCAiLmRpY3QiKSk7CiAgIH0KIAogICAvKioKLSAgICogQnVpbGQgYSBNb3Jmb2xvZ2lrIGJpbmFyeSBkaWN0aW9uYXJ5Ci0gICAqCi0gICAqIEBwYXJhbSBkaWN0SW5GaWxlCi0gICAqICAgICAgICAgIHRoZSAzIGNvbHVtbiBUU1YgZGljdGlvbmFyeSBmaWxlCi0gICAqIEBwYXJhbSBkaWN0T3V0RmlsZQotICAgKiAgICAgICAgICB3aGVyZSB0byBzdG9yZSB0aGUgYmluYXJ5IE1vcmZvbG9naWsgZGljdGlvbmFyeQotICAgKiBAcGFyYW0gcHJvcGVydGllc091dEZpbGUKLSAgICogICAgICAgICAgd2hlcmUgdG8gc3RvcmUgdGhlIHByb3BlcnRpZXMgb2YgdGhlIE1vcmZvbG9naWsgZGljdGlvbmFyeQotICAgKiBAcGFyYW0gZW5jb2RpbmcKLSAgICogICAgICAgICAgdGhlIGVuY29kaW5nIHRvIGJlIHVzZWQgd2hpbGUgcmVhZGluZyBhbmQgd3JpdGluZwotICAgKiBAcGFyYW0gc2VwYXJhdG9yCi0gICAqICAgICAgICAgIGEgZmllbGQgc2VwYXJhdG9yLCB0aGUgZGVmYXVsdCBpcyAnKycuIElmIHlvdXIgdGFncyBjb250YWlucyAnKycKLSAgICogICAgICAgICAgY2hhbmdlIHRvIHNvbWV0aGluZyBlbHNlCi0gICAqIEBwYXJhbSBpc1VzZVByZWZpeGVzCi0gICAqICAgICAgICAgIGlmIHRvIGNvbXBhY3QgdXNpbmcgcHJlZml4ZXMKLSAgICogQHBhcmFtIGlzVXNlSW5maXhlcwotICAgKiAgICAgICAgICBpZiB0byBjb21wYWN0IHVzaW5nIGluZml4ZXMKKyAgICogSGVscGVyIHRvIGNvbXBpbGUgYSBtb3JwaG9sb2dpY2FsIGRpY3Rpb25hcnkgYXV0b21hdG9uIHVzaW5nIGRlZmF1bHQKKyAgICogcGFyYW1ldGVycy4KKyAgICogCisgICAqIEBwYXJhbSBpbnB1dAorICAgKiAgICAgICAgICBUaGUgaW5wdXQgZmlsZSAoYmFzZSxpbmZsZWN0ZWQsdGFnKS4gQW4gYXNzb2NpYXRlZCBtZXRhZGF0YQorICAgKiAgICAgICAgICAoKi5pbmZvKSBmaWxlIG11c3QgZXhpc3QuCisgICAqICAgICAgICAgIAorICAgKiAgQHJldHVybiB0aGUgZGljdGlvbmFyeSBwYXRoCisgICAqIAogICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgKi8KLSAgcHVibGljIHZvaWQgYnVpbGQoRmlsZSBkaWN0SW5GaWxlLCBGaWxlIGRpY3RPdXRGaWxlLCBGaWxlIHByb3BlcnRpZXNPdXRGaWxlLAotICAgICAgQ2hhcnNldCBlbmNvZGluZywgU3RyaW5nIHNlcGFyYXRvciwgRW5jb2RlclR5cGUgZW5jb2RlclR5cGUpIHRocm93cyBFeGNlcHRpb24geworICBwdWJsaWMgUGF0aCBidWlsZChQYXRoIGlucHV0KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgIC8vIHdlIG5lZWQgdG8gZXhlY3V0ZSB0YWIybW9ycGggZm9sbG93ZWQgYnkgZnNhX2J1aWxkCisgICAgcmV0dXJuIGJ1aWxkKGlucHV0LCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAotICAgIEZpbGUgbW9ycGggPSB0YWIybW9ycGgoZGljdEluRmlsZSwgc2VwYXJhdG9yLCBlbmNvZGVyVHlwZSk7Ci0KLSAgICBmc2FCdWlsZChtb3JwaCwgZGljdE91dEZpbGUpOwotCi0gICAgbW9ycGguZGVsZXRlKCk7Ci0KLSAgICAvLyBub3cgd2UgY3JlYXRlIHRoZSBwcm9wZXJ0aWVzIGZpbGVzIHVzaW5nIHRoZSBwYXNzZWQgcGFyYW1ldGVycwotICAgIGNyZWF0ZVByb3BlcnRpZXMoZW5jb2RpbmcsIHNlcGFyYXRvciwgZW5jb2RlclR5cGUsCi0gICAgICAgIHByb3BlcnRpZXNPdXRGaWxlKTsKICAgfQogCi0gIHZvaWQgY3JlYXRlUHJvcGVydGllcyhDaGFyc2V0IGVuY29kaW5nLCBTdHJpbmcgc2VwYXJhdG9yLAotCQkgIEVuY29kZXJUeXBlIGVuY29kZXJUeXBlLCBGaWxlIHByb3BlcnRpZXNGaWxlKQotICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICBQcm9wZXJ0aWVzIGNyZWF0ZVByb3BlcnRpZXMoQ2hhcnNldCBlbmNvZGluZywgU3RyaW5nIHNlcGFyYXRvciwKKyAgICAgIEVuY29kZXJUeXBlIGVuY29kZXJUeXBlKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOwogICAgIHByb3BlcnRpZXMuc2V0UHJvcGVydHkoImZzYS5kaWN0LnNlcGFyYXRvciIsIHNlcGFyYXRvcik7CiAgICAgcHJvcGVydGllcy5zZXRQcm9wZXJ0eSgiZnNhLmRpY3QuZW5jb2RpbmciLCBlbmNvZGluZy5uYW1lKCkpOwogICAgIHByb3BlcnRpZXMuc2V0UHJvcGVydHkoImZzYS5kaWN0LmVuY29kZXIiLCBlbmNvZGVyVHlwZS5uYW1lKCkpOwogCi0gICAgT3V0cHV0U3RyZWFtIG9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ocHJvcGVydGllc0ZpbGUpOwotICAgIHByb3BlcnRpZXMuc3RvcmUob3MsICJNb3Jmb2xvZ2lrIFBPUyBEaWN0aW9uYXJ5IHByb3BlcnRpZXMiKTsKLSAgICBvcy5jbG9zZSgpOworICAgIHJldHVybiBwcm9wZXJ0aWVzOwogCiAgIH0KLQotICBwcml2YXRlIHZvaWQgZnNhQnVpbGQoRmlsZSBtb3JwaCwgRmlsZSBkaWN0T3V0RmlsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nW10gcGFyYW1zID0geyAiLWYiLCAiY2ZzYTIiLCAiLWkiLCBtb3JwaC5nZXRBYnNvbHV0ZVBhdGgoKSwgIi1vIiwKLSAgICAgICAgZGljdE91dEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgfTsKLSAgICBGU0FDb21waWxlLm1haW4ocGFyYW1zKTsKLSAgICAvLyBGU0FCdWlsZFRvb2wubWFpbihwYXJhbXMpOwotICB9Ci0KLSAgcHJpdmF0ZSBGaWxlIHRhYjJtb3JwaChGaWxlIGRpY3RJbkZpbGUsIFN0cmluZyBzZXBhcmF0b3IsCi0gICAgICBFbmNvZGVyVHlwZSBlbmNvZGVyVHlwZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAvLyBjcmVhdGUgdGFiMm1vcnBoIHBhcmFtZXRlcnMKLSAgICBMaXN0PFN0cmluZz4gdGFnMm1vcnBoUGFyYW1zID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgdGFnMm1vcnBoUGFyYW1zLmFkZCgidGFiMm1vcnBoIik7Ci0KLSAgICB0YWcybW9ycGhQYXJhbXMuYWRkKCItLWFubm90YXRpb24iKTsKLSAgICB0YWcybW9ycGhQYXJhbXMuYWRkKHNlcGFyYXRvcik7Ci0gICAgCi0gICAgdGFnMm1vcnBoUGFyYW1zLmFkZCgiLS1lIik7Ci0gICAgdGFnMm1vcnBoUGFyYW1zLmFkZChlbmNvZGVyVHlwZS5uYW1lKCkpOwotCi0gICAgdGFnMm1vcnBoUGFyYW1zLmFkZCgiLWkiKTsKLSAgICB0YWcybW9ycGhQYXJhbXMuYWRkKGRpY3RJbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCi0gICAgLy8gd2UgbmVlZCBhIHRlbXBvcmFyeSBmaWxlIHRvIHN0b3JlIHRoZSBpbnRlcm1lZGlhdGUgb3V0cHV0Ci0gICAgRmlsZSB0bXAgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ0YWIybW9ycGgiLCAiLnR4dCIpOwotICAgIHRtcC5kZWxldGVPbkV4aXQoKTsKLQotICAgIHRhZzJtb3JwaFBhcmFtcy5hZGQoIi1vIik7Ci0gICAgdGFnMm1vcnBoUGFyYW1zLmFkZCh0bXAuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCi0gICAgTGF1bmNoZXIubWFpbih0YWcybW9ycGhQYXJhbXMudG9BcnJheShuZXcgU3RyaW5nW3RhZzJtb3JwaFBhcmFtcy5zaXplKCldKSk7Ci0KLSAgICByZXR1cm4gdG1wOwotICB9Ci0KIH0KZGlmZiAtLWdpdCBhL21vcmZvbG9naWstYWRkb24vc3JjL21haW4vamF2YS9vcGVubmxwL21vcmZvbG9naWsvY21kbGluZS9idWlsZGVyL01vcmZvbG9naWtEaWN0aW9uYXJ5QnVpbGRlclBhcmFtcy5qYXZhIGIvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9jbWRsaW5lL2J1aWxkZXIvTW9yZm9sb2dpa0RpY3Rpb25hcnlCdWlsZGVyUGFyYW1zLmphdmEKaW5kZXggMTkzNTk5Yi4uNWVhMmU0ZiAxMDA2NDQKLS0tIGEvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9jbWRsaW5lL2J1aWxkZXIvTW9yZm9sb2dpa0RpY3Rpb25hcnlCdWlsZGVyUGFyYW1zLmphdmEKKysrIGIvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9jbWRsaW5lL2J1aWxkZXIvTW9yZm9sb2dpa0RpY3Rpb25hcnlCdWlsZGVyUGFyYW1zLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIAotaW1wb3J0IG1vcmZvbG9naWsuc3RlbW1pbmcuRW5jb2RlclR5cGU7CiBpbXBvcnQgb3Blbm5scC50b29scy5jbWRsaW5lLkFyZ3VtZW50UGFyc2VyLk9wdGlvbmFsUGFyYW1ldGVyOwogaW1wb3J0IG9wZW5ubHAudG9vbHMuY21kbGluZS5Bcmd1bWVudFBhcnNlci5QYXJhbWV0ZXJEZXNjcmlwdGlvbjsKIGltcG9ydCBvcGVubmxwLnRvb2xzLmNtZGxpbmUucGFyYW1zLkVuY29kaW5nUGFyYW1ldGVyOwpAQCAtMjksMTggKzI4LDMwIEBACiAgKi8KIGludGVyZmFjZSBNb3Jmb2xvZ2lrRGljdGlvbmFyeUJ1aWxkZXJQYXJhbXMgZXh0ZW5kcyBFbmNvZGluZ1BhcmFtZXRlciB7CiAKLSAgQFBhcmFtZXRlckRlc2NyaXB0aW9uKHZhbHVlTmFtZSA9ICJpbiIsIGRlc2NyaXB0aW9uID0gIlBsYWluIGZpbGUgd2l0aCBvbmUgZW50cnkgcGVyIGxpbmUiKQorICBAUGFyYW1ldGVyRGVzY3JpcHRpb24odmFsdWVOYW1lID0gImluIiwgZGVzY3JpcHRpb24gPSAiVGhlIGlucHV0IGZpbGUgKGJhc2UsaW5mbGVjdGVkLHRhZykuIEFuIGFzc29jaWF0ZWQgbWV0YWRhdGEgKCouaW5mbykgZmlsZSBtdXN0IGV4aXN0LiIpCiAgIEZpbGUgZ2V0SW5wdXRGaWxlKCk7Ci0KLSAgQFBhcmFtZXRlckRlc2NyaXB0aW9uKHZhbHVlTmFtZSA9ICJvdXQiLCBkZXNjcmlwdGlvbiA9ICJUaGUgZ2VuZXJhdGVkIGRpY3Rpb25hcnkgZmlsZS4iKQotICBGaWxlIGdldE91dHB1dEZpbGUoKTsKLQotICBAUGFyYW1ldGVyRGVzY3JpcHRpb24odmFsdWVOYW1lID0gInNlcCIsIGRlc2NyaXB0aW9uID0gIlRoZSBGU0EgZGljdGlvbmFyeSBzZXBhcmF0b3IuIERlZmF1bHQgaXMgJysnLiIpCi0gIEBPcHRpb25hbFBhcmFtZXRlcihkZWZhdWx0VmFsdWUgPSAiKyIpCi0gIFN0cmluZyBnZXRGU0FEaWN0U2VwYXJhdG9yKCk7CiAgIAotICBAUGFyYW1ldGVyRGVzY3JpcHRpb24odmFsdWVOYW1lID0gInNlcCIsIGRlc2NyaXB0aW9uID0gIlRoZSB0eXBlIG9mIGxlbW1hLWluZmxlY3RlZCBmb3JtIGVuY29kaW5nIGNvbXByZXNzaW9uIHRoYXQgcHJlY2VkZXMgYXV0b21hdG9uIGNvbnN0cnVjdGlvbi4gQWxsb3dlZCB2YWx1ZXM6IFtzdWZmaXgsIGluZml4LCBwcmVmaXgsIG5vbmVdLiBEZXRhaWxzIGFyZSBpbiBEYWNpdWsncyBwYXBlciBhbmQgaW4gdGhlIGNvZGUuICIpCi0gIEBPcHRpb25hbFBhcmFtZXRlcihkZWZhdWx0VmFsdWUgPSAicHJlZml4IikKLSAgRW5jb2RlclR5cGUgZ2V0RW5jb2RlclR5cGUoKTsKLQorICBAUGFyYW1ldGVyRGVzY3JpcHRpb24odmFsdWVOYW1lID0gInRydWV8ZmFsc2UiLCBkZXNjcmlwdGlvbiA9ICJBY2NlcHQgbGVhZGluZyBCT00gYnl0ZXMgKFVURi04KS4iKQorICBAT3B0aW9uYWxQYXJhbWV0ZXIoZGVmYXVsdFZhbHVlPSJmYWxzZSIpCisgIEJvb2xlYW4gZ2V0QWNjZXB0Qk9NKCk7CisgIAorICBAUGFyYW1ldGVyRGVzY3JpcHRpb24odmFsdWVOYW1lID0gInRydWV8ZmFsc2UiLCBkZXNjcmlwdGlvbiA9ICJBY2NlcHQgQ1IgYnl0ZXMgaW4gaW5wdXQgc2VxdWVuY2VzIChccikuIikKKyAgQE9wdGlvbmFsUGFyYW1ldGVyKGRlZmF1bHRWYWx1ZT0iZmFsc2UiKQorICBCb29sZWFuIGdldEFjY2VwdENSKCk7CisgIAorICBAUGFyYW1ldGVyRGVzY3JpcHRpb24odmFsdWVOYW1lID0gIkZTQTV8Q0ZTQTIiLCBkZXNjcmlwdGlvbiA9ICJBdXRvbWF0b24gc2VyaWFsaXphdGlvbiBmb3JtYXQuIikKKyAgQE9wdGlvbmFsUGFyYW1ldGVyKGRlZmF1bHRWYWx1ZT0iRlNBNSIpCisgIFN0cmluZyBnZXRGb3JtYXQoKTsKKyAgCisgIEBQYXJhbWV0ZXJEZXNjcmlwdGlvbih2YWx1ZU5hbWUgPSAidHJ1ZXxmYWxzZSIsIGRlc2NyaXB0aW9uID0gIklnbm9yZSBlbXB0eSBsaW5lcyBpbiB0aGUgaW5wdXQuIikKKyAgQE9wdGlvbmFsUGFyYW1ldGVyKGRlZmF1bHRWYWx1ZT0iZmFsc2UiKQorICBCb29sZWFuIGdldElnbm9yZUVtcHR5KCk7CisgIAorICBAUGFyYW1ldGVyRGVzY3JpcHRpb24odmFsdWVOYW1lID0gInRydWV8ZmFsc2UiLCBkZXNjcmlwdGlvbiA9ICJPdmVyd3JpdGUgdGhlIG91dHB1dCBmaWxlIGlmIGl0IGV4aXN0cy4iKQorICBAT3B0aW9uYWxQYXJhbWV0ZXIoZGVmYXVsdFZhbHVlPSJmYWxzZSIpCisgIEJvb2xlYW4gZ2V0T3ZlcndyaXRlKCk7CisgIAorICBAUGFyYW1ldGVyRGVzY3JpcHRpb24odmFsdWVOYW1lID0gInRydWV8ZmFsc2UiLCBkZXNjcmlwdGlvbiA9ICJWYWxpZGF0ZSBpbnB1dCB0byBtYWtlIHN1cmUgaXQgbWFrZXMgc2Vuc2UuIikKKyAgQE9wdGlvbmFsUGFyYW1ldGVyKGRlZmF1bHRWYWx1ZT0iZmFsc2UiKQorICBCb29sZWFuIGdldFZhbGlkYXRlKCk7CiB9CmRpZmYgLS1naXQgYS9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy9tYWluL2phdmEvb3Blbm5scC9tb3Jmb2xvZ2lrL2NtZGxpbmUvYnVpbGRlci9Nb3Jmb2xvZ2lrRGljdGlvbmFyeUJ1aWxkZXJUb29sLmphdmEgYi9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy9tYWluL2phdmEvb3Blbm5scC9tb3Jmb2xvZ2lrL2NtZGxpbmUvYnVpbGRlci9Nb3Jmb2xvZ2lrRGljdGlvbmFyeUJ1aWxkZXJUb29sLmphdmEKaW5kZXggNzQxNTE1ZS4uZWI5YjUxYyAxMDA2NDQKLS0tIGEvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9jbWRsaW5lL2J1aWxkZXIvTW9yZm9sb2dpa0RpY3Rpb25hcnlCdWlsZGVyVG9vbC5qYXZhCisrKyBiL21vcmZvbG9naWstYWRkb24vc3JjL21haW4vamF2YS9vcGVubmxwL21vcmZvbG9naWsvY21kbGluZS9idWlsZGVyL01vcmZvbG9naWtEaWN0aW9uYXJ5QnVpbGRlclRvb2wuamF2YQpAQCAtMTcsMTEgKzE3LDEwIEBACiAKIHBhY2thZ2Ugb3Blbm5scC5tb3Jmb2xvZ2lrLmNtZGxpbmUuYnVpbGRlcjsKIAotaW1wb3J0IHN0YXRpYyBvcGVubmxwLm1vcmZvbG9naWsudXRpbC5Nb3Jmb2xvZ2lrVXRpbC5nZXRFeHBlY3RlZFByb3BlcnRpZXNGaWxlOwotCiBpbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CiAKK2ltcG9ydCBtb3Jmb2xvZ2lrLnN0ZW1taW5nLkRpY3Rpb25hcnlNZXRhZGF0YTsKIGltcG9ydCBvcGVubmxwLm1vcmZvbG9naWsuYnVpbGRlci5Nb3Jmb2xvZ2lrRGljdGlvbmF5QnVpbGRlcjsKIGltcG9ydCBvcGVubmxwLnRvb2xzLmNtZGxpbmUuQmFzaWNDbWRMaW5lVG9vbDsKIGltcG9ydCBvcGVubmxwLnRvb2xzLmNtZGxpbmUuQ21kTGluZVV0aWw7CkBAIC00NCwxOCArNDMsMTYgQEAKICAgICBQYXJhbXMgcGFyYW1zID0gdmFsaWRhdGVBbmRQYXJzZVBhcmFtcyhhcmdzLCBQYXJhbXMuY2xhc3MpOwogCiAgICAgRmlsZSBkaWN0SW5GaWxlID0gcGFyYW1zLmdldElucHV0RmlsZSgpOwotICAgIEZpbGUgZGljdE91dEZpbGUgPSBwYXJhbXMuZ2V0T3V0cHV0RmlsZSgpOwotICAgIEZpbGUgcHJvcGVydGllc0ZpbGUgPSBnZXRFeHBlY3RlZFByb3BlcnRpZXNGaWxlKGRpY3RPdXRGaWxlKTsKLSAgICBDaGFyc2V0IGVuY29kaW5nID0gcGFyYW1zLmdldEVuY29kaW5nKCk7CiAKICAgICBDbWRMaW5lVXRpbC5jaGVja0lucHV0RmlsZSgiZGljdGlvbmFyeSBpbnB1dCBmaWxlIiwgZGljdEluRmlsZSk7Ci0gICAgQ21kTGluZVV0aWwuY2hlY2tPdXRwdXRGaWxlKCJkaWN0aW9uYXJ5IG91dHB1dCBmaWxlIiwgZGljdE91dEZpbGUpOwotICAgIENtZExpbmVVdGlsLmNoZWNrT3V0cHV0RmlsZSgicHJvcGVydGllcyBvdXRwdXQgZmlsZSIsIHByb3BlcnRpZXNGaWxlKTsKKyAgICBQYXRoIG1ldGFkYXRhUGF0aCA9IERpY3Rpb25hcnlNZXRhZGF0YS5nZXRFeHBlY3RlZE1ldGFkYXRhTG9jYXRpb24oZGljdEluRmlsZS50b1BhdGgoKSk7CisgICAgQ21kTGluZVV0aWwuY2hlY2tJbnB1dEZpbGUoImRpY3Rpb25hcnkgbWV0YWRhdGEgKC5pbmZvKSBpbnB1dCBmaWxlIiwgbWV0YWRhdGFQYXRoLnRvRmlsZSgpKTsKIAogICAgIE1vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgTW9yZm9sb2dpa0RpY3Rpb25heUJ1aWxkZXIoKTsKICAgICB0cnkgewotICAgICAgYnVpbGRlci5idWlsZChkaWN0SW5GaWxlLCBkaWN0T3V0RmlsZSwgcHJvcGVydGllc0ZpbGUsIGVuY29kaW5nLAotICAgICAgICAgIHBhcmFtcy5nZXRGU0FEaWN0U2VwYXJhdG9yKCksIHBhcmFtcy5nZXRFbmNvZGVyVHlwZSgpKTsKKyAgICAgIGJ1aWxkZXIuYnVpbGQoZGljdEluRmlsZS50b1BhdGgoKSwgcGFyYW1zLmdldE92ZXJ3cml0ZSgpLAorICAgICAgICAgIHBhcmFtcy5nZXRWYWxpZGF0ZSgpLCBwYXJhbXMuZ2V0QWNjZXB0Qk9NKCksIHBhcmFtcy5nZXRBY2NlcHRDUigpLAorICAgICAgICAgIHBhcmFtcy5nZXRJZ25vcmVFbXB0eSgpKTsKICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgdGhyb3cgbmV3IFRlcm1pbmF0ZVRvb2xFeGNlcHRpb24oLTEsCiAgICAgICAgICAgIkVycm9yIHdoaWxlIGNyZWF0aW5nIE1vcmZvbG9naWsgUE9TIERpY3Rpb25heTogIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKZGlmZiAtLWdpdCBhL21vcmZvbG9naWstYWRkb24vc3JjL21haW4vamF2YS9vcGVubmxwL21vcmZvbG9naWsvbGVtbWF0aXplci9Nb3Jmb2xvZ2lrTGVtbWF0aXplci5qYXZhIGIvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9sZW1tYXRpemVyL01vcmZvbG9naWtMZW1tYXRpemVyLmphdmEKaW5kZXggOTk2OTRhNS4uMjA5MGNlNSAxMDA2NDQKLS0tIGEvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9sZW1tYXRpemVyL01vcmZvbG9naWtMZW1tYXRpemVyLmphdmEKKysrIGIvbW9yZm9sb2dpay1hZGRvbi9zcmMvbWFpbi9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9sZW1tYXRpemVyL01vcmZvbG9naWtMZW1tYXRpemVyLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIHBhY2thZ2Ugb3Blbm5scC5tb3Jmb2xvZ2lrLmxlbW1hdGl6ZXI7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwpAQCAtMjYsMTEgKzI2LDExIEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAotaW1wb3J0IG9wZW5ubHAudG9vbHMubGVtbWF0aXplci5EaWN0aW9uYXJ5TGVtbWF0aXplcjsKIGltcG9ydCBtb3Jmb2xvZ2lrLnN0ZW1taW5nLkRpY3Rpb25hcnk7CiBpbXBvcnQgbW9yZm9sb2dpay5zdGVtbWluZy5EaWN0aW9uYXJ5TG9va3VwOwogaW1wb3J0IG1vcmZvbG9naWsuc3RlbW1pbmcuSVN0ZW1tZXI7CiBpbXBvcnQgbW9yZm9sb2dpay5zdGVtbWluZy5Xb3JkRGF0YTsKK2ltcG9ydCBvcGVubmxwLnRvb2xzLmxlbW1hdGl6ZXIuRGljdGlvbmFyeUxlbW1hdGl6ZXI7CiAKIHB1YmxpYyBjbGFzcyBNb3Jmb2xvZ2lrTGVtbWF0aXplciBpbXBsZW1lbnRzIERpY3Rpb25hcnlMZW1tYXRpemVyIHsKIApAQCAtMzgsOSArMzgsOSBAQAogICBwdWJsaWMgZmluYWwgU2V0PFN0cmluZz4gY29uc3RhbnRUYWdzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPihBcnJheXMuYXNMaXN0KAogICAgICAgIk5OUCIsICJOUDAwMDAwIikpOwogCi0gIHB1YmxpYyBNb3Jmb2xvZ2lrTGVtbWF0aXplcihVUkwgZGljdFVSTCkgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiwKKyAgcHVibGljIE1vcmZvbG9naWtMZW1tYXRpemVyKFBhdGggZGljdGlvbmFyeVBhdGgpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24sCiAgICAgICBJT0V4Y2VwdGlvbiB7Ci0gICAgZGljdExvb2t1cCA9IG5ldyBEaWN0aW9uYXJ5TG9va3VwKERpY3Rpb25hcnkucmVhZChkaWN0VVJMKSk7CisgICAgZGljdExvb2t1cCA9IG5ldyBEaWN0aW9uYXJ5TG9va3VwKERpY3Rpb25hcnkucmVhZChkaWN0aW9uYXJ5UGF0aCkpOwogICB9CiAKICAgcHJpdmF0ZSBIYXNoTWFwPExpc3Q8U3RyaW5nPiwgU3RyaW5nPiBnZXRMZW1tYVRhZ3NEaWN0KFN0cmluZyB3b3JkKSB7CmRpZmYgLS1naXQgYS9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy9tYWluL2phdmEvb3Blbm5scC9tb3Jmb2xvZ2lrL3RhZ2RpY3QvTW9yZm9sb2dpa1BPU1RhZ2dlckZhY3RvcnkuamF2YSBiL21vcmZvbG9naWstYWRkb24vc3JjL21haW4vamF2YS9vcGVubmxwL21vcmZvbG9naWsvdGFnZGljdC9Nb3Jmb2xvZ2lrUE9TVGFnZ2VyRmFjdG9yeS5qYXZhCmluZGV4IGYwMjJhODYuLjcyM2IxY2UgMTAwNjQ0Ci0tLSBhL21vcmZvbG9naWstYWRkb24vc3JjL21haW4vamF2YS9vcGVubmxwL21vcmZvbG9naWsvdGFnZGljdC9Nb3Jmb2xvZ2lrUE9TVGFnZ2VyRmFjdG9yeS5qYXZhCisrKyBiL21vcmZvbG9naWstYWRkb24vc3JjL21haW4vamF2YS9vcGVubmxwL21vcmZvbG9naWsvdGFnZGljdC9Nb3Jmb2xvZ2lrUE9TVGFnZ2VyRmFjdG9yeS5qYXZhCkBAIC01NCw5ICs1NCwyMSBAQAogICBwdWJsaWMgTW9yZm9sb2dpa1BPU1RhZ2dlckZhY3RvcnkoKSB7CiAgIH0KIAorICAvKioKKyAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUE9TVGFnZ2VyRmFjdG9yeX0gdGhhdCB1c2VzIHRoZSBhIE1vcmZvbG9naWsgYmFzZWQge0BsaW5rIFRhZ0RpY3Rpb25hcnl9LgorICAgKiAKKyAgICogQHBhcmFtIG5ncmFtRGljdGlvbmFyeSBhIG5ncmFtRGljdGlvbmFyeSAKKyAgICogQHBhcmFtIG1vcmZvbG9naWtEaWN0aW9uYXJ5IGEgTW9yZm9sb2dpayBkaWN0aW9uYXJ5CisgICAqIEBwYXJhbSBtb3Jmb2xvZ2lrRGljdGlvbmFyeU1ldGFkYXRhIHRoZSBkaWN0aW9uYXJ5IG1ldGFkYXRhCisgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaW52YWxpZCBNb3Jmb2xvZ2lrIGRpY3Rpb25hcnkKKyAgICovCiAgIHB1YmxpYyBNb3Jmb2xvZ2lrUE9TVGFnZ2VyRmFjdG9yeShEaWN0aW9uYXJ5IG5ncmFtRGljdGlvbmFyeSwKLSAgICAgIFRhZ0RpY3Rpb25hcnkgcG9zRGljdGlvbmFyeSkgeworICAgICAgYnl0ZVtdIG1vcmZvbG9naWtEaWN0aW9uYXJ5LCBieXRlW10gbW9yZm9sb2dpa0RpY3Rpb25hcnlNZXRhZGF0YSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICBzdXBlcihuZ3JhbURpY3Rpb25hcnksIG51bGwpOworICAgIHRoaXMuZGljdERhdGEgPSBtb3Jmb2xvZ2lrRGljdGlvbmFyeTsKKyAgICB0aGlzLmRpY3RJbmZvID0gbW9yZm9sb2dpa0RpY3Rpb25hcnlNZXRhZGF0YTsKKyAgICAKKyAgICB0aGlzLmRpY3QgPSBjcmVhdGVNb3Jmb2xvZ2lrRGljdGlvbmFyeShkaWN0RGF0YSwgZGljdEluZm8pOwogICB9CiAKICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy90ZXN0L2phdmEvb3Blbm5scC9tb3Jmb2xvZ2lrL2J1aWxkZXIvUE9TRGljdGlvbmF5QnVpbGRlclRlc3QuamF2YSBiL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvamF2YS9vcGVubmxwL21vcmZvbG9naWsvYnVpbGRlci9QT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5qYXZhCmluZGV4IDczMDAyNWMuLjBhN2JhNDggMTAwNjQ0Ci0tLSBhL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvamF2YS9vcGVubmxwL21vcmZvbG9naWsvYnVpbGRlci9QT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5qYXZhCisrKyBiL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvamF2YS9vcGVubmxwL21vcmZvbG9naWsvYnVpbGRlci9QT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5qYXZhCkBAIC0xOCwxNCArMTgsMTIgQEAKIHBhY2thZ2Ugb3Blbm5scC5tb3Jmb2xvZ2lrLmJ1aWxkZXI7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlN0YW5kYXJkQ29weU9wdGlvbjsKIAogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBtb3Jmb2xvZ2lrLnN0ZW1taW5nLkVuY29kZXJUeXBlOworaW1wb3J0IG1vcmZvbG9naWsuc3RlbW1pbmcuRGljdGlvbmFyeU1ldGFkYXRhOwogaW1wb3J0IG9wZW5ubHAubW9yZm9sb2dpay5sZW1tYXRpemVyLk1vcmZvbG9naWtMZW1tYXRpemVyOwogCiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CkBAIC0zNCw1NiArMzIsMjcgQEAKIAogICBAVGVzdAogICBwdWJsaWMgdm9pZCB0ZXN0QnVpbGREaWN0aW9uYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgTW9yZm9sb2dpa0RpY3Rpb25heUJ1aWxkZXIgYnVpbGRlciA9IG5ldyBNb3Jmb2xvZ2lrRGljdGlvbmF5QnVpbGRlcigpOwotICAgIEZpbGUgZGljdEluRmlsZSA9IG5ldyBGaWxlKFBPU0RpY3Rpb25heUJ1aWxkZXJUZXN0LmNsYXNzLmdldFJlc291cmNlKAotICAgICAgICAiL2RpY3Rpb25hcnlXaXRoTGVtbWEudHh0IikuZ2V0RmlsZSgpKTsKKyAgICAKKyAgICBQYXRoIG91dHB1dCA9IGNyZWF0ZU1vcmZvbG9naWtEaWN0aW9uYXJ5KCk7CiAKLSAgICBGaWxlIGRpY3RPdXRGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgKLSAgICAgICAgUE9TRGljdGlvbmF5QnVpbGRlclRlc3QuY2xhc3MuZ2V0TmFtZSgpLCAiLmRpY3QiKTsKLQotICAgIGJ1aWxkZXIuYnVpbGQoZGljdEluRmlsZSwgZGljdE91dEZpbGUsIENoYXJzZXQuZm9yTmFtZSgiVVRGLTgiKSwgIisiLCBFbmNvZGVyVHlwZS5QUkVGSVgpOwotCi0gICAgTW9yZm9sb2dpa0xlbW1hdGl6ZXIgbWwgPSBuZXcgTW9yZm9sb2dpa0xlbW1hdGl6ZXIoZGljdE91dEZpbGUudG9VUkkoKQotICAgICAgICAudG9VUkwoKSk7CisgICAgTW9yZm9sb2dpa0xlbW1hdGl6ZXIgbWwgPSBuZXcgTW9yZm9sb2dpa0xlbW1hdGl6ZXIob3V0cHV0KTsKIAogICAgIGFzc2VydE5vdE51bGwobWwpOwogICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFByb3BlcnRpZXNDcmVhdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgQ2hhcnNldCBjID0gQ2hhcnNldC5mb3JOYW1lKCJpc28tODg1OS0xIik7Ci0gICAgU3RyaW5nIHNlcCA9ICJfIjsKKyAgCisgIHB1YmxpYyBzdGF0aWMgUGF0aCBjcmVhdGVNb3Jmb2xvZ2lrRGljdGlvbmFyeSgpIHRocm93cyBFeGNlcHRpb24geworICAgIFBhdGggdGFiRmlsZVBhdGggPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKAorICAgICAgICBQT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5jbGFzcy5nZXROYW1lKCksICIudHh0IikudG9QYXRoKCk7CisgICAgUGF0aCBpbmZvRmlsZVBhdGggPSBEaWN0aW9uYXJ5TWV0YWRhdGEuZ2V0RXhwZWN0ZWRNZXRhZGF0YUxvY2F0aW9uKHRhYkZpbGVQYXRoKTsKICAgICAKLSAgICBFbmNvZGVyVHlwZSBlbmNvZGVyVHlwZSA9IEVuY29kZXJUeXBlLlBSRUZJWDsKLSAgICBQcm9wZXJ0aWVzIHAgPSBjcmVhdGVQcm9wZXJ0aWVzSGVscGVyKGMsIHNlcCwgZW5jb2RlclR5cGUpOwotCi0gICAgYXNzZXJ0RXF1YWxzKGMubmFtZSgpLCBwLmdldFByb3BlcnR5KCJmc2EuZGljdC5lbmNvZGluZyIpKTsKLSAgICBhc3NlcnRFcXVhbHMoc2VwLCBwLmdldFByb3BlcnR5KCJmc2EuZGljdC5zZXBhcmF0b3IiKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVuY29kZXJUeXBlLAotICAgICAgICBFbmNvZGVyVHlwZS52YWx1ZU9mKHAuZ2V0UHJvcGVydHkoImZzYS5kaWN0LmVuY29kZXIiKSkpOworICAgIEZpbGVzLmNvcHkoUE9TRGljdGlvbmF5QnVpbGRlclRlc3QuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbSgKKyAgICAgICAgIi9kaWN0aW9uYXJ5V2l0aExlbW1hLnR4dCIpLCB0YWJGaWxlUGF0aCwgU3RhbmRhcmRDb3B5T3B0aW9uLlJFUExBQ0VfRVhJU1RJTkcpOworICAgIEZpbGVzLmNvcHkoUE9TRGljdGlvbmF5QnVpbGRlclRlc3QuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbSgKKyAgICAgICAgIi9kaWN0aW9uYXJ5V2l0aExlbW1hLmluZm8iKSwgaW5mb0ZpbGVQYXRoLCBTdGFuZGFyZENvcHlPcHRpb24uUkVQTEFDRV9FWElTVElORyk7CiAgICAgCi0gICAgZW5jb2RlclR5cGUgPSBFbmNvZGVyVHlwZS5TVUZGSVg7Ci0gICAgcCA9IGNyZWF0ZVByb3BlcnRpZXNIZWxwZXIoYywgc2VwLCBlbmNvZGVyVHlwZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVuY29kZXJUeXBlLAotICAgICAgICBFbmNvZGVyVHlwZS52YWx1ZU9mKHAuZ2V0UHJvcGVydHkoImZzYS5kaWN0LmVuY29kZXIiKSkpOwotCi0gIH0KLQotICBwcml2YXRlIFByb3BlcnRpZXMgY3JlYXRlUHJvcGVydGllc0hlbHBlcihDaGFyc2V0IGMsIFN0cmluZyBzZXAsCi0gICAgICBFbmNvZGVyVHlwZSBlbmNvZGVyVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICBNb3Jmb2xvZ2lrRGljdGlvbmF5QnVpbGRlciBidWlsZGVyID0gbmV3IE1vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyKCk7Ci0gICAgRmlsZSBmID0gRmlsZS5jcmVhdGVUZW1wRmlsZShQT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5jbGFzcy5nZXROYW1lKCksCi0gICAgICAgICIuaW5mbyIpOwotICAgIGJ1aWxkZXIuY3JlYXRlUHJvcGVydGllcyhjLCBzZXAsIGVuY29kZXJUeXBlLCBmKTsKLQotICAgIElucHV0U3RyZWFtIGlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmKTsKLQotICAgIFByb3BlcnRpZXMgcHJvcCA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgcHJvcC5sb2FkKGlzKTsKLSAgICBpcy5jbG9zZSgpOwotICAgIGYuZGVsZXRlKCk7Ci0gICAgcmV0dXJuIHByb3A7CisgICAgCisgICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQodGFiRmlsZVBhdGgpOwogICB9CiAKIH0KZGlmZiAtLWdpdCBhL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvamF2YS9vcGVubmxwL21vcmZvbG9naWsvbGVtbWF0aXplci9Nb3Jmb2xvZ2lrTGVtbWF0aXplclRlc3QuamF2YSBiL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvamF2YS9vcGVubmxwL21vcmZvbG9naWsvbGVtbWF0aXplci9Nb3Jmb2xvZ2lrTGVtbWF0aXplclRlc3QuamF2YQppbmRleCA4N2ZjMmNjLi42Yjc1MjVlIDEwMDY0NAotLS0gYS9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy90ZXN0L2phdmEvb3Blbm5scC9tb3Jmb2xvZ2lrL2xlbW1hdGl6ZXIvTW9yZm9sb2dpa0xlbW1hdGl6ZXJUZXN0LmphdmEKKysrIGIvbW9yZm9sb2dpay1hZGRvbi9zcmMvdGVzdC9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay9sZW1tYXRpemVyL01vcmZvbG9naWtMZW1tYXRpemVyVGVzdC5qYXZhCkBAIC0yLDExICsyLDggQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIAotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOwogCi1pbXBvcnQgbW9yZm9sb2dpay5zdGVtbWluZy5FbmNvZGVyVHlwZTsKLWltcG9ydCBvcGVubmxwLm1vcmZvbG9naWsuYnVpbGRlci5Nb3Jmb2xvZ2lrRGljdGlvbmF5QnVpbGRlcjsKIGltcG9ydCBvcGVubmxwLm1vcmZvbG9naWsuYnVpbGRlci5QT1NEaWN0aW9uYXlCdWlsZGVyVGVzdDsKIGltcG9ydCBvcGVubmxwLnRvb2xzLmxlbW1hdGl6ZXIuRGljdGlvbmFyeUxlbW1hdGl6ZXI7CiAKQEAgLTI4LDE3ICsyNSw5IEBACiAgIHByaXZhdGUgTW9yZm9sb2dpa0xlbW1hdGl6ZXIgY3JlYXRlRGljdGlvbmFyeShib29sZWFuIGNhc2VTZW5zaXRpdmUpCiAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgIE1vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgTW9yZm9sb2dpa0RpY3Rpb25heUJ1aWxkZXIoKTsKLSAgICBGaWxlIGRpY3RJbkZpbGUgPSBuZXcgRmlsZShQT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5jbGFzcy5nZXRSZXNvdXJjZSgKLSAgICAgICAgIi9kaWN0aW9uYXJ5V2l0aExlbW1hLnR4dCIpLmdldEZpbGUoKSk7CisgICAgUGF0aCBvdXRwdXQgPSBQT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5jcmVhdGVNb3Jmb2xvZ2lrRGljdGlvbmFyeSgpOwogCi0gICAgRmlsZSBkaWN0T3V0RmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoCi0gICAgICAgIFBPU0RpY3Rpb25heUJ1aWxkZXJUZXN0LmNsYXNzLmdldE5hbWUoKSwgIi5kaWN0Iik7Ci0KLSAgICBidWlsZGVyLmJ1aWxkKGRpY3RJbkZpbGUsIGRpY3RPdXRGaWxlLCBDaGFyc2V0LmZvck5hbWUoIlVURi04IiksICIrIiwgRW5jb2RlclR5cGUuUFJFRklYKTsKLQotICAgIE1vcmZvbG9naWtMZW1tYXRpemVyIG1sID0gbmV3IE1vcmZvbG9naWtMZW1tYXRpemVyKGRpY3RPdXRGaWxlLnRvVVJJKCkKLSAgICAgICAgLnRvVVJMKCkpOworICAgIE1vcmZvbG9naWtMZW1tYXRpemVyIG1sID0gbmV3IE1vcmZvbG9naWtMZW1tYXRpemVyKG91dHB1dCk7CiAKICAgICByZXR1cm4gbWw7CiAgIH0KZGlmZiAtLWdpdCBhL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvamF2YS9vcGVubmxwL21vcmZvbG9naWsvdGFnZGljdC9Nb3Jmb2xvZ2lrVGFnRGljdGlvbmFyeVRlc3QuamF2YSBiL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvamF2YS9vcGVubmxwL21vcmZvbG9naWsvdGFnZGljdC9Nb3Jmb2xvZ2lrVGFnRGljdGlvbmFyeVRlc3QuamF2YQppbmRleCBkNjA1ZTE1Li5jNmM5ZTA0IDEwMDY0NAotLS0gYS9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy90ZXN0L2phdmEvb3Blbm5scC9tb3Jmb2xvZ2lrL3RhZ2RpY3QvTW9yZm9sb2dpa1RhZ0RpY3Rpb25hcnlUZXN0LmphdmEKKysrIGIvbW9yZm9sb2dpay1hZGRvbi9zcmMvdGVzdC9qYXZhL29wZW5ubHAvbW9yZm9sb2dpay90YWdkaWN0L01vcmZvbG9naWtUYWdEaWN0aW9uYXJ5VGVzdC5qYXZhCkBAIC0zLDE2ICszLDExIEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIGltcG9ydCBtb3Jmb2xvZ2lrLnN0ZW1taW5nLkRpY3Rpb25hcnk7Ci1pbXBvcnQgbW9yZm9sb2dpay5zdGVtbWluZy5FbmNvZGVyVHlwZTsKLWltcG9ydCBvcGVubmxwLm1vcmZvbG9naWsuYnVpbGRlci5Nb3Jmb2xvZ2lrRGljdGlvbmF5QnVpbGRlcjsKIGltcG9ydCBvcGVubmxwLm1vcmZvbG9naWsuYnVpbGRlci5QT1NEaWN0aW9uYXlCdWlsZGVyVGVzdDsKLWltcG9ydCBvcGVubmxwLm1vcmZvbG9naWsudGFnZGljdC5Nb3Jmb2xvZ2lrVGFnRGljdGlvbmFyeTsKIGltcG9ydCBvcGVubmxwLnRvb2xzLnBvc3RhZy5UYWdEaWN0aW9uYXJ5OwogCiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CkBAIC03NCwxNyArNjksOCBAQAogICBwcml2YXRlIE1vcmZvbG9naWtUYWdEaWN0aW9uYXJ5IGNyZWF0ZURpY3Rpb25hcnkoYm9vbGVhbiBjYXNlU2Vuc2l0aXZlLAogICAgICAgTGlzdDxTdHJpbmc+IGNvbnN0YW50KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgIE1vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgTW9yZm9sb2dpa0RpY3Rpb25heUJ1aWxkZXIoKTsKLSAgICBGaWxlIGRpY3RJbkZpbGUgPSBuZXcgRmlsZShQT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5jbGFzcy5nZXRSZXNvdXJjZSgKLSAgICAgICAgIi9kaWN0aW9uYXJ5V2l0aExlbW1hLnR4dCIpLmdldEZpbGUoKSk7Ci0KLSAgICBGaWxlIGRpY3RPdXRGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgKLSAgICAgICAgUE9TRGljdGlvbmF5QnVpbGRlclRlc3QuY2xhc3MuZ2V0TmFtZSgpLCAiLmRpY3QiKTsKLQotICAgIGJ1aWxkZXIuYnVpbGQoZGljdEluRmlsZSwgZGljdE91dEZpbGUsIENoYXJzZXQuZm9yTmFtZSgiVVRGLTgiKSwgIisiLCBFbmNvZGVyVHlwZS5QUkVGSVgpOwotCi0gICAgTW9yZm9sb2dpa1RhZ0RpY3Rpb25hcnkgbWwgPSBuZXcgTW9yZm9sb2dpa1RhZ0RpY3Rpb25hcnkoCi0gICAgICAgIERpY3Rpb25hcnkucmVhZChkaWN0T3V0RmlsZS50b1VSSSgpLnRvVVJMKCkpLCBjYXNlU2Vuc2l0aXZlKTsKKyAgICBEaWN0aW9uYXJ5IGRpYyA9IERpY3Rpb25hcnkucmVhZChQT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5jcmVhdGVNb3Jmb2xvZ2lrRGljdGlvbmFyeSgpKTsKKyAgICBNb3Jmb2xvZ2lrVGFnRGljdGlvbmFyeSBtbCA9IG5ldyBNb3Jmb2xvZ2lrVGFnRGljdGlvbmFyeShkaWMsIGNhc2VTZW5zaXRpdmUpOwogCiAgICAgcmV0dXJuIG1sOwogICB9CmRpZmYgLS1naXQgYS9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy90ZXN0L2phdmEvb3Blbm5scC9tb3Jmb2xvZ2lrL3RhZ2RpY3QvUE9TVGFnZ2VyRmFjdG9yeVRlc3QuamF2YSBiL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvamF2YS9vcGVubmxwL21vcmZvbG9naWsvdGFnZGljdC9QT1NUYWdnZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNjgxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy90ZXN0L2phdmEvb3Blbm5scC9tb3Jmb2xvZ2lrL3RhZ2RpY3QvUE9TVGFnZ2VyRmFjdG9yeVRlc3QuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorLy8vKgorLy8gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKy8vICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisvLyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKy8vICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKy8vICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKy8vICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8gKgorLy8gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLyAqCisvLyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyAqLworLy8KKy8vcGFja2FnZSBvcGVubmxwLm1vcmZvbG9naWsudGFnZGljdDsKKy8vCisvL2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworLy8KKy8vaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CisvL2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKKy8vaW1wb3J0IGphdmEuaW8uRmlsZTsKKy8vaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisvL2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworLy9pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKKy8vaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKKy8vaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CisvL2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CisvL2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOworLy8KKy8vaW1wb3J0IG1vcmZvbG9naWsuc3RlbW1pbmcuRGljdGlvbmFyeU1ldGFkYXRhOworLy9pbXBvcnQgbW9yZm9sb2dpay5zdGVtbWluZy5FbmNvZGVyVHlwZTsKKy8vaW1wb3J0IG9wZW5ubHAubW9yZm9sb2dpay5idWlsZGVyLk1vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyOworLy9pbXBvcnQgb3Blbm5scC5tb3Jmb2xvZ2lrLmJ1aWxkZXIuUE9TRGljdGlvbmF5QnVpbGRlclRlc3Q7CisvL2ltcG9ydCBvcGVubmxwLnRvb2xzLmRpY3Rpb25hcnkuRGljdGlvbmFyeTsKKy8vaW1wb3J0IG9wZW5ubHAudG9vbHMucG9zdGFnLkRlZmF1bHRQT1NTZXF1ZW5jZVZhbGlkYXRvcjsKKy8vaW1wb3J0IG9wZW5ubHAudG9vbHMucG9zdGFnLlBPU0NvbnRleHRHZW5lcmF0b3I7CisvL2ltcG9ydCBvcGVubmxwLnRvb2xzLnBvc3RhZy5QT1NEaWN0aW9uYXJ5OworLy9pbXBvcnQgb3Blbm5scC50b29scy5wb3N0YWcuUE9TTW9kZWw7CisvL2ltcG9ydCBvcGVubmxwLnRvb2xzLnBvc3RhZy5QT1NTYW1wbGU7CisvL2ltcG9ydCBvcGVubmxwLnRvb2xzLnBvc3RhZy5QT1NUYWdnZXJGYWN0b3J5OworLy9pbXBvcnQgb3Blbm5scC50b29scy5wb3N0YWcuUE9TVGFnZ2VyTUU7CisvL2ltcG9ydCBvcGVubmxwLnRvb2xzLnBvc3RhZy5Xb3JkVGFnU2FtcGxlU3RyZWFtOworLy9pbXBvcnQgb3Blbm5scC50b29scy51dGlsLkJhc2VUb29sRmFjdG9yeTsKKy8vaW1wb3J0IG9wZW5ubHAudG9vbHMudXRpbC5JbnZhbGlkRm9ybWF0RXhjZXB0aW9uOworLy9pbXBvcnQgb3Blbm5scC50b29scy51dGlsLk9iamVjdFN0cmVhbTsKKy8vaW1wb3J0IG9wZW5ubHAudG9vbHMudXRpbC5UcmFpbmluZ1BhcmFtZXRlcnM7CisvL2ltcG9ydCBvcGVubmxwLnRvb2xzLnV0aWwubW9kZWwuTW9kZWxUeXBlOworLy8KKy8vaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworLy8KKy8vLyoqCisvLyAqIFRlc3RzIGZvciB0aGUge0BsaW5rIFBPU1RhZ2dlckZhY3Rvcnl9IGNsYXNzLgorLy8gKi8KKy8vcHVibGljIGNsYXNzIFBPU1RhZ2dlckZhY3RvcnlUZXN0IHsKKy8vCisvLyAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0U3RyZWFtPFBPU1NhbXBsZT4gY3JlYXRlU2FtcGxlU3RyZWFtKCkKKy8vICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKy8vICAgIElucHV0U3RyZWFtIGluID0gUE9TVGFnZ2VyRmFjdG9yeVRlc3QuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKQorLy8gICAgICAgIC5nZXRSZXNvdXJjZUFzU3RyZWFtKCJBbm5vdGF0ZWRTZW50ZW5jZXMudHh0Iik7CisvLworLy8gICAgcmV0dXJuIG5ldyBXb3JkVGFnU2FtcGxlU3RyZWFtKChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW4pKSk7CisvLyAgfQorLy8KKy8vICBzdGF0aWMgUE9TTW9kZWwgdHJhaW5QT1NNb2RlbChNb2RlbFR5cGUgdHlwZSwgUE9TVGFnZ2VyRmFjdG9yeSBmYWN0b3J5KQorLy8gICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworLy8gICAgcmV0dXJuIFBPU1RhZ2dlck1FLnRyYWluKCJlbiIsIGNyZWF0ZVNhbXBsZVN0cmVhbSgpLAorLy8gICAgICAgIFRyYWluaW5nUGFyYW1ldGVycy5kZWZhdWx0UGFyYW1zKCksIGZhY3RvcnkpOworLy8gIH0KKy8vCisvLyAgQFRlc3QKKy8vICBwdWJsaWMgdm9pZCB0ZXN0UE9TVGFnZ2VyV2l0aEN1c3RvbUZhY3RvcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKy8vCisvLyAgICBNb3Jmb2xvZ2lrRGljdGlvbmF5QnVpbGRlciBidWlsZGVyID0gbmV3IE1vcmZvbG9naWtEaWN0aW9uYXlCdWlsZGVyKCk7CisvLyAgICBGaWxlIGRpY3RJbkZpbGUgPSBuZXcgRmlsZShQT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5jbGFzcy5nZXRSZXNvdXJjZSgKKy8vICAgICAgICAiL2RpY3Rpb25hcnlXaXRoTGVtbWEudHh0IikuZ2V0RmlsZSgpKTsKKy8vCisvLyAgICBGaWxlIGRpY3RPdXRGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgKKy8vICAgICAgICBQT1NEaWN0aW9uYXlCdWlsZGVyVGVzdC5jbGFzcy5nZXROYW1lKCksICIuZGljdCIpOworLy8KKy8vICAgIGJ1aWxkZXIuYnVpbGQoZGljdEluRmlsZSwgZGljdE91dEZpbGUsIENoYXJzZXQuZm9yTmFtZSgiVVRGLTgiKSwgIisiLAorLy8gICAgICAgIEVuY29kZXJUeXBlLlBSRUZJWCk7CisvLworLy8gICAgUGF0aCBkaWN0UGF0aCA9IGRpY3RPdXRGaWxlLnRvUGF0aCgpOworLy8gICAgUGF0aCBtZXRhUGF0aCA9IERpY3Rpb25hcnlNZXRhZGF0YS5nZXRFeHBlY3RlZE1ldGFkYXRhTG9jYXRpb24oZGljdFBhdGgpOworLy8KKy8vICAgIGJ5dGVbXSBkaWMgPSBGaWxlcy5yZWFkQWxsQnl0ZXMoZGljdFBhdGgpOworLy8gICAgYnl0ZVtdIG1ldGEgPSBGaWxlcy5yZWFkQWxsQnl0ZXMobWV0YVBhdGgpOworLy8KKy8vICAgIFBPU01vZGVsIHBvc01vZGVsID0gdHJhaW5QT1NNb2RlbChNb2RlbFR5cGUuTUFYRU5ULAorLy8gICAgICAgIG5ldyBNb3Jmb2xvZ2lrUE9TVGFnZ2VyRmFjdG9yeShudWxsLCBkaWMsIG1ldGEpKTsKKy8vCisvLyAgICBQT1NUYWdnZXJGYWN0b3J5IGZhY3RvcnkgPSBwb3NNb2RlbC5nZXRGYWN0b3J5KCk7CisvLyAgICBhc3NlcnRUcnVlKGZhY3RvcnkuZ2V0VGFnRGljdGlvbmFyeSgpIGluc3RhbmNlb2YgTW9yZm9sb2dpa1BPU1RhZ2dlckZhY3RvcnkpOworLy8KKy8vICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisvLyAgICBwb3NNb2RlbC5zZXJpYWxpemUob3V0KTsKKy8vICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGluID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dC50b0J5dGVBcnJheSgpKTsKKy8vCisvLyAgICBQT1NNb2RlbCBmcm9tU2VyaWFsaXplZCA9IG5ldyBQT1NNb2RlbChpbik7CisvLworLy8gICAgZmFjdG9yeSA9IGZyb21TZXJpYWxpemVkLmdldEZhY3RvcnkoKTsKKy8vICAgIGFzc2VydFRydWUoZmFjdG9yeS5nZXRUYWdEaWN0aW9uYXJ5KCkgaW5zdGFuY2VvZiBNb3Jmb2xvZ2lrUE9TVGFnZ2VyRmFjdG9yeSk7CisvLyAgfQorLy8KKy8vfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvcmVzb3VyY2VzL0Fubm90YXRlZFNlbnRlbmNlcy50eHQgYi9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy90ZXN0L3Jlc291cmNlcy9Bbm5vdGF0ZWRTZW50ZW5jZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MGJlODcKLS0tIC9kZXYvbnVsbAorKysgYi9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy90ZXN0L3Jlc291cmNlcy9Bbm5vdGF0ZWRTZW50ZW5jZXMudHh0CkBAIC0wLDAgKzEsMTM2IEBACitMYXN0X0pKIFNlcHRlbWJlcl9OTlAgLF8sIElfUFJQIHRyaWVkX1ZCRCB0b19UTyBmaW5kX1ZCIG91dF9SUCB0aGVfRFQgYWRkcmVzc19OTiBvZl9JTiBhbl9EVCBvbGRfSkogc2Nob29sX05OIGZyaWVuZF9OTiB3aG9tX1dQIElfUFJQIGhhZF9WQkQgbm90X1JCIHNlZW5fVkJOIGZvcl9JTiAxNV9DRCB5ZWFyc19OTlMgLl8uCitJX1BSUCBqdXN0X1JCIGtuZXdfVkJEIGhpc19QUlAkIG5hbWVfTk4gLF8sIEFsYW5fTk5QIE1jS2VubmVkeV9OTlAgLF8sIGFuZF9DQyBJX1BSUCAnZF9NRCBoZWFyZF9WQkQgdGhlX0RUIHJ1bW91cl9OTiB0aGF0X0lOIGhlX1BSUCAnZF9NRCBtb3ZlZF9WQkQgdG9fVE8gU2NvdGxhbmRfTk5QICxfLCB0aGVfRFQgY291bnRyeV9OTiBvZl9JTiBoaXNfUFJQJCBhbmNlc3RvcnNfTk5TIC5fLgorU29fSU4gSV9QUlAgY2FsbGVkX1ZCRCBKdWxpZV9OTlAgLF8sIGFfRFQgZnJpZW5kX05OIHdobydzX1dEVCBzdGlsbF9SQiBpbl9JTiBjb250YWN0X05OIHdpdGhfSU4gaGltX1BSUCAuXy4KK1NoZV9QUlAgdG9sZF9WQkQgbWVfUFJQIHRoYXRfSU4gaGVfUFJQIGxpdmVkX1ZCRCBpbl9JTiAyMzIxM19DRCBFZGluYnVyZ2hfTk5QICxfLCBXb3JjZXN0ZXJzdHJlZXRfTk5QIDEyX0NEIC5fLgorSV9QUlAgd3JvdGVfVkJEIGhpbV9QUlAgYV9EVCBsZXR0ZXJfTk4gcmlnaHRfUkIgYXdheV9SQiBhbmRfQ0MgaGVfUFJQIGFuc3dlcmVkX1ZCRCBzb29uX1JCICxfLCBzb3VuZGluZ19WQkcgdmVyeV9SQiBoYXBweV9KSiBhbmRfQ0MgZGVsaWdodGVkX0pKIC5fLgorCitMYXN0X0pKIHllYXJfTk4gLF8sIElfUFJQIHdhbnRlZF9WQkQgdG9fVE8gd3JpdGVfVkIgYV9EVCBsZXR0ZXJfTk4gdG9fVE8gbXlfUFJQJCBncmFuZGF1bnRfTk4gLl8uCitIZXJfUFJQJCA4Nl9DRCB0aF9OTiBiaXJ0aGRheV9OTiB3YXNfVkJEIG9uX0lOIE9jdG9iZXJfTk5QIDZfQ0QgLF8sIGFuZF9DQyBJX1BSUCBub19SQiBsb25nZXJfUkIgd2FudGVkX1ZCRCB0b19UTyBiZV9WQiBoZXNpdGFudF9KSiB0b19UTyBnZXRfVkIgaW5fSU4gdG91Y2hfTk4gd2l0aF9JTiBoZXJfUFJQIC5fLgorSV9QUlAgZGlkX1ZCRCBub3RfUkIga25vd19WQiBoZXJfUFJQIGZhY2UtdG8tZmFjZV9SQiAsXywgYW5kX0NDIHNvX1JCIGl0X1BSUCB3YXNfVkJEIG5vdF9SQiBlYXN5X0pKIGZvcl9JTiBtZV9QUlAgdG9fVE8gZmluZF9WQiBvdXRfUlAgaGVyX1BSUCQgYWRkcmVzc19OTiAuXy4KK0FzX0lOIHNoZV9QUlAgaGFkX1ZCRCB0d29fQ0QgYXBhcnRtZW50c19OTlMgaW5fSU4gZGlmZmVyZW50X0pKIGNvdW50cmllc19OTlMgLF8sIElfUFJQIGRlY2lkZWRfVkJEIHRvX1RPIHdyaXRlX1ZCIHRvX1RPIGJvdGhfRFQgLl8uCitUaGVfRFQgZmlyc3RfSkogd2FzX1ZCRCBpbl9JTiAxMjQyNF9DRCBQYXJpc19OTlAgaW5fSU4gUnVlLWRlLUdyYW5kZXMtSWxsdXNpb25zX05OUCA1X0NEIC5fLgorQnV0X0NDIE1hcmllX05OUCBDbGFyYV9OTlAgLF8sIGFzX0lOIG15X1BSUCQgYXVudF9OTiBpc19WQlogY2FsbGVkX1ZCTiAsXywgcHJlZmVyZWRfVkJOIGhlcl9QUlAkIGFwYXJ0bWVudF9OTiBpbl9JTiBCZXJsaW5fTk5QIC5fLgorSXRfUFJQICdzX1ZCWiBwb3N0Y29kZV9KSiBpc19WQlogMzAyMDJfQ0QgLl8uCitTaGVfUFJQIGxpdmVkX1ZCRCB0aGVyZV9SQiAsXywgaW5fSU4gYmVhdXRpZnVsX0pKIEthaXNlcnN0cmGnZV9OTlAgMTNfQ0QgLF8sIHBhcnRpY3VsYXJ5X05OIGluX0lOIHN1bW1lcl9OTiAuXy4KKworSGlfVUggbXlfUFJQJCBuYW1lX05OIGlzX1ZCWiBTdGVmYW5pZV9OTlAgU2NobWlkdF9OTlAgLF8sIGhvd19XUkIgbXVjaF9SQiBpc19WQlogYV9EVCB0YXhpX05OIGZyb21fSU4gT3N0YmFobmhvZl9OTlAgdG9fVE8gSGF1cHRiYWhuaG9mX05OUCA/Xy4KK0Fib3V0X0lOIDEwX0NEIEV1cm9fTk5QICxfLCBJX1BSUCByZWNrb25fVkJQIC5fLgorVGhhdF9EVCBzb3VuZHNfVkJaIGdvb2RfSkogLl8uCitTb19SQiBwbGVhc2VfVkIgY2FsbF9WQiBhX0RUIGRyaXZlcl9OTiB0b19UTyBMZW9uYXJkc3RyYadlX05OUCAxMTJfQ0QgLF8sIG5lYXJfSU4gdGhlX0RUIE9zdGJhaG5ob2ZfTk5QIGluX0lOIDU2NDczX0NEIEhhbWJ1cmdfTk5QIC5fLgorSV9QUlAgJ2RfTUQgbGlrZV9WQiB0b19UTyBiZV9WQiBhdF9JTiBTaWxiZXJob3Juc3RyYadlX05OUCAxMl9DRCBhc19SQiBzb29uX1JCIGFzX0lOIHBvc3NpYmxlX0pKIC5fLgorVGhhbmtfVkIgeW91X1BSUCB2ZXJ5X1JCIG11Y2hfUkIgIV8uCisKK0hpX05OUCBNaWtlX05OUCAsXywgaXRfUFJQICdzX1ZCWiBTdGVmYW5pZV9OTlAgU2NobWlkdF9OTlAgLl8uCitJX1BSUCAnbV9WQlAgaW5fSU4gTp9ybmJlcmdfTk5QIGF0X0lOIHRoZV9EVCBtb21lbnRfTk4gYW5kX0NDIElfUFJQICd2ZV9WQlAgZ290X1ZCRCB0aGVfRFQgcHJvYmxlbV9OTiB0aGF0X0lOIG15X1BSUCQgYmlrZV9OTiBoYXNfVkJaIGJyb2tlbl9WQk4gLl8uCitDb3VsZF9NRCB5b3VfUFJQIHBsZWFzZV9WQiBwaWNrX1ZCIG1lX1BSUCB1cF9SUCBmcm9tX0lOIFNlaWRsc3RyYadlX05OUCA1Nl9DRCAsXywgSV9QUlAgJ21fVkJQIGluX0lOIHRoZV9EVCBDYWaOX05OUCAiTW9uZG5hY2h0Il9OTlAgYXRfSU4gdGhlX0RUIG1vbWVudF9OTiAuXy4KK1BsZWFzZV9WQiBodXJyeV9WQiB1cF9SQiAsXywgSV9QUlAgbmVlZF9WQlAgdG9fVE8gYmVfVkIgYmFja19SQiBpbl9JTiBVbG1fTk5QIGF0X0lOIDhfQ0QgcC5tLl9OTiAhXy4KKworTXlfUFJQJCBodXNiYW5kX05OIEdlb3JnZV9OTlAgYW5kX0NDIG1lX1BSUCByZWNlbnRseV9SQiBjZWxlYnJhdGVkX1ZCRCBvdXJfUFJQJCAxMF9DRCB0aF9KSiB3ZWRkaW5nX05OIGFubml2ZXJzYXJ5X05OIC5fLgorV2VfUFJQIGdvdF9WQkQgbWFycmllZF9WQk4gb25fSU4gTWFyY2hfTk5QIDExX0NEICxfLCAxOTk1X0NEIC5fLgorVGhlcmVmb3JlX1JCICxfLCB3ZV9QUlAgZm91bmRfVkJEIGFfRFQgcGhvdG9fTk4gYWxidW1fTk4gd2l0aF9JTiBwaWN0dXJlc19OTlMgb2ZfSU4gb3VyX1BSUCQgZmlyc3RfSkogb3duX0pKIGFwYXJ0bWVudF9OTiAsXywgd2hpY2hfV0RUIHdhc19WQkQgaW5fSU4gODEyMzRfQ0QgTXVuaWNoX05OUCAuXy4KK0FzX0lOIGFfRFQgeW91bmdfSkogbWFycmllZF9KSiBjb3VwbGVfTk4gLF8sIHdlX1BSUCBkaWRfVkJEIG5vdF9SQiBoYXZlX1ZCIGVub3VnaF9KSiBtb25leV9OTiB0b19UTyBhZmZvcmRfVkIgYV9EVCBiaWdnZXJfSkpSIGxvZGdlX05OIHRoYW5fSU4gdGhpc19EVCBvbmVfQ0QgaW5fSU4gQmx1bWVud2VnX05OUCAxX0NEIC5fLgorQnV0X0NDIG9ubHlfUkIgZml2ZV9DRCB5ZWFyc19OTlMgbGF0ZXJfUkIgLF8sIG15X1BSUCQgaHVzYmFuZF9OTiB3YXNfVkJEIG9mZmVyZWRfVkJOIGFfRFQgd2VsbC1wYXllZF9KSiBqb2JfTk4gaW5fSU4gMTc4MThfQ0QgSGFtYnVyZ19OTlAgLF8sIHNvX0lOIHdlX1BSUCBtb3ZlZF9WQkQgdGhlcmVfUkIgLl8uCitTaW5jZV9JTiB0aGVuX1JCICxfLCBvdXJfUFJQJCBndWVzdHNfTk5TIGhhdmVfVkJQIHRvX1RPIHJpbmdfVkIgYXRfSU4gVmVpbGNoZW5zdHJhp2VfTk5QIDExX0NEIGlmX0lOIHRoZXlfUFJQIHdhbnRfVkJQIHRvX1RPIHZpc2l0X1ZCIHVzX1BSUCAsXywgTHVpc2VfTk5QIGFuZF9DQyBHZW9yZ2VfTk5QIEJhdWVyX05OUCAuXy4KKworSV9QUlAgcmVhZF9WQkQgeW91cl9QUlAkIGhlbHAtd2FudGVkX0pKIGFkX05OIHdpdGhfSU4gZ3JlYXRfSkogYXR0ZW50aW9uX05OIC5fLgorSV9QUlAgJ21fVkJQIGFfRFQgc3R1ZGVudF9OTiBvZl9JTiBpbmZvcm1hdGljc19OTlMgLF8sIDZ0aF9KSiBzZW1lc3RlcixfTk4gYW5kX0NDIElfUFJQICdtX1ZCUCB2ZXJ5X1JCIGludGVyZXN0ZWRfVkJOIGluX0lOIHlvdXJfUFJQJCBwYXJ0LXRpbWVfSkogam9iX05OIG9mZmVyX05OIC5fLgorSV9QUlAgaGF2ZV9WQlAgYV9EVCBjb21wZXRlbnRfSkoga25vd2xlZGdlX05OIG9mX0lOIHByb2dyYW1taW5nX05OIGFuZF9DQyBmb3JlaWduX0pKIGxhbmd1YWdlc19OTlMgLF8sIGxpa2VfSU4gRnJlbmNoX0pKIGFuZF9DQyBJdGFsaWFuX0pKIC5fLgorSV9QUlAgJ21fVkJQIGxvb2tpbmdfVkJHIGZvcndhcmRfUkIgdG9fVE8geW91cl9QUlAkIHJlcGx5X05OIC5fLgorCitBbGlzYV9OTlAgRmVybmFuZGVzX05OUCAsXywgYV9EVCB0b3VyaXN0X05OIGZyb21fSU4gU3BhaW5fTk5QICxfLCB3ZW50X1ZCRCB0b19UTyB0aGVfRFQgcmVjZXB0aW9uX05OIGRlc2tfTk4gb2ZfSU4gdGhlX0RUIGZhbW91c19KSiBIaWdoZmx5LUhvdGVsX05OUCBpbl9JTiAzMDMwM19DRCBCZXJsaW5fTk5QIC5fLgorQXNfSU4gc2hlX1BSUCBmZWx0X1ZCRCBxdWl0ZV9SQiBob21lc2lja19KSiAsXywgc2hlX1BSUCBhc2tlZF9WQkQgdGhlX0RUIHN0YWZmX05OIGlmX0lOIHRoZXlfUFJQIGtuZXdfVkJEIGFfRFQgZ29vZF9KSiBTcGFuaXNoX0pKIHJlc3RhdXJhbnRfTk4gaW5fSU4gQmVybGluX05OUCAuXy4KK1RoZV9EVCBjb25jaWVyZ2VfTk4gdG9sZF9WQkQgaGVyX1BSUCB0b19UTyBnb19WQiB0b19UTyB0aGVfRFQgIlRhcGFzYmFyIl9OTiBpbl9JTiBDaGVzdGVyc3RyLl9OTlAgMl9DRCAuXy4KK0FsaXNhX05OUCBhcHByZWNpYXRlZF9WQkQgdGhlX0RUIGhpbnRfTk4gYW5kX0NDIGVuam95ZWRfVkJEIGFfRFQgZGVsaWNpb3VzX0pKIHRyYWRpdGlvbmFsX0pKIG1lYWxfTk4gLl8uCisKK0FuX0RUIG9sZF9KSiBmcmllbmRfTk4gZnJvbV9JTiBGcmFuY2VfTk5QIGlzX1ZCWiBjdXJyZW50bHlfUkIgdHJhdmVsbGluZ19WQkcgYXJvdW5kX0lOIEV1cm9wZV9OTlAgLl8uCitZZXN0ZXJkYXlfTk4gLF8sIHNoZV9QUlAgYXJyaXZlZF9WQkQgaW5fSU4gQmVybGluX05OUCBhbmRfQ0Mgd2VfUFJQIG1ldF9WQkQgdXBfUlAgc3BvbnRhbmVvdXNseV9SQiAuXy4KK1NoZV9QUlAgd2FudGVkX1ZCRCBtZV9QUlAgdG9fVE8gc2hvd19WQiBoZXJfUFJQIHNvbWVfRFQgZmFtb3VzX0pKIHNpZ2h0c19OTlMgLF8sIGxpa2VfSU4gdGhlX0RUIEJyYW5kZW5idXJnZXJfTk5QIFRvcl9OTlAgYW5kX0NDIHRoZV9EVCBSZWljaHN0YWdfTk5QIC5fLgorQnV0X0NDIGl0X1BSUCB3YXNfVkJEIG5vdF9SQiBlYXN5X0pKIHRvX1RPIG1lZXRfVkIgdXBfUlAgaW5fSU4gdGhlX0RUIGNpdHlfTk4gYmVjYXVzZV9JTiBzaGVfUFJQIGhhcmRseV9SQiBrbm93c19WQlogYW55X0RUIHN0cmVldG5hbWVfTk4gb3JfQ0MgYnVpbGRpbmdfTk4gLl8uCitTb19JTiBJX1BSUCBwcm9wb3NlZF9WQkQgdG9fVE8gbWVldF9WQiBhdF9JTiBhX0RUIHF1aXRlX1JCIGxvY2FsX0pKIHBvaW50Ol9OTiB0aGVfRFQgY2Fmjl9OTiAiRGFpbHkncyJfTk4gaW5fSU4gVW50ZXItZGVuLUxpbmRlbl9OTlAgMTgsX0NEIDMwMjkxX0NEIEJlcmxpbl9OTlAgLl8uCitJdF9QUlAgaXNfVkJaIGZpdmVfQ0QgbWludXRlc19OTlMgYXdheV9SQiBmcm9tX0lOIHRoZV9EVCB1bmRlcmdyb3VuZF9KSiBzdGF0aW9uX05OICJXZXN0YmFkIl9OTiAuXy4KK1NoZV9QUlAgZm91bmRfVkJEIGl0X1BSUCBpbnN0YW50bHlfUkIgYW5kX0NDIHdlX1BSUCBzcGVudF9WQkQgYV9EVCBncmVhdF9KSiBkYXlfTk4gaW5fSU4gdGhlX0RUIGNhcGl0YWxfTk4gLl8uCisKK1doZXJlX1dSQiBkaWRfVkJEIHlvdV9QUlAgZ2V0X1ZCIHRob3NlX0RUIGdyZWF0X0pKIHNob2VzX05OUyA/Xy4KK1RoZXlfUFJQIGxvb2tfVkJQIGFtYXppbmdfSkogLF8sIElfUFJQIGxvdmVfVkJQIHRoZV9EVCBjb2xvdXJfTk4gLl8uCitBcmVfVkJQIHRoZXlfUFJQIG1hZGVfVkJOIG9mX0lOIGxlYXRoZXJfTk4gP18uCitObyxfTk5QIHRoYXRfRFQgJ3NfVkJaIGZha2VkX1ZCTiAuXy4KK0J1dF9DQyBhbnl3YXlfUkIgLF8sIElfUFJQIGxpa2VfVkJQIHRoZW1fUFJQIHRvb19SQiAuXy4KK0lfUFJQIGdvdF9WQkQgdGhlbV9QUlAgZnJvbV9JTiBIYW1idXJnLl9OTlAKK0RvX1ZCUCBub3RfUkIgeW91X1BSUCBrbm93X1ZCIHRoZV9EVCBmYW1vdXNfSkogc2hvcF9OTiBpbl9JTiBWZWlsY2hlbnN0cmGnZV9OTlAgP18uCitJdF9QUlAgJ3NfVkJaIGNhbGxlZF9WQk4gIlR3ZW50eXR3byJfTk5QIC5fLgorSV9QUlAgJ3ZlX1ZCUCBuZXZlcl9SQiBoZWFyZF9WQk4gb2ZfSU4gdGhhdF9EVCBiZWZvcmVfUkIgLl8uCitDb3VsZF9NRCB5b3VfUFJQIGdpdmVfVkIgbWVfUFJQIHRoZV9EVCBjb21wbGV0ZV9KSiBhZGRyZXNzX05OID9fLgorU3VyZV9KSiAsXywgaXRfUFJQICdzX1ZCWiBpbl9JTiBWZWlsY2hlbnN0cmGnZV9OTlAgMTJfQ0QgLF8sIGluX0lOIDc4MTgxX0NEIEhhbWJ1cmdfTk5QIC5fLgorSV9QUlAgZGVlbV9WQlAgaXRfUFJQIGJlc3RfUkIgdG9fVE8gd3JpdGVfVkIgYV9EVCBsZXR0ZXJfTk4gdG9fVE8gdGhlX0RUIG93bmVyX05OIGlmX0lOIHRoZV9EVCBzaG9lc19OTlMgYXJlX1ZCUCBzdGlsbF9SQiBhdmFpbGFibGVfSkogLl8uCitIaXNfUFJQJCBuYW1lX05OIGlzX1ZCWiBHZXJoYXJkX05OUCBGcml0c2NoX05OUCAuXy4KKworSGlfVUggLF8sIGFtX1ZCUCBJX1BSUCB0YWxraW5nX1ZCRyB0b19UTyB0aGVfRFQgaW5xdWlyaWVzX05OUyA/Xy4KK015X1BSUCQgbmFtZV9OTiBpc19WQlogTWlrZV9OTlAgU2FuZGVyX05OUCBhbmRfQ0MgSV9QUlAgJ2RfTUQgbGlrZV9WQiB0b19UTyBrbm93X1ZCIGlmX0lOIGl0X1BSUCBpc19WQlogcG9zc2libGVfSkogdG9fVE8gZ2V0X1ZCIGluZm9ybWF0aW9uX05OIGFib3V0X0lOIGFuX0RUIGFkZHJlc3NfTk4gaWZfSU4gSV9QUlAgbWVyZWx5X1JCIGtub3dfVkJQIHRoZV9EVCBuYW1lX05OIGFuZF9DQyB0aGVfRFQgcGhvbmVfTk4gbnVtYmVyX05OIG9mX0lOIGFfRFQgcGVyc29uX05OICFfLgorSG93X1dSQiBpc19WQlogaGVfUFJQIG9yX0NDIHNoZV9QUlAgY2FsbGVkX1ZCRCA/Xy4KK0hpc19QUlAkIG5hbWVfTk4gaXNfVkJaIFN0ZWZhbl9OTlAgTWlsbGVyX05OUCBhbmRfQ0MgaGlzX1BSUCQgbnVtYmVyX05OIGlzX1ZCWiB0aGVfRFQgMDMwLzgyNzIzNF9DRCAuXy4KK0knbGxfTk5QIGhhdmVfVkJQIGFfRFQgbG9va19OTiBpbl9JTiB0aGVfRFQgY29tcHV0ZXIuLi5fTk4KK0lfUFJQIGZvdW5kX1ZCRCBhX0RUIFN0ZWZhbl9OTlAgTWlsbGVyX05OUCB3aG9fV1AgbGl2ZXNfVkJaIGluX0lOIExlaXB6aWcuX05OUAorSXNfVkJaIHRoYXRfRFQgcmlnaHRfTk4gP18uCitZZXNfVUggLF8sIGl0X1BSUCBkZWZpbml0ZWx5X1JCIGlzX1ZCWiAuXy4KK1NvX1JCIFN0ZWZhbl9OTlAgTWlsbGVyX05OUCBsaXZlc19WQlogaW5fSU4gSGVpbnJpY2gtSGVpbmUtU3RyYadlX05OUCAxMTJfQ0QgLF8sIGluX0lOIDIwMTkzX0NEIExlaXB6aWdfTk5QIC5fLgorVGhhbmtfVkIgeW91X1BSUCB2ZXJ5X1JCIG11Y2hfUkIgZm9yX0lOIHRoZV9EVCBpbmZvcm1hdGlvbl9OTiAuXy4KK0J5ZV9OTlAgIV8uCisKK09uX0lOIEp1bHlfTk5QIDE0X0NEICxfLCB0aGVfRFQgZmF0aGVyX05OIG9mX0lOIGFfRFQgZmFtaWx5X05OIGdvdF9WQkQgcGFpbmZ1bGx5X1JCIGluanVyZWRfVkJOIGFmdGVyX0lOIGhlX1BSUCBoYWRfVkJEIHRyaWVkX1ZCTiB0b19UTyBzdGFydF9WQiBhX0RUIGJhcmJlY3VlX05OIC5fLgorVGhlX0RUIGZsYXJpbmdfVkJHIGZsYW1lc19OTlMgYnVybnRfVkJQIGluc3RhbnRseV9SQiB0aHJvdWdoX0lOIGhpc19QUlAkIGphY2tldF9OTiAsXywgd2hpY2hfV0RUIGhlX1BSUCBtYW5hZ2VkX1ZCRCB0b19UTyBwdWxsX1ZCIG9mZl9SUCBsYXN0LW1pbnV0ZV9KSiAuXy4KK0FsdGhvdWdoX0lOIHRoZV9EVCB3b3VuZHNfTk5TIHdlcmVfVkJEIG4ndF9SQiBsaWZlLXRocmVhdGVuaW5nX0pKICxfLCBpdF9QUlAgd2FzX1ZCRCB1cmdlbnRfSkogdG9fVE8gYnJpbmdfVkIgaGltX1BSUCBkaXJlY3RseV9SQiBpbnRvX0lOIGFtYnVsYW5jZV9OTiAuXy4KK0J1dF9DQyB0aGVfRFQgb25seV9KSiBob3NwaXRhbF9OTiB0aGF0X1dEVCBoYWRfVkJEIG9wZW5lZF9WQk4gdGhhdF9JTiBTdW5kYXlfTk5QIHdhc19WQkQgdGhlX0RUIFBhcmFjZWxzdXNfTk5QIEhvc3BpdGFsX05OUCBpbl9JTiA4MzkzOV9DRCBXZWlsaGVpbV9OTlAgLF8sIHdoaWNoX1dEVCB3YXNfVkJEIDJfQ0QgaG91cnNfTk5TIGF3YXlfUkIgLl8uCitDb252dWxzZWRfSkogd2l0aF9JTiBwYWluX05OICxfLCB0aGVfRFQgbWFuX05OIGZpbmFsbHlfUkIgYXJyaXZlZF9WQkQgaW5fSU4gU3RpZnRlcnN0cmGnZV9OTlAgMTVfQ0QgLF8sIHdoZXJlX1dSQiB0aGVfRFQgcGVyc29uYWxfTk4gaW1tZWRpYXRlbHlfUkIgdG9va19WQkQgY2FyZV9OTiBvZl9JTiBoaW1fUFJQIC5fLgorCitMYXN0X0pKIHllYXJfTk4gLF8sIElfUFJQIHdvcmtlZF9WQkQgYXNfSU4gYV9EVCBkZWxpdmVyeV9OTiBib3lfTk4gZm9yX0lOIGFfRFQgc21hbGxfSkogbG9jYWxfSkogbWFnYXppbmVfTk4gLl8uCitJX1BSUCB3b3JrZWRfVkJEIGluX0lOIHRoZV9EVCBhcmVhX05OIG9mX0lOIDgzNDU0X0NEIE90dG9icnVubl9OTlAgLl8uCitJX1BSUCBoYWRfVkJEIGFfRFQgbGlzdF9OTiB3aXRoX0lOIHRoZV9EVCBob21lX05OIGFkZHJlc3Nlc19OTlMgb2ZfSU4gb3VyX1BSUCQgY29zdHVtZXJzX05OUyB3aG9tX1dQIElfUFJQIGJyb3VnaHRfVkJEIHRoZWlyX1BSUCQgcGFwZXJzX05OUyBvbmNlX1JCIGFfRFQgd2Vla19OTiAuXy4KK0FuX0RUIGVsZGVybHlfSkogbGFkeV9OTiAsXywgd2hvX1dQIHdhc19WQkQgY2FsbGVkX1ZCTiBFbGVub3JfTk5QIE1laWVyX05OUCAsXywgbGl2ZWRfVkJEIGluX0lOIEeKcnRuZXJ3ZWdfTk5QIDZfQ0QgLF8sIGFuZF9DQyBJX1BSUCBhbHdheXNfUkIgZHJvdmVfVkJEIHRoZXJlX1JCIGZpcnN0X1JCICxfLCBiZWNhdXNlX0lOIElfUFJQIGxpa2VkX1ZCRCBoZXJfUFJQIHRoZV9EVCBtb3N0X0pKUyAuXy4KK0FmdGVyd2FyZHNfUkIgLF8sIElfUFJQIHdlbnRfVkJEIHRvX1RPIGFfRFQgc3R1ZGVudF9OTiAsXywgR2luYV9OTlAgU2NobmVpZGVyX05OUCAsXywgd2hvX1dQIGxpdmVkX1ZCRCBzdGlsbF9SQiBpbl9JTiBoZXJfUFJQJCBwYXJlbnQnc19OTlMgaG91c2VfTk4gaW5fSU4gR4pydG5lcndlZ19OTlAgMjVfQ0QgLl8uCitUaGVfRFQgbGFzdF9KSiBpbl9JTiBsaW5lX05OIHdhc19WQkQgdGhlX0RUIHJldGlyZWRfSkogdGVhY2hlcl9OTiBCcnVub19OTlAgU2NodWx6X05OUCBpbl9JTiBEcmFtZW5zdHJhp2VfTk5QIDE1X0NEIC5fLgorSGVfUFJQIHdhc19WQkQgZnJpZW5kbHlfSkogZW5vdWdoX1JCIHRvX1RPIHRpcF9WQiBzb21ldGltZXNfUkIgLl8uCisKK091cl9QUlAkIGJ1c2luZXNzX05OIGNvbXBhbnlfTk4gd2FzX1ZCRCBmb3VuZGVkX1ZCTiBpbl9JTiAxOTEyX0NEIGJ5X0lOIHRoZV9EVCBzaW5nZXJfTk4gYW5kX0NDIGVudGVydGFpbmVyX05OIE1pY2hlbF9OTlAgU2VpbGVfTk5QIC5fLgorSGVfUFJQIG9wZW5lZF9WQkQgdGhlX0RUIGZpcnN0X0pKIGFnZW5jeV9OTiBpbl9JTiBFcmRpbmdfTk5QICxfLCBhX0RUIHNtYWxsX0pKIHRvd25fTk4gbmVhcl9JTiBNdW5pY2hfTk5QIC5fLgorTm93X1JCICxfLCBtb3JlX0pKUiB0aGFuX0lOIDkwX0NEIHllYXJzX05OUyBvZl9JTiB0dXJidWxlbnRfSkogdXBzX05OUyBhbmRfQ0MgZG93bnNfTk5TIGxhdGVyX1JCICxfLCB3ZV9QUlAgZmluYWxseV9SQiBkZWNpZGVkX1ZCRCB0b19UTyBzaXR1YXRlX1ZCIG91cl9QUlAkIGNvbXBhbnlfTk4gaW5fSU4gYV9EVCBtb3JlX0pKUiBjZW50cmFsX0pKIGFuZF9DQyBmcmVxdWVudGVkX0pKIGFyZWFfTk4gLl8uCitMYXN0X0pKIHllYXJfTk4gLF8sIHdlX1BSUCBtb3ZlZF9WQkQgaW50b19JTiBhbl9EVCBlbXB0eV9KSiBmYWN0b3J5X05OIGJ1aWxkaW5nX05OIGluX0lOIDMwMzAzX0NEIEJlcmxpbl9OTlAgLl8uCitJdF9QUlAgaXNfVkJaIGxvY2F0ZWRfVkJOIGluX0lOIEJhcm1lcnN0ci5fTk5QIDM0X0NEIC5fLgorCitXaGVuX1dSQiBHZW9yZ2VfTk5QIE1pbGxlcl9OTlAgLF8sIGFfRFQgdG91cmlzdF9OTiBmcm9tX0lOIEVuZ2xhbmRfTk5QICxfLCBjYW1lX1ZCRCB0b19UTyBNdW5pY2hfTk5QICxfLCBoZV9QUlAgaGFkX1ZCRCBub19EVCBpZGVhX05OIGhvd19XUkIgdG9fVE8gcmVhZF9WQiB0aGVfRFQgY2l0eV9OTiBtYXBzX05OUyAuXy4KK0hlX1BSUCBkZXBlbmRlZF9WQkQgY29tcGxldGVseV9SQiBvbl9JTiB0aGVfRFQgaGVscF9OTiBhbmRfQ0MgaW5mb3JtYXRpb25fTk4gb2ZfSU4gR2VybWFuX0pKIHBlZGVzdHJpYW5zX05OUyAuXy4KK09uZV9DRCBkYXlfTk4gLF8sIGhlX1BSUCBzaW1wbHlfUkIgY291bGRfTUQgbm90X1JCIGZpbmRfVkIgdGhlX0RUIGZhbW91c19KSiBMZW5iYWNoaGF1c19OTlAgLl8uCitTb19SQiBoZV9QUlAgYXNrZWRfVkJEIGFfRFQgeW91bmdfSkogd29tYW5fTk4gZm9yX0lOIGhlbHBfTk4gLl8uCitTaGVfUFJQIHBvaW50ZWRfVkJEIGF0X0lOIGFfRFQgc3RyZWV0X05OIHNpZ25fTk4gYW5kX0NDIGV4cGxhaW5lZF9WQkQgdG9fVE8gaGltX1BSUCB0aGF0X0lOIGhlX1BSUCAnZF9NRCBmaW5kX1ZCIHRoZV9EVCBMZW5iYWNoaGF1c19OTlAgaW5fSU4gTHVpc2Vuc3RyYadlX05OUCAzM19DRCAsXywgd2hpY2hfV0RUIGlzX1ZCWiBpbl9JTiA4MDMzM19DRCBNdW5pY2hfTk5QIC5fLgorTWlsbGVyX05OUCB3YXNfVkJEIHZlcnlfUkIgZ3JhdGVmdWxfSkogYW5kX0NDIGNvdWxkX01EIGZpbmFsbHlfUkIgZW5qb3lfVkIgdGhlX0RUIGV4aGliaXRpb25fTk4gLl8uCisKK09uX0lOIE1hcmNoX05OUCAxNV9DRCAsXywgdGhlcmVfRVggd2FzX1ZCRCBhbl9EVCBhY2NpZGVudF9OTiBuZWFyX0lOIE11bmljaF9OTlAgLl8uCitUaGVfRFQgZHJpdmVyX05OIGdvdF9WQkQgYmFkbHlfUkIgaW5qdXJlZF9WQk4gLl8uCitEcml2aW5nX1ZCRyBhbG9uZV9SQiBub3RfUkIgZmFyX1JCIGZyb21fSU4gaGVyX1BSUCQgaG9tZV9OTiAsXywgdGhlX0RUIG1pZGRsZS1hZ2VkX0pKIHdvbWFuX05OIGNyYXNoZWRfVkJEIGF0X0lOIGhpZ2hfSkogc3BlZWRfTk4gaW50b19JTiBhX0RUIHRyZWVfTk4gLl8uCitBX0RUIHJlc2lkZW50X05OICxfLCB3aG9fV1AgbGl2ZXNfVkJaIG5lYXJfSU4gdGhlX0RUIHN0cmVldF9OTiB3aGVyZV9XUkIgdGhlX0RUIGFjY2lkZW50X05OIHRvb2tfVkJEIHBsYWNlX05OICxfLCBjYWxsZWRfVkJOIGluc3RhbnRseV9SQiB0aGVfRFQgcG9saWNlX05OIC5fLgorSGVfUFJQIHJlcG9ydGVkX1ZCRCB3aGF0X1dQIGhhZF9WQkQgaGFwcGVuZWRfVkJOIGFuZF9DQyBnYXZlX1ZCRCBoaXNfUFJQJCBuYW1lX05OIGFuZF9DQyBhZGRyZXNzX05OIHRvX1RPIHRoZV9EVCBvZmZpY2VyX05OIC5fLgorSGVfUFJQICdzX1ZCWiBjYWxsZWRfVkJOIFBldGVyX05OUCBTY2h1YmVydF9OTlAgYW5kX0NDIGhlX1BSUCBsaXZlc19WQlogYXRfSU4gTWF4LUyady1TdHJhp2VfTk5QIDEzX0NEIGluX0lOIDg0NjMwX0NEIEdhdXRpbmdfTk5QIC5fLgorVGhlX0RUIHBvbGljZV9OTiBhcnJpdmVkX1ZCRCB0ZW5fQ0QgbWludXRlc19OTlMgbGF0ZXJfUkIgYW5kX0NDIGJyb3VnaHRfVkJEIHRoZV9EVCB3b21hbl9OTiBpbnRvX0lOIGhvc3BpdGFsX05OIC5fLgorQWx0aG91Z2hfSU4gc2hlX1BSUCBoYWRfVkJEIG11bHRpcGxlX0pKIHRyYXVtYV9OTiAsXywgc2hlX1BSUCAnc19WQlogb3V0X0lOIG9mX0lOIG1vcnRhbF9KSiBkYW5nZXJfTk4gLl8uCisKK0hpX05OUCAsXywgaG93X1dSQiBhcmVfVkJQIHlvdV9QUlAgP18uCitBcmVfVkJQIG50J3RfUkIgeW91X1BSUCBhX0RUIGZyaWVuZF9OTiBvZl9JTiBOYXRhbGllX05OUCA/Xy4KK1llYWhfVUggZm9yX0lOIHN1cmVfSkogLl8uCitIb3dfV1JCIGRpZF9WQkQgeW91X1BSUCBrbm93X1ZCIHRoYXRfRFQgP18uCitJX1BSUCBzYXdfVkJEIHlvdV9QUlAgc2l0dGluZ19WQkcgbmV4dF9KSiB0b19UTyBoZXJfUFJQIGF0X0lOIHVuaV9KSiAuXy4KK1llYWhfTk5QIHNoZV9QUlAgJ3NfVkJaIG15X1BSUCQgYmVzdF9KSlMgZnJpZW5kX05OIC5fLgorQXJlX1ZCUCB5b3VfUFJQIGdvaW5nX1ZCRyB0b19UTyBoZXJfUFJQIHBhcnR5X05OIG5leHRfSkogZnJpZGF5X05OID9fLgorT2hfVUggeWVzX1VIICxfLCBJX1BSUCAnZF9NRCByZWFsbHlfUkIgbGlrZV9WQiB0b19UTyAuXy4KK0J1dF9DQyBpbl9JTiBmYWN0X05OIElfUFJQIGRvX1ZCUCBuJ3RfUkIga25vd19WQiB5ZXRfUkIgd2hlcmVfV1JCIGl0X1BSUCB0YWtlc19WQlogcGxhY2VfTk4gLl8uCitJX1BSUCBjYW5fTUQgdGVsbF9WQiB5b3VfUFJQIDpfOiByaW5nX05OIGF0X0lOIEJhdW1hbm4sX05OUCBNZWlzZW5zdHJhp2VfTk5QIDVfQ0QgLF8sIGluX0lOIDgxNzM3X0NEIE11bmljaF9OTlAgLl8uCitUaGVfRFQgcGFydHlfTk4gc3RhcnRzX1ZCWiBhdF9JTiA5X0NEIHAubS5fTk4gLl8uCitJX1BSUCBob3BlX1ZCUCB5b3VfUFJQICdsbF9NRCBmaW5kX1ZCIGl0X1BSUCAuXy4KK1RoYW5rX1ZCIHlvdV9QUlAgdmVyeV9SQiBtdWNoX1JCICxfLCBzZWVfVkJQIHlvdV9QUlAgbmV4dF9KSiBmcmlkYXlfTk4gIV8uCisKK015X1BSUCQgbmFtZV9OTiBpc19WQlogTWljaGFlbF9OTlAgSGludGVyaG9mZXJfTk5QIC5fLgorV2hlbl9XUkIgSV9QUlAgd2FzX1ZCRCAyMV9DRCAsXywgSV9QUlAgbW92ZWRfVkJEIG91dF9SUCBmcm9tX0lOIG15X1BSUCQgcGFyZW50c19OTlMgaG9tZV9OTiBpbnRvX0lOIG15X1BSUCQgZmlyc3RfSkogb3duX0pKIGFwcGFydG1lbnRfTk4gaW5fSU4gb3JkZXJfTk4gdG9fVE8gc3R1ZHlfVkIgaW5fSU4gYV9EVCBiaWdnZXJfSkpSIGNpdHlfTk4gLl8uCitNeV9QUlAkIG5ld19KSiBob21lX05OIHdhc19WQkQgaW5fSU4gTGlsaWVuc3RyYadlX05OUCAxX0NEIGluX0lOIDI1MzM0X0NEIEhhbWJ1cmdfTk5QIC5fLgorQnV0X0NDIElfUFJQIHJlYWxpemVkX1ZCRCBxdWlja2x5X1JCIHRoYXRfSU4gbGlmZV9OTiBpbl9JTiBhX0RUIG1ldHJvcG9saXNfTk4gd2FzX1ZCRCBuJ3RfUkIgcmVsYXhlZF9WQk4gZW5vdWdoX1JCIGZvcl9JTiBtZV9QUlAgLl8uCitTb19JTiBJX1BSUCBkZWNpZGVkX1ZCRCB0b19UTyBtb3ZlX1ZCIGludG9fSU4gYV9EVCBzbWFsbGVyX0pKUiB0b3duX05OIC5fLgorTm93X1JCIElfUFJQICdtX1ZCUCBhX0RUIHRlbmFudF9OTiB3aXRoX0lOIGFuX0RUIGVsZGVybHlfSkogd2lkb3dfTk4gLl8uCitXZV9QUlAgbGl2ZV9WQlAgaW5fSU4gQp9yZ2Vyc3RyYadlX05OUCAyX0NEIGluX0lOIDYzNzM3X0NEIEhlaWRlbGJlcmdfTk5QIC5fLgorSV9QUlAgcmVhbGx5X1JCIGxpa2VfSU4gdGhlX0RUIHNtYWxsdG93bl9KSiBmbGFpcl9OTiBhbmRfQ0MgbXlfUFJQJCBzdHVkaWVzX05OUyBhdF9JTiBIZWlkZWxiZXJnX05OUCAnc19QT1Mgbm90YWJsZV9KSiB1bml2ZXJzaXR5X05OIC5fLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvcmVzb3VyY2VzL2RpY3Rpb25hcnlXaXRoTGVtbWEuaW5mbyBiL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvcmVzb3VyY2VzL2RpY3Rpb25hcnlXaXRoTGVtbWEuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDVmZThkCi0tLSAvZGV2L251bGwKKysrIGIvbW9yZm9sb2dpay1hZGRvbi9zcmMvdGVzdC9yZXNvdXJjZXMvZGljdGlvbmFyeVdpdGhMZW1tYS5pbmZvCkBAIC0wLDAgKzEsMTUgQEAKKyMKKyMgUkVRVUlSRUQgUFJPUEVSVElFUworIworCisjIENvbHVtbiAobGVtbWEsIGluZmxlY3RlZCwgdGFnKSBzZXBhcmF0b3IuIFRoaXMgbXVzdCBiZSBhIHNpbmdsZSBieXRlIGluIHRoZSB0YXJnZXQgZW5jb2RpbmcuCitmc2EuZGljdC5zZXBhcmF0b3I9LAorCisjIFRoZSBjaGFyc2V0IGluIHdoaWNoIHRoZSBpbnB1dCBpcyBlbmNvZGVkLiBVVEYtOCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZC4KK2ZzYS5kaWN0LmVuY29kaW5nPVVURi04CisKKyMgVGhlIHR5cGUgb2YgbGVtbWEtaW5mbGVjdGVkIGZvcm0gZW5jb2RpbmcgY29tcHJlc3Npb24gdGhhdCBwcmVjZWRlcyBhdXRvbWF0b24KKyMgY29uc3RydWN0aW9uLiBBbGxvd2VkIHZhbHVlczogW3N1ZmZpeCwgaW5maXgsIHByZWZpeCwgbm9uZV0uCisjIERldGFpbHMgYXJlIGluIERhY2l1aydzIHBhcGVyIGFuZCBpbiB0aGUgY29kZS4gCisjIExlYXZlIGF0ICdwcmVmaXgnIGlmIG5vdCBzdXJlLgorZnNhLmRpY3QuZW5jb2Rlcj1wcmVmaXgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb3Jmb2xvZ2lrLWFkZG9uL3NyYy90ZXN0L3Jlc291cmNlcy9kaWN0aW9uYXJ5V2l0aExlbW1hLnR4dCBiL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvcmVzb3VyY2VzL2RpY3Rpb25hcnlXaXRoTGVtbWEudHh0CmluZGV4IDVhYzcxMTEuLjA5ZDM5ZTMgMTAwNjQ0Ci0tLSBhL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvcmVzb3VyY2VzL2RpY3Rpb25hcnlXaXRoTGVtbWEudHh0CisrKyBiL21vcmZvbG9naWstYWRkb24vc3JjL3Rlc3QvcmVzb3VyY2VzL2RpY3Rpb25hcnlXaXRoTGVtbWEudHh0CkBAIC0xLDEwICsxLDExIEBACi1jYXNhCWNhc2EJTk9VTgotY2FzYQljYXNhcglWCi1DYXNhCUNhc2EJUFJPUAotY2FzaW5oYQljYXNhCU5PVU4KLWNhc29uYQljYXNhCU5PVU4KLW1lbmluYQltZW5pbm8JTk9VTgotbWVuaW5vCW1lbmlubwlOT1VOCi1tZW5pbsOjbwltZW5pbm8JTk9VTgotbWVuaW5pbmhvCW1lbmlubwlOT1VOCi1jYXJybwkJTk9VTgorY2FzYSxjYXNhLE5PVU4KK2Nhc2FyLGNhc2EsVgorY2FzYXIsY2FzYXIsVi1JTkYKK0Nhc2EsQ2FzYSxQUk9QCitjYXNhLGNhc2luaGEsTk9VTgorY2FzYSxjYXNvbmEsTk9VTgorbWVuaW5vLG1lbmluYSxOT1VOCittZW5pbm8sbWVuaW5vLE5PVU4KK21lbmlubyxtZW5pbsOjbyxOT1VOCittZW5pbm8sbWVuaW5pbmhvLE5PVU4KK2NhcnJvLGNhcnJvLE5PVU4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==