ZGlmZiAtLWdpdCBhL1JFQURNRS5hbmRyb2lkIGIvUkVBRE1FLmFuZHJvaWQKaW5kZXggMjgxNjY3NC4uYzM4YTZjMyAxMDA2NDQKLS0tIGEvUkVBRE1FLmFuZHJvaWQKKysrIGIvUkVBRE1FLmFuZHJvaWQKQEAgLTEsNCArMSw0IEBACiBVUkw6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9saWJwaG9uZW51bWJlci8KLVZlcnNpb246IHIzNworVmVyc2lvbjogcjM5CiBMaWNlbnNlOiBBcGFjaGUgMgogRGVzY3JpcHRpb246IEdvb2dsZSBQaG9uZSBOdW1iZXIgTGlicmFyeS4KZGlmZiAtLWdpdCBhL2phdmEvcmVzb3VyY2VzL2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvQnVpbGRNZXRhZGF0YVByb3RvRnJvbVhtbC5qYXZhIGIvamF2YS9yZXNvdXJjZXMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9CdWlsZE1ldGFkYXRhUHJvdG9Gcm9tWG1sLmphdmEKaW5kZXggMjcyYmEyOS4uMmQyYTUwZCAxMDA2NDQKLS0tIGEvamF2YS9yZXNvdXJjZXMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9CdWlsZE1ldGFkYXRhUHJvdG9Gcm9tWG1sLmphdmEKKysrIGIvamF2YS9yZXNvdXJjZXMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9CdWlsZE1ldGFkYXRhUHJvdG9Gcm9tWG1sLmphdmEKQEAgLTk4LDYgKzk4LDkgQEAKICAgICBQaG9uZU1ldGFkYXRhIG1ldGFkYXRhID0gbmV3IFBob25lTWV0YWRhdGEoKTsKICAgICBtZXRhZGF0YS5zZXRJZChyZWdpb25Db2RlKTsKICAgICBtZXRhZGF0YS5zZXRDb3VudHJ5Q29kZShJbnRlZ2VyLnBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJjb3VudHJ5Q29kZSIpKSk7CisgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCJsZWFkaW5nRGlnaXRzIikpIHsKKyAgICAgIG1ldGFkYXRhLnNldExlYWRpbmdEaWdpdHModmFsaWRhdGVSRShlbGVtZW50LmdldEF0dHJpYnV0ZSgibGVhZGluZ0RpZ2l0cyIpKSk7CisgICAgfQogICAgIG1ldGFkYXRhLnNldEludGVybmF0aW9uYWxQcmVmaXgodmFsaWRhdGVSRShlbGVtZW50LmdldEF0dHJpYnV0ZSgiaW50ZXJuYXRpb25hbFByZWZpeCIpKSk7CiAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCJwcmVmZXJyZWRJbnRlcm5hdGlvbmFsUHJlZml4IikpIHsKICAgICAgIFN0cmluZyBwcmVmZXJyZWRJbnRlcm5hdGlvbmFsUHJlZml4ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInByZWZlcnJlZEludGVybmF0aW9uYWxQcmVmaXgiKTsKQEAgLTEwNSw2ICsxMDgsNyBAQAogICAgIH0KICAgICBTdHJpbmcgbmF0aW9uYWxQcmVmaXggPSAiIjsKICAgICBTdHJpbmcgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZSA9ICIiOworICAgIFN0cmluZyBjYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlID0gIiI7CiAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCJuYXRpb25hbFByZWZpeCIpKSB7CiAgICAgICBuYXRpb25hbFByZWZpeCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYXRpb25hbFByZWZpeCIpOwogICAgICAgbWV0YWRhdGEuc2V0TmF0aW9uYWxQcmVmaXgobmF0aW9uYWxQcmVmaXgpOwpAQCAtMTI2LDYgKzEzMCwxMCBAQAogICAgICAgbWV0YWRhdGEuc2V0UHJlZmVycmVkRXh0blByZWZpeChlbGVtZW50LmdldEF0dHJpYnV0ZSgicHJlZmVycmVkRXh0blByZWZpeCIpKTsKICAgICB9CiAKKyAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoIm1haW5Db3VudHJ5Rm9yQ29kZSIpKSB7CisgICAgICBtZXRhZGF0YS5zZXRNYWluQ291bnRyeUZvckNvZGUodHJ1ZSk7CisgICAgfQorCiAgICAgLy8gRXh0cmFjdCBhdmFpbGFibGVGb3JtYXRzCiAgICAgTm9kZUxpc3QgbnVtYmVyRm9ybWF0RWxlbWVudHMgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJudW1iZXJGb3JtYXQiKTsKICAgICBpbnQgbnVtT2ZGb3JtYXRFbGVtZW50cyA9IG51bWJlckZvcm1hdEVsZW1lbnRzLmdldExlbmd0aCgpOwpAQCAtMTM5LDYgKzE0NywxMyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGZvcm1hdC5zZXROYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlKG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGUpOwogICAgICAgICB9CisgICAgICAgIGlmIChudW1iZXJGb3JtYXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiY2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSIpKSB7CisgICAgICAgICAgZm9ybWF0LnNldERvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSh2YWxpZGF0ZVJFKAorICAgICAgICAgICAgICBnZXREb21lc3RpY0NhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGVGcm9tRWxlbWVudChudW1iZXJGb3JtYXRFbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBmb3JtYXQuc2V0RG9tZXN0aWNDYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlKGNhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGUpOworICAgICAgICB9CiAgICAgICAgIGlmIChudW1iZXJGb3JtYXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgibGVhZGluZ0RpZ2l0cyIpKSB7CiAgICAgICAgICAgZm9ybWF0LnNldExlYWRpbmdEaWdpdHModmFsaWRhdGVSRShudW1iZXJGb3JtYXRFbGVtZW50LmdldEF0dHJpYnV0ZSgibGVhZGluZ0RpZ2l0cyIpKSk7CiAgICAgICAgIH0KQEAgLTE1OSw2ICsxNzQsMTMgQEAKICAgICAgICAgfQogICAgICAgICBmb3JtYXQuc2V0UGF0dGVybih2YWxpZGF0ZVJFKG51bWJlckZvcm1hdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwYXR0ZXJuIikpKTsKICAgICAgICAgZm9ybWF0LnNldEZvcm1hdCh2YWxpZGF0ZVJFKG51bWJlckZvcm1hdEVsZW1lbnQuZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpKSk7CisgICAgICAgIGlmIChudW1iZXJGb3JtYXRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiY2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSIpKSB7CisgICAgICAgICAgZm9ybWF0LnNldERvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSh2YWxpZGF0ZVJFKAorICAgICAgICAgICAgICBnZXREb21lc3RpY0NhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGVGcm9tRWxlbWVudChudW1iZXJGb3JtYXRFbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBmb3JtYXQuc2V0RG9tZXN0aWNDYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlKGNhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGUpOworICAgICAgICB9CiAgICAgICAgIG1ldGFkYXRhLmFkZEludGxOdW1iZXJGb3JtYXQoZm9ybWF0KTsKICAgICAgIH0KICAgICB9CkBAIC0xOTIsNiArMjE0LDE1IEBACiAgICAgcmV0dXJuIG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGU7CiAgIH0KIAorICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RG9tZXN0aWNDYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlRnJvbUVsZW1lbnQoRWxlbWVudCBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hdGlvbmFsUHJlZml4KSB7CisgICAgU3RyaW5nIGNhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgiY2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSIpOworICAgIC8vIFJlcGxhY2UgJEZHIHdpdGggdGhlIGZpcnN0IGdyb3VwICgkMSkgYW5kICROUCB3aXRoIHRoZSBuYXRpb25hbCBwcmVmaXguCisgICAgY2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSA9IGNhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGUucmVwbGFjZUZpcnN0KCJcXCRGRyIsICJcXCQxIikKKyAgICAgICAgLnJlcGxhY2VGaXJzdCgiXFwkTlAiLCBuYXRpb25hbFByZWZpeCk7CisgICAgcmV0dXJuIGNhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGU7CisgIH0KKwogICAvKioKICAgICogUHJvY2Vzc2VzIGEgcGhvbmUgbnVtYmVyIGRlc2NyaXB0aW9uIGVsZW1lbnQgZnJvbSB0aGUgWE1MIGZpbGUgYW5kIHJldHVybnMgaXQgYXMgYQogICAgKiBQaG9uZU51bWJlckRlc2MuIElmIHRoZSBkZXNjcmlwdGlvbiBlbGVtZW50IGlzIGEgZml4ZWQgbGluZSBvciBtb2JpbGUgbnVtYmVyLCB0aGUgZ2VuZXJhbApkaWZmIC0tZ2l0IGEvamF2YS9yZXNvdXJjZXMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9wcm90by9waG9uZW1ldGFkYXRhLnByb3RvIGIvamF2YS9yZXNvdXJjZXMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9wcm90by9waG9uZW1ldGFkYXRhLnByb3RvCmluZGV4IDQ0Zjk3NjQuLjZjMzBlMTQgMTAwNjQ0Ci0tLSBhL2phdmEvcmVzb3VyY2VzL2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvcHJvdG8vcGhvbmVtZXRhZGF0YS5wcm90bworKysgYi9qYXZhL3Jlc291cmNlcy9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL3Byb3RvL3Bob25lbWV0YWRhdGEucHJvdG8KQEAgLTY0LDYgKzY0LDEyIEBACiAgIC8vIHByZWZpeCBpbiBOQVRJT05BTCBmb3JtYXQuIFRoaXMgZmllbGQgZG9lcyBub3QgYWZmZWN0IGhvdyBhIG51bWJlcgogICAvLyBpcyBmb3JtYXR0ZWQgaW4gb3RoZXIgZm9ybWF0cywgc3VjaCBhcyBJTlRFUk5BVElPTkFMLgogICBvcHRpb25hbCBzdHJpbmcgbmF0aW9uYWxfcHJlZml4X2Zvcm1hdHRpbmdfcnVsZSA9IDQ7CisKKyAgLy8gVGhpcyBmaWVsZCBzcGVjaWZpZXMgaG93IGFueSBjYXJyaWVyIGNvZGUgKCRDQykgdG9nZXRoZXIgd2l0aCB0aGUgZmlyc3QKKyAgLy8gZ3JvdXAgKCRGRykgaW4gdGhlIG5hdGlvbmFsIHNpZ25pZmljYW50IG51bWJlciBzaG91bGQgYmUgZm9ybWF0dGVkCisgIC8vIHdoZW4gZm9ybWF0V2l0aENhcnJpZXJDb2RlIGlzIGNhbGxlZCwgaWYgY2FycmllciBjb2RlcyBhcmUgdXNlZCBmb3IgYQorICAvLyBjZXJ0YWluIGNvdW50cnkuCisgIG9wdGlvbmFsIHN0cmluZyBkb21lc3RpY19jYXJyaWVyX2NvZGVfZm9ybWF0dGluZ19ydWxlID0gNTsKIH0KIAogbWVzc2FnZSBQaG9uZU51bWJlckRlc2MgewpAQCAtMTkzLDggKzE5OSwyMSBAQAogICAvLyAxNSAoaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGFyZWEgY29kZSBvZiAzNDMpIGlzIHVzZWQuCiAgIHJlcGVhdGVkIE51bWJlckZvcm1hdCBpbnRsX251bWJlcl9mb3JtYXQgPSAyMDsKIAotICAvLyBEZXByZWNhdGVkLgotICBvcHRpb25hbCBzdHJpbmcgbmF0aW9uYWxfcHJlZml4X2Zvcm1hdHRpbmdfcnVsZSA9IDIxOworICAvLyBUaGlzIGZpZWxkIGlzIHNldCB3aGVuIHRoaXMgY291bnRyeSBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBtYWluIGNvdW50cnkKKyAgLy8gZm9yIGEgY2FsbGluZyBjb2RlLiBJdCBtYXkgbm90IGJlIHNldCBieSBtb3JlIHRoYW4gb25lIGNvdW50cnkgd2l0aCB0aGUKKyAgLy8gc2FtZSBjYWxsaW5nIGNvZGUsIGFuZCBpdCBzaG91bGQgbm90IGJlIHNldCBieSBjb3VudHJpZXMgd2l0aCBhIHVuaXF1ZQorICAvLyBjYWxsaW5nIGNvZGUuIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCAiR0IiIGlzIHRoZSBtYWluIGNvdW50cnkKKyAgLy8gZm9yIHRoZSBjYWxsaW5nIGNvZGUgIjQ0IiBmb3IgZXhhbXBsZSwgcmF0aGVyIHRoYW4gSmVyc2V5IG9yIHRoZSBJc2xlIG9mCisgIC8vIE1hbi4KKyAgb3B0aW9uYWwgYm9vbCBtYWluX2NvdW50cnlfZm9yX2NvZGUgPSAyMiBbZGVmYXVsdD1mYWxzZV07CisKKyAgLy8gVGhpcyBmaWVsZCBpcyBwb3B1bGF0ZWQgb25seSBmb3IgY291bnRyaWVzIG9yIHJlZ2lvbnMgdGhhdCBzaGFyZSBhIGNvdW50cnkKKyAgLy8gY2FsbGluZyBjb2RlLiBJZiBhIG51bWJlciBtYXRjaGVzIHRoaXMgcGF0dGVybiwgaXQgY291bGQgYmVsb25nIHRvIHRoaXMKKyAgLy8gcmVnaW9uLiBUaGlzIGlzIG5vdCBpbnRlbmRlZCBhcyBhIHJlcGxhY2VtZW50IGZvciBJc1ZhbGlkRm9yUmVnaW9uLCBhbmQKKyAgLy8gZG9lcyBub3QgbWVhbiB0aGUgbnVtYmVyIG11c3QgY29tZSBmcm9tIHRoaXMgcmVnaW9uIChmb3IgZXhhbXBsZSwgODAwCisgIC8vIG51bWJlcnMgYXJlIHZhbGlkIGZvciBhbGwgTkFOUEEgY291bnRyaWVzLikgVGhpcyBmaWVsZCBzaG91bGQgYmUgYSByZWd1bGFyCisgIC8vIGV4cHJlc3Npb24gb2YgdGhlIGV4cGVjdGVkIHByZWZpeCBtYXRjaC4KKyAgb3B0aW9uYWwgc3RyaW5nIGxlYWRpbmdfZGlnaXRzID0gMjM7CiB9CiAKIG1lc3NhZ2UgUGhvbmVNZXRhZGF0YUNvbGxlY3Rpb24gewpkaWZmIC0tZ2l0IGEvamF2YS9yZXNvdXJjZXMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9zcmMvUGhvbmVOdW1iZXJNZXRhRGF0YS54bWwgYi9qYXZhL3Jlc291cmNlcy9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL3NyYy9QaG9uZU51bWJlck1ldGFEYXRhLnhtbAppbmRleCBhNDYzZjQ5Li4xOTU4Y2VhIDEwMDY0NAotLS0gYS9qYXZhL3Jlc291cmNlcy9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL3NyYy9QaG9uZU51bWJlck1ldGFEYXRhLnhtbAorKysgYi9qYXZhL3Jlc291cmNlcy9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL3NyYy9QaG9uZU51bWJlck1ldGFEYXRhLnhtbApAQCAtNTMsNiArNTMsNyBAQAogCiAgICAgPCFBVFRMSVNUIHRlcnJpdG9yeSBpZCBDREFUQSAjUkVRVUlSRUQ+CiAgICAgPCFBVFRMSVNUIHRlcnJpdG9yeSBjb3VudHJ5Q29kZSBDREFUQSAjUkVRVUlSRUQ+CisgICAgPCFBVFRMSVNUIHRlcnJpdG9yeSBsZWFkaW5nRGlnaXRzIENEQVRBICNJTVBMSUVEPgogICAgIDwhQVRUTElTVCB0ZXJyaXRvcnkgcHJlZmVycmVkSW50ZXJuYXRpb25hbFByZWZpeCBDREFUQSAjSU1QTElFRD4KICAgICA8IUFUVExJU1QgdGVycml0b3J5IGludGVybmF0aW9uYWxQcmVmaXggQ0RBVEEgI1JFUVVJUkVEPgogICAgIDwhQVRUTElTVCB0ZXJyaXRvcnkgbmF0aW9uYWxQcmVmaXggQ0RBVEEgI0lNUExJRUQ+CkBAIC02MCwxMSArNjEsMTUgQEAKICAgICA8IUFUVExJU1QgdGVycml0b3J5IG5hdGlvbmFsUHJlZml4VHJhbnNmb3JtUnVsZSBDREFUQSAjSU1QTElFRD4KICAgICA8IUFUVExJU1QgdGVycml0b3J5IHByZWZlcnJlZEV4dG5QcmVmaXggQ0RBVEEgI0lNUExJRUQ+CiAgICAgPCFBVFRMSVNUIHRlcnJpdG9yeSBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlIENEQVRBICNJTVBMSUVEPgorICAgIDwhQVRUTElTVCB0ZXJyaXRvcnkgbWFpbkNvdW50cnlGb3JDb2RlICh0cnVlKSAjSU1QTElFRD4KKyAgICA8IUFUVExJU1QgdGVycml0b3J5IGNhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGUgQ0RBVEEgI0lNUExJRUQ+CiAgICAgPCFBVFRMSVNUIG51bWJlckZvcm1hdCBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlIENEQVRBICNJTVBMSUVEPgorICAgIDwhQVRUTElTVCBudW1iZXJGb3JtYXQgY2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSBDREFUQSAjSU1QTElFRD4KICAgICA8IUFUVExJU1QgbnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHMgQ0RBVEEgI0lNUExJRUQ+CiAgICAgPCFBVFRMSVNUIG51bWJlckZvcm1hdCBwYXR0ZXJuIENEQVRBICNSRVFVSVJFRD4KICAgICA8IUFUVExJU1QgaW50bE51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzIENEQVRBICNJTVBMSUVEPgogICAgIDwhQVRUTElTVCBpbnRsTnVtYmVyRm9ybWF0IHBhdHRlcm4gQ0RBVEEgI1JFUVVJUkVEPgorICAgIDwhQVRUTElTVCBpbnRsTnVtYmVyRm9ybWF0IGNhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGUgQ0RBVEEgI0lNUExJRUQ+CiAgICAgXT4KIAogPHBob25lTnVtYmVyTWV0YWRhdGE+CkBAIC0xNzQsNyArMTc5LDggQEAKIAogICAgIDwhLS0gQW50aWd1YSBhbmQgQmFyYnVkYSAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwMDgvZW4gLS0+Ci0gICAgPHRlcnJpdG9yeSBpZD0iQUciIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgorICAgIDx0ZXJyaXRvcnkgaWQ9IkFHIiBjb3VudHJ5Q29kZT0iMSIgbGVhZGluZ0RpZ2l0cz0iMjY4IgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsyODldXGR7OX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KQEAgLTIwOSw3ICsyMTUsOCBAQAogCiAgICAgPCEtLSBBbmd1aWxsYSAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwMDcvZW4gLS0+Ci0gICAgPHRlcnJpdG9yeSBpZD0iQUkiIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgorICAgIDx0ZXJyaXRvcnkgaWQ9IkFJIiBjb3VudHJ5Q29kZT0iMSIgbGVhZGluZ0RpZ2l0cz0iMjY0IgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsyODldXGR7OX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KQEAgLTM5MSw3ICszOTgsOCBAQAogCiAgICAgPCEtLSBBbWVyaWNhbiBTYW1vYSAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwMDQvZW4gLS0+Ci0gICAgPHRlcnJpdG9yeSBpZD0iQVMiIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgorICAgIDx0ZXJyaXRvcnkgaWQ9IkFTIiBjb3VudHJ5Q29kZT0iMSIgbGVhZGluZ0RpZ2l0cz0iNjg0IgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPls2ODldXGR7OX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KQEAgLTYwNSwxMyArNjEzLDUwIEBACiAgICAgPC90ZXJyaXRvcnk+CiAKICAgICA8IS0tIEJvc25pYSBhbmQgSGVyemVnb3ZpbmEgLS0+CisgICAgPCEtLSBodHRwOi8vd3d3LmNyYS5iYS9lbi90ZWxlY29tL251bWJlcmluZy8gLS0+CisgICAgPCEtLSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpLyszODcgLS0+CiAgICAgPHRlcnJpdG9yeSBpZD0iQkEiIGNvdW50cnlDb2RlPSIzODciIGludGVybmF0aW9uYWxQcmVmaXg9IjAwIgotICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXg9IjAiPgorICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXg9IjAiIG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGU9IiROUCRGRyI+CisgICAgICA8YXZhaWxhYmxlRm9ybWF0cz4KKyAgICAgICAgPG51bWJlckZvcm1hdCBwYXR0ZXJuPSIoWzMtNjg5XVxkKShcZHszfSkoXGR7M30pIj4kMSAkMi0kMzwvbnVtYmVyRm9ybWF0PgorICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgorICAgICAgPGdlbmVyYWxEZXNjPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlszLTY4OV1cZHs3fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezYsOH08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgIDwvZ2VuZXJhbERlc2M+CisgICAgICA8Zml4ZWRMaW5lPgorICAgICAgICA8IS0tIEluY2x1ZGluZyBsb2NhbCB0YXJpZmYgbnVtYmVycyBoZXJlLiAtLT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzpbMzVdXGR8NDl8ODEpXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+MzAxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L2ZpeGVkTGluZT4KKyAgICAgIDxtb2JpbGU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+NlsxLTM1Nl1cZHs2fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezh9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjYxMTIzNDU2PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC9tb2JpbGU+CisgICAgICA8dG9sbEZyZWU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+OFswOF1cZHs2fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezh9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjgwMTIzNDU2PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC90b2xsRnJlZT4KKyAgICAgIDxwcmVtaXVtUmF0ZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj45WzAyNDZdXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs4fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj45MDEyMzQ1NjwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvcHJlbWl1bVJhdGU+CisgICAgICA8c2hhcmVkQ29zdD4KKyAgICAgICAgPCEtLSBVc2luZyB0aGlzIGNhdGVnb3J5IHRvIG1vZGVsIG5hdGlvbmFsIHRhcmlmZiBudW1iZXJzIC0gdGhlc2UgYXJlCisgICAgICAgIHVuZGVyIFNoYXJlZCBDb3N0IGluIHRoZSBwbGFuLiAtLT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj44MlxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7OH08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+ODIxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3NoYXJlZENvc3Q+CiAgICAgPC90ZXJyaXRvcnk+CiAKICAgICA8IS0tIEJhcmJhZG9zIC0tPgogICAgIDwhLS0gaHR0cDovL3d3dy5pdHUuaW50L290aC9UMDIwMjAwMDAxMy9lbiAtLT4KLSAgICA8dGVycml0b3J5IGlkPSJCQiIgY291bnRyeUNvZGU9IjEiIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CisgICAgPHRlcnJpdG9yeSBpZD0iQkIiIGNvdW50cnlDb2RlPSIxIiBsZWFkaW5nRGlnaXRzPSIyNDYiCisgICAgICBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgogICAgICAgPGdlbmVyYWxEZXNjPgogICAgICAgICA8IS0tIE5BTlBBIGNvdW50cnkgLSB1c2VzIFVTIGZvcm1hdHRpbmcgcnVsZXMgLS0+CiAgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+WzI4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgpAQCAtNjM5LDggKzY4NCw1MSBAQAogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBCYW5nbGFkZXNoIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IkJEIiBjb3VudHJ5Q29kZT0iODgwIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMCIKLSAgICAgICAgICAgICAgIG5hdGlvbmFsUHJlZml4PSIwIj4KKyAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwMTIvZW4gLS0+CisgICAgPCEtLSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RlbGVwaG9uZV9udW1iZXJzX2luX0JhbmdsYWRlc2ggLS0+CisgICAgPCEtLSBodHRwOi8vd3d3LmJ0cmMuZ292LmJkL2VuZ2luZWVyaW5nL25hdGlvbmFsX251bWJlcmluZ19wbGFuXzIwMDUucGRmIC0tPgorICAgIDx0ZXJyaXRvcnkgaWQ9IkJEIiBjb3VudHJ5Q29kZT0iODgwIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMFsxMl0/IgorICAgICAgICAgICAgICAgcHJlZmVycmVkSW50ZXJuYXRpb25hbFByZWZpeD0iMDAiCisgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeD0iMCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIj4KKyAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjIiIHBhdHRlcm49IigyKShcZHs3fSkiPiQxICQyPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iWzMtNzldMSIgcGF0dGVybj0iKFxkezJ9KShcZHs0LDZ9KSI+JDEgJDI8L251bWJlckZvcm1hdD4KKyAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSJbMy03OV1bMi05XXw4IiBwYXR0ZXJuPSIoXGR7M30pKFxkezMsN30pIj4kMSAkMjwvbnVtYmVyRm9ybWF0PgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjEiIHBhdHRlcm49IihcZHs0fSkoXGR7Nn0pIj4kMSAkMjwvbnVtYmVyRm9ybWF0PgorICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgorICAgICAgPGdlbmVyYWxEZXNjPgorICAgICAgPCEtLSBUaGlzIGlzIHF1aXRlIGNvbXBsZXggc28gd2UgY2FuIGRlZmluZSB0aGF0IG51bWJlcnMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgICAgICA4OCBhcmUgbm90IHBhcnQgb2YgdGhlIHBsYW4sIHNvIHRoZSBjb3VudHJ5IGNvZGUgY2FuIGJlIGFjY3VyYXRlbHkgc3RyaXBwZWQKKyAgICAgICAgICAgICBvZmYuIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsyLTc5XVxkezUsOX18MVxkezl9fDhbMC03XVxkezQsOH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs2LDEwfTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgPC9nZW5lcmFsRGVzYz4KKyAgICAgIDxmaXhlZExpbmU+CisgICAgICAgIDwhLS0gVGhlcmUgd2FzIGEgcGxhbiB0byBtb3ZlIHRvIDEwIGRpZ2l0IGZpeGVkLWxpbmUgbnVtYmVycywgYnV0IHRoaXMgZG9lcyBub3Qgc2VlbSB0bworICAgICAgICAgICAgIGhhdmUgYmVlbiByZWFsaXNlZCwganVkZ2luZyBieSBvbmxpbmUgbnVtYmVycyBhbmQgd2lraXBlZGlhLiBUaGVzZQorICAgICAgICAgICAgIHBhdHRlcm5zIGFyZSBncm91cGVkIGZpcnN0IGJ5IGxlYWRpbmcgZGlnaXQsIHRoZW4gd2l0aGluIGJ5IG51bWJlcgorICAgICAgICAgICAgIG9mIGRpZ2l0cy4gU2V2ZXJhbCBEaGFrYSBwcmVmaXhlcyAoMDIgNzMxLCA3NTEgZXRjKSBhcmUgaW5jbHVkZWQKKyAgICAgICAgICAgICBkZXNwaXRlIG5vdCBiZWluZyBtZW50aW9uZWQgb24gdGhlIHdpa2lwZWRpYSBwYWdlIGR1ZSB0byBvbmxpbmUKKyAgICAgICAgICAgICBldmlkZW5jZS4gQW5vdGhlciBvZGRpdHkgaXMgQ2hpdHRhZ29uZyAtIHNvbWUgbnVtYmVycyBoYXZlIGEKKyAgICAgICAgICAgICBsZWFkaW5nIDIsIG90aGVycyBkbyBub3QgLSBib3RoIGFyZSBhbGxvd2VkIGZvciBub3cuIC0tPgorICAgICAgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+Mig/OjdcZDF8OCg/OlswMjZdMXxbMTM3OV1bMS01XXw4WzEtOF0pfDkoPzowWzAtMl18MVsxLTRdfDNbMy01XXw1WzU2XXw2WzY3XXw3MXw4WzA3OF0pKVxkezR9fDMoPzpbNi04XTF8KD86MFsyM118WzI1XVsxMl18ODJ8NDE2KVxkfCg/OjMxfDEyP1s1LTddKVxkezJ9KVxkezN9fDQoPzooPzowMnxbNDldNnxbNjhdMSl8KD86MFsxM118MjFcZD98WzIzXTJ8WzQ1N11bMTJdfDZbMjhdKVxkfCg/OjIzfFszOV0xKVxkezJ9fDFcZHszfSlcZHszfXw1KD86KD86WzQ1Ny05XTF8NjIpfCg/OjFcZD98MlsxMl18M1sxLTNdfDUyKVxkfDYxezJ9KXw2KD86WzQ1XTF8KD86MTF8MlsxNV18WzM5XTEpXGR8KD86WzA2LThdMXw2MilcZHsyfSl8Nyg/Oig/OjMyfDkxKXwoPzowMnwzMXxbNjddWzEyXSlcZHxbNDU4XTFcZHsyfXwyMVxkezN9KVxkezN9fDgoPzooPzo0WzEyXXxbNS03XTJ8MVxkPyl8KD86MHwzWzEyXXxbNS03XTF8MjE3KVxkKVxkezR9fDkoPzpbMzVdMXwoPzpbMDI0XTJ8ODEpXGR8KD86MXxbMjRdMSlcZHsyfSlcZHszfTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezYsOX08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+MjcxMTEyMzQ8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L2ZpeGVkTGluZT4KKyAgICAgIDxtb2JpbGU+CisgICAgICAgIDwhLS0gUHJlc3VtaW5nIHRoYXQgbW9iaWxlIG51bWJlcnMgd2l0aCB0aGUgcHJlZml4ZXMgNjYsIDM3LCA0NCBhbmQgMzggbXVzdCBiZSBmb2xsb3dlZCBieQorICAgICAgICAgICAgIG51bWJlcnMgWzAyLTldIG9yIHRoZXkgd291bGQgY2xhc2ggd2l0aCBmaXhlZC1saW5lIGNvZGVzLiBBY2NvcmRpbmcKKyAgICAgICAgICAgICB0byB0aGUgcGxhbiwgbW9iaWxlIG51bWJlcnMgc2hvdWxkIGJlIG1vdmluZyB0byAxWzEzLTldIGFueXdheS4gLS0+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+KD86MVsxMy05XVxkfCg/OjNbNzhdfDQ0KVswMi05XXw2KD86NDR8NlswMi05XSkpXGR7N308L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHsxMH08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+MTgxMjM0NTY3ODwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvbW9iaWxlPgorICAgICAgPHRvbGxGcmVlPgorICAgICAgICA8IS0tIE5vdGU6IEluY2x1ZGluZyBUZWxlLXZvdGluZyBudW1iZXJzIGhlcmUgYXMgdGhleSBhcmUgZnJlZSBvZiBjaGFyZ2UuIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjgwWzAzXVxkezd9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7MTB9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjgwMDEyMzQ1Njc8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3RvbGxGcmVlPgogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBCZWxnaXVtIC0tPgpAQCAtNzExLDcgKzc5OSw3IEBACiAgICAgICA8bW9iaWxlPgogICAgICAgICA8IS0tIEFkZGluZyA3NSBmb3IgWmFpbiwgQnVya2luYSBGYXNvLiBUaGlzIGlzIGFjdHVhbGx5IHVzZWQgaW4gdGhlCiAgICAgICAgIGhlbHAtbGluZSBudW1iZXIgZm9yIHRoZW0uIC0tPgotICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjcoPzpbMDE1NjhdXGR8MlswLTRdfDRbMDFdfDVbMDEzNDYtOV0pXGR7NX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj43KD86WzA0LTZdXGR8MVswLTQ4OV18MlswLThdfDhbMDEzLTldfDkwKVxkezV9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxleGFtcGxlTnVtYmVyPjcwMTIzNDU2PC9leGFtcGxlTnVtYmVyPgogICAgICAgPC9tb2JpbGU+CiAgICAgPC90ZXJyaXRvcnk+CkBAIC04MzAsMTMgKzkxOCwzNiBAQAogICAgICAgPC92b2lwPgogICAgIDwvdGVycml0b3J5PgogCi0gICAgPCEtLSBGcmVuY2ggRGVwdC4gb2YgR3VhZGVsb3VwZSAtLT4KLSAgICA8dGVycml0b3J5IGlkPSJCTCIgY291bnRyeUNvZGU9IjU5MCIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDAiPgorICAgIDwhLS0gU2FpbnQgQmFydGjDqWxlbXksIEZyZW5jaCBBbnRpbGxlcyAtLT4KKyAgICA8IS0tIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgb3ZlcmxhcCB3aXRoIHBob25lIG51bWJlcnMgZnJvbSBTYWludCBNYXJ0aW4gYW5kCisgICAgR3VhZGVsb3VwZS4gVGhlIG5hdGlvbmFsIG51bWJlcmluZyBwbGFuIGRvZXMgbm90IHNwZWNpZnkgYW55IFN0CisgICAgQmFydGjDqWxlbXktc3BlY2lmaWMgbnVtYmVyaW5nIHByZWZpeGVzLCBidXQgaXQgYXBwZWFycyBmcm9tIHNlYXJjaGVzIGluCisgICAgb25saW5lIHdoaXRlIGFuZCB5ZWxsb3cgcGFnZXMgdGhhdCBhIHN1YnNldCBvZiB0aGUgcHJlZml4ZXMgYXZhaWxhYmxlIGluCisgICAgR3VhZGVsb3VwZSBhcmUgdXNlZC4gSW4gdGhlc2UgY2FzZXMsIGlmIGdldFJlZ2lvbkNvZGVGb3JOdW1iZXIgaXMgdXNlZCwgb25lCisgICAgb2YgdGhlc2UgcmVnaW9uIGNvZGVzIHdpbGwgYmUgcmV0dXJuZWQsIGFsdGhvdWdoIG51bWJlcnMgd2lsbCBiZSB2YWxpZCBmb3IKKyAgICBib3RoIHJlZ2lvbnMuIC0tPgorICAgIDwhLS0gaHR0cDovL3d3dy5pdHUuaW50L290aC9UMDIwMjAwMDA1OC9lbiAtLT4KKyAgICA8dGVycml0b3J5IGlkPSJCTCIgY291bnRyeUNvZGU9IjU5MCIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDAiCisgICAgICBuYXRpb25hbFByZWZpeD0iMCI+CisgICAgICA8IS0tIEZvcm1hdHRpbmcgcnVsZXMgYm9ycm93ZWQgZnJvbSBHdWFkZWxvdXBlLiAtLT4KKyAgICAgIDxnZW5lcmFsRGVzYz4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bNTZdXGR7OH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgPC9nZW5lcmFsRGVzYz4KKyAgICAgIDxmaXhlZExpbmU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+NTkwKD86Mls3LTldfDVbMTJdfDg3KVxkezR9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjU5MDI3MTIzNDwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvZml4ZWRMaW5lPgorICAgICAgPG1vYmlsZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj42OTAoPzoxMHwyWzI3XXw2Nnw3N3w4Wzc4XSlcZHs0fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj42OTAyMjEyMzQ8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L21vYmlsZT4KICAgICA8L3RlcnJpdG9yeT4KIAogICAgIDwhLS0gQmVybXVkYSAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwMTgvZW4gLS0+Ci0gICAgPHRlcnJpdG9yeSBpZD0iQk0iIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgorICAgIDx0ZXJyaXRvcnkgaWQ9IkJNIiBjb3VudHJ5Q29kZT0iMSIgbGVhZGluZ0RpZ2l0cz0iNDQxIgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPls0ODldXGR7OX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KQEAgLTkwNCw3ICsxMDE1LDkgQEAKICAgICAgIGNvZGUuLS0+CiAgICAgICA8YXZhaWxhYmxlRm9ybWF0cz4KICAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSJbMS05XVsxLTldIgotICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihcZHsyfSkoXGR7NH0pKFxkezR9KSI+KCQxKSAkMi0kMzwvbnVtYmVyRm9ybWF0PgorICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihcZHsyfSkoXGR7NH0pKFxkezR9KSIKKyAgICAgICAgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlPSIoJEZHKSIKKyAgICAgICAgICAgICAgICAgICAgICBjYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlPSIkTlAgJENDICRGRyI+JDEgJDItJDM8L251bWJlckZvcm1hdD4KICAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSI0MDB8MzAwMyIgcGF0dGVybj0iKFszNF0wMFxkKShcZHs0fSkiPiQxLSQyPC9udW1iZXJGb3JtYXQ+CiAgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iWzM1ODldMDAiIG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGU9IiROUCRGRyIKICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPSIoWzM1ODldMDApKFxkezIsM30pKFxkezR9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KQEAgLTkzOCw3ICsxMDUxLDggQEAKIAogICAgIDwhLS0gQmFoYW1hcyAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9kbXNfcHViL2l0dS10L290aC8wMi8wMi9UMDIwMjAwMDAxMDAwMDFNU1dFLnBkZiAtLT4KLSAgICA8dGVycml0b3J5IGlkPSJCUyIgY291bnRyeUNvZGU9IjEiIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CisgICAgPHRlcnJpdG9yeSBpZD0iQlMiIGNvdW50cnlDb2RlPSIxIiBsZWFkaW5nRGlnaXRzPSIyNDIiCisgICAgICBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgogICAgICAgPGdlbmVyYWxEZXNjPgogICAgICAgICA8IS0tIE5BTlBBIGNvdW50cnkgLSB1c2VzIFVTIGZvcm1hdHRpbmcgcnVsZXMgLS0+CiAgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+WzI4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgpAQCAtMTAyOSw4ICsxMTQzLDQ2IEBACiAgICAgPC90ZXJyaXRvcnk+CiAKICAgICA8IS0tIEJlbGFydXMgLS0+CisgICAgPCEtLSBodHRwOi8vZW5nLmJlbHRlbGVjb20uYnkvaW5mby9udW1iZXJpbmcvIC0tPgorICAgIDwhLS0gSW5mb3JtYXRpb24gb24gbmF0aW9uYWwgcHJlZml4IHByb3ZpZGVkIGJ5IG1haGFuaW9rIC0tPgogICAgIDx0ZXJyaXRvcnkgaWQ9IkJZIiBjb3VudHJ5Q29kZT0iMzc1IiBpbnRlcm5hdGlvbmFsUHJlZml4PSI4fjEwIgotICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXg9IjgiPgorICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXhGb3JQYXJzaW5nPSI4MD8iIG5hdGlvbmFsUHJlZml4PSI4Ij4KKyAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IlsxLTRdIgorICAgICAgICAgIG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGU9IiROUCAwJEZHIgorICAgICAgICAgIHBhdHRlcm49IihbMS00XVxkKShcZHszfSkoXGR7NH0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9Ils4OV0iCisgICAgICAgICAgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QICRGRyIKKyAgICAgICAgICBwYXR0ZXJuPSIoWzg5XVxkezJ9KShcZHszfSkoXGR7NH0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgorICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgorICAgICAgPGdlbmVyYWxEZXNjPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsxMi00XVxkezh9fFs4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8IS0tIE51bWJlcnMgYXJlIG9mdGVuIHdyaXR0ZW4gd2l0aG91dCB0aGUgY2l0eSBjb2RlLiAtLT4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs3LDEwfTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgPC9nZW5lcmFsRGVzYz4KKyAgICAgIDxmaXhlZExpbmU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+KD86MSg/OjUoPzoxWzEtNV18MlxkfDZbMS00XXw5WzEtN10pfDYoPzpbMjM1XVxkfDRbMS03XSl8N1xkezJ9KXwyKD86MSg/OlsyNDZdXGR8M1swLTM1LTldfDVbMS05XSl8Mig/OlsyMzVdXGR8NFswLThdKXwzKD86MlxkfDNbMDItNzldfDRbMDI0LTddfDVbMC03XSkpKVxkezV9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7Nyw5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8IS0tIFVzaW5nIHRlc3QgbnVtYmVyIGZvciBHcm9kbm8gZnJvbSB0aGUgcGxhbi4gLS0+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjE1MjQ1MDkxMTwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvZml4ZWRMaW5lPgorICAgICAgPG1vYmlsZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzoyKD86NVs2NzldfDlbMS05XSl8MzNcZHw0NFxkKVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7OX08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPCEtLSBVc2luZyB0ZXN0IG51bWJlciBmb3IgQmVsQ2VsIGZyb20gdGhlIHBsYW4uIC0tPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj4yOTQ5MTE5MTE8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L21vYmlsZT4KKyAgICAgIDx0b2xsRnJlZT4KKyAgICAgICAgPCEtLSBQdXR0aW5nIEludGVyYWN0aXZlIFBvbGxpbmcgU2VydmljZSAoZnJlZSkgaGVyZSB0b28uIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjgwWzEzXVxkezd9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7MTB9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjgwMTEyMzQ1Njc8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3RvbGxGcmVlPgorICAgICAgPHByZW1pdW1SYXRlPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjkwMlxkezd9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7MTB9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjkwMjEyMzQ1Njc8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3ByZW1pdW1SYXRlPgogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBCZWxpemUgLS0+CkBAIC0xMzc3LDcgKzE1MjksMjMgQEAKICAgICA8L3RlcnJpdG9yeT4KIAogICAgIDwhLS0gQ29zdGEgUmljYSAtLT4KKyAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwMzAvZW4gLS0+CiAgICAgPHRlcnJpdG9yeSBpZD0iQ1IiIGNvdW50cnlDb2RlPSI1MDYiIGludGVybmF0aW9uYWxQcmVmaXg9IjAwIj4KKyAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgorICAgICAgICA8bnVtYmVyRm9ybWF0IHBhdHRlcm49IihbMjhdXGR7M30pKFxkezR9KSI+JDEgJDI8L251bWJlckZvcm1hdD4KKyAgICAgIDwvYXZhaWxhYmxlRm9ybWF0cz4KKyAgICAgIDxnZW5lcmFsRGVzYz4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bMjhdXGR7N308L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs4fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgPC9nZW5lcmFsRGVzYz4KKyAgICAgIDxmaXhlZExpbmU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+MlsyNC03XVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjIyMTIzNDU2PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC9maXhlZExpbmU+CisgICAgICA8bW9iaWxlPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjhbMzhdXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+ODMxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L21vYmlsZT4KICAgICA8L3RlcnJpdG9yeT4KIAogICAgIDwhLS0gQ3ViYSAtLT4KQEAgLTE1MDMsOCArMTY3MSw5IEBACiAgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iMVs1LTddIiBwYXR0ZXJuPSIoMVs1LTddXGQpKFxkezcsOH0pIj4kMSAkMjwvbnVtYmVyRm9ybWF0PgogICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjE4MCIgcGF0dGVybj0iKDE4MCkoXGQpKFxkezQsMTB9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KICAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSI3MDAiIHBhdHRlcm49Iig3MDApKFxkezR9KShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+Ci0gICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iODAwfDkwMFsxMzVdIgotICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihbODldMDApKFxkKShcZHs2fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iODAwIiBwYXR0ZXJuPSIoODAwKShcZHs3LDl9KSI+JDEgJDI8L251bWJlckZvcm1hdD4KKyAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSI5MDBbMTM1XSIKKyAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPSIoOTAwKShcZCkoXGR7Nn0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgogICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjkwMDkiIHBhdHRlcm49Iig5MDApKDkpKFxkezd9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KICAgICAgIDwvYXZhaWxhYmxlRm9ybWF0cz4KICAgICAgIDxnZW5lcmFsRGVzYz4KQEAgLTE1MjksOCArMTY5OCw4IEBACiAgICAgICAgIDxleGFtcGxlTnVtYmVyPjE1MTIzNDU2Nzg5PC9leGFtcGxlTnVtYmVyPgogICAgICAgPC9tb2JpbGU+CiAgICAgICA8dG9sbEZyZWU+Ci0gICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+ODAwXGR7N308L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KLSAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHsxMH08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj44MDBcZHs3LDl9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7MTAsMTJ9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CiAgICAgICAgIDxleGFtcGxlTnVtYmVyPjgwMDEyMzQ1Njc8L2V4YW1wbGVOdW1iZXI+CiAgICAgICA8L3RvbGxGcmVlPgogICAgICAgPHByZW1pdW1SYXRlPgpAQCAtMTYwOSw3ICsxNzc4LDggQEAKIAogICAgIDwhLS0gRG9taW5pY2EgLS0+CiAgICAgPCEtLSBodHRwOi8vd3d3Lml0dS5pbnQvb3RoL1QwMjAyMDAwMDNCL2VuIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IkRNIiBjb3VudHJ5Q29kZT0iMSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KKyAgICA8dGVycml0b3J5IGlkPSJETSIgY291bnRyeUNvZGU9IjEiIGxlYWRpbmdEaWdpdHM9Ijc2NyIKKyAgICAgIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CiAgICAgICA8Z2VuZXJhbERlc2M+CiAgICAgICAgIDwhLS0gTkFOUEEgY291bnRyeSAtIHVzZXMgVVMgZm9ybWF0dGluZyBydWxlcyAtLT4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bNy05XVxkezl9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CkBAIC0xNjM3LDE4ICsxODA3LDI0IEBACiAgICAgPC90ZXJyaXRvcnk+CiAKICAgICA8IS0tIERvbWluaWNhbiBSZXAuIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IkRPIiBjb3VudHJ5Q29kZT0iMSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KKyAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwM0MvZW4gLS0+CisgICAgPHRlcnJpdG9yeSBpZD0iRE8iIGNvdW50cnlDb2RlPSIxIiBsZWFkaW5nRGlnaXRzPSI4WzAyNF05IgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPls4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgogICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezcsMTB9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CiAgICAgICA8L2dlbmVyYWxEZXNjPgogICAgICAgPGZpeGVkTGluZT4KLSAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj44WzAyXTlbMi05XVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDwhLS0gV2UgY291bGQgYmUgbW9yZSBkZXRhaWxlZCBoZXJlLCBhcyB0aGUgbWV0YWRhdGEgY29udGFpbnMKKyAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgbW9iaWxlL2ZpeGVkLWxpbmUgcHJlZml4ZXMsIGJ1dCB0aGUgZGF0YQorICAgICAgICBpcyBpbmNvbXBsZXRlLCBzbyB3ZSByZXN0cmljdCBvdXJzZWx2ZXMgdG8gYSBtb3JlIGdlbmVyaWMgcnVsZSBmb3IKKyAgICAgICAgbm93Li0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjhbMDI0XTlbMi05XVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxleGFtcGxlTnVtYmVyPjgwOTIzNDU2Nzg8L2V4YW1wbGVOdW1iZXI+CiAgICAgICA8L2ZpeGVkTGluZT4KICAgICAgIDxtb2JpbGU+Ci0gICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+OFswMl05WzItOV1cZHs2fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjhbMDI0XTlbMi05XVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxleGFtcGxlTnVtYmVyPjgwOTIzNDU2Nzg8L2V4YW1wbGVOdW1iZXI+CiAgICAgICA8L21vYmlsZT4KICAgICAgIDx0b2xsRnJlZT4KQEAgLTE3NzEsNiArMTk0Nyw5IEBACiAgICAgPHRlcnJpdG9yeSBpZD0iRUciIGNvdW50cnlDb2RlPSIyMCIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDAiCiAgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeD0iMCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIj4KICAgICAgICA8YXZhaWxhYmxlRm9ybWF0cz4KKyAgICAgICAgIDwhLS0gTm90ZSB0aGF0IG5vIGV4cGxpY2l0IGZvcm1hdHRpbmcgcnVsZSBpcyBoZXJlIGZvciA1LWRpZ2l0IG51bWJlcnMKKyAgICAgICAgIHN0YXJ0aW5nIHdpdGggYSAxNiBvciAxOS4gVGhlc2UgYXJlIGZvcm1hdHRlZCB3aXRob3V0IG5hdGlvbmFsIHByZWZpeCwKKyAgICAgICAgIGFzIGEgYmxvY2ssIHNvIGRvIG5vdCBuZWVkIHRvIGJlIGxpc3RlZCBoZXJlLiAtLT4KICAgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iMiIgcGF0dGVybj0iKDIpKFxkezh9KSI+JDEgJDI8L251bWJlckZvcm1hdD4KICAgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iMyIgcGF0dGVybj0iKDMpKFxkezd9KSI+JDEgJDI8L251bWJlckZvcm1hdD4KICAgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iWzE0LTZdfFs4OV1bMi05XSIKQEAgLTE3NzksMTIgKzE5NTgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj0iKFs4OV0wMCkoXGR7M30pKFxkezR9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KICAgICAgICA8L2F2YWlsYWJsZUZvcm1hdHM+CiAgICAgICA8Z2VuZXJhbERlc2M+Ci0gICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+WzEtNjg5XVxkezcsOX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KLSAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs3LDEwfTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjFcZHs0LDl9fFsyLTY4OV1cZHs3LDl9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7NSwxMH08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KICAgICAgIDwvZ2VuZXJhbERlc2M+CiAgICAgICA8Zml4ZWRMaW5lPgotICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPig/OjFbMzVdWzIzXXwyWzIzXVxkfDNcZHw0KD86MFsyLTRdfFs1NzhdWzIzXXw2NCl8NSg/OjBbMjM0XXxbNTddWzIzXSl8NlsyNC02ODldM3w4KD86WzI4XVsyLTRdfDQyfDZbMjNdKXw5KD86WzI1XTJ8M1syNF18NlsyM118N1syLTRdKSlcZHs2fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgotICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezcsOX08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPCEtLSBTaG9ydCBudW1iZXJzIHVzZWQgZm9yIGJ1c2luZXNzZXMgKHN0YXJ0aW5nIHdpdGggMTYgb3IgMTkpIGFyZQorICAgICAgICBjb3ZlcmVkIGhlcmUuIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPig/OjFbMzVdWzIzXXwyWzIzXVxkfDNcZHw0KD86MFsyLTRdfFs1NzhdWzIzXXw2NCl8NSg/OjBbMjM0XXxbNTddWzIzXSl8NlsyNC02ODldM3w4KD86WzI4XVsyLTRdfDQyfDZbMjNdKXw5KD86WzI1XTJ8M1syNF18NlsyM118N1syLTRdKSlcZHs2fXwxWzY5XVxkezN9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7NSw5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgogICAgICAgICA8ZXhhbXBsZU51bWJlcj4yMzQ1Njc4OTA8L2V4YW1wbGVOdW1iZXI+CiAgICAgICA8L2ZpeGVkTGluZT4KICAgICAgIDxtb2JpbGU+CkBAIC0xOTUwLDEzICsyMTMxLDEzIEBACiAgICAgPHRlcnJpdG9yeSBpZD0iRlIiIGNvdW50cnlDb2RlPSIzMyIgaW50ZXJuYXRpb25hbFByZWZpeD0iWzA0NTc5XTAiCiAgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeD0iMCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIj4KICAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgotICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IlsxLTY5XSIKLSAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPSIoWzEtNjldKShcZHsyfSkoXGR7Mn0pKFxkezJ9KShcZHsyfSkiPiQxICQyICQzICQ0ICQ1PC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iWzEtNzldIgorICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihbMS03OV0pKFxkezJ9KShcZHsyfSkoXGR7Mn0pKFxkezJ9KSI+JDEgJDIgJDMgJDQgJDU8L251bWJlckZvcm1hdD4KICAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSI4IiBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlPSIkTlAgJEZHIgogICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49Iig4XGR7Mn0pKFxkezJ9KShcZHsyfSkoXGR7Mn0pIj4kMSAkMiAkMyAkNDwvbnVtYmVyRm9ybWF0PgogICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgogICAgICAgPGdlbmVyYWxEZXNjPgotICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsxLTY4OV1cZHs4fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsxLTldXGR7OH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KICAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgogICAgICAgPC9nZW5lcmFsRGVzYz4KICAgICAgIDxmaXhlZExpbmU+CkBAIC0yMDE4LDcgKzIxOTksOCBAQAogICAgIDwhLS0gTm90ZSB0aGF0IHRoaXMgZXhjbHVkZXMgSXNsZSBvZiBNYW4sIEplcnNleSBhbmQgR3Vlcm5zZXkgcHJlZml4ZXMgZm9yCiAgICAgdGhlIHB1cnBvc2VzIG9mIHZhbGlkYXRpb24sIGFsdGhvdWdoIHRoZSBmb3JtYXR0aW5nIHJ1bGVzIGFyZSBzaGFyZWQuIC0tPgogICAgIDx0ZXJyaXRvcnkgaWQ9IkdCIiBjb3VudHJ5Q29kZT0iNDQiIGludGVybmF0aW9uYWxQcmVmaXg9IjAwIgotICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXg9IjAiIHByZWZlcnJlZEV4dG5QcmVmaXg9IiB4IiBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlPSIkTlAkRkciPgorICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXg9IjAiIHByZWZlcnJlZEV4dG5QcmVmaXg9IiB4IiBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlPSIkTlAkRkciCisgICAgICAgICAgICAgICBtYWluQ291bnRyeUZvckNvZGU9InRydWUiID4KICAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgogICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IlsyM118NTUiCiAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj0iKFsyMzVdXGQpKFxkezR9KShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CkBAIC0yMDk2LDcgKzIyNzgsOCBAQAogCiAgICAgPCEtLSBHcmVuYWRhIC0tPgogICAgIDwhLS0gaHR0cDovL3d3dy5pdHUuaW50L290aC9UMDIwMjAwMDA1Ny9lbiAtLT4KLSAgICA8dGVycml0b3J5IGlkPSJHRCIgY291bnRyeUNvZGU9IjEiIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CisgICAgPHRlcnJpdG9yeSBpZD0iR0QiIGNvdW50cnlDb2RlPSIxIiBsZWFkaW5nRGlnaXRzPSI0NzMiCisgICAgICBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgogICAgICAgPGdlbmVyYWxEZXNjPgogICAgICAgICA8IS0tIE5BTlBBIGNvdW50cnkgLSB1c2VzIFVTIGZvcm1hdHRpbmcgcnVsZXMgLS0+CiAgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+WzQ4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgpAQCAtMjMwMiwyOSArMjQ4NSw2MSBAQAogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBHdWFkZWxvdXBlIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IkdQIiBjb3VudHJ5Q29kZT0iNTkwIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMCI+CisgICAgPCEtLSBodHRwOi8vd3d3Lml0dS5pbnQvb3RoL1QwMjAyMDAwMDU4L2VuIC0tPgorICAgIDx0ZXJyaXRvcnkgaWQ9IkdQIiBjb3VudHJ5Q29kZT0iNTkwIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMCIKKyAgICAgICAgICAgICAgIG1haW5Db3VudHJ5Rm9yQ29kZT0idHJ1ZSIgbmF0aW9uYWxQcmVmaXg9IjAiCisgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlPSIkTlAkRkciPgorICAgICAgPGF2YWlsYWJsZUZvcm1hdHM+CisgICAgICAgIDxudW1iZXJGb3JtYXQgcGF0dGVybj0iKFs1Nl05MCkoXGR7Mn0pKFxkezR9KSI+JDEgJDItJDM8L251bWJlckZvcm1hdD4KKyAgICAgIDwvYXZhaWxhYmxlRm9ybWF0cz4KKyAgICAgIDxnZW5lcmFsRGVzYz4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bNTZdXGR7OH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgPC9nZW5lcmFsRGVzYz4KKyAgICAgIDxmaXhlZExpbmU+CisgICAgICAgIDwhLS0gVGhlIHBsYW4gc2F5cyA1OTAxMSBhbmQgNTkwMTIgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIGJ1dCBpcyBmcm9tCisgICAgICAgIDIwMDYgYW5kIG9ubGluZSBleGFtcGxlcyBjYW4gYmUgZm91bmQuIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjU5MCg/OjFbMTJdfDJbMC02OF18M1syOF18NFsxMjYtOF18NVswNjddfDZbMDE4XXxbODldXGQpXGR7NH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+NTkwMjAxMjM0PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC9maXhlZExpbmU+CisgICAgICA8bW9iaWxlPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjY5MCg/OjAwfFszLTVdXGR8NlswLTU3LTldfDdbMS02XXw4WzAtNl18OVswOV0pXGR7NH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+NjkwMzAxMjM0PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC9tb2JpbGU+CiAgICAgPC90ZXJyaXRvcnk+CiAKICAgICA8IS0tIEVxdWF0b3JpYWwgR3VpbmVhIC0tPgogICAgIDwhLS0gaHR0cDovL3d3dy5pdHUuaW50L290aC9UMDIwMjAwMDA0MS9lbiAtLT4KICAgICA8dGVycml0b3J5IGlkPSJHUSIgY291bnRyeUNvZGU9IjI0MCIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDAiPgogICAgICAgPGF2YWlsYWJsZUZvcm1hdHM+Ci0gICAgICAgIDwhLS0gRm9sbG93cyB5ZWxsb3cgcGFnZSBmb3JtYXQgZnJvbQotICAgICAgICAgICAgIGh0dHA6Ly9tYWxhYm9waG9uZWJvb2suY29tL2VuL2FyZWEvYmF0YS8gLS0+Ci0gICAgICAgIDxudW1iZXJGb3JtYXQgcGF0dGVybj0iKFxkezJ9KShcZHsyfSkoXGR7Mn0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IlsyMzVdIiBwYXR0ZXJuPSIoXGR7Mn0pKFxkezN9KShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iWzg5OV0iIHBhdHRlcm49IihcZHszfSkoXGR7Nn0pIj4kMSAkMjwvbnVtYmVyRm9ybWF0PgogICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgogICAgICAgPGdlbmVyYWxEZXNjPgotICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlswMjU2XVxkezV9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+Ci0gICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7Nn08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bMjM1ODldXGR7OH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPCEtLSBUaGUgNiBoZXJlIHJlZmVycyB0byB0aGUgb2xkIG51bWJlciBwYXR0ZXJuIC0gbnVtYmVycyB3cml0dGVuIGRvd24KKyAgICAgICAgbWF5IHN0aWxsIGJlIHRoaXMgbGVuZ3RoIGFsdGhvdWdoIHRoZXkgY2FuIG5vIGxvbmdlciBiZSBkaWFsbGVkLiAtLT4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs2LDl9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CiAgICAgICA8L2dlbmVyYWxEZXNjPgogICAgICAgPGZpeGVkTGluZT4KLSAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4wWzQ2LTldXGR7NH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KLSAgICAgICAgPGV4YW1wbGVOdW1iZXI+MDQxMjM0PC9leGFtcGxlTnVtYmVyPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjMoPzozKD86M1xkWzctOV18WzAtMjQtOV1cZFs0Nl0pfDVcZHsyfVs3LTldKVxkezR9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjMzMzA5MTIzNDwvZXhhbXBsZU51bWJlcj4KICAgICAgIDwvZml4ZWRMaW5lPgogICAgICAgPG1vYmlsZT4KLSAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bMjU2XVxkezV9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+Ci0gICAgICAgIDxleGFtcGxlTnVtYmVyPjIxMjM0NTwvZXhhbXBsZU51bWJlcj4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzoyMjJ8NTUxKVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjIyMjEyMzQ1NjwvZXhhbXBsZU51bWJlcj4KICAgICAgIDwvbW9iaWxlPgorICAgICAgPCEtLSBOb3RlIHRoYXQgcGVyc29uYWwgYW5kIHNoYXJlZENvc3QgbnVtYmVycyBhcmUgc2FpZCB0byBnbyB1bmRlciBoZXJlCisgICAgICB0b28gLSBob3BlZnVsbHkgd2hlbiB0aGV5IHN0YXJ0IGFsbG9jYXRpbmcgdGhlbSB0aGVyZSB3aWxsIGJlIGEKKyAgICAgIGRpZmZlcmVudGlhdGlvbiBvZiBwcmVmaXhlcywgYnV0IHRoaXMgaXMgbm90IGNsZWFyIG5vdy4gLS0+CisgICAgICA8dG9sbEZyZWU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+ODBcZFsxLTldXGR7NX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+ODAwMTIzNDU2PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC90b2xsRnJlZT4KKyAgICAgIDxwcmVtaXVtUmF0ZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj45MFxkWzEtOV1cZHs1fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj45MDAxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3ByZW1pdW1SYXRlPgogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBHcmVlY2UgLS0+CkBAIC0yMzc3LDcgKzI1OTIsOCBAQAogCiAgICAgPCEtLSBHdWFtIC0tPgogICAgIDwhLS0gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS8lMkIxXzY3MSAtLT4KLSAgICA8dGVycml0b3J5IGlkPSJHVSIgY291bnRyeUNvZGU9IjEiIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CisgICAgPHRlcnJpdG9yeSBpZD0iR1UiIGNvdW50cnlDb2RlPSIxIiBsZWFkaW5nRGlnaXRzPSI2NzEiCisgICAgICBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgogICAgICAgPGdlbmVyYWxEZXNjPgogICAgICAgICA8IS0tIE5BTlBBIGNvdW50cnkgLSB1c2VzIFVTIGZvcm1hdHRpbmcgcnVsZXMgLS0+CiAgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+WzY4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgpAQCAtMjQ3Niw2ICsyNjkyLDcgQEAKIAogICAgIDwhLS0gQ3JvYXRpYSAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwMzIvZW4gLS0+CisgICAgPCEtLSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpLyUyQjM4NSAtLT4KICAgICA8dGVycml0b3J5IGlkPSJIUiIgY291bnRyeUNvZGU9IjM4NSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDAiCiAgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeD0iMCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIj4KICAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgpAQCAtMjQ4MywyNSArMjcwMCwyNiBAQAogICAgICAgICAgICAgIHdlYnNpdGVzIGFyZSBmb3JtYXR0ZWQgMSBYWFhYIFhYWCwgc28gd2UgcHJlZmVyIHRoYXQgZm9ybWF0dGluZwogICAgICAgICAgICAgIGhlcmUuIFRoZXNlIHNhbWUgc291cmNlcyBwcmVmZXIgWFhYIFhYWCB0byBYWCBYWFhYIGFzIHdlbGwuIC0tPgogICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjEiIHBhdHRlcm49IigxKShcZHs0fSkoXGR7M30pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgotICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjYyIiBwYXR0ZXJuPSIoNjIpKFxkezR9KShcZHszfSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iNlswMjldIiBwYXR0ZXJuPSIoNlswMjldKShcZHs0fSkoXGR7M30pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgogICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IlsyLTVdIgogICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihbMi01XVxkKShcZHszfSkoXGR7M30pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgogICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjkiCiAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj0iKDlbMTI1ODldKShcZHszLDR9KShcZHszLDR9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KICAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSI5IgogICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49Iig5WzEyNTg5XSkoXGR7Myw0fSkoXGR7M30pKFxkezN9KSI+JDEgJDIgJDMgJDQ8L251bWJlckZvcm1hdD4KLSAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSI2MCIgcGF0dGVybj0iKDYwKShcZHs0fSkoXGR7M30pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgotICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjYxIiBwYXR0ZXJuPSIoNjEpKFxkezR9KSI+JDEgJDI8L251bWJlckZvcm1hdD4KLSAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSI4IiBwYXR0ZXJuPSIoODAwKShcZHsyfSkoXGR7MiwzfSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+Ci0gICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iOCIgcGF0dGVybj0iKDgwMCkoXGR7Myw0fSkoXGR7M30pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjZbMTQ1XXw3IiBwYXR0ZXJuPSIoXGR7Mn0pKFxkezJ9KShcZHsyLDN9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KKyAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSI2WzE0NV18NyIgcGF0dGVybj0iKFxkezJ9KShcZHszLDR9KShcZHszfSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iOCIgcGF0dGVybj0iKDgwWzAxXSkoXGR7Mn0pKFxkezIsM30pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjgiIHBhdHRlcm49Iig4MFswMV0pKFxkezMsNH0pKFxkezN9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KICAgICAgIDwvYXZhaWxhYmxlRm9ybWF0cz4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bMS03XVxkezUsOH18Wzg5XVxkezYsMTF9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7NiwxMn08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KICAgICAgIDwvZ2VuZXJhbERlc2M+CiAgICAgICA8Zml4ZWRMaW5lPgotICAgICAgICA8IS0tIFN1cHBvcnRpbmcgMDYyICh1bml2ZXJzYWwgYWNjZXNzKSBudW1iZXJzIGhlcmUgdG9vLiAtLT4KLSAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzoxfDYyKVxkezd9fCg/OjJbMC0zXXwzWzEtNV18NFswMi00Ny05XXw1WzEtM10pXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPCEtLSBTdXBwb3J0aW5nIDA2MCAoZ2VuZXJhbCBzZXJ2aWNlKSwgMDYyICh1bml2ZXJzYWwgYWNjZXNzKSwgMDY5IChjaGlsZHJlbiBzZXJ2aWNlKQorICAgICAgICAgICAgIG51bWJlcnMgaGVyZSB0b28uIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPig/OjF8NlswMjldKVxkezd9fCg/OjJbMC0zXXwzWzEtNV18NFswMi00Ny05XXw1WzEtM10pXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KICAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs2LDl9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CiAgICAgICAgIDxleGFtcGxlTnVtYmVyPjEyMzQ1Njc4PC9leGFtcGxlTnVtYmVyPgogICAgICAgPC9maXhlZExpbmU+CkBAIC0yNTExLDE5ICsyNzI5LDIyIEBACiAgICAgICAgIDxleGFtcGxlTnVtYmVyPjkxMjM0NTY3ODwvZXhhbXBsZU51bWJlcj4KICAgICAgIDwvbW9iaWxlPgogICAgICAgPHRvbGxGcmVlPgotICAgICAgICA8IS0tIFRoZSBwbGFuIHNheXMgaXQgc2hhbGwgYmUgMDgwMCBmb2xsb3dlZCBieSA3IGRpZ2l0cywgYnV0IG9ubGluZQotICAgICAgICAgICAgIGV4YW1wbGVzIHZhcnkgYmV0d2VlbiA0IGFuZCA3Li0tPgotICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjgwMFxkezQsN308L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj44MFswMV1cZHs0LDd9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7NywxMH08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KICAgICAgICAgPGV4YW1wbGVOdW1iZXI+ODAwMTIzNDU2NzwvZXhhbXBsZU51bWJlcj4KICAgICAgIDwvdG9sbEZyZWU+CiAgICAgICA8cHJlbWl1bVJhdGU+CiAgICAgICAgIDwhLS0gMDYxIGlzIGZvciBUZWxlVm90aW5nIG51bWJlcnMgLSBidXQgdGhlc2UgYXJlIGNoYXJnZWQgYXQgc2ltaWxhcgotICAgICAgICAgICAgIHJhdGVzIHRvIHByZW1pdW0gcmF0ZSBzbyB3ZSBpbmNsdWRlIHRoZW0gaGVyZS4tLT4KLSAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj42KD86MFxkezN9fDEpXGR7NH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgICAgICByYXRlcyB0byBwcmVtaXVtIHJhdGUgc28gd2UgaW5jbHVkZSB0aGVtIGhlcmUuIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjZbMTQ1XVxkezQsN308L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KICAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs2LDl9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+Ci0gICAgICAgIDxleGFtcGxlTnVtYmVyPjYwMTIzNDU2NzwvZXhhbXBsZU51bWJlcj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+NjExMjM0PC9leGFtcGxlTnVtYmVyPgogICAgICAgPC9wcmVtaXVtUmF0ZT4KKyAgICAgIDxwZXJzb25hbE51bWJlcj4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj43WzQ1XVxkezQsN308L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs2LDl9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjc0MTIzNDU2NzwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvcGVyc29uYWxOdW1iZXI+CiAgICAgPC90ZXJyaXRvcnk+CiAKICAgICA8IS0tIEhhaXRpIC0tPgpAQCAtMzA4MCw3ICszMzAxLDggQEAKIAogICAgIDwhLS0gSmFtYWljYSAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwNkMvZW4gLS0+Ci0gICAgPHRlcnJpdG9yeSBpZD0iSk0iIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgorICAgIDx0ZXJyaXRvcnkgaWQ9IkpNIiBjb3VudHJ5Q29kZT0iMSIgbGVhZGluZ0RpZ2l0cz0iODc2IgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPls4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgpAQCAtMzE2MiwzNiArMzM4NCw1NiBAQAogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBKYXBhbiAtLT4KLSAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9kbXNfcHViL2l0dS10L290aC8wMi8wMi9UMDIwMjAwMDA2RDAwMDFNU1dFLmRvYyAtLT4KLSAgICA8IS0tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGVsZXBob25lX251bWJlcnNfaW5fSmFwYW4gLS0+Ci0gICAgPCEtLSBodHRwOi8vd3d3LmphcGFudmlzaXRvci5jb20vaW5kZXgucGhwP2NJRD0zNzQmcElEPTc1NCZwTmFtZT10cmF2ZWwtZGlhbGluZy1jb2RlcyAtLT4KKyAgICA8IS0tIGh0dHA6Ly93d3cuc291bXUuZ28uanAvbWFpbl9zb3Npa2kvam9ob190c3VzaW4vdG9wL3RlbF9udW1iZXIvZml4ZWQuaHRtbCAtLT4KICAgICA8dGVycml0b3J5IGlkPSJKUCIgY291bnRyeUNvZGU9IjgxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTAiCiAgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeD0iMCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIj4KICAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgotICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IlszNl1bMS05XSIKLSAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPSIoXGQpKFxkezR9KShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+Ci0gICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iWzU3LTldMCIKLSAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPSIoXGR7Mn0pKFxkezR9KShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+Ci0gICAgICAgIDwhLS0gNCBkaWdpdCBhcmVhIGNvZGUgLS0+Ci0gICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iMTI0fDQ5OTIiCi0gICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj0iKFxkezR9KShcZCkoXGR7NH0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgotICAgICAgICA8IS0tIDMgZGlnaXQgYXJlYSBjb2RlcyB0aGF0IGNsYXNoIHdpdGggdGhlIHByZWZpeGVzIG9mIDIgZGlnaXQgYXJlYQotICAgICAgICBjb2RlcyBhbmQgaGVuY2UgYXJlIHRlc3RlZCBmb3IgZmlyc3QtLT4KLSAgICAgICAgPG51bWJlckZvcm1hdAotICAgICAgICAgICAgbGVhZGluZ0RpZ2l0cz0iMSg/OjM4fDY2KXw1KD86MzJ8Nls0NThdfDg2KXw3KD86NDJ8NzZ8OTgpfDg1Mnw5KD86NDJ8NVsyNl18ODUpIgotICAgICAgICAgICAgcGF0dGVybj0iKFxkezN9KShcZHsyfSkoXGR7NH0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgotICAgICAgICA8IS0tIDIgZGlnaXQgYXJlYSBjb2RlcyAtLT4KLSAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSIoPzoxWzE3LTldfFsyNF1bMi05XXw1WzItNTg5XXw2MHxbNzldWzIzNS05XXw4WzI2LThdKVsxLTldIgotICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihcZHsyfSkoXGR7M30pKFxkezR9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KKyAgICAgICAgPCEtLSBUb2xsLWZyZWUgbnVtYmVycyAtLT4KICAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSIoPzoxMnw5OSkwIgogICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihcZHszfSkoXGR7M30pKFxkezN9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KKyAgICAgICAgPCEtLSBTb21lIGxlYWRpbmcgZGlnaXRzIGFyZSBleHBsaWNpdGx5IHJlc2VydmVkIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKyAgICAgICAgICAgICBXZSBoYW5kbGUgdGhlbSBmaXJzdCBpbiB0aGlzIHJ1bGUsIGFuZCBsZXQgdGhlIGZvbGxvd2luZyBydWxlcyBpZ25vcmUgdGhvc2UgZXhjZXB0aW9ucy4KKyAgICAgICAgICAgICBOb3RlOiBUaGUgcnVsZSBoZXJlIGlzIG5vdCBpbiB0aGUgZmlsZXMgd2UgcmVseSBvbiB3aGVuIGNyZWF0aW5nIHRoZSBvdGhlciBydWxlcy4KKyAgICAgICAgICAgICAgICAgICBXZSB3b3VsZCBuZWVkIHRvIG1hbnVhbGx5IG1vZGlmeSBpdCBpZiB0aGUgSmFwYW5lc2UgZ292ZXJtZW50CisgICAgICAgICAgICAgICAgICAgZGVjaWRlZCB0byBjaGFuZ2UgdGhlIHJ1bGUuCisKKyAgICAgICAgICAgICAocHJlZml4KTogcHVycG9zZQorICAgICAgICAgICAgICI1MCI6IElQIHBob25lCisgICAgICAgICAgICAgIjkwIiBhbmQgIjgwIjogTW9iaWxlIHBob25lCisgICAgICAgICAgICAgIjcwIjogUEhTIChQZXJzb25hbCBIYW5keS1waG9uZSBTeXN0ZW0sIHdoaWNoIGhhcyBiZWVuIHVzZWQgaW4gSmFwYW4KKyAgICAgICAgICAgICAgICAgICB3aXRoIE5vbi0zRywgSmFwYW5lc2Utc3BlY2lmaWMgcHJvdG9jb2wpLgorICAgICAgICAgICAgICAgICAgIFNlZSBhbHNvIGh0dHA6Ly9qYS53aWtpcGVkaWEub3JnL3dpa2kvUEhTIChKYXBhbmVzZSkKKyAgICAgICAgICAtLT4KKyAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSJbNTctOV0wIgorICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihcZHsyfSkoXGR7NH0pKFxkezR9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KKyAgICAgICAgPCEtLSBUaGUgb3JkZXIgb2YgdGhlIHJlZy1leHBzIGFyZSBpbXBvcnRhbnQuCisgICAgICAgICAgICAgRXhhbXBsZXMgKG5vdCBhbGwpOgorICAgICAgICAgICAgIC0gIjE1IjogMTU0MjAgLT4gMTU0LTIwLCAxNTQ3MiAtPiAxNTQ3LTIsIDE1NDEwIC0+IDE1LTQxMCwKKyAgICAgICAgICAgICAtICIyMiI6IDIyMjAwIC0+IDIyLTIwMCwgMjIzMDAgLT4gMjItMzAwLCAyMjMyMCAtPiAyMjMtMjAsIDIyMzUwIC0+IDIyLTM1MAorICAgICAgICAgICAgIC0gIjQyIjogNDIwMDAgLT4gNC0yMDAwLCA0MjkwMSAtPiA0LTI5MDEsIDQyOTEwIC0+IDQyLTkxMAorICAgICAgICAgICAgIC0gIjgyIjogODIyMDAgLT4gODItMjAwLCA4MjAyMCAtPiA4MjAtMjAsIDgyNDAwIC0+IDgyLTQwMAorICAgICAgICAgICAgIC0gIjk5IjogOTk0MDAgLT4gOTktNDAwLCA5OTQzMCAtPiA5OTQtMzAsIDk5NjkyIC0+IDk5NjktMiwgOTk3NTAgLT4gOTk3LTUwCisgICAgICAgICAgICAgLSAiOTkzIjogOTkzMzAgLT4gOTkzLTMwLCA5OTMzMSAtPiA5OS0zMzEsIDk5MzMyIC0+IDk5My0zMgorICAgICAgICAgIC0tPgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjEoPzoyNjd8Myg/OjdbMjQ3XXw5WzI3OF0pfDQoPzo1WzY3XXw2Nil8NSg/OjQ3fDU4fDY0fDhbNjddKXw2KD86M1syNDVdfDQ4fDVbNC02OF0pKXw1KD86NzY5fDk3OVsyLTY5XSl8NDk5WzI0NjhdfDc0Njh8OCg/OjMoPzo4Wzc4XXw5NlsyNDU3LTldKXw2MzZbMi01Ny05XXw0Nzd8NTFbMjRdKXw5KD86NDk2fDgwMnw5MVsyM118OTY5KSIKKyAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPSIoXGR7NH0pKFxkKShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iMSg/OjJbMy02XXwzWzMtOV18NFsyLTZdfDUoPzpbMjM2LThdfFs0NV1bMi02OV0pfDZbMi03XXw3WzItNjg5XXw4WzItN118OVsxLTU3OF0pfDIoPzoyWzA0LTldfDNbMy01OF18NFswLTQ2OF18NlswMTM1LThdfDdbMDY3OV18OFswMjQ1NzhdfDIzWzIzXXw1KD86NVs3OF18N1syLTRdfFswNDY4XVsyLTldKXw2KD86MTd8NFsyLTVdKXw3OFsyLTddfDgoPzozWzI1LTldfDlbNi05XSl8OSg/OjExfDNbMi00XSkpfDQoPzoyKD86MlsyLTldfDhbMjM3LTldKXw3WzA1OV1bMi04XXwzWzY4OV18NlswMzUtN118N1s2OF18ODB8OVszLTVdKXw1KD86M1sxLTM2LTldfDkoPzo3WzQ5XXxbODldWzItOF0pfDRbNDU3OF18NVswMTMtOF18NlsxLTldfDdbMi04XXw4WzE0LTddfDlbNC03XSl8Nyg/OjJbMTVdfDNbNS05XXw0WzAyLTldfDZbMTM1LThdfDdbMC00Njg5XXw5WzAxNy05XXw2MTh8Nzk3fDkoPzo0WzYtOF18NVsyLTQ3OF18NlsyLTU4OV0pKXw4KD86MjkoPzoyMHw0WzA0LTldfDY1WzI1XXxbMzZdNjApfDM3NlswLTU5XXw2KD86MzY2fDU1WzAxNC05XXw2OVswMi02OV18OTlbMjNdKXwyNFs0LThdfDI5WzM1NzhdfDMoPzpbMy02XVsyLTldfFs3OF1bMi01XSl8Nig/OjVbNDY3XXw5WzIzNi04XXxbNjhdWzItOF0pfDRbNS04XXw1WzItOV18NlszN118N1s1NzldfDhbMDMtNTc5XXw5WzItOF0pfDkoPzpbMjNdMHw0WzAyNDYtOV18NVswMjUtNzldfDZbNC05XXw3WzI3LTldfDhbMDItN118WzQ3XTN8WzU3XTR8OSg/OjRbMi02OV18Myg/OjNbMDItOV18NFswLTI0Njg5XSl8WzUtN10pKSIKKyAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPSIoXGR7M30pKFxkezJ9KShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iMXwyKD86MjN8NSg/Ols1N118WzY4XTB8OTE3fDk5OSl8NjR8Nzh8OFszOV18OTE3KXw0KD86Mig/Ols2OF18MjB8OVsxNzhdKXw2NHw3WzM0N10pfDUoPzpbMi01ODldfDM5WzY3XSl8OCg/Ols0Ni05XXwzWzI3OV18Mig/OlsxMjQ1ODldfDlbMjRdKXwzWzc5XTZ8Nig/OjY5fDk5KSl8OSg/OlsyMzUtOF18OTMzMXw5MzQpfDE1WzQ1XSIKKyAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPSIoXGR7Mn0pKFxkezN9KShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iMig/OjlbMTQtNzldfDc0fFszNF03fFs1Nl05KXw4Mnw5OTMiCisgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj0iKFxkezN9KShcZHsyfSkoXGR7NH0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IlszNl18NCg/OjJbMDldfDdbMDFdKSIKKyAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPSIoXGQpKFxkezR9KShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iWzI0NzldIgorICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihcZHsyfSkoXGR7M30pKFxkezR9KSI+JDEgJDIgJDM8L251bWJlckZvcm1hdD4KICAgICAgIDwvYXZhaWxhYmxlRm9ybWF0cz4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5cZHs5LDEwfTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgogICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezksMTB9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CiAgICAgICA8L2dlbmVyYWxEZXNjPgogICAgICAgPGZpeGVkTGluZT4KLSAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzooPzoxWzEtOV18OVsyLTldKVsxLTldfCg/OlszNl1bMS05XXxbMjQ1NzhdWzItOV0pXGQpXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzoxWzEtOV1bMS05XXw5KD86WzMtOV1bMS05XXwyXGQpfCg/OlszNl1bMS05XXxbMjQ1NzhdWzItOV0pXGQpXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KICAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgogICAgICAgICA8ZXhhbXBsZU51bWJlcj4zMTIzNDU2Nzg8L2V4YW1wbGVOdW1iZXI+CiAgICAgICA8L2ZpeGVkTGluZT4KQEAgLTMzNjUsNyArMzYwNyw4IEBACiAKICAgICA8IS0tIFNhaW50IEtpdHRzIGFuZCBOZXZpcyAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwQjAvZW4gLS0+Ci0gICAgPHRlcnJpdG9yeSBpZD0iS04iIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgorICAgIDx0ZXJyaXRvcnkgaWQ9IktOIiBjb3VudHJ5Q29kZT0iMSIgbGVhZGluZ0RpZ2l0cz0iODY5IgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPls4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgpAQCAtMzUwMyw3ICszNzQ2LDggQEAKIAogICAgIDwhLS0gQ2F5bWFuIElzbGFuZHMgLS0+CiAgICAgPCEtLSBodHRwOi8vd3d3Lml0dS5pbnQvb3RoL1QwMjAyMDAwMDI3L2VuIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IktZIiBjb3VudHJ5Q29kZT0iMSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KKyAgICA8dGVycml0b3J5IGlkPSJLWSIgY291bnRyeUNvZGU9IjEiIGxlYWRpbmdEaWdpdHM9IjM0NSIKKyAgICAgIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CiAgICAgICA8Z2VuZXJhbERlc2M+CiAgICAgICAgIDwhLS0gTkFOUEEgY291bnRyeSAtIHVzZXMgVVMgZm9ybWF0dGluZyBydWxlcyAtLT4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bMzg5XVxkezl9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CkBAIC0zNTM0LDEwICszNzc4LDcgQEAKICAgICA8IS0tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGVsZXBob25lX251bWJlcnNfaW5fS2F6YWtoc3RhbiAtLT4KICAgICA8dGVycml0b3J5IGlkPSJLWiIgY291bnRyeUNvZGU9IjciIGludGVybmF0aW9uYWxQcmVmaXg9Ijh+MTAiCiAgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeD0iOCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIj4KLSAgICAgICAgPGF2YWlsYWJsZUZvcm1hdHM+Ci0gICAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSJbNi04XSIKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49IihbNi04XVxkezJ9KShcZHszfSkoXGR7NH0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgotICAgICAgICA8L2F2YWlsYWJsZUZvcm1hdHM+CisgICAgICAgPCEtLSBGb3JtYXR0aW5nIHJ1bGVzIG9idGFpbmVkIGZyb20gUnVzc2lhLiAtLT4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzpbNjddXGR7Mn18ODBbMDldKVxkezd9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7MTB9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CkBAIC0zNjM0LDcgKzM4NzUsOCBAQAogCiAgICAgPCEtLSBTYWludCBMdWNpYSAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwQjEvZW4gLS0+Ci0gICAgPHRlcnJpdG9yeSBpZD0iTEMiIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgorICAgIDx0ZXJyaXRvcnkgaWQ9IkxDIiBjb3VudHJ5Q29kZT0iMSIgbGVhZGluZ0RpZ2l0cz0iNzU4IgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPls3ODldXGR7OX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KQEAgLTM4NDUsNyArNDA4Nyw0MSBAQAogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBNb3JvY2NvIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9Ik1BIiBjb3VudHJ5Q29kZT0iMjEyIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMCI+CisgICAgPCEtLSBodHRwOi8vd3d3Lml0dS5pbnQvb3RoL1QwMjAyMDAwMDkwL2VuIC0tPgorICAgIDwhLS0gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS8rMjEyIC0tPgorICAgIDx0ZXJyaXRvcnkgaWQ9Ik1BIiBjb3VudHJ5Q29kZT0iMjEyIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMCIKKyAgICAgIG5hdGlvbmFsUHJlZml4PSIwIiBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlPSIkTlAkRkciPgorICAgICAgPGF2YWlsYWJsZUZvcm1hdHM+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iNSg/OjJbMDE1LTddfDNbMC00XSl8NiIKKyAgICAgICAgICBwYXR0ZXJuPSIoWzU2XVxkezJ9KShcZHs2fSkiPiQxLSQyPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iNSg/OjIoPzpbMi00OF18OTApfDMoPzpbNS03OV18ODApKXw4OTIiCisgICAgICAgICAgcGF0dGVybj0iKFs1OF1cZHszfSkoXGR7NX0pIj4kMS0kMjwvbnVtYmVyRm9ybWF0PgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjUoPzoyOVs4OV18MzhbODldKSIKKyAgICAgICAgICBwYXR0ZXJuPSIoNVxkezR9KShcZHs0fSkiPiQxLSQyPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iOCg/OjB8OVswMTMtOV0pIgorICAgICAgICAgIHBhdHRlcm49Iig4WzA5XSkoXGR7N30pIj4kMS0kMjwvbnVtYmVyRm9ybWF0PgorICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgorICAgICAgPGdlbmVyYWxEZXNjPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPls1Njg5XVxkezh9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDwhLS0gQ2xvc2VkIG51bWJlcmluZyBwbGFuLiAtLT4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgPC9nZW5lcmFsRGVzYz4KKyAgICAgIDxmaXhlZExpbmU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+NSg/OjIoPzpbMDE1LTddXGR7Mn18KD86WzI4XVsyLTldfDNbMi03XXw0WzItOF0pXGR8OSg/OjBcZHxbODldMCkpfDMoPzpbMC00XVxkezJ9fCg/Ols1N11bMi05XXw2WzItOF18OVszLTldKVxkfDgoPzowXGR8Wzg5XTApKSlcZHs0fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj41MjAxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L2ZpeGVkTGluZT4KKyAgICAgIDxtb2JpbGU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+Nig/OjAwfDMzfFsxNS03XVxkfDRbMC04XXw5OSlcZHs2fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj42NTAxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L21vYmlsZT4KKyAgICAgIDx0b2xsRnJlZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj44MFxkezd9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjgwMTIzNDU2NzwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvdG9sbEZyZWU+CisgICAgICA8cHJlbWl1bVJhdGU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+ODlcZHs3fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj44OTEyMzQ1Njc8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3ByZW1pdW1SYXRlPgogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBNb25hY28gLS0+CkBAIC0zOTIxLDYgKzQxOTcsMjUgQEAKICAgICAgIDwvbW9iaWxlPgogICAgIDwvdGVycml0b3J5PgogCisgICAgPCEtLSBTYWludC1NYXJ0aW4sIEZyZW5jaCBBbnRpbGxlcyAtLT4KKyAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwNTgvZW4gLS0+CisgICAgPHRlcnJpdG9yeSBpZD0iTUYiIGNvdW50cnlDb2RlPSI1OTAiIGludGVybmF0aW9uYWxQcmVmaXg9IjAwIgorICAgICAgbmF0aW9uYWxQcmVmaXg9IjAiPgorICAgICAgPCEtLSBGb3JtYXR0aW5nIHJ1bGVzIGJvcnJvd2VkIGZyb20gR3VhZGVsb3VwZS4gLS0+CisgICAgICA8Z2VuZXJhbERlc2M+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+WzU2XVxkezh9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7OX08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgIDwvZ2VuZXJhbERlc2M+CisgICAgICA8Zml4ZWRMaW5lPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjU5MCg/OjEwfDJbNzldfDVbMTI4XXxbNzhdNylcZHs0fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj41OTAyNzEyMzQ8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L2ZpeGVkTGluZT4KKyAgICAgIDxtb2JpbGU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+NjkwKD86MTB8MlsyN118NjZ8Nzd8OFs3OF0pXGR7NH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+NjkwMjIxMjM0PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC9tb2JpbGU+CisgICAgPC90ZXJyaXRvcnk+CisKICAgICA8IS0tIE1hcnNoYWxsIElzbGFuZHMgLS0+CiAgICAgPHRlcnJpdG9yeSBpZD0iTUgiIGNvdW50cnlDb2RlPSI2OTIiIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSIKICAgICAgICAgICAgICAgIG5hdGlvbmFsUHJlZml4PSIxIj4KQEAgLTM5NzksMTMgKzQyNzQsMTIgQEAKICAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs4fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgogICAgICAgPC9nZW5lcmFsRGVzYz4KICAgICAgIDxmaXhlZExpbmU+Ci0gICAgICAgIDwhLS0gMjAgNzAgc2VlbXMgYSBjb21tb24gcGF0dGVybiwgaW4gYWRkaXRpb24gdG8gMjAgNzkuIDIxIDI1IHNlZW1zCi0gICAgICAgIGFsc28gdG8gZXhpc3QuIC0tPgorICAgICAgICA8IS0tIDIwIDcwIHNlZW1zIGEgY29tbW9uIHBhdHRlcm4sIGluIGFkZGl0aW9uIHRvIDIxIDI1LiAtLT4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzoyKD86MCg/OjJbMC01ODldfDdbMDI3LTldKXwxKD86Mls1LTddfFszLTY4OV1cZCkpfDQ0MlxkKVxkezR9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxleGFtcGxlTnVtYmVyPjIwMjEyMzQ1PC9leGFtcGxlTnVtYmVyPgogICAgICAgPC9maXhlZExpbmU+CiAgICAgICA8bW9iaWxlPgotICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPig/OjYoPzpbNTY5XVxkKXw3KD86WzM1NzldWzAtNF18NFswMTQtN118NlxkfDhbMS05XSkpXGR7NX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzo2KD86WzU2OV1cZCl8Nyg/OlswOF1bMS05XXxbMzU3OV1bMC00XXw0WzAxNC03XXw2XGQpKVxkezV9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxleGFtcGxlTnVtYmVyPjY1MDEyMzQ1PC9leGFtcGxlTnVtYmVyPgogICAgICAgPC9tb2JpbGU+CiAgICAgICA8dG9sbEZyZWU+CkBAIC00MDg4LDcgKzQzODIsOCBAQAogICAgIDwhLS0gIE5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwRUUvZW4gLS0+CiAgICAgPCEtLSB3d3cuY25taXBob25lYm9vay5jb20vIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9Ik1QIiBjb3VudHJ5Q29kZT0iMSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KKyAgICA8dGVycml0b3J5IGlkPSJNUCIgY291bnRyeUNvZGU9IjEiIGxlYWRpbmdEaWdpdHM9IjY3MCIKKyAgICAgIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CiAgICAgICA8Z2VuZXJhbERlc2M+CiAgICAgICAgIDwhLS0gTkFOUEEgY291bnRyeSAtIHVzZXMgVVMgZm9ybWF0dGluZyBydWxlcyAtLT4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bNjg5XVxkezl9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CkBAIC00MTQyLDcgKzQ0MzcsOCBAQAogCiAgICAgPCEtLSBNb250c2VycmF0IC0tPgogICAgIDwhLS0gaHR0cDovL3d3dy5pdHUuaW50L290aC9UMDIwMjAwMDA4Ri9lbiAtLT4KLSAgICA8dGVycml0b3J5IGlkPSJNUyIgY291bnRyeUNvZGU9IjEiIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CisgICAgPHRlcnJpdG9yeSBpZD0iTVMiIGNvdW50cnlDb2RlPSIxIiBsZWFkaW5nRGlnaXRzPSI2NjQiCisgICAgICBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgogICAgICAgPGdlbmVyYWxEZXNjPgogICAgICAgICA8IS0tIE5BTlBBIGNvdW50cnkgLSB1c2VzIFVTIGZvcm1hdHRpbmcgcnVsZXMgLS0+CiAgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+WzY4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgpAQCAtNDc1OSw3ICs1MDU1LDcgQEAKICAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSI1IiBwYXR0ZXJuPSIoNTAwKShcZHs0fSkiPiQxICQyPC9udW1iZXJGb3JtYXQ+CiAgICAgICA8L2F2YWlsYWJsZUZvcm1hdHM+CiAgICAgICA8Z2VuZXJhbERlc2M+Ci0gICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+KD86MlszLTZdfDV8OVsyMzUtOV0pXGR7Nn18ODAwXGR7NSw2fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPig/OjJbMy02XXw1fDlbMi05XSlcZHs2fXw4MDBcZHs1LDZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7Nyw5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgogICAgICAgPC9nZW5lcmFsRGVzYz4KICAgICAgIDxmaXhlZExpbmU+CkBAIC00NzY4LDkgKzUwNjQsNyBAQAogICAgICAgICA8ZXhhbXBsZU51bWJlcj4yMzEyMzQ1NjwvZXhhbXBsZU51bWJlcj4KICAgICAgIDwvZml4ZWRMaW5lPgogICAgICAgPG1vYmlsZT4KLSAgICAgICAgPCEtLSBBZGRpbmcgOTMgYXMgaXQgc2VlbXMgbnVtYmVycyBzdGFydGluZyBmcm9tIDkzMCBoYXZlIHN0YXJ0ZWQgdG8gYmUKLSAgICAgICAgaXNzdWVkLiBXZSBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkIG51bWJlcnMgdG8gdGhpcyByYW5nZS4gLS0+Ci0gICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+OVsyMzUtOV1cZHs2fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjlbMi05XVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CiAgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7OH08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KICAgICAgICAgPGV4YW1wbGVOdW1iZXI+OTIxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CiAgICAgICA8L21vYmlsZT4KQEAgLTQ3OTUsOCArNTA4OSwzNSBAQAogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBQZXJ1IC0tPgorICAgIDwhLS0gaHR0cDovL3d3dy5pdHUuaW50L290aC9UMDIwMjAwMDBBNi9lbiAtLT4KKyAgICA8IS0tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvKzUxIC0tPgogICAgIDx0ZXJyaXRvcnkgaWQ9IlBFIiBjb3VudHJ5Q29kZT0iNTEiIGludGVybmF0aW9uYWxQcmVmaXg9IjAwIgotICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXg9IjAiPgorICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXg9IjAiIG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGU9IigkRkcpIgorICAgICAgICAgICAgICAgcHJlZmVycmVkRXh0blByZWZpeD0iIEFuZXhvICI+CisgICAgICA8YXZhaWxhYmxlRm9ybWF0cz4KKyAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSIxOSIgcGF0dGVybj0iKDEpKDlcZHsyfSkoXGR7Nn0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjFbMC04XSIgcGF0dGVybj0iKDEpKFxkezh9KSI+JDEgJDI8L251bWJlckZvcm1hdD4KKyAgICAgICAgPG51bWJlckZvcm1hdCBsZWFkaW5nRGlnaXRzPSJbNC04XVxkWzAtOF0iIHBhdHRlcm49IihbNC04XVxkKShcZHs2fSkiPiQxICQyPC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iWzQtOF1cZDkiCisgICAgICAgICAgcGF0dGVybj0iKFs0LThdXGQpKDlcZHsyfSkoXGR7Nn0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgorICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgorICAgICAgPGdlbmVyYWxEZXNjPgorICAgICAgICA8IS0tIFRoZSBleHBsaWNpdCByZXF1aXJlbWVudHMgZm9yIG51bWJlcnMgYmVnaW5uaW5nIHdpdGggNSBhcmUgYmVjYXVzZQorICAgICAgICBvZiB0aGUgZXhpc3RlbmNlIG9mIGEgcmVnaW9uIGNvZGUgNTEsIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZQorICAgICAgICBjb3VudHJ5IGNvZGUgNTEuIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsxNDYtOF1cZHs3LDEwfXw1XGR7N30oPzpcZHszfSk/PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7NywxMX08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgIDwvZ2VuZXJhbERlc2M+CisgICAgICA8Zml4ZWRMaW5lPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPig/OjFcZHsyfXw0WzEtNF18NVsxLTQ2XXw2WzEtN118N1syLTQ2XXw4WzItNF0pXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs3LDl9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjExMjM0NTY3ODwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvZml4ZWRMaW5lPgorICAgICAgPG1vYmlsZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzoxfDRbMS00XXw1WzEtNDZdfDZbMS03XXw3WzItNDZdfDhbMi00XSk5XGR7OH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHsxMCwxMX08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+NTQ5NTEyMzQ1Njc8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L21vYmlsZT4KICAgICA8L3RlcnJpdG9yeT4KIAogICAgIDwhLS0gRnJlbmNoIFBvbHluZXNpYSAoVGFoaXRpKSAoVGVycml0b2lyZSBmcmFuw6dhaXMgZCdvdXRyZS1tZXIpIC0tPgpAQCAtNDk4MSw3ICs1MzAyLDggQEAKIAogICAgIDwhLS0gUHVlcnRvIFJpY28gLS0+CiAgICAgPCEtLSBodHRwOi8vd3d3Lml0dS5pbnQvb3RoL1QwMjAyMDAwMEFBL2VuIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IlBSIiBjb3VudHJ5Q29kZT0iMSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KKyAgICA8dGVycml0b3J5IGlkPSJQUiIgY291bnRyeUNvZGU9IjEiIGxlYWRpbmdEaWdpdHM9Ijc4N3w5MzkiCisgICAgICBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgogICAgICAgPGdlbmVyYWxEZXNjPgogICAgICAgICA8IS0tIE5BTlBBIGNvdW50cnkgLSB1c2VzIFVTIGZvcm1hdHRpbmcgcnVsZXMgLS0+CiAgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+Wzc4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgpAQCAtNTA4NSw3ICs1NDA3LDggQEAKICAgICB0aGVtLiAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwNEIvZW4gLS0+CiAgICAgPHRlcnJpdG9yeSBpZD0iUkUiIGNvdW50cnlDb2RlPSIyNjIiIGludGVybmF0aW9uYWxQcmVmaXg9IjAwIgotICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXg9IjAiIG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGU9IiROUCRGRyI+CisgICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeD0iMCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIgorICAgICAgICAgICAgICAgbGVhZGluZ0RpZ2l0cz0iMjYyfDZbNDldfDgiIG1haW5Db3VudHJ5Rm9yQ29kZT0idHJ1ZSIgPgogICAgICAgPGF2YWlsYWJsZUZvcm1hdHM+CiAgICAgICAgIDxudW1iZXJGb3JtYXQgcGF0dGVybj0iKFsyNjhdXGR7Mn0pKFxkezJ9KShcZHsyfSkoXGR7Mn0pIj4kMSAkMiAkMyAkNDwvbnVtYmVyRm9ybWF0PgogICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgpAQCAtNTIwNiwxMSArNTUyOSwxNiBAQAogICAgIDwhLS0gaHR0cDovL3d3dy5pdHUuaW50L290aC9UMDIwMjAwMDBBRC9lbiAtLT4KICAgICA8IS0tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvJTJCNyAtLT4KICAgICA8dGVycml0b3J5IGlkPSJSVSIgY291bnRyeUNvZGU9IjciIGludGVybmF0aW9uYWxQcmVmaXg9Ijh+MTAiCi0gICAgICAgICAgICAgICBuYXRpb25hbFByZWZpeD0iOCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QICgkRkcpIj4KKyAgICAgICAgICAgICAgIG5hdGlvbmFsUHJlZml4PSI4IiBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlPSIkTlAgKCRGRykiCisgICAgICAgICAgICAgICBtYWluQ291bnRyeUZvckNvZGU9InRydWUiID4KICAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgogICAgICAgICA8IS0tIEZvcm1hdHRpbmcgZnJvbSB3aWtpcGVkaWEsIGNvbmZpcm1lZCBvbiBHb3Zlcm1lbnQgd2Vic2l0ZXMgc3VjaAotICAgICAgICBhcyBodHRwOi8vd3d3Lm1pbmp1c3QucnUvcnUvc3RydWN0dXJlL2NvbnRhY3QvIC0tPgotICAgICAgICA8bnVtYmVyRm9ybWF0IHBhdHRlcm49IihbMzQ4OV1cZHsyfSkoXGR7M30pKFxkezJ9KShcZHsyfSkiPiQxICQyLSQzLSQ0PC9udW1iZXJGb3JtYXQ+CisgICAgICAgIGFzIGh0dHA6Ly93d3cubWluanVzdC5ydS9ydS9zdHJ1Y3R1cmUvY29udGFjdC8uIENvbnRhaW5zIGZvcm1hdHRpbmcKKyAgICAgICAgaW5zdHJ1Y3Rpb25zIGZvciBLYXpha2hzdGFuIGFzIHdlbGwuIC0tPgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IlszNDY4OV0iCisgICAgICAgICAgcGF0dGVybj0iKFszNDY4OV1cZHsyfSkoXGR7M30pKFxkezJ9KShcZHsyfSkiPiQxICQyLSQzLSQ0PC9udW1iZXJGb3JtYXQ+CisgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iNyIKKyAgICAgICAgICBwYXR0ZXJuPSIoWzddXGR7Mn0pKFxkezN9KShcZHs0fSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CiAgICAgICA8L2F2YWlsYWJsZUZvcm1hdHM+CiAgICAgICA8Z2VuZXJhbERlc2M+CiAgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+WzM0ODldXGR7OX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KQEAgLTU3MTQsNyArNjA0Miw4IEBACiAKICAgICA8IS0tIFR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwRDgvZW4gLS0+Ci0gICAgPHRlcnJpdG9yeSBpZD0iVEMiIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgorICAgIDx0ZXJyaXRvcnkgaWQ9IlRDIiBjb3VudHJ5Q29kZT0iMSIgbGVhZGluZ0RpZ2l0cz0iNjQ5IgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPls2ODldXGR7OX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KQEAgLTU5MTYsOCArNjI0NSwyOSBAQAogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBUdW5pc2lhIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IlROIiBjb3VudHJ5Q29kZT0iMjE2IiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMCIKLSAgICAgICAgICAgICAgIG5hdGlvbmFsUHJlZml4PSIwIj4KKyAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwRDUvZW4gLS0+CisgICAgPHRlcnJpdG9yeSBpZD0iVE4iIGNvdW50cnlDb2RlPSIyMTYiIGludGVybmF0aW9uYWxQcmVmaXg9IjAwIj4KKyAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgorICAgICAgICA8bnVtYmVyRm9ybWF0IHBhdHRlcm49IihbMjQ3LTldXGQpKFxkezN9KShcZHszfSkiPiQxICQyICQzPC9udW1iZXJGb3JtYXQ+CisgICAgICA8L2F2YWlsYWJsZUZvcm1hdHM+CisgICAgICA8Z2VuZXJhbERlc2M+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+WzI0Ny05XVxkezd9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7OH08L3Bvc3NpYmxlTnVtYmVyUGF0dGVybj4KKyAgICAgIDwvZ2VuZXJhbERlc2M+CisgICAgICA8Zml4ZWRMaW5lPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjdcZHs3fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj43MTIzNDU2NzwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvZml4ZWRMaW5lPgorICAgICAgPG1vYmlsZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzoyWzAtN118NDB8OVxkKVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjIwMTIzNDU2PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC9tb2JpbGU+CisgICAgICA8IS0tIFRoZXNlIGFyZSBsaXN0ZWQgYXMgJ3ZhbHVlIGFkZGVkIHNlcnZpY2VzJyAtIHBlbmRpbmcgZnVydGhlcgorICAgICAgaW5mb3JtYXRpb24sIHdlIGFkZCB0aGVtIGhlcmUgZm9yIG5vdy4gLS0+CisgICAgICA8cHJlbWl1bVJhdGU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+OFswMjhdXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+ODAxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3ByZW1pdW1SYXRlPgogICAgIDwvdGVycml0b3J5PgogCiAgICAgPCEtLSBUb25nYSAtLT4KQEAgLTU5NTYsNyArNjMwNiw4IEBACiAKICAgICA8IS0tIFRyaW5pZGFkIGFuZCBUb2JhZ28gLS0+CiAgICAgPCEtLSBodHRwOi8vd3d3Lml0dS5pbnQvb3RoL1QwMjAyMDAwMEQ0L2VuIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IlRUIiBjb3VudHJ5Q29kZT0iMSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KKyAgICA8dGVycml0b3J5IGlkPSJUVCIgY291bnRyeUNvZGU9IjEiIGxlYWRpbmdEaWdpdHM9Ijg2OCIKKyAgICAgIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CiAgICAgICA8Z2VuZXJhbERlc2M+CiAgICAgICAgIDwhLS0gTkFOUEEgY291bnRyeSAtIHVzZXMgVVMgZm9ybWF0dGluZyBydWxlcyAtLT4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj5bODldXGR7OX08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KQEAgLTYxNjMsNyArNjUxNCw4IEBACiAgICAgICAgICBudW1iZXJzIGluIHRoZSBuYXRpb25hbCBmb3JtYXQsIGl0IGlzIG5vdCBpbmNsdWRlZC4gVGhlcmVmb3JlLCB3ZSBvbWl0IGl0IGhlcmUgdG8gbWFrZQogICAgICAgICAgZm9ybWF0dGluZyBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdvcmxkLiBUaGUgc2FtZSBhcHBsaWVzIHRvIGFsbCB0aGUKICAgICAgICAgIGNvdW50cmllcy9yZWdpb25zIHVuZGVyIE5BTlBBIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IlVTIiBjb3VudHJ5Q29kZT0iMSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KKyAgICA8dGVycml0b3J5IGlkPSJVUyIgY291bnRyeUNvZGU9IjEiIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSIKKyAgICAgICAgICAgICAgIG1haW5Db3VudHJ5Rm9yQ29kZT0idHJ1ZSIgPgogICAgICAgPGF2YWlsYWJsZUZvcm1hdHM+CiAgICAgICAgIDxudW1iZXJGb3JtYXQgcGF0dGVybj0iKFxkezN9KShcZHszfSkoXGR7NH0pIj4oJDEpICQyLSQzPC9udW1iZXJGb3JtYXQ+CiAgICAgICAgIDxudW1iZXJGb3JtYXQgcGF0dGVybj0iKFxkezN9KShcZHs0fSkiPiQxLSQyPC9udW1iZXJGb3JtYXQ+CkBAIC02MjU0LDcgKzY2MDYsOCBAQAogCiAgICAgPCEtLSBTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lcyAtLT4KICAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwQjMvZW4gLS0+Ci0gICAgPHRlcnJpdG9yeSBpZD0iVkMiIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiPgorICAgIDx0ZXJyaXRvcnkgaWQ9IlZDIiBjb3VudHJ5Q29kZT0iMSIgbGVhZGluZ0RpZ2l0cz0iNzg0IgorICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KICAgICAgIDxnZW5lcmFsRGVzYz4KICAgICAgICAgPCEtLSBOQU5QQSBjb3VudHJ5IC0gdXNlcyBVUyBmb3JtYXR0aW5nIHJ1bGVzIC0tPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPig/Ojc4NHw4KD86MDB8NjZ8Nzd8ODgpfDkwMClbMi05XVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CkBAIC02MjgyLDEzICs2NjM1LDQ4IEBACiAgICAgPC90ZXJyaXRvcnk+CiAKICAgICA8IS0tIFZlbmV6dWVsYSAtLT4KKyAgICA8IS0tIGh0dHA6Ly93d3cuaXR1LmludC9vdGgvVDAyMDIwMDAwRTMvZW4gLS0+CisgICAgPCEtLSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpLys1OCAtLT4KKyAgICA8IS0tIDFYWCBzcGVjaWZpZXMgYSBwYXJ0aWN1bGFyIGNhcnJpZXIgdG8gcm91dGUgYSBjYWxsIHRvLiAtLT4KICAgICA8dGVycml0b3J5IGlkPSJWRSIgY291bnRyeUNvZGU9IjU4IiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMCIKLSAgICAgICAgICAgICAgIG5hdGlvbmFsUHJlZml4PSIwIj4KKyAgICAgIG5hdGlvbmFsUHJlZml4PSIwIiBuYXRpb25hbFByZWZpeEZvclBhcnNpbmc9IjFcZHsyfXwwIgorICAgICAgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIj4KKyAgICAgIDxhdmFpbGFibGVGb3JtYXRzPgorICAgICAgICA8bnVtYmVyRm9ybWF0IHBhdHRlcm49IihcZHszfSkoXGR7N30pIj4kMS0kMjwvbnVtYmVyRm9ybWF0PgorICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgorICAgICAgPGdlbmVyYWxEZXNjPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsyNDU4OV1cZHs5fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8IS0tIE9wZW4gbnVtYmVyaW5nIHBsYW4uIC0tPgorICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezcsMTB9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CisgICAgICA8L2dlbmVyYWxEZXNjPgorICAgICAgPGZpeGVkTGluZT4KKyAgICAgICAgPCEtLSBJbmNsdWRpbmcgcmVnaW9uLWZyZWUgNTAwIGNhbGxzIGhlcmUsIHNpbmNlIHRoZXNlIGFyZSB0cmVhdGVkIGFzCisgICAgICAgIGxvY2FsIGNhbGxzLiBXaWtpcGVkaWEgbWVudGlvbnMgdGhlc2UgYXMgNVhYLCBidXQgb25saW5lIGV4YW1wbGVzIHRoYXQKKyAgICAgICAgY2FuIGJlIGZvdW5kIGFyZSBzZWVtaW5nbHkgcmVzdHJpY3RlZCB0byA1MFswMV0uIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPig/OjIoPzoxMnwzWzQ1Ny05XXxbNThdWzEtOV18WzQ2N11cZHw5WzEtNl0pfDUwWzAxXSlcZHs3fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj4yMTIxMjM0NTY3PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC9maXhlZExpbmU+CisgICAgICA8bW9iaWxlPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjQoPzoxWzI0LThdfDJbNDZdKVxkezd9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxwb3NzaWJsZU51bWJlclBhdHRlcm4+XGR7MTB9PC9wb3NzaWJsZU51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjQxMjEyMzQ1Njc8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L21vYmlsZT4KKyAgICAgIDx0b2xsRnJlZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj44MDBcZHs3fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezEwfTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj44MDAxMjM0NTY3PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC90b2xsRnJlZT4KKyAgICAgIDxwcmVtaXVtUmF0ZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj45MDBcZHs3fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezEwfTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj45MDAxMjM0NTY3PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC9wcmVtaXVtUmF0ZT4KICAgICA8L3RlcnJpdG9yeT4KIAogICAgIDwhLS0gVmlyZ2luIElzbGFuZHMsIEJyaXRpc2ggLS0+CiAgICAgPCEtLSBodHRwOi8vd3d3Lml0dS5pbnQvb3RoL1QwMjAyMDAwMDFFL2VuIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IlZHIiBjb3VudHJ5Q29kZT0iMSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KKyAgICA8dGVycml0b3J5IGlkPSJWRyIgY291bnRyeUNvZGU9IjEiIGxlYWRpbmdEaWdpdHM9IjI4NCIKKyAgICAgIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CiAgICAgICA8Z2VuZXJhbERlc2M+CiAgICAgICAgIDwhLS0gTkFOUEEgY291bnRyeSAtIHVzZXMgVVMgZm9ybWF0dGluZyBydWxlcyAtLT4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4oPzoyODR8OCg/OjAwfDY2fDc3fDg4KXw5MDApWzItOV1cZHs2fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgpAQCAtNjMxNyw3ICs2NzA1LDggQEAKIAogICAgIDwhLS0gVmlyZ2luIElzbGFuZHMsIFVuaXRlZCBTdGF0ZXMgLS0+CiAgICAgPCEtLSBodHRwOi8vd3d3Lml0dS5pbnQvb3RoL1QwMjAyMDAwMERGL2VuIC0tPgotICAgIDx0ZXJyaXRvcnkgaWQ9IlZJIiBjb3VudHJ5Q29kZT0iMSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMDExIj4KKyAgICA8dGVycml0b3J5IGlkPSJWSSIgY291bnRyeUNvZGU9IjEiIGxlYWRpbmdEaWdpdHM9IjM0MCIKKyAgICAgIGludGVybmF0aW9uYWxQcmVmaXg9IjAxMSI+CiAgICAgICA8Z2VuZXJhbERlc2M+CiAgICAgICAgIDwhLS0gTkFOUEEgY291bnRyeSAtIHVzZXMgVVMgZm9ybWF0dGluZyBydWxlcyAtLT4KICAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj4zNDAoPzo2WzQ5XTJ8N1sxN11cZClcZHs0fXwoPzo4KD86MDB8NjZ8Nzd8ODgpfDkwMClbMi05XVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CkBAIC02NDc1LDcgKzY4NjQsOCBAQAogICAgIGZpeGVkLWxpbmUgcHJlZml4ZXMsIGJ1dCB0aGUgbW9iaWxlIHByZWZpeGVzIGxpc3RlZCBoZXJlIHNlZW0gb3V0IG9mIGRhdGUuCiAgICAgLS0+CiAgICAgPHRlcnJpdG9yeSBpZD0iWVQiIGNvdW50cnlDb2RlPSIyNjIiIGludGVybmF0aW9uYWxQcmVmaXg9IjAwIgotICAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXg9IjAiIG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGU9IiROUCRGRyI+CisgICAgICBuYXRpb25hbFByZWZpeD0iMCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIgorICAgICAgbGVhZGluZ0RpZ2l0cz0iMjY5fDYzIj4KICAgICAgIDwhLS0gRm9ybWF0dGluZyBhcyBwZXIgTGEgUsOpdW5pb24uIC0tPgogICAgICAgPGdlbmVyYWxEZXNjPgogICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsyNjhdXGR7OH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KZGlmZiAtLWdpdCBhL2phdmEvcmVzb3VyY2VzL2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvdGVzdC9QaG9uZU51bWJlck1ldGFEYXRhRm9yVGVzdGluZy54bWwgYi9qYXZhL3Jlc291cmNlcy9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL3Rlc3QvUGhvbmVOdW1iZXJNZXRhRGF0YUZvclRlc3RpbmcueG1sCmluZGV4IDUyNDUwN2IuLmU2ZDExY2IgMTAwNjQ0Ci0tLSBhL2phdmEvcmVzb3VyY2VzL2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvdGVzdC9QaG9uZU51bWJlck1ldGFEYXRhRm9yVGVzdGluZy54bWwKKysrIGIvamF2YS9yZXNvdXJjZXMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy90ZXN0L1Bob25lTnVtYmVyTWV0YURhdGFGb3JUZXN0aW5nLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjExIiBwYXR0ZXJuPSIoXGR7Mn0pKFxkezR9KShcZHs0fSkiPiQxICQyLSQzPC9udW1iZXJGb3JtYXQ+CiAgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iMVswMi05XXxbMjNdIiBwYXR0ZXJuPSIoXGR7NH0pKFxkezJ9KShcZHs0fSkiPiQxICQyLSQzPC9udW1iZXJGb3JtYXQ+CiAgICAgICAgIDxudW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iOTExIiBwYXR0ZXJuPSI5KDExKShcZHs0fSkoXGR7NH0pIj4kMSAxNSAkMi0kMzwvbnVtYmVyRm9ybWF0PgotICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjkoPzoxWzAyLTldfFsyM10pIiBwYXR0ZXJuPSI5KFxkezR9KShcZHsyfSkoXGR7NH0pIj4kMSAxNSAkMi0kMzwvbnVtYmVyRm9ybWF0PgorICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjkoPzoxWzAyLTldfFsyM10pIiBwYXR0ZXJuPSI5KFxkezR9KShcZHsyfSkoXGR7NH0pIiBjYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlPSIkRkcgJENDIj4kMSAkMi0kMzwvbnVtYmVyRm9ybWF0PgogICAgICAgICA8bnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9Ils2OF0iIHBhdHRlcm49IihcZHszfSkoXGR7M30pKFxkezR9KSI+JDEtJDItJDM8L251bWJlckZvcm1hdD4KICAgICAgICAgPGludGxOdW1iZXJGb3JtYXQgbGVhZGluZ0RpZ2l0cz0iMTEiIHBhdHRlcm49IihcZHsyfSkoXGR7NH0pKFxkezR9KSI+JDEgJDItJDM8L2ludGxOdW1iZXJGb3JtYXQ+CiAgICAgICAgIDxpbnRsTnVtYmVyRm9ybWF0IGxlYWRpbmdEaWdpdHM9IjFbMDItOV18WzIzXSIgcGF0dGVybj0iKFxkezR9KShcZHsyfSkoXGR7NH0pIj4kMSAkMi0kMzwvaW50bE51bWJlckZvcm1hdD4KQEAgLTM3MCw2ICszNzAsNDEgQEAKICAgICAgIDwvcHJlbWl1bVJhdGU+CiAgICAgPC90ZXJyaXRvcnk+CiAKKyAgICA8IS0tIFLDqXVuaW9uIChGcmVuY2ggRGVwYXJ0bWVudHMgYW5kIFRlcnJpdG9yaWVzIGluIHRoZSBJbmRpYW4gT2NlYW4pIC0tPgorICAgIDwhLS0gTm90ZSB0aGlzIHNoYXJlcyB0aGUgc2FtZSBjb3VudHJ5IGNvZGUgYXMgTGEgTWF5b3R0ZSBhbmQgRnJlbmNoCisgICAgU291dGhlcm4gVGVycml0b3JpZXMsIGFuZCB0aGUgZm9ybWF0dGluZyBwYXR0ZXJucyBoZXJlIGFyZSB1c2VkIGJ5IGFsbCBvZgorICAgIHRoZW0uIFRoaXMgaXMgcHJlc2VudCB0byB0ZXN0IGxlYWRpbmdEaWdpdHMuIC0tPgorICAgIDx0ZXJyaXRvcnkgaWQ9IlJFIiBjb3VudHJ5Q29kZT0iMjYyIiBsZWFkaW5nRGlnaXRzPSIyNjJ8Nig/OjlbMjNdfDQ3KXw4IgorICAgICAgICAgICAgICAgaW50ZXJuYXRpb25hbFByZWZpeD0iMDAiIG5hdGlvbmFsUHJlZml4PSIwIiBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlPSIkTlAkRkciPgorICAgICAgPGF2YWlsYWJsZUZvcm1hdHM+CisgICAgICAgIDxudW1iZXJGb3JtYXQgcGF0dGVybj0iKFsyNjhdXGR7Mn0pKFxkezJ9KShcZHsyfSkoXGR7Mn0pIj4kMSAkMiAkMyAkNDwvbnVtYmVyRm9ybWF0PgorICAgICAgPC9hdmFpbGFibGVGb3JtYXRzPgorICAgICAgPGdlbmVyYWxEZXNjPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsyNjhdXGR7OH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgPC9nZW5lcmFsRGVzYz4KKyAgICAgIDxmaXhlZExpbmU+CisgICAgICAgIDwhLS0gMDg3NiBudW1iZXJzIGFyZSBtZW50aW9uZWQgaW4gdGhlIHBsYW4sIGJ1dCBub25lIGluIHVzZSBjYW4gYmUKKyAgICAgICAgZm91bmQuIC0tPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjI2MlxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjI2MjE2MTIzNDwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvZml4ZWRMaW5lPgorICAgICAgPG1vYmlsZT4KKyAgICAgICAgPG5hdGlvbmFsTnVtYmVyUGF0dGVybj42KD86OVsyM118NDcpXGR7Nn08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj42OTIxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L21vYmlsZT4KKyAgICAgIDwhLS0gMDgqIE51bWJlcnMgaW4gUsOpdW5pb24gYXJlIHRoZSBzYW1lIGFzIHRob3NlIHZhbGlkIGluIEZyYW5jZS4gLS0+CisgICAgICA8dG9sbEZyZWU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+ODBcZHs3fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj44MDEyMzQ1Njc8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3RvbGxGcmVlPgorICAgICAgPHByZW1pdW1SYXRlPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjgoPzoxWzAxXXwyWzAxNTZdfDg0fDlbMC0zNy05XSlcZHs2fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj44MTAxMjM0NTY8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3ByZW1pdW1SYXRlPgorICAgIDwvdGVycml0b3J5PgorCiAgICAgPCEtLSBTaW5nYXBvcmUgLS0+CiAgICAgPCEtLSBodHRwOi8vd3d3LmlkYS5nb3Yuc2cvcG9saWNpZXMlMjBhbmQlMjByZWd1bGF0aW9uLzIwMDYwNTA4MTIwMTI0LmFzcHggLS0+CiAgICAgPHRlcnJpdG9yeSBpZD0iU0ciIGNvdW50cnlDb2RlPSI2NSIgaW50ZXJuYXRpb25hbFByZWZpeD0iMFswLTNdWzAtOV0iPgpAQCAtNDA1LDcgKzQ0MCw4IEBACiAgICAgPCEtLSBGb3IgdGVzdGluZyBwdXJwb3NlcywgbnVtYmVycyBzdGFydGluZyB3aXRoIDI0IGFyZSBub3QgY29uc2lkZXJlZCBVUwogICAgIG51bWJlcnMuLS0+CiAgICAgPHRlcnJpdG9yeSBpZD0iVVMiIGNvdW50cnlDb2RlPSIxIiBpbnRlcm5hdGlvbmFsUHJlZml4PSIwMTEiCi0gICAgICAgICAgICAgICBwcmVmZXJyZWRFeHRuUHJlZml4PSIgZXh0bi4gIj4KKyAgICAgICAgICAgICAgIHByZWZlcnJlZEV4dG5QcmVmaXg9IiBleHRuLiAiCisgICAgICAgICAgICAgICBtYWluQ291bnRyeUZvckNvZGU9InRydWUiPgogICAgICAgPGF2YWlsYWJsZUZvcm1hdHM+CiAgICAgICAgIDxudW1iZXJGb3JtYXQgcGF0dGVybj0iKFxkezN9KShcZHszfSkoXGR7NH0pIj4kMSAkMiAkMzwvbnVtYmVyRm9ybWF0PgogICAgICAgICA8bnVtYmVyRm9ybWF0IHBhdHRlcm49IihcZHszfSkoXGR7NH0pIj4kMSAkMjwvbnVtYmVyRm9ybWF0PgpAQCAtNDI0LDUgKzQ2MCwyOCBAQAogICAgICAgICA8cG9zc2libGVOdW1iZXJQYXR0ZXJuPlxkezEwfTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgogICAgICAgPC9wcmVtaXVtUmF0ZT4KICAgICA8L3RlcnJpdG9yeT4KKworICAgIDwhLS0gTWF5b3R0ZSAtLT4KKyAgICA8dGVycml0b3J5IGlkPSJZVCIgY291bnRyeUNvZGU9IjI2MiIgbGVhZGluZ0RpZ2l0cz0iMjY5fDYzOSIKKyAgICAgICAgICAgICAgIGludGVybmF0aW9uYWxQcmVmaXg9IjAwIiBuYXRpb25hbFByZWZpeD0iMCIgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZT0iJE5QJEZHIj4KKyAgICAgIDwhLS0gRm9ybWF0dGluZyBhcyBwZXIgTGEgUsOpdW5pb24uIC0tPgorICAgICAgPGdlbmVyYWxEZXNjPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPlsyNjhdXGR7OH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPHBvc3NpYmxlTnVtYmVyUGF0dGVybj5cZHs5fTwvcG9zc2libGVOdW1iZXJQYXR0ZXJuPgorICAgICAgPC9nZW5lcmFsRGVzYz4KKyAgICAgIDxmaXhlZExpbmU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+MjY5NlswLTRdXGR7NH08L25hdGlvbmFsTnVtYmVyUGF0dGVybj4KKyAgICAgICAgPGV4YW1wbGVOdW1iZXI+MjY5NjAxMjM0PC9leGFtcGxlTnVtYmVyPgorICAgICAgPC9maXhlZExpbmU+CisgICAgICA8bW9iaWxlPgorICAgICAgICA8bmF0aW9uYWxOdW1iZXJQYXR0ZXJuPjYzOVxkezZ9PC9uYXRpb25hbE51bWJlclBhdHRlcm4+CisgICAgICAgIDxleGFtcGxlTnVtYmVyPjYzOTEyMzQ1NjwvZXhhbXBsZU51bWJlcj4KKyAgICAgIDwvbW9iaWxlPgorICAgICAgPCEtLSBTYW1lIGFzIGluIEZyYW5jZS4gLS0+CisgICAgICA8dG9sbEZyZWU+CisgICAgICAgIDxuYXRpb25hbE51bWJlclBhdHRlcm4+ODBcZHs3fTwvbmF0aW9uYWxOdW1iZXJQYXR0ZXJuPgorICAgICAgICA8ZXhhbXBsZU51bWJlcj44MDEyMzQ1Njc8L2V4YW1wbGVOdW1iZXI+CisgICAgICA8L3RvbGxGcmVlPgorICAgIDwvdGVycml0b3J5PgogICA8L3RlcnJpdG9yaWVzPgogPC9waG9uZU51bWJlck1ldGFkYXRhPgpkaWZmIC0tZ2l0IGEvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9Bc1lvdVR5cGVGb3JtYXR0ZXIuamF2YSBiL2phdmEvc3JjL2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvQXNZb3VUeXBlRm9ybWF0dGVyLmphdmEKaW5kZXggODkzNmQ1Yi4uMzAzYTQ3NCAxMDA2NDQKLS0tIGEvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9Bc1lvdVR5cGVGb3JtYXR0ZXIuamF2YQorKysgYi9qYXZhL3NyYy9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL0FzWW91VHlwZUZvcm1hdHRlci5qYXZhCkBAIC00OSwyMyArNDksMzEgQEAKICAgcHJpdmF0ZSBQaG9uZW1ldGFkYXRhLlBob25lTWV0YWRhdGEgZGVmYXVsdE1ldGFEYXRhOwogICBwcml2YXRlIFBob25lTWV0YWRhdGEgY3VycmVudE1ldGFEYXRhOwogCisgIC8vIEEgcGF0dGVybiB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggY2hhcmFjdGVyIGNsYXNzZXMgaW4gcmVndWxhciBleHByZXNzaW9ucy4gQW4gZXhhbXBsZSBvZiBhCisgIC8vIGNoYXJhY3RlciBjbGFzcyBpcyBbMS00XS4KKyAgcHJpdmF0ZSBmaW5hbCBQYXR0ZXJuIENIQVJBQ1RFUl9DTEFTU19QQVRURVJOID0gUGF0dGVybi5jb21waWxlKCJcXFsoW15cXFtcXF1dKSpcXF0iKTsKKyAgLy8gQW55IGRpZ2l0IGluIGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgYWN0dWFsbHkgZGVub3RlcyBhIGRpZ2l0LiBGb3IgZXhhbXBsZSwgaW4gdGhlIHJlZ3VsYXIKKyAgLy8gZXhwcmVzc2lvbiA4MFswLTJdXGR7NiwxMH0sIHRoZSBmaXJzdCAyIGRpZ2l0cyAoOCBhbmQgMCkgYXJlIHN0YW5kYWxvbmUgZGlnaXRzLCBidXQgdGhlIHJlc3QKKyAgLy8gYXJlIG5vdC4KKyAgLy8gVHdvIGxvb2stYWhlYWRzIGFyZSBuZWVkZWQgYmVjYXVzZSB0aGUgbnVtYmVyIGZvbGxvd2luZyBcXGQgY291bGQgYmUgYSB0d28tZGlnaXQgbnVtYmVyLCBzaW5jZQorICAvLyB0aGUgcGhvbmUgbnVtYmVyIGNhbiBiZSBhcyBsb25nIGFzIDE1IGRpZ2l0cy4KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBTVEFOREFMT05FX0RJR0lUX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoIlxcZCg/PVteLH1dW14sfV0pIik7CisKICAgLy8gVGhlIGRpZ2l0cyB0aGF0IGhhdmUgbm90IGJlZW4gZW50ZXJlZCB5ZXQgd2lsbCBiZSByZXByZXNlbnRlZCBieSBhIFx1MjAwOCwgdGhlIHB1bmN0dWF0aW9uCiAgIC8vIHNwYWNlLgogICBwcml2YXRlIFN0cmluZyBkaWdpdFBsYWNlaG9sZGVyID0gIlx1MjAwOCI7CiAgIHByaXZhdGUgUGF0dGVybiBkaWdpdFBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoZGlnaXRQbGFjZWhvbGRlcik7CiAgIHByaXZhdGUgaW50IGxhc3RNYXRjaFBvc2l0aW9uID0gMDsKLSAgcHJpdmF0ZSBib29sZWFuIHJlbWVtYmVyUG9zaXRpb24gPSBmYWxzZTsKKyAgLy8gVGhlIHBvc2l0aW9uIG9mIGEgZGlnaXQgdXBvbiB3aGljaCBpbnB1dERpZ2l0QW5kUmVtZW1iZXJQb3NpdGlvbiBpcyBtb3N0IHJlY2VudGx5IGludm9rZWQsIGFzCisgIC8vIGZvdW5kIGluIHRoZSBjdXJyZW50IG91dHB1dC4KICAgcHJpdmF0ZSBpbnQgcG9zaXRpb25SZW1lbWJlcmVkID0gMDsKKyAgLy8gVGhlIHBvc2l0aW9uIG9mIGEgZGlnaXQgdXBvbiB3aGljaCBpbnB1dERpZ2l0QW5kUmVtZW1iZXJQb3NpdGlvbiBpcyBtb3N0IHJlY2VudGx5IGludm9rZWQsIGFzCisgIC8vIGZvdW5kIGluIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoZSB1c2VyIGVudGVyZWQuCiAgIHByaXZhdGUgaW50IG9yaWdpbmFsUG9zaXRpb24gPSAwOwogICBwcml2YXRlIFBhdHRlcm4gbmF0aW9uYWxQcmVmaXhGb3JQYXJzaW5nOwogICBwcml2YXRlIFBhdHRlcm4gaW50ZXJuYXRpb25hbFByZWZpeDsKICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcHJlZml4QmVmb3JlTmF0aW9uYWxOdW1iZXI7CiAgIHByaXZhdGUgU3RyaW5nQnVmZmVyIG5hdGlvbmFsTnVtYmVyOwotICAvLyBObyBmb3JtYXR0aW5nIHdpbGwgYmUgYXBwbGllZCB3aGVuIGFueSBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGNsYXNzIGlzCi0gIC8vIGVudGVyZWQgYnkgdXNlcnMuCi0gIHByaXZhdGUgZmluYWwgUGF0dGVybiBVTlNVUFBPUlRFRF9TWU5UQVggPSBQYXR0ZXJuLmNvbXBpbGUoIlstICojOywuKCkvYS16QS1aXSIpOwotICBwcml2YXRlIGZpbmFsIFBhdHRlcm4gQ0hBUkFDVEVSX0NMQVNTX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoIlxcWyhbXlxcW1xcXV0pKlxcXSIpOwotICBwcml2YXRlIGZpbmFsIFBhdHRlcm4gU1RBTkRBTE9ORV9ESUdJVF9QQVRURVJOID0gUGF0dGVybi5jb21waWxlKCJcXGQoPz1bXix9XVteLH1dKSIpOwogCiAgIC8qKgogICAgKiBDb25zdHJ1Y3RzIGEgbGlnaHQtd2VpZ2h0IGZvcm1hdHRlciB3aGljaCBkb2VzIG5vIGZvcm1hdHRpbmcsIGJ1dCBvdXRwdXRzIGV4YWN0bHkgd2hhdCBpcwpAQCAtMTgyLDI1ICsxOTAsMzIgQEAKICAgICB9CiAgIH0KIAotICAvKioKLSAgICogRm9ybWF0cyBhIHBob25lIG51bWJlciBvbi10aGUtZmx5IGFzIGVhY2ggZGlnaXQgaXMgZW50ZXJlZC4KLSAgICoKLSAgICogQHBhcmFtIG5leHRDaGFyICB0aGUgbW9zdCByZWNlbnRseSBlbnRlcmVkIGRpZ2l0IG9mIGEgcGhvbmUgbnVtYmVyLiBGb3JtYXR0aW5nIGNoYXJhY3RlcnMgYXJlCi0gICAqICAgICBhbGxvd2VkLCBidXQgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSByZXN1bHQuIEZ1bGwgd2lkdGggZGlnaXRzIGFuZCBBcmFiaWMtaW5kaWMgZGlnaXRzCi0gICAqICAgICBhcmUgYWxsb3dlZCwgYW5kIHdpbGwgYmUgc2hvd24gYXMgdGhleSBhcmUuCi0gICAqIEByZXR1cm4gIHRoZSBwYXJ0aWFsbHkgZm9ybWF0dGVkIHBob25lIG51bWJlci4KLSAgICovCiAgIHB1YmxpYyBTdHJpbmcgaW5wdXREaWdpdChjaGFyIG5leHRDaGFyKSB7CisgICAgcmV0dXJuIGlucHV0RGlnaXRXaXRoT3B0aW9uVG9SZW1lbWJlclBvc2l0aW9uKG5leHRDaGFyLCBmYWxzZSk7CisgIH0KKworICAvKioKKyAgICogU2FtZSBhcyBpbnB1dERpZ2l0LCBidXQgcmVtZW1iZXJzIHRoZSBwb3NpdGlvbiB3aGVyZSBuZXh0Q2hhciBpcyBpbnNlcnRlZCwgc28gdGhhdCBpdCBjb3VsZCBiZQorICAgKiByZXRyaWV2ZWQgbGF0ZXIgYnkgdXNpbmcgZ2V0UmVtZW1iZXJlZFBvc2l0aW9uKCkuIFRoZSByZW1lbWJlcmVkIHBvc2l0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseQorICAgKiBhZGp1c3RlZCBpZiBhZGRpdGlvbmFsIGZvcm1hdHRpbmcgY2hhcmFjdGVycyBhcmUgbGF0ZXIgaW5zZXJ0ZWQvcmVtb3ZlZCBpbiBmcm9udCBvZiBuZXh0Q2hhci4KKyAgICovCisgIHB1YmxpYyBTdHJpbmcgaW5wdXREaWdpdEFuZFJlbWVtYmVyUG9zaXRpb24oY2hhciBuZXh0Q2hhcikgeworICAgIHJldHVybiBpbnB1dERpZ2l0V2l0aE9wdGlvblRvUmVtZW1iZXJQb3NpdGlvbihuZXh0Q2hhciwgdHJ1ZSk7CisgIH0KKworICBwcml2YXRlIFN0cmluZyBpbnB1dERpZ2l0V2l0aE9wdGlvblRvUmVtZW1iZXJQb3NpdGlvbihjaGFyIG5leHRDaGFyLCBib29sZWFuIHJlbWVtYmVyUG9zaXRpb24pIHsKICAgICBhY2NydWVkSW5wdXQuYXBwZW5kKG5leHRDaGFyKTsKLSAgICByZW1lbWJlclBvc2l0aW9uKCk7Ci0gICAgaWYgKFVOU1VQUE9SVEVEX1NZTlRBWC5tYXRjaGVyKENoYXJhY3Rlci50b1N0cmluZyhuZXh0Q2hhcikpLm1hdGNoZXMoKSkgeworICAgIGlmIChyZW1lbWJlclBvc2l0aW9uKSB7CisgICAgICBwb3NpdGlvblJlbWVtYmVyZWQgPSBhY2NydWVkSW5wdXQubGVuZ3RoKCk7CisgICAgICBvcmlnaW5hbFBvc2l0aW9uID0gcG9zaXRpb25SZW1lbWJlcmVkOworICAgIH0KKyAgICAvLyBXZSBkbyBmb3JtYXR0aW5nIG9uLXRoZS1mbHkgb25seSB3aGVuIGVhY2ggY2hhcmFjdGVyIGVudGVyZWQgaXMgZWl0aGVyIGEgcGx1cyBzaWduIG9yIGEKKyAgICAvLyBkaWdpdC4KKyAgICBpZiAoIVBob25lTnVtYmVyVXRpbC5WQUxJRF9TVEFSVF9DSEFSX1BBVFRFUk4ubWF0Y2hlcihDaGFyYWN0ZXIudG9TdHJpbmcobmV4dENoYXIpKS5tYXRjaGVzKCkpIHsKICAgICAgIGFibGVUb0Zvcm1hdCA9IGZhbHNlOwogICAgIH0KICAgICBpZiAoIWFibGVUb0Zvcm1hdCkgewotICAgICAgaWYgKHBvc2l0aW9uUmVtZW1iZXJlZCA+IDAgJiYgY3VycmVudE91dHB1dC5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgcG9zaXRpb25SZW1lbWJlcmVkID0gb3JpZ2luYWxQb3NpdGlvbjsKLSAgICAgICAgY3VycmVudE91dHB1dC5zZXRMZW5ndGgoMCk7Ci0gICAgICB9CisgICAgICByZXNldFBvc2l0aW9uT25GYWlsdXJlVG9Gb3JtYXQoKTsKICAgICAgIHJldHVybiBhY2NydWVkSW5wdXQudG9TdHJpbmcoKTsKICAgICB9CiAKQEAgLTIyMiwzOSArMjM3LDI3IEBACiAgICAgICAgICAgcmV0dXJuIGFjY3J1ZWRJbnB1dC50b1N0cmluZygpOwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZU5hdGlvbmFsUHJlZml4RnJvbU5hdGlvbmFsTnVtYmVyKCk7Ci0gICAgICAgIHJldHVybiBhdHRlbXB0VG9DaG9vc2VGb3JtYXR0aW5nUGF0dGVybigpOworICAgICAgICByZXR1cm4gYXR0ZW1wdFRvQ2hvb3NlRm9ybWF0dGluZ1BhdHRlcm4ocmVtZW1iZXJQb3NpdGlvbik7CiAgICAgICBkZWZhdWx0OgogICAgICAgICBpZiAobmF0aW9uYWxOdW1iZXIubGVuZ3RoKCkgPiA0KSB7ICAvLyBUaGUgZm9ybWF0dGluZyBwYXR0ZXJuIGlzIGFscmVhZHkgY2hvc2VuLgotICAgICAgICAgIFN0cmluZyB0ZW1wID0gaW5wdXREaWdpdEhlbHBlcihuZXh0Q2hhcik7CisgICAgICAgICAgU3RyaW5nIHRlbXAgPSBpbnB1dERpZ2l0SGVscGVyKG5leHRDaGFyLCByZW1lbWJlclBvc2l0aW9uKTsKICAgICAgICAgICByZXR1cm4gYWJsZVRvRm9ybWF0CiAgICAgICAgICAgICAgID8gcHJlZml4QmVmb3JlTmF0aW9uYWxOdW1iZXIgKyB0ZW1wCiAgICAgICAgICAgICAgIDogdGVtcDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvQ2hvb3NlRm9ybWF0dGluZ1BhdHRlcm4oKTsKKyAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvQ2hvb3NlRm9ybWF0dGluZ1BhdHRlcm4ocmVtZW1iZXJQb3NpdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAgIH0KIAotICBwcml2YXRlIHZvaWQgcmVtZW1iZXJQb3NpdGlvbigpIHsKLSAgICBpZiAocmVtZW1iZXJQb3NpdGlvbikgewotICAgICAgcG9zaXRpb25SZW1lbWJlcmVkID0gYWNjcnVlZElucHV0Lmxlbmd0aCgpOwotICAgICAgb3JpZ2luYWxQb3NpdGlvbiA9IHBvc2l0aW9uUmVtZW1iZXJlZDsKKyAgcHJpdmF0ZSB2b2lkIHJlc2V0UG9zaXRpb25PbkZhaWx1cmVUb0Zvcm1hdCgpIHsKKyAgICBpZiAocG9zaXRpb25SZW1lbWJlcmVkID4gMCkgeworICAgICAgcG9zaXRpb25SZW1lbWJlcmVkID0gb3JpZ2luYWxQb3NpdGlvbjsKKyAgICAgIGN1cnJlbnRPdXRwdXQuc2V0TGVuZ3RoKDApOwogICAgIH0KICAgfQogCiAgIC8qKgotICAgKiBTYW1lIGFzIGlucHV0RGlnaXQsIGJ1dCByZW1lbWJlcnMgdGhlIHBvc2l0aW9uIHdoZXJlIG5leHRDaGFyIGlzIGluc2VydGVkLCBzbyB0aGF0IGl0IGNvdWxkIGJlCi0gICAqIHJldHJpZXZlZCBsYXRlciBieSB1c2luZyBnZXRSZW1lbWJlcmVkUG9zaXRpb24oKS4gVGhlIHJlbWVtYmVyZWQgcG9zaXRpb24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5Ci0gICAqIGFkanVzdGVkIGlmIGFkZGl0aW9uYWwgZm9ybWF0dGluZyBjaGFyYWN0ZXJzIGFyZSBsYXRlciBpbnNlcnRlZC9yZW1vdmVkIGluIGZyb250IG9mIG5leHRDaGFyLgotICAgKi8KLSAgcHVibGljIFN0cmluZyBpbnB1dERpZ2l0QW5kUmVtZW1iZXJQb3NpdGlvbihjaGFyIG5leHRDaGFyKSB7Ci0gICAgcmVtZW1iZXJQb3NpdGlvbiA9IHRydWU7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IGlucHV0RGlnaXQobmV4dENoYXIpOwotICAgIHJlbWVtYmVyUG9zaXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCiAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHBhcnRpYWxseSBmb3JtYXR0ZWQgcGhvbmUgbnVtYmVyIG9mIHRoZSBjaGFyYWN0ZXIgd2hpY2ggd2FzCiAgICAqIHByZXZpb3VzbHkgcGFzc2VkIGluIGFzIHRoZSBwYXJhbWV0ZXIgb2YgaW5wdXREaWdpdEFuZFJlbWVtYmVyUG9zaXRpb24oKS4KICAgICovCkBAIC0yNjQsMTIgKzI2NywxMiBAQAogCiAgIC8vIEF0dGVtcHRzIHRvIHNldCB0aGUgZm9ybWF0dGluZyB0ZW1wbGF0ZSBhbmQgcmV0dXJucyBhIHN0cmluZyB3aGljaCBjb250YWlucyB0aGUgZm9ybWF0dGVkCiAgIC8vIHZlcnNpb24gb2YgdGhlIGRpZ2l0cyBlbnRlcmVkIHNvIGZhci4KLSAgcHJpdmF0ZSBTdHJpbmcgYXR0ZW1wdFRvQ2hvb3NlRm9ybWF0dGluZ1BhdHRlcm4oKSB7CisgIHByaXZhdGUgU3RyaW5nIGF0dGVtcHRUb0Nob29zZUZvcm1hdHRpbmdQYXR0ZXJuKGJvb2xlYW4gcmVtZW1iZXJQb3NpdGlvbikgewogICAgIC8vIFdlIHN0YXJ0IHRvIGF0dGVtcHQgdG8gZm9ybWF0IG9ubHkgd2hlbiBhcyBsZWFzdCA0IGRpZ2l0cyBvZiBuYXRpb25hbCBudW1iZXIgKGV4Y2x1ZGluZwogICAgIC8vIG5hdGlvbmFsIHByZWZpeCkgaGF2ZSBiZWVuIGVudGVyZWQuCiAgICAgaWYgKG5hdGlvbmFsTnVtYmVyLmxlbmd0aCgpID49IDQpIHsKICAgICAgIGNob29zZUZvcm1hdEFuZENyZWF0ZVRlbXBsYXRlKG5hdGlvbmFsTnVtYmVyLnN1YnN0cmluZygwLCA0KSk7Ci0gICAgICByZXR1cm4gaW5wdXRBY2NydWVkTmF0aW9uYWxOdW1iZXIoKTsKKyAgICAgIHJldHVybiBpbnB1dEFjY3J1ZWROYXRpb25hbE51bWJlcihyZW1lbWJlclBvc2l0aW9uKTsKICAgICB9IGVsc2UgewogICAgICAgaWYgKHJlbWVtYmVyUG9zaXRpb24pIHsKICAgICAgICAgcG9zaXRpb25SZW1lbWJlcmVkID0gcHJlZml4QmVmb3JlTmF0aW9uYWxOdW1iZXIubGVuZ3RoKCkgKyBuYXRpb25hbE51bWJlci5sZW5ndGgoKTsKQEAgLTI4MCwyMyArMjgzLDIzIEBACiAKICAgLy8gSW52b2tlcyBpbnB1dERpZ2l0SGVscGVyIG9uIGVhY2ggZGlnaXQgb2YgdGhlIG5hdGlvbmFsIG51bWJlciBhY2NydWVkLCBhbmQgcmV0dXJucyBhIGZvcm1hdHRlZAogICAvLyBzdHJpbmcgaW4gdGhlIGVuZC4KLSAgcHJpdmF0ZSBTdHJpbmcgaW5wdXRBY2NydWVkTmF0aW9uYWxOdW1iZXIoKSB7CisgIHByaXZhdGUgU3RyaW5nIGlucHV0QWNjcnVlZE5hdGlvbmFsTnVtYmVyKGJvb2xlYW4gcmVtZW1iZXJQb3NpdGlvbikgewogICAgIGludCBsZW5ndGhPZk5hdGlvbmFsTnVtYmVyID0gbmF0aW9uYWxOdW1iZXIubGVuZ3RoKCk7CiAgICAgaWYgKGxlbmd0aE9mTmF0aW9uYWxOdW1iZXIgPiAwKSB7CiAgICAgICAvLyBUaGUgcG9zaXRpb25SZW1lbWJlcmVkIHNob3VsZCBiZSBvbmx5IGFkanVzdGVkIG9uY2UgaW4gdGhlIGxvb3AgdGhhdCBmb2xsb3dzLgotICAgICAgQm9vbGVhbiBwb3NpdGlvbkFscmVhZHlBZGp1c3RlZCA9IGZhbHNlOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhPZk5hdGlvbmFsTnVtYmVyIC0gMTsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyB0ZW1wID0gaW5wdXREaWdpdEhlbHBlcihuYXRpb25hbE51bWJlci5jaGFyQXQoaSkpOworICAgICAgYm9vbGVhbiBwb3NpdGlvbkFscmVhZHlBZGp1c3RlZCA9IGZhbHNlOworICAgICAgU3RyaW5nIHRlbXBOYXRpb25hbE51bWJlciA9ICIiOworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhPZk5hdGlvbmFsTnVtYmVyOyBpKyspIHsKKyAgICAgICAgdGVtcE5hdGlvbmFsTnVtYmVyID0gaW5wdXREaWdpdEhlbHBlcihuYXRpb25hbE51bWJlci5jaGFyQXQoaSksIHJlbWVtYmVyUG9zaXRpb24pOwogICAgICAgICBpZiAoIXBvc2l0aW9uQWxyZWFkeUFkanVzdGVkICYmCiAgICAgICAgICAgICBwb3NpdGlvblJlbWVtYmVyZWQgLSBwcmVmaXhCZWZvcmVOYXRpb25hbE51bWJlci5sZW5ndGgoKSA9PSBpICsgMSkgewotICAgICAgICAgIHBvc2l0aW9uUmVtZW1iZXJlZCA9IHByZWZpeEJlZm9yZU5hdGlvbmFsTnVtYmVyLmxlbmd0aCgpICsgdGVtcC5sZW5ndGgoKTsKKyAgICAgICAgICBwb3NpdGlvblJlbWVtYmVyZWQgPSBwcmVmaXhCZWZvcmVOYXRpb25hbE51bWJlci5sZW5ndGgoKSArIHRlbXBOYXRpb25hbE51bWJlci5sZW5ndGgoKTsKICAgICAgICAgICBwb3NpdGlvbkFscmVhZHlBZGp1c3RlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIFN0cmluZyB0ZW1wID0gaW5wdXREaWdpdEhlbHBlcihuYXRpb25hbE51bWJlci5jaGFyQXQobGVuZ3RoT2ZOYXRpb25hbE51bWJlciAtIDEpKTsKICAgICAgIHJldHVybiBhYmxlVG9Gb3JtYXQKLSAgICAgICAgICA/IHByZWZpeEJlZm9yZU5hdGlvbmFsTnVtYmVyICsgdGVtcAotICAgICAgICAgIDogdGVtcDsKKyAgICAgICAgICA/IHByZWZpeEJlZm9yZU5hdGlvbmFsTnVtYmVyICsgdGVtcE5hdGlvbmFsTnVtYmVyCisgICAgICAgICAgOiB0ZW1wTmF0aW9uYWxOdW1iZXI7CiAgICAgfSBlbHNlIHsKICAgICAgIGlmIChyZW1lbWJlclBvc2l0aW9uKSB7CiAgICAgICAgIHBvc2l0aW9uUmVtZW1iZXJlZCA9IHByZWZpeEJlZm9yZU5hdGlvbmFsTnVtYmVyLmxlbmd0aCgpOwpAQCAtMzA5LDEzICszMTIsMTIgQEAKICAgICBpbnQgc3RhcnRPZk5hdGlvbmFsTnVtYmVyID0gMDsKICAgICBpZiAoY3VycmVudE1ldGFEYXRhLmdldENvdW50cnlDb2RlKCkgPT0gMSAmJiBuYXRpb25hbE51bWJlci5jaGFyQXQoMCkgPT0gJzEnKSB7CiAgICAgICBzdGFydE9mTmF0aW9uYWxOdW1iZXIgPSAxOwotICAgICAgcHJlZml4QmVmb3JlTmF0aW9uYWxOdW1iZXIuYXBwZW5kKCIxIik7Ci0gICAgICAvLyBTaW5jZSBhIHNwYWNlIHdpbGwgYmUgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIG5hdGlvbmFsIHByZWZpeCBpbiB0aGlzIGNhc2UsIHdlIGluY3JlYXNlIHRoZQorICAgICAgcHJlZml4QmVmb3JlTmF0aW9uYWxOdW1iZXIuYXBwZW5kKCIxICIpOworICAgICAgLy8gU2luY2UgYSBzcGFjZSBpcyBpbnNlcnRlZCBhZnRlciB0aGUgbmF0aW9uYWwgcHJlZml4IGluIHRoaXMgY2FzZSwgd2UgaW5jcmVhc2UgdGhlCiAgICAgICAvLyByZW1lbWJlcmVkIHBvc2l0aW9uIGJ5IDEgZm9yIGFueXRoaW5nIHRoYXQgaXMgYWZ0ZXIgdGhlIG5hdGlvbmFsIHByZWZpeC4KLSAgICAgIGlmIChwb3NpdGlvblJlbWVtYmVyZWQgPiBwcmVmaXhCZWZvcmVOYXRpb25hbE51bWJlci5sZW5ndGgoKSkgeworICAgICAgaWYgKHBvc2l0aW9uUmVtZW1iZXJlZCA+IHByZWZpeEJlZm9yZU5hdGlvbmFsTnVtYmVyLmxlbmd0aCgpIC0gMSkgewogICAgICAgICBwb3NpdGlvblJlbWVtYmVyZWQrKzsKICAgICAgIH0KLSAgICAgIHByZWZpeEJlZm9yZU5hdGlvbmFsTnVtYmVyLmFwcGVuZCgiICIpOwogICAgIH0gZWxzZSBpZiAoY3VycmVudE1ldGFEYXRhLmhhc05hdGlvbmFsUHJlZml4KCkpIHsKICAgICAgIE1hdGNoZXIgbSA9IG5hdGlvbmFsUHJlZml4Rm9yUGFyc2luZy5tYXRjaGVyKG5hdGlvbmFsTnVtYmVyKTsKICAgICAgIGlmIChtLmxvb2tpbmdBdCgpKSB7CkBAIC0zOTIsNyArMzk0LDcgQEAKICAgICByZXR1cm4gbmV4dENoYXI7CiAgIH0KIAotICBwcml2YXRlIFN0cmluZyBpbnB1dERpZ2l0SGVscGVyKGNoYXIgbmV4dENoYXIpIHsKKyAgcHJpdmF0ZSBTdHJpbmcgaW5wdXREaWdpdEhlbHBlcihjaGFyIG5leHRDaGFyLCBib29sZWFuIHJlbWVtYmVyUG9zaXRpb24pIHsKICAgICBpZiAoIVBob25lTnVtYmVyVXRpbC5ESUdJVF9NQVBQSU5HUy5jb250YWluc0tleShuZXh0Q2hhcikpIHsKICAgICAgIHJldHVybiBjdXJyZW50T3V0cHV0LnRvU3RyaW5nKCk7CiAgICAgfQpAQCAtNDA4LDEwICs0MTAsNyBAQAogICAgIH0gZWxzZSB7ICAvLyBNb3JlIGRpZ2l0cyBhcmUgZW50ZXJlZCB0aGFuIHdlIGNvdWxkIGhhbmRsZS4KICAgICAgIGN1cnJlbnRPdXRwdXQuYXBwZW5kKG5leHRDaGFyKTsKICAgICAgIGFibGVUb0Zvcm1hdCA9IGZhbHNlOwotICAgICAgaWYgKHBvc2l0aW9uUmVtZW1iZXJlZCA+IDApIHsKLSAgICAgICAgcG9zaXRpb25SZW1lbWJlcmVkID0gb3JpZ2luYWxQb3NpdGlvbjsKLSAgICAgICAgY3VycmVudE91dHB1dC5zZXRMZW5ndGgoMCk7Ci0gICAgICB9CisgICAgICByZXNldFBvc2l0aW9uT25GYWlsdXJlVG9Gb3JtYXQoKTsKICAgICAgIHJldHVybiBhY2NydWVkSW5wdXQudG9TdHJpbmcoKTsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL2phdmEvc3JjL2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvUGhvbmVOdW1iZXJNZXRhZGF0YVByb3RvIGIvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZU51bWJlck1ldGFkYXRhUHJvdG8KaW5kZXggMzFhMTVlNS4uYzI5MDZiYyAxMDA2NDQKLS0tIGEvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZU51bWJlck1ldGFkYXRhUHJvdG8KKysrIGIvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZU51bWJlck1ldGFkYXRhUHJvdG8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZU51bWJlclV0aWwuamF2YSBiL2phdmEvc3JjL2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvUGhvbmVOdW1iZXJVdGlsLmphdmEKaW5kZXggZDBhYTVjMS4uMDgwYTY1YSAxMDA2NDQKLS0tIGEvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZU51bWJlclV0aWwuamF2YQorKysgYi9qYXZhL3NyYy9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL1Bob25lTnVtYmVyVXRpbC5qYXZhCkBAIC0yNiw2ICsyNiw3IEBACiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKQEAgLTUzLDMzICs1NCwxOSBAQAogICAgICAgIi9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL1Bob25lTnVtYmVyTWV0YWRhdGFQcm90byI7CiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0dHRVIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFBob25lTnVtYmVyVXRpbC5jbGFzcy5nZXROYW1lKCkpOwogCi0gIC8vIEEgbWFwcGluZyBmcm9tIGEgY291bnRyeSBjb2RlIHRvIGEgcmVnaW9uIGNvZGUgd2hpY2ggZGVub3RlcyB0aGUgY291bnRyeS9yZWdpb24KLSAgLy8gcmVwcmVzZW50ZWQgYnkgdGhhdCBjb3VudHJ5IGNvZGUuIE5vdGUgY291bnRyaWVzIHVuZGVyIE5BTlBBIHNoYXJlIHRoZSBjb3VudHJ5IGNvZGUgMSwKLSAgLy8gUnVzc2lhIGFuZCBLYXpha2hzdGFuIHNoYXJlIHRoZSBjb3VudHJ5IGNvZGUgNywgYW5kIG1hbnkgRnJlbmNoIHRlcnJpdG9yaWVzIGluIHRoZSBJbmRpYW4KLSAgLy8gT2NlYW4gc2hhcmUgdGhlIGNvdW50cnkgY29kZSAyNjIuIFVuZGVyIHRoaXMgbWFwLCAxIGlzIG1hcHBlZCB0byBVUywgNyBpcyBtYXBwZWQgdG8gUlUsCi0gIC8vIGFuZCAyNjIgaXMgbWFwcGVkIHRvIFJFLiBUaGUgaW5pdGlhbCBjYXBhY2l0eSBpcyBzZXQgdG8gMzAwIGFzIHRoZXJlIGFyZSByb3VnaGx5IDIwMCBkaWZmZXJlbnQKKyAgLy8gQSBtYXBwaW5nIGZyb20gYSBjb3VudHJ5IGNvZGUgdG8gdGhlIHJlZ2lvbiBjb2RlcyB3aGljaCBkZW5vdGUgdGhlIGNvdW50cnkvcmVnaW9uCisgIC8vIHJlcHJlc2VudGVkIGJ5IHRoYXQgY291bnRyeSBjb2RlLiBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBjb3VudHJpZXMgc2hhcmluZyBhIGNhbGxpbmcgY29kZSwKKyAgLy8gc3VjaCBhcyB0aGUgTkFOUEEgY291bnRyaWVzLCB0aGUgb25lIGluZGljYXRlZCB3aXRoICJpc01haW5Db3VudHJ5Rm9yQ29kZSIgaW4gdGhlIG1ldGFkYXRhCisgIC8vIHNob3VsZCBiZSBmaXJzdC4gVGhlIGluaXRpYWwgY2FwYWNpdHkgaXMgc2V0IHRvIDMwMCBhcyB0aGVyZSBhcmUgcm91Z2hseSAyMDAgZGlmZmVyZW50CiAgIC8vIGNvdW50cnkgY29kZXMsIGFuZCB0aGlzIG9mZmVycyBhIGxvYWQgZmFjdG9yIG9mIHJvdWdobHkgMC43NS4KLSAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPEludGVnZXIsIFN0cmluZz4gY291bnRyeUNvZGVUb1JlZ2lvbkNvZGVNYXAgPQotICAgICAgbmV3IEhhc2hNYXA8SW50ZWdlciwgU3RyaW5nPigzMTApOworICBwcml2YXRlIGZpbmFsIE1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4gPiBjb3VudHJ5Q29kZVRvUmVnaW9uQ29kZU1hcCA9CisgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4gPigzMTApOwogCiAgIC8vIFRoZSBzZXQgb2YgY291bnRyaWVzIHRoYXQgc2hhcmUgY291bnRyeSBjb2RlIDEuIFRoZXJlIGFyZSByb3VnaGx5IDI2IGNvdW50cmllcyBvZiB0aGVtIGFuZCB3ZQogICAvLyBzZXQgdGhlIGluaXRpYWwgY2FwYWNpdHkgb2YgdGhlIEhhc2hTZXQgdG8gMzUgdG8gb2ZmZXIgYSBsb2FkIGZhY3RvciBvZiByb3VnaGx5IDAuNzUuCiAgIHByaXZhdGUgZmluYWwgSGFzaFNldDxTdHJpbmc+IG5hbnBhQ291bnRyaWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigzNSk7CiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOQU5QQV9DT1VOVFJZX0NPREUgPSAxOwogCi0gIC8vIFRoZSBzZXQgb2YgY291bnRyaWVzIHRoYXQgc2hhcmUgY291bnRyeSBjb2RlIDcuCi0gIHByaXZhdGUgZmluYWwgSGFzaFNldDxTdHJpbmc+IHJ1c3NpYUZlZGVyYXRpb25Db3VudHJpZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KDMpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUlVTU0lBTl9GRURfQ09VTlRSWV9DT0RFID0gNzsKLQotICAvLyBUaGUgc2V0IG9mIGNvdW50cmllcyB0aGF0IHNoYXJlIGNvdW50cnkgY29kZSA0NC4KLSAgcHJpdmF0ZSBmaW5hbCBIYXNoU2V0PFN0cmluZz4gZ3JlYXRCcml0YWluQW5kRGVwZW5kZW5jaWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPig3KTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdSRUFUX0JSSVRBSU5fQ09VTlRSWV9DT0RFID0gNDQ7Ci0KLSAgLy8gVGhlIHNldCBvZiBjb3VudHJpZXMgdGhhdCBzaGFyZSBjb3VudHJ5IGNvZGUgMjYyLgotICBwcml2YXRlIGZpbmFsIEhhc2hTZXQ8U3RyaW5nPiBmcmVuY2hJbmRpYW5PY2VhblRlcnJpdG9yaWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPig2KTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRlJFTkNIX0lORElBTl9PQ0VBTl9DT1VOVFJZX0NPREUgPSAyNjI7Ci0KICAgLy8gVGhlIFBMVVNfU0lHTiBzaWduaWZpZXMgdGhlIGludGVybmF0aW9uYWwgcHJlZml4LgogICBzdGF0aWMgZmluYWwgY2hhciBQTFVTX1NJR04gPSAnKyc7CiAKQEAgLTE3Myw3ICsxNjAsNiBAQAogICAgIGFTZXQuYWRkKDIyNSk7ICAvLyBDb3RlIGQnSXZvaXJlCiAgICAgYVNldC5hZGQoMjI3KTsgIC8vIE5pZ2VyCiAgICAgYVNldC5hZGQoMjI4KTsgIC8vIFRvZ28KLSAgICBhU2V0LmFkZCgyNDApOyAgLy8gRXF1YXRvcmlhbCBHdWluZWEKICAgICBhU2V0LmFkZCgyNDEpOyAgLy8gR2Fib24KICAgICBhU2V0LmFkZCgzNzkpOyAgLy8gVmF0aWNhbiBDaXR5CiAgICAgTEVBRElOR19aRVJPX0NPVU5UUklFUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldChhU2V0KTsKQEAgLTIxNCw3ICsyMDAsNyBAQAogICAvLyBub3QgaW5jbHVkZSBvdGhlciBwdW5jdHVhdGlvbiwgYXMgdGhpcyB3aWxsIGJlIHN0cmlwcGVkIGxhdGVyIGR1cmluZyBwYXJzaW5nIGFuZCBpcyBvZiBubwogICAvLyBpbmZvcm1hdGlvbiB2YWx1ZSB3aGVuIHBhcnNpbmcgYSBudW1iZXIuCiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJRF9TVEFSVF9DSEFSID0gIlsiICsgUExVU19DSEFSUyArIFZBTElEX0RJR0lUUyArICJdIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBWQUxJRF9TVEFSVF9DSEFSX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoVkFMSURfU1RBUlRfQ0hBUik7CisgIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIFZBTElEX1NUQVJUX0NIQVJfUEFUVEVSTiA9IFBhdHRlcm4uY29tcGlsZShWQUxJRF9TVEFSVF9DSEFSKTsKIAogICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gb2YgY2hhcmFjdGVycyB0eXBpY2FsbHkgdXNlZCB0byBzdGFydCBhIHNlY29uZCBwaG9uZSBudW1iZXIgZm9yIHRoZSBwdXJwb3NlcwogICAvLyBvZiBwYXJzaW5nLiBUaGlzIGFsbG93cyB1cyB0byBzdHJpcCBvZmYgcGFydHMgb2YgdGhlIG51bWJlciB0aGF0IGFyZSBhY3R1YWxseSB0aGUgc3RhcnQgb2YKQEAgLTI2MCw4ICsyNDYsOCBAQAogICAvLyBOb3RlIHRoYXQgdGhlIG9ubHkgY2FwdHVyaW5nIGdyb3VwcyBzaG91bGQgYmUgYXJvdW5kIHRoZSBkaWdpdHMgdGhhdCB5b3Ugd2FudCB0byBjYXB0dXJlIGFzCiAgIC8vIHBhcnQgb2YgdGhlIGV4dGVuc2lvbiwgb3IgZWxzZSBwYXJzaW5nIHdpbGwgZmFpbCEKICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtOT1dOX0VYVE5fUEFUVEVSTlMgPSAiWyBcdTAwQTBcXHQsXSooPzpleHQoPzplbnNpbyk/bj98IiArCi0gICAgICAiXHVGRjQ1XHVGRjU4XHVGRjU0XHVGRjRFP3xbLHhcdUZGNTgjXHVGRjAzflx1RkY1RV18aW50fFx1RkY0OVx1RkY0RVx1RkY1NCkiICsKLSAgICAgICJbOlxcLlx1RkYwRV0/WyBcdTAwQTBcXHQsXSooWyIgKyBWQUxJRF9ESUdJVFMgKyAiXXsxLDd9KXxbLSBdKyhbIiArIFZBTElEX0RJR0lUUyArCisgICAgICAiXHVGRjQ1XHVGRjU4XHVGRjU0XHVGRjRFP3xbLHhcdUZGNTgjXHVGRjAzflx1RkY1RV18aW50fGFuZXhvfFx1RkY0OVx1RkY0RVx1RkY1NCkiICsKKyAgICAgICJbOlxcLlx1RkYwRV0/WyBcdTAwQTBcXHQsLV0qKFsiICsgVkFMSURfRElHSVRTICsgIl17MSw3fSl8Wy0gXSsoWyIgKyBWQUxJRF9ESUdJVFMgKwogICAgICAgIl17MSw1fSkjIjsKIAogICAvLyBSZWdleHAgb2YgYWxsIGtub3duIGV4dGVuc2lvbiBwcmVmaXhlcyB1c2VkIGJ5IGRpZmZlcmVudCBjb3VudHJpZXMgZm9sbG93ZWQgYnkgMSBvciBtb3JlIHZhbGlkCkBAIC0yNzYsMTAgKzI2MiwxMiBAQAogICAgICAgUGF0dGVybi5jb21waWxlKFZBTElEX1BIT05FX05VTUJFUiArICIoPzoiICsgS05PV05fRVhUTl9QQVRURVJOUyArICIpPyIsCiAgICAgICAgICAgICAgICAgICAgICAgUGF0dGVybi5VTklDT0RFX0NBU0UgfCBQYXR0ZXJuLkNBU0VfSU5TRU5TSVRJVkUpOwogCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gTk9OX0RJR0lUX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoIihcXEQrKSIpOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIE5PTl9ESUdJVFNfUEFUVEVSTiA9IFBhdHRlcm4uY29tcGlsZSgiKFxcRCspIik7CiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gRklSU1RfR1JPVVBfUEFUVEVSTiA9IFBhdHRlcm4uY29tcGlsZSgiKFxcJDEpIik7CiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gTlBfUEFUVEVSTiA9IFBhdHRlcm4uY29tcGlsZSgiXFwkTlAiKTsKICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBGR19QQVRURVJOID0gUGF0dGVybi5jb21waWxlKCJcXCRGRyIpOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIENDX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoIlxcJENDIik7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gTk9OX0RJR0lUX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoIlxcRCIpOwogCiAgIHByaXZhdGUgc3RhdGljIFBob25lTnVtYmVyVXRpbCBpbnN0YW5jZSA9IG51bGw7CiAKQEAgLTI4NywxMCArMjc1LDEwIEBACiAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFBob25lTWV0YWRhdGE+IGNvdW50cnlUb01ldGFkYXRhTWFwID0KICAgICAgIG5ldyBIYXNoTWFwPFN0cmluZywgUGhvbmVNZXRhZGF0YT4oKTsKIAotICAvLyBBIGNhY2hlIGZvciBmcmVxdWVudGx5IHVzZWQgcmVndWxhciBleHByZXNzaW9ucy4gQXMgbW9zdCBwZW9wbGUgdXNlIHBob25lIG51bWJlcnMgcHJpbWFyaWx5Ci0gIC8vIGZyb20gb25lIGNvdW50cnksIGFuZCB0aGVyZSBhcmUgcm91Z2hseSAzMCByZWd1bGFyIGV4cHJlc3Npb25zIG5lZWRlZCwgdGhlIGluaXRpYWwgY2FwYWNpdHkgb2YKLSAgLy8gNTAgb2ZmZXJzIGEgcm91Z2ggbG9hZCBmYWN0b3Igb2YgMC43NS4KLSAgcHJpdmF0ZSBSZWdleENhY2hlIHJlZ2V4Q2FjaGUgPSBuZXcgUmVnZXhDYWNoZSg1MCk7CisgIC8vIEEgY2FjaGUgZm9yIGZyZXF1ZW50bHkgdXNlZCBjb3VudHJ5LXNwZWNpZmljIHJlZ3VsYXIgZXhwcmVzc2lvbnMuIEFzIG1vc3QgcGVvcGxlIHVzZSBwaG9uZQorICAvLyBudW1iZXJzIHByaW1hcmlseSBmcm9tIG9uZSB0byB0d28gY291bnRyaWVzLCBhbmQgdGhlcmUgYXJlIHJvdWdobHkgNjAgcmVndWxhciBleHByZXNzaW9ucworICAvLyBuZWVkZWQsIHRoZSBpbml0aWFsIGNhcGFjaXR5IG9mIDEwMCBvZmZlcnMgYSByb3VnaCBsb2FkIGZhY3RvciBvZiAwLjc1LgorICBwcml2YXRlIFJlZ2V4Q2FjaGUgcmVnZXhDYWNoZSA9IG5ldyBSZWdleENhY2hlKDEwMCk7CiAKICAgLyoqCiAgICAqIElOVEVSTkFUSU9OQUwgYW5kIE5BVElPTkFMIGZvcm1hdHMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZGVmaW5pdGlvbiBpbiBJVFUtVCBSZWNvbW1lbmRhdGlvbgpAQCAtMzcxLDM0ICszNTksMjMgQEAKICAgICAgICAgY291bnRyeVRvTWV0YWRhdGFNYXAucHV0KHJlZ2lvbkNvZGUsIG1ldGFkYXRhKTsKICAgICAgICAgY291bnRyeVRvTWV0YWRhdGFNYXAucHV0KHJlZ2lvbkNvZGUudG9Mb3dlckNhc2UoKSwgbWV0YWRhdGEpOwogICAgICAgICBpbnQgY291bnRyeUNvZGUgPSBtZXRhZGF0YS5nZXRDb3VudHJ5Q29kZSgpOwotICAgICAgICBzd2l0Y2ggKGNvdW50cnlDb2RlKSB7Ci0gICAgICAgICAgY2FzZSBOQU5QQV9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICBuYW5wYUNvdW50cmllcy5hZGQocmVnaW9uQ29kZSk7Ci0gICAgICAgICAgICBuYW5wYUNvdW50cmllcy5hZGQocmVnaW9uQ29kZS50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgUlVTU0lBTl9GRURfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgcnVzc2lhRmVkZXJhdGlvbkNvdW50cmllcy5hZGQocmVnaW9uQ29kZSk7Ci0gICAgICAgICAgICBydXNzaWFGZWRlcmF0aW9uQ291bnRyaWVzLmFkZChyZWdpb25Db2RlLnRvTG93ZXJDYXNlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGUkVOQ0hfSU5ESUFOX09DRUFOX0NPVU5UUllfQ09ERToKLSAgICAgICAgICAgIGZyZW5jaEluZGlhbk9jZWFuVGVycml0b3JpZXMuYWRkKHJlZ2lvbkNvZGUpOwotICAgICAgICAgICAgZnJlbmNoSW5kaWFuT2NlYW5UZXJyaXRvcmllcy5hZGQocmVnaW9uQ29kZS50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1JFQVRfQlJJVEFJTl9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICBncmVhdEJyaXRhaW5BbmREZXBlbmRlbmNpZXMuYWRkKHJlZ2lvbkNvZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNvdW50cnlDb2RlVG9SZWdpb25Db2RlTWFwLnB1dChjb3VudHJ5Q29kZSwgcmVnaW9uQ29kZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGNvdW50cnlDb2RlVG9SZWdpb25Db2RlTWFwLmNvbnRhaW5zS2V5KGNvdW50cnlDb2RlKSkgeworICAgICAgICAgIGlmIChtZXRhZGF0YS5nZXRNYWluQ291bnRyeUZvckNvZGUoKSkgeworICAgICAgICAgICAgY291bnRyeUNvZGVUb1JlZ2lvbkNvZGVNYXAuZ2V0KGNvdW50cnlDb2RlKS5hZGQoMCwgcmVnaW9uQ29kZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvdW50cnlDb2RlVG9SZWdpb25Db2RlTWFwLmdldChjb3VudHJ5Q29kZSkuYWRkKHJlZ2lvbkNvZGUpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBGb3IgbW9zdCBjb3VudHJpZXMsIHRoZXJlIHdpbGwgYmUgb25seSBvbmUgcmVnaW9uIGNvZGUgZm9yIHRoZSBjb3VudHJ5IGRpYWxpbmcgY29kZS4KKyAgICAgICAgICBMaXN0PFN0cmluZz4gbGlzdFdpdGhSZWdpb25Db2RlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KDEpOworICAgICAgICAgIGxpc3RXaXRoUmVnaW9uQ29kZS5hZGQocmVnaW9uQ29kZSk7CisgICAgICAgICAgY291bnRyeUNvZGVUb1JlZ2lvbkNvZGVNYXAucHV0KGNvdW50cnlDb2RlLCBsaXN0V2l0aFJlZ2lvbkNvZGUpOworICAgICAgICB9CisgICAgICAgIGlmIChjb3VudHJ5Q29kZSA9PSBOQU5QQV9DT1VOVFJZX0NPREUpIHsKKyAgICAgICAgICBuYW5wYUNvdW50cmllcy5hZGQocmVnaW9uQ29kZSk7CisgICAgICAgICAgbmFucGFDb3VudHJpZXMuYWRkKHJlZ2lvbkNvZGUudG9Mb3dlckNhc2UoKSk7CiAgICAgICAgIH0KICAgICAgIH0KLQotICAgICAgLy8gT3ZlcnJpZGUgdGhlIHZhbHVlLCBzbyB0aGF0IDEgaXMgYWx3YXlzIG1hcHBlZCB0byBVUywgNyBpcyBhbHdheXMgbWFwcGVkIHRvIFJVLCA0NCB0byBHQgotICAgICAgLy8gYW5kIDI2MiB0byBSRS4KLSAgICAgIGNvdW50cnlDb2RlVG9SZWdpb25Db2RlTWFwLnB1dChOQU5QQV9DT1VOVFJZX0NPREUsICJVUyIpOwotICAgICAgY291bnRyeUNvZGVUb1JlZ2lvbkNvZGVNYXAucHV0KFJVU1NJQU5fRkVEX0NPVU5UUllfQ09ERSwgIlJVIik7Ci0gICAgICBjb3VudHJ5Q29kZVRvUmVnaW9uQ29kZU1hcC5wdXQoRlJFTkNIX0lORElBTl9PQ0VBTl9DT1VOVFJZX0NPREUsICJSRSIpOwotICAgICAgY291bnRyeUNvZGVUb1JlZ2lvbkNvZGVNYXAucHV0KEdSRUFUX0JSSVRBSU5fQ09VTlRSWV9DT0RFLCAiR0IiKTsKICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICBMT0dHRVIubG9nKExldmVsLldBUk5JTkcsIGUudG9TdHJpbmcoKSk7CiAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CkBAIC00MjIsMTQgKzM5OSwxNCBAQAogICAgKiAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgbnVtYmVyCiAgICAqLwogICBzdGF0aWMgU3RyaW5nIGV4dHJhY3RQb3NzaWJsZU51bWJlcihTdHJpbmcgbnVtYmVyKSB7Ci0gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIG5vbi1hbHBoYSBub24tbnVtZXJpY2FsIGNoYXJhY3RlcnMuCi0gICAgTWF0Y2hlciB0cmFpbGluZ0NoYXJzTWF0Y2hlciA9IFVOV0FOVEVEX0VORF9DSEFSX1BBVFRFUk4ubWF0Y2hlcihudW1iZXIpOwotICAgIGlmICh0cmFpbGluZ0NoYXJzTWF0Y2hlci5maW5kKCkpIHsKLSAgICAgIG51bWJlciA9IG51bWJlci5zdWJzdHJpbmcoMCwgdHJhaWxpbmdDaGFyc01hdGNoZXIuc3RhcnQoKSk7Ci0gICAgfQogICAgIE1hdGNoZXIgbSA9IFZBTElEX1NUQVJUX0NIQVJfUEFUVEVSTi5tYXRjaGVyKG51bWJlcik7CiAgICAgaWYgKG0uZmluZCgpKSB7CiAgICAgICBudW1iZXIgPSBudW1iZXIuc3Vic3RyaW5nKG0uc3RhcnQoKSk7CisgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgbm9uLWFscGhhIG5vbi1udW1lcmljYWwgY2hhcmFjdGVycy4KKyAgICAgIE1hdGNoZXIgdHJhaWxpbmdDaGFyc01hdGNoZXIgPSBVTldBTlRFRF9FTkRfQ0hBUl9QQVRURVJOLm1hdGNoZXIobnVtYmVyKTsKKyAgICAgIGlmICh0cmFpbGluZ0NoYXJzTWF0Y2hlci5maW5kKCkpIHsKKyAgICAgICAgbnVtYmVyID0gbnVtYmVyLnN1YnN0cmluZygwLCB0cmFpbGluZ0NoYXJzTWF0Y2hlci5zdGFydCgpKTsKKyAgICAgIH0KICAgICAgIC8vIENoZWNrIGZvciBleHRyYSBudW1iZXJzIGF0IHRoZSBlbmQuCiAgICAgICBNYXRjaGVyIHNlY29uZE51bWJlciA9IFNFQ09ORF9OVU1CRVJfU1RBUlRfUEFUVEVSTi5tYXRjaGVyKG51bWJlcik7CiAgICAgICBpZiAoc2Vjb25kTnVtYmVyLmZpbmQoKSkgewpAQCAtNzEwLDkgKzY4Nyw5IEBACiAgICAgICBmb3JtYXROdW1iZXJCeUZvcm1hdChjb3VudHJ5Q29kZSwgUGhvbmVOdW1iZXJGb3JtYXQuRTE2NCwgZm9ybWF0dGVkTnVtYmVyKTsKICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgLy8gTm90ZSBoZXJlIHRoYXQgYWxsIE5BTlBBIGZvcm1hdHRpbmcgcnVsZXMgYXJlIGNvbnRhaW5lZCBieSBVUywgc28gd2UgdXNlIHRoYXQgdG8gZm9ybWF0IE5BTlBBCi0gICAgLy8gbnVtYmVycy4gVGhlIHNhbWUgYXBwbGllcyB0byBSdXNzaWFuIEZlZCBjb3VudHJpZXMgLSBydWxlcyBhcmUgY29udGFpbmVkIGJ5IFJ1c3NpYS4gRnJlbmNoCi0gICAgLy8gSW5kaWFuIE9jZWFuIGNvdW50cnkgcnVsZXMgYXJlIGNvbnRhaW5lZCBieSBSZXVuaW9uLgorICAgIC8vIE5vdGUgZ2V0UmVnaW9uQ29kZUZvckNvdW50cnlDb2RlKCkgaXMgdXNlZCBiZWNhdXNlIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gZm9yIGNvdW50cmllcyB3aGljaAorICAgIC8vIHNoYXJlIGEgY291bnRyeSBjb2RlIGlzIGNvbnRhaW5lZCBieSBvbmx5IG9uZSBjb3VudHJ5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBGb3IgZXhhbXBsZSwKKyAgICAvLyBmb3IgTkFOUEEgY291bnRyaWVzIGl0IHdpbGwgYmUgY29udGFpbmVkIGluIHRoZSBtZXRhZGF0YSBmb3IgVVMuCiAgICAgU3RyaW5nIHJlZ2lvbkNvZGUgPSBnZXRSZWdpb25Db2RlRm9yQ291bnRyeUNvZGUoY291bnRyeUNvZGUpOwogICAgIGlmICghaXNWYWxpZFJlZ2lvbkNvZGUocmVnaW9uQ29kZSkpIHsKICAgICAgIGZvcm1hdHRlZE51bWJlci5hcHBlbmQobmF0aW9uYWxTaWduaWZpY2FudE51bWJlcik7CkBAIC03NDAsMTEgKzcxNywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaG9uZU51bWJlckZvcm1hdCBudW1iZXJGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8TnVtYmVyRm9ybWF0PiB1c2VyRGVmaW5lZEZvcm1hdHMpIHsKICAgICBpbnQgY291bnRyeUNvZGUgPSBudW1iZXIuZ2V0Q291bnRyeUNvZGUoKTsKKyAgICBTdHJpbmcgbmF0aW9uYWxTaWduaWZpY2FudE51bWJlciA9IGdldE5hdGlvbmFsU2lnbmlmaWNhbnROdW1iZXIobnVtYmVyKTsKICAgICAvLyBOb3RlIGdldFJlZ2lvbkNvZGVGb3JDb3VudHJ5Q29kZSgpIGlzIHVzZWQgYmVjYXVzZSBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIGZvciBjb3VudHJpZXMgd2hpY2gKICAgICAvLyBzaGFyZSBhIGNvdW50cnkgY29kZSBpcyBjb250YWluZWQgYnkgb25seSBvbmUgY291bnRyeSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gRm9yIGV4YW1wbGUsCiAgICAgLy8gZm9yIE5BTlBBIGNvdW50cmllcyBpdCB3aWxsIGJlIGNvbnRhaW5lZCBpbiB0aGUgbWV0YWRhdGEgZm9yIFVTLgogICAgIFN0cmluZyByZWdpb25Db2RlID0gZ2V0UmVnaW9uQ29kZUZvckNvdW50cnlDb2RlKGNvdW50cnlDb2RlKTsKLSAgICBTdHJpbmcgbmF0aW9uYWxTaWduaWZpY2FudE51bWJlciA9IGdldE5hdGlvbmFsU2lnbmlmaWNhbnROdW1iZXIobnVtYmVyKTsKICAgICBpZiAoIWlzVmFsaWRSZWdpb25Db2RlKHJlZ2lvbkNvZGUpKSB7CiAgICAgICByZXR1cm4gbmF0aW9uYWxTaWduaWZpY2FudE51bWJlcjsKICAgICB9CkBAIC03NzIsNiArNzQ5LDI3IEBACiAgICAgcmV0dXJuIGZvcm1hdHRlZE51bWJlci50b1N0cmluZygpOwogICB9CiAKKyAgcHVibGljIFN0cmluZyBmb3JtYXROYXRpb25hbE51bWJlcldpdGhDYXJyaWVyQ29kZShQaG9uZU51bWJlciBudW1iZXIsIFN0cmluZyBjYXJyaWVyQ29kZSkgeworICAgIGludCBjb3VudHJ5Q29kZSA9IG51bWJlci5nZXRDb3VudHJ5Q29kZSgpOworICAgIFN0cmluZyBuYXRpb25hbFNpZ25pZmljYW50TnVtYmVyID0gZ2V0TmF0aW9uYWxTaWduaWZpY2FudE51bWJlcihudW1iZXIpOworICAgIC8vIE5vdGUgZ2V0UmVnaW9uQ29kZUZvckNvdW50cnlDb2RlKCkgaXMgdXNlZCBiZWNhdXNlIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gZm9yIGNvdW50cmllcyB3aGljaAorICAgIC8vIHNoYXJlIGEgY291bnRyeSBjb2RlIGlzIGNvbnRhaW5lZCBieSBvbmx5IG9uZSBjb3VudHJ5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBGb3IgZXhhbXBsZSwKKyAgICAvLyBmb3IgTkFOUEEgY291bnRyaWVzIGl0IHdpbGwgYmUgY29udGFpbmVkIGluIHRoZSBtZXRhZGF0YSBmb3IgVVMuCisgICAgU3RyaW5nIHJlZ2lvbkNvZGUgPSBnZXRSZWdpb25Db2RlRm9yQ291bnRyeUNvZGUoY291bnRyeUNvZGUpOworICAgIGlmICghaXNWYWxpZFJlZ2lvbkNvZGUocmVnaW9uQ29kZSkpIHsKKyAgICAgIHJldHVybiBuYXRpb25hbFNpZ25pZmljYW50TnVtYmVyOworICAgIH0KKworICAgIFN0cmluZ0J1ZmZlciBmb3JtYXR0ZWROdW1iZXIgPSBuZXcgU3RyaW5nQnVmZmVyKDIwKTsKKyAgICBmb3JtYXR0ZWROdW1iZXIuYXBwZW5kKGZvcm1hdE5hdGlvbmFsTnVtYmVyKG5hdGlvbmFsU2lnbmlmaWNhbnROdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25Db2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJyaWVyQ29kZSkpOworICAgIG1heWJlR2V0Rm9ybWF0dGVkRXh0ZW5zaW9uKG51bWJlciwgcmVnaW9uQ29kZSwgZm9ybWF0dGVkTnVtYmVyKTsKKyAgICBmb3JtYXROdW1iZXJCeUZvcm1hdChjb3VudHJ5Q29kZSwgUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUwsIGZvcm1hdHRlZE51bWJlcik7CisgICAgcmV0dXJuIGZvcm1hdHRlZE51bWJlci50b1N0cmluZygpOworICB9CisKICAgLyoqCiAgICAqIEZvcm1hdHMgYSBwaG9uZSBudW1iZXIgZm9yIG91dC1vZi1jb3VudHJ5IGRpYWxpbmcgcHVycG9zZS4gSWYgbm8gY291bnRyeUNhbGxpbmdGcm9tCiAgICAqIGlzIHN1cHBsaWVkLCB3ZSBmb3JtYXQgdGhlIG51bWJlciBpbiBpdHMgSU5URVJOQVRJT05BTCBmb3JtYXQuIElmIHRoZSBjb3VudHJ5Q2FsbGluZ0Zyb20gaXMKQEAgLTc5Niw1NSArNzk0LDI0IEBACiAgICAgICByZXR1cm4gZm9ybWF0KG51bWJlciwgUGhvbmVOdW1iZXJGb3JtYXQuSU5URVJOQVRJT05BTCk7CiAgICAgfQogICAgIGludCBjb3VudHJ5Q29kZSA9IG51bWJlci5nZXRDb3VudHJ5Q29kZSgpOwotICAgIGlmIChjb3VudHJ5Q29kZSA9PSBOQU5QQV9DT1VOVFJZX0NPREUgJiYgaXNOQU5QQUNvdW50cnkoY291bnRyeUNhbGxpbmdGcm9tKSkgewotICAgICAgLy8gRm9yIE5BTlBBIGNvdW50cmllcywgcmV0dXJuIHRoZSBuYXRpb25hbCBmb3JtYXQgZm9yIHRoZXNlIGNvdW50cmllcyBidXQgcHJlZml4IGl0IHdpdGggdGhlCi0gICAgICAvLyBjb3VudHJ5IGNvZGUuCi0gICAgICByZXR1cm4gY291bnRyeUNvZGUgKyAiICIgKyBmb3JtYXQobnVtYmVyLCBQaG9uZU51bWJlckZvcm1hdC5OQVRJT05BTCk7Ci0gICAgfQotICAgIGlmIChjb3VudHJ5Q29kZSA9PSBGUkVOQ0hfSU5ESUFOX09DRUFOX0NPVU5UUllfQ09ERSAmJgotICAgICAgICBmcmVuY2hJbmRpYW5PY2VhblRlcnJpdG9yaWVzLmNvbnRhaW5zKGNvdW50cnlDYWxsaW5nRnJvbSkpIHsKLSAgICAgIC8vIEZvciBkaWFsbGluZyBiZXR3ZWVuIEZSRU5DSF9JTkRJQU5fT0NFQU4gY291bnRyaWVzLCB0aGUgMTAgZGlnaXQgbnVtYmVyIGlzIGFsbCB3ZSBuZWVkLgotICAgICAgLy8gVGVjaG5pY2FsbHkgdGhpcyBpcyB0aGUgY2FzZSBmb3IgZGlhbGxpbmcgZnJvbSBsYSBSZXVuaW9uIHRvIG90aGVyIG92ZXJzZWFzIGRlcGFydG1lbnRzIG9mCi0gICAgICAvLyBGcmFuY2UgKEZyZW5jaCBHdWlhbmEsIE1hcnRpbmlxdWUsIEd1YWRlbG91cGUpLCBidXQgbm90IHZpY2UgdmVyc2EgLSBzbyB3ZSBkb24ndCBjb3ZlciB0aGlzCi0gICAgICAvLyBlZGdlIGNhc2UgZm9yIG5vdyBhbmQgZm9yIHRob3NlIGNhc2VzIHJldHVybiB0aGUgdmVyc2lvbiBpbmNsdWRpbmcgY291bnRyeSBjb2RlLgotICAgICAgLy8gRGV0YWlscyBoZXJlOiBodHRwOi8vd3d3LnBldGl0ZnV0ZS5jb20vdm95YWdlLzIyNS1pbmZvLXByYXRpcXVlcy1yZXVuaW9uCi0gICAgICByZXR1cm4gZm9ybWF0KG51bWJlciwgUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUwpOwotICAgIH0KLSAgICBpZiAoY291bnRyeUNvZGUgPT0gR1JFQVRfQlJJVEFJTl9DT1VOVFJZX0NPREUgJiYKLSAgICAgICAgZ3JlYXRCcml0YWluQW5kRGVwZW5kZW5jaWVzLmNvbnRhaW5zKGNvdW50cnlDYWxsaW5nRnJvbSkpIHsKLSAgICAgIC8vIEl0IHNlZW1zIHRoYXQgbnVtYmVycyBjYW4gYmUgZGlhbGxlZCBpbiBuYXRpb25hbCBmb3JtYXQgYmV0d2VlbiBHcmVhdCBCcml0YWluIGFuZCB0aGUgY3Jvd24KLSAgICAgIC8vIGRlcGVuZGVuY2llcyB3aXRoIHRoZSBzYW1lIGNvdW50cnkgY29kZS4KLSAgICAgIHJldHVybiBmb3JtYXQobnVtYmVyLCBQaG9uZU51bWJlckZvcm1hdC5OQVRJT05BTCk7Ci0gICAgfQotICAgIC8vIElmIHRoZSBjb3VudHJ5IGNvZGUgaXMgdGhlIFJ1c3NpYW4gRmVkIGNvdW50cnkgY29kZSwgd2UgY2hlY2sgdGhlIG51bWJlciBpdHNlbGYgdG8gZGV0ZXJtaW5lCi0gICAgLy8gd2hpY2ggcmVnaW9uIGNvZGUgaXQgaXMgZm9yLiBXZSBkb24ndCBkbyB0aGlzIGZvciBOQU5QQSBjb3VudHJpZXMgYmVjYXVzZSBvZiBwZXJmb3JtYW5jZQotICAgIC8vIHJlYXNvbnMsIGFuZCBpbnN0ZWFkIHVzZSBVUyBydWxlcyBmb3IgYWxsIE5BTlBBIG51bWJlcnMuIEFsc28sIE5BTlBBIGNvdW50cmllcyBzaGFyZSB0aGUKLSAgICAvLyBzYW1lIG5hdGlvbmFsIGFuZCBpbnRlcm5hdGlvbmFsIHByZWZpeGVzLCB3aGljaCBpcyBub3QgdGhlIGNhc2UgZm9yIFJ1c3NpYW4gRmVkIGNvdW50cmllcy4KLSAgICAvLyBUaGVyZSBpcyBhbHNvIGEgc3BlY2lhbCBjYXNlIGZvciB0b2xsLWZyZWUgYW5kIHByZW1pdW0gcmF0ZSBudW1iZXJzIGRpYWxsZWQgd2l0aGluIFJ1c3NpYW4KLSAgICAvLyBGZWQgY291bnRyaWVzLgotICAgIFN0cmluZyByZWdpb25Db2RlOwotICAgIGlmIChjb3VudHJ5Q29kZSA9PSBSVVNTSUFOX0ZFRF9DT1VOVFJZX0NPREUpIHsKLSAgICAgIGlmIChydXNzaWFGZWRlcmF0aW9uQ291bnRyaWVzLmNvbnRhaW5zKGNvdW50cnlDYWxsaW5nRnJvbSkpIHsKLSAgICAgICAgLy8gRm9yIHRvbGwtZnJlZSBudW1iZXJzIGFuZCBwcmVtaXVtIHJhdGUgbnVtYmVycyBkaWFsbGVkIGZyb20gd2l0aGluIFJ1c3NpYW4gRmVkIGNvdW50cmllcywKLSAgICAgICAgLy8gd2Ugc2hvdWxkIGZvcm1hdCB0aGVtIGFzIGlmIHRoZXkgYXJlIGxvY2FsIG51bWJlcnMuCi0gICAgICAgIC8vIEEgdG9sbC1mcmVlIG51bWJlciB3b3VsZCBiZSBkaWFsbGVkIGZyb20gS1ogYXMgOC04MDAtMDgwLTc3NzcgYnV0IGZyb20gUnVzc2lhIGFzCi0gICAgICAgIC8vIDAtODAwLTA4MC03Nzc3LiAoQ29uZmlybWF0aW9uIG9uIGdvdmVybm1lbnQgd2Vic2l0ZXMgc3VjaCBhcyBlLmdvdi5reikuCi0gICAgICAgIFBob25lTnVtYmVyVHlwZSBudW1iZXJUeXBlID0gZ2V0TnVtYmVyVHlwZShudW1iZXIpOwotICAgICAgICBpZiAobnVtYmVyVHlwZSA9PSBQaG9uZU51bWJlclR5cGUuVE9MTF9GUkVFIHx8IG51bWJlclR5cGUgPT0gUGhvbmVOdW1iZXJUeXBlLlBSRU1JVU1fUkFURSkgewotICAgICAgICAgIHJldHVybiBmb3JtYXQobnVtYmVyLCBQaG9uZU51bWJlckZvcm1hdC5OQVRJT05BTCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIE90aGVyd2lzZSwgd2Ugc2hvdWxkIGZpbmQgb3V0IHdoYXQgcmVnaW9uIHRoZSBudW1iZXIgcmVhbGx5IGJlbG9uZ3MgdG8gYmVmb3JlIGNvbnRpbnVpbmcsCi0gICAgICAvLyBzaW5jZSB0aGV5IGhhdmUgZGlmZmVyZW50IGZvcm1hdHRpbmcgcnVsZXMuCi0gICAgICByZWdpb25Db2RlID0gZ2V0UmVnaW9uQ29kZUZvck51bWJlcihudW1iZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZWdpb25Db2RlID0gZ2V0UmVnaW9uQ29kZUZvckNvdW50cnlDb2RlKGNvdW50cnlDb2RlKTsKLSAgICB9CisgICAgU3RyaW5nIHJlZ2lvbkNvZGUgPSBnZXRSZWdpb25Db2RlRm9yQ291bnRyeUNvZGUoY291bnRyeUNvZGUpOwogICAgIFN0cmluZyBuYXRpb25hbFNpZ25pZmljYW50TnVtYmVyID0gZ2V0TmF0aW9uYWxTaWduaWZpY2FudE51bWJlcihudW1iZXIpOwogICAgIGlmICghaXNWYWxpZFJlZ2lvbkNvZGUocmVnaW9uQ29kZSkpIHsKICAgICAgIHJldHVybiBuYXRpb25hbFNpZ25pZmljYW50TnVtYmVyOwogICAgIH0KLSAgICBpZiAocmVnaW9uQ29kZS5lcXVhbHNJZ25vcmVDYXNlKGNvdW50cnlDYWxsaW5nRnJvbSkpIHsKKyAgICBpZiAoY291bnRyeUNvZGUgPT0gTkFOUEFfQ09VTlRSWV9DT0RFKSB7CisgICAgICBpZiAoaXNOQU5QQUNvdW50cnkoY291bnRyeUNhbGxpbmdGcm9tKSkgeworICAgICAgICAvLyBGb3IgTkFOUEEgY291bnRyaWVzLCByZXR1cm4gdGhlIG5hdGlvbmFsIGZvcm1hdCBmb3IgdGhlc2UgY291bnRyaWVzIGJ1dCBwcmVmaXggaXQgd2l0aAorICAgICAgICAvLyB0aGUgY291bnRyeSBjb2RlLgorICAgICAgICByZXR1cm4gY291bnRyeUNvZGUgKyAiICIgKyBmb3JtYXQobnVtYmVyLCBQaG9uZU51bWJlckZvcm1hdC5OQVRJT05BTCk7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChjb3VudHJ5Q29kZSA9PSBnZXRDb3VudHJ5Q29kZUZvclJlZ2lvbihjb3VudHJ5Q2FsbGluZ0Zyb20pKSB7CisgICAgLy8gRm9yIGNvdW50cmllcyB0aGF0IHNoYXJlIGEgY291bnRyeSBjYWxsaW5nIGNvZGUsIHRoZSBjb3VudHJ5IGNvZGUgbmVlZCBub3QgYmUgZGlhbGxlZC4gVGhpcworICAgIC8vIGFsc28gYXBwbGllcyB3aGVuIGRpYWxsaW5nIHdpdGhpbiBhIGNvdW50cnksIHNvIHRoaXMgaWYgY2xhdXNlIGNvdmVycyBib3RoIHRoZXNlIGNhc2VzLgorICAgIC8vIFRlY2huaWNhbGx5IHRoaXMgaXMgdGhlIGNhc2UgZm9yIGRpYWxsaW5nIGZyb20gbGEgUo51bmlvbiB0byBvdGhlciBvdmVyc2VhcyBkZXBhcnRtZW50cyBvZgorICAgIC8vIEZyYW5jZSAoRnJlbmNoIEd1aWFuYSwgTWFydGluaXF1ZSwgR3VhZGVsb3VwZSksIGJ1dCBub3QgdmljZSB2ZXJzYSAtIHNvIHdlIGRvbid0IGNvdmVyIHRoaXMKKyAgICAvLyBlZGdlIGNhc2UgZm9yIG5vdyBhbmQgZm9yIHRob3NlIGNhc2VzIHJldHVybiB0aGUgdmVyc2lvbiBpbmNsdWRpbmcgY291bnRyeSBjb2RlLgorICAgIC8vIERldGFpbHMgaGVyZTogaHR0cDovL3d3dy5wZXRpdGZ1dGUuY29tL3ZveWFnZS8yMjUtaW5mby1wcmF0aXF1ZXMtcmV1bmlvbgogICAgICAgcmV0dXJuIGZvcm1hdChudW1iZXIsIFBob25lTnVtYmVyRm9ybWF0Lk5BVElPTkFMKTsKICAgICB9CiAgICAgU3RyaW5nIGZvcm1hdHRlZE5hdGlvbmFsTnVtYmVyID0KQEAgLTg4MSwyNiArODQ4LDI1IEBACiAgICAqIHBhc3NlZCBpbi4gSWYgc3VjaCBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nLCB0aGUgbnVtYmVyIHdpbGwgYmUgZm9ybWF0dGVkIGludG8gdGhlIE5BVElPTkFMCiAgICAqIGZvcm1hdCBieSBkZWZhdWx0LgogICAgKgotICAgKiBAcGFyYW0gbnVtYmVyICBUaGUgUGhvbmVOdW1iZXIgdGhhdCBuZWVkcyB0byBiZSBmb3JtYXR0ZWQgaW4gaXRzIG9yaWdpbmFsIG51bWJlciBmb3JtYXQKLSAgICogQHBhcmFtIGRlZmF1bHRDb3VudHJ5ICB0aGUgY291bnRyeSB3aG9zZSBJREQgbmVlZHMgdG8gYmUgYXBwZW5kZWQgaWYgdGhlIG9yaWdpbmFsIG51bWJlciBoYXMKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBvbmUKLSAgICogQHJldHVybiAgVGhlIGZvcm1hdHRlZCBwaG9uZSBudW1iZXIgaW4gaXRzIG9yaWdpbmFsIG51bWJlciBmb3JtYXQKKyAgICogQHBhcmFtIG51bWJlciAgdGhlIFBob25lTnVtYmVyIHRoYXQgbmVlZHMgdG8gYmUgZm9ybWF0dGVkIGluIGl0cyBvcmlnaW5hbCBudW1iZXIgZm9ybWF0CisgICAqIEBwYXJhbSBjb3VudHJ5Q2FsbGluZ0Zyb20gIHRoZSBjb3VudHJ5IHdob3NlIElERCBuZWVkcyB0byBiZSBwcmVmaXhlZCBpZiB0aGUgb3JpZ2luYWwgbnVtYmVyCisgICAqICAgICBoYXMgb25lCisgICAqIEByZXR1cm4gIHRoZSBmb3JtYXR0ZWQgcGhvbmUgbnVtYmVyIGluIGl0cyBvcmlnaW5hbCBudW1iZXIgZm9ybWF0CiAgICAqLwotICBwdWJsaWMgU3RyaW5nIGZvcm1hdFVzaW5nT3JpZ2luYWxOdW1iZXJGb3JtYXQoUGhvbmVOdW1iZXIgbnVtYmVyLCBTdHJpbmcgZGVmYXVsdENvdW50cnkpIHsKLSAgICBpZiAoIW51bWJlci5oYXNSYXdJbnB1dCgpKSB7CisgIHB1YmxpYyBTdHJpbmcgZm9ybWF0SW5PcmlnaW5hbEZvcm1hdChQaG9uZU51bWJlciBudW1iZXIsIFN0cmluZyBjb3VudHJ5Q2FsbGluZ0Zyb20pIHsKKyAgICBpZiAoIW51bWJlci5oYXNDb3VudHJ5Q29kZVNvdXJjZSgpKSB7CiAgICAgICByZXR1cm4gZm9ybWF0KG51bWJlciwgUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUwpOwogICAgIH0KICAgICBzd2l0Y2ggKG51bWJlci5nZXRDb3VudHJ5Q29kZVNvdXJjZSgpKSB7Ci0gICAgICBjYXNlIEZST01fREVGQVVMVF9DT1VOVFJZOgotICAgICAgICByZXR1cm4gZm9ybWF0KG51bWJlciwgUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUwpOwogICAgICAgY2FzZSBGUk9NX05VTUJFUl9XSVRIX1BMVVNfU0lHTjoKICAgICAgICAgcmV0dXJuIGZvcm1hdChudW1iZXIsIFBob25lTnVtYmVyRm9ybWF0LklOVEVSTkFUSU9OQUwpOwogICAgICAgY2FzZSBGUk9NX05VTUJFUl9XSVRIX0lERDoKLSAgICAgICAgcmV0dXJuIGZvcm1hdE91dE9mQ291bnRyeUNhbGxpbmdOdW1iZXIobnVtYmVyLCBkZWZhdWx0Q291bnRyeSk7CisgICAgICAgIHJldHVybiBmb3JtYXRPdXRPZkNvdW50cnlDYWxsaW5nTnVtYmVyKG51bWJlciwgY291bnRyeUNhbGxpbmdGcm9tKTsKICAgICAgIGNhc2UgRlJPTV9OVU1CRVJfV0lUSE9VVF9QTFVTX1NJR046CiAgICAgICAgIHJldHVybiBmb3JtYXQobnVtYmVyLCBQaG9uZU51bWJlckZvcm1hdC5JTlRFUk5BVElPTkFMKS5zdWJzdHJpbmcoMSk7CisgICAgICBjYXNlIEZST01fREVGQVVMVF9DT1VOVFJZOgogICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bWJlci5nZXRSYXdJbnB1dCgpOworICAgICAgICByZXR1cm4gZm9ybWF0KG51bWJlciwgUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUwpOyAgICAgIAogICAgIH0KICAgfQogCkBAIC05NDcsMTIgKzkxMywyMSBAQAogICAgIH0KICAgfQogCi0gIC8vIE5vdGUgaW4gc29tZSBjb3VudHJpZXMsIHRoZSBuYXRpb25hbCBudW1iZXIgY2FuIGJlIHdyaXR0ZW4gaW4gdHdvIGNvbXBsZXRlbHkgZGlmZmVyZW50IHdheXMKLSAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgZm9ybXMgcGFydCBvZiB0aGUgTkFUSU9OQUwgZm9ybWF0IG9yIElOVEVSTkFUSU9OQUwgZm9ybWF0LiBUaGUKLSAgLy8gbnVtYmVyRm9ybWF0IHBhcmFtZXRlciBoZXJlIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBmb3JtYXQgdG8gdXNlIGZvciB0aG9zZSBjYXNlcy4KKyAgLy8gU2ltcGxlIHdyYXBwZXIgb2YgZm9ybWF0TmF0aW9uYWxOdW1iZXIgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBubyBjYXJyaWVyIGNvZGUuCiAgIHByaXZhdGUgU3RyaW5nIGZvcm1hdE5hdGlvbmFsTnVtYmVyKFN0cmluZyBudW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWdpb25Db2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaG9uZU51bWJlckZvcm1hdCBudW1iZXJGb3JtYXQpIHsKKyAgICByZXR1cm4gZm9ybWF0TmF0aW9uYWxOdW1iZXIobnVtYmVyLCByZWdpb25Db2RlLCBudW1iZXJGb3JtYXQsIG51bGwpOworICB9ICAKKworICAvLyBOb3RlIGluIHNvbWUgY291bnRyaWVzLCB0aGUgbmF0aW9uYWwgbnVtYmVyIGNhbiBiZSB3cml0dGVuIGluIHR3byBjb21wbGV0ZWx5IGRpZmZlcmVudCB3YXlzCisgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGZvcm1zIHBhcnQgb2YgdGhlIE5BVElPTkFMIGZvcm1hdCBvciBJTlRFUk5BVElPTkFMIGZvcm1hdC4gVGhlCisgIC8vIG51bWJlckZvcm1hdCBwYXJhbWV0ZXIgaGVyZSBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggZm9ybWF0IHRvIHVzZSBmb3IgdGhvc2UgY2FzZXMuIElmIGEKKyAgLy8gY2FycmllckNvZGUgaXMgc3BlY2lmaWVkLCB0aGlzIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgZm9ybWF0dGVkIHN0cmluZyB0byByZXBsYWNlICRDQy4KKyAgcHJpdmF0ZSBTdHJpbmcgZm9ybWF0TmF0aW9uYWxOdW1iZXIoU3RyaW5nIG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlZ2lvbkNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBob25lTnVtYmVyRm9ybWF0IG51bWJlckZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNhcnJpZXJDb2RlKSB7CiAgICAgUGhvbmVNZXRhZGF0YSBtZXRhZGF0YSA9IGdldE1ldGFkYXRhRm9yUmVnaW9uKHJlZ2lvbkNvZGUpOwogICAgIExpc3Q8TnVtYmVyRm9ybWF0PiBpbnRsTnVtYmVyRm9ybWF0cyA9IG1ldGFkYXRhLmdldEludGxOdW1iZXJGb3JtYXRMaXN0KCk7CiAgICAgLy8gV2hlbiB0aGUgaW50bE51bWJlckZvcm1hdHMgZXhpc3RzLCB3ZSB1c2UgdGhhdCB0byBmb3JtYXQgbmF0aW9uYWwgbnVtYmVyIGZvciB0aGUKQEAgLTk2MSwyNyArOTM2LDQ4IEBACiAgICAgICAgIChpbnRsTnVtYmVyRm9ybWF0cy5zaXplKCkgPT0gMCB8fCBudW1iZXJGb3JtYXQgPT0gUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUwpCiAgICAgICAgID8gbWV0YWRhdGEuZ2V0TnVtYmVyRm9ybWF0TGlzdCgpCiAgICAgICAgIDogbWV0YWRhdGEuZ2V0SW50bE51bWJlckZvcm1hdExpc3QoKTsKLSAgICByZXR1cm4gZm9ybWF0QWNjb3JkaW5nVG9Gb3JtYXRzKG51bWJlciwgYXZhaWxhYmxlRm9ybWF0cywgbnVtYmVyRm9ybWF0KTsKKyAgICByZXR1cm4gZm9ybWF0QWNjb3JkaW5nVG9Gb3JtYXRzKG51bWJlciwgYXZhaWxhYmxlRm9ybWF0cywgbnVtYmVyRm9ybWF0LCBjYXJyaWVyQ29kZSk7CiAgIH0KIAorICAvLyBTaW1wbGUgd3JhcHBlciBvZiBmb3JtYXRBY2NvcmRpbmdUb0Zvcm1hdHMgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBubyBjYXJyaWVyIGNvZGUuCiAgIHByaXZhdGUgU3RyaW5nIGZvcm1hdEFjY29yZGluZ1RvRm9ybWF0cyhTdHJpbmcgbmF0aW9uYWxOdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PE51bWJlckZvcm1hdD4gYXZhaWxhYmxlRm9ybWF0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBob25lTnVtYmVyRm9ybWF0IG51bWJlckZvcm1hdCkgeworICAgIHJldHVybiBmb3JtYXRBY2NvcmRpbmdUb0Zvcm1hdHMobmF0aW9uYWxOdW1iZXIsIGF2YWlsYWJsZUZvcm1hdHMsIG51bWJlckZvcm1hdCwgbnVsbCk7CisgIH0KKworICAvLyBOb3RlIHRoYXQgY2FycmllckNvZGUgaXMgb3B0aW9uYWwgLSBpZiBOVUxMIG9yIGFuIGVtcHR5IHN0cmluZywgbm8gY2FycmllciBjb2RlIHJlcGxhY2VtZW50CisgIC8vIHdpbGwgdGFrZSBwbGFjZS4gQ2FycmllciBjb2RlIHJlcGxhY2VtZW50IG9jY3VycyBiZWZvcmUgbmF0aW9uYWwgcHJlZml4IHJlcGxhY2VtZW50LgorICBwcml2YXRlIFN0cmluZyBmb3JtYXRBY2NvcmRpbmdUb0Zvcm1hdHMoU3RyaW5nIG5hdGlvbmFsTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxOdW1iZXJGb3JtYXQ+IGF2YWlsYWJsZUZvcm1hdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaG9uZU51bWJlckZvcm1hdCBudW1iZXJGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2FycmllckNvZGUpIHsKICAgICBmb3IgKE51bWJlckZvcm1hdCBudW1Gb3JtYXQgOiBhdmFpbGFibGVGb3JtYXRzKSB7CiAgICAgICBpZiAoIW51bUZvcm1hdC5oYXNMZWFkaW5nRGlnaXRzKCkgfHwKICAgICAgICAgICByZWdleENhY2hlLmdldFBhdHRlcm5Gb3JSZWdleChudW1Gb3JtYXQuZ2V0TGVhZGluZ0RpZ2l0cygpKS5tYXRjaGVyKG5hdGlvbmFsTnVtYmVyKQogICAgICAgICAgICAgICAubG9va2luZ0F0KCkpIHsKLSAgICAgICAgUGF0dGVybiBwYXR0ZXJuVG9NYXRjaCA9IHJlZ2V4Q2FjaGUuZ2V0UGF0dGVybkZvclJlZ2V4KG51bUZvcm1hdC5nZXRQYXR0ZXJuKCkpOwotICAgICAgICBNYXRjaGVyIG0gPSBwYXR0ZXJuVG9NYXRjaC5tYXRjaGVyKG5hdGlvbmFsTnVtYmVyKTsKKyAgICAgICAgTWF0Y2hlciBtID0gcmVnZXhDYWNoZS5nZXRQYXR0ZXJuRm9yUmVnZXgobnVtRm9ybWF0LmdldFBhdHRlcm4oKSkubWF0Y2hlcihuYXRpb25hbE51bWJlcik7CisgICAgICAgIFN0cmluZyBudW1iZXJGb3JtYXRSdWxlID0gbnVtRm9ybWF0LmdldEZvcm1hdCgpOwogICAgICAgICBpZiAobS5tYXRjaGVzKCkpIHsKKyAgICAgICAgICBpZiAoY2FycmllckNvZGUgIT0gbnVsbCAmJiBjYXJyaWVyQ29kZS5sZW5ndGgoKSA+IDAgJiYKKyAgICAgICAgICAgICAgbnVtRm9ybWF0LmdldERvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSgpLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgJENDIGluIHRoZSBmb3JtYXR0aW5nIHJ1bGUgd2l0aCB0aGUgZGVzaXJlZCBjYXJyaWVyIGNvZGUuCisgICAgICAgICAgICBTdHJpbmcgY2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSA9IG51bUZvcm1hdC5nZXREb21lc3RpY0NhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGUoKTsKKyAgICAgICAgICAgIGNhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGUgPQorICAgICAgICAgICAgICAgIENDX1BBVFRFUk4ubWF0Y2hlcihjYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlKS5yZXBsYWNlRmlyc3QoY2FycmllckNvZGUpOworICAgICAgICAgICAgLy8gTm93IHJlcGxhY2UgdGhlICRGRyBpbiB0aGUgZm9ybWF0dGluZyBydWxlIHdpdGggdGhlIGZpcnN0IGdyb3VwIGFuZCB0aGUgY2FycmllciBjb2RlCisgICAgICAgICAgICAvLyBjb21iaW5lZCBpbiB0aGUgYXBwcm9wcmlhdGUgd2F5LgorICAgICAgICAgICAgbnVtYmVyRm9ybWF0UnVsZSA9IEZJUlNUX0dST1VQX1BBVFRFUk4ubWF0Y2hlcihudW1iZXJGb3JtYXRSdWxlKQorICAgICAgICAgICAgICAgIC5yZXBsYWNlRmlyc3QoY2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSk7CisgICAgICAgICAgfQogICAgICAgICAgIFN0cmluZyBuYXRpb25hbFByZWZpeEZvcm1hdHRpbmdSdWxlID0gbnVtRm9ybWF0LmdldE5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGUoKTsKLSAgICAgICAgICBpZiAobmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZSAhPSBudWxsICYmIG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGUubGVuZ3RoKCkgPiAwICYmCi0gICAgICAgICAgICAgIG51bWJlckZvcm1hdCA9PSBQaG9uZU51bWJlckZvcm1hdC5OQVRJT05BTCkgewotICAgICAgICAgICAgICBNYXRjaGVyIGZpcnN0R3JvdXBNYXRjaGVyID0KLSAgICAgICAgICAgICAgICAgIEZJUlNUX0dST1VQX1BBVFRFUk4ubWF0Y2hlcihudW1Gb3JtYXQuZ2V0Rm9ybWF0KCkpOworICAgICAgICAgIGlmIChudW1iZXJGb3JtYXQgPT0gUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUwgJiYKKyAgICAgICAgICAgICAgbmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZSAhPSBudWxsICYmCisgICAgICAgICAgICAgIG5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGUubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICBNYXRjaGVyIGZpcnN0R3JvdXBNYXRjaGVyID0gRklSU1RfR1JPVVBfUEFUVEVSTi5tYXRjaGVyKG51bWJlckZvcm1hdFJ1bGUpOwogICAgICAgICAgICAgcmV0dXJuIG0ucmVwbGFjZUFsbChmaXJzdEdyb3VwTWF0Y2hlci5yZXBsYWNlRmlyc3QobmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZSkpOwogICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbS5yZXBsYWNlQWxsKG51bUZvcm1hdC5nZXRGb3JtYXQoKSk7CisgICAgICAgICAgICByZXR1cm4gbS5yZXBsYWNlQWxsKG51bWJlckZvcm1hdFJ1bGUpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtMTE1MCw3ICsxMTQ2LDYgQEAKICAgICBNYXRjaGVyIG5hdGlvbmFsTnVtYmVyUGF0dGVybk1hdGNoZXIgPQogICAgICAgICByZWdleENhY2hlLmdldFBhdHRlcm5Gb3JSZWdleChudW1iZXJEZXNjLmdldE5hdGlvbmFsTnVtYmVyUGF0dGVybigpKQogICAgICAgICAgICAgLm1hdGNoZXIobmF0aW9uYWxOdW1iZXIpOwotCiAgICAgcmV0dXJuIHBvc3NpYmxlTnVtYmVyUGF0dGVybk1hdGNoZXIubWF0Y2hlcygpICYmIG5hdGlvbmFsTnVtYmVyUGF0dGVybk1hdGNoZXIubWF0Y2hlcygpOwogICB9CiAKQEAgLTEyMDMsMzkgKzExOTgsMzQgQEAKICAgICogdGhlIGNvdW50cnkvcmVnaW9uIGxldmVsLgogICAgKgogICAgKiBAcGFyYW0gbnVtYmVyICB0aGUgcGhvbmUgbnVtYmVyIHdob3NlIG9yaWdpbiB3ZSB3YW50IHRvIGtub3cKLSAgICogQHJldHVybiAgdGhlIGNvdW50cnkvcmVnaW9uIHdoZXJlIHRoZSBwaG9uZSBudW1iZXIgaXMgZnJvbQorICAgKiBAcmV0dXJuICB0aGUgY291bnRyeS9yZWdpb24gd2hlcmUgdGhlIHBob25lIG51bWJlciBpcyBmcm9tLCBvciBudWxsIGlmIG5vIGNvdW50cnkgbWF0Y2hlcyB0aGlzCisgICAqICAgICBjYWxsaW5nIGNvZGUuCiAgICAqLwogICBwdWJsaWMgU3RyaW5nIGdldFJlZ2lvbkNvZGVGb3JOdW1iZXIoUGhvbmVOdW1iZXIgbnVtYmVyKSB7CiAgICAgaW50IGNvdW50cnlDb2RlID0gbnVtYmVyLmdldENvdW50cnlDb2RlKCk7Ci0gICAgc3dpdGNoIChjb3VudHJ5Q29kZSkgewotICAgICAgY2FzZSBOQU5QQV9DT1VOVFJZX0NPREU6Ci0gICAgICAgIC8vIE92ZXJyaWRlIHRoaXMgYW5kIHRyeSB0aGUgVVMgY2FzZSBmaXJzdCwgc2luY2UgaXQgaXMgbW9yZSBsaWtlbHkgdGhhbiBvdGhlciBjb3VudHJpZXMsCi0gICAgICAgIC8vIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgotICAgICAgICBTdHJpbmcgbmF0aW9uYWxOdW1iZXIgPSBnZXROYXRpb25hbFNpZ25pZmljYW50TnVtYmVyKG51bWJlcik7Ci0gICAgICAgIGlmIChnZXROdW1iZXJUeXBlSGVscGVyKG5hdGlvbmFsTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRNZXRhZGF0YUZvclJlZ2lvbigiVVMiKSkgIT0gUGhvbmVOdW1iZXJUeXBlLlVOS05PV04pIHsKLSAgICAgICAgICByZXR1cm4gIlVTIjsKLSAgICAgICAgfQotICAgICAgICBIYXNoU2V0PFN0cmluZz4gbmFucGFFeGNlcHRVUyA9IG5ldyBIYXNoU2V0PFN0cmluZz4obmFucGFDb3VudHJpZXMpOwotICAgICAgICBuYW5wYUV4Y2VwdFVTLnJlbW92ZSgiVVMiKTsKLSAgICAgICAgcmV0dXJuIGdldFJlZ2lvbkNvZGVGb3JOdW1iZXJGcm9tUmVnaW9uTGlzdChudW1iZXIsIG5hbnBhRXhjZXB0VVMpOwotICAgICAgY2FzZSBSVVNTSUFOX0ZFRF9DT1VOVFJZX0NPREU6Ci0gICAgICAgIHJldHVybiBnZXRSZWdpb25Db2RlRm9yTnVtYmVyRnJvbVJlZ2lvbkxpc3QobnVtYmVyLCBydXNzaWFGZWRlcmF0aW9uQ291bnRyaWVzKTsKLSAgICAgIGNhc2UgRlJFTkNIX0lORElBTl9PQ0VBTl9DT1VOVFJZX0NPREU6Ci0gICAgICAgIHJldHVybiBnZXRSZWdpb25Db2RlRm9yTnVtYmVyRnJvbVJlZ2lvbkxpc3QobnVtYmVyLCBmcmVuY2hJbmRpYW5PY2VhblRlcnJpdG9yaWVzKTsKLSAgICAgIGNhc2UgR1JFQVRfQlJJVEFJTl9DT1VOVFJZX0NPREU6Ci0gICAgICAgIHJldHVybiBnZXRSZWdpb25Db2RlRm9yTnVtYmVyRnJvbVJlZ2lvbkxpc3QobnVtYmVyLCBncmVhdEJyaXRhaW5BbmREZXBlbmRlbmNpZXMpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdldFJlZ2lvbkNvZGVGb3JDb3VudHJ5Q29kZShjb3VudHJ5Q29kZSk7CisgICAgTGlzdDxTdHJpbmc+IHJlZ2lvbnMgPSBjb3VudHJ5Q29kZVRvUmVnaW9uQ29kZU1hcC5nZXQoY291bnRyeUNvZGUpOworICAgIGlmIChyZWdpb25zID09IG51bGwpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBpZiAocmVnaW9ucy5zaXplKCkgPT0gMSkgeworICAgICAgcmV0dXJuIHJlZ2lvbnMuZ2V0KDApOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZ2V0UmVnaW9uQ29kZUZvck51bWJlckZyb21SZWdpb25MaXN0KG51bWJlciwgcmVnaW9ucyk7CiAgICAgfQogICB9CiAKICAgcHJpdmF0ZSBTdHJpbmcgZ2V0UmVnaW9uQ29kZUZvck51bWJlckZyb21SZWdpb25MaXN0KFBob25lTnVtYmVyIG51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiByZWdpb25Db2RlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxTdHJpbmc+IHJlZ2lvbkNvZGVzKSB7CiAgICAgU3RyaW5nIG5hdGlvbmFsTnVtYmVyID0gU3RyaW5nLnZhbHVlT2YobnVtYmVyLmdldE5hdGlvbmFsTnVtYmVyKCkpOwogICAgIGZvciAoU3RyaW5nIHJlZ2lvbkNvZGUgOiByZWdpb25Db2RlcykgewotICAgICAgaWYgKGdldE51bWJlclR5cGVIZWxwZXIobmF0aW9uYWxOdW1iZXIsIGdldE1ldGFkYXRhRm9yUmVnaW9uKHJlZ2lvbkNvZGUpKSAhPQotICAgICAgICAgIFBob25lTnVtYmVyVHlwZS5VTktOT1dOKSB7CisgICAgICAvLyBJZiBsZWFkaW5nRGlnaXRzIGlzIHByZXNlbnQsIHVzZSB0aGlzLiBPdGhlcndpc2UsIGRvIGZ1bGwgdmFsaWRhdGlvbi4KKyAgICAgIFBob25lTWV0YWRhdGEgbWV0YWRhdGEgPSBnZXRNZXRhZGF0YUZvclJlZ2lvbihyZWdpb25Db2RlKTsKKyAgICAgIGlmIChtZXRhZGF0YS5oYXNMZWFkaW5nRGlnaXRzKCkpIHsKKyAgICAgICAgaWYgKHJlZ2V4Q2FjaGUuZ2V0UGF0dGVybkZvclJlZ2V4KG1ldGFkYXRhLmdldExlYWRpbmdEaWdpdHMoKSkKKyAgICAgICAgICAgICAgICAubWF0Y2hlcihuYXRpb25hbE51bWJlcikubG9va2luZ0F0KCkpIHsKKyAgICAgICAgICByZXR1cm4gcmVnaW9uQ29kZTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChnZXROdW1iZXJUeXBlSGVscGVyKG5hdGlvbmFsTnVtYmVyLCBtZXRhZGF0YSkgIT0gUGhvbmVOdW1iZXJUeXBlLlVOS05PV04pIHsKICAgICAgICAgcmV0dXJuIHJlZ2lvbkNvZGU7CiAgICAgICB9CiAgICAgfQpAQCAtMTI0NCwxMSArMTIzNCwxMiBAQAogCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSByZWdpb24gY29kZSB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmljIGNvdW50cnkgY29kZS4gSW4gdGhlIGNhc2Ugb2Ygbm8gcmVnaW9uIGNvZGUKLSAgICogYmVpbmcgZm91bmQsIFpaIHdpbGwgYmUgcmV0dXJuZWQuCisgICAqIGJlaW5nIGZvdW5kLCBaWiB3aWxsIGJlIHJldHVybmVkLiBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSByZWdpb25zLCB0aGUgb25lIGRlc2lnbmF0ZWQgaW4gdGhlCisgICAqIG1ldGFkYXRhIGFzIHRoZSAibWFpbiIgY291bnRyeSBmb3IgdGhpcyBjYWxsaW5nIGNvZGUgd2lsbCBiZSByZXR1cm5lZC4KICAgICovCi0gIFN0cmluZyBnZXRSZWdpb25Db2RlRm9yQ291bnRyeUNvZGUoaW50IGNvdW50cnlDb2RlKSB7Ci0gICAgU3RyaW5nIHJlZ2lvbkNvZGUgPSBjb3VudHJ5Q29kZVRvUmVnaW9uQ29kZU1hcC5nZXQoY291bnRyeUNvZGUpOwotICAgIHJldHVybiByZWdpb25Db2RlID09IG51bGwgPyAiWloiIDogcmVnaW9uQ29kZTsKKyAgcHVibGljIFN0cmluZyBnZXRSZWdpb25Db2RlRm9yQ291bnRyeUNvZGUoaW50IGNvdW50cnlDb2RlKSB7CisgICAgTGlzdDxTdHJpbmc+IHJlZ2lvbkNvZGVzID0gY291bnRyeUNvZGVUb1JlZ2lvbkNvZGVNYXAuZ2V0KGNvdW50cnlDb2RlKTsKKyAgICByZXR1cm4gcmVnaW9uQ29kZXMgPT0gbnVsbCA/ICJaWiIgOiByZWdpb25Db2Rlcy5nZXQoMCk7CiAgIH0KIAogICAvKioKQEAgLTEzMzAsNiArMTMyMSwxOCBAQAogICAgIH0KICAgICBTdHJpbmcgbmF0aW9uYWxOdW1iZXIgPSBnZXROYXRpb25hbFNpZ25pZmljYW50TnVtYmVyKG51bWJlcik7CiAgICAgUGhvbmVOdW1iZXJEZXNjIGdlbmVyYWxOdW1EZXNjID0gZ2V0TWV0YWRhdGFGb3JSZWdpb24ocmVnaW9uQ29kZSkuZ2V0R2VuZXJhbERlc2MoKTsKKyAgICAvLyBIYW5kbGluZyBjYXNlIG9mIG51bWJlcnMgd2l0aCBubyBtZXRhZGF0YS4KKyAgICBpZiAoIWdlbmVyYWxOdW1EZXNjLmhhc05hdGlvbmFsTnVtYmVyUGF0dGVybigpKSB7CisgICAgICBMT0dHRVIubG9nKExldmVsLkZJTkVSLCAiQ2hlY2tpbmcgaWYgbnVtYmVyIGlzIHBvc3NpYmxlIHdpdGggaW5jb21wbGV0ZSBtZXRhZGF0YS4iKTsKKyAgICAgIGludCBudW1iZXJMZW5ndGggPSBuYXRpb25hbE51bWJlci5sZW5ndGgoKTsKKyAgICAgIGlmIChudW1iZXJMZW5ndGggPCBNSU5fTEVOR1RIX0ZPUl9OU04pIHsKKyAgICAgICAgcmV0dXJuIFZhbGlkYXRpb25SZXN1bHQuVE9PX1NIT1JUOworICAgICAgfSBlbHNlIGlmIChudW1iZXJMZW5ndGggPiBNQVhfTEVOR1RIX0ZPUl9OU04pIHsKKyAgICAgICAgcmV0dXJuIFZhbGlkYXRpb25SZXN1bHQuVE9PX0xPTkc7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gVmFsaWRhdGlvblJlc3VsdC5JU19QT1NTSUJMRTsKKyAgICAgIH0KKyAgICB9CiAgICAgU3RyaW5nIHBvc3NpYmxlTnVtYmVyUGF0dGVybiA9IGdlbmVyYWxOdW1EZXNjLmdldFBvc3NpYmxlTnVtYmVyUGF0dGVybigpOwogICAgIE1hdGNoZXIgbSA9IHJlZ2V4Q2FjaGUuZ2V0UGF0dGVybkZvclJlZ2V4KHBvc3NpYmxlTnVtYmVyUGF0dGVybikubWF0Y2hlcihuYXRpb25hbE51bWJlcik7CiAgICAgaWYgKG0ubG9va2luZ0F0KCkpIHsKQEAgLTE2MjIsOCArMTYyNSw3IEBACiAgICAgLy8gaXQgaXMgYW4gZXh0ZW5zaW9uLgogICAgIGlmIChtLmZpbmQoKSAmJiBpc1ZpYWJsZVBob25lTnVtYmVyKG51bWJlci5zdWJzdHJpbmcoMCwgbS5zdGFydCgpKSkpIHsKICAgICAgIC8vIFRoZSBudW1iZXJzIGFyZSBjYXB0dXJlZCBpbnRvIGdyb3VwcyBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uLgotICAgICAgaW50IGxlbmd0aCA9IG0uZ3JvdXBDb3VudCgpOwotICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbGVuZ3RoOyBpKyspIHsKKyAgICAgIGZvciAoaW50IGkgPSAxLCBsZW5ndGggPSBtLmdyb3VwQ291bnQoKTsgaSA8PSBsZW5ndGg7IGkrKykgewogICAgICAgICBpZiAobS5ncm91cChpKSAhPSBudWxsKSB7CiAgICAgICAgICAgLy8gV2UgZ28gdGhyb3VnaCB0aGUgY2FwdHVyaW5nIGdyb3VwcyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGNhcHR1cmVkIHNvbWUgZGlnaXRzLiBJZiBub25lCiAgICAgICAgICAgLy8gZGlkLCB0aGVuIHdlIHdpbGwgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuCkBAIC0xNjY1LDggKzE2NjcsMTAgQEAKICAgcHVibGljIHZvaWQgcGFyc2UoU3RyaW5nIG51bWJlclRvUGFyc2UsIFN0cmluZyBkZWZhdWx0Q291bnRyeSwgUGhvbmVOdW1iZXIgcGhvbmVOdW1iZXIpCiAgICAgICB0aHJvd3MgTnVtYmVyUGFyc2VFeGNlcHRpb24gewogICAgIGlmICghaXNWYWxpZFJlZ2lvbkNvZGUoZGVmYXVsdENvdW50cnkpKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVtYmVyUGFyc2VFeGNlcHRpb24oTnVtYmVyUGFyc2VFeGNlcHRpb24uRXJyb3JUeXBlLklOVkFMSURfQ09VTlRSWV9DT0RFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBkZWZhdWx0IGNvdW50cnkgd2FzIHN1cHBsaWVkLiIpOworICAgICAgaWYgKG51bWJlclRvUGFyc2UuY2hhckF0KDApICE9IFBMVVNfU0lHTikgeworICAgICAgICB0aHJvdyBuZXcgTnVtYmVyUGFyc2VFeGNlcHRpb24oTnVtYmVyUGFyc2VFeGNlcHRpb24uRXJyb3JUeXBlLklOVkFMSURfQ09VTlRSWV9DT0RFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgb3IgaW52YWxpZCBkZWZhdWx0IGNvdW50cnkuIik7CisgICAgICB9CiAgICAgfQogICAgIHBhcnNlSGVscGVyKG51bWJlclRvUGFyc2UsIGRlZmF1bHRDb3VudHJ5LCBmYWxzZSwgcGhvbmVOdW1iZXIpOwogICB9CkBAIC0xNzAwLDggKzE3MDQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvbmVOdW1iZXIgcGhvbmVOdW1iZXIpCiAgICAgICB0aHJvd3MgTnVtYmVyUGFyc2VFeGNlcHRpb24gewogICAgIGlmICghaXNWYWxpZFJlZ2lvbkNvZGUoZGVmYXVsdENvdW50cnkpKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVtYmVyUGFyc2VFeGNlcHRpb24oTnVtYmVyUGFyc2VFeGNlcHRpb24uRXJyb3JUeXBlLklOVkFMSURfQ09VTlRSWV9DT0RFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBkZWZhdWx0IGNvdW50cnkgd2FzIHN1cHBsaWVkLiIpOworICAgICAgaWYgKG51bWJlclRvUGFyc2UuY2hhckF0KDApICE9IFBMVVNfU0lHTikgeworICAgICAgICB0aHJvdyBuZXcgTnVtYmVyUGFyc2VFeGNlcHRpb24oTnVtYmVyUGFyc2VFeGNlcHRpb24uRXJyb3JUeXBlLklOVkFMSURfQ09VTlRSWV9DT0RFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgb3IgaW52YWxpZCBkZWZhdWx0IGNvdW50cnkuIik7CisgICAgICB9CiAgICAgfQogICAgIHBhcnNlSGVscGVyKG51bWJlclRvUGFyc2UsIGRlZmF1bHRDb3VudHJ5LCB0cnVlLCBwaG9uZU51bWJlcik7CiAgIH0KZGlmZiAtLWdpdCBhL2phdmEvc3JjL2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvUGhvbmVtZXRhZGF0YS5qYXZhIGIvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZW1ldGFkYXRhLmphdmEKaW5kZXggZjc3MTVjMS4uMDkwMjJiYiAxMDA2NDQKLS0tIGEvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZW1ldGFkYXRhLmphdmEKKysrIGIvamF2YS9zcmMvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZW1ldGFkYXRhLmphdmEKQEAgLTc3LDYgKzc3LDE5IEBACiAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKKyAgICAvLyBvcHRpb25hbCBzdHJpbmcgZG9tZXN0aWNfY2Fycmllcl9jb2RlX2Zvcm1hdHRpbmdfcnVsZSA9IDU7CisgICAgcHJpdmF0ZSBib29sZWFuIGhhc0RvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZTsKKyAgICBwcml2YXRlIFN0cmluZyBkb21lc3RpY0NhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGVfID0gIiI7CisgICAgcHVibGljIGJvb2xlYW4gaGFzRG9tZXN0aWNDYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlKCkgeworICAgICAgcmV0dXJuIGhhc0RvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZTsgfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RG9tZXN0aWNDYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlKCkgeworICAgICAgcmV0dXJuIGRvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZV87IH0KKyAgICBwdWJsaWMgTnVtYmVyRm9ybWF0IHNldERvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZShTdHJpbmcgdmFsdWUpIHsKKyAgICAgIGhhc0RvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSA9IHRydWU7CisgICAgICBkb21lc3RpY0NhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGVfID0gdmFsdWU7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCB3cml0ZUV4dGVybmFsKE9iamVjdE91dHB1dCBvYmplY3RPdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICBvYmplY3RPdXRwdXQud3JpdGVVVEYocGF0dGVybl8pOwogICAgICAgb2JqZWN0T3V0cHV0LndyaXRlVVRGKGZvcm1hdF8pOwpAQCAtODgsNiArMTAxLDEwIEBACiAgICAgICBpZiAoaGFzTmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZSkgewogICAgICAgICBvYmplY3RPdXRwdXQud3JpdGVVVEYobmF0aW9uYWxQcmVmaXhGb3JtYXR0aW5nUnVsZV8pOwogICAgICAgfQorICAgICAgb2JqZWN0T3V0cHV0LndyaXRlQm9vbGVhbihoYXNEb21lc3RpY0NhcnJpZXJDb2RlRm9ybWF0dGluZ1J1bGUpOworICAgICAgaWYgKGhhc0RvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZSkgeworICAgICAgICBvYmplY3RPdXRwdXQud3JpdGVVVEYoZG9tZXN0aWNDYXJyaWVyQ29kZUZvcm1hdHRpbmdSdWxlXyk7CisgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVhZEV4dGVybmFsKE9iamVjdElucHV0IG9iamVjdElucHV0KSB0aHJvd3MgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewpAQCAtOTksNiArMTE2LDkgQEAKICAgICAgIGlmIChvYmplY3RJbnB1dC5yZWFkQm9vbGVhbigpKSB7CiAgICAgICAgIHNldE5hdGlvbmFsUHJlZml4Rm9ybWF0dGluZ1J1bGUob2JqZWN0SW5wdXQucmVhZFVURigpKTsKICAgICAgIH0KKyAgICAgIGlmIChvYmplY3RJbnB1dC5yZWFkQm9vbGVhbigpKSB7CisgICAgICAgIHNldERvbWVzdGljQ2FycmllckNvZGVGb3JtYXR0aW5nUnVsZShvYmplY3RJbnB1dC5yZWFkVVRGKCkpOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC00NDEsNiArNDYxLDI4IEBACiAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKKyAgICAvLyBvcHRpb25hbCBib29sIG1haW5fY291bnRyeV9mb3JfY29kZSA9IDIyIFtkZWZhdWx0ID0gZmFsc2VdOworICAgIHByaXZhdGUgYm9vbGVhbiBoYXNNYWluQ291bnRyeUZvckNvZGU7CisgICAgcHJpdmF0ZSBib29sZWFuIG1haW5Db3VudHJ5Rm9yQ29kZV8gPSBmYWxzZTsKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNNYWluQ291bnRyeUZvckNvZGUoKSB7IHJldHVybiBoYXNNYWluQ291bnRyeUZvckNvZGU7IH0KKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRNYWluQ291bnRyeUZvckNvZGUoKSB7IHJldHVybiBtYWluQ291bnRyeUZvckNvZGVfOyB9CisgICAgcHVibGljIFBob25lTWV0YWRhdGEgc2V0TWFpbkNvdW50cnlGb3JDb2RlKGJvb2xlYW4gdmFsdWUpIHsKKyAgICAgIGhhc01haW5Db3VudHJ5Rm9yQ29kZSA9IHRydWU7CisgICAgICBtYWluQ291bnRyeUZvckNvZGVfID0gdmFsdWU7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvLyBvcHRpb25hbCBzdHJpbmcgbGVhZGluZ19kaWdpdHMgPSAyMzsKKyAgICBwcml2YXRlIGJvb2xlYW4gaGFzTGVhZGluZ0RpZ2l0czsKKyAgICBwcml2YXRlIFN0cmluZyBsZWFkaW5nRGlnaXRzXyA9ICIiOworICAgIHB1YmxpYyBib29sZWFuIGhhc0xlYWRpbmdEaWdpdHMoKSB7IHJldHVybiBoYXNMZWFkaW5nRGlnaXRzOyB9CisgICAgcHVibGljIFN0cmluZyBnZXRMZWFkaW5nRGlnaXRzKCkgeyByZXR1cm4gbGVhZGluZ0RpZ2l0c187IH0KKyAgICBwdWJsaWMgUGhvbmVNZXRhZGF0YSBzZXRMZWFkaW5nRGlnaXRzKFN0cmluZyB2YWx1ZSkgeworICAgICAgaGFzTGVhZGluZ0RpZ2l0cyA9IHRydWU7CisgICAgICBsZWFkaW5nRGlnaXRzXyA9IHZhbHVlOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgd3JpdGVFeHRlcm5hbChPYmplY3RPdXRwdXQgb2JqZWN0T3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgb2JqZWN0T3V0cHV0LndyaXRlQm9vbGVhbihoYXNHZW5lcmFsRGVzYyk7CiAgICAgICBpZiAoaGFzR2VuZXJhbERlc2MpIHsKQEAgLTUxNyw2ICs1NTksMTMgQEAKICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50bE51bWJlckZvcm1hdFNpemU7IGkrKykgewogICAgICAgICBpbnRsTnVtYmVyRm9ybWF0Xy5nZXQoaSkud3JpdGVFeHRlcm5hbChvYmplY3RPdXRwdXQpOwogICAgICAgfQorCisgICAgICBvYmplY3RPdXRwdXQud3JpdGVCb29sZWFuKG1haW5Db3VudHJ5Rm9yQ29kZV8pOworCisgICAgICBvYmplY3RPdXRwdXQud3JpdGVCb29sZWFuKGhhc0xlYWRpbmdEaWdpdHMpOworICAgICAgaWYgKGhhc0xlYWRpbmdEaWdpdHMpIHsKKyAgICAgICAgb2JqZWN0T3V0cHV0LndyaXRlVVRGKGxlYWRpbmdEaWdpdHNfKTsKKyAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCByZWFkRXh0ZXJuYWwoT2JqZWN0SW5wdXQgb2JqZWN0SW5wdXQpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CkBAIC02MTMsNiArNjYyLDEzIEBACiAgICAgICAgIG51bUZvcm1hdC5yZWFkRXh0ZXJuYWwob2JqZWN0SW5wdXQpOwogICAgICAgICBpbnRsTnVtYmVyRm9ybWF0Xy5hZGQobnVtRm9ybWF0KTsKICAgICAgIH0KKworICAgICAgc2V0TWFpbkNvdW50cnlGb3JDb2RlKG9iamVjdElucHV0LnJlYWRCb29sZWFuKCkpOworCisgICAgICBoYXNTdHJpbmcgPSBvYmplY3RJbnB1dC5yZWFkQm9vbGVhbigpOworICAgICAgaWYgKGhhc1N0cmluZykgeworICAgICAgICBzZXRMZWFkaW5nRGlnaXRzKG9iamVjdElucHV0LnJlYWRVVEYoKSk7CisgICAgICB9CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL2phdmEvdGVzdC9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL0FzWW91VHlwZUZvcm1hdHRlclRlc3QuamF2YSBiL2phdmEvdGVzdC9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL0FzWW91VHlwZUZvcm1hdHRlclRlc3QuamF2YQppbmRleCAwODdlNTJlLi45YjI5NDA3IDEwMDY0NAotLS0gYS9qYXZhL3Rlc3QvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9Bc1lvdVR5cGVGb3JtYXR0ZXJUZXN0LmphdmEKKysrIGIvamF2YS90ZXN0L2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvQXNZb3VUeXBlRm9ybWF0dGVyVGVzdC5qYXZhCkBAIC02Nyw2ICs2Nyw5NyBAQAogICAgIGFzc2VydEVxdWFscygiMSA2NTAgMjUzIDIyMjIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKIAogICAgIGZvcm1hdHRlci5jbGVhcigpOworICAgIGFzc2VydEVxdWFscygiMCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcwJykpOworICAgIGFzc2VydEVxdWFscygiMDEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjAxMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOworICAgIGFzc2VydEVxdWFscygiMDExNCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc0JykpOworICAgIGFzc2VydEVxdWFscygiMDExNDQiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnNCcpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjAxMSA0NCA2IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzYnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwMTEgNDQgNjEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjAxMSA0NCA2MTIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjAxMSA0NCA2IDEyMyIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCczJykpOworICAgIGFzc2VydEVxdWFscygiMDExIDQ0IDYgMTIzIDEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjAxMSA0NCA2IDEyMyAxMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOworICAgIGFzc2VydEVxdWFscygiMDExIDQ0IDYgMTIzIDEyMyIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCczJykpOworICAgIGFzc2VydEVxdWFscygiMDExIDQ0IDYgMTIzIDEyMyAxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwMTEgNDQgNiAxMjMgMTIzIDEyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwMTEgNDQgNiAxMjMgMTIzIDEyMyIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCczJykpOworCisgICAgZm9ybWF0dGVyLmNsZWFyKCk7CisgICAgYXNzZXJ0RXF1YWxzKCIwIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzAnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOworICAgIGFzc2VydEVxdWFscygiMDExIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwMTE1IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzUnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwMTE1NCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc0JykpOworICAgIGFzc2VydEVxdWFscygiMDExIDU0IDkiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnOScpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjAxMSA1NCA5MSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOworICAgIGFzc2VydEVxdWFscygiMDExIDU0IDkxMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOworICAgIGFzc2VydEVxdWFscygiMDExIDU0IDkgMTEgMiIsCisgICAgICAgICAgICAgICAgIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOworICAgIGFzc2VydEVxdWFscygiMDExIDU0IDkgMTEgMjMiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMycpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjAxMSA1NCA5IDExIDIzMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOworICAgIGFzc2VydEVxdWFscygiMDExIDU0IDkgMTEgMjMxMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOworICAgIGFzc2VydEVxdWFscygiMDExIDU0IDkgMTEgMjMxMiAxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwMTEgNTQgOSAxMSAyMzEyIDEyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwMTEgNTQgOSAxMSAyMzEyIDEyMyIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCczJykpOworICAgIGFzc2VydEVxdWFscygiMDExIDU0IDkgMTEgMjMxMiAxMjM0IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzQnKSk7CisKKyAgICBmb3JtYXR0ZXIuY2xlYXIoKTsKKyAgICBhc3NlcnRFcXVhbHMoIisiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnKycpKTsKKyAgICBhc3NlcnRFcXVhbHMoIis0IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzQnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIrNDgiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnOCcpKTsKKyAgICBhc3NlcnRFcXVhbHMoIis0ODgiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnOCcpKTsKKyAgICBhc3NlcnRFcXVhbHMoIis0ODg4IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzgnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIrNDggODgxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIrNDggODggMTIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKKyAgICBhc3NlcnRFcXVhbHMoIis0OCA4OCAxMjMiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMycpKTsKKyAgICBhc3NlcnRFcXVhbHMoIis0OCA4OCAxMjMgMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOworICAgIGFzc2VydEVxdWFscygiKzQ4IDg4IDEyMyAxMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOworICAgIGFzc2VydEVxdWFscygiKzQ4IDg4IDEyMyAxMiAxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIrNDggODggMTIzIDEyIDEyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXNZb3VUeXBlRm9ybWF0dGVyVVNGdWxsV2lkdGhDaGFyYWN0ZXJzKCkgeworICAgIEFzWW91VHlwZUZvcm1hdHRlciBmb3JtYXR0ZXIgPSBwaG9uZVV0aWwuZ2V0QXNZb3VUeXBlRm9ybWF0dGVyKCJVUyIpOworICAgIGFzc2VydEVxdWFscygiXHVGRjE2IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1x1RkYxNicpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlx1RkYxNlx1RkYxNSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdcdUZGMTUnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCJcdUZGMTZcdUZGMTVcdUZGMTAiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnXHVGRjEwJykpOworICAgIGFzc2VydEVxdWFscygiXHVGRjE2XHVGRjE1XHVGRjEwXHVGRjEyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1x1RkYxMicpKTsKKyAgICBhc3NlcnRFcXVhbHMoIlx1RkYxNlx1RkYxNVx1RkYxMFx1RkYxMlx1RkYxNSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdcdUZGMTUnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCI2NTAgMjUzIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1x1RkYxMycpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjY1MCAyNTMgMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdcdUZGMTInKSk7CisgICAgYXNzZXJ0RXF1YWxzKCI2NTAgMjUzIDIyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1x1RkYxMicpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjY1MCAyNTMgMjIyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1x1RkYxMicpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjY1MCAyNTMgMjIyMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdcdUZGMTInKSk7CisgIH0KKworICBwdWJsaWMgdm9pZCB0ZXN0QXNZb3VUeXBlRm9ybWF0dGVyVVNNb2JpbGVTaG9ydENvZGUoKSB7CisgICAgQXNZb3VUeXBlRm9ybWF0dGVyIGZvcm1hdHRlciA9IHBob25lVXRpbC5nZXRBc1lvdVR5cGVGb3JtYXR0ZXIoIlVTIik7CisgICAgYXNzZXJ0RXF1YWxzKCIqIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJyonKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIqMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOworICAgIGFzc2VydEVxdWFscygiKjEyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIqMTIxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIqMTIxIyIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcjJykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFzWW91VHlwZUZvcm1hdHRlclVTVmFuaXR5TnVtYmVyKCkgeworICAgIEFzWW91VHlwZUZvcm1hdHRlciBmb3JtYXR0ZXIgPSBwaG9uZVV0aWwuZ2V0QXNZb3VUeXBlRm9ybWF0dGVyKCJVUyIpOworICAgIGFzc2VydEVxdWFscygiOCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc4JykpOworICAgIGFzc2VydEVxdWFscygiODAiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMCcpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjgwMCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcwJykpOworICAgIGFzc2VydEVxdWFscygiODAwICIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcgJykpOworICAgIGFzc2VydEVxdWFscygiODAwIE0iLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnTScpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjgwMCBNWSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdZJykpOworICAgIGFzc2VydEVxdWFscygiODAwIE1ZICIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcgJykpOworICAgIGFzc2VydEVxdWFscygiODAwIE1ZIEEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnQScpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjgwMCBNWSBBUCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdQJykpOworICAgIGFzc2VydEVxdWFscygiODAwIE1ZIEFQUCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdQJykpOworICAgIGFzc2VydEVxdWFscygiODAwIE1ZIEFQUEwiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnTCcpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjgwMCBNWSBBUFBMRSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdFJykpOworICB9CisKKyAgcHVibGljIHZvaWQgdGVzdEFzWW91VHlwZUZvcm1hdHRlckFuZFJlbWVtYmVyUG9zaXRpb25VUygpIHsKKyAgICBBc1lvdVR5cGVGb3JtYXR0ZXIgZm9ybWF0dGVyID0gcGhvbmVVdGlsLmdldEFzWW91VHlwZUZvcm1hdHRlcigiVVMiKTsKICAgICBhc3NlcnRFcXVhbHMoIjEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdEFuZFJlbWVtYmVyUG9zaXRpb24oJzEnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKDEsIGZvcm1hdHRlci5nZXRSZW1lbWJlcmVkUG9zaXRpb24oKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIxNiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc2JykpOwpAQCAtNzYsNiArMTY3LDggQEAKICAgICBhc3NlcnRFcXVhbHMoNCwgZm9ybWF0dGVyLmdldFJlbWVtYmVyZWRQb3NpdGlvbigpKTsKICAgICBhc3NlcnRFcXVhbHMoIjE2NTAyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIxIDY1MCAyNSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc1JykpOworICAgIC8vIE5vdGUgdGhlIHJlbWVtYmVyZWQgcG9zaXRpb24gZm9yIGRpZ2l0ICIwIiBjaGFuZ2VzIGZyb20gNCB0byA1LCBiZWNhdXNlIGEgc3BhY2UgaXMgbm93CisgICAgLy8gaW5zZXJ0ZWQgaW4gdGhlIGZyb250LgogICAgIGFzc2VydEVxdWFscyg1LCBmb3JtYXR0ZXIuZ2V0UmVtZW1iZXJlZFBvc2l0aW9uKCkpOwogICAgIGFzc2VydEVxdWFscygiMSA2NTAgMjUzIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzMnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIxIDY1MCAyNTMgMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOwpAQCAtOTMsMjYgKzE4Niw2IEBACiAgICAgZm9ybWF0dGVyLmNsZWFyKCk7CiAgICAgYXNzZXJ0RXF1YWxzKCIxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIxNiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc2JykpOwotICAgIGFzc2VydEVxdWFscygiMTY1IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzUnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxNjUwIiwgZm9ybWF0dGVyLmlucHV0RGlnaXRBbmRSZW1lbWJlclBvc2l0aW9uKCcwJykpOwotICAgIGFzc2VydEVxdWFscyg0LCBmb3JtYXR0ZXIuZ2V0UmVtZW1iZXJlZFBvc2l0aW9uKCkpOwotICAgIGFzc2VydEVxdWFscygiMTY1MDIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjEgNjUwIDI1IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzUnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKDUsIGZvcm1hdHRlci5nZXRSZW1lbWJlcmVkUG9zaXRpb24oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxIDY1MCAyNTMiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMycpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjEgNjUwIDI1MyAyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxIDY1MCAyNTMgMjIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoNSwgZm9ybWF0dGVyLmdldFJlbWVtYmVyZWRQb3NpdGlvbigpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjEgNjUwIDI1MyAyMjIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjEgNjUwIDI1MyAyMjIyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxNjUwMjUzMjIyMjIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoNCwgZm9ybWF0dGVyLmdldFJlbWVtYmVyZWRQb3NpdGlvbigpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjE2NTAyNTMyMjIyMjIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoNCwgZm9ybWF0dGVyLmdldFJlbWVtYmVyZWRQb3NpdGlvbigpKTsgICAgCi0KLSAgICBmb3JtYXR0ZXIuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjE2IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzYnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIxNjUiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdEFuZFJlbWVtYmVyUG9zaXRpb24oJzUnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIxNjUwIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzAnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKDMsIGZvcm1hdHRlci5nZXRSZW1lbWJlcmVkUG9zaXRpb24oKSk7CkBAIC0xODUsNDEgKzI1OCw2IEBACiAgICAgYXNzZXJ0RXF1YWxzKCIwMTEgNDggODggMTIzIDEyIDEyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7CiAKICAgICBmb3JtYXR0ZXIuY2xlYXIoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMCcpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIwMTEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMTQiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnNCcpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMTQ0IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzQnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIwMTEgNDQgNiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc2JykpOwotICAgIGFzc2VydEVxdWFscygiMDExIDQ0IDYxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIwMTEgNDQgNjEyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIwMTEgNDQgNiAxMjMiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMycpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA0NCA2IDEyMyAxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIwMTEgNDQgNiAxMjMgMTIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA0NCA2IDEyMyAxMjMiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMycpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA0NCA2IDEyMyAxMjMgMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOwotICAgIGFzc2VydEVxdWFscygiMDExIDQ0IDYgMTIzIDEyMyAxMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOwotICAgIGFzc2VydEVxdWFscygiMDExIDQ0IDYgMTIzIDEyMyAxMjMiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMycpKTsKLQotICAgIGZvcm1hdHRlci5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygiMCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcwJykpOwotICAgIGFzc2VydEVxdWFscygiMDEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOwotICAgIGFzc2VydEVxdWFscygiMDExNSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc1JykpOwotICAgIGFzc2VydEVxdWFscygiMDExNTQiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnNCcpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA1NCA5IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzknKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIwMTEgNTQgOTEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA1NCA5MTEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA1NCA5IDExIDIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA1NCA5IDExIDIzIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzMnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIwMTEgNTQgOSAxMSAyMzEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA1NCA5IDExIDIzMTIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA1NCA5IDExIDIzMTIgMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOwotICAgIGFzc2VydEVxdWFscygiMDExIDU0IDkgMTEgMjMxMiAxMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOwotICAgIGFzc2VydEVxdWFscygiMDExIDU0IDkgMTEgMjMxMiAxMjMiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMycpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA1NCA5IDExIDIzMTIgMTIzNCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc0JykpOwotCi0gICAgZm9ybWF0dGVyLmNsZWFyKCk7CiAgICAgYXNzZXJ0RXF1YWxzKCIrIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJysnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIrMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOwogICAgIGFzc2VydEVxdWFscygiKzE2IiwgZm9ybWF0dGVyLmlucHV0RGlnaXRBbmRSZW1lbWJlclBvc2l0aW9uKCc2JykpOwpAQCAtMjUxLDU2ICsyODksNiBAQAogICAgIGFzc2VydEVxdWFscygiKzEgNjUwIDI1MyAyMjIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKICAgICBhc3NlcnRFcXVhbHMoIisxNjUwMjUzMjIyOyIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc7JykpOwogICAgIGFzc2VydEVxdWFscygzLCBmb3JtYXR0ZXIuZ2V0UmVtZW1iZXJlZFBvc2l0aW9uKCkpOwotCi0gICAgZm9ybWF0dGVyLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIrIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJysnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIrNCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc0JykpOwotICAgIGFzc2VydEVxdWFscygiKzQ4IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzgnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIrNDg4IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzgnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIrNDg4OCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCc4JykpOwotICAgIGFzc2VydEVxdWFscygiKzQ4IDg4MSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOwotICAgIGFzc2VydEVxdWFscygiKzQ4IDg4IDEyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzInKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIrNDggODggMTIzIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzMnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIrNDggODggMTIzIDEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIis0OCA4OCAxMjMgMTIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoIis0OCA4OCAxMjMgMTIgMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOwotICAgIGFzc2VydEVxdWFscygiKzQ4IDg4IDEyMyAxMiAxMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOwotCi0gICAgLy8gVGVzdCBVUyBudW1iZXIgd2l0aCBmdWxsLXdpZHRoIGNoYXJhY3RlcnMuCi0gICAgZm9ybWF0dGVyLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJcdUZGMTYiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnXHVGRjE2JykpOwotICAgIGFzc2VydEVxdWFscygiXHVGRjE2XHVGRjE1IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1x1RkYxNScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIlx1RkYxNlx1RkYxNVx1RkYxMCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdcdUZGMTAnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJcdUZGMTZcdUZGMTVcdUZGMTBcdUZGMTIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnXHVGRjEyJykpOwotICAgIGFzc2VydEVxdWFscygiXHVGRjE2XHVGRjE1XHVGRjEwXHVGRjEyXHVGRjE1IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1x1RkYxNScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjY1MCAyNTMiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnXHVGRjEzJykpOwotICAgIGFzc2VydEVxdWFscygiNjUwIDI1MyAyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1x1RkYxMicpKTsKLSAgICBhc3NlcnRFcXVhbHMoIjY1MCAyNTMgMjIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnXHVGRjEyJykpOwotICAgIGFzc2VydEVxdWFscygiNjUwIDI1MyAyMjIiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnXHVGRjEyJykpOwotICAgIGFzc2VydEVxdWFscygiNjUwIDI1MyAyMjIyIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1x1RkYxMicpKTsKLQotICAgIC8vIE1vYmlsZSBzaG9ydCBjb2RlLgotICAgIGZvcm1hdHRlci5jbGVhcigpOwotICAgIGFzc2VydEVxdWFscygiKiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcqJykpOwotICAgIGFzc2VydEVxdWFscygiKjEiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMScpKTsKLSAgICBhc3NlcnRFcXVhbHMoIioxMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOwotICAgIGFzc2VydEVxdWFscygiKjEyMSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcxJykpOwotICAgIGFzc2VydEVxdWFscygiKjEyMSMiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnIycpKTsKLQotICAgIC8vIFRlc3QgdmFuaXR5IG51bWJlcnMuCi0gICAgZm9ybWF0dGVyLmNsZWFyKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI4IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzgnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI4MCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcwJykpOwotICAgIGFzc2VydEVxdWFscygiODAwIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzAnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI4MDAgIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJyAnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI4MDAgTSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdNJykpOwotICAgIGFzc2VydEVxdWFscygiODAwIE1ZIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1knKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI4MDAgTVkgIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJyAnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI4MDAgTVkgQSIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdBJykpOwotICAgIGFzc2VydEVxdWFscygiODAwIE1ZIEFQIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1AnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI4MDAgTVkgQVBQIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ1AnKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI4MDAgTVkgQVBQTCIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCdMJykpOwotICAgIGFzc2VydEVxdWFscygiODAwIE1ZIEFQUExFIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJ0UnKSk7CiAgIH0KIAogICBwdWJsaWMgdm9pZCB0ZXN0QXNZb3VUeXBlRm9ybWF0dGVyR0JGaXhlZExpbmUoKSB7CkBAIC0zMjEsNyArMzA5LDcgQEAKICAgfQogCiAgIHB1YmxpYyB2b2lkIHRlc3RBc1lvdVR5cGVGb3JtYXR0ZXJHQlRvbGxGcmVlKCkgewotICAgIEFzWW91VHlwZUZvcm1hdHRlciBmb3JtYXR0ZXIgPSBwaG9uZVV0aWwuZ2V0QXNZb3VUeXBlRm9ybWF0dGVyKCJnYiIpOworICAgICBBc1lvdVR5cGVGb3JtYXR0ZXIgZm9ybWF0dGVyID0gcGhvbmVVdGlsLmdldEFzWW91VHlwZUZvcm1hdHRlcigiZ2IiKTsKICAgICBhc3NlcnRFcXVhbHMoIjAiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMCcpKTsKICAgICBhc3NlcnRFcXVhbHMoIjA4IiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzgnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIwODAiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnMCcpKTsKQEAgLTM1Nyw2ICszNDUsNyBAQAogICAgIGFzc2VydEVxdWFscygiMDIxIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIwMjExIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzEnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIwMjExMiIsIGZvcm1hdHRlci5pbnB1dERpZ2l0KCcyJykpOworICAgIC8vIE5vdGUgdGhlIHVuaXR0ZXN0IGlzIHVzaW5nIGZha2UgbWV0YWRhdGEgd2hpY2ggbWlnaHQgcHJvZHVjZSBub24taWRlYWwgcmVzdWx0cy4KICAgICBhc3NlcnRFcXVhbHMoIjAyLTExMiAzIiwgZm9ybWF0dGVyLmlucHV0RGlnaXQoJzMnKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIwMi0xMTIgMzQiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnNCcpKTsKICAgICBhc3NlcnRFcXVhbHMoIjAyLTExMiAzNDUiLCBmb3JtYXR0ZXIuaW5wdXREaWdpdCgnNScpKTsKZGlmZiAtLWdpdCBhL2phdmEvdGVzdC9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL1Bob25lTnVtYmVyTWV0YWRhdGFQcm90b0ZvclRlc3RpbmcgYi9qYXZhL3Rlc3QvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZU51bWJlck1ldGFkYXRhUHJvdG9Gb3JUZXN0aW5nCmluZGV4IDU0MThkYTkuLjhiNzJhYzkgMTAwNjQ0Ci0tLSBhL2phdmEvdGVzdC9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL1Bob25lTnVtYmVyTWV0YWRhdGFQcm90b0ZvclRlc3RpbmcKKysrIGIvamF2YS90ZXN0L2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvUGhvbmVOdW1iZXJNZXRhZGF0YVByb3RvRm9yVGVzdGluZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qYXZhL3Rlc3QvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZU51bWJlclV0aWxUZXN0LmphdmEgYi9qYXZhL3Rlc3QvY29tL2dvb2dsZS9pMThuL3Bob25lbnVtYmVycy9QaG9uZU51bWJlclV0aWxUZXN0LmphdmEKaW5kZXggOTQ5OWZiZS4uY2FiODE0MCAxMDA2NDQKLS0tIGEvamF2YS90ZXN0L2NvbS9nb29nbGUvaTE4bi9waG9uZW51bWJlcnMvUGhvbmVOdW1iZXJVdGlsVGVzdC5qYXZhCisrKyBiL2phdmEvdGVzdC9jb20vZ29vZ2xlL2kxOG4vcGhvbmVudW1iZXJzL1Bob25lTnVtYmVyVXRpbFRlc3QuamF2YQpAQCAtMTE3LDkgKzExNyw5IEBACiAgICAgYXNzZXJ0RXF1YWxzKCIwIiwgbWV0YWRhdGEuZ2V0TmF0aW9uYWxQcmVmaXgoKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIwKD86KDExfDM0M3wzNzE1KTE1KT8iLCBtZXRhZGF0YS5nZXROYXRpb25hbFByZWZpeEZvclBhcnNpbmcoKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCI5JDEiLCBtZXRhZGF0YS5nZXROYXRpb25hbFByZWZpeFRyYW5zZm9ybVJ1bGUoKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIkMSAxNSAkMi0kMyIsIG1ldGFkYXRhLmdldE51bWJlckZvcm1hdCgyKS5nZXRGb3JtYXQoKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCI5KFxcZHs0fSkoXFxkezJ9KShcXGR7NH0pIiwKICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZ2V0TnVtYmVyRm9ybWF0KDMpLmdldFBhdHRlcm4oKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIkMSAxNSAkMi0kMyIsIG1ldGFkYXRhLmdldE51bWJlckZvcm1hdCgzKS5nZXRGb3JtYXQoKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIoOSkoXFxkezR9KShcXGR7Mn0pKFxcZHs0fSkiLAogICAgICAgICAgICAgICAgICBtZXRhZGF0YS5nZXRJbnRsTnVtYmVyRm9ybWF0KDMpLmdldFBhdHRlcm4oKSk7CiAgICAgYXNzZXJ0RXF1YWxzKCIkMSAkMiAkMyAkNCIsIG1ldGFkYXRhLmdldEludGxOdW1iZXJGb3JtYXQoMykuZ2V0Rm9ybWF0KCkpOwpAQCAtNDc5LDYgKzQ3OSwyNSBAQAogICAgICAgICAgICAgICAgICBwaG9uZVV0aWwuZm9ybWF0T3V0T2ZDb3VudHJ5Q2FsbGluZ051bWJlcihpdE51bWJlciwgIkFVIikpOwogICB9CiAKKyAgcHVibGljIHZvaWQgdGVzdEZvcm1hdFdpdGhDYXJyaWVyQ29kZSgpIHsKKyAgICAvLyBXZSBvbmx5IHN1cHBvcnQgdGhpcyBmb3IgQVIgaW4gb3VyIHRlc3QgbWV0YWRhdGEuCisgICAgUGhvbmVOdW1iZXIgYXJOdW1iZXIgPSBuZXcgUGhvbmVOdW1iZXIoKTsKKyAgICBhck51bWJlci5zZXRDb3VudHJ5Q29kZSg1NCkuc2V0TmF0aW9uYWxOdW1iZXIoOTEyMzQxMjU2NzhMKTsKKyAgICBhc3NlcnRFcXVhbHMoIjAxMjM0IDEyLTU2NzgiLCBwaG9uZVV0aWwuZm9ybWF0KGFyTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvbmVOdW1iZXJVdGlsLlBob25lTnVtYmVyRm9ybWF0Lk5BVElPTkFMKSk7CisgICAgLy8gVGVzdCBmb3JtYXR0aW5nIHdpdGggYSBjYXJyaWVyIGNvZGUuCisgICAgYXNzZXJ0RXF1YWxzKCIwMTIzNCAxNSAxMi01Njc4IiwgcGhvbmVVdGlsLmZvcm1hdE5hdGlvbmFsTnVtYmVyV2l0aENhcnJpZXJDb2RlKGFyTnVtYmVyLCAiMTUiKSk7CisgICAgLy8gSGVyZSB0aGUgaW50ZXJuYXRpb25hbCBydWxlIGlzIHVzZWQsIHNvIG5vIGNhcnJpZXIgY29kZSBzaG91bGQgYmUgcHJlc2VudC4KKyAgICBhc3NlcnRFcXVhbHMoIis1NDkxMjM0MTI1Njc4IiwgcGhvbmVVdGlsLmZvcm1hdChhck51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaG9uZU51bWJlclV0aWwuUGhvbmVOdW1iZXJGb3JtYXQuRTE2NCkpOworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmb3IgdGhlIFVTIHNvIHRoZXJlIHNob3VsZCBiZSBubyBjaGFuZ2UuCisgICAgUGhvbmVOdW1iZXIgdXNOdW1iZXIgPSBuZXcgUGhvbmVOdW1iZXIoKTsKKyAgICB1c051bWJlci5zZXRDb3VudHJ5Q29kZSgxKS5zZXROYXRpb25hbE51bWJlcig0MjQxMjMxMjM0TCk7CisgICAgYXNzZXJ0RXF1YWxzKCI0MjQgMTIzIDEyMzQiLCBwaG9uZVV0aWwuZm9ybWF0KHVzTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaG9uZU51bWJlclV0aWwuUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUwpKTsKKyAgICBhc3NlcnRFcXVhbHMoIjQyNCAxMjMgMTIzNCIsIHBob25lVXRpbC5mb3JtYXROYXRpb25hbE51bWJlcldpdGhDYXJyaWVyQ29kZSh1c051bWJlciwgIjE1IikpOworICB9CisKICAgcHVibGljIHZvaWQgdGVzdEZvcm1hdEJ5UGF0dGVybigpIHsKICAgICBQaG9uZU51bWJlciB1c051bWJlciA9IG5ldyBQaG9uZU51bWJlcigpOwogICAgIHVzTnVtYmVyLnNldENvdW50cnlDb2RlKDEpLnNldE5hdGlvbmFsTnVtYmVyKDY1MDI1MzAwMDBMKTsKQEAgLTU3NSwxOSArNTk0LDE5IEBACiAKICAgcHVibGljIHZvaWQgdGVzdEZvcm1hdFVzaW5nT3JpZ2luYWxOdW1iZXJGb3JtYXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICBQaG9uZU51bWJlciBudW1iZXIxID0gcGhvbmVVdGlsLnBhcnNlQW5kS2VlcFJhd0lucHV0KCIrNDQyMDg3NjU0MzIxIiwgIkdCIik7Ci0gICAgYXNzZXJ0RXF1YWxzKCIrNDQgMjAgODc2NSA0MzIxIiwgcGhvbmVVdGlsLmZvcm1hdFVzaW5nT3JpZ2luYWxOdW1iZXJGb3JtYXQobnVtYmVyMSwgIkdCIikpOworICAgIGFzc2VydEVxdWFscygiKzQ0IDIwIDg3NjUgNDMyMSIsIHBob25lVXRpbC5mb3JtYXRJbk9yaWdpbmFsRm9ybWF0KG51bWJlcjEsICJHQiIpKTsKIAogICAgIFBob25lTnVtYmVyIG51bWJlcjIgPSBwaG9uZVV0aWwucGFyc2VBbmRLZWVwUmF3SW5wdXQoIjAyMDg3NjU0MzIxIiwgIkdCIik7Ci0gICAgYXNzZXJ0RXF1YWxzKCIoMDIwKSA4NzY1IDQzMjEiLCBwaG9uZVV0aWwuZm9ybWF0VXNpbmdPcmlnaW5hbE51bWJlckZvcm1hdChudW1iZXIyLCAiR0IiKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIoMDIwKSA4NzY1IDQzMjEiLCBwaG9uZVV0aWwuZm9ybWF0SW5PcmlnaW5hbEZvcm1hdChudW1iZXIyLCAiR0IiKSk7CiAKICAgICBQaG9uZU51bWJlciBudW1iZXIzID0gcGhvbmVVdGlsLnBhcnNlQW5kS2VlcFJhd0lucHV0KCIwMTE0NDIwODc2NTQzMjEiLCAiVVMiKTsKLSAgICBhc3NlcnRFcXVhbHMoIjAxMSA0NCAyMCA4NzY1IDQzMjEiLCBwaG9uZVV0aWwuZm9ybWF0VXNpbmdPcmlnaW5hbE51bWJlckZvcm1hdChudW1iZXIzLCAiVVMiKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIwMTEgNDQgMjAgODc2NSA0MzIxIiwgcGhvbmVVdGlsLmZvcm1hdEluT3JpZ2luYWxGb3JtYXQobnVtYmVyMywgIlVTIikpOwogCiAgICAgUGhvbmVOdW1iZXIgbnVtYmVyNCA9IHBob25lVXRpbC5wYXJzZUFuZEtlZXBSYXdJbnB1dCgiNDQyMDg3NjU0MzIxIiwgIkdCIik7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0NCAyMCA4NzY1IDQzMjEiLCBwaG9uZVV0aWwuZm9ybWF0VXNpbmdPcmlnaW5hbE51bWJlckZvcm1hdChudW1iZXI0LCAiR0IiKSk7CisgICAgYXNzZXJ0RXF1YWxzKCI0NCAyMCA4NzY1IDQzMjEiLCBwaG9uZVV0aWwuZm9ybWF0SW5PcmlnaW5hbEZvcm1hdChudW1iZXI0LCAiR0IiKSk7CiAKICAgICBQaG9uZU51bWJlciBudW1iZXI1ID0gcGhvbmVVdGlsLnBhcnNlKCIrNDQyMDg3NjU0MzIxIiwgIkdCIik7Ci0gICAgYXNzZXJ0RXF1YWxzKCIoMDIwKSA4NzY1IDQzMjEiLCBwaG9uZVV0aWwuZm9ybWF0VXNpbmdPcmlnaW5hbE51bWJlckZvcm1hdChudW1iZXI1LCAiR0IiKSk7CisgICAgYXNzZXJ0RXF1YWxzKCIoMDIwKSA4NzY1IDQzMjEiLCBwaG9uZVV0aWwuZm9ybWF0SW5PcmlnaW5hbEZvcm1hdChudW1iZXI1LCAiR0IiKSk7CiAgIH0KIAogICBwdWJsaWMgdm9pZCB0ZXN0SXNQcmVtaXVtUmF0ZSgpIHsKQEAgLTc2Myw2ICs3ODIsMjggQEAKICAgICBic051bWJlci5zZXROYXRpb25hbE51bWJlcigyNDIxMjMyMzQ1TCk7CiAgICAgLy8gVGhpcyBudW1iZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLgogICAgIGFzc2VydEZhbHNlKHBob25lVXRpbC5pc1ZhbGlkTnVtYmVyKGJzTnVtYmVyKSk7CisKKyAgICAvLyBMYSBNYXlvdHRlIGFuZCBSjnVuaW9uIHVzZSAnbGVhZGluZ0RpZ2l0cycgdG8gZGlmZmVyZW50aWF0ZSB0aGVtLgorICAgIFBob25lTnVtYmVyIHJlTnVtYmVyID0gbmV3IFBob25lTnVtYmVyKCk7CisgICAgcmVOdW1iZXIuc2V0Q291bnRyeUNvZGUoMjYyKS5zZXROYXRpb25hbE51bWJlcigyNjIxMjM0NTZMKTsKKyAgICBhc3NlcnRUcnVlKHBob25lVXRpbC5pc1ZhbGlkTnVtYmVyKHJlTnVtYmVyKSk7CisgICAgYXNzZXJ0VHJ1ZShwaG9uZVV0aWwuaXNWYWxpZE51bWJlckZvclJlZ2lvbihyZU51bWJlciwgIlJFIikpOworICAgIGFzc2VydEZhbHNlKHBob25lVXRpbC5pc1ZhbGlkTnVtYmVyRm9yUmVnaW9uKHJlTnVtYmVyLCAiWVQiKSk7CisgICAgLy8gTm93IGNoYW5nZSB0aGUgbnVtYmVyIHRvIGJlIGEgbnVtYmVyIGZvciBMYSBNYXlvdHRlLgorICAgIHJlTnVtYmVyLnNldE5hdGlvbmFsTnVtYmVyKDI2OTYwMTIzNEwpOworICAgIGFzc2VydFRydWUocGhvbmVVdGlsLmlzVmFsaWROdW1iZXJGb3JSZWdpb24ocmVOdW1iZXIsICJZVCIpKTsKKyAgICBhc3NlcnRGYWxzZShwaG9uZVV0aWwuaXNWYWxpZE51bWJlckZvclJlZ2lvbihyZU51bWJlciwgIlJFIikpOworICAgIC8vIFRoaXMgbnVtYmVyIGlzIG5vIGxvbmdlciB2YWxpZCBmb3IgTGEgUo51bmlvbi4KKyAgICByZU51bWJlci5zZXROYXRpb25hbE51bWJlcigyNjkxMjM0NTZMKTsKKyAgICBhc3NlcnRGYWxzZShwaG9uZVV0aWwuaXNWYWxpZE51bWJlckZvclJlZ2lvbihyZU51bWJlciwgIllUIikpOworICAgIGFzc2VydEZhbHNlKHBob25lVXRpbC5pc1ZhbGlkTnVtYmVyRm9yUmVnaW9uKHJlTnVtYmVyLCAiUkUiKSk7CisgICAgYXNzZXJ0RmFsc2UocGhvbmVVdGlsLmlzVmFsaWROdW1iZXIocmVOdW1iZXIpKTsKKyAgICAvLyBIb3dldmVyLCBpdCBzaG91bGQgYmUgcmVjb2duaXNlZCBhcyBmcm9tIExhIE1heW90dGUsIHNpbmNlIGl0IGlzIHZhbGlkIGZvciB0aGlzIHJlZ2lvbi4KKyAgICBhc3NlcnRFcXVhbHMoIllUIiwgcGhvbmVVdGlsLmdldFJlZ2lvbkNvZGVGb3JOdW1iZXIocmVOdW1iZXIpKTsKKyAgICAvLyBUaGlzIG51bWJlciBpcyB2YWxpZCBpbiBib3RoIHBsYWNlcy4KKyAgICByZU51bWJlci5zZXROYXRpb25hbE51bWJlcig4MDAxMjM0NTZMKTsKKyAgICBhc3NlcnRUcnVlKHBob25lVXRpbC5pc1ZhbGlkTnVtYmVyRm9yUmVnaW9uKHJlTnVtYmVyLCAiWVQiKSk7CisgICAgYXNzZXJ0VHJ1ZShwaG9uZVV0aWwuaXNWYWxpZE51bWJlckZvclJlZ2lvbihyZU51bWJlciwgIlJFIikpOwogICB9CiAKICAgcHVibGljIHZvaWQgdGVzdElzTm90VmFsaWROdW1iZXIoKSB7CkBAIC04NzQsNiArOTE1LDE4IEBACiAgICAgbnVtYmVyLnNldENvdW50cnlDb2RlKDEpLnNldE5hdGlvbmFsTnVtYmVyKDY1MDI1MzAwMDAwTCk7CiAgICAgYXNzZXJ0RXF1YWxzKFBob25lTnVtYmVyVXRpbC5WYWxpZGF0aW9uUmVzdWx0LlRPT19MT05HLAogICAgICAgICAgICAgICAgICBwaG9uZVV0aWwuaXNQb3NzaWJsZU51bWJlcldpdGhSZWFzb24obnVtYmVyKSk7CisKKyAgICAvLyBUcnkgd2l0aCBudW1iZXIgdGhhdCB3ZSBkb24ndCBoYXZlIG1ldGFkYXRhIGZvci4KKyAgICBQaG9uZU51bWJlciBhZE51bWJlciA9IG5ldyBQaG9uZU51bWJlcigpOworICAgIGFkTnVtYmVyLnNldENvdW50cnlDb2RlKDM3Nikuc2V0TmF0aW9uYWxOdW1iZXIoMTIzNDVMKTsKKyAgICBhc3NlcnRFcXVhbHMoUGhvbmVOdW1iZXJVdGlsLlZhbGlkYXRpb25SZXN1bHQuSVNfUE9TU0lCTEUsCisgICAgICAgICAgICAgICAgIHBob25lVXRpbC5pc1Bvc3NpYmxlTnVtYmVyV2l0aFJlYXNvbihhZE51bWJlcikpOworICAgIGFkTnVtYmVyLnNldENvdW50cnlDb2RlKDM3Nikuc2V0TmF0aW9uYWxOdW1iZXIoMTNMKTsKKyAgICBhc3NlcnRFcXVhbHMoUGhvbmVOdW1iZXJVdGlsLlZhbGlkYXRpb25SZXN1bHQuVE9PX1NIT1JULAorICAgICAgICAgICAgICAgICBwaG9uZVV0aWwuaXNQb3NzaWJsZU51bWJlcldpdGhSZWFzb24oYWROdW1iZXIpKTsKKyAgICBhZE51bWJlci5zZXRDb3VudHJ5Q29kZSgzNzYpLnNldE5hdGlvbmFsTnVtYmVyKDEyMzQ1Njc4OTAxMjM0NTZMKTsKKyAgICBhc3NlcnRFcXVhbHMoUGhvbmVOdW1iZXJVdGlsLlZhbGlkYXRpb25SZXN1bHQuVE9PX0xPTkcsCisgICAgICAgICAgICAgICAgIHBob25lVXRpbC5pc1Bvc3NpYmxlTnVtYmVyV2l0aFJlYXNvbihhZE51bWJlcikpOwogICB9CiAKICAgcHVibGljIHZvaWQgdGVzdElzTm90UG9zc2libGVOdW1iZXIoKSB7CkBAIC0xMzA4LDYgKzEzNjEsMTYgQEAKICAgICAgICAgICAgICAgICAgICBlLmdldEVycm9yVHlwZSgpKTsKICAgICB9CiAgICAgdHJ5IHsKKyAgICAgIFN0cmluZyBwbHVzTWludXNQaG9uZU51bWJlciA9ICIrLS0tIjsKKyAgICAgIHBob25lVXRpbC5wYXJzZShwbHVzTWludXNQaG9uZU51bWJlciwgIkRFIik7CisgICAgICBmYWlsKCJUaGlzIHNob3VsZCBub3QgcGFyc2Ugd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24gIiArIHBsdXNNaW51c1Bob25lTnVtYmVyKTsKKyAgICB9IGNhdGNoIChOdW1iZXJQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAvLyBFeHBlY3RlZCB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgIGFzc2VydEVxdWFscygiV3JvbmcgZXJyb3IgdHlwZSBzdG9yZWQgaW4gZXhjZXB0aW9uLiIsCisgICAgICAgICAgICAgICAgICAgTnVtYmVyUGFyc2VFeGNlcHRpb24uRXJyb3JUeXBlLk5PVF9BX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICBlLmdldEVycm9yVHlwZSgpKTsKKyAgICB9CisgICAgdHJ5IHsKICAgICAgIFN0cmluZyB0b29TaG9ydFBob25lTnVtYmVyID0gIis0OSAwIjsKICAgICAgIHBob25lVXRpbC5wYXJzZSh0b29TaG9ydFBob25lTnVtYmVyLCAiREUiKTsKICAgICAgIGZhaWwoIlRoaXMgc2hvdWxkIG5vdCBwYXJzZSB3aXRob3V0IHRocm93aW5nIGFuIGV4Y2VwdGlvbiAiICsgdG9vU2hvcnRQaG9uZU51bWJlcik7CkBAIC0xMzM5LDYgKzE0MDIsMTYgQEAKICAgICB9CiAgICAgdHJ5IHsKICAgICAgIFN0cmluZyBzb21lTnVtYmVyID0gIjEyMyA0NTYgNzg5MCI7CisgICAgICBwaG9uZVV0aWwucGFyc2Uoc29tZU51bWJlciwgIkNTIik7CisgICAgICBmYWlsKCJEZXByZWNhdGVkIGNvdW50cnkgY29kZSBub3QgYWxsb3dlZDogc2hvdWxkIGZhaWwuIik7CisgICAgfSBjYXRjaCAoTnVtYmVyUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgLy8gRXhwZWN0ZWQgdGhpcyBleGNlcHRpb24uCisgICAgICBhc3NlcnRFcXVhbHMoIldyb25nIGVycm9yIHR5cGUgc3RvcmVkIGluIGV4Y2VwdGlvbi4iLAorICAgICAgICAgICAgICAgICAgIE51bWJlclBhcnNlRXhjZXB0aW9uLkVycm9yVHlwZS5JTlZBTElEX0NPVU5UUllfQ09ERSwKKyAgICAgICAgICAgICAgICAgICBlLmdldEVycm9yVHlwZSgpKTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgIFN0cmluZyBzb21lTnVtYmVyID0gIjEyMyA0NTYgNzg5MCI7CiAgICAgICBwaG9uZVV0aWwucGFyc2Uoc29tZU51bWJlciwgbnVsbCk7CiAgICAgICBmYWlsKCJOdWxsIGNvdW50cnkgY29kZSBub3QgYWxsb3dlZDogc2hvdWxkIGZhaWwuIik7CiAgICAgfSBjYXRjaCAoTnVtYmVyUGFyc2VFeGNlcHRpb24gZSkgewpAQCAtMTM4OSw2ICsxNDYyLDIwIEBACiAgICAgfQogICB9CiAKKyAgcHVibGljIHZvaWQgdGVzdFBhcnNlTnVtYmVyc1dpdGhQbHVzV2l0aE5vUmVnaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgUGhvbmVOdW1iZXIgbnpOdW1iZXIgPSBuZXcgUGhvbmVOdW1iZXIoKTsKKyAgICBuek51bWJlci5zZXRDb3VudHJ5Q29kZSg2NCkuc2V0TmF0aW9uYWxOdW1iZXIoMzMzMTYwMDVMKTsKKyAgICAvLyAiWloiIGlzIGFsbG93ZWQgb25seSBpZiB0aGUgbnVtYmVyIHN0YXJ0cyB3aXRoIGEgJysnIC0gdGhlbiB0aGUgY291bnRyeSBjb2RlIGNhbiBiZQorICAgIC8vIGNhbGN1bGF0ZWQuCisgICAgYXNzZXJ0RXF1YWxzKG56TnVtYmVyLCBwaG9uZVV0aWwucGFyc2UoIis2NCAzIDMzMSA2MDA1IiwgIlpaIikpOworICAgIGFzc2VydEVxdWFscyhuek51bWJlciwgcGhvbmVVdGlsLnBhcnNlKCIrNjQgMyAzMzEgNjAwNSIsIG51bGwpKTsKKyAgICBuek51bWJlci5zZXRSYXdJbnB1dCgiKzY0IDMgMzMxIDYwMDUiKS4KKyAgICAgICAgc2V0Q291bnRyeUNvZGVTb3VyY2UoQ291bnRyeUNvZGVTb3VyY2UuRlJPTV9OVU1CRVJfV0lUSF9QTFVTX1NJR04pOworICAgIGFzc2VydEVxdWFscyhuek51bWJlciwgcGhvbmVVdGlsLnBhcnNlQW5kS2VlcFJhd0lucHV0KCIrNjQgMyAzMzEgNjAwNSIsICJaWiIpKTsKKyAgICAvLyBOdWxsIGlzIGFsc28gYWxsb3dlZCBmb3IgdGhlIHJlZ2lvbiBjb2RlIGluIHRoZXNlIGNhc2VzLgorICAgIGFzc2VydEVxdWFscyhuek51bWJlciwgcGhvbmVVdGlsLnBhcnNlQW5kS2VlcFJhd0lucHV0KCIrNjQgMyAzMzEgNjAwNSIsIG51bGwpKTsKKyAgfQorCiAgIHB1YmxpYyB2b2lkIHRlc3RQYXJzZUV4dGVuc2lvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICBQaG9uZU51bWJlciBuek51bWJlciA9IG5ldyBQaG9uZU51bWJlcigpOwogICAgIG56TnVtYmVyLnNldENvdW50cnlDb2RlKDY0KS5zZXROYXRpb25hbE51bWJlcigzMzMxNjAwNUwpLnNldEV4dGVuc2lvbigiMzQ1NiIpOwpAQCAtMTQ3Miw2ICsxNTU5LDE3IEBACiAgICAgICAgIHNldENvdW50cnlDb2RlU291cmNlKENvdW50cnlDb2RlU291cmNlLkZST01fTlVNQkVSX1dJVEhfSUREKTsKICAgICBhc3NlcnRFcXVhbHMoYWxwaGFOdW1lcmljTnVtYmVyLAogICAgICAgICAgICAgICAgICBwaG9uZVV0aWwucGFyc2VBbmRLZWVwUmF3SW5wdXQoIjAwMTgwMCBzaXgtZmxhZyIsICJOWiIpKTsKKworICAgIC8vIEludmFsaWQgcmVnaW9uIGNvZGUgc3VwcGxpZWQuCisgICAgdHJ5IHsKKyAgICAgIHBob25lVXRpbC5wYXJzZUFuZEtlZXBSYXdJbnB1dCgiMTIzIDQ1NiA3ODkwIiwgIkNTIik7CisgICAgICBmYWlsKCJEZXByZWNhdGVkIGNvdW50cnkgY29kZSBub3QgYWxsb3dlZDogc2hvdWxkIGZhaWwuIik7CisgICAgfSBjYXRjaCAoTnVtYmVyUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgLy8gRXhwZWN0ZWQgdGhpcyBleGNlcHRpb24uCisgICAgICBhc3NlcnRFcXVhbHMoIldyb25nIGVycm9yIHR5cGUgc3RvcmVkIGluIGV4Y2VwdGlvbi4iLAorICAgICAgICAgICAgICAgICAgIE51bWJlclBhcnNlRXhjZXB0aW9uLkVycm9yVHlwZS5JTlZBTElEX0NPVU5UUllfQ09ERSwKKyAgICAgICAgICAgICAgICAgICBlLmdldEVycm9yVHlwZSgpKTsKKyAgICB9CiAgIH0KIAogICBwdWJsaWMgdm9pZCB0ZXN0Q291bnRyeVdpdGhOb051bWJlckRlc2MoKSB7Cg==