ZGlmZiAtLWdpdCBhL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icCBiL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjBmM2ZjCi0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMTE1IEBACisvLyBDb3B5cmlnaHQgMjAyNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCisgICAgZGVmYXVsdF90ZWFtOiAidHJlbmR5X3RlYW1fYW5kcm9pZF9tZWRpYV9yZWxpYWJpbGl0eSIsCit9CisKK2dlbnJ1bGUgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4ZXMiLAorICAgIHRvb2xzOiBbImFwcGxpZWRfYmFja3BvcnRlZF9maXhlc19tYWluIl0sCisgICAgc3JjczogWyI6YXBwbGllZF9iYWNrcG9ydGVkX2ZpeF9iaW5wYnMiXSwKKyAgICBvdXQ6IFsiYXBwbGllZF9iYWNrcG9ydGVkX2ZpeGVzLnByb3AiXSwKKyAgICBjbWQ6ICIkKGxvY2F0aW9uIGFwcGxpZWRfYmFja3BvcnRlZF9maXhlc19tYWluKSIgKworICAgICAgICAiIC1wICQobG9jYXRpb24gYXBwbGllZF9iYWNrcG9ydGVkX2ZpeGVzLnByb3ApIiArCisgICAgICAgICIgJChpbikiLAorfQorCitqYXZhX2xpYnJhcnkgeworICAgIG5hbWU6ICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzLnByb3RvIiwKKyAgICBdLAorICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorfQorCitqYXZhX2xpYnJhcnkgeworICAgIG5hbWU6ICJiYWNrcG9ydGVkX2ZpeGVzX2NvbW1vbiIsCisgICAgc3JjczogWyJzcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uLyouamF2YSJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImd1YXZhIiwKKyAgICBdLAorICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorfQorCitqYXZhX3Rlc3RfaG9zdCB7CisgICAgbmFtZTogImJhY2twb3J0ZWRfZml4ZXNfY29tbW9uX3Rlc3QiLAorICAgIHNyY3M6IFsidGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uLyouamF2YSJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX2NvbW1vbiIsCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImp1bml0IiwKKyAgICAgICAgInRydXRoIiwKKyAgICAgICAgInRydXRoLWxpdGVwcm90by1leHRlbnNpb24iLAorICAgICAgICAidHJ1dGgtcHJvdG8tZXh0ZW5zaW9uIiwKKyAgICBdLAorICAgIHRlc3Rfb3B0aW9uczogeworICAgICAgICB1bml0X3Rlc3Q6IHRydWUsCisgICAgfSwKKyAgICB0ZXN0X3N1aXRlczogWyJnZW5lcmFsLXRlc3RzIl0sCit9CisKK2phdmFfbGlicmFyeSB7CisgICAgbmFtZTogImFwcGxpZWRfYmFja3BvcnRlZF9maXhlc19saWIiLAorICAgIHNyY3M6IFsic3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzLyouamF2YSJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX2NvbW1vbiIsCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImpjb21tYW5kZXIiLAorICAgICAgICAiZ3VhdmEiLAorICAgIF0sCisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCit9CisKK2phdmFfYmluYXJ5X2hvc3QgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4ZXNfbWFpbiIsCisgICAgbWFpbl9jbGFzczogImNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5NYWluIiwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYXBwbGllZF9iYWNrcG9ydGVkX2ZpeGVzX2xpYiIsCisgICAgXSwKK30KKworamF2YV90ZXN0X2hvc3QgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4ZXNfdGVzdCIsCisgICAgc3JjczogWyJ0ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy8qLmphdmEiXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYXBwbGllZF9iYWNrcG9ydGVkX2ZpeGVzX2xpYiIsCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImp1bml0IiwKKyAgICAgICAgInRydXRoIiwKKyAgICBdLAorICAgIHRlc3Rfb3B0aW9uczogeworICAgICAgICB1bml0X3Rlc3Q6IHRydWUsCisgICAgfSwKKyAgICB0ZXN0X3N1aXRlczogWyJnZW5lcmFsLXRlc3RzIl0sCit9CisKK2dlbnNyY3MgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4X2JpbnBicyIsCisgICAgdG9vbHM6IFsiYXByb3RvYyJdLAorICAgIHNyY3M6IFsKKyAgICAgICAgImFwcGxpZWRfZml4ZXMvKi50eHRwYiIsCisgICAgXSwKKyAgICB0b29sX2ZpbGVzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzLnByb3RvIiwKKyAgICBdLAorICAgIG91dHB1dF9leHRlbnNpb246ICJiaW5wYiIsCisgICAgY21kOiAiJChsb2NhdGlvbiBhcHJvdG9jKSAgIiArCisgICAgICAgICIgLS1lbmNvZGU9Y29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLkJhY2twb3J0ZWRGaXgiICsKKyAgICAgICAgIiAgJChsb2NhdGlvbiBiYWNrcG9ydGVkX2ZpeGVzLnByb3RvKSIgKworICAgICAgICAiIDwgJChpbikiICsKKyAgICAgICAgIiA+ICQob3V0KTsgZWNobyAkKG91dCkiLAorfQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy9PV05FUlMgYi9iYWNrcG9ydGVkX2ZpeGVzL09XTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzE3NmJmCi0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy9PV05FUlMKQEAgLTAsMCArMSwzIEBACitlc3NpY2tAZ29vZ2xlLmNvbQorbmNoYWxrb0Bnb29nbGUuY29tCitwb3J0bWFubmNAZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy90b29scy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5tayBiL2JhY2twb3J0ZWRfZml4ZXMvYXBwbGllZF9maXhlcy9raTM1MDAzNzAyMy50eHRwYgpzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBjb3JlL3Rhc2tzL3Rvb2xzL3VwZGF0ZV9ib290bG9hZGVyX3JhZGlvX2ltYWdlLm1rCnJlbmFtZSB0byBiYWNrcG9ydGVkX2ZpeGVzL2FwcGxpZWRfZml4ZXMva2kzNTAwMzcwMjMudHh0cGIKaW5kZXggMGViZjI0Ny4uNDU2YTdhZSAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy90b29scy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5taworKysgYi9iYWNrcG9ydGVkX2ZpeGVzL2FwcGxpZWRfZml4ZXMva2kzNTAwMzcwMjMudHh0cGIKQEAgLTQsMTQgKzQsMTYgQEAKICMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICMKLSMgICAgICBodHRwOiN3d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAjCiAjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIHByb3RvLWZpbGU6IC4uL2JhY2twb3J0ZWRfZml4ZXMucHJvdG8KKyMgcHJvdG8tbWVzc2FnZTogQmFja3BvcnRlZEZpeAogCi1pZmVxICgkKFVTRVNfREVWSUNFX0dPT0dMRV9aVU1BKSx0cnVlKQotICAgIC1pbmNsdWRlIHZlbmRvci9nb29nbGVfZGV2aWNlcy96dW1hL3ByZWJ1aWx0cy9taXNjX2JpbnMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKLWVuZGlmCitrbm93bl9pc3N1ZTogMzUwMDM3MDIzCithbGlhczogMQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy9iYWNrcG9ydGVkX2ZpeGVzLnByb3RvIGIvYmFja3BvcnRlZF9maXhlcy9iYWNrcG9ydGVkX2ZpeGVzLnByb3RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjE4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9iYWNrcG9ydGVkX2ZpeGVzL2JhY2twb3J0ZWRfZml4ZXMucHJvdG8KQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworc3ludGF4ID0gInByb3RvMiI7CisKK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzOworCitvcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7CisKKy8vIEEgbGlzdCBvZiBiYWNrcG9ydGVkIGZpeGVzLgorbWVzc2FnZSBCYWNrcG9ydGVkRml4ZXMgeworICByZXBlYXRlZCBCYWNrcG9ydGVkRml4IGZpeGVzID0gMTsKK30KKworLy8gQSBrbm93biBpc3N1ZSBhcHByb3ZlZCBmb3IgcmVwb3J0aW5nIEJ1aWxkLmdldEJhY2twb3J0ZWRGaXhTdGF0dXMKK21lc3NhZ2UgQmFja3BvcnRlZEZpeCB7CisKKyAgLy8gVGhlIGlzc3VlIGlkIGZyb20gdGhlIHB1YmxpYyBidWcgdHJhY2tlcgorICAvLyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy97a25vd25faXNzdWV9CisgIG9wdGlvbmFsIGludDY0IGtub3duX2lzc3VlID0gMTsKKyAgLy8gVGhlIGFsaWFzIGZvciB0aGUga25vd24gaXNzdWUuCisgIC8vIDEgLSAxMDIzIGFyZSB2YWxpZCBhbGlhc2VzCisgIC8vIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBhbGwgYmFja3BvcnRlZCBmaXhlcy4KKyAgb3B0aW9uYWwgaW50MzIgYWxpYXMgPSAyOworfQorCmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9NYWluLmphdmEgYi9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxNDhjYwotLS0gL2Rldi9udWxsCisrKyBiL2JhY2twb3J0ZWRfZml4ZXMvc3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL01haW4uamF2YQpAQCAtMCwwICsxLDc5IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXM7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84OworCitpbXBvcnQgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLmNvbW1vbi5DbG9zYWJsZUNvbGxlY3Rpb247CitpbXBvcnQgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLmNvbW1vbi5QYXJzZXI7CisKK2ltcG9ydCBjb20uYmV1c3QuamNvbW1hbmRlci5KQ29tbWFuZGVyOworaW1wb3J0IGNvbS5iZXVzdC5qY29tbWFuZGVyLlBhcmFtZXRlcjsKK2ltcG9ydCBjb20uYmV1c3QuamNvbW1hbmRlci5jb252ZXJ0ZXJzLkZpbGVDb252ZXJ0ZXI7CitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaW8uRmlsZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKKworcHVibGljIGZpbmFsIGNsYXNzIE1haW4geworICAgIEBQYXJhbWV0ZXIoZGVzY3JpcHRpb24gPSAiQmFja3BvcnRlZEZpeCBwcm90byBiaW5hcnkgZmlsZXMiLCBjb252ZXJ0ZXIgPSBGaWxlQ29udmVydGVyLmNsYXNzLAorICAgICAgICAgICAgcmVxdWlyZWQgPSB0cnVlKQorICAgIExpc3Q8RmlsZT4gZml4RmlsZXM7CisgICAgQFBhcmFtZXRlcihkZXNjcmlwdGlvbiA9ICJUaGUgZmlsZSB0byB3cml0ZSB0aGUgcHJvcGVydHkgdmFsdWUgdG8uIiwKKyAgICAgICAgICAgIG5hbWVzID0geyItLXByb3BlcnR5X2ZpbGUiLCAiLXAifSwgY29udmVydGVyID0gRmlsZUNvbnZlcnRlci5jbGFzcywgcmVxdWlyZWQgPSB0cnVlKQorICAgIEZpbGUgcHJvcGVydHlGaWxlOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nLi4uIGFyZ3YpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBNYWluIG1haW4gPSBuZXcgTWFpbigpOworICAgICAgICBKQ29tbWFuZGVyLm5ld0J1aWxkZXIoKS5hZGRPYmplY3QobWFpbikuYnVpbGQoKS5wYXJzZShhcmd2KTsKKyAgICAgICAgbWFpbi5ydW4oKTsKKyAgICB9CisKKyAgICBNYWluKCkgeworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5ICh2YXIgZml4U3RyZWFtcyA9IENsb3NhYmxlQ29sbGVjdGlvbi53cmFwKFBhcnNlci5nZXRGaWxlSW5wdXRTdHJlYW1zKGZpeEZpbGVzKSk7CisgICAgICAgICAgICAgdmFyIG91dCA9IEZpbGVzLm5ld1dyaXRlcihwcm9wZXJ0eUZpbGUsIFVURl84KSkgeworICAgICAgICAgICAgdmFyIGZpeGVzID0gUGFyc2VyLnBhcnNlQmFja3BvcnRlZEZpeGVzKGZpeFN0cmVhbXMuZ2V0Q29sbGVjdGlvbigpKTsKKyAgICAgICAgICAgIHdyaXRlRml4ZXNBc0FsaWFzQml0U2V0KGZpeGVzLCBvdXQpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgd3JpdGVGaXhlc0FzQWxpYXNCaXRTZXQoQmFja3BvcnRlZEZpeGVzIGZpeGVzLCBXcml0ZXIgb3V0KSB7CisgICAgICAgIFByaW50V3JpdGVyIHByaW50V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKG91dCk7CisgICAgICAgIHByaW50V3JpdGVyLnByaW50bG4oIiMgVGhlIGZvbGxvd2luZyBiYWNrcG9ydGVkIGZpeGVzIGhhdmUgYmVlbiBhcHBsaWVkIik7CisgICAgICAgIGZvciAodmFyIGYgOiBmaXhlcy5nZXRGaXhlc0xpc3QoKSkgeworICAgICAgICAgICAgcHJpbnRXcml0ZXIucHJpbnRmKCIjIGh0dHBzOi8vaXNzdWV0cmFja2VyLmdvb2dsZS5jb20vaXNzdWVzLyVkIHdpdGggYWxpYXMgJWQiLAorICAgICAgICAgICAgICAgICAgICBmLmdldEtub3duSXNzdWUoKSwgZi5nZXRBbGlhcygpKTsKKyAgICAgICAgICAgIHByaW50V3JpdGVyLnByaW50bG4oKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYnNBcnJheSA9IFBhcnNlci5nZXRCaXRTZXRBcnJheSgKKyAgICAgICAgICAgICAgICBmaXhlcy5nZXRGaXhlc0xpc3QoKS5zdHJlYW0oKS5tYXBUb0ludChCYWNrcG9ydGVkRml4OjpnZXRBbGlhcykudG9BcnJheSgpKTsKKyAgICAgICAgU3RyaW5nIGJzU3RyaW5nID0gQXJyYXlzLnN0cmVhbShic0FycmF5KS5tYXBUb09iaihMb25nOjp0b1N0cmluZykuY29sbGVjdCgKKyAgICAgICAgICAgICAgICBDb2xsZWN0b3JzLmpvaW5pbmcoIiwiKSk7CisgICAgICAgIHByaW50V3JpdGVyLnByaW50Zigicm8uYnVpbGQuYmFja3BvcnRlZF9maXhlcy5hbGlhc19iaXRzZXQubG9uZ19saXN0PSVzIiwgYnNTdHJpbmcpOworICAgICAgICBwcmludFdyaXRlci5wcmludGxuKCk7CisgICAgICAgIGlmIChwcmludFdyaXRlci5jaGVja0Vycm9yKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGVyZSB3YXMgYW4gZXJyb3Igd3JpdGluZyB0byAiICsgb3V0LnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy9zcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uL0Nsb3NhYmxlQ29sbGVjdGlvbi5qYXZhIGIvYmFja3BvcnRlZF9maXhlcy9zcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uL0Nsb3NhYmxlQ29sbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YjY3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vQ2xvc2FibGVDb2xsZWN0aW9uLmphdmEKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5jb21tb247CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCisvKiogQW4gQXV0b0Nsb3NlYWJsZSBob2xkZXIgZm9yIGEgY29sbGVjdGlvbiBvZiBBdXRvQ2xvc2VhYmxlcy4gKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBDbG9zYWJsZUNvbGxlY3Rpb248VCBleHRlbmRzIEF1dG9DbG9zZWFibGUsIEMgZXh0ZW5kcyBDb2xsZWN0aW9uPFQ+PiBpbXBsZW1lbnRzCisgICAgICAgIEF1dG9DbG9zZWFibGUgeworICAgIEMgc291cmNlOworCisgICAgLyoqIE1ha2VzIHRoZSBjb2xsZWN0aW9uIEF1dG9DbG9zZWFibGUuICovCisgICAgcHVibGljIHN0YXRpYyA8VCBleHRlbmRzIEF1dG9DbG9zZWFibGUsIEMgZXh0ZW5kcyBDb2xsZWN0aW9uPFQ+PiBDbG9zYWJsZUNvbGxlY3Rpb248VCwgQz4gd3JhcCgKKyAgICAgICAgICAgIEMgc291cmNlKSB7CisgICAgICAgIHJldHVybiBuZXcgQ2xvc2FibGVDb2xsZWN0aW9uPD4oc291cmNlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIENsb3NhYmxlQ29sbGVjdGlvbihDIHNvdXJjZSkgeworICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKKyAgICB9CisKKyAgICAvKiogR2V0IHRoZSBzb3VyY2UgY29sbGVjdGlvbi4gKi8KKyAgICBwdWJsaWMgQyBnZXRDb2xsZWN0aW9uKCkgeworICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsb3NlcyBlYWNoIGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uCisgICAgICoKKyAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiBpZiBhbnkgY2xvc2UgdGhyb3dzIGFuIGFuIGV4Y2VwdGlvbiwgYSBuZXcgZXhjZXB0aW9uIGlzIHRocm93biB3aXRoCisgICAgICogICAgICAgICAgICAgICAgICAgYWxsIHRoZSBleGNlcHRpb25zIHRocm93biBjbG9zaW5nIHRoZSBzdHJlYW1zIGFkZGVkIGFzIGEgc3VwcHJlc3NlZAorICAgICAqICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdmFyIGZhaWx1cmVzID0gbmV3IEFycmF5TGlzdDxFeGNlcHRpb24+KCk7CisgICAgICAgIGZvciAoVCB0IDogc291cmNlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYWRkKGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZmFpbHVyZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBFeGNlcHRpb24gZSA9IG5ldyBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICIlZCBvZiAlZCBmYWlsZWQgd2hpbGUgY2xvc2luZyIuZm9ybWF0dGVkKGZhaWx1cmVzLnNpemUoKSwgc291cmNlLnNpemUoKSkpOworICAgICAgICAgICAgZmFpbHVyZXMuZm9yRWFjaChlOjphZGRTdXBwcmVzc2VkKTsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vUGFyc2VyLmphdmEgYi9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vUGFyc2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwOGI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2JhY2twb3J0ZWRfZml4ZXMvc3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9QYXJzZXIuamF2YQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLmNvbW1vbjsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5CYWNrcG9ydGVkRml4OworaW1wb3J0IGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5CYWNrcG9ydGVkRml4ZXM7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5CaXRTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKworLyoqIFN0YXRpYyB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCB7QGxpbmsgQmFja3BvcnRlZEZpeGVzfS4gKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBQYXJzZXIgeworCisgICAgLyoqIENyZWF0ZXMgbGlzdCBvZiBGaWxlSW5wdXRTdHJlYW1zIGZvciBhIGxpc3Qgb2YgZmlsZXMuICovCisgICAgcHVibGljIHN0YXRpYyBJbW11dGFibGVMaXN0PEZpbGVJbnB1dFN0cmVhbT4gZ2V0RmlsZUlucHV0U3RyZWFtcyhMaXN0PEZpbGU+IGZpeEZpbGVzKSB0aHJvd3MKKyAgICAgICAgICAgIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHZhciBzdHJlYW1zID0gSW1tdXRhYmxlTGlzdC48RmlsZUlucHV0U3RyZWFtPmJ1aWxkZXIoKTsKKyAgICAgICAgZm9yICh2YXIgZiA6IGZpeEZpbGVzKSB7CisgICAgICAgICAgICBzdHJlYW1zLmFkZChuZXcgRmlsZUlucHV0U3RyZWFtKGYpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RyZWFtcy5idWlsZCgpOworICAgIH0KKworICAgIC8qKiBDb252ZXJ0cyBhIGxpc3Qgb2YgYmFja3BvcnRlZCBmaXggYWxpYXNlcyBpbnRvIGEgbG9uZyBhcnJheSByZXByZXNlbnRpbmcgYSB7QGxpbmsgQml0U2V0fSAqLworICAgIHB1YmxpYyBzdGF0aWMgbG9uZ1tdIGdldEJpdFNldEFycmF5KGludFtdIGFsaWFzZXMpIHsKKyAgICAgICAgQml0U2V0IGJzID0gbmV3IEJpdFNldCgpOworICAgICAgICBmb3IgKGludCBhIDogYWxpYXNlcykgeworICAgICAgICAgICAgYnMuc2V0KGEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBicy50b0xvbmdBcnJheSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmFja3BvcnRlZEZpeGVzfSBmcm9tIGEgbGlzdCBvZiB7QGxpbmsgQmFja3BvcnRlZEZpeH0gYmluYXJ5IHByb3RvIHN0cmVhbXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCYWNrcG9ydGVkRml4ZXMgcGFyc2VCYWNrcG9ydGVkRml4ZXMoTGlzdDw/IGV4dGVuZHMgSW5wdXRTdHJlYW0+IGZpeFN0cmVhbXMpCisgICAgICAgICAgICB0aHJvd3MKKyAgICAgICAgICAgIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdmFyIGZpeGVzID0gQmFja3BvcnRlZEZpeGVzLm5ld0J1aWxkZXIoKTsKKyAgICAgICAgZm9yICh2YXIgcyA6IGZpeFN0cmVhbXMpIHsKKyAgICAgICAgICAgIEJhY2twb3J0ZWRGaXggZml4ID0gQmFja3BvcnRlZEZpeC5wYXJzZUZyb20ocyk7CisgICAgICAgICAgICBmaXhlcy5hZGRGaXhlcyhmaXgpOworICAgICAgICAgICAgcy5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmaXhlcy5idWlsZCgpOworICAgIH0KKworICAgIHByaXZhdGUgUGFyc2VyKCkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2JhY2twb3J0ZWRfZml4ZXMvdGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvTWFpblRlc3QuamF2YSBiL2JhY2twb3J0ZWRfZml4ZXMvdGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvTWFpblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA2MWUxCi0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9NYWluVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlczsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnRydXRoLlRydXRoOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOworCisvKiogVGVzdHMgZm9yIHtAbGluayBNYWlufS4gKi8KK3B1YmxpYyBjbGFzcyBNYWluVGVzdCB7CisKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgd3JpdGVGaXhlc0FzQWxpYXNCaXRTZXRfZGVmYXVsdCgpIHsKKyAgICAgICAgQmFja3BvcnRlZEZpeGVzIGZpeGVzID0gQmFja3BvcnRlZEZpeGVzLm5ld0J1aWxkZXIoKS5idWlsZCgpOworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFN0cmluZ1dyaXRlcigpOworCisgICAgICAgIE1haW4ud3JpdGVGaXhlc0FzQWxpYXNCaXRTZXQoZml4ZXMsIG5ldyBQcmludFdyaXRlcihyZXN1bHQpKTsKKworICAgICAgICBUcnV0aC5hc3NlcnRUaGF0KHJlc3VsdC50b1N0cmluZygpKQorICAgICAgICAgICAgICAgIC5pc0VxdWFsVG8oIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgYmFja3BvcnRlZCBmaXhlcyBoYXZlIGJlZW4gYXBwbGllZAorICAgICAgICAgICAgICAgICAgICAgICAgcm8uYnVpbGQuYmFja3BvcnRlZF9maXhlcy5hbGlhc19iaXRzZXQubG9uZ19saXN0PQorICAgICAgICAgICAgICAgICAgICAgICAgIiIiKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHdyaXRlRml4ZXNBc0FsaWFzQml0U2V0X3NvbWUoKSB7CisgICAgICAgIEJhY2twb3J0ZWRGaXhlcyBmaXhlcyA9IEJhY2twb3J0ZWRGaXhlcy5uZXdCdWlsZGVyKCkKKyAgICAgICAgICAgICAgICAuYWRkRml4ZXMoQmFja3BvcnRlZEZpeC5uZXdCdWlsZGVyKCkuc2V0S25vd25Jc3N1ZSgxMjM0TCkuc2V0QWxpYXMoMSkpCisgICAgICAgICAgICAgICAgLmFkZEZpeGVzKEJhY2twb3J0ZWRGaXgubmV3QnVpbGRlcigpLnNldEtub3duSXNzdWUoM0wpLnNldEFsaWFzKDY1KSkKKyAgICAgICAgICAgICAgICAuYWRkRml4ZXMoQmFja3BvcnRlZEZpeC5uZXdCdWlsZGVyKCkuc2V0S25vd25Jc3N1ZSg0TCkuc2V0QWxpYXMoNjcpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFN0cmluZ1dyaXRlcigpOworCisgICAgICAgIE1haW4ud3JpdGVGaXhlc0FzQWxpYXNCaXRTZXQoZml4ZXMsIG5ldyBQcmludFdyaXRlcihyZXN1bHQpKTsKKworICAgICAgICBUcnV0aC5hc3NlcnRUaGF0KHJlc3VsdC50b1N0cmluZygpKQorICAgICAgICAgICAgICAgIC5pc0VxdWFsVG8oIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgYmFja3BvcnRlZCBmaXhlcyBoYXZlIGJlZW4gYXBwbGllZAorICAgICAgICAgICAgICAgICAgICAgICAgIyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy8xMjM0IHdpdGggYWxpYXMgMQorICAgICAgICAgICAgICAgICAgICAgICAgIyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy8zIHdpdGggYWxpYXMgNjUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaHR0cHM6Ly9pc3N1ZXRyYWNrZXIuZ29vZ2xlLmNvbS9pc3N1ZXMvNCB3aXRoIGFsaWFzIDY3CisgICAgICAgICAgICAgICAgICAgICAgICByby5idWlsZC5iYWNrcG9ydGVkX2ZpeGVzLmFsaWFzX2JpdHNldC5sb25nX2xpc3Q9MiwxMAorICAgICAgICAgICAgICAgICAgICAgICAgIiIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL3Rlc3RzL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9DbG9zZWFibGVDb2xsZWN0aW9uVGVzdC5qYXZhIGIvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vQ2xvc2VhYmxlQ29sbGVjdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Q4NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vQ2xvc2VhYmxlQ29sbGVjdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLmNvbW1vbjsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlU2V0OworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnRydXRoLkNvcnJlc3BvbmRlbmNlOworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnRydXRoLlRydXRoOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKiBUZXN0cyBmb3Ige0BsaW5rIENsb3NhYmxlQ29sbGVjdGlvbn0uICovCitwdWJsaWMgY2xhc3MgQ2xvc2VhYmxlQ29sbGVjdGlvblRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRmFrZUNsb3NlYWJsZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gdGhyb3dPbkNsb3NlOworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworCisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkID0gZmFsc2U7CisKKyAgICAgICAgcHJpdmF0ZSBGYWtlQ2xvc2VhYmxlKFN0cmluZyBuYW1lLCBib29sZWFuIHRocm93T25DbG9zZSkgeworICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHRoaXMudGhyb3dPbkNsb3NlID0gdGhyb3dPbkNsb3NlOworCisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBGYWtlQ2xvc2VhYmxlIG5hbWVkKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEZha2VDbG9zZWFibGUobmFtZSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRmFrZUNsb3NlYWJsZSBmYWlsaW5nKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEZha2VDbG9zZWFibGUobmFtZSwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgaWYgKHRocm93T25DbG9zZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obmFtZSArICIgY2xvc2UgZmFpbGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc0Nsb3NlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgYm90aENsb3NlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB2YXIgYyA9IEltbXV0YWJsZVNldC5vZihGYWtlQ2xvc2VhYmxlLm5hbWVkKCJmb28iKSwgRmFrZUNsb3NlYWJsZS5uYW1lZCgiYmFyIikpOworICAgICAgICB0cnkgKHZhciBjYyA9IENsb3NhYmxlQ29sbGVjdGlvbi53cmFwKGMpOykgeworICAgICAgICAgICAgVHJ1dGguYXNzZXJ0VGhhdChjYy5nZXRDb2xsZWN0aW9uKCkpLmlzU2FtZUluc3RhbmNlQXMoYyk7CisgICAgICAgIH0KKyAgICAgICAgVHJ1dGguYXNzZXJ0VGhhdChjKQorICAgICAgICAgICAgICAgIC5jb21wYXJpbmdFbGVtZW50c1VzaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGVuY2UudHJhbnNmb3JtaW5nKEZha2VDbG9zZWFibGU6OmlzQ2xvc2VkLCAiaXMgY2xvc2VkIikpCisgICAgICAgICAgICAgICAgLmNvbnRhaW5zRXhhY3RseSh0cnVlLCB0cnVlKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGJvdGhGYWlsZWQoKSB7CisgICAgICAgIHZhciBjID0gSW1tdXRhYmxlU2V0Lm9mKEZha2VDbG9zZWFibGUuZmFpbGluZygiZm9vIiksIEZha2VDbG9zZWFibGUuZmFpbGluZygiYmFyIikpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0cnkgKHZhciBjYyA9IENsb3NhYmxlQ29sbGVjdGlvbi53cmFwKGMpOykgeworICAgICAgICAgICAgICAgIFRydXRoLmFzc2VydFRoYXQoY2MuZ2V0Q29sbGVjdGlvbigpKS5pc1NhbWVJbnN0YW5jZUFzKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgVHJ1dGguYXNzZXJ0VGhhdChlKS5oYXNNZXNzYWdlVGhhdCgpLmlzRXF1YWxUbygiMiBvZiAyIGZhaWxlZCB3aGlsZSBjbG9zaW5nIik7CisgICAgICAgICAgICBUcnV0aC5hc3NlcnRUaGF0KGUuZ2V0U3VwcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgICAgICAuYXNMaXN0KCkKKyAgICAgICAgICAgICAgICAgICAgLmNvbXBhcmluZ0VsZW1lbnRzVXNpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGVuY2UudHJhbnNmb3JtaW5nKEV4Y2VwdGlvbjo6Z2V0TWVzc2FnZSwgImhhcyBhIG1lc3NhZ2Ugb2YgIikpCisgICAgICAgICAgICAgICAgICAgIC5jb250YWluc0V4YWN0bHkoImZvbyBjbG9zZSBmYWlsZWQiLCAiYmFyIGNsb3NlIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vUGFyc2VyVGVzdC5qYXZhIGIvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vUGFyc2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NGU2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9iYWNrcG9ydGVkX2ZpeGVzL3Rlc3RzL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9QYXJzZXJUZXN0LmphdmEKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5jb21tb247CisKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24udHJ1dGguVHJ1dGguYXNzZXJ0VGhhdDsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24udHJ1dGguZXh0ZW5zaW9ucy5wcm90by5Qcm90b1RydXRoLmFzc2VydFRoYXQ7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXMuQmFja3BvcnRlZEZpeDsKK2ltcG9ydCBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXMuQmFja3BvcnRlZEZpeGVzOworCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0OworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKKworLyoqIFRlc3RzIGZvciB7QGxpbmsgUGFyc2VyfS4qLworcHVibGljIGNsYXNzIFBhcnNlclRlc3QgeworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBnZXRGaWxlSW5wdXRTdHJlYW1zKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBQYXJzZXIuZ2V0RmlsZUlucHV0U3RyZWFtcygKKyAgICAgICAgICAgICAgICBJbW11dGFibGVMaXN0Lm9mKEZpbGVzLmNyZWF0ZVRlbXBGaWxlKCJ0ZXN0IiwgbnVsbCkudG9GaWxlKCkpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRzKS5pc05vdEVtcHR5KCk7CisgICAgfQorCisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdldEJpdFNldEFycmF5X2VtcHR5KCkgeworICAgICAgICB2YXIgcmVzdWx0cyA9IFBhcnNlci5nZXRCaXRTZXRBcnJheShuZXcgaW50W117fSk7CisgICAgICAgIGFzc2VydFRoYXQocmVzdWx0cykuaXNFbXB0eSgpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgZ2V0Qml0U2V0QXJyYXlfMl8zXzY0KCkgeworICAgICAgICB2YXIgcmVzdWx0cyA9IFBhcnNlci5nZXRCaXRTZXRBcnJheShuZXcgaW50W117MiwzLDY0fSk7CisgICAgICAgIGFzc2VydFRoYXQocmVzdWx0cykuYXNMaXN0KCkuY29udGFpbnNFeGFjdGx5KDEyTCwxTCkuaW5PcmRlcigpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgcGFyc2VCYWNrcG9ydGVkRml4ZXNfZW1wdHkoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB2YXIgcmVzdWx0ID0gUGFyc2VyLnBhcnNlQmFja3BvcnRlZEZpeGVzKEltbXV0YWJsZUxpc3Qub2YoKSk7CisgICAgICAgIGFzc2VydFRoYXQocmVzdWx0KS5pc0VxdWFsVG8oQmFja3BvcnRlZEZpeGVzLmdldERlZmF1bHRJbnN0YW5jZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHBhcnNlQmFja3BvcnRlZEZpeGVzX29uZUJsYW5rKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFBhcnNlci5wYXJzZUJhY2twb3J0ZWRGaXhlcygKKyAgICAgICAgICAgICAgICBJbW11dGFibGVMaXN0Lm9mKGlucHV0U3RyZWFtKEJhY2twb3J0ZWRGaXguZ2V0RGVmYXVsdEluc3RhbmNlKCkpKSk7CisKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHQpLmlzRXF1YWxUbygKKyAgICAgICAgICAgICAgICBCYWNrcG9ydGVkRml4ZXMubmV3QnVpbGRlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAuYWRkRml4ZXMoQmFja3BvcnRlZEZpeC5nZXREZWZhdWx0SW5zdGFuY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHBhcnNlQmFja3BvcnRlZEZpeGVzX3R3bygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIEJhY2twb3J0ZWRGaXgga2kxMjMgPSBCYWNrcG9ydGVkRml4Lm5ld0J1aWxkZXIoKQorICAgICAgICAgICAgICAgIC5zZXRLbm93bklzc3VlKDEyMykKKyAgICAgICAgICAgICAgICAuc2V0QWxpYXMoMSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICAgICAgQmFja3BvcnRlZEZpeCBraTQ1NiA9IEJhY2twb3J0ZWRGaXgubmV3QnVpbGRlcigpCisgICAgICAgICAgICAgICAgLnNldEtub3duSXNzdWUoNDU2KQorICAgICAgICAgICAgICAgIC5zZXRBbGlhcygyKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworICAgICAgICB2YXIgcmVzdWx0ID0gUGFyc2VyLnBhcnNlQmFja3BvcnRlZEZpeGVzKAorICAgICAgICAgICAgICAgIEltbXV0YWJsZUxpc3Qub2YoaW5wdXRTdHJlYW0oa2kxMjMpLCBpbnB1dFN0cmVhbShraTQ1NikpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHQpLmlzRXF1YWxUbygKKyAgICAgICAgICAgICAgICBCYWNrcG9ydGVkRml4ZXMubmV3QnVpbGRlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAuYWRkRml4ZXMoa2kxMjMpCisgICAgICAgICAgICAgICAgICAgICAgICAuYWRkRml4ZXMoa2k0NTYpCisgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0oQmFja3BvcnRlZEZpeCBmKSB7CisgICAgICAgIHJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZi50b0J5dGVBcnJheSgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jaS9BbmRyb2lkLmJwIGIvY2kvQW5kcm9pZC5icAppbmRleCA2ZDRhYzM1Li4zZjI4YmU0IDEwMDY0NAotLS0gYS9jaS9BbmRyb2lkLmJwCisrKyBiL2NpL0FuZHJvaWQuYnAKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzX3Rlc3QucHkiLAogICAgIF0sCiAgICAgbGliczogWwotICAgICAgICAiYnVpbGRfdGVzdF9zdWl0ZXMiLAorICAgICAgICAiYnVpbGRfdGVzdF9zdWl0ZXNfbGliIiwKICAgICAgICAgInB5ZmFrZWZzIiwKICAgICAgICAgImNpX3Rlc3RfbGliIiwKICAgICBdLApAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAiYnVpbGRfdGVzdF9zdWl0ZXNfbG9jYWxfdGVzdC5weSIsCiAgICAgXSwKICAgICBsaWJzOiBbCi0gICAgICAgICJidWlsZF90ZXN0X3N1aXRlcyIsCisgICAgICAgICJidWlsZF90ZXN0X3N1aXRlc19saWIiLAogICAgICAgICAicHlmYWtlZnMiLAogICAgICAgICAiY2lfdGVzdF9saWIiLAogICAgIF0sCkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICJvcHRpbWl6ZWRfdGFyZ2V0c190ZXN0LnB5IiwKICAgICBdLAogICAgIGxpYnM6IFsKLSAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzIiwKKyAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzX2xpYiIsCiAgICAgICAgICJweWZha2VmcyIsCiAgICAgXSwKICAgICB0ZXN0X29wdGlvbnM6IHsKQEAgLTk1LDEzICs5NSwzNiBAQAogICAgIH0sCiB9CiAKLXB5dGhvbl9saWJyYXJ5X2hvc3QgeworcHl0aG9uX2JpbmFyeV9ob3N0IHsKICAgICBuYW1lOiAiYnVpbGRfdGVzdF9zdWl0ZXMiLAogICAgIHNyY3M6IFsKICAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzLnB5IiwKICAgICAgICAgIm9wdGltaXplZF90YXJnZXRzLnB5IiwKICAgICAgICAgInRlc3RfbWFwcGluZ19tb2R1bGVfcmV0cmlldmVyLnB5IiwKICAgICAgICAgImJ1aWxkX2NvbnRleHQucHkiLAorICAgICAgICAidGVzdF9kaXNjb3ZlcnlfYWdlbnQucHkiLAorICAgICAgICAibWV0cmljc19hZ2VudC5weSIsCisgICAgICAgICJidWlsZGJvdC5weSIsCisgICAgXSwKKyAgICBtYWluOiAiYnVpbGRfdGVzdF9zdWl0ZXMucHkiLAorICAgIGxpYnM6IFsKKyAgICAgICAgInNvb25nLW1ldHJpY3MtcHJvdG8tcHkiLAorICAgIF0sCit9CisKK3B5dGhvbl9saWJyYXJ5X2hvc3QgeworICAgIG5hbWU6ICJidWlsZF90ZXN0X3N1aXRlc19saWIiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzLnB5IiwKKyAgICAgICAgIm9wdGltaXplZF90YXJnZXRzLnB5IiwKKyAgICAgICAgInRlc3RfbWFwcGluZ19tb2R1bGVfcmV0cmlldmVyLnB5IiwKKyAgICAgICAgImJ1aWxkX2NvbnRleHQucHkiLAorICAgICAgICAidGVzdF9kaXNjb3ZlcnlfYWdlbnQucHkiLAorICAgICAgICAibWV0cmljc19hZ2VudC5weSIsCisgICAgICAgICJidWlsZGJvdC5weSIsCisgICAgXSwKKyAgICBsaWJzOiBbCisgICAgICAgICJzb29uZy1tZXRyaWNzLXByb3RvLXB5IiwKICAgICBdLAogfQogCmRpZmYgLS1naXQgYS9jaS9idWlsZF9jb250ZXh0LnB5IGIvY2kvYnVpbGRfY29udGV4dC5weQppbmRleCBjYzQ4ZDUzLi5jN2ExZGVmIDEwMDY0NAotLS0gYS9jaS9idWlsZF9jb250ZXh0LnB5CisrKyBiL2NpL2J1aWxkX2NvbnRleHQucHkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICAgIHNlbGYuaXNfdGVzdF9tYXBwaW5nID0gRmFsc2UKICAgICAgIHNlbGYudGVzdF9tYXBwaW5nX3Rlc3RfZ3JvdXBzID0gc2V0KCkKICAgICAgIHNlbGYuZmlsZV9kb3dubG9hZF9vcHRpb25zID0gc2V0KCkKKyAgICAgIHNlbGYubmFtZSA9IHRlc3RfaW5mb19kaWN0LmdldCgnbmFtZScpCisgICAgICBzZWxmLmNvbW1hbmQgPSB0ZXN0X2luZm9fZGljdC5nZXQoJ2NvbW1hbmQnKQorICAgICAgc2VsZi5leHRyYV9vcHRpb25zID0gdGVzdF9pbmZvX2RpY3QuZ2V0KCdleHRyYU9wdGlvbnMnKQogICAgICAgZm9yIG9wdCBpbiB0ZXN0X2luZm9fZGljdC5nZXQoJ2V4dHJhT3B0aW9ucycsIFtdKToKICAgICAgICAga2V5ID0gb3B0LmdldCgna2V5JykKICAgICAgICAgaWYga2V5ID09ICd0ZXN0LW1hcHBpbmctdGVzdC1ncm91cCc6CmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Rvb2xzL3VwZGF0ZV9ib290bG9hZGVyX3JhZGlvX2ltYWdlLm1rIGIvY2kvYnVpbGRfZGV2aWNlX2FuZF90ZXN0cwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CnNpbWlsYXJpdHkgaW5kZXggNjIlCmNvcHkgZnJvbSBjb3JlL3Rhc2tzL3Rvb2xzL3VwZGF0ZV9ib290bG9hZGVyX3JhZGlvX2ltYWdlLm1rCmNvcHkgdG8gY2kvYnVpbGRfZGV2aWNlX2FuZF90ZXN0cwppbmRleCAwZWJmMjQ3Li42M2QzY2UzCi0tLSBhL2NvcmUvdGFza3MvdG9vbHMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKKysrIGIvY2kvYnVpbGRfZGV2aWNlX2FuZF90ZXN0cwpAQCAtMSwxNyArMSwxOSBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIworIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogIwogIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICMKLSMgICAgICBodHRwOiN3d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAjCiAjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitzZXQgLWV1byBwaXBlZmFpbAogCi1pZmVxICgkKFVTRVNfREVWSUNFX0dPT0dMRV9aVU1BKSx0cnVlKQotICAgIC1pbmNsdWRlIHZlbmRvci9nb29nbGVfZGV2aWNlcy96dW1hL3ByZWJ1aWx0cy9taXNjX2JpbnMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKLWVuZGlmCitidWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlIGJ1aWxkX3Rlc3Rfc3VpdGVzCiskKGJ1aWxkL3Nvb25nL3Nvb25nX3VpLmJhc2ggLS1kdW1wdmFyLW1vZGUgSE9TVF9PVVQpL2Jpbi9idWlsZF90ZXN0X3N1aXRlcyAtLWRldmljZS1idWlsZCAkQApkaWZmIC0tZ2l0IGEvY2kvYnVpbGRfbWV0YWRhdGEgYi9jaS9idWlsZF9tZXRhZGF0YQppbmRleCBhOGViNjVkLi4zZTkyMThmIDEwMDc1NQotLS0gYS9jaS9idWlsZF9tZXRhZGF0YQorKysgYi9jaS9idWlsZF9tZXRhZGF0YQpAQCAtMTQsMTIgKzE0LDMxIEBACiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLXNldCAtZXgKK3NldCAteAorCitzb3VyY2UgYnVpbGQvbWFrZS9zaGVsbF91dGlscy5zaAogCiBleHBvcnQgVEFSR0VUX1BST0RVQ1Q9YW9zcF9hcm02NAogZXhwb3J0IFRBUkdFVF9SRUxFQVNFPXRydW5rX3N0YWdpbmcKIGV4cG9ydCBUQVJHRVRfQlVJTERfVkFSSUFOVD1lbmcKIAotYnVpbGQvc29vbmcvYmluL20gZGlzdCBcCi0gICAgYWxsX3RlYW1zCitpbXBvcnRfYnVpbGRfdmFycyBcCisgICAgICAgIE9VVF9ESVIgXAorICAgICAgICBESVNUX0RJUiBcCisgICAgICAgIEhPU1RfT1VUX0VYRUNVVEFCTEVTIFwKKyAgICB8fCBleGl0ICQ/CiAKK1RBUkdFVFM9KAorICAgIGFsbF90ZWFtcworICAgIHNvdXJjZV90cmVlX3NpemUKKyAgICByZWxlYXNlX2NvbmZpZ19tZXRhZGF0YQorKQorCisjIEJ1aWxkIG1vZHVsZXMKK2J1aWxkL3Nvb25nL2Jpbi9tIGRpc3QgJHtUQVJHRVRTW0BdfSB8fCBleGl0ICQ/CisKKyMgTGlzdCBhbGwgc291cmNlIGZpbGVzIGluIHRoZSB0cmVlCisoIFwKKyAgICAkSE9TVF9PVVRfRVhFQ1VUQUJMRVMvc291cmNlX3RyZWVfc2l6ZSAtbyAkRElTVF9ESVIvYWxsX3NvdXJjZV90cmVlX2ZpbGVzLnBiIFwKKyAgICAgICAgJiYgZ3ppcCAtZm4gJERJU1RfRElSL2FsbF9zb3VyY2VfdHJlZV9maWxlcy5wYiBcCispIHx8IGV4aXQgJD8KZGlmZiAtLWdpdCBhL2NpL2J1aWxkX3Rlc3Rfc3VpdGVzIGIvY2kvYnVpbGRfdGVzdF9zdWl0ZXMKaW5kZXggNWFhZjJmNC4uNzQ0NzBhOCAxMDA3NTUKLS0tIGEvY2kvYnVpbGRfdGVzdF9zdWl0ZXMKKysrIGIvY2kvYnVpbGRfdGVzdF9zdWl0ZXMKQEAgLTEsNCArMSw0IEBACi0jIXByZWJ1aWx0cy9idWlsZC10b29scy9saW51eC14ODYvYmluL3B5My1jbWQgLUIKKyMhL3Vzci9iaW4vZW52IGJhc2gKICMKICMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICMKQEAgLTEzLDggKzEzLDcgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitzZXQgLWV1byBwaXBlZmFpbAogCi1pbXBvcnQgYnVpbGRfdGVzdF9zdWl0ZXMKLWltcG9ydCBzeXMKLQotYnVpbGRfdGVzdF9zdWl0ZXMubWFpbihzeXMuYXJndlsxOl0pCitidWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlIGJ1aWxkX3Rlc3Rfc3VpdGVzCiskKGJ1aWxkL3Nvb25nL3Nvb25nX3VpLmJhc2ggLS1kdW1wdmFyLW1vZGUgSE9TVF9PVVQpL2Jpbi9idWlsZF90ZXN0X3N1aXRlcyAkQApkaWZmIC0tZ2l0IGEvY2kvYnVpbGRfdGVzdF9zdWl0ZXMucHkgYi9jaS9idWlsZF90ZXN0X3N1aXRlcy5weQppbmRleCBiOGM0YTM4Li4zYjhkNTMwIDEwMDY0NAotLS0gYS9jaS9idWlsZF90ZXN0X3N1aXRlcy5weQorKysgYi9jaS9idWlsZF90ZXN0X3N1aXRlcy5weQpAQCAtMjAsMTYgKzIwLDIyIEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHJlCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlCiBmcm9tIGJ1aWxkX2NvbnRleHQgaW1wb3J0IEJ1aWxkQ29udGV4dAogaW1wb3J0IG9wdGltaXplZF90YXJnZXRzCitpbXBvcnQgbWV0cmljc19hZ2VudAoraW1wb3J0IHRlc3RfZGlzY292ZXJ5X2FnZW50CiAKIAotUkVRVUlSRURfRU5WX1ZBUlMgPSBmcm96ZW5zZXQoWydUQVJHRVRfUFJPRFVDVCcsICdUQVJHRVRfUkVMRUFTRScsICdUT1AnXSkKK1JFUVVJUkVEX0VOVl9WQVJTID0gZnJvemVuc2V0KFsnVEFSR0VUX1BST0RVQ1QnLCAnVEFSR0VUX1JFTEVBU0UnLCAnVE9QJywgJ0RJU1RfRElSJ10pCiBTT09OR19VSV9FWEVfUkVMX1BBVEggPSAnYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCcKIExPR19QQVRIID0gJ2xvZ3MvYnVpbGRfdGVzdF9zdWl0ZXMubG9nJworIyBDdXJyZW50bHksIHRoaXMgcHJldmVudHMgdGhlIHJlbW92YWwgb2YgdGhvc2UgdGFncyB3aGVuIHRoZXkgZXhpc3QuIEluIHRoZSBmdXR1cmUgd2UgbGlrZWx5CisjIHdhbnQgdGhlIHNjcmlwdCB0byBzdXBwbHkgJ2Rpc3QgZGlyZWN0bHkKK1JFUVVJUkVEX0JVSUxEX1RBUkdFVFMgPSBmcm96ZW5zZXQoWydkaXN0JywgJ2Ryb2lkJ10pCiAKIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKQEAgLTcwLDEyICs3Niw0NyBAQAogCiAgICAgYnVpbGRfdGFyZ2V0cyA9IHNldCgpCiAgICAgcGFja2FnaW5nX2NvbW1hbmRzX2dldHRlcnMgPSBbXQotICAgIGZvciB0YXJnZXQgaW4gc2VsZi5hcmdzLmV4dHJhX3RhcmdldHM6Ci0gICAgICBpZiBzZWxmLl91bnVzZWRfdGFyZ2V0X2V4Y2x1c2lvbl9lbmFibGVkKAotICAgICAgICAgIHRhcmdldAotICAgICAgKSBhbmQgbm90IHNlbGYuYnVpbGRfY29udGV4dC5idWlsZF90YXJnZXRfdXNlZCh0YXJnZXQpOgotICAgICAgICBjb250aW51ZQorICAgICMgSW4gb3JkZXIgdG8gcm9sbCBvcHRpbWl6YXRpb25zIG91dCBkaWZmZXJlbnRseSBiZXR3ZWVuIHRlc3Qgc3VpdGVzIGFuZAorICAgICMgZGV2aWNlIGJ1aWxkcywgd2UgaGF2ZSBzZXBhcmF0ZSBmbGFncy4KKyAgICBpZiAoCisgICAgICAgICd0ZXN0X3N1aXRlc196aXBfdGVzdF9kaXNjb3ZlcnknCisgICAgICAgIGluIHNlbGYuYnVpbGRfY29udGV4dC5lbmFibGVkX2J1aWxkX2ZlYXR1cmVzCisgICAgICAgIGFuZCBub3Qgc2VsZi5hcmdzLmRldmljZV9idWlsZAorICAgICkgb3IgKAorICAgICAgICAnZGV2aWNlX3ppcF90ZXN0X2Rpc2NvdmVyeScKKyAgICAgICAgaW4gc2VsZi5idWlsZF9jb250ZXh0LmVuYWJsZWRfYnVpbGRfZmVhdHVyZXMKKyAgICAgICAgYW5kIHNlbGYuYXJncy5kZXZpY2VfYnVpbGQKKyAgICApOgorICAgICAgcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0cyA9IHNlbGYuX2NvbGxlY3RfcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0cygpCisgICAgZWxzZToKKyAgICAgIHByZWxpbWluYXJ5X2J1aWxkX3RhcmdldHMgPSBzZWxmLl9sZWdhY3lfY29sbGVjdF9wcmVsaW1pbmFyeV9idWlsZF90YXJnZXRzKCkKIAorICAgICAgIyBLZWVwIHJlcG9ydGluZyBtZXRyaWNzIHdoZW4gdGVzdCBkaXNjb3ZlcnkgaXMgZGlzYWJsZWQuCisgICAgICAjIFRvIGJlIHJlbW92ZWQgb25jZSB0ZXN0IGRpc2NvdmVyeSBpcyBmdWxseSByb2xsZWQgb3V0LgorICAgICAgb3B0aW1pemF0aW9uX3JhdGlvbmFsZSA9ICcnCisgICAgICB0ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlcyA9IHNldCgpCisgICAgICB0cnk6CisgICAgICAgIHRlc3RfZGlzY292ZXJ5X3ppcF9yZWdleGVzID0gc2VsZi5fZ2V0X3Rlc3RfZGlzY292ZXJ5X3ppcF9yZWdleGVzKCkKKyAgICAgICAgbG9nZ2luZy5pbmZvKGYnRGlzY292ZXJlZCB0ZXN0IGRpc2NvdmVyeSByZWdleGVzOiB7dGVzdF9kaXNjb3ZlcnlfemlwX3JlZ2V4ZXN9JykKKyAgICAgIGV4Y2VwdCB0ZXN0X2Rpc2NvdmVyeV9hZ2VudC5UZXN0RGlzY292ZXJ5RXJyb3IgYXMgZToKKyAgICAgICAgb3B0aW1pemF0aW9uX3JhdGlvbmFsZSA9IGUubWVzc2FnZQorICAgICAgICBsb2dnaW5nLndhcm5pbmcoZidVbmFibGUgdG8gcGVyZm9ybSB0ZXN0IGRpc2NvdmVyeToge29wdGltaXphdGlvbl9yYXRpb25hbGV9JykKKworICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmFyZ3MuZXh0cmFfdGFyZ2V0czoKKyAgICAgICAgaWYgb3B0aW1pemF0aW9uX3JhdGlvbmFsZToKKyAgICAgICAgICBnZXRfbWV0cmljc19hZ2VudCgpLnJlcG9ydF91bm9wdGltaXplZF90YXJnZXQodGFyZ2V0LCBvcHRpbWl6YXRpb25fcmF0aW9uYWxlKQorICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICByZWdleCA9IHInXGIoJXMuKilcYicgJSByZS5lc2NhcGUodGFyZ2V0KQorICAgICAgICAgIGlmIGFueShyZS5zZWFyY2gocmVnZXgsIG9wdCkgZm9yIG9wdCBpbiB0ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlcyk6CisgICAgICAgICAgICBnZXRfbWV0cmljc19hZ2VudCgpLnJlcG9ydF91bm9wdGltaXplZF90YXJnZXQodGFyZ2V0LCAnVGVzdCBhcnRpZmFjdCB1c2VkLicpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X29wdGltaXplZF90YXJnZXQodGFyZ2V0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgbG9nZ2luZy5lcnJvcihmJ3VuYWJsZSB0byBwYXJzZSB0ZXN0IGRpc2NvdmVyeSBvdXRwdXQ6IHtyZXByKGUpfScpCisgICAgICAgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5yZXBvcnRfdW5vcHRpbWl6ZWRfdGFyZ2V0KHRhcmdldCwgZidFcnJvciBpbiBwYXJzaW5nIHRlc3QgZGlzY292ZXJ5IG91dHB1dCBmb3Ige3RhcmdldH06IHtyZXByKGUpfScpCisKKyAgICBmb3IgdGFyZ2V0IGluIHByZWxpbWluYXJ5X2J1aWxkX3RhcmdldHM6CiAgICAgICB0YXJnZXRfb3B0aW1pemVyX2dldHRlciA9IHNlbGYudGFyZ2V0X29wdGltaXphdGlvbnMuZ2V0KHRhcmdldCwgTm9uZSkKICAgICAgIGlmIG5vdCB0YXJnZXRfb3B0aW1pemVyX2dldHRlcjoKICAgICAgICAgYnVpbGRfdGFyZ2V0cy5hZGQodGFyZ2V0KQpAQCAtOTEsMTIgKzEzMiw4NSBAQAogCiAgICAgcmV0dXJuIEJ1aWxkUGxhbihidWlsZF90YXJnZXRzLCBwYWNrYWdpbmdfY29tbWFuZHNfZ2V0dGVycykKIAorICBkZWYgX2NvbGxlY3RfcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0cyhzZWxmKToKKyAgICBidWlsZF90YXJnZXRzID0gc2V0KCkKKyAgICB0cnk6CisgICAgICB0ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlcyA9IHNlbGYuX2dldF90ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlcygpCisgICAgICBsb2dnaW5nLmluZm8oZidEaXNjb3ZlcmVkIHRlc3QgZGlzY292ZXJ5IHJlZ2V4ZXM6IHt0ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlc30nKQorICAgIGV4Y2VwdCB0ZXN0X2Rpc2NvdmVyeV9hZ2VudC5UZXN0RGlzY292ZXJ5RXJyb3IgYXMgZToKKyAgICAgIG9wdGltaXphdGlvbl9yYXRpb25hbGUgPSBlLm1lc3NhZ2UKKyAgICAgIGxvZ2dpbmcud2FybmluZyhmJ1VuYWJsZSB0byBwZXJmb3JtIHRlc3QgZGlzY292ZXJ5OiB7b3B0aW1pemF0aW9uX3JhdGlvbmFsZX0nKQorCisgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYXJncy5leHRyYV90YXJnZXRzOgorICAgICAgICBnZXRfbWV0cmljc19hZ2VudCgpLnJlcG9ydF91bm9wdGltaXplZF90YXJnZXQodGFyZ2V0LCBvcHRpbWl6YXRpb25fcmF0aW9uYWxlKQorICAgICAgcmV0dXJuIHNlbGYuX2xlZ2FjeV9jb2xsZWN0X3ByZWxpbWluYXJ5X2J1aWxkX3RhcmdldHMoKQorCisgICAgZm9yIHRhcmdldCBpbiBzZWxmLmFyZ3MuZXh0cmFfdGFyZ2V0czoKKyAgICAgIGlmIHRhcmdldCBpbiBSRVFVSVJFRF9CVUlMRF9UQVJHRVRTOgorICAgICAgICBidWlsZF90YXJnZXRzLmFkZCh0YXJnZXQpCisgICAgICAgIGNvbnRpbnVlCisKKyAgICAgIHJlZ2V4ID0gcidcYiglcy4qKVxiJyAlIHJlLmVzY2FwZSh0YXJnZXQpCisgICAgICBmb3Igb3B0IGluIHRlc3RfZGlzY292ZXJ5X3ppcF9yZWdleGVzOgorICAgICAgICB0cnk6CisgICAgICAgICAgaWYgcmUuc2VhcmNoKHJlZ2V4LCBvcHQpOgorICAgICAgICAgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5yZXBvcnRfdW5vcHRpbWl6ZWRfdGFyZ2V0KHRhcmdldCwgJ1Rlc3QgYXJ0aWZhY3QgdXNlZC4nKQorICAgICAgICAgICAgYnVpbGRfdGFyZ2V0cy5hZGQodGFyZ2V0KQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICBnZXRfbWV0cmljc19hZ2VudCgpLnJlcG9ydF9vcHRpbWl6ZWRfdGFyZ2V0KHRhcmdldCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICMgSW4gY2FzZSBvZiBleGNlcHRpb24gcmVwb3J0IGFzIHVub3B0aW1pemVkCisgICAgICAgICAgYnVpbGRfdGFyZ2V0cy5hZGQodGFyZ2V0KQorICAgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X3Vub3B0aW1pemVkX3RhcmdldCh0YXJnZXQsIGYnRXJyb3IgaW4gcGFyc2luZyB0ZXN0IGRpc2NvdmVyeSBvdXRwdXQgZm9yIHt0YXJnZXR9OiB7cmVwcihlKX0nKQorICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoZid1bmFibGUgdG8gcGFyc2UgdGVzdCBkaXNjb3Zlcnkgb3V0cHV0OiB7cmVwcihlKX0nKQorCisgICAgcmV0dXJuIGJ1aWxkX3RhcmdldHMKKworICBkZWYgX2xlZ2FjeV9jb2xsZWN0X3ByZWxpbWluYXJ5X2J1aWxkX3RhcmdldHMoc2VsZik6CisgICAgYnVpbGRfdGFyZ2V0cyA9IHNldCgpCisgICAgZm9yIHRhcmdldCBpbiBzZWxmLmFyZ3MuZXh0cmFfdGFyZ2V0czoKKyAgICAgIGlmIHNlbGYuX3VudXNlZF90YXJnZXRfZXhjbHVzaW9uX2VuYWJsZWQoCisgICAgICAgICAgdGFyZ2V0CisgICAgICApIGFuZCBub3Qgc2VsZi5idWlsZF9jb250ZXh0LmJ1aWxkX3RhcmdldF91c2VkKHRhcmdldCk6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICAgIGJ1aWxkX3RhcmdldHMuYWRkKHRhcmdldCkKKyAgICByZXR1cm4gYnVpbGRfdGFyZ2V0cworCiAgIGRlZiBfdW51c2VkX3RhcmdldF9leGNsdXNpb25fZW5hYmxlZChzZWxmLCB0YXJnZXQ6IHN0cikgLT4gYm9vbDoKICAgICByZXR1cm4gKAogICAgICAgICBmJ3t0YXJnZXR9X3VudXNlZF9leGNsdXNpb24nCiAgICAgICAgIGluIHNlbGYuYnVpbGRfY29udGV4dC5lbmFibGVkX2J1aWxkX2ZlYXR1cmVzCiAgICAgKQogCisgIGRlZiBfZ2V0X3Rlc3RfZGlzY292ZXJ5X3ppcF9yZWdleGVzKHNlbGYpIC0+IHNldFtzdHJdOgorICAgIGJ1aWxkX3RhcmdldF9yZWdleGVzID0gc2V0KCkKKyAgICBmb3IgdGVzdF9pbmZvIGluIHNlbGYuYnVpbGRfY29udGV4dC50ZXN0X2luZm9zOgorICAgICAgdGZfY29tbWFuZCA9IHNlbGYuX2J1aWxkX3RmX2NvbW1hbmQodGVzdF9pbmZvKQorICAgICAgZGlzY292ZXJ5X2FnZW50ID0gdGVzdF9kaXNjb3ZlcnlfYWdlbnQuVGVzdERpc2NvdmVyeUFnZW50KHRyYWRlZmVkX2FyZ3M9dGZfY29tbWFuZCkKKyAgICAgIGZvciByZWdleCBpbiBkaXNjb3ZlcnlfYWdlbnQuZGlzY292ZXJfdGVzdF96aXBfcmVnZXhlcygpOgorICAgICAgICBidWlsZF90YXJnZXRfcmVnZXhlcy5hZGQocmVnZXgpCisgICAgcmV0dXJuIGJ1aWxkX3RhcmdldF9yZWdleGVzCisKKworICBkZWYgX2J1aWxkX3RmX2NvbW1hbmQoc2VsZiwgdGVzdF9pbmZvKSAtPiBsaXN0W3N0cl06CisgICAgY29tbWFuZCA9IFt0ZXN0X2luZm8uY29tbWFuZF0KKyAgICBmb3IgZXh0cmFfb3B0aW9uIGluIHRlc3RfaW5mby5leHRyYV9vcHRpb25zOgorICAgICAgaWYgbm90IGV4dHJhX29wdGlvbi5nZXQoJ2tleScpOgorICAgICAgICBjb250aW51ZQorICAgICAgYXJnX2tleSA9ICctLScgKyBleHRyYV9vcHRpb24uZ2V0KCdrZXknKQorICAgICAgaWYgYXJnX2tleSA9PSAnLS1idWlsZC1pZCc6CisgICAgICAgIGNvbW1hbmQuYXBwZW5kKGFyZ19rZXkpCisgICAgICAgIGNvbW1hbmQuYXBwZW5kKG9zLmVudmlyb24uZ2V0KCdCVUlMRF9OVU1CRVInKSkKKyAgICAgICAgY29udGludWUKKyAgICAgIGlmIGV4dHJhX29wdGlvbi5nZXQoJ3ZhbHVlcycpOgorICAgICAgICBmb3IgdmFsdWUgaW4gZXh0cmFfb3B0aW9uLmdldCgndmFsdWVzJyk6CisgICAgICAgICAgY29tbWFuZC5hcHBlbmQoYXJnX2tleSkKKyAgICAgICAgICBjb21tYW5kLmFwcGVuZCh2YWx1ZSkKKyAgICAgIGVsc2U6CisgICAgICAgIGNvbW1hbmQuYXBwZW5kKGFyZ19rZXkpCisKKyAgICByZXR1cm4gY29tbWFuZAogCiBAZGF0YWNsYXNzKGZyb3plbj1UcnVlKQogY2xhc3MgQnVpbGRQbGFuOgpAQCAtMTEzLDE5ICsyMjcsMjcgQEAKICAgUmV0dXJuczoKICAgICBUaGUgZXhpdCBjb2RlIG9mIHRoZSBidWlsZC4KICAgIiIiCi0gIGFyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCi0gIGNoZWNrX3JlcXVpcmVkX2VudigpCi0gIGJ1aWxkX2NvbnRleHQgPSBCdWlsZENvbnRleHQobG9hZF9idWlsZF9jb250ZXh0KCkpCi0gIGJ1aWxkX3BsYW5uZXIgPSBCdWlsZFBsYW5uZXIoCi0gICAgICBidWlsZF9jb250ZXh0LCBhcmdzLCBvcHRpbWl6ZWRfdGFyZ2V0cy5PUFRJTUlaRURfQlVJTERfVEFSR0VUUwotICApCi0gIGJ1aWxkX3BsYW4gPSBidWlsZF9wbGFubmVyLmNyZWF0ZV9idWlsZF9wbGFuKCkKKyAgZ2V0X21ldHJpY3NfYWdlbnQoKS5hbmFseXNpc19zdGFydCgpCisgIHRyeToKKyAgICBhcmdzID0gcGFyc2VfYXJncyhhcmd2KQorICAgIGNoZWNrX3JlcXVpcmVkX2VudigpCisgICAgYnVpbGRfY29udGV4dCA9IEJ1aWxkQ29udGV4dChsb2FkX2J1aWxkX2NvbnRleHQoKSkKKyAgICBidWlsZF9wbGFubmVyID0gQnVpbGRQbGFubmVyKAorICAgICAgICBidWlsZF9jb250ZXh0LCBhcmdzLCBvcHRpbWl6ZWRfdGFyZ2V0cy5PUFRJTUlaRURfQlVJTERfVEFSR0VUUworICAgICkKKyAgICBidWlsZF9wbGFuID0gYnVpbGRfcGxhbm5lci5jcmVhdGVfYnVpbGRfcGxhbigpCisgIGV4Y2VwdDoKKyAgICByYWlzZQorICBmaW5hbGx5OgorICAgIGdldF9tZXRyaWNzX2FnZW50KCkuYW5hbHlzaXNfZW5kKCkKIAogICB0cnk6CiAgICAgZXhlY3V0ZV9idWlsZF9wbGFuKGJ1aWxkX3BsYW4pCiAgIGV4Y2VwdCBCdWlsZEZhaWx1cmVFcnJvciBhcyBlOgogICAgIGxvZ2dpbmcuZXJyb3IoJ0J1aWxkIGNvbW1hbmQgZmFpbGVkISBDaGVjayBidWlsZF9sb2cgZm9yIGRldGFpbHMuJykKICAgICByZXR1cm4gZS5yZXR1cm5fY29kZQorICBmaW5hbGx5OgorICAgIGdldF9tZXRyaWNzX2FnZW50KCkuZW5kX3JlcG9ydGluZygpCiAKICAgcmV0dXJuIDAKIApAQCAtMTM2LDYgKzI1OCwxMSBAQAogICBhcmdwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgJ2V4dHJhX3RhcmdldHMnLCBuYXJncz0nKicsIGhlbHA9J0V4dHJhIHRlc3Qgc3VpdGVzIHRvIGJ1aWxkLicKICAgKQorICBhcmdwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgJy0tZGV2aWNlLWJ1aWxkJywKKyAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICBoZWxwPSdGbGFnIHRvIGluZGljYXRlIHJ1bm5pbmcgYSBkZXZpY2UgYnVpbGQuJywKKyAgKQogCiAgIHJldHVybiBhcmdwYXJzZXIucGFyc2VfYXJncyhhcmd2KQogCkBAIC0xODMsMTIgKzMxMCwxNSBAQAogICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICByYWlzZSBCdWlsZEZhaWx1cmVFcnJvcihlLnJldHVybmNvZGUpIGZyb20gZQogCi0gIGZvciBwYWNrYWdpbmdfY29tbWFuZHNfZ2V0dGVyIGluIGJ1aWxkX3BsYW4ucGFja2FnaW5nX2NvbW1hbmRzX2dldHRlcnM6Ci0gICAgdHJ5OgorICBnZXRfbWV0cmljc19hZ2VudCgpLnBhY2thZ2luZ19zdGFydCgpCisgIHRyeToKKyAgICBmb3IgcGFja2FnaW5nX2NvbW1hbmRzX2dldHRlciBpbiBidWlsZF9wbGFuLnBhY2thZ2luZ19jb21tYW5kc19nZXR0ZXJzOgogICAgICAgZm9yIHBhY2thZ2luZ19jb21tYW5kIGluIHBhY2thZ2luZ19jb21tYW5kc19nZXR0ZXIoKToKICAgICAgICAgcnVuX2NvbW1hbmQocGFja2FnaW5nX2NvbW1hbmQpCi0gICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgICByYWlzZSBCdWlsZEZhaWx1cmVFcnJvcihlLnJldHVybmNvZGUpIGZyb20gZQorICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICByYWlzZSBCdWlsZEZhaWx1cmVFcnJvcihlLnJldHVybmNvZGUpIGZyb20gZQorICBmaW5hbGx5OgorICAgIGdldF9tZXRyaWNzX2FnZW50KCkucGFja2FnaW5nX2VuZCgpCiAKIAogZGVmIGdldF90b3AoKSAtPiBwYXRobGliLlBhdGg6CkBAIC0xOTksNiArMzI5LDEwIEBACiAgIHN1YnByb2Nlc3MucnVuKGFyZ3M9YXJncywgY2hlY2s9VHJ1ZSwgc3Rkb3V0PXN0ZG91dCkKIAogCitkZWYgZ2V0X21ldHJpY3NfYWdlbnQoKToKKyAgcmV0dXJuIG1ldHJpY3NfYWdlbnQuTWV0cmljc0FnZW50Lmluc3RhbmNlKCkKKworCiBkZWYgbWFpbihhcmd2KToKICAgZGlzdF9kaXIgPSBvcy5lbnZpcm9uLmdldCgnRElTVF9ESVInKQogICBpZiBkaXN0X2RpcjoKQEAgLTIwOSwzICszNDMsNyBAQAogICAgICAgICBmaWxlbmFtZT1sb2dfZmlsZSwKICAgICApCiAgIHN5cy5leGl0KGJ1aWxkX3Rlc3Rfc3VpdGVzKGFyZ3YpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIG1haW4oc3lzLmFyZ3ZbMTpdKQpkaWZmIC0tZ2l0IGEvY2kvYnVpbGRfdGVzdF9zdWl0ZXNfdGVzdC5weSBiL2NpL2J1aWxkX3Rlc3Rfc3VpdGVzX3Rlc3QucHkKaW5kZXggMmFmYWFiNy4uMjlkMjY4ZSAxMDA2NDQKLS0tIGEvY2kvYnVpbGRfdGVzdF9zdWl0ZXNfdGVzdC5weQorKysgYi9jaS9idWlsZF90ZXN0X3N1aXRlc190ZXN0LnB5CkBAIC0zNyw2ICszNyw4IEBACiBpbXBvcnQgY2lfdGVzdF9saWIKIGltcG9ydCBvcHRpbWl6ZWRfdGFyZ2V0cwogZnJvbSBweWZha2VmcyBpbXBvcnQgZmFrZV9maWxlc3lzdGVtX3VuaXR0ZXN0CitpbXBvcnQgbWV0cmljc19hZ2VudAoraW1wb3J0IHRlc3RfZGlzY292ZXJ5X2FnZW50CiAKIAogY2xhc3MgQnVpbGRUZXN0U3VpdGVzVGVzdChmYWtlX2ZpbGVzeXN0ZW1fdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNTIsNiArNTQsMTAgQEAKICAgICBzZWxmLmFkZENsZWFudXAoc3VicHJvY2Vzc19ydW5fcGF0Y2hlci5zdG9wKQogICAgIHNlbGYubW9ja19zdWJwcm9jZXNzX3J1biA9IHN1YnByb2Nlc3NfcnVuX3BhdGNoZXIuc3RhcnQoKQogCisgICAgbWV0cmljc19hZ2VudF9maW5hbGl6ZV9wYXRjaGVyID0gbW9jay5wYXRjaCgnbWV0cmljc19hZ2VudC5NZXRyaWNzQWdlbnQuZW5kX3JlcG9ydGluZycpCisgICAgc2VsZi5hZGRDbGVhbnVwKG1ldHJpY3NfYWdlbnRfZmluYWxpemVfcGF0Y2hlci5zdG9wKQorICAgIHNlbGYubW9ja19tZXRyaWNzX2FnZW50X2VuZCA9IG1ldHJpY3NfYWdlbnRfZmluYWxpemVfcGF0Y2hlci5zdGFydCgpCisKICAgICBzZWxmLl9zZXR1cF93b3JraW5nX2J1aWxkX2VudigpCiAKICAgZGVmIHRlc3RfbWlzc2luZ190YXJnZXRfcmVsZWFzZV9lbnZfdmFyX3JhaXNlcyhzZWxmKToKQEAgLTcyLDYgKzc4LDEyIEBACiAgICAgd2l0aCBzZWxmLmFzc2VydF9yYWlzZXNfd29yZChidWlsZF90ZXN0X3N1aXRlcy5FcnJvciwgJ1RPUCcpOgogICAgICAgYnVpbGRfdGVzdF9zdWl0ZXMubWFpbihbXSkKIAorICBkZWYgdGVzdF9taXNzaW5nX2Rpc3RfZGlyX2Vudl92YXJfcmFpc2VzKHNlbGYpOgorICAgIGRlbCBvcy5lbnZpcm9uWydESVNUX0RJUiddCisKKyAgICB3aXRoIHNlbGYuYXNzZXJ0X3JhaXNlc193b3JkKGJ1aWxkX3Rlc3Rfc3VpdGVzLkVycm9yLCAnRElTVF9ESVInKToKKyAgICAgIGJ1aWxkX3Rlc3Rfc3VpdGVzLm1haW4oW10pCisKICAgZGVmIHRlc3RfaW52YWxpZF9hcmdfcmFpc2VzKHNlbGYpOgogICAgIGludmFsaWRfYXJncyA9IFsnLS1pbnZhbGlkX2FyZyddCiAKQEAgLTEwOCw2ICsxMjAsOSBAQAogICAgIHNlbGYuc29vbmdfdWlfZGlyID0gc2VsZi5mYWtlX3RvcC5qb2lucGF0aCgnYnVpbGQvc29vbmcnKQogICAgIHNlbGYuc29vbmdfdWlfZGlyLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKIAorICAgIHNlbGYubG9nc19kaXIgPSBzZWxmLmZha2VfdG9wLmpvaW5wYXRoKCdkaXN0L2xvZ3MnKQorICAgIHNlbGYubG9nc19kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKQorCiAgICAgc2VsZi5zb29uZ191aSA9IHNlbGYuc29vbmdfdWlfZGlyLmpvaW5wYXRoKCdzb29uZ191aS5iYXNoJykKICAgICBzZWxmLnNvb25nX3VpLnRvdWNoKCkKIApAQCAtMTE1LDYgKzEzMCw3IEBACiAgICAgICAgICdUQVJHRVRfUkVMRUFTRSc6ICdyZWxlYXNlJywKICAgICAgICAgJ1RBUkdFVF9QUk9EVUNUJzogJ3Byb2R1Y3QnLAogICAgICAgICAnVE9QJzogc3RyKHNlbGYuZmFrZV90b3ApLAorICAgICAgICAnRElTVF9ESVInOiBzdHIoc2VsZi5mYWtlX3RvcC5qb2lucGF0aCgnZGlzdCcpKSwKICAgICB9KQogCiAgICAgc2VsZi5tb2NrX3N1YnByb2Nlc3NfcnVuLnJldHVybl92YWx1ZSA9IDAKQEAgLTI1Niw2ICsyNzIsMTIgQEAKICAgICBkZWYgZ2V0X2VuYWJsZWRfZmxhZyhzZWxmKToKICAgICAgIHJldHVybiBmJ3tzZWxmLnRhcmdldH1fZW5hYmxlZCcKIAorICBkZWYgc2V0VXAoc2VsZik6CisgICAgdGVzdF9kaXNjb3ZlcnlfYWdlbnRfcGF0Y2hlciA9IG1vY2sucGF0Y2goJ3Rlc3RfZGlzY292ZXJ5X2FnZW50LlRlc3REaXNjb3ZlcnlBZ2VudC5kaXNjb3Zlcl90ZXN0X3ppcF9yZWdleGVzJykKKyAgICBzZWxmLmFkZENsZWFudXAodGVzdF9kaXNjb3ZlcnlfYWdlbnRfcGF0Y2hlci5zdG9wKQorICAgIHNlbGYubW9ja190ZXN0X2Rpc2NvdmVyeV9hZ2VudF9lbmQgPSB0ZXN0X2Rpc2NvdmVyeV9hZ2VudF9wYXRjaGVyLnN0YXJ0KCkKKworCiAgIGRlZiB0ZXN0X2J1aWxkX29wdGltaXphdGlvbl9vZmZfYnVpbGRzX2V2ZXJ5dGhpbmcoc2VsZik6CiAgICAgYnVpbGRfdGFyZ2V0cyA9IHsndGFyZ2V0XzEnLCAndGFyZ2V0XzInfQogICAgIGJ1aWxkX3BsYW5uZXIgPSBzZWxmLmNyZWF0ZV9idWlsZF9wbGFubmVyKApkaWZmIC0tZ2l0IGEvY2kvbWV0cmljc19hZ2VudC5weSBiL2NpL21ldHJpY3NfYWdlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyNDc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NpL21ldHJpY3NfYWdlbnQucHkKQEAgLTAsMCArMSwxMTYgQEAKKyMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiTWV0cmljc0FnZW50IGlzIGEgc2luZ2xldG9uIGNsYXNzIHRoYXQgY29sbGVjdHMgbWV0cmljcyBmb3Igb3B0aW1pemVkIGJ1aWxkLiIiIgorCitmcm9tIGVudW0gaW1wb3J0IEVudW0KK2ltcG9ydCB0aW1lCitpbXBvcnQgbWV0cmljc19wYjIKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKKworCitjbGFzcyBNZXRyaWNzQWdlbnQ6CisgIF9TT09OR19NRVRSSUNTX1BBVEggPSAnbG9ncy9zb29uZ19tZXRyaWNzJworICBfRElTVF9ESVIgPSAnRElTVF9ESVInCisgIF9pbnN0YW5jZSA9IE5vbmUKKworICBkZWYgX19pbml0X18oc2VsZik6CisgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAnTWV0cmljc0FnZW50IGNhbm5vdCBiZSBpbnN0YW50aWFsaXplZCwgdXNlIGluc3RhbmNlKCkgaW5zdGVhZCcKKyAgICApCisKKyAgQGNsYXNzbWV0aG9kCisgIGRlZiBpbnN0YW5jZShjbHMpOgorICAgIGlmIG5vdCBjbHMuX2luc3RhbmNlOgorICAgICAgY2xzLl9pbnN0YW5jZSA9IGNscy5fX25ld19fKGNscykKKyAgICAgIGNscy5faW5zdGFuY2UuX3Byb3RvID0gbWV0cmljc19wYjIuT3B0aW1pemVkQnVpbGRNZXRyaWNzKCkKKyAgICAgIGNscy5faW5zdGFuY2UuX2luaXRfcHJvdG8oKQorICAgICAgY2xzLl9pbnN0YW5jZS5fdGFyZ2V0X3Jlc3VsdHMgPSBkaWN0KCkKKworICAgIHJldHVybiBjbHMuX2luc3RhbmNlCisKKyAgZGVmIF9pbml0X3Byb3RvKHNlbGYpOgorICAgIHNlbGYuX3Byb3RvLmFuYWx5c2lzX3BlcmYubmFtZSA9ICdPcHRpbWl6ZWQgYnVpbGQgYW5hbHlzaXMgdGltZS4nCisgICAgc2VsZi5fcHJvdG8ucGFja2FnaW5nX3BlcmYubmFtZSA9ICdPcHRpbWl6ZWQgYnVpbGQgdG90YWwgcGFja2FnaW5nIHRpbWUuJworCisgIGRlZiBhbmFseXNpc19zdGFydChzZWxmKToKKyAgICBzZWxmLl9wcm90by5hbmFseXNpc19wZXJmLnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWVfbnMoKQorCisgIGRlZiBhbmFseXNpc19lbmQoc2VsZik6CisgICAgc2VsZi5fcHJvdG8uYW5hbHlzaXNfcGVyZi5yZWFsX3RpbWUgPSAoCisgICAgICAgIHRpbWUudGltZV9ucygpIC0gc2VsZi5fcHJvdG8uYW5hbHlzaXNfcGVyZi5zdGFydF90aW1lCisgICAgKQorCisgIGRlZiBwYWNrYWdpbmdfc3RhcnQoc2VsZik6CisgICAgc2VsZi5fcHJvdG8ucGFja2FnaW5nX3BlcmYuc3RhcnRfdGltZSA9IHRpbWUudGltZV9ucygpCisKKyAgZGVmIHBhY2thZ2luZ19lbmQoc2VsZik6CisgICAgc2VsZi5fcHJvdG8ucGFja2FnaW5nX3BlcmYucmVhbF90aW1lID0gKAorICAgICAgICB0aW1lLnRpbWVfbnMoKSAtIHNlbGYuX3Byb3RvLnBhY2thZ2luZ19wZXJmLnN0YXJ0X3RpbWUKKyAgICApCisKKyAgZGVmIHJlcG9ydF9vcHRpbWl6ZWRfdGFyZ2V0KHNlbGYsIG5hbWU6IHN0cik6CisgICAgdGFyZ2V0X3Jlc3VsdCA9IG1ldHJpY3NfcGIyLk9wdGltaXplZEJ1aWxkTWV0cmljcy5UYXJnZXRPcHRpbWl6YXRpb25SZXN1bHQoKQorICAgIHRhcmdldF9yZXN1bHQubmFtZSA9IG5hbWUKKyAgICB0YXJnZXRfcmVzdWx0Lm9wdGltaXplZCA9IFRydWUKKyAgICBzZWxmLl90YXJnZXRfcmVzdWx0c1tuYW1lXSA9IHRhcmdldF9yZXN1bHQKKworICBkZWYgcmVwb3J0X3Vub3B0aW1pemVkX3RhcmdldChzZWxmLCBuYW1lOiBzdHIsIG9wdGltaXphdGlvbl9yYXRpb25hbGU6IHN0cik6CisgICAgdGFyZ2V0X3Jlc3VsdCA9IG1ldHJpY3NfcGIyLk9wdGltaXplZEJ1aWxkTWV0cmljcy5UYXJnZXRPcHRpbWl6YXRpb25SZXN1bHQoKQorICAgIHRhcmdldF9yZXN1bHQubmFtZSA9IG5hbWUKKyAgICB0YXJnZXRfcmVzdWx0Lm9wdGltaXphdGlvbl9yYXRpb25hbGUgPSBvcHRpbWl6YXRpb25fcmF0aW9uYWxlCisgICAgdGFyZ2V0X3Jlc3VsdC5vcHRpbWl6ZWQgPSBGYWxzZQorICAgIHNlbGYuX3RhcmdldF9yZXN1bHRzW25hbWVdID0gdGFyZ2V0X3Jlc3VsdAorCisgIGRlZiB0YXJnZXRfcGFja2FnaW5nX3N0YXJ0KHNlbGYsIG5hbWU6IHN0cik6CisgICAgdGFyZ2V0X3Jlc3VsdCA9IHNlbGYuX3RhcmdldF9yZXN1bHRzLmdldChuYW1lKQorICAgIHRhcmdldF9yZXN1bHQucGFja2FnaW5nX3BlcmYuc3RhcnRfdGltZSA9IHRpbWUudGltZV9ucygpCisgICAgc2VsZi5fdGFyZ2V0X3Jlc3VsdHNbbmFtZV0gPSB0YXJnZXRfcmVzdWx0CisKKyAgZGVmIHRhcmdldF9wYWNrYWdpbmdfZW5kKHNlbGYsIG5hbWU6IHN0cik6CisgICAgdGFyZ2V0X3Jlc3VsdCA9IHNlbGYuX3RhcmdldF9yZXN1bHRzLmdldChuYW1lKQorICAgIHRhcmdldF9yZXN1bHQucGFja2FnaW5nX3BlcmYucmVhbF90aW1lID0gKAorICAgICAgICB0aW1lLnRpbWVfbnMoKSAtIHRhcmdldF9yZXN1bHQucGFja2FnaW5nX3BlcmYuc3RhcnRfdGltZQorICAgICkKKworICBkZWYgYWRkX3RhcmdldF9hcnRpZmFjdCgKKyAgICAgIHNlbGYsCisgICAgICB0YXJnZXRfbmFtZTogc3RyLAorICAgICAgYXJ0aWZhY3RfbmFtZTogc3RyLAorICAgICAgc2l6ZTogaW50LAorICAgICAgaW5jbHVkZWRfbW9kdWxlczogc2V0W3N0cl0sCisgICk6CisgICAgdGFyZ2V0X3Jlc3VsdCA9IHNlbGYudGFyZ2V0X3Jlc3VsdHMuZ2V0KHRhcmdldF9uYW1lKQorICAgIGFydGlmYWN0ID0gKAorICAgICAgICBtZXRyaWNzX3BiMi5PcHRpbWl6ZWRCdWlsZE1ldHJpY3MuVGFyZ2V0T3B0aW1pemF0aW9uUmVzdWx0Lk91dHB1dEFydGlmYWN0KCkKKyAgICApCisgICAgYXJ0aWZhY3QubmFtZSA9IGFydGlmYWN0X25hbWUKKyAgICBhcnRpZmFjdC5zaXplID0gc2l6ZQorICAgIGZvciBtb2R1bGUgaW4gaW5jbHVkZWRfbW9kdWxlczoKKyAgICAgIGFydGlmYWN0LmluY2x1ZGVkX21vZHVsZXMuYWRkKG1vZHVsZSkKKyAgICB0YXJnZXRfcmVzdWx0Lm91dHB1dF9hcnRpZmFjdHMuYWRkKGFydGlmYWN0KQorCisgIGRlZiBlbmRfcmVwb3J0aW5nKHNlbGYpOgorICAgIGZvciB0YXJnZXRfcmVzdWx0IGluIHNlbGYuX3RhcmdldF9yZXN1bHRzLnZhbHVlcygpOgorICAgICAgc2VsZi5fcHJvdG8udGFyZ2V0X3Jlc3VsdC5hcHBlbmQodGFyZ2V0X3Jlc3VsdCkKKyAgICBzb29uZ19tZXRyaWNzX3Byb3RvID0gbWV0cmljc19wYjIuTWV0cmljc0Jhc2UoKQorICAgICMgUmVhZCBpbiBleGlzdGluZyBtZXRyaWNzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiB3cml0dGVuIG91dCBieSB0aGUgc29vbmcKKyAgICAjIGJ1aWxkIGNvbW1hbmQgc28gdGhhdCB3ZSBkb24ndCBvdmVyd3JpdGUgdGhlbS4KKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG9zLmVudmlyb25bc2VsZi5fRElTVF9ESVJdLCBzZWxmLl9TT09OR19NRVRSSUNTX1BBVEgpLCAncmInKSBhcyBmOgorICAgICAgc29vbmdfbWV0cmljc19wcm90by5QYXJzZUZyb21TdHJpbmcoZi5yZWFkKCkpCisgICAgc29vbmdfbWV0cmljc19wcm90by5vcHRpbWl6ZWRfYnVpbGRfbWV0cmljcy5Db3B5RnJvbShzZWxmLl9wcm90bykKKyAgICBsb2dnaW5nLmluZm8oc29vbmdfbWV0cmljc19wcm90bykKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG9zLmVudmlyb25bc2VsZi5fRElTVF9ESVJdLCBzZWxmLl9TT09OR19NRVRSSUNTX1BBVEgpLCAnd2InKSBhcyBmOgorICAgICAgZi53cml0ZShzb29uZ19tZXRyaWNzX3Byb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCmRpZmYgLS1naXQgYS9jaS90ZXN0X2Rpc2NvdmVyeV9hZ2VudC5weSBiL2NpL3Rlc3RfZGlzY292ZXJ5X2FnZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOGVlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jaS90ZXN0X2Rpc2NvdmVyeV9hZ2VudC5weQpAQCAtMCwwICsxLDEyMCBAQAorIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiVGVzdCBkaXNjb3ZlcnkgYWdlbnQgdGhhdCB1c2VzIFRyYWRlRmVkIHRvIGRpc2NvdmVyIHRlc3QgYXJ0aWZhY3RzLiIiIgoraW1wb3J0IGdsb2IKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworCisKK2NsYXNzIFRlc3REaXNjb3ZlcnlBZ2VudDoKKyAgIiIiVGVzdCBkaXNjb3ZlcnkgYWdlbnQuIiIiCisKKyAgX1RSQURFRkVEX1BSRUJVSUxUX0pBUl9SRUxBVElWRV9QQVRIID0gKAorICAgICAgInZlbmRvci9nb29nbGVfdHJhZGVmZWRlcmF0aW9uL3ByZWJ1aWx0cy9maWxlZ3JvdXBzL2dvb2dsZS10cmFkZWZlZC8iCisgICkKKworICBfVFJBREVGRURfTk9fUE9TU0lCTEVfVEVTVF9ESVNDT1ZFUllfS0VZID0gIk5vUG9zc2libGVUZXN0RGlzY292ZXJ5IgorCisgIF9UUkFERUZFRF9URVNUX1pJUF9SRUdFWEVTX0xJU1RfS0VZID0gIlRlc3RaaXBSZWdleGVzIgorCisgIF9UUkFERUZFRF9ESVNDT1ZFUllfT1VUUFVUX0ZJTEVfTkFNRSA9ICJ0ZXN0X2Rpc2NvdmVyeV9hZ2VudC50eHQiCisKKyAgZGVmIF9faW5pdF9fKAorICAgICAgc2VsZiwKKyAgICAgIHRyYWRlZmVkX2FyZ3M6IGxpc3Rbc3RyXSwKKyAgICAgIHRlc3RfbWFwcGluZ196aXBfcGF0aDogc3RyID0gIiIsCisgICAgICB0cmFkZWZlZF9qYXJfcmV2ZWxhbnRfZmlsZXNfcGF0aDogc3RyID0gX1RSQURFRkVEX1BSRUJVSUxUX0pBUl9SRUxBVElWRV9QQVRILAorICApOgorICAgIHNlbGYudHJhZGVmZWRfYXJncyA9IHRyYWRlZmVkX2FyZ3MKKyAgICBzZWxmLnRlc3RfbWFwcGluZ196aXBfcGF0aCA9IHRlc3RfbWFwcGluZ196aXBfcGF0aAorICAgIHNlbGYudHJhZGVmZWRfamFyX3JlbGV2YW50X2ZpbGVzX3BhdGggPSB0cmFkZWZlZF9qYXJfcmV2ZWxhbnRfZmlsZXNfcGF0aAorCisgIGRlZiBkaXNjb3Zlcl90ZXN0X3ppcF9yZWdleGVzKHNlbGYpIC0+IGxpc3Rbc3RyXToKKyAgICAiIiJEaXNjb3ZlciB0ZXN0IHppcCByZWdleGVzIGZyb20gVHJhZGVGZWQuCisKKyAgICBSZXR1cm5zOgorICAgICAgQSBsaXN0IG9mIHRlc3QgemlwIHJlZ2V4ZXMgdGhhdCBURiBpcyBnb2luZyB0byB0cnkgdG8gcHVsbCBmaWxlcyBmcm9tLgorICAgICIiIgorICAgIHRlc3RfZGlzY292ZXJ5X291dHB1dF9maWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgIG9zLmVudmlyb24uZ2V0KCdUT1AnKSwgJ291dCcsIHNlbGYuX1RSQURFRkVEX0RJU0NPVkVSWV9PVVRQVVRfRklMRV9OQU1FCisgICAgKQorICAgIHdpdGggb3BlbigKKyAgICAgICAgdGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGVfbmFtZSwgbW9kZT0idyt0IgorICAgICkgYXMgdGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGU6CisgICAgICBqYXZhX2FyZ3MgPSBbXQorICAgICAgamF2YV9hcmdzLmFwcGVuZCgicHJlYnVpbHRzL2pkay9qZGsyMS9saW51eC14ODYvYmluL2phdmEiKQorICAgICAgamF2YV9hcmdzLmFwcGVuZCgiLWNwIikKKyAgICAgIGphdmFfYXJncy5hcHBlbmQoCisgICAgICAgICAgc2VsZi5jcmVhdGVfY2xhc3NwYXRoKHNlbGYudHJhZGVmZWRfamFyX3JlbGV2YW50X2ZpbGVzX3BhdGgpCisgICAgICApCisgICAgICBqYXZhX2FyZ3MuYXBwZW5kKAorICAgICAgICAgICJjb20uYW5kcm9pZC50cmFkZWZlZC5vYnNlcnZhdG9yeS5UZXN0WmlwRGlzY292ZXJ5RXhlY3V0b3IiCisgICAgICApCisgICAgICBqYXZhX2FyZ3MuZXh0ZW5kKHNlbGYudHJhZGVmZWRfYXJncykKKyAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICBlbnYudXBkYXRlKHsiRElTQ09WRVJZX09VVFBVVF9GSUxFIjogdGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGUubmFtZX0pCisgICAgICBsb2dnaW5nLmluZm8oZiJDYWxsaW5nIHRlc3QgZGlzY292ZXJ5IHdpdGggYXJnczoge2phdmFfYXJnc30iKQorICAgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihhcmdzPWphdmFfYXJncywgZW52PWVudiwgdGV4dD1UcnVlLCBjaGVjaz1UcnVlKQorICAgICAgICBsb2dnaW5nLmluZm8oZiJUZXN0IHppcCBkaXNjb3Zlcnkgb3V0cHV0OiB7cmVzdWx0LnN0ZG91dH0iKQorICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIHJhaXNlIFRlc3REaXNjb3ZlcnlFcnJvcigKKyAgICAgICAgICAgIGYiRmFpbGVkIHRvIHJ1biB0ZXN0IGRpc2NvdmVyeSwgc3Ryb3V0OiB7ZS5zdGRvdXR9LCBzdHJlcnI6IgorICAgICAgICAgICAgZiIge2Uuc3RkZXJyfSwgcmV0dXJuY29kZToge2UucmV0dXJuY29kZX0iCisgICAgICAgICkKKyAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHRlc3RfZGlzY292ZXJ5X291dHB1dF9maWxlLnJlYWQoKSkKKyAgICAgIGxvZ2dpbmcuaW5mbyhmIlRlc3QgZGlzY292ZXJ5IHJlc3VsdCBmaWxlIGNvbnRlbnQ6IHtkYXRhfSIpCisgICAgICBpZiAoCisgICAgICAgICAgc2VsZi5fVFJBREVGRURfTk9fUE9TU0lCTEVfVEVTVF9ESVNDT1ZFUllfS0VZIGluIGRhdGEKKyAgICAgICAgICBhbmQgZGF0YVtzZWxmLl9UUkFERUZFRF9OT19QT1NTSUJMRV9URVNUX0RJU0NPVkVSWV9LRVldCisgICAgICApOgorICAgICAgICByYWlzZSBUZXN0RGlzY292ZXJ5RXJyb3IoIk5vIHBvc3NpYmxlIHRlc3QgZGlzY292ZXJ5IikKKyAgICAgIGlmICgKKyAgICAgICAgICBkYXRhW3NlbGYuX1RSQURFRkVEX1RFU1RfWklQX1JFR0VYRVNfTElTVF9LRVldIGlzIE5vbmUKKyAgICAgICAgICBvciBkYXRhW3NlbGYuX1RSQURFRkVEX1RFU1RfWklQX1JFR0VYRVNfTElTVF9LRVldIGlzIFtdCisgICAgICApOgorICAgICAgICByYWlzZSBUZXN0RGlzY292ZXJ5RXJyb3IoIk5vIHRlc3QgemlwIHJlZ2V4ZXMgcmV0dXJuZWQiKQorICAgICAgcmV0dXJuIGRhdGFbc2VsZi5fVFJBREVGRURfVEVTVF9aSVBfUkVHRVhFU19MSVNUX0tFWV0KKworICBkZWYgZGlzY292ZXJfdGVzdF9tb2R1bGVzKHNlbGYpIC0+IGxpc3Rbc3RyXToKKyAgICAiIiJEaXNjb3ZlciB0ZXN0IG1vZHVsZXMgZnJvbSBUcmFkZUZlZC4KKworICAgIFJldHVybnM6CisgICAgICBBIGxpc3Qgb2YgdGVzdCBtb2R1bGVzIHRoYXQgVHJhZGVGZWQgaXMgZ29pbmcgdG8gZXhlY3V0ZSBiYXNlZCBvbiB0aGUKKyAgICAgIFRyYWRlRmVkIHRlc3QgYXJncy4KKyAgICAiIiIKKyAgICByZXR1cm4gW10KKworICBkZWYgY3JlYXRlX2NsYXNzcGF0aChzZWxmLCBkaXJlY3RvcnkpOgorICAgICIiIkNyZWF0ZXMgYSBjbGFzc3BhdGggc3RyaW5nIGZyb20gYWxsIC5qYXIgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKworICAgIEFyZ3M6CisgICAgICBkaXJlY3Rvcnk6IFRoZSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciAuamFyIGZpbGVzLgorCisgICAgUmV0dXJuczoKKyAgICAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY2xhc3NwYXRoLCB3aXRoIGphciBmaWxlcyBzZXBhcmF0ZWQgYnkgdGhlCisgICAgICBPUy1zcGVjaWZpYyBwYXRoIHNlcGFyYXRvciAoZS5nLiwgJzonIG9uIExpbnV4L21hY09TLCAnOycgb24gV2luZG93cykuCisgICAgIiIiCisgICAgamFyX2ZpbGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihkaXJlY3RvcnksICIqLmphciIpKQorICAgIHJldHVybiBvcy5wYXRoc2VwLmpvaW4oamFyX2ZpbGVzKQorCisKK2NsYXNzIFRlc3REaXNjb3ZlcnlFcnJvcihFeGNlcHRpb24pOgorICAiIiJBIFRlc3REaXNjb3ZlcnlFcnJvcmNsYXNzLiIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICBzdXBlcigpLl9faW5pdF9fKG1lc3NhZ2UpCisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQpkaWZmIC0tZ2l0IGEvY29nc2V0dXAuc2ggYi9jb2dzZXR1cC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2NGEwNi4uMDAwMDAwMAotLS0gYS9jb2dzZXR1cC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDIzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLSMgVGhpcyBmaWxlIGlzIGV4ZWN1dGVkIGJ5IGJ1aWxkL2VudnNldHVwLnNoLCBhbmQgY2FuIHVzZSBhbnl0aGluZwotIyBkZWZpbmVkIGluIGVudnNldHVwLnNoLgotZnVuY3Rpb24gX2NyZWF0ZV9vdXRfc3ltbGlua19mb3JfY29nKCkgewotICBpZiBbWyAiJHtPVVRfRElSfSIgPT0gIiIgXV07IHRoZW4KLSAgICBPVVRfRElSPSJvdXQiCi0gIGZpCi0KLSAgIyBnZXRvdXRkaXIgZW5zdXJlcyBwYXRocyBhcmUgYWJzb2x1dGUuIGVudnNldHVwIGNvdWxkIGJlIGNhbGxlZCBmcm9tIGEKLSAgIyBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUKLSAgbG9jYWwgb3V0ZGlyPSQoZ2V0b3V0ZGlyKQotICBpZiBbWyAtTCAiJHtvdXRkaXJ9IiBdXTsgdGhlbgotICAgIHJldHVybgotICBmaQotICBpZiBbIC1kICIke291dGRpcn0iIF07IHRoZW4KLSAgICBlY2hvIC1lICJcdE91dHB1dCBkaXJlY3RvcnkgJHtvdXRkaXJ9IGNhbm5vdCBiZSBwcmVzZW50IGluIGEgQ29nIHdvcmtzcGFjZS4iCi0gICAgZWNobyAtZSAiXHREZWxldGUgXCIke291dGRpcn1cIiBvciBjcmVhdGUgYSBzeW1saW5rIGZyb20gXCIke291dGRpcn1cIiB0byBhIGRpcmVjdG9yeSBvdXRzaWRlIHlvdXIgd29ya3NwYWNlLiIKLSAgICByZXR1cm4gMQotICBmaQotCi0gIERFRkFVTFRfT1VUUFVUX0RJUj0iJHtIT01FfS8uY29nL2FuZHJvaWQtYnVpbGQtb3V0IgotICBta2RpciAtcCAke0RFRkFVTFRfT1VUUFVUX0RJUn0KLSAgbG4gLXMgJHtERUZBVUxUX09VVFBVVF9ESVJ9ICR7b3V0ZGlyfQotfQotCi0jIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgdG8gYmUgYXBwcm9wcmlhdGUgZm9yIENvZy4KLWZ1bmN0aW9uIF9zZXR1cF9jb2dfZW52KCkgewotICBfY3JlYXRlX291dF9zeW1saW5rX2Zvcl9jb2cKLSAgaWYgWyAiJD8iIC1lcSAiMSIgXTsgdGhlbgotICAgIGVjaG8gLWUgIlxlWzA7MzNtV0FSTklORzpcZVswMG0gQ29nIGVudmlyb25tZW50IHNldHVwIGZhaWxlZCEiCi0gICAgcmV0dXJuIDEKLSAgZmkKLQotICBleHBvcnQgQU5EUk9JRF9CVUlMRF9FTlZJUk9OTUVOVF9DT05GSUc9Imdvb2dsZXItY29nIgotCi0gICMgUnVubmluZyByZXBvIGNvbW1hbmQgd2l0aGluIENvZyB3b3Jrc3BhY2VzIGlzIG5vdCBzdXBwb3J0ZWQsIHNvIG92ZXJyaWRlCi0gICMgaXQgd2l0aCB0aGlzIGZ1bmN0aW9uLiBJZiB0aGUgdXNlciBpcyBydW5uaW5nIHJlcG8gd2l0aGluIGEgQ29nIHdvcmtzcGFjZSwKLSAgIyB3ZSdsbCBmYWlsIHdpdGggYW4gZXJyb3IsIG90aGVyd2lzZSwgd2UgcnVuIHRoZSBvcmlnaW5hbCByZXBvIGNvbW1hbmQgd2l0aAotICAjIHRoZSBnaXZlbiBhcmdzLgotICBpZiAhIE9SSUdfUkVQT19QQVRIPWB3aGljaCByZXBvYDsgdGhlbgotICAgIHJldHVybiAwCi0gIGZpCi0gIGZ1bmN0aW9uIHJlcG8gewotICAgIGlmIFtbICIke1BXRH0iID09IC9nb29nbGUvY29nLyogXV07IHRoZW4KLSAgICAgIGVjaG8gLWUgIlxlWzAxOzMxbUVSUk9SOlxlWzBtcmVwbyBjb21tYW5kIGlzIGRpc2FsbG93ZWQgd2l0aGluIENvZyB3b3Jrc3BhY2VzLiIKLSAgICAgIHJldHVybiAxCi0gICAgZmkKLSAgICAke09SSUdfUkVQT19QQVRIfSAiJEAiCi0gIH0KLX0KLQotaWYgW1sgIiR7UFdEfSIgIT0gL2dvb2dsZS9jb2cvKiBdXTsgdGhlbgotICBlY2hvIC1lICJcZVswMTszMW1FUlJPUjpcZVswbSBUaGlzIHNjcmlwdCBtdXN0IGJlIHJ1biBmcm9tIGEgQ29nIHdvcmtzcGFjZS4iCi1maQotCi1fc2V0dXBfY29nX2VudgpkaWZmIC0tZ2l0IGEvY29yZS9CVUlMRC5iYXplbCBiL2NvcmUvQlVJTEQuYmF6ZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ODY5ZDQuLjAwMDAwMDAKLS0tIGEvY29yZS9CVUlMRC5iYXplbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDIzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQotCi0jIEV4cG9ydCB0cmFkZWZlZCB0ZW1wbGF0ZXMgZm9yIHRlc3RzLgotZXhwb3J0c19maWxlcygKLSAgICBnbG9iKFsiKi54bWwiXSksCi0pCi0KLSMgRXhwb3J0IHByb2d1YXJkIGZsYWcgZmlsZXMgZm9yIHI4LgotZmlsZWdyb3VwKAotICAgIG5hbWUgPSAiZ2xvYmFsX3Byb2d1YXJkX2ZsYWdzIiwKLSAgICBzcmNzID0gWwotICAgICAgICAicHJvZ3VhcmQuZmxhZ3MiLAotICAgICAgICAicHJvZ3VhcmRfYmFzaWNfa2VlcHMuZmxhZ3MiLAotICAgIF0sCi0gICAgdmlzaWJpbGl0eSA9IFsiLy92aXNpYmlsaXR5OnB1YmxpYyJdLAotKQpkaWZmIC0tZ2l0IGEvY29yZS9NYWtlZmlsZSBiL2NvcmUvTWFrZWZpbGUKaW5kZXggMmNkYjI0Zi4uZTEwNmRhZCAxMDA2NDQKLS0tIGEvY29yZS9NYWtlZmlsZQorKysgYi9jb3JlL01ha2VmaWxlCkBAIC0xOTIsNiArMTkyLDM0IEBACiB1bmlxdWVfcHJvZHVjdF9jb3B5X2ZpbGVzX3BhaXJzIDo9CiB1bmlxdWVfcHJvZHVjdF9jb3B5X2ZpbGVzX2Rlc3RpbmF0aW9ucyA6PQogCisKKyMgUmV0dXJucyBhIGxpc3Qgb2YgRVhUUkFfSU5TVEFMTF9aSVBTIHRyaW9zIHdob3NlIHByaW1hcnkgZmlsZSBpcyBjb250YWluZWQgd2l0aGluICQoMSkKKyMgVGhlIHRyaW9zIHdpbGwgY29udGFpbiB0aGUgcHJpbWFyeSBpbnN0YWxsZWQgZmlsZSA6IHRoZSBkaXJlY3RvcnkgdG8gdW56aXAgdGhlIHppcCB0byA6IHRoZSB6aXAKK2RlZmluZSByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMKKyQoc3RyaXAgJChmb3JlYWNoIHAsJChFWFRSQV9JTlNUQUxMX1pJUFMpLCBcCisgICQoaWYgJChmaWx0ZXIgJChjYWxsIHdvcmQtY29sb24sMSwkKHApKSwkKDEpKSwgXAorICAgICQocCkpKSkKK2VuZGVmCisKKyMgV3JpdGVzIGEgdGV4dCBmaWxlIHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBmaWxlcyB0aGF0IHdpbGwgYmUgaW5zaWRlIGEgcGFydGl0aW9uLgorIyBBbGwgdGhlIGZpbGUgcGF0aHMgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgcGFydGl0aW9uJ3Mgc3RhZ2luZyBkaXJlY3RvcnkuCisjIEl0IHdpbGwgYWxzbyB0YWtlIGludG8gYWNjb3VudCBmaWxlcyBpbnNpZGUgemlwcyBsaXN0ZWQgaW4gRVhUUkFfSU5TVEFMTF9aSVBTLgorIworIyBBcmd1bWVudHM6CisjICAgJCgxKTogT3V0cHV0IGZpbGUKKyMgICAkKDIpOiBUaGUgcGFydGl0aW9uJ3Mgc3RhZ2luZyBkaXJlY3RvcnkKKyMgICAkKDMpOiBGaWxlcyB0byBpbmNsdWRlIGluIHRoZSBwYXJ0aXRpb24KK2RlZmluZSB3cml0ZS1wYXJ0aXRpb24tZmlsZS1saXN0CiskKDEpOiBQUklWQVRFX0ZJTEVTIDo9ICQoc3Vic3QgJCgyKS8sLCQoZmlsdGVyICQoMikvJSwkKDMpKSkKKyQoMSk6IFBSSVZBVEVfRVhUUkFfSU5TVEFMTF9aSVBTIDo9ICQoY2FsbCByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMsJChmaWx0ZXIgJCgyKS8lLCQoMykpKQorJCgxKTogJCQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2V4dHJhX2luc3RhbGxfemlwc19maWxlX2xpc3QgJChmb3JlYWNoIHAsJChjYWxsIHJlbGV2YW50LWV4dHJhLWluc3RhbGwtemlwcywkKGZpbHRlciAkKDIpLyUsJCgzKSkpLCQoY2FsbCB3b3JkLWNvbG9uLDMsJChwKSkpCisJQGVjaG8gV3JpdGluZyAkJEAKKwlybSAtZiAkJEAKKwllY2hvIC1uID4gJCRACisJJCQoZm9yZWFjaCBmLCQkKFBSSVZBVEVfRklMRVMpLGVjaG8gIiQkKGYpIiA+PiAkJEAkJChuZXdsaW5lKSkKKwkkJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZXh0cmFfaW5zdGFsbF96aXBzX2ZpbGVfbGlzdCAkKDIpICQkKFBSSVZBVEVfRVhUUkFfSU5TVEFMTF9aSVBTKSA+PiAkJEAKK2VuZGVmCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgUmV0dXJucyB0aGUgbWF4IGFsbG93ZWQgc2l6ZSBmb3IgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGhhc2ggdmVyaWZpY2F0aW9uCiAjIChlLmcuLCBib290LmltZywgcmVjb3ZlcnkuaW1nLCBldGMpLgpAQCAtNjkyLDcgKzcyMCw3IEBACiAKIEJPQVJEX0tFUk5FTF9NT0RVTEVfRElSUyArPSB0b3AKIAotIyBEZWZhdWx0IHRvIG5vdCBnZW5lcmF0aW5nIG1vZHVsZXMuZGVwIGZvciBrZXJuZWwgbW9kdWxlcyBvbiBzeXN0ZW0KKyMgRGVmYXVsdCB0byBub3QgZ2VuZXJhdGluZyBtb2R1bGVzLmxvYWQgZm9yIGtlcm5lbCBtb2R1bGVzIG9uIHN5c3RlbQogIyBzaWRlLiBXZSBzaG91bGQgb25seSBsb2FkIHRoZXNlIG1vZHVsZXMgaWYgdGhleSBhcmUgZGVwZW5kZWQgYnkgdmVuZG9yCiAjIHNpZGUgbW9kdWxlcy4KIGlmZXEgKCQoQk9BUkRfU1lTVEVNX0tFUk5FTF9NT0RVTEVTX0xPQUQpLCkKQEAgLTg0NCw2ICs4NzIsNyBAQAogU09PTkdfQ09OVl9EQVRBIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHNvb25nX2NvbnZlcnNpb24pL3Nvb25nX2NvbnZfZGF0YQogJChTT09OR19DT05WX0RBVEEpOgogCUBybSAtZiAkQAorCUB0b3VjaCAkQCAjIFRoaXMgZmlsZSBtdXN0IGJlIHByZXNlbnQgZXZlbiBpZiBTT09OR19DT05WIGlzIGVtcHR5LgogCUAkKGZvcmVhY2ggcywkKFNPT05HX0NPTlYpLGVjaG8gIiQocyksJChTT09OR19DT05WLiQocykuVFlQRSksJChzb3J0ICQoU09PTkdfQ09OVi4kKHMpLlBST0JMRU1TKSksJChzb3J0ICQoZmlsdGVyLW91dCAkKFNPT05HX0FMUkVBRFlfQ09OViksJChTT09OR19DT05WLiQocykuREVQUykpKSwkKHNvcnQgJChTT09OR19DT05WLiQocykuTUFLRUZJTEVTKSksJChzb3J0ICQoU09PTkdfQ09OVi4kKHMpLklOU1RBTExFRCkpIiA+PiRAOykKIAogJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoU09PTkdfQ09OVl9EQVRBKSxidWlsZCkKQEAgLTk0MSwyNyArOTcwLDEyIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLlBIT05ZOiBldmVudC1sb2ctdGFncwotCi0jIFByb2R1Y2UgYW4gZXZlbnQgbG9ncyB0YWcgZmlsZSBmb3IgZXZlcnl0aGluZyB3ZSBrbm93IGFib3V0LCBpbiBvcmRlcgotIyB0byBwcm9wZXJseSBhbGxvY2F0ZSBudW1iZXJzLiAgVGhlbiBwcm9kdWNlIGEgZmlsZSB0aGF0J3MgZmlsdGVyZWQKLSMgZm9yIHdoYXQncyBnb2luZyB0byBiZSBpbnN0YWxsZWQuCi0KLWFsbF9ldmVudF9sb2dfdGFnc19maWxlIDo9ICQoVEFSR0VUX09VVF9DT01NT05fSU5URVJNRURJQVRFUykvYWxsLWV2ZW50LWxvZy10YWdzLnR4dAotCiBldmVudF9sb2dfdGFnc19maWxlIDo9ICQoVEFSR0VUX09VVCkvZXRjL2V2ZW50LWxvZy10YWdzCiAKICMgSW5jbHVkZSB0YWdzIGZyb20gYWxsIHBhY2thZ2VzIHRoYXQgd2Uga25vdyBhYm91dAogYWxsX2V2ZW50X2xvZ190YWdzX3NyYyA6PSBcCiAgICAgJChzb3J0ICQoZm9yZWFjaCBtLCAkKEFMTF9NT0RVTEVTKSwgJChBTExfTU9EVUxFUy4kKG0pLkVWRU5UX0xPR19UQUdTKSkpCiAKLSQoYWxsX2V2ZW50X2xvZ190YWdzX2ZpbGUpOiBQUklWQVRFX1NSQ19GSUxFUyA6PSAkKGFsbF9ldmVudF9sb2dfdGFnc19zcmMpCi0kKGFsbF9ldmVudF9sb2dfdGFnc19maWxlKTogJChhbGxfZXZlbnRfbG9nX3RhZ3Nfc3JjKSAkKE1FUkdFVEFHUykgYnVpbGQvbWFrZS90b29scy9ldmVudF9sb2dfdGFncy5weQotCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApCi0JJChoaWRlKSAkKE1FUkdFVEFHUykgLW8gJEAgJChQUklWQVRFX1NSQ19GSUxFUykKLQotJChjYWxsIGRlY2xhcmUtMHAtdGFyZ2V0LCQoYWxsX2V2ZW50X2xvZ190YWdzX2ZpbGUpKQotCiAjIEluY2x1ZGUgdGFncyBmcm9tIGFsbCBwYWNrYWdlcyBpbmNsdWRlZCBpbiB0aGlzIHByb2R1Y3QsIHBsdXMgYWxsCiAjIHRhZ3MgdGhhdCBhcmUgcGFydCBvZiB0aGUgc3lzdGVtIChpZSwgbm90IGluIGEgdmVuZG9yLyBvciBkZXZpY2UvCiAjIGRpcmVjdG9yeSkuCkBAIC05NzMsMTMgKzk4NywxMyBAQAogICAgICAgJChmaWx0ZXItb3V0IHZlbmRvci8lIGRldmljZS8lIG91dC8lLCQoYWxsX2V2ZW50X2xvZ190YWdzX3NyYykpKQogCiAkKGV2ZW50X2xvZ190YWdzX2ZpbGUpOiBQUklWQVRFX1NSQ19GSUxFUyA6PSAkKGV2ZW50X2xvZ190YWdzX3NyYykKLSQoZXZlbnRfbG9nX3RhZ3NfZmlsZSk6IFBSSVZBVEVfTUVSR0VEX0ZJTEUgOj0gJChhbGxfZXZlbnRfbG9nX3RhZ3NfZmlsZSkKLSQoZXZlbnRfbG9nX3RhZ3NfZmlsZSk6ICQoZXZlbnRfbG9nX3RhZ3Nfc3JjKSAkKGFsbF9ldmVudF9sb2dfdGFnc19maWxlKSAkKE1FUkdFVEFHUykgYnVpbGQvbWFrZS90b29scy9ldmVudF9sb2dfdGFncy5weQorJChldmVudF9sb2dfdGFnc19maWxlKTogJChldmVudF9sb2dfdGFnc19zcmMpICQoTUVSR0VUQUdTKQogCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApCi0JJChoaWRlKSAkKE1FUkdFVEFHUykgLW8gJEAgLW0gJChQUklWQVRFX01FUkdFRF9GSUxFKSAkKFBSSVZBVEVfU1JDX0ZJTEVTKQorCSQoaGlkZSkgJChNRVJHRVRBR1MpIC1vICRAICQoUFJJVkFURV9TUkNfRklMRVMpCiAKICQoZXZhbCAkKGNhbGwgZGVjbGFyZS0wcC10YXJnZXQsJChldmVudF9sb2dfdGFnc19maWxlKSkpCiAKKy5QSE9OWTogZXZlbnQtbG9nLXRhZ3MKIGV2ZW50LWxvZy10YWdzOiAkKGV2ZW50X2xvZ190YWdzX2ZpbGUpCiAKIEFMTF9ERUZBVUxUX0lOU1RBTExFRF9NT0RVTEVTICs9ICQoZXZlbnRfbG9nX3RhZ3NfZmlsZSkKQEAgLTEyNjcsNiArMTI4MSwxMCBAQAogCiBlbmRpZgogCisKK3JhbWRpc2tfaW50ZXJtZWRpYXRlcyA6PSQ9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHJhbWRpc2spCiskKGV2YWwgJChjYWxsIHdyaXRlLXBhcnRpdGlvbi1maWxlLWxpc3QsJChyYW1kaXNrX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQsJChUQVJHRVRfUkFNRElTS19PVVQpLCQoSU5URVJOQUxfUkFNRElTS19GSUxFUykpKQorCiAjIFRoZSB2YWx1ZSBvZiBSQU1ESVNLX05PREVfTElTVCBpcyBkZWZpbmVkIGluIHN5c3RlbS9jb3JlL3Jvb3RkaXIvQW5kcm9pZC5icC4KICMgVGhpcyBmaWxlIGNvbnRhaW5zIC9kZXYgbm9kZXMgZGVzY3JpcHRpb24gYWRkZWQgdG8gdGhlIGdlbmVyaWMgcmFtZGlzawogCkBAIC0xNTY0LDYgKzE1ODIsNyBAQAogCSQoQVZCVE9PTCkgYWRkX2hhc2hfZm9vdGVyIFwKICAgICAgICAgICAgLS1pbWFnZSAkQCBcCiAJICAgJChjYWxsIGdldC1wYXJ0aXRpb24tc2l6ZS1hcmd1bWVudCwkKEJPQVJEX0lOSVRfQk9PVF9JTUFHRV9QQVJUSVRJT05fU0laRSkpIFwKKwkgICAtLXNhbHQgJCQoc2hhMjU2c3VtICQoQlVJTERfTlVNQkVSX0ZJTEUpICQoQlVJTERfREFURVRJTUVfRklMRSkgfCBjdXQgLWQgIiAiIC1mIDEgfCB0ciAtZCAnXG4nKSBcCiAJICAgLS1wYXJ0aXRpb25fbmFtZSBpbml0X2Jvb3QgJChJTlRFUk5BTF9BVkJfSU5JVF9CT09UX1NJR05JTkdfQVJHUykgXAogCSAgICQoQk9BUkRfQVZCX0lOSVRfQk9PVF9BRERfSEFTSF9GT09URVJfQVJHUykKIApAQCAtMTYyMiw2ICsxNjQxLDggQEAKICAgICAkKEFMTF9ERUZBVUxUX0lOU1RBTExFRF9NT0RVTEVTKSkKIAogSU5URVJOQUxfVkVORE9SX1JBTURJU0tfVEFSR0VUIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHZlbmRvcl9ib290KS92ZW5kb3JfcmFtZGlzay5jcGlvJChSQU1ESVNLX0VYVCkKK3ZlbmRvcl9yYW1kaXNrX2ludGVybWVkaWF0ZXMgOj0kPSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyx2ZW5kb3JfcmFtZGlzaykKKyQoZXZhbCAkKGNhbGwgd3JpdGUtcGFydGl0aW9uLWZpbGUtbGlzdCwkKHZlbmRvcl9yYW1kaXNrX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQsJChUQVJHRVRfVkVORE9SX1JBTURJU0tfT1VUKSwkKElOVEVSTkFMX1ZFTkRPUl9SQU1ESVNLX0ZJTEVTKSkpCiAKICMgRXhjbHVkZSByZWNvdmVyeSBmaWxlcyBpbiB0aGUgZGVmYXVsdCB2ZW5kb3IgcmFtZGlzayBpZiBpbmNsdWRpbmcgYSBzdGFuZGFsb25lCiAjIHJlY292ZXJ5IHJhbWRpc2sgaW4gdmVuZG9yX2Jvb3QuCkBAIC0xNjc2LDEyICsxNjk3LDEzIEBACiAgIElOVEVSTkFMX1ZFTkRPUl9CT09USU1BR0VfQVJHUyArPSAtLXZlbmRvcl9jbWRsaW5lICIkKElOVEVSTkFMX0tFUk5FTF9DTURMSU5FKSIKIGVuZGlmCiAKLWlmZGVmIElOVEVSTkFMX0JPT1RDT05GSUcKK2lmbmVxICgsICQoSU5URVJOQUxfQk9PVENPTkZJRykkKElOVEVSTkFMX0JPT1RDT05GSUdfRklMRSkpCiAgIElOVEVSTkFMX1ZFTkRPUl9CT09UQ09ORklHX1RBUkdFVCA6PSAkKFBST0RVQ1RfT1VUKS92ZW5kb3ItYm9vdGNvbmZpZy5pbWcKICAgJChJTlRFUk5BTF9WRU5ET1JfQk9PVENPTkZJR19UQVJHRVQpOgogCXJtIC1mICRACiAJJChmb3JlYWNoIHBhcmFtLCQoSU5URVJOQUxfQk9PVENPTkZJRyksIFwKIAkgcHJpbnRmICIlc1xuIiAkKHBhcmFtKSA+PiAkQDspCisJY2F0ICQoSU5URVJOQUxfQk9PVENPTkZJR19GSUxFKSA+PiAkQAogICBJTlRFUk5BTF9WRU5ET1JfQk9PVElNQUdFX0FSR1MgKz0gLS12ZW5kb3JfYm9vdGNvbmZpZyAkKElOVEVSTkFMX1ZFTkRPUl9CT09UQ09ORklHX1RBUkdFVCkKIGVuZGlmCiAKQEAgLTE3MzYsNiArMTc1OCw3IEBACiAJJChBVkJUT09MKSBhZGRfaGFzaF9mb290ZXIgXAogICAgICAgICAgICAtLWltYWdlICRAIFwKIAkgICAkKGNhbGwgZ2V0LXBhcnRpdGlvbi1zaXplLWFyZ3VtZW50LCQoQk9BUkRfVkVORE9SX0JPT1RJTUFHRV9QQVJUSVRJT05fU0laRSkpIFwKKwkgICAtLXNhbHQgJCQoc2hhMjU2c3VtICQoQlVJTERfTlVNQkVSX0ZJTEUpICQoQlVJTERfREFURVRJTUVfRklMRSkgfCBjdXQgLWQgIiAiIC1mIDEgfCB0ciAtZCAnXG4nKSBcCiAJICAgLS1wYXJ0aXRpb25fbmFtZSB2ZW5kb3JfYm9vdCAkKElOVEVSTkFMX0FWQl9WRU5ET1JfQk9PVF9TSUdOSU5HX0FSR1MpIFwKIAkgICAkKEJPQVJEX0FWQl9WRU5ET1JfQk9PVF9BRERfSEFTSF9GT09URVJfQVJHUykKIGVsc2UKQEAgLTI2MjYsNyArMjY0OSw3IEBACiBUQVJHRVRfUFJJVkFURV9SRVNfRElSUyA6PSAkKHdpbGRjYXJkICQoVEFSR0VUX0RFVklDRV9ESVIpL3JlY292ZXJ5L3JlcykKIGVuZGlmCiByZWNvdmVyeV9yZXNvdXJjZV9kZXBzIDo9ICQoc2hlbGwgZmluZCAkKHJlY292ZXJ5X3Jlc291cmNlc19jb21tb24pIFwKLSAgJChUQVJHRVRfUFJJVkFURV9SRVNfRElSUykgLXR5cGUgZikKKyAgJChUQVJHRVRfUFJJVkFURV9SRVNfRElSUykgLXR5cGUgZiAtbm90IC1uYW1lICIqLmJwIikKIHJlY292ZXJ5X3Jlc291cmNlX2RlcHMgKz0gJChnZW5lcmF0ZWRfcmVjb3ZlcnlfdGV4dF9maWxlcykKIAogCkBAIC0yODk5LDYgKzI5MjIsOSBAQAogJChlcnJvciBNVEQgZGV2aWNlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYW5kIHRodXMgQk9BUkRfTkFORF9TUEFSRV9TSVpFIGlzIGRlcHJlY2F0ZWQuKQogZW5kaWYKIAorcmVjb3ZlcnlfaW50ZXJtZWRpYXRlcyA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyxyZWNvdmVyeSkKKyQoZXZhbCAkKGNhbGwgd3JpdGUtcGFydGl0aW9uLWZpbGUtbGlzdCwkKHJlY292ZXJ5X2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQsJChUQVJHRVRfUkVDT1ZFUllfT1VUKSwkKElOVEVSTkFMX1JFQ09WRVJZSU1BR0VfRklMRVMpKSkKKwogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEJ1aWxkIGRlYnVnIHJhbWRpc2sgYW5kIGRlYnVnIGJvb3QgaW1hZ2UuCkBAIC0zNDcxLDMxICszNDk3LDYgQEAKIAogRlVMTF9TWVNURU1JTUFHRV9ERVBTICs9ICQoSU5URVJOQUxfUk9PVF9GSUxFUykgJChJTlNUQUxMRURfRklMRVNfRklMRV9ST09UKQogCi0jIFJldHVybnMgYSBsaXN0IG9mIEVYVFJBX0lOU1RBTExfWklQUyB0cmlvcyB3aG9zZSBwcmltYXJ5IGZpbGUgaXMgY29udGFpbmVkIHdpdGhpbiAkKDEpCi0jIFRoZSB0cmlvcyB3aWxsIGNvbnRhaW4gdGhlIHByaW1hcnkgaW5zdGFsbGVkIGZpbGUgOiB0aGUgZGlyZWN0b3J5IHRvIHVuemlwIHRoZSB6aXAgdG8gOiB0aGUgemlwCi1kZWZpbmUgcmVsZXZhbnQtZXh0cmEtaW5zdGFsbC16aXBzCi0kKHN0cmlwICQoZm9yZWFjaCBwLCQoRVhUUkFfSU5TVEFMTF9aSVBTKSwgXAotICAkKGlmICQoZmlsdGVyICQoY2FsbCB3b3JkLWNvbG9uLDEsJChwKSksJCgxKSksIFwKLSAgICAkKHApKSkpCi1lbmRlZgotCi0jIFdyaXRlcyBhIHRleHQgZmlsZSB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgZmlsZXMgdGhhdCB3aWxsIGJlIGluc2lkZSBhIHBhcnRpdGlvbi4KLSMgQWxsIHRoZSBmaWxlIHBhdGhzIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIHBhcnRpdGlvbidzIHN0YWdpbmcgZGlyZWN0b3J5LgotIyBJdCB3aWxsIGFsc28gdGFrZSBpbnRvIGFjY291bnQgZmlsZXMgaW5zaWRlIHppcHMgbGlzdGVkIGluIEVYVFJBX0lOU1RBTExfWklQUy4KLSMKLSMgQXJndW1lbnRzOgotIyAgICQoMSk6IE91dHB1dCBmaWxlCi0jICAgJCgyKTogVGhlIHBhcnRpdGlvbidzIHN0YWdpbmcgZGlyZWN0b3J5Ci0jICAgJCgzKTogRmlsZXMgdG8gaW5jbHVkZSBpbiB0aGUgcGFydGl0aW9uCi1kZWZpbmUgd3JpdGUtcGFydGl0aW9uLWZpbGUtbGlzdAotJCgxKTogJCQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2V4dHJhX2luc3RhbGxfemlwc19maWxlX2xpc3QgJChmb3JlYWNoIHAsJChjYWxsIHJlbGV2YW50LWV4dHJhLWluc3RhbGwtemlwcywkKGZpbHRlciAkKDIpLyUsJCgzKSkpLCQoY2FsbCB3b3JkLWNvbG9uLDMsJChwKSkpCi0JQGVjaG8gV3JpdGluZyAkJEAKLQlybSAtZiAkJEAKLQllY2hvIC1uID4gJCRACi0JJCQoZm9yZWFjaCBmLCQoc3Vic3QgJCgyKS8sLCQoZmlsdGVyICQoMikvJSwkKDMpKSksZWNobyAiJCQoZikiID4+ICQkQCQkKG5ld2xpbmUpKQotCSQkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9leHRyYV9pbnN0YWxsX3ppcHNfZmlsZV9saXN0ICQoMikgJChjYWxsIHJlbGV2YW50LWV4dHJhLWluc3RhbGwtemlwcywkKGZpbHRlciAkKDIpLyUsJCgzKSkpID4+ICQkQAotZW5kZWYKLQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaWZkZWYgQlVJTERJTkdfU1lTVEVNX0lNQUdFCiAKQEAgLTM1NjcsMTQgKzM1NjgsMjQgQEAKIGZpbGVfbGlzdF9kaWZmIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2ZpbGVfbGlzdF9kaWZmJChIT1NUX0VYRUNVVEFCTEVfU1VGRklYKQogc3lzdGVtX2ZpbGVfZGlmZl90aW1lc3RhbXAgOj0gJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2RpZmYudGltZXN0YW1wCiAKKyMgVGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gYnVpbGQgdGhlIFJFTCB2ZXJzaW9uIG1heSBoYXZlIG1vcmUgZmlsZXMgdG8gYWxsb3cuCisjIFVzZSBhbGxvd2xpc3RfbmV4dCBpbiBhZGRpdGlvbiB0byB0aGUgYWxsb3dsaXN0IGluIHRoaXMgY2FzZS4KK3N5c3RlbV9maWxlX2RpZmZfYWxsb3dsaXN0X25leHQgOj0KK2lmZXEgKFJFTCwkKFBMQVRGT1JNX1ZFUlNJT05fQ09ERU5BTUUpKQorc3lzdGVtX2ZpbGVfZGlmZl9hbGxvd2xpc3RfbmV4dCA6PSAkKEFMTF9NT0RVTEVTLnN5c3RlbV9pbWFnZV9kaWZmX2FsbG93bGlzdF9uZXh0LklOU1RBTExFRCkKKyQoc3lzdGVtX2ZpbGVfZGlmZl90aW1lc3RhbXApOiBQUklWQVRFX0FMTE9XTElTVF9ORVhUIDo9ICQoc3lzdGVtX2ZpbGVfZGlmZl9hbGxvd2xpc3RfbmV4dCkKK2VuZGlmCiAkKHN5c3RlbV9maWxlX2RpZmZfdGltZXN0YW1wKTogXAogCSAgICAkKHN5c3RlbWltYWdlX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQgXAogCSAgICAkKEFMTF9NT0RVTEVTLiQoUFJPRFVDVF9TT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRSkuRklMRVNZU1RFTV9GSUxFTElTVCkgXAogCSAgICAkKEFMTF9NT0RVTEVTLnN5c3RlbV9pbWFnZV9kaWZmX2FsbG93bGlzdC5JTlNUQUxMRUQpIFwKKwkgICAgJChzeXN0ZW1fZmlsZV9kaWZmX2FsbG93bGlzdF9uZXh0KSBcCiAJICAgICQoZmlsZV9saXN0X2RpZmYpCiAJJChmaWxlX2xpc3RfZGlmZikgJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0IFwKIAkgICQoQUxMX01PRFVMRVMuJChQUk9EVUNUX1NPT05HX0RFRklORURfU1lTVEVNX0lNQUdFKS5GSUxFU1lTVEVNX0ZJTEVMSVNUKSBcCi0JICAkKEFMTF9NT0RVTEVTLnN5c3RlbV9pbWFnZV9kaWZmX2FsbG93bGlzdC5JTlNUQUxMRUQpICQoUFJPRFVDVF9TT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRSkKKwkgICQoUFJPRFVDVF9TT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRSkgXAorCSAgLS1hbGxvd2xpc3RzICQoQUxMX01PRFVMRVMuc3lzdGVtX2ltYWdlX2RpZmZfYWxsb3dsaXN0LklOU1RBTExFRCkgXAorCSAgJChQUklWQVRFX0FMTE9XTElTVF9ORVhUKQogCXRvdWNoICRACiAKICQoQlVJTFRfU1lTVEVNSU1BR0UpOiAkKHN5c3RlbV9maWxlX2RpZmZfdGltZXN0YW1wKQpAQCAtNDAwMCw2ICs0MDExLDIxIEBACiAgICAgJChmaWx0ZXIgJChUQVJHRVRfT1VUX1BST0RVQ1QpLyUsXAogICAgICAgJChBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUykpCiAKKyMgSW5zdGFsbCBwcm9kdWN0L2V0Yy9saW5rZXIuY29uZmlnLnBiIHdpdGggUFJPRFVDVF9QUk9EVUNUX0xJTktFUl9DT05GSUdfRlJBR01FTlRTCitwcm9kdWN0X2xpbmtlcl9jb25maWdfZmlsZSA6PSAkKFRBUkdFVF9PVVRfUFJPRFVDVCkvZXRjL2xpbmtlci5jb25maWcucGIKKyQocHJvZHVjdF9saW5rZXJfY29uZmlnX2ZpbGUpOiBwcml2YXRlX2xpbmtlcl9jb25maWdfZnJhZ21lbnRzIDo9ICQoUFJPRFVDVF9QUk9EVUNUX0xJTktFUl9DT05GSUdfRlJBR01FTlRTKQorJChwcm9kdWN0X2xpbmtlcl9jb25maWdfZmlsZSk6ICQoSU5URVJOQUxfUFJPRFVDVElNQUdFX0ZJTEVTKSB8ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2NvbnZfbGlua2VyX2NvbmZpZworCUBlY2hvIENyZWF0aW5nIGxpbmtlciBjb25maWc6ICRACisJQG1rZGlyIC1wICQoZGlyICRAKQorCUBybSAtZiAkQAorCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2NvbnZfbGlua2VyX2NvbmZpZyBwcm90byBcCisJCS0tc291cmNlICQoY2FsbCBub3JtYWxpemUtcGF0aC1saXN0LCQocHJpdmF0ZV9saW5rZXJfY29uZmlnX2ZyYWdtZW50cykpIFwKKwkJLS1vdXRwdXQgJEAKKyQoY2FsbCBkZWZpbmUgZGVjbGFyZS0xcC10YXJnZXQsJChwcm9kdWN0X2xpbmtlcl9jb25maWdfZmlsZSksKQorSU5URVJOQUxfUFJPRFVDVElNQUdFX0ZJTEVTICs9ICQocHJvZHVjdF9saW5rZXJfY29uZmlnX2ZpbGUpCitBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUyArPSAkKHByb2R1Y3RfbGlua2VyX2NvbmZpZ19maWxlKQorCisKIElOU1RBTExFRF9GSUxFU19GSUxFX1BST0RVQ1QgOj0gJChQUk9EVUNUX09VVCkvaW5zdGFsbGVkLWZpbGVzLXByb2R1Y3QudHh0CiBJTlNUQUxMRURfRklMRVNfSlNPTl9QUk9EVUNUIDo9ICQoSU5TVEFMTEVEX0ZJTEVTX0ZJTEVfUFJPRFVDVDoudHh0PS5qc29uKQogJChJTlNUQUxMRURfRklMRVNfRklMRV9QUk9EVUNUKTogLktBVElfSU1QTElDSVRfT1VUUFVUUyA6PSAkKElOU1RBTExFRF9GSUxFU19KU09OX1BST0RVQ1QpCkBAIC01MTM2LDYgKzUxNjIsOCBAQAogIyBSdW4gYXBleF9zZXBvbGljeV90ZXN0cyBmb3IgYWxsIGluc3RhbGxlZCBBUEVYZXMKIAogaWZlcSAoLCQoVEFSR0VUX0JVSUxEX1VOQlVORExFRCkpCisjIFRPRE8oYi8zNTM4OTY4MTcpIGFwZXhfc2Vwb2xpY3lfdGVzdHMgc3VwcG9ydHMgb25seSBleHQ0CitpZmVxIChleHQ0LCQoUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFKSkKIGludGVybWVkaWF0ZSA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyxhcGV4X3NlcG9saWN5X3Rlc3RzKQogYXBleF9kaXJzIDo9IFwKICAgJChUQVJHRVRfT1VUKS9hcGV4LyUgXApAQCAtNTE3NSw2ICs1MjAzLDcgQEAKIAogYXBleF9maWxlcyA6PQogaW50ZXJtZWRpYXRlIDo9CitlbmRpZiAjIFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRQogZW5kaWYgIyBUQVJHRVRfQlVJTERfVU5CVU5ETEVECiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUyNzAsNyArNTI5OSw3IEBACiAJICAtLWRpcm1hcCAvc3lzdGVtX2V4dDokKFRBUkdFVF9PVVRfU1lTVEVNX0VYVCkgXAogCSAgLS1kaXJtYXAgL3Byb2R1Y3Q6JChUQVJHRVRfT1VUX1BST0RVQ1QpIFwKIAkgIC0tZGlybWFwIC9hcGV4OiQoQVBFWF9PVVQpIFwKLQkgICQoVklOVEZfRlJBTUVXT1JLX01BTklGRVNUX0ZST1pFTl9ESVIpID4gJEAgMj4mMSApIHx8ICggY2F0ICRAICYmIGV4aXQgMSApCisJICBzeXN0ZW0vbGliaGlkbC92aW50ZmRhdGEvZnJvemVuID4gJEAgMj4mMSApIHx8ICggY2F0ICRAICYmIGV4aXQgMSApCiAKICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKHZpbnRmZm1fbG9nKSkKIApAQCAtNTY0Myw2ICs1NjcyLDcgQEAKICAgYnJvdGxpIFwKICAgYnNkaWZmIFwKICAgYnVpbGRfaW1hZ2UgXAorICBidWlsZF9taXhlZF9rZXJuZWxzX3JhbWRpc2tfaG9zdCBcCiAgIGJ1aWxkX3N1cGVyX2ltYWdlIFwKICAgYnVpbGRfdmVyaXR5X21ldGFkYXRhIFwKICAgYnVpbGRfdmVyaXR5X3RyZWUgXApAQCAtNjM1NSw2ICs2Mzg1LDEwIEBACiAgIGVuZGlmCiBlbmRpZgogCitpZmRlZiBCVUlMRElOR19WRU5ET1JfS0VSTkVMX0JPT1RfSU1BR0UKKyAgJChCVUlMVF9UQVJHRVRfRklMRVNfRElSKTogJChJTlRFUk5BTF9WRU5ET1JfS0VSTkVMX1JBTURJU0tfRklMRVMpCitlbmRpZgorCiBpZmRlZiBCVUlMRElOR19SRUNPVkVSWV9JTUFHRQogICAjIFRPRE8oYi8zMDQxNDQyOCk6IENhbid0IGRlcGVuZCBvbiBJTlRFUk5BTF9SRUNPVkVSWUlNQUdFX0ZJTEVTIGFsb25lIGxpa2Ugb3RoZXIKICAgIyBCVUlMVF9UQVJHRVRfRklMRVNfUEFDS0FHRSBkZXBlbmRlbmNpZXMgYmVjYXVzZSBjdXJyZW50bHkgdGhlcmUncmUgY3AvcnN5bmMvcm0KQEAgLTc5NDgsMTEgKzc5ODIsMTYgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBEZXNrdG9wIHBhY2sgcmVjb3ZlcnkgaW1hZ2UgaG9vay4KLWlmbmVxICgsJChzdHJpcCAkKFBBQ0tfREVTS1RPUF9SRUNPVkVSWV9JTUFHRSkpKQoraWZlcSAoJChCT0FSRF9VU0VTX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UpLHRydWUpCiBQQUNLX1JFQ09WRVJZX0lNQUdFX1RBUkdFVCA6PSAkKFBST0RVQ1RfT1VUKS9hbmRyb2lkLWRlc2t0b3BfcmVjb3ZlcnlfaW1hZ2UuYmluCitQQUNLX1JFQ09WRVJZX0lNQUdFX0FSR1MgOj0gLS1ub2FyY2hpdmUgLS1yZWNvdmVyeQorCitpZm5lcSAoLCQoc3RyaXAgJChQQUNLX1JFQ09WRVJZX0lNQUdFX0VYUEVSSU1FTlRBTCkpKQorUEFDS19SRUNPVkVSWV9JTUFHRV9BUkdTICs9IC0tZXhwZXJpbWVudGFsCitlbmRpZiAjIFBBQ0tfUkVDT1ZFUllfSU1BR0VfRVhQRVJJTUVOVEFMCiAKICQoUEFDS19SRUNPVkVSWV9JTUFHRV9UQVJHRVQpOiAkKElNQUdFUykgJChQQUNLX0lNQUdFX1NDUklQVCkKLQkkKFBBQ0tfSU1BR0VfU0NSSVBUKSAtLW91dF9kaXIgJChQUk9EVUNUX09VVCkgLS1ub2FyY2hpdmUgLS1yZWNvdmVyeQorCSQoUEFDS19JTUFHRV9TQ1JJUFQpIC0tb3V0X2RpciAkKFBST0RVQ1RfT1VUKSAkKFBBQ0tfUkVDT1ZFUllfSU1BR0VfQVJHUykKIAogUEFDS0VEX1JFQ09WRVJZX0lNQUdFX0FSQ0hJVkVfVEFSR0VUIDo9ICQoUEFDS19SRUNPVkVSWV9JTUFHRV9UQVJHRVQpLmd6CiAKQEAgLTc5NjQsMTUgKzgwMDMsMjAgQEAKIC5QSE9OWTogcGFjay1yZWNvdmVyeS1pbWFnZQogcGFjay1yZWNvdmVyeS1pbWFnZTogJChQQUNLX1JFQ09WRVJZX0lNQUdFX1RBUkdFVCkKIAotZW5kaWYgIyBQQUNLX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UKK2VuZGlmICMgQk9BUkRfVVNFU19ERVNLVE9QX1JFQ09WRVJZX0lNQUdFCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRGVza3RvcCBwYWNrIHVwZGF0ZSBpbWFnZSBob29rLgotaWZuZXEgKCwkKHN0cmlwICQoUEFDS19ERVNLVE9QX1VQREFURV9JTUFHRSkpKQoraWZlcSAoJChCT0FSRF9VU0VTX0RFU0tUT1BfVVBEQVRFX0lNQUdFKSx0cnVlKQogUEFDS19VUERBVEVfSU1BR0VfVEFSR0VUIDo9ICQoUFJPRFVDVF9PVVQpL2FuZHJvaWQtZGVza3RvcF91cGRhdGVfaW1hZ2UuYmluCitQQUNLX1VQREFURV9JTUFHRV9BUkdTIDo9IC0tbm9hcmNoaXZlIC0tdXBkYXRlCisKK2lmbmVxICgsJChzdHJpcCAkKFBBQ0tfVVBEQVRFX0lNQUdFX0VYUEVSSU1FTlRBTCkpKQorUEFDS19VUERBVEVfSU1BR0VfQVJHUyArPSAtLWV4cGVyaW1lbnRhbAorZW5kaWYgIyBQQUNLX1VQREFURV9JTUFHRV9FWFBFUklNRU5UQUwKIAogJChQQUNLX1VQREFURV9JTUFHRV9UQVJHRVQpOiAkKElNQUdFUykgJChQQUNLX0lNQUdFX1NDUklQVCkKLQkkKFBBQ0tfSU1BR0VfU0NSSVBUKSAtLW91dF9kaXIgJChQUk9EVUNUX09VVCkgLS1ub2FyY2hpdmUgLS11cGRhdGUKKwkkKFBBQ0tfSU1BR0VfU0NSSVBUKSAtLW91dF9kaXIgJChQUk9EVUNUX09VVCkgJChQQUNLX1VQREFURV9JTUFHRV9BUkdTKQogCiBQQUNLRURfVVBEQVRFX0lNQUdFX0FSQ0hJVkVfVEFSR0VUIDo9ICQoUEFDS19VUERBVEVfSU1BR0VfVEFSR0VUKS5negogCkBAIC03OTg0LDcgKzgwMjgsMjkgQEAKIC5QSE9OWTogcGFjay11cGRhdGUtaW1hZ2UKIHBhY2stdXBkYXRlLWltYWdlOiAkKFBBQ0tfVVBEQVRFX0lNQUdFX1RBUkdFVCkKIAotZW5kaWYgIyBQQUNLX0RFU0tUT1BfVVBEQVRFX0lNQUdFCitlbmRpZiAjIEJPQVJEX1VTRVNfREVTS1RPUF9VUERBVEVfSU1BR0UKKworUEFDS19NSUdSQVRJT05fSU1BR0VfU0NSSVBUIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3BhY2tfbWlncmF0aW9uX2ltYWdlCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVza3RvcCBwYWNrIG1pZ3JhdGlvbiBpbWFnZSBob29rLgoraWZlcSAoJChBTkRST0lEX0RFU0tUT1BfTUlHUkFUSU9OX0lNQUdFKSx0cnVlKQorUEFDS19NSUdSQVRJT05fSU1BR0VfVEFSR0VUIDo9ICQoUFJPRFVDVF9PVVQpL2FuZHJvaWQtZGVza3RvcF9taWdyYXRpb25faW1hZ2UuYmluCisKKyQoUEFDS19NSUdSQVRJT05fSU1BR0VfVEFSR0VUKTogJChJTUFHRVMpICQoUEFDS19NSUdSQVRJT05fSU1BR0VfU0NSSVBUKQorCSQoUEFDS19NSUdSQVRJT05fSU1BR0VfU0NSSVBUKSAtLW91dF9kaXIgJChQUk9EVUNUX09VVCkgLS1ub2FyY2hpdmUKKworUEFDS0VEX01JR1JBVElPTl9JTUFHRV9BUkNISVZFX1RBUkdFVCA6PSAkKFBBQ0tfTUlHUkFUSU9OX0lNQUdFX1RBUkdFVCkuZ3oKKworJChQQUNLRURfTUlHUkFUSU9OX0lNQUdFX0FSQ0hJVkVfVEFSR0VUKTogJChQQUNLX01JR1JBVElPTl9JTUFHRV9UQVJHRVQpIHwgJChHWklQKQorCSQoR1pJUCkgLWZrICQoUEFDS19NSUdSQVRJT05fSU1BR0VfVEFSR0VUKQorCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsZGlzdF9maWxlcywkKFBBQ0tFRF9NSUdSQVRJT05fSU1BR0VfQVJDSElWRV9UQVJHRVQpKQorCisuUEhPTlk6IHBhY2stbWlncmF0aW9uLWltYWdlCitwYWNrLW1pZ3JhdGlvbi1pbWFnZTogJChQQUNLX01JR1JBVElPTl9JTUFHRV9UQVJHRVQpCisKK2VuZGlmICMgQU5EUk9JRF9ERVNLVE9QX01JR1JBVElPTl9JTUFHRQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIE9TIExpY2Vuc2luZwpkaWZmIC0tZ2l0IGEvY29yZS9hbmRyb2lkX3Nvb25nX2NvbmZpZ192YXJzLm1rIGIvY29yZS9hbmRyb2lkX3Nvb25nX2NvbmZpZ192YXJzLm1rCmluZGV4IDc1ZTlmNzcuLjhlNzA1NzAgMTAwNjQ0Ci0tLSBhL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5taworKysgYi9jb3JlL2FuZHJvaWRfc29vbmdfY29uZmlnX3ZhcnMubWsKQEAgLTMwLDEyICszMCwyOSBAQAogJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVCwkKEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVCkpCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLEFORFJPSUQsQk9BUkRfTU9WRV9HU0lfQVZCX0tFWVNfVE9fVkVORE9SX0JPT1QsJChCT0FSRF9NT1ZFX0dTSV9BVkJfS0VZU19UT19WRU5ET1JfQk9PVCkpCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxDSEVDS19ERVZfVFlQRV9WSU9MQVRJT05TKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELEhBU19CT0FSRF9TWVNURU1fRVhUX1BSRUJVSUxUX0RJUiwkKGlmICQoQk9BUkRfU1lTVEVNX0VYVF9QUkVCVUlMVF9ESVIpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELEhBU19CT0FSRF9QUk9EVUNUX1BSRUJVSUxUX0RJUiwkKGlmICQoQk9BUkRfUFJPRFVDVF9QUkVCVUlMVF9ESVIpLHRydWUsZmFsc2UpKQogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsUExBVEZPUk1fU0VQT0xJQ1lfVkVSU0lPTikKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELFBMQVRGT1JNX1NFUE9MSUNZX0NPTVBBVF9WRVJTSU9OUykKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELFBST0RVQ1RfSU5TVEFMTF9ERUJVR19QT0xJQ1lfVE9fU1lTVEVNX0VYVCkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsQU5EUk9JRCxSRUxFQVNFX0JPQVJEX0FQSV9MRVZFTF9GUk9aRU4sJChSRUxFQVNFX0JPQVJEX0FQSV9MRVZFTF9GUk9aRU4pKQogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsVEFSR0VUX0RZTkFNSUNfNjRfMzJfRFJNU0VSVkVSKQogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsVEFSR0VUX0VOQUJMRV9NRURJQURSTV82NCkKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELFRBUkdFVF9EWU5BTUlDXzY0XzMyX01FRElBU0VSVkVSKQorJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsQk9BUkRfR0VORlNfTEFCRUxTX1ZFUlNJT04pCisKKyQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELEFERElUSU9OQUxfTTRERUZTLCQoaWYgJChCT0FSRF9TRVBPTElDWV9NNERFRlMpLCQoYWRkcHJlZml4IC1ELCQoQk9BUkRfU0VQT0xJQ1lfTTRERUZTKSkpKQorCisjIEZvciBib290YWJsZS9yZWNvdmVyeQorUkVDT1ZFUllfQVBJX1ZFUlNJT04gOj0gMworUkVDT1ZFUllfRlNUQUJfVkVSU0lPTiA6PSAyCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCwgcmVjb3ZlcnksIHJlY292ZXJ5X2FwaV92ZXJzaW9uLCAkKFJFQ09WRVJZX0FQSV9WRVJTSU9OKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0LCByZWNvdmVyeSwgcmVjb3ZlcnlfZnN0YWJfdmVyc2lvbiwgJChSRUNPVkVSWV9GU1RBQl9WRVJTSU9OKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsIHJlY292ZXJ5ICx0YXJnZXRfdXNlcmltYWdlc191c2VfZjJmcyAsJChpZiAkKFRBUkdFVF9VU0VSSU1BR0VTX1VTRV9GMkZTKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsIHJlY292ZXJ5ICxoYXNfYm9hcmRfY2FjaGVpbWFnZV9wYXJ0aXRpb25fc2l6ZSAsJChpZiAkKEJPQVJEX0NBQ0hFSU1BR0VfUEFSVElUSU9OX1NJWkUpLHRydWUsZmFsc2UpKQoraWZkZWYgVEFSR0VUX1JFQ09WRVJZX1VJX0xJQgorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9zdHJpbmdfbGlzdCwgcmVjb3ZlcnksIHRhcmdldF9yZWNvdmVyeV91aV9saWIsICQoVEFSR0VUX1JFQ09WRVJZX1VJX0xJQikpCitlbmRpZgogCiAjIEZvciBTYW5pdGl6ZXJzCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLEFORFJPSUQsQVNBTl9FTkFCTEVELCQoaWYgJChmaWx0ZXIgYWRkcmVzcywkKFNBTklUSVpFX1RBUkdFVCkpLHRydWUsZmFsc2UpKQpAQCAtNjAsNiArNzcsMTEgQEAKICMgVGhlIGRlZmF1bHQgdmFsdWUgb2YgQVJUX0JVSUxEX0hPU1RfREVCVUcgaXMgdHJ1ZQogJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxhcnRfbW9kdWxlLGFydF9idWlsZF9ob3N0X2RlYnVnLCQoaWYgJChmaWx0ZXIgZmFsc2UsJChBUlRfQlVJTERfSE9TVF9ERUJVRykpLGZhbHNlLHRydWUpKQogCisjIEZvciBjaHJlCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGNocmUsY2hyZV9kYWVtb25fbGFtYV9lbmFibGVkLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKENIUkVfREFFTU9OX0xQTUFfRU5BQkxFRCkpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxjaHJlLGNocmVfZGVkaWNhdGVkX3RyYW5zcG9ydF9jaGFubmVsX2VuYWJsZWQsJChpZiAkKGZpbHRlciB0cnVlLCQoQ0hSRV9ERURJQ0FURURfVFJBTlNQT1JUX0NIQU5ORUxfRU5BQkxFRCkpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxjaHJlLGNocmVfbG9nX2F0b21fZXh0ZW5zaW9uX2VuYWJsZWQsJChpZiAkKGZpbHRlciB0cnVlLCQoQ0hSRV9MT0dfQVRPTV9FWFRFTlNJT05fRU5BQkxFRCkpLHRydWUsZmFsc2UpKQorCiBpZmRlZiBUQVJHRVRfQk9BUkRfQVVUTwogICAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXJfdmFsdWUsIEFORFJPSUQsIHRhcmdldF9ib2FyZF9hdXRvLCAkKFRBUkdFVF9CT0FSRF9BVVRPKSkKIGVuZGlmCkBAIC05MSw2ICsxMTMsMTAgQEAKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3Zhcl92YWx1ZSxBTkRST0lELGF2Zl9taWNyb2Ryb2lkX2d1ZXN0X2draV92ZXJzaW9uLCQoUFJPRFVDVF9BVkZfTUlDUk9EUk9JRF9HVUVTVF9HS0lfVkVSU0lPTikpCiBlbmRpZgogCitpZmRlZiBUQVJHRVRfQk9PVFNfMTZLCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLEFORFJPSUQsdGFyZ2V0X2Jvb3RzXzE2aywkKGZpbHRlciB0cnVlLCQoVEFSR0VUX0JPT1RTXzE2SykpKQorZW5kaWYKKwogaWZkZWYgUFJPRFVDVF9NRU1DR19WMl9GT1JDRV9FTkFCTEVECiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXJfdmFsdWUsQU5EUk9JRCxtZW1jZ192Ml9mb3JjZV9lbmFibGVkLCQoUFJPRFVDVF9NRU1DR19WMl9GT1JDRV9FTkFCTEVEKSkKIGVuZGlmCkBAIC0xODcsMyArMjEzLDcyIEBACiAKICMgQWRkIHVzZV9jYW1lcmFfdjRsMl9oYWwgZmxhZyBmb3IgaGFyZHdhcmUvbGliaGFyZHdhcmUvbW9kdWxlcy9jYW1lcmEvM180OmNhbWVyYS52NGwyCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGNhbWVyYSx1c2VfY2FtZXJhX3Y0bDJfaGFsLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKFVTRV9DQU1FUkFfVjRMMl9IQUwpKSx0cnVlLGZhbHNlKSkKKworIyBBZGQgYXVkaW9zZXJ2ZXJfbXVsdGlsaWIgZmxhZyBmb3IgaGFyZHdhcmUvaW50ZXJmYWNlcy9zb3VuZHRyaWdnZXIvMi4wL2RlZmF1bHQ6YW5kcm9pZC5oYXJkd2FyZS5zb3VuZHRyaWdnZXJAMi4wLWltcGwKK2lmbmVxICgkKHN0cmlwICQoQVVESU9TRVJWRVJfTVVMVElMSUIpKSwpCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0LHNvdW5kdHJpZ2dlcixhdWRpb3NlcnZlcl9tdWx0aWxpYiwkKEFVRElPU0VSVkVSX01VTFRJTElCKSkKK2VuZGlmCisKKyMgQWRkIHNpbV9jb3VudCwgZGlzYWJsZV9yaWxkX29lbV9ob29rLCBhbmQgdXNlX2Fvc3BfcmlsZCBmbGFnIGZvciByaWwgcmVsYXRlZCBtb2R1bGVzCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCxyaWwsc2ltX2NvdW50LCQoU0lNX0NPVU5UKSkKK2lmbmVxICgkKERJU0FCTEVfUklMRF9PRU1fSE9PSyksIGZhbHNlKQorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHJpbCxkaXNhYmxlX3JpbGRfb2VtX2hvb2ssdHJ1ZSkKK2VuZGlmCitpZm5lcSAoJChFTkFCTEVfVkVORE9SX1JJTF9TRVJWSUNFKSwgdHJ1ZSkKKyAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxyaWwsdXNlX2Fvc3BfcmlsZCx0cnVlKQorZW5kaWYKKworIyBFeHBvcnQgdGFyZ2V0X2JvYXJkX3BsYXRmb3JtIHRvIHNvb25nIGZvciBoYXJkd2FyZS9nb29nbGUvZ3JhcGhpY3MvY29tbW9uL2xpYm1lbXRyYWNrOm1lbXRyYWNrLiQoVEFSR0VUX0JPQVJEX1BMQVRGT1JNKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsQU5EUk9JRCx0YXJnZXRfYm9hcmRfcGxhdGZvcm0sJChUQVJHRVRfQk9BUkRfUExBVEZPUk0pKQorCisjIEV4cG9ydCBib2FyZF91c2VzX3NjYWxlcl9tMm0xc2hvdCBhbmQgYm9hcmRfdXNlc19hbGlnbl9yZXN0cmljdGlvbiB0byBzb29uZyBmb3IgaGFyZHdhcmUvZ29vZ2xlL2dyYXBoaWNzL2NvbW1vbi9saWJzY2FsZXI6bGliZXh5bm9zc2NhbGVyCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxib2FyZF91c2VzX3NjYWxlcl9tMm0xc2hvdCwkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX1NDQUxFUl9NMk0xU0hPVCkpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsYm9hcmRfdXNlc19hbGlnbl9yZXN0cmljdGlvbiwkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX0FMSUdOX1JFU1RSSUNUSU9OKSksdHJ1ZSxmYWxzZSkpCisKKyMgRXhwb3J0IHJlbGF0ZWQgdmFyaWFibGVzIHRvIHNvb25nIGZvciBoYXJkd2FyZS9nb29nbGUvZ3JhcGhpY3MvY29tbW9uL2xpYmFjcnlsOmxpYmFjcnlsCitpZmRlZiBCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX0NPTVBPU0lUT1IKKyAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsYWNyeWwsbGliYWNyeWxfZGVmYXVsdF9jb21wb3NpdG9yLCQoQk9BUkRfTElCQUNSWUxfREVGQVVMVF9DT01QT1NJVE9SKSkKK2VuZGlmCitpZmRlZiBCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX1NDQUxFUgorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxhY3J5bCxsaWJhY3J5bF9kZWZhdWx0X3NjYWxlciwkKEJPQVJEX0xJQkFDUllMX0RFRkFVTFRfU0NBTEVSKSkKK2VuZGlmCitpZmRlZiBCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX0JMVEVSCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0LGFjcnlsLGxpYmFjcnlsX2RlZmF1bHRfYmx0ZXIsJChCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX0JMVEVSKSkKK2VuZGlmCitpZmRlZiBCT0FSRF9MSUJBQ1JZTF9HMkRfSERSX1BMVUdJTgorICAjQk9BUkRfTElCQUNSWUxfRzJEX0hEUl9QTFVHSU4gaXMgc2V0IGluIGVhY2ggYm9hcmQgY29uZmlnCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsYWNyeWwsbGliYWNyeWxfdXNlX2cyZF9oZHJfcGx1Z2luLHRydWUpCitlbmRpZgorCisjIEV4cG9ydCByZWxhdGVkIHZhcmlhYmxlcyB0byBzb29uZyBmb3IgaGFyZHdhcmUvZ29vZ2xlL2dyYXBoaWNzL2NvbW1vbi9Cb2FyZENvbmZpZ0NGbGFncy5taworJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsaHdjX25vX3N1cHBvcnRfc2tpcF92YWxpZGF0ZSwkKGlmICQoZmlsdGVyIHRydWUsJChIV0NfTk9fU1VQUE9SVF9TS0lQX1ZBTElEQVRFKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxod2Nfc3VwcG9ydF9jb2xvcl90cmFuc2Zvcm0sJChpZiAkKGZpbHRlciB0cnVlLCQoSFdDX1NVUFBPUlRfQ09MT1JfVFJBTlNGT1JNKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxod2Nfc3VwcG9ydF9yZW5kZXJfaW50ZW50LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEhXQ19TVVBQT1JUX1JFTkRFUl9JTlRFTlQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfdmlydHVhbF9kaXNwbGF5LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfVklSVFVBTF9ESVNQTEFZKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxib2FyZF91c2VzX2R0LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfRFQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfZGVjb25fNjRiaXRfYWRkcmVzcywkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX0RFQ09OXzY0QklUX0FERFJFU1MpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfaGRydWlfZ2xlc19jb252ZXJzaW9uLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfSERSVUlfR0xFU19DT05WRVJTSU9OKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyx1c2VzX2lkaXNwbGF5X2ludGZfc2VjLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKFVTRVNfSURJU1BMQVlfSU5URl9TRUMpKSx0cnVlLGZhbHNlKSkKKworIyBWYXJpYWJsZXMgZm9yIGZzX2NvbmZpZworJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxmc19jb25maWcsdmVuZG9yLCQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUklNQUdFKSQoQk9BUkRfVkVORE9SSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGZzX2NvbmZpZyxvZW0sJChpZiAkKEJPQVJEX1VTRVNfT0VNSU1BR0UpJChCT0FSRF9PRU1JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZnNfY29uZmlnLG9kbSwkKGlmICQoQk9BUkRfVVNFU19PRE1JTUFHRSkkKEJPQVJEX09ETUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxmc19jb25maWcsdmVuZG9yX2Rsa20sJChpZiAkKEJPQVJEX1VTRVNfVkVORE9SX0RMS01JTUFHRSkkKEJPQVJEX1ZFTkRPUl9ETEtNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGZzX2NvbmZpZyxvZG1fZGxrbSwkKGlmICQoQk9BUkRfVVNFU19PRE1fRExLTUlNQUdFKSQoQk9BUkRfT0RNX0RMS01JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZnNfY29uZmlnLHN5c3RlbV9kbGttLCQoaWYgJChCT0FSRF9VU0VTX1NZU1RFTV9ETEtNSU1BR0UpJChCT0FSRF9TWVNURU1fRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHRydWUsZmFsc2UpKQorCisjIFZhcmlhYmxlcyBmb3IgdGVsZXBob255CiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHRlbGVwaG9ueSxzZWNfY3Bfc2VjdXJlX2Jvb3QsJChpZiAkKGZpbHRlciB0cnVlLCQoU0VDX0NQX1NFQ1VSRV9CT09UKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHRlbGVwaG9ueSxjYmRfcHJvdG9jb2xfc2l0LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKENCRF9QUk9UT0NPTF9TSVQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsdGVsZXBob255LHVzZV9yYWRpb2V4dGVybmFsX2hhbF9haWRsLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKFVTRV9SQURJT0VYVEVSTkFMX0hBTF9BSURMKSksdHJ1ZSxmYWxzZSkpCisKKyMgVmFyaWFibGVzIGZvciBod2NvbXBvc2VyLiQoVEFSR0VUX0JPQVJEX1BMQVRGT1JNKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsYm9hcmRfdXNlc19od2Nfc2VydmljZXMsJChpZiAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19IV0NfU0VSVklDRVMpKSx0cnVlLGZhbHNlKSkKKworIyBWYXJpYWJsZXMgZm9yIGNvbnRyb2xsaW5nIGFuZHJvaWQuaGFyZHdhcmUuY29tcG9zZXIuaHdjMy1zZXJ2aWNlLnBpeGVsCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCxnb29nbGVfZ3JhcGhpY3MsYm9hcmRfaHdjX3ZlcnNpb24sJChCT0FSRF9IV0NfVkVSU0lPTikpCisKKyMgVmFyaWFibGVzIGZvciBleHRyYSBicmFuY2hlcworIyBUT0RPKGIvMzgzMjM4Mzk3KTogVXNlIGJvb3RzdHJhcF9nb19wYWNrYWdlIHRvIGVuYWJsZSBleHRyYSBmbGFncy4KKy1pbmNsdWRlIHZlbmRvci9nb29nbGUvYnVpbGQvZXh0cmFfc29vbmdfY29uZmlnX3ZhcnMubWsKZGlmZiAtLWdpdCBhL2NvcmUvYmluYXJ5Lm1rIGIvY29yZS9iaW5hcnkubWsKaW5kZXggMWU5OGJjMC4uZWE4NjJiZSAxMDA2NDQKLS0tIGEvY29yZS9iaW5hcnkubWsKKysrIGIvY29yZS9iaW5hcnkubWsKQEAgLTE3NCw3ICsxNzQsNyBAQAogZW5kaWYKIGVuZGlmCiAKLW15X25ka19zeXNyb290X2luY2x1ZGUgOj0KK215X25ka19zeXNyb290IDo9CiBteV9uZGtfc3lzcm9vdF9saWIgOj0KIG15X2FwaV9sZXZlbCA6PSAxMDAwMAogCkBAIC0yMDcsMTEgKzIwNyw5IEBACiAKICAgbXlfYnVpbHRfbmRrIDo9ICQoU09PTkdfT1VUX0RJUikvbmRrCiAgIG15X25ka190cmlwbGUgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX05ES19UUklQTEUpCi0gIG15X25ka19zeXNyb290X2luY2x1ZGUgOj0gXAotICAgICAgJChteV9idWlsdF9uZGspL3N5c3Jvb3QvdXNyL2luY2x1ZGUgXAotICAgICAgJChteV9idWlsdF9uZGspL3N5c3Jvb3QvdXNyL2luY2x1ZGUvJChteV9uZGtfdHJpcGxlKSBcCisgIG15X25ka19zeXNyb290IDo9ICQobXlfYnVpbHRfbmRrKS9zeXNyb290CiAKLSAgbXlfbmRrX3N5c3Jvb3RfbGliIDo9ICQobXlfYnVpbHRfbmRrKS9zeXNyb290L3Vzci9saWIvJChteV9uZGtfdHJpcGxlKS8kKG15X25ka19hcGkpCisgIG15X25ka19zeXNyb290X2xpYiA6PSAkKG15X25ka19zeXNyb290KS91c3IvbGliLyQobXlfbmRrX3RyaXBsZSkvJChteV9uZGtfYXBpKQogCiAgICMgVGhlIGJpb25pYyBsaW5rZXIgbm93IGhhcyBzdXBwb3J0IGZvciBwYWNrZWQgcmVsb2NhdGlvbnMgYW5kIGdudSBzdHlsZQogICAjIGhhc2hlcyAod2hpY2ggYXJlIG11Y2ggZmFzdGVyISksIGJ1dCBzaGlwcGluZyB0byBvbGRlciBkZXZpY2VzIHJlcXVpcmVzCkBAIC0zMzAsMTggKzMyOCwyMCBAQAogICBpZm5lcSAoJChMT0NBTF9JTl9WRU5ET1IpLCkKICAgICAjIFZlbmRvciBtb2R1bGVzIGhhdmUgTE9DQUxfSU5fVkVORE9SCiAgICAgbXlfY2ZsYWdzICs9IC1EX19BTkRST0lEX1ZFTkRPUl9fCi0KLSAgICBpZmVxICgkKEJPQVJEX0FQSV9MRVZFTCksKQotICAgICAgIyBUT0RPKGIvMzE0MDM2ODQ3KTogVGhpcyBpcyBhIGZhbGxiYWNrIGZvciBVREMgdGFyZ2V0cy4KLSAgICAgICMgVGhpcyBtdXN0IGJlIGEgYnVpbGQgZmFpbHVyZSB3aGVuIFVEQyBpcyBubyBsb25nZXIgYnVpbHQgZnJvbSB0aGlzIHNvdXJjZSB0cmVlLgotICAgICAgbXlfY2ZsYWdzICs9IC1EX19BTkRST0lEX1ZFTkRPUl9BUElfXz0kKFBMQVRGT1JNX1NES19WRVJTSU9OKQotICAgIGVsc2UKLSAgICAgIG15X2NmbGFncyArPSAtRF9fQU5EUk9JRF9WRU5ET1JfQVBJX189JChCT0FSRF9BUElfTEVWRUwpCi0gICAgZW5kaWYKICAgZWxzZSBpZm5lcSAoJChMT0NBTF9JTl9QUk9EVUNUKSwpCiAgICAgIyBQcm9kdWN0IG1vZHVsZXMgaGF2ZSBMT0NBTF9JTl9QUk9EVUNUCiAgICAgbXlfY2ZsYWdzICs9IC1EX19BTkRST0lEX1BST0RVQ1RfXwogICBlbmRpZgorCisgICMgRGVmaW5lIF9fQU5EUk9JRF9WRU5ET1JfQVBJX18gZm9yIGJvdGggcHJvZHVjdCBhbmQgdmVuZG9yIHZhcmlhbnRzIGJlY2F1c2UKKyAgIyB0aGV5IGJvdGggdXNlIHRoZSBzYW1lIExMTkRLIGxpYnJhcmllcy4KKyAgaWZlcSAoJChCT0FSRF9BUElfTEVWRUwpLCkKKyAgICAjIFRPRE8oYi8zMTQwMzY4NDcpOiBUaGlzIGlzIGEgZmFsbGJhY2sgZm9yIFVEQyB0YXJnZXRzLgorICAgICMgVGhpcyBtdXN0IGJlIGEgYnVpbGQgZmFpbHVyZSB3aGVuIFVEQyBpcyBubyBsb25nZXIgYnVpbHQgZnJvbSB0aGlzIHNvdXJjZSB0cmVlLgorICAgIG15X2NmbGFncyArPSAtRF9fQU5EUk9JRF9WRU5ET1JfQVBJX189JChQTEFURk9STV9TREtfVkVSU0lPTikKKyAgZWxzZQorICAgIG15X2NmbGFncyArPSAtRF9fQU5EUk9JRF9WRU5ET1JfQVBJX189JChCT0FSRF9BUElfTEVWRUwpCisgIGVuZGlmCiBlbmRpZgogCiBpZm5kZWYgTE9DQUxfSVNfSE9TVF9NT0RVTEUKQEAgLTE2MjYsMTkgKzE2MjYsNiBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGlmbmRlZiBMT0NBTF9JU19IT1NUX01PRFVMRQogCi1pZmVxICgkKGNhbGwgbW9kdWxlLWluLXZlbmRvci1vci1wcm9kdWN0KSx0cnVlKQotICBteV90YXJnZXRfZ2xvYmFsX2NfaW5jbHVkZXMgOj0KLSAgbXlfdGFyZ2V0X2dsb2JhbF9jX3N5c3RlbV9pbmNsdWRlcyA6PSAkKFRBUkdFVF9PVVRfSEVBREVSUykKLWVsc2UgaWZkZWYgTE9DQUxfU0RLX1ZFUlNJT04KLSAgbXlfdGFyZ2V0X2dsb2JhbF9jX2luY2x1ZGVzIDo9Ci0gIG15X3RhcmdldF9nbG9iYWxfY19zeXN0ZW1faW5jbHVkZXMgOj0gJChteV9uZGtfc3RsX2luY2x1ZGVfcGF0aCkgJChteV9uZGtfc3lzcm9vdF9pbmNsdWRlKQotZWxzZQotICBteV90YXJnZXRfZ2xvYmFsX2NfaW5jbHVkZXMgOj0gJChTUkNfSEVBREVSUykgXAotICAgICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKSQobXlfcHJlZml4KUNfSU5DTFVERVMpCi0gIG15X3RhcmdldF9nbG9iYWxfY19zeXN0ZW1faW5jbHVkZXMgOj0gJChTUkNfU1lTVEVNX0hFQURFUlMpIFwKLSAgICAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWCkkKG15X3ByZWZpeClDX1NZU1RFTV9JTkNMVURFUykKLWVuZGlmCi0KIG15X3RhcmdldF9nbG9iYWxfY2ZsYWdzIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKUNMQU5HXyQobXlfcHJlZml4KUdMT0JBTF9DRkxBR1MpCiBteV90YXJnZXRfZ2xvYmFsX2Nvbmx5ZmxhZ3MgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQ0xBTkdfJChteV9wcmVmaXgpR0xPQkFMX0NPTkxZRkxBR1MpICQobXlfY19zdGRfY29ubHlmbGFncykKIG15X3RhcmdldF9nbG9iYWxfY3BwZmxhZ3MgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQ0xBTkdfJChteV9wcmVmaXgpR0xPQkFMX0NQUEZMQUdTKSAkKG15X2NwcF9zdGRfY3BwZmxhZ3MpCkBAIC0xNjU0LDYgKzE2NDEsMjIgQEAKICAgbXlfdGFyZ2V0X2dsb2JhbF9sZGZsYWdzIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKUNMQU5HXyQobXlfcHJlZml4KUdMT0JBTF9MREZMQUdTKQogZW5kaWYgIyBteV91c2VfY2xhbmdfbGxkCiAKK2lmZXEgKCQoY2FsbCBtb2R1bGUtaW4tdmVuZG9yLW9yLXByb2R1Y3QpLHRydWUpCisgIG15X3RhcmdldF9nbG9iYWxfY19pbmNsdWRlcyA6PQorICBteV90YXJnZXRfZ2xvYmFsX2Nfc3lzdGVtX2luY2x1ZGVzIDo9ICQoVEFSR0VUX09VVF9IRUFERVJTKQorICBteV90YXJnZXRfZ2xvYmFsX2NmbGFncyArPSAtbm9zdGRsaWJpbmMKK2Vsc2UgaWZkZWYgTE9DQUxfU0RLX1ZFUlNJT04KKyAgbXlfdGFyZ2V0X2dsb2JhbF9jX2luY2x1ZGVzIDo9CisgIG15X3RhcmdldF9nbG9iYWxfY19zeXN0ZW1faW5jbHVkZXMgOj0gJChteV9uZGtfc3RsX2luY2x1ZGVfcGF0aCkKKyAgbXlfdGFyZ2V0X2dsb2JhbF9jZmxhZ3MgKz0gLS1zeXNyb290ICQobXlfbmRrX3N5c3Jvb3QpCitlbHNlCisgIG15X3RhcmdldF9nbG9iYWxfY19pbmNsdWRlcyA6PSAkKFNSQ19IRUFERVJTKSBcCisgICAgJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpJChteV9wcmVmaXgpQ19JTkNMVURFUykKKyAgbXlfdGFyZ2V0X2dsb2JhbF9jX3N5c3RlbV9pbmNsdWRlcyA6PSAkKFNSQ19TWVNURU1fSEVBREVSUykgXAorICAgICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKSQobXlfcHJlZml4KUNfU1lTVEVNX0lOQ0xVREVTKQorICBteV90YXJnZXRfZ2xvYmFsX2NmbGFncyArPSAtbm9zdGRsaWJpbmMKK2VuZGlmCisKIG15X3RhcmdldF90cmlwbGUgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQ0xBTkdfJChteV9wcmVmaXgpVFJJUExFKQogaWZuZGVmIExPQ0FMX0lTX0hPU1RfTU9EVUxFCiAgIG15X3RhcmdldF90cmlwbGVfZmxhZyA6PSAtdGFyZ2V0ICQobXlfdGFyZ2V0X3RyaXBsZSkkKG15X2FwaV9sZXZlbCkKZGlmZiAtLWdpdCBhL2NvcmUvYm9hcmRfY29uZmlnLm1rIGIvY29yZS9ib2FyZF9jb25maWcubWsKaW5kZXggZjIzNWY5My4uYWQ4OWMwMyAxMDA2NDQKLS0tIGEvY29yZS9ib2FyZF9jb25maWcubWsKKysrIGIvY29yZS9ib2FyZF9jb25maWcubWsKQEAgLTI3LDYgKzI3LDcgQEAKIF9ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX0tFUk5FTF9DTURMSU5FCiBfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCArPSBCT0FSRF9CT09UX0hFQURFUl9WRVJTSU9OCiBfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCArPSBCT0FSRF9CT09UQ09ORklHCitfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCArPSBCT0FSRF9CT09UQ09ORklHX0ZJTEUKIF9ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX0tFUk5FTF9CQVNFCiBfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCArPSBCT0FSRF9VU0VTX0dFTkVSSUNfQVVESU8KIF9ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVApAQCAtMzEyLDkgKzMxMywxMCBAQAogLktBVElfUkVBRE9OTFkgOj0gJChfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCkKIAogSU5URVJOQUxfS0VSTkVMX0NNRExJTkUgOj0gJChCT0FSRF9LRVJORUxfQ01ETElORSkKLWlmbmVxICgsJChCT0FSRF9CT09UQ09ORklHKSkKK2lmbmVxICgsJChCT0FSRF9CT09UQ09ORklHKSQoQk9BUkRfQk9PVENPTkZJR19GSUxFKSkKICAgSU5URVJOQUxfS0VSTkVMX0NNRExJTkUgKz0gYm9vdGNvbmZpZwogICBJTlRFUk5BTF9CT09UQ09ORklHIDo9ICQoQk9BUkRfQk9PVENPTkZJRykKKyAgSU5URVJOQUxfQk9PVENPTkZJR19GSUxFIDo9ICQoQk9BUkRfQk9PVENPTkZJR19GSUxFKQogZW5kaWYKIAogaWZuZXEgKCQoZmlsdGVyICU2NCwkKFRBUkdFVF9BUkNIKSksKQpAQCAtOTIzLDYgKzkyNSwxOCBAQAogZW5kaWYKIC5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX1VTRVNfUFZNRldJTUFHRQogCitCT0FSRF9VU0VTX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UgOj0KK2lmZXEgKCQoUFJPRFVDVF9CVUlMRF9ERVNLVE9QX1JFQ09WRVJZX0lNQUdFKSx0cnVlKQorICBCT0FSRF9VU0VTX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UgOj0gdHJ1ZQorZW5kaWYKKy5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX1VTRVNfREVTS1RPUF9SRUNPVkVSWV9JTUFHRQorCitCT0FSRF9VU0VTX0RFU0tUT1BfVVBEQVRFX0lNQUdFIDo9CitpZmVxICgkKFBST0RVQ1RfQlVJTERfREVTS1RPUF9VUERBVEVfSU1BR0UpLHRydWUpCisgIEJPQVJEX1VTRVNfREVTS1RPUF9VUERBVEVfSU1BR0UgOj0gdHJ1ZQorZW5kaWYKKy5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX1VTRVNfREVTS1RPUF9VUERBVEVfSU1BR0UKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBFbnN1cmUgY29uc2lzdGVuY3kgYW1vbmcgVEFSR0VUX1JFQ09WRVJZX1VQREFURVJfTElCUywgQUJfT1RBX1VQREFURVIsIGFuZCBQUk9EVUNUX09UQV9GT1JDRV9OT05fQUJfUEFDS0FHRS4KIFRBUkdFVF9SRUNPVkVSWV9VUERBVEVSX0xJQlMgPz0KZGlmZiAtLWdpdCBhL2NvcmUvY29tYm8vYXJjaC94ODYvYWxkZXJsYWtlLm1rIGIvY29yZS9jb21iby9hcmNoL3g4Ni9hbGRlcmxha2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhZTZlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvY29tYm8vYXJjaC94ODYvYWxkZXJsYWtlLm1rCkBAIC0wLDAgKzEsNiBAQAorIyBDb25maWd1cmF0aW9uIGZvciBMaW51eCBvbiB4ODYuCisjIEdlbmVyYXRpbmcgYmluYXJpZXMgZm9yIHByb2Nlc3NvcnMKKyMgdGhhdCBoYXZlIEFWWDIgZmVhdHVyZSBmbGFnCisjCisKK0FSQ0hfWDg2X0hBVkVfU1NFNF8xIDo9IHRydWUKZGlmZiAtLWdpdCBhL2NvcmUvY29tYm8vYXJjaC94ODZfNjQvYWxkZXJsYWtlLm1rIGIvY29yZS9jb21iby9hcmNoL3g4Nl82NC9hbGRlcmxha2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhZTZlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvY29tYm8vYXJjaC94ODZfNjQvYWxkZXJsYWtlLm1rCkBAIC0wLDAgKzEsNiBAQAorIyBDb25maWd1cmF0aW9uIGZvciBMaW51eCBvbiB4ODYuCisjIEdlbmVyYXRpbmcgYmluYXJpZXMgZm9yIHByb2Nlc3NvcnMKKyMgdGhhdCBoYXZlIEFWWDIgZmVhdHVyZSBmbGFnCisjCisKK0FSQ0hfWDg2X0hBVkVfU1NFNF8xIDo9IHRydWUKZGlmZiAtLWdpdCBhL2NvcmUvY29uZmlnLm1rIGIvY29yZS9jb25maWcubWsKaW5kZXggMTkyYzhiMi4uMjBlYmVlYiAxMDA2NDQKLS0tIGEvY29yZS9jb25maWcubWsKKysrIGIvY29yZS9jb25maWcubWsKQEAgLTMzMCw2ICszMzAsMTggQEAKICQoZXZhbCBTT09OR19DT05GSUdfVFlQRV8kKHN0cmlwICQxKV8kKHN0cmlwICQyKTo9Ym9vbCkKIGVuZGVmCiAKKyMgc29vbmdfY29uZmlnX3NldF9zdHJpbmdfbGlzdCBpcyB0aGUgc2FtZSBhcyBzb29uZ19jb25maWdfc2V0LCBidXQgaXQgd2lsbAorIyBhbHNvIHR5cGUgdGhlIHZhcmlhYmxlIGFzIGEgbGlzdCBvZiBzdHJpbmdzLCBzbyB0aGF0IHdoZW4gdXNpbmcgc2VsZWN0KCkgZXhwcmVzc2lvbnMKKyMgaW4gYmx1ZXByaW50IGZpbGVzIHRoZXkgY2FuIHVzZSBsaXN0IHZhbHVlcyBpbnN0ZWFkIG9mIHN0cmluZ3MuCisjIFRoZSB2YWx1ZXMgb2YgdGhlIGxpc3QgbXVzdCBiZSBzcGFjZS1zZXBhcmF0ZWQuCisjICQxIGlzIHRoZSBuYW1lc3BhY2UuICQyIGlzIHRoZSB2YXJpYWJsZSBuYW1lLiAkMyBpcyB0aGUgdmFyaWFibGUgdmFsdWUuCisjIEV4OiAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9zdHJpbmdfbGlzdCxhY21lLENPT0xfTElCUyxhIGIpCitkZWZpbmUgc29vbmdfY29uZmlnX3NldF9zdHJpbmdfbGlzdAorJChjYWxsIHNvb25nX2NvbmZpZ19kZWZpbmVfaW50ZXJuYWwsJDEsJDIpIFwKKyQoZXZhbCBTT09OR19DT05GSUdfJChzdHJpcCAkMSlfJChzdHJpcCAkMik6PSQoc3RyaXAgJDMpKQorJChldmFsIFNPT05HX0NPTkZJR19UWVBFXyQoc3RyaXAgJDEpXyQoc3RyaXAgJDIpOj1zdHJpbmdfbGlzdCkKK2VuZGVmCisKICMgc29vbmdfY29uZmlnX2FwcGVuZCBhcHBlbmRzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgaW4gdGhlIGdpdmVuIFNvb25nCiAjIGNvbmZpZyBuYW1lc3BhY2UuIElmIHRoZSB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBkZWZpbmVkLiBJZiB0aGUKICMgbmFtZXNwYWNlIGRvZXMgbm90ICBleGlzdCwgaXQgd2lsbCBiZSBkZWZpbmVkLgpAQCAtNDMyLDEzICs0NDQsNiBAQAogZW5kaWYKIC5LQVRJX1JFQURPTkxZIDo9IFRBUkdFVF9NQVhfUEFHRV9TSVpFX1NVUFBPUlRFRAogCi1pZmRlZiBQUk9EVUNUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUKLSAgVEFSR0VUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUgOj0gJChQUk9EVUNUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUpCi1lbHNlCi0gIFRBUkdFVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFIDo9IGZhbHNlCi1lbmRpZgotLktBVElfUkVBRE9OTFkgOj0gVEFSR0VUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUKLQogIyBCb29sZWFuIHZhcmlhYmxlIGRldGVybWluaW5nIGlmIEFPU1AgcmVsaWVzIG9uIGJpb25pYydzIFBBR0VfU0laRSBtYWNyby4KIGlmZGVmIFBST0RVQ1RfTk9fQklPTklDX1BBR0VfU0laRV9NQUNSTwogICBUQVJHRVRfTk9fQklPTklDX1BBR0VfU0laRV9NQUNSTyA6PSAkKFBST0RVQ1RfTk9fQklPTklDX1BBR0VfU0laRV9NQUNSTykKQEAgLTcyNSw4ICs3MzAsOCBAQAogUFJPR1VBUkRfSE9NRSA6PSBleHRlcm5hbC9wcm9ndWFyZAogUFJPR1VBUkQgOj0gJChQUk9HVUFSRF9IT01FKS9iaW4vcHJvZ3VhcmQuc2gKIFBST0dVQVJEX0RFUFMgOj0gJChQUk9HVUFSRCkgJChQUk9HVUFSRF9IT01FKS9saWIvcHJvZ3VhcmQuamFyCi1KQVZBVEFHUyA6PSBidWlsZC9tYWtlL3Rvb2xzL2phdmEtZXZlbnQtbG9nLXRhZ3MucHkKLU1FUkdFVEFHUyA6PSBidWlsZC9tYWtlL3Rvb2xzL21lcmdlLWV2ZW50LWxvZy10YWdzLnB5CitKQVZBVEFHUyA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9qYXZhLWV2ZW50LWxvZy10YWdzCitNRVJHRVRBR1MgOj0gJChIT1NUX09VVF9FWEVDVVRBQkxFUykvbWVyZ2UtZXZlbnQtbG9nLXRhZ3MKIEFQUEVORDJTSU1HIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2FwcGVuZDJzaW1nCiBWRVJJVFlfU0lHTkVSIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3Zlcml0eV9zaWduZXIKIEJVSUxEX1ZFUklUWV9NRVRBREFUQSA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9idWlsZF92ZXJpdHlfbWV0YWRhdGEKQEAgLTgxNyw2ICs4MjIsMTggQEAKICAgZW5kaWYKIGVuZGlmCiAKK2lmZGVmIFBST0RVQ1RfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRQorICBUQVJHRVRfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRSA6PSAkKFBST0RVQ1RfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRSkKK2Vsc2UgaWZlcSAodHJ1ZSwkKFRBUkdFVF9CVUlMRF9VTkJVTkRMRUQpKQorICAjIHVuYnVuZGxlZCBidWlsZHMgbWF5IG5vdCBoYXZlIHVwZGF0ZWQgYnVpbGQgc291cmNlcworICBUQVJHRVRfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRSA6PSBmYWxzZQorZWxzZSBpZm5lcSAoJChjYWxsIG1hdGhfZ3Rfb3JfZXEsJChQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCksMzYpLCkKKyAgVEFSR0VUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUgOj0gdHJ1ZQorZWxzZQorICBUQVJHRVRfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRSA6PSBmYWxzZQorZW5kaWYKKy5LQVRJX1JFQURPTkxZIDo9IFRBUkdFVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFCisKICMgU2V0IEJPQVJEX1NZU1RFTVNES19WRVJTSU9OUyB0byB0aGUgbGF0ZXN0IFN5c3RlbVNESyB2ZXJzaW9uIHN0YXJ0aW5nIGZyb20gUC1sYXVuY2hpbmcKICMgZGV2aWNlcyBpZiB1bnNldC4KIGlmbmRlZiBCT0FSRF9TWVNURU1TREtfVkVSU0lPTlMKQEAgLTgzOSwxMiArODU2LDYgQEAKIC5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX0NVUlJFTlRfQVBJX0xFVkVMX0ZPUl9WRU5ET1JfTU9EVUxFUwogCiBpZmRlZiBQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTAotICBib2FyZF9hcGlfbGV2ZWwgOj0gJChmaXJzdHdvcmQgJChCT0FSRF9BUElfTEVWRUwpICQoQk9BUkRfU0hJUFBJTkdfQVBJX0xFVkVMKSkKLSAgaWZuZXEgKCwkKGJvYXJkX2FwaV9sZXZlbCkpCi0gICAgbWluX3N5c3RlbXNka192ZXJzaW9uIDo9ICQoY2FsbCBtYXRoX21pbiwkKGJvYXJkX2FwaV9sZXZlbCksJChQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCkpCi0gIGVsc2UKLSAgICBtaW5fc3lzdGVtc2RrX3ZlcnNpb24gOj0gJChQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCkKLSAgZW5kaWYKICAgaWZuZXEgKCQoY2FsbCBtYXRoX2d0X29yX2VxLCQoUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwpLDI5KSwpCiAgICAgaWZuZXEgKCQoQk9BUkRfT1RBX0ZSQU1FV09SS19WQk1FVEFfVkVSU0lPTl9PVkVSUklERSksKQogICAgICAgJChlcnJvciBXaGVuIFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMID49IDI5LCBCT0FSRF9PVEFfRlJBTUVXT1JLX1ZCTUVUQV9WRVJTSU9OX09WRVJSSURFIGNhbm5vdCBiZSBzZXQpCkBAIC04OTUsNiArOTA2LDExIEBACiAgICAgUExBVEZPUk1fU0VQT0xJQ1lfQ09NUEFUX1ZFUlNJT05TIFwKICAgICBQTEFURk9STV9TRVBPTElDWV9WRVJTSU9OIFwKIAorQk9BUkRfR0VORlNfTEFCRUxTX1ZFUlNJT04gPz0gJChCT0FSRF9BUElfTEVWRUwpCitpZmVxICgkKGNhbGwgbWF0aF9ndCwkKEJPQVJEX0FQSV9MRVZFTCksJChCT0FSRF9HRU5GU19MQUJFTFNfVkVSU0lPTikpLHRydWUpCisgICQoZXJyb3IgQk9BUkRfR0VORlNfTEFCRUxTX1ZFUlNJT04gKCQoQk9BUkRfR0VORlNfTEFCRUxTX1ZFUlNJT04pKSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBCT0FSRF9BUElfTEVWRUwgKCQoQk9BUkRfQVBJX0xFVkVMKSkpCitlbmRpZgorCiBpZmVxICgkKFBST0RVQ1RfUkVUUk9GSVRfRFlOQU1JQ19QQVJUSVRJT05TKSx0cnVlKQogICBpZm5lcSAoJChQUk9EVUNUX1VTRV9EWU5BTUlDX1BBUlRJVElPTlMpLHRydWUpCiAgICAgJChlcnJvciBQUk9EVUNUX1VTRV9EWU5BTUlDX1BBUlRJVElPTlMgbXVzdCBiZSB0cnVlIHdoZW4gUFJPRFVDVF9SRVRST0ZJVF9EWU5BTUlDX1BBUlRJVElPTlMgXApAQCAtMTMwMywxMCArMTMxOSw2IEBACiBTT09OR19WQVJJQUJMRVMgOj0KIFNPT05HX0VYVFJBX1ZBUklBQkxFUyA6PQogCi0taW5jbHVkZSBleHRlcm5hbC9sdHAvYW5kcm9pZC9sdHBfcGFja2FnZV9saXN0Lm1rCi1ERUZBVUxUX0RBVEFfT1VUX01PRFVMRVMgOj0gbHRwICQobHRwX3BhY2thZ2VzKQotLktBVElfUkVBRE9OTFkgOj0gREVGQVVMVF9EQVRBX09VVF9NT0RVTEVTCi0KIGluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2R1bXB2YXIubWsKIAogaWZkZWYgQk9BUkRfVk5ES19WRVJTSU9OCmRpZmYgLS1naXQgYS9jb3JlL2NvbmZpZ19zYW5pdGl6ZXJzLm1rIGIvY29yZS9jb25maWdfc2FuaXRpemVycy5tawppbmRleCBjMGYyYzY4Li5hYjJkNWMxIDEwMDY0NAotLS0gYS9jb3JlL2NvbmZpZ19zYW5pdGl6ZXJzLm1rCisrKyBiL2NvcmUvY29uZmlnX3Nhbml0aXplcnMubWsKQEAgLTI4NCw5ICsyODQsOSBAQAogaWZuZXEgKCQoZmlsdGVyIG1lbXRhZ19zdGFjaywkKG15X3Nhbml0aXplKSksKQogICBteV9jZmxhZ3MgKz0gLWZzYW5pdGl6ZT1tZW10YWctc3RhY2sKICAgbXlfbGRmbGFncyArPSAtZnNhbml0aXplPW1lbXRhZy1zdGFjawotICBteV9jZmxhZ3MgKz0gLVhjbGFuZyAtdGFyZ2V0LWZlYXR1cmUgLVhjbGFuZyArbXRlCi0gIG15X2xkZmxhZ3MgKz0gLVhjbGFuZyAtdGFyZ2V0LWZlYXR1cmUgLVhjbGFuZyArbXRlCi0gIG15X2FzZmxhZ3MgKz0gLVhjbGFuZyAtdGFyZ2V0LWZlYXR1cmUgLVhjbGFuZyArbXRlCisgIG15X2NmbGFncyArPSAtbWFyY2g9YXJtdjhhK21lbXRhZworICBteV9sZGZsYWdzICs9IC1tYXJjaD1hcm12OGErbWVtdGFnCisgIG15X2FzZmxhZ3MgKz0gLW1hcmNoPWFybXY4YSttZW10YWcKICAgbXlfc2FuaXRpemUgOj0gJChmaWx0ZXItb3V0IG1lbXRhZ19zdGFjaywkKG15X3Nhbml0aXplKSkKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2NvcmUvZGVmaW5pdGlvbnMubWsgYi9jb3JlL2RlZmluaXRpb25zLm1rCmluZGV4IGNkMWIzNmUuLjFhYjYzODggMTAwNjQ0Ci0tLSBhL2NvcmUvZGVmaW5pdGlvbnMubWsKKysrIGIvY29yZS9kZWZpbml0aW9ucy5tawpAQCAtMTU1NSw3ICsxNTU1LDcgQEAKIGRlZmluZSB0cmFuc2Zvcm0tbG9ndGFncy10by1qYXZhCiBAbWtkaXIgLXAgJChkaXIgJEApCiBAZWNobyAibG9ndGFnczogJEAgPD0gJDwiCi0kKGhpZGUpICQoSkFWQVRBR1MpIC1vICRAICQ8ICQoUFJJVkFURV9NRVJHRURfVEFHKQorJChoaWRlKSAkKEpBVkFUQUdTKSAtbyAkQCAkPAogZW5kZWYKIAogCkBAIC0yNjA1LDcgKzI2MDUsODcgQEAKICAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMDg1MDEsMTA5MDAwLCQoMSkpLCQoMikpCiAgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTA5MDAxLDEwOTUwMCwkKDEpKSwkKDIpKQogICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEwOTUwMSwxMTAwMDAsJCgxKSksJCgyKSkKLSAgICAgICAgQCQoaWYgJCh3b3JkbGlzdCAxMTAwMDEsMTEwMDAyLCQoMSkpLCQoZXJyb3IgZHVtcC13b3Jkcy10by1maWxlOiBUb28gbWFueSB3b3JkcyAoJCh3b3JkcyAkKDEpKSkpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExMDAwMSwxMTA1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTA1MDEsMTExMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTExMDAxLDExMTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExMTUwMSwxMTIwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTIwMDEsMTEyNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTEyNTAxLDExMzAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExMzAwMSwxMTM1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTM1MDEsMTE0MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE0MDAxLDExNDUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExNDUwMSwxMTUwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTUwMDEsMTE1NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE1NTAxLDExNjAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExNjAwMSwxMTY1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTY1MDEsMTE3MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE3MDAxLDExNzUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExNzUwMSwxMTgwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTgwMDEsMTE4NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE4NTAxLDExOTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExOTAwMSwxMTk1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTk1MDEsMTIwMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTIwMDAxLDEyMDUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyMDUwMSwxMjEwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjEwMDEsMTIxNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTIxNTAxLDEyMjAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyMjAwMSwxMjI1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjI1MDEsMTIzMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTIzMDAxLDEyMzUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyMzUwMSwxMjQwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjQwMDEsMTI0NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI0NTAxLDEyNTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyNTAwMSwxMjU1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjU1MDEsMTI2MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI2MDAxLDEyNjUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyNjUwMSwxMjcwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjcwMDEsMTI3NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI3NTAxLDEyODAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyODAwMSwxMjg1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjg1MDEsMTI5MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI5MDAxLDEyOTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyOTUwMSwxMzAwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzAwMDEsMTMwNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTMwNTAxLDEzMTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzMTAwMSwxMzE1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzE1MDEsMTMyMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTMyMDAxLDEzMjUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzMjUwMSwxMzMwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzMwMDEsMTMzNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTMzNTAxLDEzNDAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzNDAwMSwxMzQ1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzQ1MDEsMTM1MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM1MDAxLDEzNTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzNTUwMSwxMzYwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzYwMDEsMTM2NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM2NTAxLDEzNzAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzNzAwMSwxMzc1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzc1MDEsMTM4MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM4MDAxLDEzODUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzODUwMSwxMzkwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzkwMDEsMTM5NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM5NTAxLDE0MDAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0MDAwMSwxNDA1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDA1MDEsMTQxMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQxMDAxLDE0MTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0MTUwMSwxNDIwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDIwMDEsMTQyNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQyNTAxLDE0MzAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0MzAwMSwxNDM1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDM1MDEsMTQ0MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ0MDAxLDE0NDUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0NDUwMSwxNDUwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDUwMDEsMTQ1NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ1NTAxLDE0NjAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0NjAwMSwxNDY1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDY1MDEsMTQ3MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ3MDAxLDE0NzUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0NzUwMSwxNDgwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDgwMDEsMTQ4NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ4NTAxLDE0OTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0OTAwMSwxNDk1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDk1MDEsMTUwMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGlmICQod29yZGxpc3QgMTUwMDAxLDE1MDAwMiwkKDEpKSwkKGVycm9yIGR1bXAtd29yZHMtdG8tZmlsZTogVG9vIG1hbnkgd29yZHMgKCQod29yZHMgJCgxKSkpKSkKIGVuZGVmCiAjIFJldHVybiBqYXIgYXJndW1lbnRzIHRvIGNvbXByZXNzIGZpbGVzIGluIGEgZ2l2ZW4gZGlyZWN0b3J5CiAjICQoMSk6IGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9kZXhfcHJlb3B0Lm1rIGIvY29yZS9kZXhfcHJlb3B0Lm1rCmluZGV4IDkwNmQ3ZjAuLjg4ZTBjYzcgMTAwNjQ0Ci0tLSBhL2NvcmUvZGV4X3ByZW9wdC5taworKysgYi9jb3JlL2RleF9wcmVvcHQubWsKQEAgLTEzLDI4ICsxMyw2IEBACiBpbnN0YWxsLW9uLXN5c3RlbS1vdGhlciA9ICQoZmlsdGVyLW91dCAkKFBST0RVQ1RfREVYUFJFT1BUX1NQRUVEX0FQUFMpICQoUFJPRFVDVF9TWVNURU1fU0VSVkVSX0FQUFMpLCQoYmFzZW5hbWUgJChub3RkaXIgJChmaWx0ZXIgJChmb3JlYWNoIGYsJChTWVNURU1fT1RIRVJfT0RFWF9GSUxURVIpLCQoVEFSR0VUX09VVCkvJChmKSksJCgxKSkpKSkKIGVuZGlmCiAKLSMgSW5zdGFsbCBib290IGltYWdlcyBmb3IgdGVzdGluZyBvbiBob3N0LiBXZSBleGNsdWRlIGZyYW1ld29yayBpbWFnZSBhcyBpdCBpcyBub3QgcGFydCBvZiBhcnQgbWFuaWZlc3QuCi1teV9ib290X2ltYWdlX2FyY2ggOj0gSE9TVF9BUkNICi1teV9ib290X2ltYWdlX291dCA6PSAkKEhPU1RfT1VUKQotbXlfYm9vdF9pbWFnZV9zeW1zIDo9ICQoSE9TVF9PVVQpL3N5bWJvbHMKLUhPU1RfQk9PVF9JTUFHRV9NT0RVTEUgOj0gXAotICAkKGZvcmVhY2ggbXlfYm9vdF9pbWFnZV9uYW1lLGFydF9ob3N0LCQoc3RyaXAgXAotICAgICQoZXZhbCBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9kZXhfcHJlb3B0X2xpYmFydC5taykgXAotICAgICQobXlfYm9vdF9pbWFnZV9tb2R1bGUpKSkKLUhPU1RfQk9PVF9JTUFHRSA6PSAkKGNhbGwgbW9kdWxlLWluc3RhbGxlZC1maWxlcywkKEhPU1RfQk9PVF9JTUFHRV9NT0RVTEUpKQotaWZkZWYgSE9TVF8yTkRfQVJDSAotICBteV9ib290X2ltYWdlX2FyY2ggOj0gSE9TVF8yTkRfQVJDSAotICAyTkRfSE9TVF9CT09UX0lNQUdFX01PRFVMRSA6PSBcCi0gICAgJChmb3JlYWNoIG15X2Jvb3RfaW1hZ2VfbmFtZSxhcnRfaG9zdCwkKHN0cmlwIFwKLSAgICAgICQoZXZhbCBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9kZXhfcHJlb3B0X2xpYmFydC5taykgXAotICAgICAgJChteV9ib290X2ltYWdlX21vZHVsZSkpKQotICAyTkRfSE9TVF9CT09UX0lNQUdFIDo9ICQoY2FsbCBtb2R1bGUtaW5zdGFsbGVkLWZpbGVzLCQoMk5EX0hPU1RfQk9PVF9JTUFHRV9NT0RVTEUpKQotZW5kaWYKLW15X2Jvb3RfaW1hZ2VfYXJjaCA6PQotbXlfYm9vdF9pbWFnZV9vdXQgOj0KLW15X2Jvb3RfaW1hZ2Vfc3ltcyA6PQotbXlfYm9vdF9pbWFnZV9tb2R1bGUgOj0KLQogIyBCdWlsZCB0aGUgYm9vdC56aXAgd2hpY2ggY29udGFpbnMgdGhlIGJvb3QgamFycyBhbmQgdGhlaXIgY29tcGlsYXRpb24gb3V0cHV0CiAjIFdlIGNhbiBkbyB0aGlzIG9ubHkgaWYgcHJlb3B0IGlzIGVuYWJsZWQgYW5kIGlmIHRoZSBwcm9kdWN0IHVzZXMgbGliYXJ0IGNvbmZpZyAod2hpY2ggc2V0cyB0aGUKICMgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciBwcmVvcHRpbmcpLgpkaWZmIC0tZ2l0IGEvY29yZS9kZXhfcHJlb3B0X2xpYmFydC5tayBiL2NvcmUvZGV4X3ByZW9wdF9saWJhcnQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYzk5NDIuLjAwMDAwMDAKLS0tIGEvY29yZS9kZXhfcHJlb3B0X2xpYmFydC5taworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQVJUIGJvb3QgaW1hZ2UgaW5zdGFsbGF0aW9uCi0jIElucHV0IHZhcmlhYmxlczoKLSMgICBteV9ib290X2ltYWdlX25hbWU6IHRoZSBib290IGltYWdlIHRvIGluc3RhbGwKLSMgICBteV9ib290X2ltYWdlX2FyY2g6IHRoZSBhcmNoaXRlY3R1cmUgdG8gaW5zdGFsbCAoZS5nLiBUQVJHRVRfQVJDSCwgbm90IGV4cGFuZGVkKQotIyAgIG15X2Jvb3RfaW1hZ2Vfb3V0OiAgdGhlIGluc3RhbGwgZGlyZWN0b3J5IChlLmcuICQoUFJPRFVDVF9PVVQpKQotIyAgIG15X2Jvb3RfaW1hZ2Vfc3ltczogdGhlIHN5bWJvbHMgZGlyZWN0b3IgKGUuZy4gJChUQVJHRVRfT1VUX1VOU1RSSVBQRUQpKQotIwotIyBPdXRwdXQgdmFyaWFibGVzOgotIyAgIG15X2Jvb3RfaW1hZ2VfbW9kdWxlOiB0aGUgY3JlYXRlZCBtb2R1bGUgbmFtZS4gRW1wdHkgaWYgbm8gbW9kdWxlIGlzIGNyZWF0ZWQuCi0jCi0jIEluc3RhbGwgdGhlIGJvb3QgaW1hZ2VzIGNvbXBpbGVkIGJ5IFNvb25nLgotIyBDcmVhdGUgYSBtb2R1bGUgbmFtZWQgZGV4cHJlb3B0X2Jvb3RqYXIuJChteV9ib290X2ltYWdlX25hbWUpXyQoJChteV9ib290X2ltYWdlX2FyY2gpKQotIyB0aGF0IGluc3RhbGxzIGFsbCBvZiBib290IGltYWdlIGZpbGVzLgotIyBJZiB0aGVyZSBpcyBubyBmaWxlIHRvIGluc3RhbGwgZm9yICQobXlfYm9vdF9pbWFnZV9uYW1lKSwgZm9yIGV4YW1wbGUgd2hlbgotIyBidWlsZGluZyBhbiB1bmJ1bmRsZWQgYnVpbGQsIHRoZW4gbm8gbW9kdWxlIGlzIGNyZWF0ZWQuCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBUYWtlcyBhIGxpc3Qgb2Ygc3JjOmRlc3QgaW5zdGFsbCBwYWlycyBhbmQgcmV0dXJucyBhIG5ldyBsaXN0IHdpdGggYSBwYXRoCi0jIHByZWZpeGVkIHRvIGVhY2ggZGVzdCB2YWx1ZS4KLSMgJCgxKTogbGlzdCBvZiBzcmM6ZGVzdCBpbnN0YWxsIHBhaXJzCi0jICQoMik6IHBhdGggdG8gcHJlZml4IHRvIGVhY2ggZGVzdCB2YWx1ZQotZGVmaW5lIHByZWZpeC1jb3B5LW1hbnktZmlsZXMtZGVzdAotJChmb3JlYWNoIHYsJCgxKSwkKGNhbGwgd29yZC1jb2xvbiwxLCQodikpOiQoMikkKGNhbGwgd29yZC1jb2xvbiwyLCQodikpKQotZW5kZWYKLQotIyBDb252ZXJ0cyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmRleCBwYXRoIGludG8gYSBsb2NhdGlvbiB0aGF0IGNhbiBiZSBzaGFyZWQKLSMgYmV0d2VlbiBhcmNoaXRlY3R1cmVzLgotZGVmaW5lIHZkZXgtc2hhcmVkLWluc3RhbGwtcGF0aAotJChkaXIgJChwYXRzdWJzdCAlLywlLCQoZGlyICQoMSkpKSkkKG5vdGRpciAkKDEpKQotZW5kZWYKLQotIyBUYWtlcyBhIGxpc3Qgb2Ygc3JjOmRlc3QgaW5zdGFsbCBwYWlycyBvZiB2ZGV4IGZpbGVzIGFuZCByZXR1cm5zIGEgbmV3IGxpc3QKLSMgd2hlcmUgZWFjaCBkZXN0IGhhcyBiZWVuIHJld3JpdHRlbiB0byB0aGUgc2hhcmVkIGxvY2F0aW9uIGZvciB2ZGV4IGZpbGVzLgotZGVmaW5lIHZkZXgtY29weS1tYW55LWZpbGVzLXNoYXJlZC1kZXN0Ci0kKGZvcmVhY2ggdiwkKDEpLCQoY2FsbCB3b3JkLWNvbG9uLDEsJCh2KSk6JChjYWxsIHZkZXgtc2hhcmVkLWluc3RhbGwtcGF0aCwkKGNhbGwgd29yZC1jb2xvbiwyLCQodikpKSkKLWVuZGVmCi0KLSMgQ3JlYXRlcyBhIHJ1bGUgdG8gc3ltbGluayBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmRleCBmaWxlIHRvIHRoZSBzaGFyZWQKLSMgbG9jYXRpb24gZm9yIHRoYXQgdmRleCBmaWxlLgotZGVmaW5lIHN5bWxpbmstdmRleC1maWxlCi0kKHN0cmlwIFwKLSAgJChjYWxsIHN5bWxpbmstZmlsZSxcCi0gICAgJChjYWxsIHZkZXgtc2hhcmVkLWluc3RhbGwtcGF0aCwkKDEpKSxcCi0gICAgLi4vJChub3RkaXIgJCgxKSksXAotICAgICQoMSkpXAotICAkKDEpKQotZW5kZWYKLQotIyBUYWtlcyBhIGxpc3Qgb2Ygc3JjOmRlc3QgaW5zdGFsbCBwYWlycyBvZiB2ZGV4IGZpbGVzIGFuZCBjcmVhdGVzIHJ1bGVzIHRvCi0jIHN5bWxpbmsgZWFjaCBkZXN0IHRvIHRoZSBzaGFyZWQgbG9jYXRpb24gZm9yIHRoYXQgdmRleCBmaWxlLgotZGVmaW5lIHN5bWxpbmstdmRleC1maWxlcwotJChmb3JlYWNoIHYsJCgxKSwkKGNhbGwgc3ltbGluay12ZGV4LWZpbGUsJChjYWxsIHdvcmQtY29sb24sMiwkKHYpKSkpCi1lbmRlZgotCi1teV9ib290X2ltYWdlX21vZHVsZSA6PQotCi1teV9zdWZmaXggOj0gJChteV9ib290X2ltYWdlX25hbWUpXyQoJChteV9ib290X2ltYWdlX2FyY2gpKQotbXlfY29weV9wYWlycyA6PSAkKGNhbGwgcHJlZml4LWNvcHktbWFueS1maWxlcy1kZXN0LCQoREVYUFJFT1BUX0lNQUdFX0JVSUxUX0lOU1RBTExFRF8kKG15X3N1ZmZpeCkpLCQobXlfYm9vdF9pbWFnZV9vdXQpKQotbXlfdmRleF9jb3B5X3BhaXJzIDo9ICQoY2FsbCBwcmVmaXgtY29weS1tYW55LWZpbGVzLWRlc3QsJChERVhQUkVPUFRfSU1BR0VfVkRFWF9CVUlMVF9JTlNUQUxMRURfJChteV9zdWZmaXgpKSwkKG15X2Jvb3RfaW1hZ2Vfb3V0KSkKLW15X3ZkZXhfY29weV9zaGFyZWRfcGFpcnMgOj0gJChjYWxsIHZkZXgtY29weS1tYW55LWZpbGVzLXNoYXJlZC1kZXN0LCQobXlfdmRleF9jb3B5X3BhaXJzKSkKLWlmZXEgKCwkKGZpbHRlciAlXzJORF9BUkNILCQobXlfYm9vdF9pbWFnZV9hcmNoKSkpCi0gICMgT25seSBpbnN0YWxsIHRoZSB2ZGV4IHRvIHRoZSBzaGFyZWQgbG9jYXRpb24gZm9yIHRoZSBwcmltYXJ5IGFyY2hpdGVjdHVyZS4KLSAgbXlfY29weV9wYWlycyArPSAkKG15X3ZkZXhfY29weV9zaGFyZWRfcGFpcnMpCi1lbmRpZgotCi1teV91bnN0cmlwcGVkX2NvcHlfcGFpcnMgOj0gJChjYWxsIHByZWZpeC1jb3B5LW1hbnktZmlsZXMtZGVzdCwkKERFWFBSRU9QVF9JTUFHRV9VTlNUUklQUEVEX0JVSUxUX0lOU1RBTExFRF8kKG15X3N1ZmZpeCkpLCQobXlfYm9vdF9pbWFnZV9zeW1zKSkKLQotIyBHZW5lcmF0ZSB0aGUgYm9vdCBpbWFnZSBtb2R1bGUgb25seSBpZiB0aGVyZSBpcyBhbnkgZmlsZSB0byBpbnN0YWxsLgotaWZuZXEgKCwkKHN0cmlwICQobXlfY29weV9wYWlycykpKQotICBteV9maXJzdF9wYWlyIDo9ICQoZmlyc3R3b3JkICQobXlfY29weV9wYWlycykpCi0gIG15X3Jlc3RfcGFpcnMgOj0gJCh3b3JkbGlzdCAyLCQod29yZHMgJChteV9jb3B5X3BhaXJzKSksJChteV9jb3B5X3BhaXJzKSkKLQotICBteV9maXJzdF9zcmMgOj0gJChjYWxsIHdvcmQtY29sb24sMSwkKG15X2ZpcnN0X3BhaXIpKQotICBteV9maXJzdF9kZXN0IDo9ICQoY2FsbCB3b3JkLWNvbG9uLDIsJChteV9maXJzdF9wYWlyKSkKLQotICBteV9pbnN0YWxsZWQgOj0gJChjYWxsIGNvcHktbWFueS1maWxlcywkKG15X2NvcHlfcGFpcnMpKQotICBteV91bnN0cmlwcGVkX2luc3RhbGxlZCA6PSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobXlfdW5zdHJpcHBlZF9jb3B5X3BhaXJzKSkKLQotICBteV9zeW1saW5rcyA6PSAkKGNhbGwgc3ltbGluay12ZGV4LWZpbGVzLCQobXlfdmRleF9jb3B5X3BhaXJzKSkKLQotICAjIFdlIGRvbid0IGhhdmUgYSBMT0NBTF9QQVRIIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgbW9kdWxlcywgc28gbGV0IGl0IGJlIHRoZSAkKEJVSUxEX1NZU1RFTSkuCi0gIExPQ0FMX1BBVEggOj0gJChCVUlMRF9TWVNURU0pCi0gICMgSGFjayB0byBsZXQgdGhlc2UgcHNldWRvLW1vZHVsZXMgd3JhcHBlZCBhcm91bmQgU29vbmcgbW9kdWxlcyB1c2UgTE9DQUxfU09PTkdfSU5TVEFMTEVEX01PRFVMRS4KLSAgTE9DQUxfTU9EVUxFX01BS0VGSUxFIDo9ICQoU09PTkdfQU5EUk9JRF9NSykKLQotICBpbmNsdWRlICQoQ0xFQVJfVkFSUykKLSAgTE9DQUxfTU9EVUxFIDo9IGRleHByZW9wdF9ib290amFyLiQobXlfc3VmZml4KQotICBMT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRSA6PSAkKG15X2ZpcnN0X3NyYykKLSAgTE9DQUxfTU9EVUxFX1BBVEggOj0gJChkaXIgJChteV9maXJzdF9kZXN0KSkKLSAgTE9DQUxfTU9EVUxFX1NURU0gOj0gJChub3RkaXIgJChteV9maXJzdF9kZXN0KSkKLSAgTE9DQUxfU09PTkdfSU5TVEFMTF9QQUlSUyA6PSAkKG15X2NvcHlfcGFpcnMpCi0gIExPQ0FMX1NPT05HX0lOU1RBTExfU1lNTElOS1MgOj0gJChteV9zeW1saW5rcykKLSAgTE9DQUxfU09PTkdfSU5TVEFMTEVEX01PRFVMRSA6PSAkKG15X2ZpcnN0X2Rlc3QpCi0gIExPQ0FMX1NPT05HX0xJQ0VOU0VfTUVUQURBVEEgOj0gJChERVhQUkVPUFRfSU1BR0VfTElDRU5TRV9NRVRBREFUQV8kKG15X3N1ZmZpeCkpCi0gIGlmbmVxICgsJChzdHJpcCAkKGZpbHRlciBIT1NUXyUsJChteV9ib290X2ltYWdlX2FyY2gpKSkpCi0gICAgTE9DQUxfSVNfSE9TVF9NT0RVTEUgOj0gdHJ1ZQotICBlbmRpZgotICBMT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi0gIGluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLSAgJChMT0NBTF9CVUlMVF9NT0RVTEUpOiB8ICQobXlfdW5zdHJpcHBlZF9pbnN0YWxsZWQpCi0gICMgSW5zdGFsbGluZyBib290LmFydCBjYXVzZXMgYWxsIGJvb3QgaW1hZ2UgYml0cyB0byBiZSBpbnN0YWxsZWQuCi0gICMgS2VlcCB0aGlzIG9sZCBiZWhhdmlvciBpbiBjYXNlIGFueW9uZSBzdGlsbCBuZWVkcyBpdC4KLSAgJChMT0NBTF9JTlNUQUxMRURfTU9EVUxFKTogJCh3b3JkbGlzdCAyLCQod29yZHMgJChteV9pbnN0YWxsZWQpKSwkKG15X2luc3RhbGxlZCkpICQobXlfc3ltbGlua3MpCi0gICQobXlfYWxsX3RhcmdldHMpOiAkKG15X2luc3RhbGxlZCkgJChteV9zeW1saW5rcykKLQotICBteV9ib290X2ltYWdlX21vZHVsZSA6PSAkKExPQ0FMX01PRFVMRSkKLWVuZGlmICAjIG15X2NvcHlfcGFpcnMgIT0gZW1wdHkKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS5tayBiL2NvcmUvamF2YS5tawppbmRleCA1ZmJjOTE2Li40MWExYjFiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEubWsKKysrIGIvY29yZS9qYXZhLm1rCkBAIC0xNDAsOCArMTQwLDcgQEAKIGxvZ3RhZ3NfamF2YV9zb3VyY2VzIDo9ICQocGF0c3Vic3QgJS5sb2d0YWdzLCUuamF2YSwkKGFkZHByZWZpeCAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9sb2d0YWdzLywgJChsb2d0YWdzX3NvdXJjZXMpKSkKIGxvZ3RhZ3Nfc291cmNlcyA6PSAkKGFkZHByZWZpeCAkKExPQ0FMX1BBVEgpLywgJChsb2d0YWdzX3NvdXJjZXMpKQogCi0kKGxvZ3RhZ3NfamF2YV9zb3VyY2VzKTogUFJJVkFURV9NRVJHRURfVEFHIDo9ICQoVEFSR0VUX09VVF9DT01NT05fSU5URVJNRURJQVRFUykvYWxsLWV2ZW50LWxvZy10YWdzLnR4dAotJChsb2d0YWdzX2phdmFfc291cmNlcyk6ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2xvZ3RhZ3MvJS5qYXZhOiAkKExPQ0FMX1BBVEgpLyUubG9ndGFncyAkKFRBUkdFVF9PVVRfQ09NTU9OX0lOVEVSTUVESUFURVMpL2FsbC1ldmVudC1sb2ctdGFncy50eHQgJChKQVZBVEFHUykgYnVpbGQvbWFrZS90b29scy9ldmVudF9sb2dfdGFncy5weQorJChsb2d0YWdzX2phdmFfc291cmNlcyk6ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2xvZ3RhZ3MvJS5qYXZhOiAkKExPQ0FMX1BBVEgpLyUubG9ndGFncyAkKEpBVkFUQUdTKQogCSQodHJhbnNmb3JtLWxvZ3RhZ3MtdG8tamF2YSkKIAogZWxzZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhX2NvbW1vbi5tayBiL2NvcmUvamF2YV9jb21tb24ubWsKaW5kZXggYTIxZjA2Mi4uZjU3NGI3NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhX2NvbW1vbi5taworKysgYi9jb3JlL2phdmFfY29tbW9uLm1rCkBAIC0zMiw3ICszMiw3IEBACiAgICAgZWxzZSBpZm5lcSAoLCQoTE9DQUxfU0RLX1ZFUlNJT04pJChUQVJHRVRfQlVJTERfVVNFX1BSRUJVSUxUX1NES1MpKQogICAgICAgIyBUT0RPKGNjcm9zcyk6IGFsbG93IDEuOSBmb3IgY3VycmVudCBhbmQgdW5idW5kbGVkIG9uY2Ugd2UgaGF2ZSBTREsgc3lzdGVtIG1vZHVsZXMKICAgICAgIExPQ0FMX0pBVkFfTEFOR1VBR0VfVkVSU0lPTiA6PSAxLjgKLSAgICBlbHNlIGlmZXEgKCQoRVhQRVJJTUVOVEFMX1RBUkdFVF9KQVZBX1ZFUlNJT05fMjEpLHRydWUpCisgICAgZWxzZSBpZmVxICgkKFJFTEVBU0VfVEFSR0VUX0pBVkFfMjEpLHRydWUpCiAgICAgICBMT0NBTF9KQVZBX0xBTkdVQUdFX1ZFUlNJT04gOj0gMjEKICAgICBlbHNlCiAgICAgICBMT0NBTF9KQVZBX0xBTkdVQUdFX1ZFUlNJT04gOj0gMTcKZGlmZiAtLWdpdCBhL2NvcmUvbGF5b3V0bGliX2RhdGEubWsgYi9jb3JlL2xheW91dGxpYl9kYXRhLm1rCmluZGV4IGU0MjBhMDAuLmRhYmNmYjIgMTAwNjQ0Ci0tLSBhL2NvcmUvbGF5b3V0bGliX2RhdGEubWsKKysrIGIvY29yZS9sYXlvdXRsaWJfZGF0YS5tawpAQCAtMzEsOCArMzEsMTggQEAKIAkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKQogCSQoaGlkZSkgY3AgLXZmICQ8ICRACiAKLSMgTGlzdCBvZiBhbGwgZGF0YSBmaWxlcyAtIGZvbnQgZmlsZXMsIGZvbnQgY29uZmlndXJhdGlvbiBmaWxlcywga2V5IGNoYXJhY3RlciBtYXAgZmlsZXMKLUxBWU9VVExJQl9GSUxFUyA6PSAkKGZvbnRzX2RldmljZSkgJChmb250X2NvbmZpZykgJChrZXlib2FyZHMpCitIWVBIRU5fVEVNUCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyxoeXBoZW4sSE9TVCxDT01NT04pCisKKyMgVGhlIGh5cGhlbmF0aW9uIHBhdHRlcm4gZmlsZXMgbmVlZGVkIHRvIHN1cHBvcnQgdGV4dCBoeXBoZW5hdGlvbgoraHlwaGVuIDo9ICQoZmlsdGVyICQoVEFSR0VUX09VVCkvdXNyL2h5cGhlbi1kYXRhLyUuaHliLCAkKElOVEVSTkFMX1NZU1RFTUlNQUdFX0ZJTEVTKSkKK2h5cGhlbiA6PSAkKGFkZHByZWZpeCAkKEhZUEhFTl9URU1QKS8sICQobm90ZGlyICQoaHlwaGVuKSkpCisKKyQoaHlwaGVuKTogJChIWVBIRU5fVEVNUCkvJTogJChUQVJHRVRfT1VUKS91c3IvaHlwaGVuLWRhdGEvJQorCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApCisJJChoaWRlKSBjcCAtdmYgJDwgJEAKKworIyBMaXN0IG9mIGFsbCBkYXRhIGZpbGVzIC0gZm9udCBmaWxlcywgZm9udCBjb25maWd1cmF0aW9uIGZpbGVzLCBrZXkgY2hhcmFjdGVyIG1hcCBmaWxlcywgaHlwaGVuYXRpb24gcGF0dGVybiBmaWxlcworTEFZT1VUTElCX0ZJTEVTIDo9ICQoZm9udHNfZGV2aWNlKSAkKGZvbnRfY29uZmlnKSAkKGtleWJvYXJkcykgJChoeXBoZW4pCiAKIC5QSE9OWTogbGF5b3V0bGliIGxheW91dGxpYi10ZXN0cwogbGF5b3V0bGliIGxheW91dGxpYi10ZXN0czogJChMQVlPVVRMSUJfRklMRVMpCkBAIC00MCw2ICs1MCw3IEBACiAkKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGxheW91dGxpYiwgJChmb3JlYWNoIG0sJChmb250c19kZXZpY2UpLCAkKG0pOmxheW91dGxpYl9uYXRpdmUvZm9udHMvJChub3RkaXIgJChtKSkpKQogJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBsYXlvdXRsaWIsICQoZm9yZWFjaCBtLCQoZm9udF9jb25maWcpLCAkKG0pOmxheW91dGxpYl9uYXRpdmUvZm9udHMvJChub3RkaXIgJChtKSkpKQogJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBsYXlvdXRsaWIsICQoZm9yZWFjaCBtLCQoa2V5Ym9hcmRzKSwgJChtKTpsYXlvdXRsaWJfbmF0aXZlL2tleWJvYXJkcy8kKG5vdGRpciAkKG0pKSkpCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGxheW91dGxpYiwgJChmb3JlYWNoIG0sJChoeXBoZW4pLCAkKG0pOmxheW91dGxpYl9uYXRpdmUvaHlwaGVuLWRhdGEvJChub3RkaXIgJChtKSkpKQogCiBGT05UX1RFTVAgOj0KIGZvbnRfY29uZmlnIDo9CkBAIC05NSw2ICsxMDYsNyBAQAogX2xheW91dGxpYl9mb250X2NvbmZpZ19maWxlcyA6PSAkKHNvcnQgJCh3aWxkY2FyZCBmcmFtZXdvcmtzL2Jhc2UvZGF0YS9mb250cy8qLnhtbCkpCiBfbGF5b3V0bGliX2ZvbnRzX2ZpbGVzIDo9ICQoZmlsdGVyICQoVEFSR0VUX09VVCkvZm9udHMvJS50dGYgJChUQVJHRVRfT1VUKS9mb250cy8lLnR0YyAkKFRBUkdFVF9PVVQpL2ZvbnRzLyUub3RmLCAkKElOVEVSTkFMX1NZU1RFTUlNQUdFX0ZJTEVTKSkKIF9sYXlvdXRsaWJfa2V5Ym9hcmRfZmlsZXMgOj0gJChzb3J0ICQod2lsZGNhcmQgZnJhbWV3b3Jrcy9iYXNlL2RhdGEva2V5Ym9hcmRzLyoua2NtKSkKK19sYXlvdXRsaWJfaHlwaGVuX2ZpbGVzIDo9ICQoZmlsdGVyICQoVEFSR0VUX09VVCkvdXNyL2h5cGhlbi1kYXRhLyUuaHliLCAkKElOVEVSTkFMX1NZU1RFTUlNQUdFX0ZJTEVTKSkKIAogIyBGaW5kIG91dCBmaWxlcyBkaXN0ZWQgd2l0aCBsYXlvdXRsaWIgaW4gU29vbmcuCiAjIyMgRmlsdGVyIG91dCBzdGF0aWMgbGlicmFyaWVzIGZvciBXaW5kb3dzIGFuZCBmaWxlcyBhbHJlYWR5IGhhbmRsZWQgaW4gbWFrZS4KQEAgLTEyNCw2ICsxMzYsMTMgQEAKIAkgIGVjaG8gZGF0YS9rZXlib2FyZHMvJChub3RkaXIgJGYpLGZyYW1ld29ya3MvYmFzZS9kYXRhL2tleWJvYXJkcyxwcmVidWlsdF9ldGMsLCwsLCRmLCwsID4+ICRAOyBcCiAJKQogCisJJChmb3JlYWNoIGYsJChfbGF5b3V0bGliX2h5cGhlbl9maWxlcyksIFwKKwkgICQoZXZhbCBfbW9kdWxlX25hbWUgOj0gJChBTExfSU5TVEFMTEVEX0ZJTEVTLiRmKSkgXAorCSAgJChldmFsIF9tb2R1bGVfcGF0aCA6PSAkKHN0cmlwICQoc29ydCAkKEFMTF9NT0RVTEVTLiQoX21vZHVsZV9uYW1lKS5QQVRIKSkpKSBcCisJICAkKGV2YWwgX3Nvb25nX21vZHVsZV90eXBlIDo9ICQoc3RyaXAgJChzb3J0ICQoQUxMX01PRFVMRVMuJChfbW9kdWxlX25hbWUpLlNPT05HX01PRFVMRV9UWVBFKSkpKSBcCisJICBlY2hvIGRhdGEvaHlwaGVuLWRhdGEvJChub3RkaXIgJGYpLCQoX21vZHVsZV9wYXRoKSwkKF9zb29uZ19tb2R1bGVfdHlwZSksLCwsLCRmLCwsID4+ICRAOyBcCisJKQorCiAJJChmb3JlYWNoIGYsJChfbGF5b3V0bGliX2ZpbGVzX2Rpc3RlZF9ieV9zb29uZyksIFwKIAkgICQoZXZhbCBfcHJlYnVpbHRfbW9kdWxlX2ZpbGUgOj0gJChjYWxsIHdvcmQtY29sb24sMSwkZikpIFwKIAkgICQoZXZhbCBfZGlzdF9maWxlIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDIsJGYpKSBcCkBAIC0xNTIsNyArMTcxLDcgQEAKIAogLlBIT05ZOiBsYXlvdXRsaWItc2JvbQogbGF5b3V0bGliLXNib206ICQoTEFZT1VUTElCX1NCT00pL2xheW91dGxpYi5zcGR4Lmpzb24KLSQoTEFZT1VUTElCX1NCT00pL2xheW91dGxpYi5zcGR4Lmpzb246ICQoUFJPRFVDVF9PVVQpL2Fsd2F5c19kaXJ0eV9maWxlLnR4dCAkKEdFTl9TQk9NKSAkKExBWU9VVExJQl9TQk9NKS9zYm9tLW1ldGFkYXRhLmNzdiAkKF9sYXlvdXRsaWJfZm9udF9jb25maWdfZmlsZXMpICQoX2xheW91dGxpYl9mb250c19maWxlcykgJChMQVlPVVRMSUJfQlVJTERfUFJPUCkvbGF5b3V0bGliLWJ1aWxkLnByb3AgJChfbGF5b3V0bGliX2tleWJvYXJkX2ZpbGVzKSAkKExBWU9VVExJQl9SRVNfRklMRVMpICQoRU1VTEFURURfT1ZFUkxBWVNfRklMRVMpICQoREVWSUNFX09WRVJMQVlTX0ZJTEVTKQorJChMQVlPVVRMSUJfU0JPTSkvbGF5b3V0bGliLnNwZHguanNvbjogJChQUk9EVUNUX09VVCkvYWx3YXlzX2RpcnR5X2ZpbGUudHh0ICQoR0VOX1NCT00pICQoTEFZT1VUTElCX1NCT00pL3Nib20tbWV0YWRhdGEuY3N2ICQoX2xheW91dGxpYl9mb250X2NvbmZpZ19maWxlcykgJChfbGF5b3V0bGliX2ZvbnRzX2ZpbGVzKSAkKExBWU9VVExJQl9CVUlMRF9QUk9QKS9sYXlvdXRsaWItYnVpbGQucHJvcCAkKF9sYXlvdXRsaWJfa2V5Ym9hcmRfZmlsZXMpICQoX2xheW91dGxpYl9oeXBoZW5fZmlsZXMpICQoTEFZT1VUTElCX1JFU19GSUxFUykgJChFTVVMQVRFRF9PVkVSTEFZU19GSUxFUykgJChERVZJQ0VfT1ZFUkxBWVNfRklMRVMpCiAJcm0gLXJmICRACiAJJChHRU5fU0JPTSkgLS1vdXRwdXRfZmlsZSAkQCAtLW1ldGFkYXRhICQoTEFZT1VUTElCX1NCT00pL3Nib20tbWV0YWRhdGEuY3N2IC0tYnVpbGRfdmVyc2lvbiAkKEJVSUxEX0ZJTkdFUlBSSU5UX0ZST01fRklMRSkgLS1wcm9kdWN0X21mciAiJChQUk9EVUNUX01BTlVGQUNUVVJFUikiIC0tbW9kdWxlX25hbWUgImxheW91dGxpYiIgLS1qc29uCiAKZGlmZiAtLWdpdCBhL2NvcmUvbWFpbi5tayBiL2NvcmUvbWFpbi5tawppbmRleCBlNWY1YjlkLi42MjRkZjQ5IDEwMDY0NAotLS0gYS9jb3JlL21haW4ubWsKKysrIGIvY29yZS9tYWluLm1rCkBAIC04Myw2ICs4Myw4IEBACiAtaW5jbHVkZSB0ZXN0L2N0cy1yb290L3Rvb2xzL2J1aWxkL2NvbmZpZy5tawogIyBXVlRTLXNwZWNpZmljIGNvbmZpZy4KIC1pbmNsdWRlIHRlc3Qvd3Z0cy90b29scy9idWlsZC9jb25maWcubWsKKyMgRFRTLXNwZWNpZmljIGNvbmZpZy4KKy1pbmNsdWRlIHRlc3QvZHRzL3Rvb2xzL2J1aWxkL2NvbmZpZy5tawogCiAKICMgQ2xlYW4gcnVsZXMKQEAgLTI3NSwxMSArMjc3LDI0IEBACiAjIEluY2x1ZGUgYWxsIG9mIHRoZSBtYWtlZmlsZXMgaW4gdGhlIHN5c3RlbQogIwogCi1zdWJkaXJfbWFrZWZpbGVzIDo9ICQoU09PTkdfT1VUX0RJUikvaW5zdGFsbHMtJChUQVJHRVRfUFJPRFVDVCkkKENPVkVSQUdFX1NVRkZJWCkubWsgJChTT09OR19BTkRST0lEX01LKQorc3ViZGlyX21ha2VmaWxlcyA6PSBcCisgICAgJChTT09OR19PVVRfRElSKS9pbnN0YWxscy0kKFRBUkdFVF9QUk9EVUNUKSQoQ09WRVJBR0VfU1VGRklYKS5tayBcCisgICAgJChTT09OR19BTkRST0lEX01LKSBcCisgICAgYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvYW5kcm9pZC1pbmZvLm1rCiAKICMgQW5kcm9pZC5tayBmaWxlcyBhcmUgb25seSB1c2VkIG9uIExpbnV4IGJ1aWxkcywgTWFjIG9ubHkgc3VwcG9ydHMgQW5kcm9pZC5icAogaWZlcSAoJChIT1NUX09TKSxsaW51eCkKLSAgc3ViZGlyX21ha2VmaWxlcyArPSAkKGZpbGUgPCQoT1VUX0RJUikvLm1vZHVsZV9wYXRocy9BbmRyb2lkLm1rLmxpc3QpCisgIGlmZXEgKCQoUFJPRFVDVF9JR05PUkVfQUxMX0FORFJPSURNSyksdHJ1ZSkKKyAgICBhbGxvd2VkX2FuZHJvaWRta19maWxlcyA6PQorICAgIGlmZGVmIFBST0RVQ1RfQU5EUk9JRE1LX0FMTE9XTElTVF9GSUxFCisgICAgICAtaW5jbHVkZSAkKFBST0RVQ1RfQU5EUk9JRE1LX0FMTE9XTElTVF9GSUxFKQorICAgIGVuZGlmCisgICAgYWxsb3dlZF9hbmRyb2lkbWtfZmlsZXMgKz0gJChQUk9EVUNUX0FMTE9XRURfQU5EUk9JRE1LX0ZJTEVTKQorICAgIHN1YmRpcl9tYWtlZmlsZXMgKz0gJChmaWx0ZXIgJChhbGxvd2VkX2FuZHJvaWRta19maWxlcyksJChmaWxlIDwkKE9VVF9ESVIpLy5tb2R1bGVfcGF0aHMvQW5kcm9pZC5tay5saXN0KSkKKyAgICBhbGxvd2VkX2FuZHJvaWRta19maWxlcyA6PQorICBlbHNlCisgICAgc3ViZGlyX21ha2VmaWxlcyArPSAkKGZpbGUgPCQoT1VUX0RJUikvLm1vZHVsZV9wYXRocy9BbmRyb2lkLm1rLmxpc3QpCisgIGVuZGlmCiBlbmRpZgogCiBzdWJkaXJfbWFrZWZpbGVzICs9ICQoU09PTkdfT1VUX0RJUikvbGF0ZS0kKFRBUkdFVF9QUk9EVUNUKSQoQ09WRVJBR0VfU1VGRklYKS5tawpAQCAtMjkwLDcgKzMwNSw3IEBACiAkKGZvcmVhY2ggbWssJChzdWJkaXJfbWFrZWZpbGVzKSwkKGluZm8gWyQoY2FsbCBpbmNfYW5kX3ByaW50LHN1YmRpcl9tYWtlZmlsZXNfaW5jKS8kKHN1YmRpcl9tYWtlZmlsZXNfdG90YWwpXSBpbmNsdWRpbmcgJChtaykgLi4uKSQoZXZhbCBpbmNsdWRlICQobWspKSkKIAogIyBCdWlsZCBib290bG9hZGVyLmltZy9yYWRpby5pbWcsIGFuZCB1bnBhY2sgdGhlIHBhcnRpdGlvbnMuCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5taworLWluY2x1ZGUgdmVuZG9yL2dvb2dsZS9idWlsZC90YXNrcy90b29scy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5tawogCiAjIEZvciBhbiB1bmJ1bmRsZWQgaW1hZ2UsIHdlIGNhbiBza2lwIGJsdWVwcmludF90b29scyBiZWNhdXNlIHVuYnVuZGxlZCBpbWFnZQogIyBhaW1zIHRvIHJlbW92ZSBhIGxhcmdlIG51bWJlciBmcmFtZXdvcmsgcHJvamVjdHMgZnJvbSB0aGUgbWFuaWZlc3QsIHRoZQpAQCAtOTgxLDggKzk5Niw4IEBACiAjIFJldHVybnMgbW9kdWxlcyBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5IGFzIGEgcmVzdWx0IG9mIGNlcnRhaW4gQm9hcmRDb25maWcKICMgdmFyaWFibGVzIGJlaW5nIHNldC4KIGRlZmluZSBhdXRvLWluY2x1ZGVkLW1vZHVsZXMKLSAgbGxuZGtfaW5fc3lzdGVtIFwKLSAgJChpZiAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSx2ZW5kb3JfbWFuaWZlc3QueG1sKSBcCisgICQoZm9yZWFjaCB2bmRrX3ZlciwkKFBST0RVQ1RfRVhUUkFfVk5ES19WRVJTSU9OUyksY29tLmFuZHJvaWQudm5kay52JCh2bmRrX3ZlcikpIFwKKyAgbGxuZGsubGlicmFyaWVzLnR4dCBcCiAgICQoaWYgJChERVZJQ0VfTUFOSUZFU1RfU0tVUyksJChmb3JlYWNoIHNrdSwgJChERVZJQ0VfTUFOSUZFU1RfU0tVUyksdmVuZG9yX21hbmlmZXN0XyQoc2t1KS54bWwpKSBcCiAgICQoaWYgJChPRE1fTUFOSUZFU1RfRklMRVMpLG9kbV9tYW5pZmVzdC54bWwpIFwKICAgJChpZiAkKE9ETV9NQU5JRkVTVF9TS1VTKSwkKGZvcmVhY2ggc2t1LCAkKE9ETV9NQU5JRkVTVF9TS1VTKSxvZG1fbWFuaWZlc3RfJChza3UpLnhtbCkpIFwKQEAgLTEzODQsNiArMTM5OSw3IEBACiAgICAgJChJTlNUQUxMRURfUkFNRElTS19UQVJHRVQpIFwKICAgICAkKElOU1RBTExFRF9CT09USU1BR0VfVEFSR0VUKSBcCiAgICAgJChJTlNUQUxMRURfSU5JVF9CT09UX0lNQUdFX1RBUkdFVCkgXAorICAgICQoSU5TVEFMTEVEX0RUQk9JTUFHRV9UQVJHRVQpIFwKICAgICAkKElOU1RBTExFRF9SQURJT0lNQUdFX1RBUkdFVCkgXAogICAgICQoSU5TVEFMTEVEX0RFQlVHX1JBTURJU0tfVEFSR0VUKSBcCiAgICAgJChJTlNUQUxMRURfREVCVUdfQk9PVElNQUdFX1RBUkdFVCkgXApAQCAtMTg5OSw3ICsxOTE1LDYgQEAKIAkgICQoZXZhbCBfa2VybmVsX21vZHVsZV9jb3B5X2ZpbGVzIDo9ICQoc29ydCAkKGZpbHRlciAlJChfcGF0aF9vbl9kZXZpY2UpLCQoS0VSTkVMX01PRFVMRV9DT1BZX0ZJTEVTKSkpKSBcCiAJICAkKGV2YWwgX2lzX2J1aWxkX3Byb3AgOj0gJChjYWxsIGlzLWJ1aWxkLXByb3AsJGYpKSBcCiAJICAkKGV2YWwgX2lzX25vdGljZV9maWxlIDo9ICQoY2FsbCBpcy1ub3RpY2UtZmlsZSwkZikpIFwKLQkgICQoZXZhbCBfaXNfZGV4cHJlb3B0X2ltYWdlX3Byb2ZpbGUgOj0gJChpZiAkKGZpbHRlciAlOi8kKF9wYXRoX29uX2RldmljZSksJChERVhQUkVPUFRfSU1BR0VfUFJPRklMRV9CVUlMVF9JTlNUQUxMRUQpKSxZKSkgXAogCSAgJChldmFsIF9pc19wcm9kdWN0X3N5c3RlbV9vdGhlcl9hdmJrZXkgOj0gJChpZiAkKGZpbmRzdHJpbmcgJGYsJChJTlNUQUxMRURfUFJPRFVDVF9TWVNURU1fT1RIRVJfQVZCS0VZX1RBUkdFVCkpLFkpKSBcCiAJICAkKGV2YWwgX2lzX2V2ZW50X2xvZ190YWdzX2ZpbGUgOj0gJChpZiAkKGZpbmRzdHJpbmcgJGYsJChldmVudF9sb2dfdGFnc19maWxlKSksWSkpIFwKIAkgICQoZXZhbCBfaXNfc3lzdGVtX290aGVyX29kZXhfbWFya2VyIDo9ICQoaWYgJChmaW5kc3RyaW5nICRmLCQoSU5TVEFMTEVEX1NZU1RFTV9PVEhFUl9PREVYX01BUktFUikpLFkpKSBcCkBAIC0xOTA5LDcgKzE5MjQsNyBAQAogCSAgJChldmFsIF9pc19wYXJ0aXRpb25fY29tcGF0X3N5bWxpbmsgOj0gJChpZiAkKGZpbmRzdHJpbmcgJGYsJChQQVJUSVRJT05fQ09NUEFUX1NZTUxJTktTKSksWSkpIFwKIAkgICQoZXZhbCBfaXNfZmxhZ3NfZmlsZSA6PSAkKGlmICQoZmluZHN0cmluZyAkZiwgJChBTExfRkxBR1NfRklMRVMpKSxZKSkgXAogCSAgJChldmFsIF9pc19yb290ZGlyX3N5bWxpbmsgOj0gJChpZiAkKGZpbmRzdHJpbmcgJGYsICQoQUxMX1JPT1RESVJfU1lNTElOS1MpKSxZKSkgXAotCSAgJChldmFsIF9pc19wbGF0Zm9ybV9nZW5lcmF0ZWQgOj0gJChfaXNfYnVpbGRfcHJvcCkkKF9pc19ub3RpY2VfZmlsZSkkKF9pc19kZXhwcmVvcHRfaW1hZ2VfcHJvZmlsZSkkKF9pc19wcm9kdWN0X3N5c3RlbV9vdGhlcl9hdmJrZXkpJChfaXNfZXZlbnRfbG9nX3RhZ3NfZmlsZSkkKF9pc19zeXN0ZW1fb3RoZXJfb2RleF9tYXJrZXIpJChfaXNfa2VybmVsX21vZHVsZXNfYmxvY2tsaXN0KSQoX2lzX2ZzdmVyaXR5X2J1aWxkX21hbmlmZXN0X2FwaykkKF9pc19saW5rZXJfY29uZmlnKSQoX2lzX3BhcnRpdGlvbl9jb21wYXRfc3ltbGluaykkKF9pc19mbGFnc19maWxlKSQoX2lzX3Jvb3RkaXJfc3ltbGluaykpIFwKKwkgICQoZXZhbCBfaXNfcGxhdGZvcm1fZ2VuZXJhdGVkIDo9ICQoX2lzX2J1aWxkX3Byb3ApJChfaXNfbm90aWNlX2ZpbGUpJChfaXNfcHJvZHVjdF9zeXN0ZW1fb3RoZXJfYXZia2V5KSQoX2lzX2V2ZW50X2xvZ190YWdzX2ZpbGUpJChfaXNfc3lzdGVtX290aGVyX29kZXhfbWFya2VyKSQoX2lzX2tlcm5lbF9tb2R1bGVzX2Jsb2NrbGlzdCkkKF9pc19mc3Zlcml0eV9idWlsZF9tYW5pZmVzdF9hcGspJChfaXNfbGlua2VyX2NvbmZpZykkKF9pc19wYXJ0aXRpb25fY29tcGF0X3N5bWxpbmspJChfaXNfZmxhZ3NfZmlsZSkkKF9pc19yb290ZGlyX3N5bWxpbmspKSBcCiAJICAkKGV2YWwgX3N0YXRpY19saWJzIDo9ICQoaWYgJChfaXNfc29vbmdfbW9kdWxlKSwsJChBTExfSU5TVEFMTEVEX0ZJTEVTLiRmLlNUQVRJQ19MSUJSQVJJRVMpKSkgXAogCSAgJChldmFsIF93aG9sZV9zdGF0aWNfbGlicyA6PSAkKGlmICQoX2lzX3Nvb25nX21vZHVsZSksLCQoQUxMX0lOU1RBTExFRF9GSUxFUy4kZi5XSE9MRV9TVEFUSUNfTElCUkFSSUVTKSkpIFwKIAkgICQoZXZhbCBfbGljZW5zZV90ZXh0IDo9ICQoaWYgJChmaWx0ZXIgJChfYnVpbGRfb3V0cHV0X3BhdGgpLCQoQUxMX05PTl9NT0RVTEVTKSksJChBTExfTk9OX01PRFVMRVMuJChfYnVpbGRfb3V0cHV0X3BhdGgpLk5PVElDRVMpKSkgXApkaWZmIC0tZ2l0IGEvY29yZS9wYWNrYWdpbmcvZmxhZ3MubWsgYi9jb3JlL3BhY2thZ2luZy9mbGFncy5tawppbmRleCA0NjkzYmNkLi5mZDlkYzliIDEwMDY0NAotLS0gYS9jb3JlL3BhY2thZ2luZy9mbGFncy5taworKysgYi9jb3JlL3BhY2thZ2luZy9mbGFncy5tawpAQCAtMjQsMTAgKzI0LDExIEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEFjb25maWcgRmxhZ3MKIAotIyBDcmVhdGUgYSBzdW1tYXJ5IGZpbGUgb2YgYnVpbGQgZmxhZ3MgZm9yIGVhY2ggcGFydGl0aW9uCisjIENyZWF0ZSBhIHN1bW1hcnkgZmlsZSBvZiBidWlsZCBmbGFncyBmb3IgYSBzaW5nbGUgcGFydGl0aW9uCiAjICQoMSk6IGJ1aWx0IGFjb25maWcgZmxhZ3MgZmlsZSAob3V0KQogIyAkKDIpOiBpbnN0YWxsZWQgYWNvbmZpZyBmbGFncyBmaWxlIChvdXQpCiAjICQoMyk6IHRoZSBwYXJ0aXRpb24gKGluKQorIyAkKDQpOiBpbnB1dCBhY29uZmlnIGZpbGVzIGZvciB0aGUgcGFydGl0aW9uIChpbikKIGRlZmluZSBnZW5lcmF0ZS1wYXJ0aXRpb24tYWNvbmZpZy1mbGFnLWZpbGUKICQoZXZhbCAkKHN0cmlwICQoMSkpOiBQUklWQVRFX09VVCA6PSAkKHN0cmlwICQoMSkpKQogJChldmFsICQoc3RyaXAgJCgxKSk6IFBSSVZBVEVfSU4gOj0gJChzdHJpcCAkKDQpKSkKQEAgLTM1LDcgKzM2LDggQEAKIAlta2RpciAtcCAkJChkaXIgJCQoUFJJVkFURV9PVVQpKQogCSQkKGlmICQkKFBSSVZBVEVfSU4pLCBcCiAJCSQkKEFDT05GSUcpIGR1bXAgLS1kZWR1cCAtLWZvcm1hdCBwcm90b2J1ZiAtLW91dCAkJChQUklWQVRFX09VVCkgXAotCQkJLS1maWx0ZXIgY29udGFpbmVyOiQoc3RyaXAgJCgzKSkgXAorCQkJLS1maWx0ZXIgY29udGFpbmVyOiQoc3RyaXAgJCgzKSkrc3RhdGU6RU5BQkxFRCBcCisJCQktLWZpbHRlciBjb250YWluZXI6JChzdHJpcCAkKDMpKStwZXJtaXNzaW9uOlJFQURfV1JJVEUgXAogCQkJJCQoYWRkcHJlZml4IC0tY2FjaGUgLCQkKFBSSVZBVEVfSU4pKSwgXAogCQllY2hvIC1uID4gJCQoUFJJVkFURV9PVVQpIFwKIAkpCkBAIC05Nyw0MiArOTksNTQgQEAKICMgJCgxKTogYnVpbHQgYWNvbmZpZyBmbGFncyBzdG9yYWdlIHBhY2thZ2UgbWFwIGZpbGUgKG91dCkKICMgJCgyKTogYnVpbHQgYWNvbmZpZyBmbGFncyBzdG9yYWdlIGZsYWcgbWFwIGZpbGUgKG91dCkKICMgJCgzKTogYnVpbHQgYWNvbmZpZyBmbGFncyBzdG9yYWdlIGZsYWcgdmFsIGZpbGUgKG91dCkKLSMgJCg0KTogaW5zdGFsbGVkIGFjb25maWcgZmxhZ3Mgc3RvcmFnZSBwYWNrYWdlIG1hcCBmaWxlIChvdXQpCi0jICQoNSk6IGluc3RhbGxlZCBhY29uZmlnIGZsYWdzIHN0b3JhZ2UgZmxhZyBtYXAgZmlsZSAob3V0KQotIyAkKDYpOiBpbnN0YWxsZWQgYWNvbmZpZyBmbGFncyBzdG9yYWdlIGZsYWcgdmFsdWUgZmlsZSAob3V0KQotIyAkKDcpOiBpbnB1dCBhY29uZmlnIGZpbGVzIGZvciB0aGUgcGFydGl0aW9uIChpbikKLSMgJCg4KTogcGFydGl0aW9uIG5hbWUKKyMgJCg0KTogYnVpbHQgYWNvbmZpZyBmbGFncyBzdG9yYWdlIGZsYWcgaW5mbyBmaWxlIChvdXQpCisjICQoNSk6IGluc3RhbGxlZCBhY29uZmlnIGZsYWdzIHN0b3JhZ2UgcGFja2FnZSBtYXAgZmlsZSAob3V0KQorIyAkKDYpOiBpbnN0YWxsZWQgYWNvbmZpZyBmbGFncyBzdG9yYWdlIGZsYWcgbWFwIGZpbGUgKG91dCkKKyMgJCg3KTogaW5zdGFsbGVkIGFjb25maWcgZmxhZ3Mgc3RvcmFnZSBmbGFnIHZhbHVlIGZpbGUgKG91dCkKKyMgJCg4KTogaW5zdGFsbGVkIGFjb25maWcgZmxhZ3Mgc3RvcmFnZSBmbGFnIGluZm8gZmlsZSAob3V0KQorIyAkKDkpOiBpbnB1dCBhY29uZmlnIGZpbGVzIGZvciB0aGUgcGFydGl0aW9uIChpbikKKyMgJCgxMCk6IHBhcnRpdGlvbiBuYW1lCiBkZWZpbmUgZ2VuZXJhdGUtcGFydGl0aW9uLWFjb25maWctc3RvcmFnZS1maWxlCiAkKGV2YWwgJChzdHJpcCAkKDEpKTogUFJJVkFURV9PVVQgOj0gJChzdHJpcCAkKDEpKSkKLSQoZXZhbCAkKHN0cmlwICQoMSkpOiBQUklWQVRFX0lOIDo9ICQoc3RyaXAgJCg3KSkpCi0kKHN0cmlwICQoMSkpOiAkKEFDT05GSUcpICQoc3RyaXAgJCg3KSkKKyQoZXZhbCAkKHN0cmlwICQoMSkpOiBQUklWQVRFX0lOIDo9ICQoc3RyaXAgJCg5KSkpCiskKHN0cmlwICQoMSkpOiAkKEFDT05GSUcpICQoc3RyaXAgJCg5KSkKIAlta2RpciAtcCAkJChkaXIgJCQoUFJJVkFURV9PVVQpKQogCSQkKGlmICQkKFBSSVZBVEVfSU4pLCBcCi0JCSQkKEFDT05GSUcpIGNyZWF0ZS1zdG9yYWdlIC0tY29udGFpbmVyICQoOCkgLS1maWxlIHBhY2thZ2VfbWFwIC0tb3V0ICQkKFBSSVZBVEVfT1VUKSBcCisJCSQkKEFDT05GSUcpIGNyZWF0ZS1zdG9yYWdlIC0tY29udGFpbmVyICQoMTApIC0tZmlsZSBwYWNrYWdlX21hcCAtLW91dCAkJChQUklWQVRFX09VVCkgXAogCQkJJCQoYWRkcHJlZml4IC0tY2FjaGUgLCQkKFBSSVZBVEVfSU4pKSwgXAogCSkKIAl0b3VjaCAkJChQUklWQVRFX09VVCkKICQoZXZhbCAkKHN0cmlwICQoMikpOiBQUklWQVRFX09VVCA6PSAkKHN0cmlwICQoMikpKQotJChldmFsICQoc3RyaXAgJCgyKSk6IFBSSVZBVEVfSU4gOj0gJChzdHJpcCAkKDcpKSkKLSQoc3RyaXAgJCgyKSk6ICQoQUNPTkZJRykgJChzdHJpcCAkKDcpKQorJChldmFsICQoc3RyaXAgJCgyKSk6IFBSSVZBVEVfSU4gOj0gJChzdHJpcCAkKDkpKSkKKyQoc3RyaXAgJCgyKSk6ICQoQUNPTkZJRykgJChzdHJpcCAkKDkpKQogCW1rZGlyIC1wICQkKGRpciAkJChQUklWQVRFX09VVCkpCiAJJCQoaWYgJCQoUFJJVkFURV9JTiksIFwKLQkJJCQoQUNPTkZJRykgY3JlYXRlLXN0b3JhZ2UgLS1jb250YWluZXIgJCg4KSAtLWZpbGUgZmxhZ19tYXAgLS1vdXQgJCQoUFJJVkFURV9PVVQpIFwKKwkJJCQoQUNPTkZJRykgY3JlYXRlLXN0b3JhZ2UgLS1jb250YWluZXIgJCgxMCkgLS1maWxlIGZsYWdfbWFwIC0tb3V0ICQkKFBSSVZBVEVfT1VUKSBcCiAJCQkkJChhZGRwcmVmaXggLS1jYWNoZSAsJCQoUFJJVkFURV9JTikpLCBcCiAJKQogCXRvdWNoICQkKFBSSVZBVEVfT1VUKQogJChldmFsICQoc3RyaXAgJCgzKSk6IFBSSVZBVEVfT1VUIDo9ICQoc3RyaXAgJCgzKSkpCi0kKGV2YWwgJChzdHJpcCAkKDMpKTogUFJJVkFURV9JTiA6PSAkKHN0cmlwICQoNykpKQotJChzdHJpcCAkKDMpKTogJChBQ09ORklHKSAkKHN0cmlwICQoNykpCiskKGV2YWwgJChzdHJpcCAkKDMpKTogUFJJVkFURV9JTiA6PSAkKHN0cmlwICQoOSkpKQorJChzdHJpcCAkKDMpKTogJChBQ09ORklHKSAkKHN0cmlwICQoOSkpCiAJbWtkaXIgLXAgJCQoZGlyICQkKFBSSVZBVEVfT1VUKSkKIAkkJChpZiAkJChQUklWQVRFX0lOKSwgXAotCQkkJChBQ09ORklHKSBjcmVhdGUtc3RvcmFnZSAtLWNvbnRhaW5lciAkKDgpIC0tZmlsZSBmbGFnX3ZhbCAtLW91dCAkJChQUklWQVRFX09VVCkgXAorCQkkJChBQ09ORklHKSBjcmVhdGUtc3RvcmFnZSAtLWNvbnRhaW5lciAkKDEwKSAtLWZpbGUgZmxhZ192YWwgLS1vdXQgJCQoUFJJVkFURV9PVVQpIFwKIAkJJCQoYWRkcHJlZml4IC0tY2FjaGUgLCQkKFBSSVZBVEVfSU4pKSwgXAogCSkKIAl0b3VjaCAkJChQUklWQVRFX09VVCkKLSQoY2FsbCBjb3B5LW9uZS1maWxlLCAkKHN0cmlwICQoMSkpLCAkKDQpKQotJChjYWxsIGNvcHktb25lLWZpbGUsICQoc3RyaXAgJCgyKSksICQoNSkpCi0kKGNhbGwgY29weS1vbmUtZmlsZSwgJChzdHJpcCAkKDMpKSwgJCg2KSkKKyQoZXZhbCAkKHN0cmlwICQoNCkpOiBQUklWQVRFX09VVCA6PSAkKHN0cmlwICQoNCkpKQorJChldmFsICQoc3RyaXAgJCg0KSk6IFBSSVZBVEVfSU4gOj0gJChzdHJpcCAkKDkpKSkKKyQoc3RyaXAgJCg0KSk6ICQoQUNPTkZJRykgJChzdHJpcCAkKDkpKQorCW1rZGlyIC1wICQkKGRpciAkJChQUklWQVRFX09VVCkpCisJJCQoaWYgJCQoUFJJVkFURV9JTiksIFwKKwkJJCQoQUNPTkZJRykgY3JlYXRlLXN0b3JhZ2UgLS1jb250YWluZXIgJCgxMCkgLS1maWxlIGZsYWdfaW5mbyAtLW91dCAkJChQUklWQVRFX09VVCkgXAorCQkkJChhZGRwcmVmaXggLS1jYWNoZSAsJCQoUFJJVkFURV9JTikpLCBcCisJKQorCXRvdWNoICQkKFBSSVZBVEVfT1VUKQorJChjYWxsIGNvcHktb25lLWZpbGUsICQoc3RyaXAgJCgxKSksICQoNSkpCiskKGNhbGwgY29weS1vbmUtZmlsZSwgJChzdHJpcCAkKDIpKSwgJCg2KSkKKyQoY2FsbCBjb3B5LW9uZS1maWxlLCAkKHN0cmlwICQoMykpLCAkKDcpKQorJChjYWxsIGNvcHktb25lLWZpbGUsICQoc3RyaXAgJCg0KSksICQoOCkpCiBlbmRlZgogCiBpZmVxICgkKFJFTEVBU0VfQ1JFQVRFX0FDT05GSUdfU1RPUkFHRV9GSUxFKSx0cnVlKQpAQCAtMTQwLDEzICsxNTQsMTYgQEAKIAkkKGV2YWwgYWNvbmZpZ19zdG9yYWdlX3BhY2thZ2VfbWFwLiQocGFydGl0aW9uKSA6PSAkKFBST0RVQ1RfT1VUKS8kKHBhcnRpdGlvbikvZXRjL2Fjb25maWcvcGFja2FnZS5tYXApIFwKIAkkKGV2YWwgYWNvbmZpZ19zdG9yYWdlX2ZsYWdfbWFwLiQocGFydGl0aW9uKSA6PSAkKFBST0RVQ1RfT1VUKS8kKHBhcnRpdGlvbikvZXRjL2Fjb25maWcvZmxhZy5tYXApIFwKIAkkKGV2YWwgYWNvbmZpZ19zdG9yYWdlX2ZsYWdfdmFsLiQocGFydGl0aW9uKSA6PSAkKFBST0RVQ1RfT1VUKS8kKHBhcnRpdGlvbikvZXRjL2Fjb25maWcvZmxhZy52YWwpIFwKKwkkKGV2YWwgYWNvbmZpZ19zdG9yYWdlX2ZsYWdfaW5mby4kKHBhcnRpdGlvbikgOj0gJChQUk9EVUNUX09VVCkvJChwYXJ0aXRpb24pL2V0Yy9hY29uZmlnL2ZsYWcuaW5mbykgXAogCSQoZXZhbCAkKGNhbGwgZ2VuZXJhdGUtcGFydGl0aW9uLWFjb25maWctc3RvcmFnZS1maWxlLCBcCiAJCQkJJChUQVJHRVRfT1VUX0ZMQUdTKS8kKHBhcnRpdGlvbikvcGFja2FnZS5tYXAsIFwKIAkJCQkkKFRBUkdFVF9PVVRfRkxBR1MpLyQocGFydGl0aW9uKS9mbGFnLm1hcCwgXAogCQkJCSQoVEFSR0VUX09VVF9GTEFHUykvJChwYXJ0aXRpb24pL2ZsYWcudmFsLCBcCisJCQkJJChUQVJHRVRfT1VUX0ZMQUdTKS8kKHBhcnRpdGlvbikvZmxhZy5pbmZvLCBcCiAJCQkJJChhY29uZmlnX3N0b3JhZ2VfcGFja2FnZV9tYXAuJChwYXJ0aXRpb24pKSwgXAogCQkJCSQoYWNvbmZpZ19zdG9yYWdlX2ZsYWdfbWFwLiQocGFydGl0aW9uKSksIFwKIAkJCQkkKGFjb25maWdfc3RvcmFnZV9mbGFnX3ZhbC4kKHBhcnRpdGlvbikpLCBcCisJCQkJJChhY29uZmlnX3N0b3JhZ2VfZmxhZ19pbmZvLiQocGFydGl0aW9uKSksIFwKIAkJCQkkKGFjb25maWdfZmxhZ19zdW1tYXJpZXNfcHJvdG9idWYuJChwYXJ0aXRpb24pKSwgXAogCQkJCSQocGFydGl0aW9uKSwgXAogCSkpIFwKQEAgLTE2Miw2ICsxNzksNyBAQAogCQkJJChhY29uZmlnX3N0b3JhZ2VfcGFja2FnZV9tYXAuJChwYXJ0aXRpb24pKSBcCiAJCQkkKGFjb25maWdfc3RvcmFnZV9mbGFnX21hcC4kKHBhcnRpdGlvbikpIFwKIAkJCSQoYWNvbmZpZ19zdG9yYWdlX2ZsYWdfdmFsLiQocGFydGl0aW9uKSkgXAorCQkJJChhY29uZmlnX3N0b3JhZ2VfZmxhZ19pbmZvLiQocGFydGl0aW9uKSkgXAogCQkpKQogCiBBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUyArPSAkKHJlcXVpcmVkX2ZsYWdzX2ZpbGVzKQpAQCAtMTgxLDQgKzE5OSw1IEBACiAJJChldmFsIGFjb25maWdfc3RvcmFnZV9wYWNrYWdlX21hcC4kKHBhcnRpdGlvbik6PSkgXAogCSQoZXZhbCBhY29uZmlnX3N0b3JhZ2VfZmxhZ19tYXAuJChwYXJ0aXRpb24pOj0pIFwKIAkkKGV2YWwgYWNvbmZpZ19zdG9yYWdlX2ZsYWdfdmFsLiQocGFydGl0aW9uKTo9KSBcCisJJChldmFsIGFjb25maWdfc3RvcmFnZV9mbGFnX2luZm8uJChwYXJ0aXRpb24pOj0pIFwKICkKZGlmZiAtLWdpdCBhL2NvcmUvcHJvZHVjdC5tayBiL2NvcmUvcHJvZHVjdC5tawppbmRleCBiMDdlNmUwLi4xYjMzNmIwIDEwMDY0NAotLS0gYS9jb3JlL3Byb2R1Y3QubWsKKysrIGIvY29yZS9wcm9kdWN0Lm1rCkBAIC0yODQsNiArMjg0LDkgQEAKICMgV2hldGhlciBBUEVYIHNob3VsZCBiZSBjb21wcmVzc2VkIG9yIG5vdAogX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9DT01QUkVTU0VEX0FQRVgKIAorIyBEZWZhdWx0IGZzIHR5cGUgZm9yIEFQRVggcGF5bG9hZCBpbWFnZSAoYXBleF9wYXlsb2FkLmltZykKK19wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRQorCiAjIFZOREsgdmVyc2lvbiBvZiBwcm9kdWN0IHBhcnRpdGlvbi4gSXQgY2FuIGJlICdjdXJyZW50JyBpZiB0aGUgcHJvZHVjdAogIyBwYXJ0aXRpb25zIHVzZXMgUExBVEZPUk1fVk5ES19WRVJTSU9OLgogX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9QUk9EVUNUX1ZOREtfVkVSU0lPTgpAQCAtMzY2LDYgKzM2OSw4IEBACiBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0JVSUxEX1ZCTUVUQV9JTUFHRQogX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9CVUlMRF9TVVBFUl9FTVBUWV9JTUFHRQogX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9CVUlMRF9QVk1GV19JTUFHRQorX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9CVUlMRF9ERVNLVE9QX1JFQ09WRVJZX0lNQUdFCitfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0JVSUxEX0RFU0tUT1BfVVBEQVRFX0lNQUdFCiAKICMgTGlzdCBvZiBib290IGphcnMgZGVsaXZlcmVkIHZpYSB1cGRhdGFibGUgQVBFWGVzLCBmb2xsb3dpbmcgdGhlIHNhbWUgZm9ybWF0IGFzCiAjIFBST0RVQ1RfQk9PVF9KQVJTLgpAQCAtMzkwLDIwICszOTUsNiBAQAogIyBJZiBzZXQsIEphdmEgbW9kdWxlIGluIHByb2R1Y3QgcGFydGl0aW9uIGNhbm5vdCB1c2UgaGlkZGVuIEFQSXMuCiBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0VORk9SQ0VfUFJPRFVDVF9QQVJUSVRJT05fSU5URVJGQUNFCiAKLSMgSWYgc2V0LCBvbmx5IGphdmFfc2RrX2xpYnJhcnkgY2FuIGJlIHVzZWQgYXQgaW50ZXItcGFydGl0aW9uIGRlcGVuZGVuY3kuCi0jIE5vdGU6IEJ1aWxkIGVycm9yIGlmIEJPQVJEX1ZOREtfVkVSU0lPTiBpcyBub3Qgc2V0IHdoaWxlCi0jICAgICAgIFBST0RVQ1RfRU5GT1JDRV9JTlRFUl9QQVJUSVRJT05fSkFWQV9TREtfTElCUkFSWSBpcyB0cnVlLCBiZWNhdXNlCi0jICAgICAgIFBST0RVQ1RfRU5GT1JDRV9JTlRFUl9QQVJUSVRJT05fSkFWQV9TREtfTElCUkFSWSBoYXMgbm8gbWVhbmluZyBpZgotIyAgICAgICBCT0FSRF9WTkRLX1ZFUlNJT04gaXMgbm90IHNldC4KLSMgTm90ZTogV2hlbiBQUk9EVUNUX0VORk9SQ0VfUFJPRFVDVF9QQVJUSVRJT05fSU5URVJGQUNFIGlzIG5vdCBzZXQsIHRoZXJlIGFyZQotIyAgICAgICBubyByZXN0cmljdGlvbnMgYXQgZGVwZW5kZW5jeSBiZXR3ZWVuIHN5c3RlbSBhbmQgcHJvZHVjdCBwYXJ0aXRpb24uCi1fcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0VORk9SQ0VfSU5URVJfUEFSVElUSU9OX0pBVkFfU0RLX0xJQlJBUlkKLQotIyBBbGxvd2xpc3QgZm9yIFBST0RVQ1RfRU5GT1JDRV9JTlRFUl9QQVJUSVRJT05fSkFWQV9TREtfTElCUkFSWSBvcHRpb24uCi0jIExpc3RlZCBtb2R1bGVzIGFyZSBhbGxvd2VkIGF0IGludGVyLXBhcnRpdGlvbiBkZXBlbmRlbmN5IGV2ZW4gaWYgaXQgaXNuJ3QKLSMgYSBqYXZhX3Nka19saWJyYXJ5IG1vZHVsZS4KLV9wcm9kdWN0X2xpc3RfdmFycyArPSBQUk9EVUNUX0lOVEVSX1BBUlRJVElPTl9KQVZBX0xJQlJBUllfQUxMT1dMSVNUCi0KICMgSW5zdGFsbCBhIGNvcHkgb2YgdGhlIGRlYnVnIHBvbGljeSB0byB0aGUgc3lzdGVtX2V4dCBwYXJ0aXRpb24sIGFuZCBhbGxvdwogIyBpbml0LXNlY29uZC1zdGFnZSB0byBsb2FkIGRlYnVnIHBvbGljeSBmcm9tIHN5c3RlbV9leHQuCiAjIFRoaXMgb3B0aW9uIGlzIG9ubHkgbWVhbnQgdG8gYmUgc2V0IGJ5IGNvbXBsaWFuY2UgR1NJIHRhcmdldHMuCkBAIC00MzYsOCArNDI3LDkgQEAKICMgSWYgdHJ1ZSwgdGhlIGNncm91cCB2MiBoaWVyYXJjaHkgd2lsbCBiZSBzcGxpdCBpbnRvIGFwcHMvc3lzdGVtIHN1YnRyZWVzCiBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0NHUk9VUF9WMl9TWVNfQVBQX0lTT0xBVElPTl9FTkFCTEVECiAKLSMgTGlzdCBvZiAuanNvbiBmaWxlcyB0byBiZSBtZXJnZWQvY29tcGlsZWQgaW50byB2ZW5kb3IvZXRjL2xpbmtlci5jb25maWcucGIKKyMgTGlzdCBvZiAuanNvbiBmaWxlcyB0byBiZSBtZXJnZWQvY29tcGlsZWQgaW50byB2ZW5kb3IvZXRjL2xpbmtlci5jb25maWcucGIgYW5kIHByb2R1Y3QvZXRjL2xpbmtlci5jb25maWcucGIKIF9wcm9kdWN0X2xpc3RfdmFycyArPSBQUk9EVUNUX1ZFTkRPUl9MSU5LRVJfQ09ORklHX0ZSQUdNRU5UUworX3Byb2R1Y3RfbGlzdF92YXJzICs9IFBST0RVQ1RfUFJPRFVDVF9MSU5LRVJfQ09ORklHX0ZSQUdNRU5UUwogCiAjIFdoZXRoZXIgdG8gdXNlIHVzZXJmYXVsdGZkIEdDLgogIyBQb3NzaWJsZSB2YWx1ZXMgYXJlOgpAQCAtNTAzLDYgKzQ5NSwxMyBAQAogIyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHN5c3RlbV9saW5rZXJfY29uZmlnLgogX3Byb2R1Y3RfbGlzdF92YXJzICs9IFBST0RVQ1RfRVhUUkFfU1RVQl9MSUJSQVJJRVMKIAorIyBJZiBzZXQgdG8gdHJ1ZSwgYWxsIEFuZHJvaWQubWsgZmlsZXMgd2lsbCBiZSBpZ25vcmVkLgorX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9JR05PUkVfQUxMX0FORFJPSURNSworIyBXaGVuIFBST0RVQ1RfSUdOT1JFX0FMTF9BTkRST0lETUsgaXMgc2V0IHRvIHRydWUsIHRoaXMgdmFyaWFibGUgd2lsbCBiZSB1c2VkIHRvIGFsbG93IHNvbWUgQW5kcm9pZC5tayBmaWxlcy4KK19wcm9kdWN0X2xpc3RfdmFycyArPSBQUk9EVUNUX0FMTE9XRURfQU5EUk9JRE1LX0ZJTEVTCisjIFdoZW4gUFJPRFVDVF9JR05PUkVfQUxMX0FORFJPSURNSyBpcyBzZXQgdG8gdHJ1ZSwgcGF0aCBvZiBmaWxlIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGFsbG93ZWQgQW5kcm9pZC5tayBmaWxlcworX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9BTkRST0lETUtfQUxMT1dMSVNUX0ZJTEUKKwogLktBVElfUkVBRE9OTFkgOj0gX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgX3Byb2R1Y3RfbGlzdF92YXJzCiBfcHJvZHVjdF92YXJfbGlzdCA6PSQ9ICQoX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMpICQoX3Byb2R1Y3RfbGlzdF92YXJzKQogCmRpZmYgLS1naXQgYS9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rIGIvY29yZS9wcm9kdWN0X2NvbmZpZy5tawppbmRleCA3MzhkNGNmLi5mOTNiNjNjIDEwMDY0NAotLS0gYS9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rCisrKyBiL2NvcmUvcHJvZHVjdF9jb25maWcubWsKQEAgLTQyNCwxMCArNDI0LDEyIEBACiAgIGVuZGlmCiBlbmRpZgogCi0kKGZvcmVhY2ggcGFpciwkKFBST0RVQ1RfQVBFWF9CT09UX0pBUlMpLCBcCi0gICQoZXZhbCBqYXIgOj0gJChjYWxsIHdvcmQtY29sb24sMiwkKHBhaXIpKSkgXAotICAkKGlmICQoZmluZHN0cmluZyAkKGphciksICQoUFJPRFVDVF9CT09UX0pBUlMpKSwgXAotICAgICQoZXJyb3IgQSBqYXIgaW4gUFJPRFVDVF9BUEVYX0JPT1RfSkFSUyBtdXN0IG5vdCBiZSBpbiBQUk9EVUNUX0JPT1RfSkFSUywgYnV0ICQoamFyKSBpcykpKQorJChmb3JlYWNoIGFwZXhwYWlyLCQoUFJPRFVDVF9BUEVYX0JPT1RfSkFSUyksIFwKKyAgJChmb3JlYWNoIHBsYXRmb3JtcGFpciwkKFBST0RVQ1RfQk9PVF9KQVJTKSwgXAorICAgICQoZXZhbCBhcGV4amFyIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDIsJChhcGV4cGFpcikpKSBcCisgICAgJChldmFsIHBsYXRmb3JtamFyIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDIsJChwbGF0Zm9ybXBhaXIpKSkgXAorICAgICQoaWYgJChmaWx0ZXIgJChhcGV4amFyKSwgJChwbGF0Zm9ybWphcikpLCBcCisgICAgICAkKGVycm9yIEEgamFyIGluIFBST0RVQ1RfQVBFWF9CT09UX0pBUlMgbXVzdCBub3QgYmUgaW4gUFJPRFVDVF9CT09UX0pBUlMsIGJ1dCAkKGFwZXhqYXIpIGlzKSkpKQogCiBFTkZPUkNFX1NZU1RFTV9DRVJUSUZJQ0FURSA6PSAkKFBST0RVQ1RfRU5GT1JDRV9BUlRJRkFDVF9TWVNURU1fQ0VSVElGSUNBVEVfUkVRVUlSRU1FTlQpCiBFTkZPUkNFX1NZU1RFTV9DRVJUSUZJQ0FURV9BTExPV19MSVNUIDo9ICQoUFJPRFVDVF9BUlRJRkFDVF9TWVNURU1fQ0VSVElGSUNBVEVfUkVRVUlSRU1FTlRfQUxMT1dfTElTVCkKQEAgLTQ2NiwxNyArNDY4LDI2IEBACiAgICAgJChldmFsIFNBTklUSVpFUi4kKFRBUkdFVF9QUk9EVUNUKS4kKG0pLkNPTkZJRyA6PSAkKGNmKSkpKQogX3BzbWNfbW9kdWxlcyA6PQogCi0jIFJlc2V0IEFEQiBrZXlzIGZvciBub24tZGVidWdnYWJsZSBidWlsZHMKLWlmZXEgKCwkKGZpbHRlciBlbmcgdXNlcmRlYnVnLCQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpKSkKKyMgUmVzZXQgQURCIGtleXMuIElmIFJFTEVBU0VfQlVJTERfVVNFX1ZBUklBTlRfRkxBR1MgaXMgc2V0IGxvb2sgZm9yCisjIHRoZSB2YWx1ZSBvZiBhIGRlZGljYXRlZCBmbGFnLiBPdGhlcndpc2UgY2hlY2sgaWYgYnVpbGQgdmFyaWFudCBpcworIyBub24tZGVidWdnYWJsZS4KK2lmbmVxICgsJChSRUxFQVNFX0JVSUxEX1VTRV9WQVJJQU5UX0ZMQUdTKSkKK2lmbmVxICgsJChSRUxFQVNFX0JVSUxEX1BVUkdFX1BST0RVQ1RfQURCX0tFWVMpKQogICBQUk9EVUNUX0FEQl9LRVlTIDo9CiBlbmRpZgorZWxzZSBpZmVxICgsJChmaWx0ZXIgZW5nIHVzZXJkZWJ1ZywkKFRBUkdFVF9CVUlMRF9WQVJJQU5UKSkpCisgIFBST0RVQ1RfQURCX0tFWVMgOj0KK2VuZGlmCisKIGlmbmVxICgkKGZpbHRlci1vdXQgMCAxLCQod29yZHMgJChQUk9EVUNUX0FEQl9LRVlTKSkpLCkKICAgJChlcnJvciBPbmx5IG9uZSBmaWxlIG1heSBiZSBpbiBQUk9EVUNUX0FEQl9LRVlTOiAkKFBST0RVQ1RfQURCX0tFWVMpKQogZW5kaWYKIAogIyBTaG93IGEgd2FybmluZyB3YWxsIG9mIHRleHQgaWYgbm9uLWNvbXBsaWFuY2UtR1NJIHByb2R1Y3RzIHNldCB0aGlzIG9wdGlvbi4KIGlmZGVmIFBST0RVQ1RfSU5TVEFMTF9ERUJVR19QT0xJQ1lfVE9fU1lTVEVNX0VYVAotICBpZmVxICgsJChmaWx0ZXIgZ3NpX2FybSBnc2lfYXJtNjQgZ3NpX3g4NiBnc2lfeDg2XzY0IGdzaV9jYXJfYXJtNjQgZ3NpX2Nhcl94ODZfNjQgZ3NpX3R2X2FybSBnc2lfdHZfYXJtNjQsJChQUk9EVUNUX05BTUUpKSkKKyAgaWZlcSAoLCQoZmlsdGVyIGdzaV9hcm0gZ3NpX2FybTY0IGdzaV9hcm02NF9zb29uZ19zeXN0ZW0gZ3NpX3g4NiBnc2lfeDg2XzY0IFwKKyAgICAgICAgICAgICAgICAgIGdzaV94ODZfNjRfc29vbmdfc3lzdGVtIGdzaV9jYXJfYXJtNjQgZ3NpX2Nhcl94ODZfNjQgXAorICAgICAgICAgICAgICAgICAgZ3NpX3R2X2FybSBnc2lfdHZfYXJtNjQsJChQUk9EVUNUX05BTUUpKSkKICAgICAkKHdhcm5pbmcgUFJPRFVDVF9JTlNUQUxMX0RFQlVHX1BPTElDWV9UT19TWVNURU1fRVhUIGlzIHNldCBidXQgXAogICAgICAgUFJPRFVDVF9OQU1FICgkKFBST0RVQ1RfTkFNRSkpIGRvZXNuJ3QgbG9vayBsaWtlIGEgR1NJIGZvciBjb21wbGlhbmNlIFwKICAgICAgIHRlc3RpbmcuIFRoaXMgaXMgYSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gZm9yIGNvbXBsaWFuY2UgR1NJLCBzbyBkbyBtYWtlIFwKQEAgLTUzMiw2ICs1NDMsMTcgQEAKICAgUFJPRFVDVF9DT01QUkVTU0VEX0FQRVggOj0gJChPVkVSUklERV9QUk9EVUNUX0NPTVBSRVNTRURfQVBFWCkKIGVuZGlmCiAKK2lmZGVmIE9WRVJSSURFX1BST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRQorICBQUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUgOj0gJChPVkVSUklERV9QUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUpCitlbHNlIGlmZXEgKCQoUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFKSwpCisgICMgVXNlIGV4dDQgYXMgYSBkZWZhdWx0IHBheWxvYWQgZnMgdHlwZQorICBQUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUgOj0gZXh0NAorZW5kaWYKK2lmZXEgKCQoZmlsdGVyIGV4dDQgZXJvZnMsJChQUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUpKSwpCisgICQoZXJyb3IgUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFIHNob3VsZCBiZSBlaXRoZXIgZXJvZnMgb3IgZXh0NCxcCisgICAgbm90ICQoUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFKS4pCitlbmRpZgorCiAkKEtBVElfb2Jzb2xldGVfdmFyIE9WRVJSSURFX1BST0RVQ1RfRVhUUkFfVk5ES19WRVJTSU9OUyBcCiAgICAgLFVzZSBQUk9EVUNUX0VYVFJBX1ZOREtfVkVSU0lPTlMgaW5zdGVhZCkKIApAQCAtNjAyLDcgKzYyNCwxMiBAQAogICAgICMgVmVuZG9ycyB3aXRoIEdSRiBtdXN0IGRlZmluZSBCT0FSRF9TSElQUElOR19BUElfTEVWRUwgZm9yIHRoZSB2ZW5kb3IgQVBJIGxldmVsLgogICAgICMgSW4gdGhpcyBjYXNlLCB0aGUgVlNSIEFQSSBsZXZlbCBpcyB0aGUgbWluaW11bSBvZiB0aGUgUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwKICAgICAjIGFuZCBSRUxFQVNFX0JPQVJEX0FQSV9MRVZFTAotICAgIFZTUl9WRU5ET1JfQVBJX0xFVkVMIDo9ICQoY2FsbCBtYXRoX21pbiwkKFZTUl9WRU5ET1JfQVBJX0xFVkVMKSwkKFJFTEVBU0VfQk9BUkRfQVBJX0xFVkVMKSkKKyAgICBib2FyZF9hcGlfbGV2ZWwgOj0gJChSRUxFQVNFX0JPQVJEX0FQSV9MRVZFTCkKKyAgICBpZmRlZiBCT0FSRF9BUElfTEVWRUxfUFJPUF9PVkVSUklERQorICAgICAgYm9hcmRfYXBpX2xldmVsIDo9ICQoQk9BUkRfQVBJX0xFVkVMX1BST1BfT1ZFUlJJREUpCisgICAgZW5kaWYKKyAgICBWU1JfVkVORE9SX0FQSV9MRVZFTCA6PSAkKGNhbGwgbWF0aF9taW4sJChWU1JfVkVORE9SX0FQSV9MRVZFTCksJChib2FyZF9hcGlfbGV2ZWwpKQorICAgIGJvYXJkX2FwaV9sZXZlbCA6PQogICBlbmRpZgogZW5kaWYKIC5LQVRJX1JFQURPTkxZIDo9IFZTUl9WRU5ET1JfQVBJX0xFVkVMCmRpZmYgLS1naXQgYS9jb3JlL3Byb2d1YXJkLmZsYWdzIGIvY29yZS9wcm9ndWFyZC5mbGFncwppbmRleCBhYTQwNmI5Li41MTQ4ZTU2IDEwMDY0NAotLS0gYS9jb3JlL3Byb2d1YXJkLmZsYWdzCisrKyBiL2NvcmUvcHJvZ3VhcmQuZmxhZ3MKQEAgLTM4LDYgKzM4LDE3IEBACiAgIEBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5LZWVwRm9yV2Vha1JlZmVyZW5jZSA8ZmllbGRzPjsKIH0KIAorIyBOZWVkZWQgdG8gZW5zdXJlIGNhbGxiYWNrIGZpZWxkIHJlZmVyZW5jZXMgYXJlIGtlcHQgaW4gdGhlaXIgcmVzcGVjdGl2ZQorIyBvd25pbmcgY2xhc3NlcyB3aGVuIHRoZSBkb3duc3RyZWFtIGNhbGxiYWNrIHJlZ2lzdHJhcnMgb25seSBzdG9yZSB3ZWFrIHJlZnMuCistaWYgQGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLldlYWtseVJlZmVyZW5jZWRDYWxsYmFjayBjbGFzcyAqCista2VlcGNsYXNzbWVtYmVycyxhbGxvd2FjY2Vzc21vZGlmaWNhdGlvbiBjbGFzcyAqIHsKKyAgPDE+ICo7Cit9CistaWYgY2xhc3MgKiBleHRlbmRzIEBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5XZWFrbHlSZWZlcmVuY2VkQ2FsbGJhY2sgKioKKy1rZWVwY2xhc3NtZW1iZXJzLGFsbG93YWNjZXNzbW9kaWZpY2F0aW9uIGNsYXNzICogeworICA8MT4gKjsKK30KKwogIyBVbmRlcnN0YW5kIHRoZSBjb21tb24gQEtlZXAgYW5ub3RhdGlvbiBmcm9tIHZhcmlvdXMgQW5kcm9pZCBwYWNrYWdlczoKICMgICogYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24KICMgICogYW5kcm9pZHguYW5ub3RhdGlvbgpkaWZmIC0tZ2l0IGEvY29yZS9wcm9qZWN0X2RlZmluaXRpb25zLm1rIGIvY29yZS9wcm9qZWN0X2RlZmluaXRpb25zLm1rCmluZGV4IDU3MjhiNjcuLjE4NGIwM2UgMTAwNjQ0Ci0tLSBhL2NvcmUvcHJvamVjdF9kZWZpbml0aW9ucy5taworKysgYi9jb3JlL3Byb2plY3RfZGVmaW5pdGlvbnMubWsKQEAgLTIyLDMgKzIyLDYgQEAKICMgSW5jbHVkZSBkZWZpbml0aW9ucyBmb3IgcHJlYnVpbHQgU0RLLCBpZiBwcmVzZW50LgogIwogLWluY2x1ZGUgcHJlYnVpbHRzL3Nkay9jdXJyZW50L2RlZmluaXRpb25zLm1rCisKKyMgU0RWLXNwZWNpZmljIGNvbmZpZy4KKy1pbmNsdWRlIHN5c3RlbS9zb2Z0d2FyZV9kZWZpbmVkX3ZlaGljbGUvcGxhdGZvcm0vY29uZmlnLm1rCmRpZmYgLS1naXQgYS9jb3JlL3JhdmVud29vZF90ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwgYi9jb3JlL3JhdmVud29vZF90ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwKaW5kZXggMmYyMWJhZS4uOWU5ZGQ3NiAxMDA2NDQKLS0tIGEvY29yZS9yYXZlbndvb2RfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sCisrKyBiL2NvcmUvcmF2ZW53b29kX3Rlc3RfY29uZmlnX3RlbXBsYXRlLnhtbApAQCAtMjIsNiArMjIsNyBAQAogICAgIDxvcHRpb24gbmFtZT0idXNlLXJhdmVud29vZC1yZXNvdXJjZXMiIHZhbHVlPSJ0cnVlIiAvPgogICAgIDxvcHRpb24gbmFtZT0iZXhjbHVkZS1wYXRocyIgdmFsdWU9ImphdmEiIC8+CiAgICAgPG9wdGlvbiBuYW1lPSJudWxsLWRldmljZSIgdmFsdWU9InRydWUiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJkby1ub3Qtc3dhbGxvdy1ydW5uZXItZXJyb3JzIiB2YWx1ZT0idHJ1ZSIgLz4KIAogICAgIHtFWFRSQV9DT05GSUdTfQogCmRpZmYgLS1naXQgYS9jb3JlL3JvYm9sZWN0cmljX3Rlc3RfY29uZmlnX3RlbXBsYXRlLnhtbCBiL2NvcmUvcm9ib2xlY3RyaWNfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sCmluZGV4IGIxZDBjMmYuLjE5NTZiNmUgMTAwNjQ0Ci0tLSBhL2NvcmUvcm9ib2xlY3RyaWNfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sCisrKyBiL2NvcmUvcm9ib2xlY3RyaWNfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sCkBAIC0yMiw2ICsyMiwxMyBAQAogICAgIDxvcHRpb24gbmFtZT0iZXhjbHVkZS1wYXRocyIgdmFsdWU9ImphdmEiIC8+CiAgICAgPG9wdGlvbiBuYW1lPSJ1c2Utcm9ib2xlY3RyaWMtcmVzb3VyY2VzIiB2YWx1ZT0idHJ1ZSIgLz4KIAorICAgIDwhLS0gYXR0ZW1wdCB0byBhbHdheXMgc2hvdyBUcmFkZWZlZCBlcnJvcnMgLS0+CisgICAgPG9wdGlvbiBuYW1lPSJkby1ub3Qtc3dhbGxvdy1ydW5uZXItZXJyb3JzIiB2YWx1ZT0idHJ1ZSIgLz4KKworICAgIDwhLS0gcHJldmVudCBUcmFkZWZlZCBmcm9tIGhhbmdpbmcgaW5kZWZpbml0ZWx5IGluIENJIC0tPgorICAgIDxvcHRpb24gbmFtZT0ic29ja2V0LXRpbWVvdXQiIHZhbHVlPSI2MDAwMDAiIC8+CisgICAgPG9wdGlvbiBuYW1lPSJ0ZXN0LWNhc2UtdGltZW91dCIgdmFsdWU9IjJtIiAvPgorCiAgICAge0VYVFJBX0NPTkZJR1N9CiAKICAgICA8dGVzdCBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGVzdHR5cGUuSXNvbGF0ZWRIb3N0VGVzdCIgPgpAQCAtMzMsNSArNDAsMTUgQEAKICAgICAgICAgPG9wdGlvbiBuYW1lPSJqYXZhLWZsYWdzIiB2YWx1ZT0iLS1hZGQtb3BlbnM9amF2YS5iYXNlL2pkay5pbnRlcm5hbC51dGlsLnJhbmRvbT1BTEwtVU5OQU1FRCIvPgogICAgICAgICA8IS0tIGIvMjUxMzg3MjU1IC0tPgogICAgICAgICA8b3B0aW9uIG5hbWU9ImphdmEtZmxhZ3MiIHZhbHVlPSItLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5pbz1BTEwtVU5OQU1FRCIvPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImphdmEtZmxhZ3MiIHZhbHVlPSItLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5uZXQ9QUxMLVVOTkFNRUQiLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJqYXZhLWZsYWdzIiB2YWx1ZT0iLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEubmlvPUFMTC1VTk5BTUVEIi8+IDwhLS0gcmVxdWlyZWQgZm9yIFNoYWRvd1ZNUnVudGltZSAtLT4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJqYXZhLWZsYWdzIiB2YWx1ZT0iLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEuc2VjdXJpdHk9QUxMLVVOTkFNRUQiLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJqYXZhLWZsYWdzIiB2YWx1ZT0iLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudGV4dD1BTEwtVU5OQU1FRCIvPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImphdmEtZmxhZ3MiIHZhbHVlPSItLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS51dGlsPUFMTC1VTk5BTUVEIi8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW9wZW5zPWphdmEuYmFzZS9qZGsuaW50ZXJuYWwuYWNjZXNzPUFMTC1VTk5BTUVEIi8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW9wZW5zPWphdmEuZGVza3RvcC9qYXZhLmF3dC5mb250PUFMTC1VTk5BTUVEIi8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW9wZW5zPWpkay5jb21waWxlci9jb20uc3VuLnRvb2xzLmphdmFjLmFwaT1BTEwtVU5OQU1FRCIvPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImphdmEtZmxhZ3MiIHZhbHVlPSItLWFkZC1vcGVucz1qZGsuY29tcGlsZXIvY29tLnN1bi50b29scy5qYXZhYy5tYWluPUFMTC1VTk5BTUVEIi8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW9wZW5zPWpkay5jb21waWxlci9jb20uc3VuLnRvb2xzLmphdmFjLnV0aWw9QUxMLVVOTkFNRUQiLz4KICAgICA8L3Rlc3Q+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9jb3JlL3Nvb25nX2FwcF9wcmVidWlsdC5tayBiL2NvcmUvc29vbmdfYXBwX3ByZWJ1aWx0Lm1rCmluZGV4IGRmMWNmMmQuLmFiOTIyN2YgMTAwNjQ0Ci0tLSBhL2NvcmUvc29vbmdfYXBwX3ByZWJ1aWx0Lm1rCisrKyBiL2NvcmUvc29vbmdfYXBwX3ByZWJ1aWx0Lm1rCkBAIC0yMjQsMzAgKzIyNCw2IEBACiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9saW5rX3R5cGUubWsKIGVuZGlmICMgIUxPQ0FMX0lTX0hPU1RfTU9EVUxFCiAKLWlmZXEgKCwkKGZpbHRlciB0ZXN0cywkKExPQ0FMX01PRFVMRV9UQUdTKSkpCi0gIGlmZGVmIExPQ0FMX1NPT05HX0RFVklDRV9SUk9fRElSUwotICAgICQoY2FsbCBhcHBlbmRfZW5mb3JjZV9ycm9fc291cmNlcywgXAotICAgICAgICAkKG15X3JlZ2lzdGVyX25hbWUpLCBcCi0gICAgICAgIGZhbHNlLCBcCi0gICAgICAgICQoTE9DQUxfRlVMTF9NQU5JRkVTVF9GSUxFKSwgXAotICAgICAgICAkKGlmICQoTE9DQUxfRVhQT1JUX1BBQ0tBR0VfUkVTT1VSQ0VTKSx0cnVlLGZhbHNlKSwgXAotICAgICAgICAkKExPQ0FMX1NPT05HX0RFVklDRV9SUk9fRElSUyksIFwKLSAgICAgICAgdmVuZG9yIFwKLSAgICApCi0gIGVuZGlmCi0KLSAgaWZkZWYgTE9DQUxfU09PTkdfUFJPRFVDVF9SUk9fRElSUwotICAgICQoY2FsbCBhcHBlbmRfZW5mb3JjZV9ycm9fc291cmNlcywgXAotICAgICAgICAkKG15X3JlZ2lzdGVyX25hbWUpLCBcCi0gICAgICAgIGZhbHNlLCBcCi0gICAgICAgICQoTE9DQUxfRlVMTF9NQU5JRkVTVF9GSUxFKSwgXAotICAgICAgICAkKGlmICQoTE9DQUxfRVhQT1JUX1BBQ0tBR0VfUkVTT1VSQ0VTKSx0cnVlLGZhbHNlKSwgXAotICAgICAgICAkKExPQ0FMX1NPT05HX1BST0RVQ1RfUlJPX0RJUlMpLCBcCi0gICAgICAgIHByb2R1Y3QgXAotICAgICkKLSAgZW5kaWYKLWVuZGlmCi0KIGlmZGVmIExPQ0FMX1BSRUJVSUxUX0NPVkVSQUdFX0FSQ0hJVkUKICAgbXlfY292ZXJhZ2VfZGlyIDo9ICQoVEFSR0VUX09VVF9DT1ZFUkFHRSkvJChwYXRzdWJzdCAkKFBST0RVQ1RfT1VUKS8lLCUsJChteV9tb2R1bGVfcGF0aCkpCiAgIG15X2NvdmVyYWdlX2NvcHlfcGFpcnMgOj0gJChmb3JlYWNoIGYsJChMT0NBTF9QUkVCVUlMVF9DT1ZFUkFHRV9BUkNISVZFKSwkKGYpOiQobXlfY292ZXJhZ2VfZGlyKS8kKG5vdGRpciAgJChmKSkpCmRpZmYgLS1naXQgYS9jb3JlL3Nvb25nX2NvbmZpZy5tayBiL2NvcmUvc29vbmdfY29uZmlnLm1rCmluZGV4IDFlNjM4OGEuLmEwMDc4ODggMTAwNjQ0Ci0tLSBhL2NvcmUvc29vbmdfY29uZmlnLm1rCisrKyBiL2NvcmUvc29vbmdfY29uZmlnLm1rCkBAIC0xNTAsNiArMTUwLDcgQEAKICQoY2FsbCBhZGRfanNvbl9zdHIsICBCdENvbmZpZ0luY2x1ZGVEaXIsICAgICAgICAgICAgICAgICQoQk9BUkRfQkxVRVRPT1RIX0JEUk9JRF9CVUlMRENGR19JTkNMVURFX0RJUikpCiAkKGNhbGwgYWRkX2pzb25fbGlzdCwgRGV2aWNlS2VybmVsSGVhZGVycywgICAgICAgICAgICAgICAkKFRBUkdFVF9ERVZJQ0VfS0VSTkVMX0hFQURFUlMpICQoVEFSR0VUX0JPQVJEX0tFUk5FTF9IRUFERVJTKSAkKFRBUkdFVF9QUk9EVUNUX0tFUk5FTF9IRUFERVJTKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBWZW5kb3JBcGlMZXZlbCwgICAgICAgICAgICAgICAgICAgICQoQk9BUkRfQVBJX0xFVkVMKSkKKyQoY2FsbCBhZGRfanNvbl9zdHIsICBWZW5kb3JBcGlMZXZlbFByb3BPdmVycmlkZSwgICAgICAgICQoQk9BUkRfQVBJX0xFVkVMX1BST1BfT1ZFUlJJREUpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIEV4dHJhVm5ka1ZlcnNpb25zLCAgICAgICAgICAgICAgICAgJChQUk9EVUNUX0VYVFJBX1ZOREtfVkVSU0lPTlMpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIERldmljZVN5c3RlbVNka1ZlcnNpb25zLCAgICAgICAgICAgJChCT0FSRF9TWVNURU1TREtfVkVSU0lPTlMpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIFBsYXRmb3JtX3N5c3RlbXNka192ZXJzaW9ucywgICAgICAgJChQTEFURk9STV9TWVNURU1TREtfVkVSU0lPTlMpKQpAQCAtMTgyLDEwICsxODMsMTkgQEAKIAogJChjYWxsIGFkZF9qc29uX2Jvb2wsIFVtbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChmaWx0ZXIgdHJ1ZSwkKFRBUkdFVF9VU0VSX01PREVfTElOVVgpKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBWZW5kb3JQYXRoLCAgICAgICAgICAgICAgICAgICAgICAgICQoVEFSR0VUX0NPUFlfT1VUX1ZFTkRPUikpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgVmVuZG9yRGxrbVBhdGgsICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9WRU5ET1JfRExLTSkpCiskKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdWZW5kb3JJbWFnZSwgICAgICAgICAgICAgICAkKEJVSUxESU5HX1ZFTkRPUl9JTUFHRSkpCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgT2RtUGF0aCwgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9PRE0pKQorJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nT2RtSW1hZ2UsICAgICAgICAgICAgICAgICAgJChCVUlMRElOR19PRE1fSU1BR0UpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIE9kbURsa21QYXRoLCAgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfT0RNX0RMS00pKQogJChjYWxsIGFkZF9qc29uX3N0ciwgIFByb2R1Y3RQYXRoLCAgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVCkpCiskKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdQcm9kdWN0SW1hZ2UsICAgICAgICAgICAgICAkKEJVSUxESU5HX1BST0RVQ1RfSU1BR0UpKQogJChjYWxsIGFkZF9qc29uX3N0ciwgIFN5c3RlbUV4dFBhdGgsICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfU1lTVEVNX0VYVCkpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgU3lzdGVtRGxrbVBhdGgsICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9TWVNURU1fRExLTSkpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgT2VtUGF0aCwgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9PRU0pKQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIE1pbmltaXplSmF2YURlYnVnSW5mbywgICAgICAgICAgICAgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfTUlOSU1JWkVfSkFWQV9ERUJVR19JTkZPKSkpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgUmVjb3ZlcnlQYXRoLCAgICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9SRUNPVkVSWSkpCiskKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdSZWNvdmVyeUltYWdlLCAgICAgICAgICAgICAkKEJVSUxESU5HX1JFQ09WRVJZX0lNQUdFKSkKIAogJChjYWxsIGFkZF9qc29uX2Jvb2wsIFVzZUdvbWEsICAgICAgICAgICAgICAgICAgICAgICAgICAgJChmaWx0ZXItb3V0IGZhbHNlLCQoVVNFX0dPTUEpKSkKICQoY2FsbCBhZGRfanNvbl9ib29sLCBVc2VSQkUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZmlsdGVyLW91dCBmYWxzZSwkKFVTRV9SQkUpKSkKQEAgLTI2NSwxNCArMjc1LDggQEAKICQoY2FsbCBhZGRfanNvbl9ib29sLCBFbmZvcmNlUHJvZHVjdFBhcnRpdGlvbkludGVyZmFjZSwgICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX0VORk9SQ0VfUFJPRFVDVF9QQVJUSVRJT05fSU5URVJGQUNFKSkpCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgRGV2aWNlQ3VycmVudEFwaUxldmVsRm9yVmVuZG9yTW9kdWxlcywgICQoQk9BUkRfQ1VSUkVOVF9BUElfTEVWRUxfRk9SX1ZFTkRPUl9NT0RVTEVTKSkKIAotJChjYWxsIGFkZF9qc29uX2Jvb2wsIEVuZm9yY2VJbnRlclBhcnRpdGlvbkphdmFTZGtMaWJyYXJ5LCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9FTkZPUkNFX0lOVEVSX1BBUlRJVElPTl9KQVZBX1NES19MSUJSQVJZKSkpCi0kKGNhbGwgYWRkX2pzb25fbGlzdCwgSW50ZXJQYXJ0aXRpb25KYXZhTGlicmFyeUFsbG93TGlzdCwgJChQUk9EVUNUX0lOVEVSX1BBUlRJVElPTl9KQVZBX0xJQlJBUllfQUxMT1dMSVNUKSkKLQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIENvbXByZXNzZWRBcGV4LCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9DT01QUkVTU0VEX0FQRVgpKSkKLQotaWZuZGVmIEFQRVhfQlVJTERfRk9SX1BSRV9TX0RFVklDRVMKLSQoY2FsbCBhZGRfanNvbl9ib29sLCBUcmltbWVkQXBleCwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfVFJJTU1FRF9BUEVYKSkpCi1lbmRpZgorJChjYWxsIGFkZF9qc29uX3N0ciwgRGVmYXVsdEFwZXhQYXlsb2FkVHlwZSwgJChQUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUpKQogCiAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQm9hcmRVc2VzUmVjb3ZlcnlBc0Jvb3QsICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QpKSkKIApAQCAtMzE5LDYgKzMyMyw4IEBACiAKICQoY2FsbCBhZGRfanNvbl9zdHIsICBQcm9kdWN0TWFudWZhY3R1cmVyLCAkKFBST0RVQ1RfTUFOVUZBQ1RVUkVSKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBQcm9kdWN0QnJhbmQsICAgICAgICAkKFBST0RVQ1RfQlJBTkQpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIFByb2R1Y3REZXZpY2UsICAgICAgICQoUFJPRFVDVF9ERVZJQ0UpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIFByb2R1Y3RNb2RlbCwgICAgICAgICQoUFJPRFVDVF9NT0RFTCkpCiAKICQoY2FsbCBhZGRfanNvbl9zdHIsIFJlbGVhc2VWZXJzaW9uLCAgICAkKF9SRUxFQVNFX1ZFUlNJT04pKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIFJlbGVhc2VBY29uZmlnVmFsdWVTZXRzLCAgICAkKFJFTEVBU0VfQUNPTkZJR19WQUxVRV9TRVRTKSkKQEAgLTM1MCw2ICszNTYsOSBAQAogJChjYWxsIGFkZF9qc29uX2xpc3QsIFN5c3RlbUV4dFByb3BGaWxlcywgJChUQVJHRVRfU1lTVEVNX0VYVF9QUk9QKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBQcm9kdWN0UHJvcEZpbGVzLCAkKFRBUkdFVF9QUk9EVUNUX1BST1ApKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIE9kbVByb3BGaWxlcywgJChUQVJHRVRfT0RNX1BST1ApKQorJChjYWxsIGFkZF9qc29uX2xpc3QsIFZlbmRvclByb3BGaWxlcywgJChUQVJHRVRfVkVORE9SX1BST1ApKQorCiskKGNhbGwgYWRkX2pzb25fc3RyLCBFeHRyYUFsbG93ZWREZXBzVHh0LCAkKEVYVFJBX0FMTE9XRURfREVQU19UWFQpKQogCiAjIERvIG5vdCBzZXQgQXJ0VGFyZ2V0SW5jbHVkZURlYnVnQnVpbGQgaW50byBhbnkgdmFsdWUgaWYgUFJPRFVDVF9BUlRfVEFSR0VUX0lOQ0xVREVfREVCVUdfQlVJTEQgaXMgbm90IHNldCwKICMgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciBmcm9tIHJ1bnRpbWVfbGliYXJ0Lm1rLgpAQCAtMzY3LDYgKzM3NiwxNzkgQEAKICQoY2FsbCBhZGRfanNvbl9saXN0LCBCb2FyZEF2YlN5c3RlbUFkZEhhc2h0cmVlRm9vdGVyQXJncywgJChCT0FSRF9BVkJfU1lTVEVNX0FERF9IQVNIVFJFRV9GT09URVJfQVJHUykpCiAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQm9hcmRBdmJFbmFibGUsICQoZmlsdGVyIHRydWUsJChCT0FSRF9BVkJfRU5BQkxFKSkpCiAKKyQoY2FsbCBhZGRfanNvbl9zdHIsIEFkYktleXMsICQoUFJPRFVDVF9BREJfS0VZUykpCisKKyQoY2FsbCBhZGRfanNvbl9tYXAsIFBhcnRpdGlvblZhcnNGb3JTb29uZ01pZ3JhdGlvbk9ubHlEb05vdFVzZSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgIFByb2R1Y3REaXJlY3RvcnksICAgICQoZGlyICQoSU5URVJOQUxfUFJPRFVDVCkpKQorCisgICQoY2FsbCBhZGRfanNvbl9tYXAsUGFydGl0aW9uUXVhbGlmaWVkVmFyaWFibGVzKQorICAkKGZvcmVhY2ggaW1hZ2VfdHlwZSxJTklUX0JPT1QgQk9PVCBWRU5ET1JfQk9PVCBTWVNURU0gVkVORE9SIENBQ0hFIFVTRVJEQVRBIFBST0RVQ1QgU1lTVEVNX0VYVCBPRU0gT0RNIFZFTkRPUl9ETEtNIE9ETV9ETEtNIFNZU1RFTV9ETEtNLCBcCisgICAgJChjYWxsIGFkZF9qc29uX21hcCwkKGNhbGwgdG8tbG93ZXIsJChpbWFnZV90eXBlKSkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdJbWFnZSwgJChmaWx0ZXIgdHJ1ZSwkKEJVSUxESU5HXyQoaW1hZ2VfdHlwZSlfSU1BR0UpKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRXJvZnNDb21wcmVzc29yLCAkKEJPQVJEXyQoaW1hZ2VfdHlwZSlJTUFHRV9FUk9GU19DT01QUkVTU09SKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRXJvZnNDb21wcmVzc0hpbnRzLCAkKEJPQVJEXyQoaW1hZ2VfdHlwZSlJTUFHRV9FUk9GU19DT01QUkVTU19ISU5UUykpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEVyb2ZzUGNsdXN0ZXJTaXplLCAkKEJPQVJEXyQoaW1hZ2VfdHlwZSlJTUFHRV9FUk9GU19QQ0xVU1RFUl9TSVpFKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRXh0ZnNJbm9kZUNvdW50LCAkKEJPQVJEXyQoaW1hZ2VfdHlwZSlJTUFHRV9FWFRGU19JTk9ERV9DT1VOVCkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEV4dGZzUnN2UGN0LCAkKEJPQVJEXyQoaW1hZ2VfdHlwZSlJTUFHRV9FWFRGU19SU1ZfUENUKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRjJmc1Nsb2FkQ29tcHJlc3NGbGFncywgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfRjJGU19TTE9BRF9DT01QUkVTU19GTEFHUykpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEZpbGVTeXN0ZW1Db21wcmVzcywgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfRklMRV9TWVNURU1fQ09NUFJFU1MpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRGaWxlU3lzdGVtVHlwZSwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfRklMRV9TWVNURU1fVFlQRSkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEpvdXJuYWxTaXplLCAkKEJPQVJEXyQoaW1hZ2VfdHlwZSlJTUFHRV9KT1VSTkFMX1NJWkUpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRQYXJ0aXRpb25SZXNlcnZlZFNpemUsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX1BBUlRJVElPTl9SRVNFUlZFRF9TSVpFKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkUGFydGl0aW9uU2l6ZSwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfUEFSVElUSU9OX1NJWkUpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRTcXVhc2hmc0Jsb2NrU2l6ZSwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfU1FVQVNIRlNfQkxPQ0tfU0laRSkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZFNxdWFzaGZzQ29tcHJlc3NvciwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfU1FVQVNIRlNfQ09NUFJFU1NPUikpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZFNxdWFzaGZzQ29tcHJlc3Nvck9wdCwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfU1FVQVNIRlNfQ09NUFJFU1NPUl9PUFQpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRTcXVhc2hmc0Rpc2FibGU0a0FsaWduLCAkKEJPQVJEXyQoaW1hZ2VfdHlwZSlJTUFHRV9TUVVBU0hGU19ESVNBQkxFXzRLX0FMSUdOKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiS2V5UGF0aCwgJChCT0FSRF9BVkJfJChpbWFnZV90eXBlKV9LRVlfUEFUSCkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YkFsZ29yaXRobSwgJChCT0FSRF9BVkJfJChpbWFnZV90eXBlKV9BTEdPUklUSE0pKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRBdmJSb2xsYmFja0luZGV4LCAkKEJPQVJEX0FWQl8kKGltYWdlX3R5cGUpX1JPTExCQUNLX0lOREVYKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiUm9sbGJhY2tJbmRleExvY2F0aW9uLCAkKEJPQVJEX0FWQl8kKGltYWdlX3R5cGUpX1JPTExCQUNLX0lOREVYX0xPQ0FUSU9OKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiQWRkSGFzaHRyZWVGb290ZXJBcmdzLCAkKEJPQVJEX0FWQl8kKGltYWdlX3R5cGUpX0FERF9IQVNIVFJFRV9GT09URVJfQVJHUykpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBQcm9kdWN0QmFzZUZzUGF0aCwgJChQUk9EVUNUXyQoaW1hZ2VfdHlwZSlfQkFTRV9GU19QQVRIKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIFByb2R1Y3RIZWFkcm9vbSwgJChQUk9EVUNUXyQoaW1hZ2VfdHlwZSlfSEVBRFJPT00pKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgUHJvZHVjdFZlcml0eVBhcnRpdGlvbiwgJChQUk9EVUNUXyQoaW1hZ2VfdHlwZSlfVkVSSVRZX1BBUlRJVElPTikpIFwKKyAgICAkKGNhbGwgZW5kX2pzb25fbWFwKSBcCisgICkKKyAgJChjYWxsIGVuZF9qc29uX21hcCkKKworICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVGFyZ2V0VXNlcmltYWdlc1VzZUV4dDIsICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFUklNQUdFU19VU0VfRVhUMikpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVGFyZ2V0VXNlcmltYWdlc1VzZUV4dDMsICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFUklNQUdFU19VU0VfRVhUMykpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVGFyZ2V0VXNlcmltYWdlc1VzZUV4dDQsICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFUklNQUdFU19VU0VfRVhUNCkpKQorCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBUYXJnZXRVc2VyaW1hZ2VzU3BhcnNlRXh0RGlzYWJsZWQsICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFUklNQUdFU19TUEFSU0VfRVhUX0RJU0FCTEVEKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBUYXJnZXRVc2VyaW1hZ2VzU3BhcnNlRXJvZnNEaXNhYmxlZCwgJChmaWx0ZXIgdHJ1ZSwkKFRBUkdFVF9VU0VSSU1BR0VTX1NQQVJTRV9FUk9GU19ESVNBQkxFRCkpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVGFyZ2V0VXNlcmltYWdlc1NwYXJzZVNxdWFzaGZzRGlzYWJsZWQsICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFUklNQUdFU19TUEFSU0VfU1FVQVNIRlNfRElTQUJMRUQpKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFRhcmdldFVzZXJpbWFnZXNTcGFyc2VGMmZzRGlzYWJsZWQsICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFUklNQUdFU19TUEFSU0VfRjJGU19ESVNBQkxFRCkpKQorCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRXJvZnNDb21wcmVzc29yLCAkKEJPQVJEX0VST0ZTX0NPTVBSRVNTT1IpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEVyb2ZzQ29tcHJlc3NvckhpbnRzLCAkKEJPQVJEX0VST0ZTX0NPTVBSRVNTX0hJTlRTKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRFcm9mc1BjbHVzdGVyU2l6ZSwgJChCT0FSRF9FUk9GU19QQ0xVU1RFUl9TSVpFKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRFcm9mc1NoYXJlRHVwQmxvY2tzLCAkKEJPQVJEX0VST0ZTX1NIQVJFX0RVUF9CTE9DS1MpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEVyb2ZzVXNlTGVnYWN5Q29tcHJlc3Npb24sICQoQk9BUkRfRVJPRlNfVVNFX0xFR0FDWV9DT01QUkVTU0lPTikpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRXh0NFNoYXJlRHVwQmxvY2tzLCAkKEJPQVJEX0VYVDRfU0hBUkVfRFVQX0JMT0NLUykpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRmxhc2hMb2dpY2FsQmxvY2tTaXplLCAkKEJPQVJEX0ZMQVNIX0xPR0lDQUxfQkxPQ0tfU0laRSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRmxhc2hFcmFzZUJsb2NrU2l6ZSwgJChCT0FSRF9GTEFTSF9FUkFTRV9CTE9DS19TSVpFKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nVmJtZXRhSW1hZ2UsICQoQlVJTERJTkdfVkJNRVRBX0lNQUdFKSkKKworICAjIGJvb3QgaW1hZ2Ugc3R1ZmYKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nUmFtZGlza0ltYWdlLCAkKGZpbHRlciB0cnVlLCQoQlVJTERJTkdfUkFNRElTS19JTUFHRSkpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJvZHVjdEJ1aWxkQm9vdEltYWdlLCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9CVUlMRF9CT09UX0lNQUdFKSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFByb2R1Y3RCdWlsZFZlbmRvckJvb3RJbWFnZSwgJChQUk9EVUNUX0JVSUxEX1ZFTkRPUl9CT09UX0lNQUdFKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFByb2R1Y3RCdWlsZEluaXRCb290SW1hZ2UsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX0JVSUxEX0lOSVRfQk9PVF9JTUFHRSkpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQm9hcmRVc2VzUmVjb3ZlcnlBc0Jvb3QsICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QpKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRQcmVidWlsdEJvb3RpbWFnZSwgJChCT0FSRF9QUkVCVUlMVF9CT09UX0lNQUdFKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRQcmVidWlsdEluaXRCb290aW1hZ2UsICQoQk9BUkRfUFJFQlVJTFRfSU5JVF9CT09UX0lNQUdFKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRCb290aW1hZ2VQYXJ0aXRpb25TaXplLCAkKEJPQVJEX0JPT1RJTUFHRV9QQVJUSVRJT05fU0laRSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkSW5pdEJvb3RpbWFnZVBhcnRpdGlvblNpemUsICQoQk9BUkRfSU5JVF9CT09UX0lNQUdFX1BBUlRJVElPTl9TSVpFKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRCb290SGVhZGVyVmVyc2lvbiwgJChCT0FSRF9CT09UX0hFQURFUl9WRVJTSU9OKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgVGFyZ2V0S2VybmVsUGF0aCwgJChUQVJHRVRfS0VSTkVMX1BBVEgpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQm9hcmRVc2VzR2VuZXJpY0tlcm5lbEltYWdlLCAkKEJPQVJEX1VTRVNfR0VORVJJQ19LRVJORUxfSU1BR0UpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb290U2VjdXJpdHlQYXRjaCwgJChCT09UX1NFQ1VSSVRZX1BBVENIKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgSW5pdEJvb3RTZWN1cml0eVBhdGNoLCAkKElOSVRfQk9PVF9TRUNVUklUWV9QQVRDSCkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFZlbmRvclNlY3VyaXR5UGF0Y2gsICQoVkVORE9SX1NFQ1VSSVRZX1BBVENIKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkSW5jbHVkZUR0YkluQm9vdGltZywgJChCT0FSRF9JTkNMVURFX0RUQl9JTl9CT09USU1HKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIEludGVybmFsS2VybmVsQ21kbGluZSwgJChJTlRFUk5BTF9LRVJORUxfQ01ETElORSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBJbnRlcm5hbEJvb3Rjb25maWcsICQoSU5URVJOQUxfQk9PVENPTkZJRykpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEludGVybmFsQm9vdGNvbmZpZ0ZpbGUsICQoSU5URVJOQUxfQk9PVENPTkZJR19GSUxFKSkKKworICAjIHN1cGVyIGltYWdlIHN0dWZmCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0VXNlRHluYW1pY1BhcnRpdGlvbnMsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1VTRV9EWU5BTUlDX1BBUlRJVElPTlMpKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFByb2R1Y3RSZXRyb2ZpdER5bmFtaWNQYXJ0aXRpb25zLCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9SRVRST0ZJVF9EWU5BTUlDX1BBUlRJVElPTlMpKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFByb2R1Y3RCdWlsZFN1cGVyUGFydGl0aW9uLCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9CVUlMRF9TVVBFUl9QQVJUSVRJT04pKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRTdXBlclBhcnRpdGlvblNpemUsICQoQk9BUkRfU1VQRVJfUEFSVElUSU9OX1NJWkUpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZFN1cGVyUGFydGl0aW9uTWV0YWRhdGFEZXZpY2UsICQoQk9BUkRfU1VQRVJfUEFSVElUSU9OX01FVEFEQVRBX0RFVklDRSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBCb2FyZFN1cGVyUGFydGl0aW9uQmxvY2tEZXZpY2VzLCAkKEJPQVJEX1NVUEVSX1BBUlRJVElPTl9CTE9DS19ERVZJQ0VTKSkKKyAgJChjYWxsIGFkZF9qc29uX21hcCwgQm9hcmRTdXBlclBhcnRpdGlvbkdyb3VwcykKKyAgICAkKGZvcmVhY2ggZ3JvdXAsICQoQk9BUkRfU1VQRVJfUEFSVElUSU9OX0dST1VQUyksIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9tYXAsICQoZ3JvdXApKSBcCisgICAgICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEdyb3VwU2l6ZSwgJChCT0FSRF8kKGNhbGwgdG8tdXBwZXIsJChncm91cCkpX1NJWkUpKSBcCisgICAgICAgICQoaWYgJChCT0FSRF8kKGNhbGwgdG8tdXBwZXIsJChncm91cCkpX1BBUlRJVElPTl9MSVNUKSwgXAorICAgICAgICAgICQoY2FsbCBhZGRfanNvbl9saXN0LCBQYXJ0aXRpb25MaXN0LCAkKEJPQVJEXyQoY2FsbCB0by11cHBlciwkKGdyb3VwKSlfUEFSVElUSU9OX0xJU1QpKSkgXAorICAgICAgJChjYWxsIGVuZF9qc29uX21hcCkpCisgICAgJChjYWxsIGVuZF9qc29uX21hcCkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFByb2R1Y3RWaXJ0dWFsQWJPdGEsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1ZJUlRVQUxfQUJfT1RBKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0VmlydHVhbEFiT3RhUmV0cm9maXQsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1ZJUlRVQUxfQUJfT1RBX1JFVFJPRklUKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBBYk90YVVwZGF0ZXIsICQoZmlsdGVyIHRydWUsJChBQl9PVEFfVVBEQVRFUikpKQorCisgICMgQXZiIChhbmRyb2lkIHZlcmlmaWVkIGJvb3QpIHN0dWZmCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCb2FyZEF2YkVuYWJsZSwgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX0FWQl9FTkFCTEUpKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRBdmJBbGdvcml0aG0sICQoQk9BUkRfQVZCX0FMR09SSVRITSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiS2V5UGF0aCwgJChCT0FSRF9BVkJfS0VZX1BBVEgpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YlJvbGxiYWNrSW5kZXgsICQoQk9BUkRfQVZCX1JPTExCQUNLX0lOREVYKSkKKyAgJChjYWxsIGFkZF9qc29uX21hcCwgQ2hhaW5lZFZibWV0YVBhcnRpdGlvbnMpCisgICQoZm9yZWFjaCBwYXJ0aXRpb24sc3lzdGVtIHZlbmRvciAkKEJPQVJEX0FWQl9WQk1FVEFfQ1VTVE9NX1BBUlRJVElPTlMpLFwKKyAgICAkKGNhbGwgYWRkX2pzb25fbWFwLCAkKHBhcnRpdGlvbikpIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9saXN0LFBhcnRpdGlvbnMsJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpKSkgXAorICAgICAgJChjYWxsIGFkZF9qc29uX3N0cixLZXksJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpX0tFWV9QQVRIKSkgXAorICAgICAgJChjYWxsIGFkZF9qc29uX3N0cixBbGdvcml0aG0sJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpX0FMR09SSVRITSkpIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9zdHIsUm9sbGJhY2tJbmRleCwkKEJPQVJEX0FWQl9WQk1FVEFfJChjYWxsIHRvLXVwcGVyLCQocGFydGl0aW9uKSlfUk9MTEJBQ0tfSU5ERVgpKSBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLFJvbGxiYWNrSW5kZXhMb2NhdGlvbiwkKEJPQVJEX0FWQl9WQk1FVEFfJChjYWxsIHRvLXVwcGVyLCQocGFydGl0aW9uKSlfUk9MTEJBQ0tfSU5ERVhfTE9DQVRJT04pKSBcCisgICAgJChjYWxsIGVuZF9qc29uX21hcCkpCisgICQoY2FsbCBlbmRfanNvbl9tYXApCisKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFByb2R1Y3RVc2VEeW5hbWljUGFydGl0aW9uU2l6ZSwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfVVNFX0RZTkFNSUNfUEFSVElUSU9OX1NJWkUpKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIENvcHlJbWFnZXNGb3JUYXJnZXRGaWxlc1ppcCwgJChmaWx0ZXIgdHJ1ZSwkKENPUFlfSU1BR0VTX0ZPUl9UQVJHRVRfRklMRVNfWklQKSkpCisKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFByb2R1Y3RQYWNrYWdlcywgJChQUk9EVUNUX1BBQ0tBR0VTKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFByb2R1Y3RQYWNrYWdlc0RlYnVnLCAkKFBST0RVQ1RfUEFDS0FHRVNfREVCVUcpKQorCisgICMgVXNlZCB0byBnZW5lcmF0ZSAvdmVuZG9yL2xpbmtlci5jb25maWcucGIKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFZlbmRvckxpbmtlckNvbmZpZ1NyY3MsICQoUFJPRFVDVF9WRU5ET1JfTElOS0VSX0NPTkZJR19GUkFHTUVOVFMpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUHJvZHVjdExpbmtlckNvbmZpZ1NyY3MsICQoUFJPRFVDVF9QUk9EVUNUX0xJTktFUl9DT05GSUdfRlJBR01FTlRTKSkKKworICAjIFVzZWQgdG8gZ2VuZXJhdGUgX2Rsa20gcGFydGl0aW9ucworICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdTeXN0ZW1EbGttSW1hZ2UsICAgICAgICAgICAgICAgJChCVUlMRElOR19TWVNURU1fRExLTV9JTUFHRSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBTeXN0ZW1LZXJuZWxNb2R1bGVzLCAkKEJPQVJEX1NZU1RFTV9LRVJORUxfTU9EVUxFUykpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFN5c3RlbUtlcm5lbEJsb2NrbGlzdEZpbGUsICQoQk9BUkRfU1lTVEVNX0tFUk5FTF9NT0RVTEVTX0JMT0NLTElTVF9GSUxFKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFN5c3RlbUtlcm5lbExvYWRNb2R1bGVzLCAkKEJPQVJEX1NZU1RFTV9LRVJORUxfTU9EVUxFU19MT0FEKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nVmVuZG9yRGxrbUltYWdlLCAgICAgICAgICAgICAgICQoQlVJTERJTkdfVkVORE9SX0RMS01fSU1BR0UpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgVmVuZG9yS2VybmVsTW9kdWxlcywgJChCT0FSRF9WRU5ET1JfS0VSTkVMX01PRFVMRVMpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBWZW5kb3JLZXJuZWxCbG9ja2xpc3RGaWxlLCAkKEJPQVJEX1ZFTkRPUl9LRVJORUxfTU9EVUxFU19CTE9DS0xJU1RfRklMRSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ09kbURsa21JbWFnZSwgICAgICAgICAgICAgICAkKEJVSUxESU5HX09ETV9ETEtNX0lNQUdFKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIE9kbUtlcm5lbE1vZHVsZXMsICQoQk9BUkRfT0RNX0tFUk5FTF9NT0RVTEVTKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgT2RtS2VybmVsQmxvY2tsaXN0RmlsZSwgJChCT0FSRF9PRE1fS0VSTkVMX01PRFVMRVNfQkxPQ0tMSVNUX0ZJTEUpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgVmVuZG9yUmFtZGlza0tlcm5lbE1vZHVsZXMsICQoQk9BUkRfVkVORE9SX1JBTURJU0tfS0VSTkVMX01PRFVMRVMpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBWZW5kb3JSYW1kaXNrS2VybmVsQmxvY2tsaXN0RmlsZSwgJChCT0FSRF9WRU5ET1JfUkFNRElTS19LRVJORUxfTU9EVUxFU19CTE9DS0xJU1RfRklMRSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBWZW5kb3JSYW1kaXNrS2VybmVsTG9hZE1vZHVsZXMsICQoQk9BUkRfVkVORE9SX1JBTURJU0tfS0VSTkVMX01PRFVMRVNfTE9BRCkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFZlbmRvclJhbWRpc2tLZXJuZWxPcHRpb25zRmlsZSwgJChCT0FSRF9WRU5ET1JfUkFNRElTS19LRVJORUxfTU9EVUxFU19PUFRJT05TX0ZJTEUpKQorCisgICMgVXNlZCB0byBnZW5lcmF0ZSAvdmVuZG9yL2J1aWxkLnByb3AKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIEJvYXJkSW5mb0ZpbGVzLCAkKGlmICQoVEFSR0VUX0JPQVJEX0lORk9fRklMRVMpLCQoVEFSR0VUX0JPQVJEX0lORk9fRklMRVMpLCQoZmlyc3R3b3JkICQoVEFSR0VUX0JPQVJEX0lORk9fRklMRSkgJCh3aWxkY2FyZCAkKFRBUkdFVF9ERVZJQ0VfRElSKS9ib2FyZC1pbmZvLnR4dCkpKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9vdExvYWRlckJvYXJkTmFtZSwgJChUQVJHRVRfQk9PVExPQURFUl9CT0FSRF9OQU1FKSkKKworICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUHJvZHVjdENvcHlGaWxlcywgJChQUk9EVUNUX0NPUFlfRklMRVMpKQorCisgICMgVXNlZCB0byBnZW5lcmF0ZSBmc3YgbWV0YQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJvZHVjdEZzdmVyaXR5R2VuZXJhdGVNZXRhZGF0YSwgICAgICAgICAgICAgICAkKFBST0RVQ1RfRlNWRVJJVFlfR0VORVJBVEVfTUVUQURBVEEpKQorCisgICMgVXNlZCB0byBnZW5lcmF0ZSByZWNvdmVyeSBwYXJ0aXRpb24KKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgVGFyZ2V0U2NyZWVuRGVuc2l0eSwgJChUQVJHRVRfU0NSRUVOX0RFTlNJVFkpKQorCiskKGNhbGwgZW5kX2pzb25fbWFwKQorCisjIEZvciBjb252ZXJ0aW5nIHZpbnRmX2RhdGEKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBEZXZpY2VNYXRyaXhGaWxlLCAkKERFVklDRV9NQVRSSVhfRklMRSkpCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgUHJvZHVjdE1hbmlmZXN0RmlsZXMsICQoUFJPRFVDVF9NQU5JRkVTVF9GSUxFUykpCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgU3lzdGVtTWFuaWZlc3RGaWxlLCAkKERFVklDRV9GUkFNRVdPUktfTUFOSUZFU1RfRklMRSkpCitTWVNURU1fRVhUX0hXU0VSVklDRV9GSUxFUyA6PQoraWZlcSAoJChQUk9EVUNUX0hJRExfRU5BQkxFRCksdHJ1ZSkKKyAgaWZuZXEgKCQoZmlsdGVyIGh3c2VydmljZW1hbmFnZXIsJChQUk9EVUNUX1BBQ0tBR0VTKSksKQorICAgIFNZU1RFTV9FWFRfSFdTRVJWSUNFX0ZJTEVTICs9IHN5c3RlbS9od3NlcnZpY2VtYW5hZ2VyL2h3c2VydmljZW1hbmFnZXJfbm9fbWF4LnhtbAorICBlbHNlCisgICAgJChlcnJvciBJZiBQUk9EVUNUX0hJRExfRU5BQkxFRCBpcyBzZXQsIGh3c2VydmljZW1hbmFnZXIgbXVzdCBiZSBhZGRlZCB0byBQUk9EVUNUX1BBQ0tBR0VTIGV4cGxpY2l0bHkpCisgIGVuZGlmCitlbHNlCisgIGlmbmVxICgkKGZpbHRlciBod3NlcnZpY2VtYW5hZ2VyLCQoUFJPRFVDVF9QQUNLQUdFUykpLCkKKyAgICBTWVNURU1fRVhUX0hXU0VSVklDRV9GSUxFUyArPSBzeXN0ZW0vaHdzZXJ2aWNlbWFuYWdlci9od3NlcnZpY2VtYW5hZ2VyLnhtbAorICBlbHNlIGlmbmVxICgkKGZpbHRlciBod3NlcnZpY2VtYW5hZ2VyLCQoUFJPRFVDVF9QQUNLQUdFU19TSElQUElOR19BUElfTEVWRUxfMzQpKSwpCisgICAgU1lTVEVNX0VYVF9IV1NFUlZJQ0VfRklMRVMgKz0gc3lzdGVtL2h3c2VydmljZW1hbmFnZXIvaHdzZXJ2aWNlbWFuYWdlci54bWwKKyAgZW5kaWYKK2VuZGlmCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgU3lzdGVtRXh0TWFuaWZlc3RGaWxlcywgJChTWVNURU1fRVhUX01BTklGRVNUX0ZJTEVTKSAkKFNZU1RFTV9FWFRfSFdTRVJWSUNFX0ZJTEVTKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBEZXZpY2VNYW5pZmVzdEZpbGVzLCAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBPZG1NYW5pZmVzdEZpbGVzLCAkKE9ETV9NQU5JRkVTVF9GSUxFUykpCisKICQoY2FsbCBqc29uX2VuZCkKIAogJChmaWxlID4kKFNPT05HX1ZBUklBQkxFUykudG1wLCQoanNvbl9jb250ZW50cykpCmRpZmYgLS1naXQgYS9jb3JlL3Nvb25nX2V4dHJhX2NvbmZpZy5tayBiL2NvcmUvc29vbmdfZXh0cmFfY29uZmlnLm1rCmluZGV4IDAwYjVjMGYuLjhlZWU1MGEgMTAwNjQ0Ci0tLSBhL2NvcmUvc29vbmdfZXh0cmFfY29uZmlnLm1rCisrKyBiL2NvcmUvc29vbmdfZXh0cmFfY29uZmlnLm1rCkBAIC00Myw2ICs0Myw3IEBACiAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUFJPRFVDVF9QUk9EVUNUX1BST1BFUlRJRVMsICAgICAgICAkKGNhbGwgY29sbGFwc2UtcHJvcC1wYWlycyxQUk9EVUNUX1BST0RVQ1RfUFJPUEVSVElFUykpCiAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUFJPRFVDVF9PRE1fUFJPUEVSVElFUywgICAgICAgICAgICAkKGNhbGwgY29sbGFwc2UtcHJvcC1wYWlycyxQUk9EVUNUX09ETV9QUk9QRVJUSUVTKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBQUk9EVUNUX1BST1BFUlRZX09WRVJSSURFUywgICAgICAgICQoY2FsbCBjb2xsYXBzZS1wcm9wLXBhaXJzLFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBQUk9EVUNUX0RFRkFVTFRfUFJPUEVSVFlfT1ZFUlJJREVTLCAgICAgICAgJChjYWxsIGNvbGxhcHNlLXByb3AtcGFpcnMsUFJPRFVDVF9ERUZBVUxUX1BST1BFUlRZX09WRVJSSURFUykpCiAKICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvb3Rsb2FkZXJCb2FyZE5hbWUsICQoVEFSR0VUX0JPT1RMT0FERVJfQk9BUkRfTkFNRSkpCiAKQEAgLTc5LDcgKzgwLDcgQEAKIAogJChjYWxsIGFkZF9qc29uX3N0ciwgU2NyZWVuRGVuc2l0eSwgJChUQVJHRVRfU0NSRUVOX0RFTlNJVFkpKQogCi0kKGNhbGwgYWRkX2pzb25fYm9vbCwgVXNlc1Z1bGthbiwgJChmaWx0ZXIgdHJ1ZSwkKFRBUkdFVF9VU0VTX1ZVTEtBTikpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgVXNlc1Z1bGthbiwgJChUQVJHRVRfVVNFU19WVUxLQU4pKQogCiAkKGNhbGwgYWRkX2pzb25fYm9vbCwgWnlnb3RlRm9yY2U2NCwgJChmaWx0ZXIgdHJ1ZSwkKFpZR09URV9GT1JDRV82NCkpKQogCmRpZmYgLS1naXQgYS9jb3JlL3N5c3Byb3AubWsgYi9jb3JlL3N5c3Byb3AubWsKaW5kZXggZGM2ZjJjNC4uZTVmMTI2NyAxMDA2NDQKLS0tIGEvY29yZS9zeXNwcm9wLm1rCisrKyBiL2NvcmUvc3lzcHJvcC5tawpAQCAtMTgzLDcgKzE4Myw3IEBACiBlbmRpZgogCiBCVUlMRF9GSU5HRVJQUklOVF9GSUxFIDo9ICQoUFJPRFVDVF9PVVQpL2J1aWxkX2ZpbmdlcnByaW50LnR4dAotaWZuZXEgKCwkKHNoZWxsIG1rZGlyIC1wICQoUFJPRFVDVF9PVVQpICYmIGVjaG8gJChCVUlMRF9GSU5HRVJQUklOVCkgPiQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkgJiYgZ3JlcCAiICIgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkpCitpZm5lcSAoLCQoc2hlbGwgbWtkaXIgLXAgJChQUk9EVUNUX09VVCkgJiYgZWNobyAkKEJVSUxEX0ZJTkdFUlBSSU5UKSA+JChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKS50bXAgJiYgKGlmICEgY21wIC1zICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkudG1wICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSk7IHRoZW4gbXYgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKS50bXAgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKTsgZWxzZSBybSAkKEJVSUxEX0ZJTkdFUlBSSU5UX0ZJTEUpLnRtcDsgZmkpICYmIGdyZXAgIiAiICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkpKQogICAkKGVycm9yIEJVSUxEX0ZJTkdFUlBSSU5UIGNhbm5vdCBjb250YWluIHNwYWNlczogIiQoZmlsZSA8JChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkiKQogZW5kaWYKIEJVSUxEX0ZJTkdFUlBSSU5UX0ZST01fRklMRSA6PSAkJChjYXQgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkKQEAgLTI4MSw1MSArMjgxLDE3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyB2ZW5kb3JfZGxrbS9ldGMvYnVpbGQucHJvcAotIworIyBvZG1fZGxrbS9ldGMvYnVpbGQucHJvcAorIyBzeXN0ZW1fZGxrbS9idWlsZC5wcm9wCisjIFRoZXNlIGFyZSBidWlsdCBieSBTb29uZy4gU2VlIGJ1aWxkL3Nvb25nL0FuZHJvaWQuYnAKIAogSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX09VVF9WRU5ET1JfRExLTSkvZXRjL2J1aWxkLnByb3AKLSQoZXZhbCAkKGNhbGwgYnVpbGQtcHJvcGVydGllcyxcCi0gICAgdmVuZG9yX2Rsa20sXAotICAgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpKSkKLQotJChldmFsICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKElOU1RBTExFRF9WRU5ET1JfRExLTV9CVUlMRF9QUk9QX1RBUkdFVCkpKQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgb2RtX2Rsa20vZXRjL2J1aWxkLnByb3AKLSMKLQogSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX09VVF9PRE1fRExLTSkvZXRjL2J1aWxkLnByb3AKLSQoZXZhbCAkKGNhbGwgYnVpbGQtcHJvcGVydGllcyxcCi0gICAgb2RtX2Rsa20sXAotICAgICQoSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpKSkKLQotJChldmFsICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKElOU1RBTExFRF9PRE1fRExLTV9CVUlMRF9QUk9QX1RBUkdFVCkpKQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc3lzdGVtX2Rsa20vYnVpbGQucHJvcAotIwotCiBJTlNUQUxMRURfU1lTVEVNX0RMS01fQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfT1VUX1NZU1RFTV9ETEtNKS9ldGMvYnVpbGQucHJvcAotJChldmFsICQoY2FsbCBidWlsZC1wcm9wZXJ0aWVzLFwKLSAgICBzeXN0ZW1fZGxrbSxcCi0gICAgJChJTlNUQUxMRURfU1lTVEVNX0RMS01fQlVJTERfUFJPUF9UQVJHRVQpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSkpKQotCi0kKGV2YWwgJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSkpCitBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUyArPSBcCisgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCisgICQoSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCisgICQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgc3lzdGVtX2V4dC9ldGMvYnVpbGQucHJvcApAQCAtMzM1LDIyICszMDEsMTIgQEAKIAogSU5TVEFMTEVEX1NZU1RFTV9FWFRfQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfT1VUX1NZU1RFTV9FWFQpL2V0Yy9idWlsZC5wcm9wCiAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyByYW1kaXNrL2Jvb3QvZXRjL2J1aWxkLnByb3AKLSMKLQogUkFNRElTS19CVUlMRF9QUk9QX1JFTF9QQVRIIDo9IHN5c3RlbS9ldGMvcmFtZGlzay9idWlsZC5wcm9wCitpZmVxICh0cnVlLCQoQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UKSkKK0lOU1RBTExFRF9SQU1ESVNLX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX1JFQ09WRVJZX1JPT1RfT1VUKS9maXJzdF9zdGFnZV9yYW1kaXNrLyQoUkFNRElTS19CVUlMRF9QUk9QX1JFTF9QQVRIKQorZWxzZQogSU5TVEFMTEVEX1JBTURJU0tfQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfUkFNRElTS19PVVQpLyQoUkFNRElTS19CVUlMRF9QUk9QX1JFTF9QQVRIKQotJChldmFsICQoY2FsbCBidWlsZC1wcm9wZXJ0aWVzLFwKLSAgICBib290aW1hZ2UsXAotICAgICQoSU5TVEFMTEVEX1JBTURJU0tfQlVJTERfUFJPUF9UQVJHRVQpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSkpKQotCi0kKGV2YWwgJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoSU5TVEFMTEVEX1JBTURJU0tfQlVJTERfUFJPUF9UQVJHRVQpKSkKK2VuZGlmCiAKIEFMTF9JTlNUQUxMRURfQlVJTERfUFJPUF9GSUxFUyA6PSBcCiAgICQoSU5TVEFMTEVEX0JVSUxEX1BST1BfVEFSR0VUKSBcCmRpZmYgLS1naXQgYS9jb3JlL3N5c3Byb3BfY29uZmlnLm1rIGIvY29yZS9zeXNwcm9wX2NvbmZpZy5tawppbmRleCA2OTA2NjExLi4xOTkxNTAzIDEwMDY0NAotLS0gYS9jb3JlL3N5c3Byb3BfY29uZmlnLm1rCisrKyBiL2NvcmUvc3lzcHJvcF9jb25maWcubWsKQEAgLTkxLDggKzkxLDEyIEBACiAjIEJ1aWxkIHN5c3RlbSBzZXQgQk9BUkRfQVBJX0xFVkVMIHRvIHNob3cgdGhlIGFwaSBsZXZlbCBvZiB0aGUgdmVuZG9yIEFQSSBzdXJmYWNlLgogIyBUaGlzIG11c3Qgbm90IGJlIGFsdGVyZWQgb3V0c2lkZSBvZiBidWlsZCBzeXN0ZW0uCiBpZmRlZiBCT0FSRF9BUElfTEVWRUwKLUFERElUSU9OQUxfVkVORE9SX1BST1BFUlRJRVMgKz0gXAotICAgIHJvLmJvYXJkLmFwaV9sZXZlbD0kKEJPQVJEX0FQSV9MRVZFTCkKKyAgQURESVRJT05BTF9WRU5ET1JfUFJPUEVSVElFUyArPSBcCisgICAgcm8uYm9hcmQuYXBpX2xldmVsPz0kKEJPQVJEX0FQSV9MRVZFTCkKKyAgaWZkZWYgQk9BUkRfQVBJX0xFVkVMX1BST1BfT1ZFUlJJREUKKyAgICBBRERJVElPTkFMX1ZFTkRPUl9QUk9QRVJUSUVTICs9IFwKKyAgICAgIHJvLmJvYXJkLmFwaV9sZXZlbD0kKEJPQVJEX0FQSV9MRVZFTF9QUk9QX09WRVJSSURFKQorICBlbmRpZgogZW5kaWYKICMgUkVMRUFTRV9CT0FSRF9BUElfTEVWRUxfRlJPWkVOIGlzIHRydWUgd2hlbiB0aGUgdmVuZG9yIEFQSSBzdXJmYWNlIGlzIGZyb3plbi4KIGlmZGVmIFJFTEVBU0VfQk9BUkRfQVBJX0xFVkVMX0ZST1pFTgpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9hdXRvcmVwcm8ubWsgYi9jb3JlL3Rhc2tzL2F1dG9yZXByby5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjgxZjliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90YXNrcy9hdXRvcmVwcm8ubWsKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaWZuZXEgKCQod2lsZGNhcmQgdGVzdC9zdHMvUkVBRE1FLWF1dG9yZXByby5tZCksKQordGVzdF9zdWl0ZV9uYW1lIDo9IGF1dG9yZXBybwordGVzdF9zdWl0ZV90cmFkZWZlZCA6PSBzdHMtdHJhZGVmZWQKK3Rlc3Rfc3VpdGVfcmVhZG1lIDo9IHRlc3Qvc3RzL1JFQURNRS1hdXRvcmVwcm8ubWQKK2F1dG9yZXByb196aXAgOj0gJChIT1NUX09VVCkvJCh0ZXN0X3N1aXRlX25hbWUpL2F1dG9yZXByby56aXAKKworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGFza3MvdG9vbHMvY29tcGF0aWJpbGl0eS5taworCithdXRvcmVwcm9fcGx1Z2luX3NrZWwgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixFVEMsYXV0b3JlcHJvLXBsdWdpbi1za2VsLnppcCkvYXV0b3JlcHJvLXBsdWdpbi1za2VsLnppcAorCiskKGF1dG9yZXByb196aXApOiBBVVRPUkVQUk9fWklQIDo9ICQoY29tcGF0aWJpbGl0eV96aXApCiskKGF1dG9yZXByb196aXApOiBBVVRPUkVQUk9fUExVR0lOX1NLRUwgOj0gJChhdXRvcmVwcm9fcGx1Z2luX3NrZWwpCiskKGF1dG9yZXByb196aXApOiAkKE1FUkdFX1pJUFMpICQoWklQMlpJUCkgJChjb21wYXRpYmlsaXR5X3ppcCkgJChhdXRvcmVwcm9fcGx1Z2luX3NrZWwpCisJcm0gLWYgJEAgJChBVVRPUkVQUk9fWklQKV9maWx0ZXJlZAorCSQoWklQMlpJUCkgLWkgJChBVVRPUkVQUk9fWklQKSAtbyAkKEFVVE9SRVBST19aSVApX2ZpbHRlcmVkIFwKKwkJLXggYW5kcm9pZC1hdXRvcmVwcm8vdG9vbHMvc3RzLXRyYWRlZmVkLXRlc3RzLmphciBcCisJCSdhbmRyb2lkLWF1dG9yZXByby90b29scy8qOmF1dG9yZXByby9zcmMvbWFpbi9yZXNvdXJjZXMvc3RzLXRyYWRlZmVkLXRvb2xzLycKKwkkKE1FUkdFX1pJUFMpICRAICQoQVVUT1JFUFJPX1pJUClfZmlsdGVyZWQgJChBVVRPUkVQUk9fUExVR0lOX1NLRUwpCisJcm0gLWYgJChBVVRPUkVQUk9fWklQKV9maWx0ZXJlZAorCisuUEhPTlk6IGF1dG9yZXBybworYXV0b3JlcHJvOiAkKGF1dG9yZXByb196aXApCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGF1dG9yZXBybywgJChhdXRvcmVwcm9femlwKSkKKworZW5kaWYKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dzaS9BbmRyb2lkLm1rIGIvY29yZS90YXNrcy9jaGVjay1hYmktZHVtcC1saXN0Lm1rCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIHRhcmdldC9wcm9kdWN0L2dzaS9BbmRyb2lkLm1rCnJlbmFtZSB0byBjb3JlL3Rhc2tzL2NoZWNrLWFiaS1kdW1wLWxpc3QubWsKaW5kZXggMzY4OTdmZS4uODFkNTQ5ZSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ3NpL0FuZHJvaWQubWsKKysrIGIvY29yZS90YXNrcy9jaGVjay1hYmktZHVtcC1saXN0Lm1rCkBAIC0xLDQgKzEsMTYgQEAKLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQorIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIENoZWNrIHRoZSBnZW5lcmF0ZSBsaXN0IGFnYWluc3QgdGhlIGxhdGVzdCBsaXN0IHN0b3JlZCBpbiB0aGUKQEAgLTEwOSw2MCArMTIxLDMgQEAKIAkkKGlmICQoYWRkZWRfdm5ka19hYmlfZHVtcHMpJChhZGRlZF9wbGF0Zm9ybV9hYmlfZHVtcHMpLGV4aXQgMSkKIAkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKQogCSQoaGlkZSkgdG91Y2ggJEAKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFZOREsgcGFja2FnZSBhbmQgc25hcHNob3QuCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gdm5ka19hcGV4X3NuYXBzaG90X3BhY2thZ2UKLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSAkKGZvcmVhY2ggdm5ka192ZXIsJChQUk9EVUNUX0VYVFJBX1ZOREtfVkVSU0lPTlMpLGNvbS5hbmRyb2lkLnZuZGsudiQodm5ka192ZXIpKQotaW5jbHVkZSAkKEJVSUxEX1BIT05ZX1BBQ0tBR0UpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEZWZpbmUgUGhvbnkgbW9kdWxlIHRvIGluc3RhbGwgTExOREsgbW9kdWxlcyB3aGljaCBhcmUgaW5zdGFsbGVkIGluCi0jIHRoZSBzeXN0ZW0gaW1hZ2UKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGxsbmRrX2luX3N5c3RlbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi0KLSMgRmlsdGVyIExMTkRLIGxpYnMgbW92ZWQgdG8gQVBFWCB0byBhdm9pZCBwdWxsaW5nIHRoZW0gaW50byAvc3lzdGVtL0xJQgotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSBcCi0gICAgJChmaWx0ZXItb3V0ICQoTExOREtfTU9WRURfVE9fQVBFWF9MSUJSQVJJRVMpLCQoTExOREtfTElCUkFSSUVTKSkgXAotICAgIGxsbmRrLmxpYnJhcmllcy50eHQKLQotCi1pbmNsdWRlICQoQlVJTERfUEhPTllfUEFDS0FHRSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGluaXQuZ3NpLnJjLCBHU0ktc3BlY2lmaWMgaW5pdCBzY3JpcHQuCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGluaXQuZ3NpLnJjCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX01PRFVMRSkKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX1NZU1RFTV9FWFRfTU9EVUxFIDo9IHRydWUKLUxPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGluaXQKLQotaW5jbHVkZSAkKEJVSUxEX1BSRUJVSUxUKQotCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGluaXQudm5kay1ub2RlZi5yYwotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9NT0RVTEUpCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9TWVNURU1fRVhUX01PRFVMRSA6PSB0cnVlCi1MT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBnc2kKLQotaW5jbHVkZSAkKEJVSUxEX1BSRUJVSUxUKQpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9kdHMubWsgYi9jb3JlL3Rhc2tzL2R0cy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjA5MDgyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90YXNrcy9kdHMubWsKQEAgLTAsMCArMSwyOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBEZXNrdG9wIHRlc3Qgc3VpdGUKK2lmbmVxICgkKHdpbGRjYXJkIHRlc3QvZHRzL3Rvb2xzL2R0cy10cmFkZWZlZC9SRUFETUUpLCkKK3Rlc3Rfc3VpdGVfbmFtZSA6PSBkdHMKK3Rlc3Rfc3VpdGVfdHJhZGVmZWQgOj0gZHRzLXRyYWRlZmVkCit0ZXN0X3N1aXRlX3JlYWRtZSA6PSB0ZXN0L2R0cy90b29scy9kdHMtdHJhZGVmZWQvUkVBRE1FCit0ZXN0X3N1aXRlX3Rvb2xzIDo9ICQoSE9TVF9PVVRfSkFWQV9MSUJSQVJJRVMpL2F0c19jb25zb2xlX2RlcGxveS5qYXIgXAorICAkKEhPU1RfT1VUX0pBVkFfTElCUkFSSUVTKS9hdHNfb2xjX3NlcnZlcl9sb2NhbF9tb2RlX2RlcGxveS5qYXIKKworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGFza3MvdG9vbHMvY29tcGF0aWJpbGl0eS5taworCisuUEhPTlk6IGR0cworZHRzOiAkKGNvbXBhdGliaWxpdHlfemlwKSAkKGNvbXBhdGliaWxpdHlfdGVzdHNfbGlzdF96aXApCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGR0cywgJChjb21wYXRpYmlsaXR5X3ppcCkgJChjb21wYXRpYmlsaXR5X3Rlc3RzX2xpc3RfemlwKSkKK2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsgYi9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsKaW5kZXggZDZmYzA3Mi4uMTkwMWVkNSAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLm1rCisrKyBiL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy5tawpAQCAtMjcsMjEgKzI3LDkgQEAKICMgQ3JlYXRlIGFuIGFydGlmYWN0IHRvIGluY2x1ZGUgYWxsIHRlc3QgY29uZmlnIGZpbGVzIGluIGdlbmVyYWwtdGVzdHMuCiBnZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwIDo9ICQoUFJPRFVDVF9PVVQpL2dlbmVyYWwtdGVzdHNfY29uZmlncy56aXAKIAotIyBDb3B5IGtlcm5lbCB0ZXN0IG1vZHVsZXMgdG8gdGVzdGNhc2VzIGRpcmVjdG9yaWVzCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy92dHMta2VybmVsLXRlc3RzLm1rCi1sdHBfY29weV9wYWlycyA6PSBcCi0gICQoY2FsbCB0YXJnZXQtbmF0aXZlLWNvcHktcGFpcnMsJChrZXJuZWxfbHRwX21vZHVsZXMpLCQoa2VybmVsX2x0cF9ob3N0X291dCkpCi1jb3B5X2x0cF90ZXN0cyA6PSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobHRwX2NvcHlfcGFpcnMpKQotCi0jIFBIT05ZIHRhcmdldCB0byBiZSB1c2VkIHRvIGJ1aWxkIGFuZCB0ZXN0IGB2dHNfbHRwX3Rlc3RzYCB3aXRob3V0IGJ1aWxkaW5nIGZ1bGwgdnRzCi0uUEhPTlk6IHZ0c19rZXJuZWxfbHRwX3Rlc3RzCi12dHNfa2VybmVsX2x0cF90ZXN0czogJChjb3B5X2x0cF90ZXN0cykKLQogZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXAgOj0gJChQUk9EVUNUX09VVCkvZ2VuZXJhbC10ZXN0c19ob3N0LXNoYXJlZC1saWJzLnppcAogCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6ICQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApCi0kKGdlbmVyYWxfdGVzdHNfemlwKSA6ICQoY29weV9sdHBfdGVzdHMpCi0kKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfS0VSTkVMX0xUUF9IT1NUX09VVCA6PSAkKGtlcm5lbF9sdHBfaG9zdF9vdXQpCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfZ2VuZXJhbF90ZXN0c19saXN0X3ppcCA6PSAkKGdlbmVyYWxfdGVzdHNfbGlzdF96aXApCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IC5LQVRJX0lNUExJQ0lUX09VVFBVVFMgOj0gJChnZW5lcmFsX3Rlc3RzX2xpc3RfemlwKSAkKGdlbmVyYWxfdGVzdHNfY29uZmlnc196aXApCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfVE9PTFMgOj0gJChnZW5lcmFsX3Rlc3RzX3Rvb2xzKQpAQCAtNTIsNyArNDAsNiBAQAogCXJtIC1mICRAICQoUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2xpc3RfemlwKQogCW1rZGlyIC1wICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90b29scwogCWVjaG8gJChzb3J0ICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkZJTEVTKSAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5TT09OR19JTlNUQUxMRURfQ09NUEFUSUJJTElUWV9TVVBQT1JUX0ZJTEVTKSkgfCB0ciAiICIgIlxuIiA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdAotCWZpbmQgJChQUklWQVRFX0tFUk5FTF9MVFBfSE9TVF9PVVQpID4+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdAogCWdyZXAgJChIT1NUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC5saXN0IHx8IHRydWUKIAlncmVwICQoVEFSR0VUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvdGFyZ2V0Lmxpc3QgfHwgdHJ1ZQogCWdyZXAgLWUgLipcXC5jb25maWckJCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QubGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC10ZXN0LWNvbmZpZ3MubGlzdCB8fCB0cnVlCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3ByZWJ1aWx0X3RyYWRlZmVkLm1rIGIvY29yZS90YXNrcy9wcmVidWlsdF90cmFkZWZlZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmM1N2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS90YXNrcy9wcmVidWlsdF90cmFkZWZlZC5tawpAQCAtMCwwICsxLDIyIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpZmVxICgsJCh3aWxkY2FyZCB0b29scy90cmFkZWZlZGVyYXRpb24vY29yZSkpCisuUEhPTlk6IHRyYWRlZmVkLWNvcmUKK3RyYWRlZmVkLWNvcmU6IHRyYWRlZmVkIGF0ZXN0X3RyYWRlZmVkLnNoCisuUEhPTlk6IHRyYWRlZmVkLWFsbAordHJhZGVmZWQtYWxsOiB0cmFkZWZlZCBhdGVzdF90cmFkZWZlZC5zaAorCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsIHRyYWRlZmVkLCAkKEhPU1RfT1VUKS9ldGMvdHJhZGVmZWQuemlwKQorZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3Mvc3RzLXNkay5tayBiL2NvcmUvdGFza3Mvc3RzLXNkay5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiYmMyOS4uMDAwMDAwMAotLS0gYS9jb3JlL3Rhc2tzL3N0cy1zZGsubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAyMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1pZm5lcSAoJCh3aWxkY2FyZCB0ZXN0L3N0cy9SRUFETUUtc3RzLXNkay5tZCksKQotdGVzdF9zdWl0ZV9uYW1lIDo9IHN0cy1zZGsKLXRlc3Rfc3VpdGVfdHJhZGVmZWQgOj0gc3RzLXRyYWRlZmVkCi10ZXN0X3N1aXRlX3JlYWRtZSA6PSB0ZXN0L3N0cy9SRUFETUUtc3RzLXNkay5tZAotc3RzX3Nka196aXAgOj0gJChIT1NUX09VVCkvJCh0ZXN0X3N1aXRlX25hbWUpL3N0cy1zZGsuemlwCi0KLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL3Rhc2tzL3Rvb2xzL2NvbXBhdGliaWxpdHkubWsKLQotc3RzX3Nka19wbHVnaW5fc2tlbCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEVUQyxzdHMtc2RrLXBsdWdpbi1za2VsLnppcCkvc3RzLXNkay1wbHVnaW4tc2tlbC56aXAKLQotJChzdHNfc2RrX3ppcCk6IFNUU19TREtfWklQIDo9ICQoY29tcGF0aWJpbGl0eV96aXApCi0kKHN0c19zZGtfemlwKTogU1RTX1NES19QTFVHSU5fU0tFTCA6PSAkKHN0c19zZGtfcGx1Z2luX3NrZWwpCi0kKHN0c19zZGtfemlwKTogJChNRVJHRV9aSVBTKSAkKFpJUDJaSVApICQoY29tcGF0aWJpbGl0eV96aXApICQoc3RzX3Nka19wbHVnaW5fc2tlbCkKLQlybSAtZiAkQCAkKFNUU19TREtfWklQKV9maWx0ZXJlZAotCSQoWklQMlpJUCkgLWkgJChTVFNfU0RLX1pJUCkgLW8gJChTVFNfU0RLX1pJUClfZmlsdGVyZWQgXAotCQkteCBhbmRyb2lkLXN0cy1zZGsvdG9vbHMvc3RzLXRyYWRlZmVkLXRlc3RzLmphciBcCi0JCSdhbmRyb2lkLXN0cy1zZGsvdG9vbHMvKjpzdHMtc2RrL3NyYy9tYWluL3Jlc291cmNlcy9zdHMtdHJhZGVmZWQtdG9vbHMvJwotCSQoTUVSR0VfWklQUykgJEAgJChTVFNfU0RLX1pJUClfZmlsdGVyZWQgJChTVFNfU0RLX1BMVUdJTl9TS0VMKQotCXJtIC1mICQoU1RTX1NES19aSVApX2ZpbHRlcmVkCi0KLS5QSE9OWTogc3RzLXNkawotc3RzLXNkazogJChzdHNfc2RrX3ppcCkKLSQoY2FsbCBkaXN0LWZvci1nb2Fscywgc3RzLXNkaywgJChzdHNfc2RrX3ppcCkpCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Rvb2xzL3Z0cy1rZXJuZWwtdGVzdHMubWsgYi9jb3JlL3Rhc2tzL3Rvb2xzL3Z0cy1rZXJuZWwtdGVzdHMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MjdkYzEuLjAwMDAwMDAKLS0tIGEvY29yZS90YXNrcy90b29scy92dHMta2VybmVsLXRlc3RzLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMjIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLWluY2x1ZGUgZXh0ZXJuYWwvbHRwL2FuZHJvaWQvbHRwX3BhY2thZ2VfbGlzdC5tawotCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy92dHNfcGFja2FnZV91dGlscy5tawotCi0jIENvcHkga2VybmVsIHRlc3QgbW9kdWxlcyB0byB0ZXN0Y2FzZXMgZGlyZWN0b3JpZXMKLWtlcm5lbF9sdHBfaG9zdF9vdXQgOj0gJChIT1NUX09VVF9URVNUQ0FTRVMpL3Z0c19rZXJuZWxfbHRwX3Rlc3RzCi1rZXJuZWxfbHRwX3Z0c19vdXQgOj0gJChIT1NUX09VVCkvJCh0ZXN0X3N1aXRlX25hbWUpL2FuZHJvaWQtJCh0ZXN0X3N1aXRlX25hbWUpL3Rlc3RjYXNlcy92dHNfa2VybmVsX2x0cF90ZXN0cwota2VybmVsX2x0cF9tb2R1bGVzIDo9IFwKLSAgICBsdHAgXAotICAgICQobHRwX3BhY2thZ2VzKQpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy90b29scy92dHNfcGFja2FnZV91dGlscy5tayBiL2NvcmUvdGFza3MvdG9vbHMvdnRzX3BhY2thZ2VfdXRpbHMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhODE5ZjIuLjAwMDAwMDAKLS0tIGEvY29yZS90YXNrcy90b29scy92dHNfcGFja2FnZV91dGlscy5taworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDIwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLSMgJCgxKTogTGlzdCBvZiB0YXJnZXQgbmF0aXZlIGZpbGVzIHRvIGNvcHkuCi0jICQoMik6IENvcHkgZGVzdGluYXRpb24gZGlyZWN0b3J5LgotIyBFdmFsdWF0ZXMgdG8gYSBsaXN0IG9mICI6Ii1zZXBhcmF0ZWQgcGFpcnMgc3JjOmRzdC4KLWRlZmluZSB0YXJnZXQtbmF0aXZlLWNvcHktcGFpcnMKLSQoZm9yZWFjaCBtLCQoMSksXAotICAkKGV2YWwgX2J1aWx0X2ZpbGVzIDo9ICQoc3RyaXAgJChBTExfTU9EVUxFUy4kKG0pLkJVSUxUX0lOU1RBTExFRClcCi0gICQoQUxMX01PRFVMRVMuJChtKSQoVEFSR0VUXzJORF9BUkNIX01PRFVMRV9TVUZGSVgpLkJVSUxUX0lOU1RBTExFRCkpKVwKLSAgJChmb3JlYWNoIGksICQoc29ydCAkKF9idWlsdF9maWxlcykpLFwKLSAgICAkKGV2YWwgYnVpX2lucyA6PSAkKHN1YnN0IDosJChzcGFjZSksJChpKSkpXAotICAgICQoZXZhbCBpbnMgOj0gJCh3b3JkIDIsJChidWlfaW5zKSkpXAotICAgICQoaWYgJChmaWx0ZXIgJChUQVJHRVRfT1VUX1JPT1QpLyUsJChpbnMpKSxcCi0gICAgICAkKGV2YWwgYnVpIDo9ICQod29yZCAxLCQoYnVpX2lucykpKVwKLSAgICAgICQoZXZhbCBteV9jb3B5X2Rlc3QgOj0gJChwYXRzdWJzdCBkYXRhLyUsREFUQS8lLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHBhdHN1YnN0IHN5c3RlbS8lLERBVEEvJSxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocGF0c3Vic3QgJChQUk9EVUNUX09VVCkvJSwlLCQoaW5zKSkpKSlcCi0gICAgICAkKGNhbGwgZGVjbGFyZS1jb3B5LXRhcmdldC1saWNlbnNlLW1ldGFkYXRhLCQoMikvJChteV9jb3B5X2Rlc3QpLCQoYnVpKSlcCi0gICAgICAkKGJ1aSk6JCgyKS8kKG15X2NvcHlfZGVzdCkpKSkKLWVuZGVmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Z0cy1jb3JlLXRlc3RzLm1rIGIvY29yZS90YXNrcy92dHMtY29yZS10ZXN0cy5tawppbmRleCAxZWViMDc4Li4xMWJiOTMyIDEwMDY0NAotLS0gYS9jb3JlL3Rhc2tzL3Z0cy1jb3JlLXRlc3RzLm1rCisrKyBiL2NvcmUvdGFza3MvdnRzLWNvcmUtdGVzdHMubWsKQEAgLTE2LDE1ICsxNiw2IEBACiB0ZXN0X3N1aXRlX3RyYWRlZmVkIDo9IHZ0cy10cmFkZWZlZAogdGVzdF9zdWl0ZV9yZWFkbWUgOj0gdGVzdC92dHMvdG9vbHMvdnRzLWNvcmUtdHJhZGVmZWQvUkVBRE1FCiAKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL3Rhc2tzL3Rvb2xzL3Z0cy1rZXJuZWwtdGVzdHMubWsKLQotbHRwX2NvcHlfcGFpcnMgOj0gXAotICAkKGNhbGwgdGFyZ2V0LW5hdGl2ZS1jb3B5LXBhaXJzLCQoa2VybmVsX2x0cF9tb2R1bGVzKSwkKGtlcm5lbF9sdHBfdnRzX291dCkpCi0KLWNvcHlfbHRwX3Rlc3RzIDo9ICQoY2FsbCBjb3B5LW1hbnktZmlsZXMsJChsdHBfY29weV9wYWlycykpCi0KLXRlc3Rfc3VpdGVfZXh0cmFfZGVwcyA6PSAkKGNvcHlfbHRwX3Rlc3RzKQotCiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy9jb21wYXRpYmlsaXR5Lm1rCiAKIC5QSE9OWTogdnRzCmRpZmYgLS1naXQgYS9jb3JlL3ZlcnNpb25fdXRpbC5tayBiL2NvcmUvdmVyc2lvbl91dGlsLm1rCmluZGV4IDBlMzQ2MzQuLjJiZjQxZWMgMTAwNjQ0Ci0tLSBhL2NvcmUvdmVyc2lvbl91dGlsLm1rCisrKyBiL2NvcmUvdmVyc2lvbl91dGlsLm1rCkBAIC0yMyw2ICsyMyw3IEBACiAjICAgICBQTEFURk9STV9ESVNQTEFZX1ZFUlNJT04KICMgICAgIFBMQVRGT1JNX1NES19WRVJTSU9OCiAjICAgICBQTEFURk9STV9TREtfRVhURU5TSU9OX1ZFUlNJT04KKyMgICAgIFBMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OCiAjICAgICBQTEFURk9STV9WRVJTSU9OX0NPREVOQU1FCiAjICAgICBERUZBVUxUX0FQUF9UQVJHRVRfU0RLCiAjICAgICBCVUlMRF9JRApAQCAtNjcsOCArNjgsMTYgQEAKIFBMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTiA6PSAkKFJFTEVBU0VfUExBVEZPUk1fU0RLX0VYVEVOU0lPTl9WRVJTSU9OKQogLktBVElfUkVBRE9OTFkgOj0gUExBVEZPUk1fU0RLX0VYVEVOU0lPTl9WRVJTSU9OCiAKLSMgVGhpcyBpcyB0aGUgc2RrIGV4dGVuc2lvbiB2ZXJzaW9uIHRoYXQgUExBVEZPUk1fU0RLX1ZFUlNJT04gc2hpcHMgd2l0aC4KLVBMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OIDo9ICQoUExBVEZPUk1fU0RLX0VYVEVOU0lPTl9WRVJTSU9OKQoraWZkZWYgUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04KKyAgJChlcnJvciBEbyBub3Qgc2V0IFBMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OIGRpcmVjdGx5LiBVc2UgUkVMRUFTRV9QTEFURk9STV9CQVNFX1NES19FWFRFTlNJT05fVkVSU0lPTi4gdmFsdWU6ICQoUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04pKQorZW5kaWYKK2lmZGVmIFJFTEVBU0VfUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04KKyAgIyBUaGlzIGlzIHRoZSBzZGsgZXh0ZW5zaW9uIHZlcnNpb24gdGhhdCBQTEFURk9STV9TREtfVkVSU0lPTiBzaGlwcyB3aXRoLgorICBQTEFURk9STV9CQVNFX1NES19FWFRFTlNJT05fVkVSU0lPTiA6PSAkKFJFTEVBU0VfUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04pCitlbHNlCisgICMgRmFsbGJhY2sgdG8gUExBVEZPUk1fU0RLX0VYVEVOU0lPTl9WRVJTSU9OIGlmIFJFTEVBU0VfUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04gaXMgdW5kZWZpbmVkLgorICBQTEFURk9STV9CQVNFX1NES19FWFRFTlNJT05fVkVSU0lPTiA6PSAkKFBMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTikKK2VuZGlmCiAuS0FUSV9SRUFET05MWSA6PSBQTEFURk9STV9CQVNFX1NES19FWFRFTlNJT05fVkVSU0lPTgogCiBpZmRlZiBQTEFURk9STV9WRVJTSU9OX0NPREVOQU1FCmRpZmYgLS1naXQgYS9lbnZzZXR1cC5zaCBiL2VudnNldHVwLnNoCmluZGV4IDA2ZGFkZDMuLjU1NGEyMjAgMTAwNjQ0Ci0tLSBhL2VudnNldHVwLnNoCisrKyBiL2VudnNldHVwLnNoCkBAIC0zNjIsNyArMzYyLDYgQEAKICAgICAgIHBhY2thZ2VzL21vZHVsZXMvYWRiL2FkYi5iYXNoCiAgICAgICBzeXN0ZW0vY29yZS9mYXN0Ym9vdC9mYXN0Ym9vdC5iYXNoCiAgICAgICB0b29scy9hc3VpdGUvYXN1aXRlLnNoCi0gICAgICBwcmVidWlsdHMvYmF6ZWwvY29tbW9uL2JhemVsLWNvbXBsZXRlLmJhc2gKICAgICApCiAgICAgIyBDb21wbGV0aW9uIGNhbiBiZSBkaXNhYmxlZCBzZWxlY3RpdmVseSB0byBhbGxvdyB1c2VycyB0byB1c2Ugbm9uLXN0YW5kYXJkIGNvbXBsZXRpb24uCiAgICAgIyBlLmcuCkBAIC00NDIsNiArNDQxLDcgQEAKIGZ1bmN0aW9uIGx1bmNoKCkKIHsKICAgICBsb2NhbCBhbnN3ZXIKKyAgICBzZXR1cF9jb2dfZW52X2lmX25lZWRlZAogCiAgICAgaWYgW1sgJCMgLWd0IDEgXV07IHRoZW4KICAgICAgICAgZWNobyAidXNhZ2U6IGx1bmNoIFt0YXJnZXRdIiA+JjIKQEAgLTEwNzksMTAgKzEwNzksNyBAQAogICAgICAgICBkb25lCiAgICAgZG9uZQogCi0gICAgaWYgW1sgIiR7UFdEfSIgPT0gL2dvb2dsZS9jb2cvKiBdXTsgdGhlbgotICAgICAgICBmPSJidWlsZC9tYWtlL2NvZ3NldHVwLnNoIgotICAgICAgICBlY2hvICJpbmNsdWRpbmcgJGYiOyAuICIkVC8kZiIKLSAgICBmaQorICAgIHNldHVwX2NvZ19lbnZfaWZfbmVlZGVkCiB9CiAKIGZ1bmN0aW9uIHNob3djb21tYW5kcygpIHsKZGlmZiAtLWdpdCBhL3NoZWxsX3V0aWxzLnNoIGIvc2hlbGxfdXRpbHMuc2gKaW5kZXggODZmM2Y0OS4uMzEyNGRiNSAxMDA2NDQKLS0tIGEvc2hlbGxfdXRpbHMuc2gKKysrIGIvc2hlbGxfdXRpbHMuc2gKQEAgLTYzLDYgKzYzLDcwIEBACiB9CiBmaQogCisjIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgdG8gYmUgYXBwcm9wcmlhdGUgZm9yIENvZy4KK2Z1bmN0aW9uIHNldHVwX2NvZ19lbnZfaWZfbmVlZGVkKCkgeworICBsb2NhbCB0b3A9JChnZXR0b3ApCisKKyAgIyByZXR1cm4gZWFybHkgaWYgbm90IGluIGEgY29nIHdvcmtzcGFjZQorICBpZiBbWyAhICIkdG9wIiA9fiBeL2dvb2dsZS9jb2cgXV07IHRoZW4KKyAgICByZXR1cm4gMAorICBmaQorCisgIHNldHVwX2NvZ19zeW1saW5rCisKKyAgZXhwb3J0IEFORFJPSURfQlVJTERfRU5WSVJPTk1FTlRfQ09ORklHPSJnb29nbGVyLWNvZyIKKworICAjIFJ1bm5pbmcgcmVwbyBjb21tYW5kIHdpdGhpbiBDb2cgd29ya3NwYWNlcyBpcyBub3Qgc3VwcG9ydGVkLCBzbyBvdmVycmlkZQorICAjIGl0IHdpdGggdGhpcyBmdW5jdGlvbi4gSWYgdGhlIHVzZXIgaXMgcnVubmluZyByZXBvIHdpdGhpbiBhIENvZyB3b3Jrc3BhY2UsCisgICMgd2UnbGwgZmFpbCB3aXRoIGFuIGVycm9yLCBvdGhlcndpc2UsIHdlIHJ1biB0aGUgb3JpZ2luYWwgcmVwbyBjb21tYW5kIHdpdGgKKyAgIyB0aGUgZ2l2ZW4gYXJncy4KKyAgaWYgISBPUklHX1JFUE9fUEFUSD1gd2hpY2ggcmVwb2A7IHRoZW4KKyAgICByZXR1cm4gMAorICBmaQorICBmdW5jdGlvbiByZXBvIHsKKyAgICBpZiBbWyAiJHtQV0R9IiA9PSAvZ29vZ2xlL2NvZy8qIF1dOyB0aGVuCisgICAgICBlY2hvIC1lICJcZVswMTszMW1FUlJPUjpcZVswbXJlcG8gY29tbWFuZCBpcyBkaXNhbGxvd2VkIHdpdGhpbiBDb2cgd29ya3NwYWNlcy4iCisgICAgICBraWxsIC1JTlQgJCQgIyBleGl0cyB0aGUgc2NyaXB0IHdpdGhvdXQgZXhpdGluZyB0aGUgdXNlcidzIHNoZWxsCisgICAgZmkKKyAgICAke09SSUdfUkVQT19QQVRIfSAiJEAiCisgIH0KK30KKworIyBjcmVhdGVzIGEgc3ltbGluayBmb3IgdGhlIG91dC8gZGlyIHdoZW4gaW5zaWRlIGEgY29nIHdvcmtzcGFjZS4KK2Z1bmN0aW9uIHNldHVwX2NvZ19zeW1saW5rKCkgeworICBsb2NhbCBvdXRfZGlyPSQoZ2V0b3V0ZGlyKQorICBsb2NhbCB0b3A9JChnZXR0b3ApCisKKyAgIyByZXR1cm4gZWFybHkgaWYgb3V0IGRpciBpcyBhbHJlYWR5IGEgc3ltbGluaworICBpZiBbWyAtTCAiJG91dF9kaXIiIF1dOyB0aGVuCisgICAgcmV0dXJuIDAKKyAgZmkKKworICAjIHJldHVybiBlYXJseSBpZiBvdXQgZGlyIGlzIG5vdCBpbiB0aGUgd29ya3NwYWNlCisgIGlmIFtbICEgIiRvdXRfZGlyIiA9fiBeJHRvcC8gXV07IHRoZW4KKyAgICByZXR1cm4gMAorICBmaQorCisgIGxvY2FsIGxpbmtfZGVzdGluYXRpb249IiR7SE9NRX0vLmNvZy9hbmRyb2lkLWJ1aWxkLW91dCIKKworICAjIHJlbW92ZSBleGlzdGluZyBvdXQvIGRpciBpZiBpdCBleGlzdHMKKyAgaWYgW1sgLWQgIiRvdXRfZGlyIiBdXTsgdGhlbgorICAgIGVjaG8gIkRldGVjdGVkIGV4aXN0aW5nIG91dC8gZGlyZWN0b3J5IGluIHRoZSBDb2cgd29ya3NwYWNlIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIFJlcGFpcmluZyB3b3Jrc3BhY2UgYnkgcmVtb3ZpbmcgaXQgYW5kIGNyZWF0aW5nIHRoZSBzeW1saW5rIHRvIH4vLmNvZy9hbmRyb2lkLWJ1aWxkLW91dCIKKyAgICBpZiAhIHJtIC1yZiAiJG91dF9kaXIiOyB0aGVuCisgICAgICBlY2hvICJGYWlsZWQgdG8gcmVtb3ZlIGV4aXN0aW5nIG91dC8gZGlyZWN0b3J5OiAkb3V0X2RpciIgPiYyCisgICAgICBraWxsIC1JTlQgJCQgIyBleGl0cyB0aGUgc2NyaXB0IHdpdGhvdXQgZXhpdGluZyB0aGUgdXNlcidzIHNoZWxsCisgICAgZmkKKyAgZmkKKworICAjIGNyZWF0ZSBzeW1saW5rCisgIGVjaG8gIkNyZWF0aW5nIHN5bWxpbms6ICRvdXRfZGlyIC0+ICRsaW5rX2Rlc3RpbmF0aW9uIgorICBta2RpciAtcCAke2xpbmtfZGVzdGluYXRpb259CisgIGlmICEgbG4gLXMgIiRsaW5rX2Rlc3RpbmF0aW9uIiAiJG91dF9kaXIiOyB0aGVuCisgICAgZWNobyAiRmFpbGVkIHRvIGNyZWF0ZSBjb2cgc3ltbGluazogJG91dF9kaXIgLT4gJGxpbmtfZGVzdGluYXRpb24iID4mMgorICAgIGtpbGwgLUlOVCAkJCAjIGV4aXRzIHRoZSBzY3JpcHQgd2l0aG91dCBleGl0aW5nIHRoZSB1c2VyJ3Mgc2hlbGwKKyAgZmkKK30KKwogZnVuY3Rpb24gZ2V0b3V0ZGlyCiB7CiAgICAgbG9jYWwgdG9wPSQoZ2V0dG9wKQpAQCAtMTE0LDExICsxNzgsMTEgQEAKICAgICAgICAgZWNobyAtbiAiJHtjb2xvcl9mYWlsZWR9IyMjIyBmYWlsZWQgdG8gYnVpbGQgc29tZSB0YXJnZXRzICIKICAgICBmaQogICAgIGlmIFsgJGhvdXJzIC1ndCAwIF0gOyB0aGVuCi0gICAgICAgIHByaW50ZiAiKCUwMmc6JTAyZzolMDJnIChoaDptbTpzcykpIiAkaG91cnMgJG1pbnMgJHNlY3MKKyAgICAgICAgcHJpbnRmICIoJTAyZDolMDJkOiUwMmQgKGhoOm1tOnNzKSkiICRob3VycyAkbWlucyAkc2VjcwogICAgIGVsaWYgWyAkbWlucyAtZ3QgMCBdIDsgdGhlbgotICAgICAgICBwcmludGYgIiglMDJnOiUwMmcgKG1tOnNzKSkiICRtaW5zICRzZWNzCisgICAgICAgIHByaW50ZiAiKCUwMmQ6JTAyZCAobW06c3MpKSIgJG1pbnMgJHNlY3MKICAgICBlbGlmIFsgJHNlY3MgLWd0IDAgXSA7IHRoZW4KLSAgICAgICAgcHJpbnRmICIoJXMgc2Vjb25kcykiICRzZWNzCisgICAgICAgIHByaW50ZiAiKCVkIHNlY29uZHMpIiAkc2VjcwogICAgIGZpCiAgICAgZWNobyAiICMjIyMke2NvbG9yX3Jlc2V0fSIKICAgICBlY2hvCkBAIC0xNTAsMyArMjE0LDE5IEBACiAgICAgJyBTSUdJTlQgU0lHVEVSTSBTSUdRVUlUIEVYSVQKIH0KIAorIyBJbXBvcnQgdGhlIGJ1aWxkIHZhcmlhYmxlcyBzdXBwbGllZCBhcyBhcmd1bWVudHMgaW50byB0aGlzIHNoZWxsJ3MgZW52aXJvbm1lbnQuCisjIEZvciBhYnNvbHV0ZSB2YXJpYWJsZXMsIHByZWZpeCB0aGUgdmFyaWFibGUgbmFtZSB3aXRoIGEgJy8nLiBGb3IgZXhhbXBsZToKKyMgICAgaW1wb3J0X2J1aWxkX3ZhcnMgT1VUX0RJUiBESVNUX0RJUiAvSE9TVF9PVVRfRVhFQ1VUQUJMRVMKKyMgUmV0dXJucyBub256ZXJvIGlmIHRoZSBidWlsZCBjb21tYW5kIGZhaWxlZC4gU3RkZXJyIGlzIHBhc3NlZCB0aHJvdWdoLgorZnVuY3Rpb24gaW1wb3J0X2J1aWxkX3ZhcnMoKQoreworICAgIHJlcXVpcmVfdG9wCisgICAgbG9jYWwgc2NyaXB0CisgICAgc2NyaXB0PSQoY2QgJFRPUCAmJiBidWlsZC9zb29uZy9iaW4vZ2V0X2J1aWxkX3ZhcnMgIiRAIikKKyAgICBsb2NhbCByZXQ9JD8KKyAgICBpZiBbICRyZXQgLW5lIDAgXSA7IHRoZW4KKyAgICAgICAgcmV0dXJuICRyZXQKKyAgICBmaQorICAgIGV2YWwgIiRzY3JpcHQiCisgICAgcmV0dXJuICQ/Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvQW5kcm9pZC5tayBiL3RhcmdldC9ib2FyZC9hbmRyb2lkLWluZm8ubWsKc2ltaWxhcml0eSBpbmRleCA3MSUKcmVuYW1lIGZyb20gdGFyZ2V0L2JvYXJkL0FuZHJvaWQubWsKcmVuYW1lIHRvIHRhcmdldC9ib2FyZC9hbmRyb2lkLWluZm8ubWsKaW5kZXggODEzM2FmOS4uMzZiZTAwMiAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL0FuZHJvaWQubWsKKysrIGIvdGFyZ2V0L2JvYXJkL2FuZHJvaWQtaW5mby5tawpAQCAtNTEsMjkgKzUxLDYgQEAKIAogIyBDb3B5IGNvbXBhdGliaWxpdHkgbWV0YWRhdGEgdG8gdGhlIGRldmljZS4KIAotIyBEZXZpY2UgTWFuaWZlc3QKLWlmZGVmIERFVklDRV9NQU5JRkVTVF9GSUxFCi0jICQoREVWSUNFX01BTklGRVNUX0ZJTEUpIGNhbiBiZSBhIGxpc3Qgb2YgZmlsZXMKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFICAgICAgICA6PSB2ZW5kb3JfbWFuaWZlc3QueG1sCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAgbGVnYWN5X25vdF9hX2NvbnRyaWJ1dGlvbgotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IGJ5X2V4Y2VwdGlvbl9vbmx5IG5vdF9hbGxvd2VkIG5vdGljZQotTE9DQUxfTU9EVUxFX1NURU0gICA6PSBtYW5pZmVzdC54bWwKLUxPQ0FMX01PRFVMRV9DTEFTUyAgOj0gRVRDCi1MT0NBTF9NT0RVTEVfUEFUSCAgIDo9ICQoVEFSR0VUX09VVF9WRU5ET1IpL2V0Yy92aW50ZgotCi1HRU4gOj0gJChsb2NhbC1nZW5lcmF0ZWQtc291cmNlcy1kaXIpL21hbmlmZXN0LnhtbAotJChHRU4pOiBQUklWQVRFX0RFVklDRV9NQU5JRkVTVF9GSUxFIDo9ICQoREVWSUNFX01BTklGRVNUX0ZJTEUpCi0kKEdFTik6ICQoREVWSUNFX01BTklGRVNUX0ZJTEUpICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2Fzc2VtYmxlX3ZpbnRmCi0JQk9BUkRfU0VQT0xJQ1lfVkVSUz0kKEJPQVJEX1NFUE9MSUNZX1ZFUlMpIFwKLQlQUk9EVUNUX0VORk9SQ0VfVklOVEZfTUFOSUZFU1Q9JChQUk9EVUNUX0VORk9SQ0VfVklOVEZfTUFOSUZFU1QpIFwKLQkkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZiAtbyAkQCBcCi0JCS1pICQoY2FsbCBub3JtYWxpemUtcGF0aC1saXN0LCQoUFJJVkFURV9ERVZJQ0VfTUFOSUZFU1RfRklMRSkpCi0KLUxPQ0FMX1BSRUJVSUxUX01PRFVMRV9GSUxFIDo9ICQoR0VOKQotaW5jbHVkZSAkKEJVSUxEX1BSRUJVSUxUKQotZW5kaWYKLQogIyBERVZJQ0VfTUFOSUZFU1RfU0tVUzogYSBsaXN0IG9mIFNLVVMgd2hlcmUgREVWSUNFX01BTklGRVNUXzxza3U+X0ZJTEVTIGlzIGRlZmluZWQuCiBpZmRlZiBERVZJQ0VfTUFOSUZFU1RfU0tVUwogCkBAIC0xMTIsMzAgKzg5LDYgQEAKIAogZW5kaWYgIyBERVZJQ0VfTUFOSUZFU1RfU0tVUwogCi0jIE9ETSBtYW5pZmVzdAotaWZkZWYgT0RNX01BTklGRVNUX0ZJTEVTCi0jIE9ETV9NQU5JRkVTVF9GSUxFUyBpcyBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBpcyBjb21iaW5lZCBhbmQgaW5zdGFsbGVkIGFzIHRoZSBkZWZhdWx0IE9ETSBtYW5pZmVzdC4KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IG9kbV9tYW5pZmVzdC54bWwKLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMCBsZWdhY3lfbm90X2FfY29udHJpYnV0aW9uCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gYnlfZXhjZXB0aW9uX29ubHkgbm90X2FsbG93ZWQgbm90aWNlCi1MT0NBTF9NT0RVTEVfU1RFTSA6PSBtYW5pZmVzdC54bWwKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IHZpbnRmCi1MT0NBTF9PRE1fTU9EVUxFIDo9IHRydWUKLQotR0VOIDo9ICQobG9jYWwtZ2VuZXJhdGVkLXNvdXJjZXMtZGlyKS9tYW5pZmVzdC54bWwKLSQoR0VOKTogUFJJVkFURV9TUkNfRklMRVMgOj0gJChPRE1fTUFOSUZFU1RfRklMRVMpCi0kKEdFTik6ICQoT0RNX01BTklGRVNUX0ZJTEVTKSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZgotCSMgU2V0IFZJTlRGX0lHTk9SRV9UQVJHRVRfRkNNX1ZFUlNJT04gdG8gdHJ1ZSBiZWNhdXNlIGl0IHNob3VsZCBvbmx5IGJlIGluIGRldmljZSBtYW5pZmVzdC4KLQlWSU5URl9JR05PUkVfVEFSR0VUX0ZDTV9WRVJTSU9OPXRydWUgXAotCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2Fzc2VtYmxlX3ZpbnRmIC1vICRAIFwKLQkJLWkgJChjYWxsIG5vcm1hbGl6ZS1wYXRoLWxpc3QsJChQUklWQVRFX1NSQ19GSUxFUykpCi0KLUxPQ0FMX1BSRUJVSUxUX01PRFVMRV9GSUxFIDo9ICQoR0VOKQotaW5jbHVkZSAkKEJVSUxEX1BSRUJVSUxUKQotZW5kaWYgIyBPRE1fTUFOSUZFU1RfRklMRVMKLQogIyBPRE1fTUFOSUZFU1RfU0tVUzogYSBsaXN0IG9mIFNLVVMgd2hlcmUgT0RNX01BTklGRVNUXzxza3U+X0ZJTEVTIGFyZSBkZWZpbmVkLgogaWZkZWYgT0RNX01BTklGRVNUX1NLVVMKIApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsgYi90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5tawppbmRleCA1NjM1MTFmLi5iOWIyMjZiIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5taworKysgYi90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5tawpAQCAtMTcsNyArMTcsNyBAQAogIyBCYXNlIG1vZHVsZXMgYW5kIHNldHRpbmdzIGZvciB0aGUgc3lzdGVtIHBhcnRpdGlvbi4KIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIGFieCBcCi0gICAgYWNvbmZpZ2QgXAorICAgIGFjb25maWdkLXN5c3RlbSBcCiAgICAgYWRiZF9zeXN0ZW1fYXBpIFwKICAgICBhZmxhZ3MgXAogICAgIGFtIFwKQEAgLTk2LDYgKzk2LDcgQEAKICAgICBlbmhhbmNlZC1jb25maXJtYXRpb24ueG1sIFwKICAgICBFeHRTaGFyZWQgXAogICAgIGZsYWdzX2hlYWx0aF9jaGVjayBcCisgICAgZnJhbWV3b3JrLWNvbm5lY3Rpdml0eS1iIFwKICAgICBmcmFtZXdvcmstZ3JhcGhpY3MgXAogICAgIGZyYW1ld29yay1sb2NhdGlvbiBcCiAgICAgZnJhbWV3b3JrLW1pbnVzLWFwZXggXApAQCAtMjExLDYgKzIxMiw3IEBACiAgICAgbGlid2lsaGVsbSBcCiAgICAgbGlua2VyIFwKICAgICBsbGtkIFwKKyAgICBsbG5ka19saWJzIFwKICAgICBsbWtkIFwKICAgICBMb2NhbFRyYW5zcG9ydCBcCiAgICAgbG9ja3NldHRpbmdzIFwKQEAgLTI0Niw2ICsyNDgsNyBAQAogICAgIHBpbnRvb2wgXAogICAgIHBsYXRmb3JtLnhtbCBcCiAgICAgcG0gXAorICAgIHByZWZldGNoIFwKICAgICBwcmVpbnN0YWxsZWQtcGFja2FnZXMtYXNsLWZpbGVzLnhtbCBcCiAgICAgcHJlaW5zdGFsbGVkLXBhY2thZ2VzLXBsYXRmb3JtLnhtbCBcCiAgICAgcHJlaW5zdGFsbGVkLXBhY2thZ2VzLXN0cmljdC1zaWduYXR1cmUueG1sIFwKQEAgLTI3NCw3ICsyNzcsNiBAQAogICAgIFNoZWxsIFwKICAgICBzaGVsbF9hbmRfdXRpbGl0aWVzX3N5c3RlbSBcCiAgICAgc20gXAotICAgIHNuYXBzaG90Y3RsIFwKICAgICBzbmFwdXNlcmQgXAogICAgIHN0b3JhZ2VkIFwKICAgICBzdXJmYWNlZmxpbmdlciBcCkBAIC0yODcsNiArMjg5LDcgQEAKICAgICB0b21ic3RvbmVkIFwKICAgICB0cmFjZWQgXAogICAgIHRyYWNlZF9wcm9iZXMgXAorICAgIHRyYWRlaW5tb2RlIFwKICAgICB0dW5lMmZzIFwKICAgICB1aWF1dG9tYXRvciBcCiAgICAgdWlucHV0IFwKQEAgLTM1MCw2ICszNTMsMTEgQEAKICAgICAgICAgY29tLmFuZHJvaWQucmFuZ2luZwogZW5kaWYKIAoraWZlcSAoJChSRUxFQVNFX01FTU9SWV9NQU5BR0VNRU5UX0RBRU1PTiksdHJ1ZSkKKyAgUFJPRFVDVF9QQUNLQUdFUyArPSBcCisgICAgICAgIG1tX2RhZW1vbgorZW5kaWYKKwogIyBWSU5URiBkYXRhIGZvciBzeXN0ZW0gaW1hZ2UKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIHN5c3RlbV9tYW5pZmVzdC54bWwgXApAQCAtNDI0LDYgKzQzMiw3IEBACiAgICAgbHBkdW1wIFwKICAgICBta2UyZnMgXAogICAgIG1rZnMuZXJvZnMgXAorICAgIHBidG9tYnN0b25lIFwKICAgICByZXNpemUyZnMgXAogICAgIHNnZGlzayBcCiAgICAgc3FsaXRlMyBcCkBAIC00OTEsNiArNTAwLDcgQEAKICAgICByZWNvcmRfYmluZGVyIFwKICAgICBzZXJ2aWNlZGlzcGF0Y2hlciBcCiAgICAgc2hvd21hcCBcCisgICAgc25hcHNob3RjdGwgXAogICAgIHNxbGl0ZTMgXAogICAgIHNzIFwKICAgICBzdGFydF93aXRoX2xvY2thZ2VudCBcCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9iYXNlX3ZlbmRvci5tayBiL3RhcmdldC9wcm9kdWN0L2Jhc2VfdmVuZG9yLm1rCmluZGV4IGE4MGUwYjMuLjE2ZmM3ZmQgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2Jhc2VfdmVuZG9yLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2Jhc2VfdmVuZG9yLm1rCkBAIC0xNyw3ICsxNyw2IEBACiAjIEJhc2UgbW9kdWxlcyBhbmQgc2V0dGluZ3MgZm9yIHJlY292ZXJ5LgogUFJPRFVDVF9QQUNLQUdFUyArPSBcCiAgICAgYWRiZC5yZWNvdmVyeSBcCi0gICAgYW5kcm9pZC5oYXJkd2FyZS5oZWFsdGhAMi4wLWltcGwtZGVmYXVsdC5yZWNvdmVyeSBcCiAgICAgYnVpbGRfZmxhZ192ZW5kb3IgXAogICAgIGNncm91cHMucmVjb3ZlcnkuanNvbiBcCiAgICAgY2hhcmdlci5yZWNvdmVyeSBcCkBAIC03Miw2ICs3MSw4IEBACiAgICAgcGFzc3dkX29kbSBcCiAgICAgcGFzc3dkX3ZlbmRvciBcCiAgICAgc2VsaW51eF9wb2xpY3lfbm9uc3lzdGVtIFwKKyAgICBzZWxpbnV4X3BvbGljeV92ZW5kb3IgXAorICAgIHNlbGludXhfcG9saWN5X29kbSBcCiAgICAgc2hlbGxfYW5kX3V0aWxpdGllc192ZW5kb3IgXAogICAgIG9kbS1idWlsZC5wcm9wIFwKIApAQCAtMTA1LDYgKzEwNiw3IEBACiAjIFZJTlRGIGRhdGEgZm9yIHZlbmRvciBpbWFnZQogUFJPRFVDVF9QQUNLQUdFUyArPSBcCiAgICAgdmVuZG9yX2NvbXBhdGliaWxpdHlfbWF0cml4LnhtbCBcCisgICAgdmVuZG9yX21hbmlmZXN0LnhtbCBcCiAKICMgQmFzZSBtb2R1bGVzIGFuZCBzZXR0aW5ncyBmb3IgdGhlIGRlYnVnIHJhbWRpc2ssIHdoaWNoIGlzIHRoZW4gcGFja2VkCiAjIGludG8gYSBib290LWRlYnVnLmltZyBhbmQgYSB2ZW5kb3JfYm9vdC1kZWJ1Zy5pbWcuCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9idWlsZF92YXJpYWJsZXMubWsgYi90YXJnZXQvcHJvZHVjdC9idWlsZF92YXJpYWJsZXMubWsKaW5kZXggOWZjOWZmOS4uZTk5YWIwNiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvYnVpbGRfdmFyaWFibGVzLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2J1aWxkX3ZhcmlhYmxlcy5tawpAQCAtMjAsNSArMjAsMTQgQEAKICMgQ29udHJvbCBsaWJiaW5kZXIgY2xpZW50IGNhY2hpbmcKICQoY2FsbCBzb29uZ19jb25maWdfc2V0LCBsaWJiaW5kZXIsIHJlbGVhc2VfbGliYmluZGVyX2NsaWVudF9jYWNoZSwgJChSRUxFQVNFX0xJQkJJTkRFUl9DTElFTlRfQ0FDSEUpKQogCisjIENvbnRyb2wgY2FjaGluZyB3aGlsZSBhZGRpbmcgc2VydmljZSBpbiBsaWJiaW5kZXIgY2FjaGUKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0LCBsaWJiaW5kZXIsIHJlbGVhc2VfbGliYmluZGVyX2FkZHNlcnZpY2VfY2FjaGUsICQoUkVMRUFTRV9MSUJCSU5ERVJfQUREU0VSVklDRV9DQUNIRSkpCisKKyMgUmVtb3ZlIHN0YXRpYyBsaXN0IGluIGxpYmJpbmRlciBjYWNoZQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsIGxpYmJpbmRlciwgcmVsZWFzZV9saWJiaW5kZXJfcmVtb3ZlX2NhY2hlX3N0YXRpY19saXN0LCAkKFJFTEVBU0VfTElCQklOREVSX1JFTU9WRV9DQUNIRV9TVEFUSUNfTElTVCkpCisKICMgVXNlIHRoZSBjb25maWd1cmVkIHJlbGVhc2Ugb2Ygc3FsaXRlCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldCwgbGlic3FsaXRlMywgcmVsZWFzZV9wYWNrYWdlX2xpYnNxbGl0ZTMsICQoUkVMRUFTRV9QQUNLQUdFX0xJQlNRTElURTMpKQorCisjIFVzZSB0aGUgY29uZmlndXJlZCBNZXNzYWdlUXVldWUgaW1wbGVtZW50YXRpb24KKyQoY2FsbCBzb29uZ19jb25maWdfc2V0LCBtZXNzYWdlcXVldWUsIHJlbGVhc2VfcGFja2FnZV9tZXNzYWdlcXVldWVfaW1wbGVtZW50YXRpb24sICQoUkVMRUFTRV9QQUNLQUdFX01FU1NBR0VRVUVVRV9JTVBMRU1FTlRBVElPTikpCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9kZWZhdWx0X2FydF9jb25maWcubWsgYi90YXJnZXQvcHJvZHVjdC9kZWZhdWx0X2FydF9jb25maWcubWsKaW5kZXggNjY4ZjA1NC4uODNkOTIxNSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZGVmYXVsdF9hcnRfY29uZmlnLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2RlZmF1bHRfYXJ0X2NvbmZpZy5tawpAQCAtNTEsNiArNTEsNyBAQAogICAgIGZyYW1ld29yay1taW51cy1hcGV4IFwKICAgICBmcmFtZXdvcmstZ3JhcGhpY3MgXAogICAgIGZyYW1ld29yay1sb2NhdGlvbiBcCisgICAgZnJhbWV3b3JrLWNvbm5lY3Rpdml0eS1iIFwKICAgICBleHQgXAogICAgIHRlbGVwaG9ueS1jb21tb24gXAogICAgIHZvaXAtY29tbW9uIFwKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvQW5kcm9pZC5icCBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNkMjFiCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsODk1IEBACitnZW5lcmljX3Jvb3RkaXJzID0gWworICAgICJhY2N0IiwKKyAgICAiYXBleCIsCisgICAgImJvb3RzdHJhcC1hcGV4IiwKKyAgICAiY29uZmlnIiwKKyAgICAiZGF0YSIsCisgICAgImRhdGFfbWlycm9yIiwKKyAgICAiZGVidWdfcmFtZGlzayIsCisgICAgImRldiIsCisgICAgImxpbmtlcmNvbmZpZyIsCisgICAgIm1ldGFkYXRhIiwKKyAgICAibW50IiwKKyAgICAib2RtIiwKKyAgICAib2RtX2Rsa20iLAorICAgICJvZW0iLAorICAgICJwb3N0aW5zdGFsbCIsCisgICAgInByb2MiLAorICAgICJzZWNvbmRfc3RhZ2VfcmVzb3VyY2VzIiwKKyAgICAic3RvcmFnZSIsCisgICAgInN5cyIsCisgICAgInN5c3RlbSIsCisgICAgInN5c3RlbV9kbGttIiwKKyAgICAidG1wIiwKKyAgICAidmVuZG9yIiwKKyAgICAidmVuZG9yX2Rsa20iLAorXQorCithbmRyb2lkX3Jvb3RkaXJzID0gWworICAgICJzeXN0ZW1fZXh0IiwKKyAgICAicHJvZHVjdCIsCitdCisKK2dlbmVyaWNfc3ltbGlua3MgPSBbCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtL2Jpbi9pbml0IiwKKyAgICAgICAgbmFtZTogImluaXQiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtL2V0YyIsCisgICAgICAgIG5hbWU6ICJldGMiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtL2JpbiIsCisgICAgICAgIG5hbWU6ICJiaW4iLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvdmVuZG9yIiwKKyAgICAgICAgbmFtZTogInN5c3RlbS92ZW5kb3IiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtX2Rsa20vbGliL21vZHVsZXMiLAorICAgICAgICBuYW1lOiAic3lzdGVtL2xpYi9tb2R1bGVzIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL2RhdGEvdXNlcl9kZS8wL2NvbS5hbmRyb2lkLnNoZWxsL2ZpbGVzL2J1Z3JlcG9ydHMiLAorICAgICAgICBuYW1lOiAiYnVncmVwb3J0cyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9zeXMva2VybmVsL2RlYnVnIiwKKyAgICAgICAgbmFtZTogImQiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3RvcmFnZS9zZWxmL3ByaW1hcnkiLAorICAgICAgICBuYW1lOiAic2RjYXJkIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3Byb2R1Y3QvZXRjL3NlY3VyaXR5L2FkYl9rZXlzIiwKKyAgICAgICAgbmFtZTogImFkYl9rZXlzIiwKKyAgICB9LAorICAgIC8vIEZvciBUcmVibGUgR2VuZXJpYyBTeXN0ZW0gSW1hZ2UgKEdTSSksIHN5c3RlbS1hcy1yb290IEdTSSBuZWVkcyB0byB3b3JrIG9uIGJvdGggZGV2aWNlcyB3aXRoCisgICAgLy8gYW5kIHdpdGhvdXQgL29kbSBwYXJ0aXRpb24uIFRob3NlIHN5bWxpbmtzIGFyZSBmb3IgZGV2aWNlcyB3aXRob3V0IC9vZG0gcGFydGl0aW9uLiBGb3IKKyAgICAvLyBkZXZpY2VzIHdpdGggL29kbSBwYXJ0aXRpb24sIG1vdW50IG9kbS5pbWcgdW5kZXIgL29kbSB3aWxsIGhpZGUgdGhvc2Ugc3ltbGlua3MuCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvdmVuZG9yL29kbS9hcHAiLAorICAgICAgICBuYW1lOiAib2RtL2FwcCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3Ivb2RtL2JpbiIsCisgICAgICAgIG5hbWU6ICJvZG0vYmluIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3ZlbmRvci9vZG0vZXRjIiwKKyAgICAgICAgbmFtZTogIm9kbS9ldGMiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvdmVuZG9yL29kbS9maXJtd2FyZSIsCisgICAgICAgIG5hbWU6ICJvZG0vZmlybXdhcmUiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvdmVuZG9yL29kbS9mcmFtZXdvcmsiLAorICAgICAgICBuYW1lOiAib2RtL2ZyYW1ld29yayIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3Ivb2RtL2xpYiIsCisgICAgICAgIG5hbWU6ICJvZG0vbGliIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3ZlbmRvci9vZG0vbGliNjQiLAorICAgICAgICBuYW1lOiAib2RtL2xpYjY0IiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3ZlbmRvci9vZG0vb3ZlcmxheSIsCisgICAgICAgIG5hbWU6ICJvZG0vb3ZlcmxheSIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3Ivb2RtL3ByaXYtYXBwIiwKKyAgICAgICAgbmFtZTogIm9kbS9wcml2LWFwcCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3Ivb2RtL3VzciIsCisgICAgICAgIG5hbWU6ICJvZG0vdXNyIiwKKyAgICB9LAorXQorCithbmRyb2lkX3N5bWxpbmtzID0gWworICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3Byb2R1Y3QiLAorICAgICAgICBuYW1lOiAic3lzdGVtL3Byb2R1Y3QiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtX2V4dCIsCisgICAgICAgIG5hbWU6ICJzeXN0ZW0vc3lzdGVtX2V4dCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9kYXRhL2NhY2hlIiwKKyAgICAgICAgbmFtZTogImNhY2hlIiwKKyAgICB9LAorXQorCitmaWxlZ3JvdXAgeworICAgIG5hbWU6ICJnZW5lcmljX3N5c3RlbV9zaWduX2tleSIsCisgICAgc3JjczogWyI6YXZiX3Rlc3RrZXlfcnNhNDA5NiJdLAorfQorCitwaG9ueSB7CisgICAgbmFtZTogImdlbmVyaWNfc3lzdGVtX2ZvbnRzIiwKKyAgICByZXF1aXJlZDogWworICAgICAgICAiQW5kcm9pZENsb2NrLnR0ZiIsCisgICAgICAgICJDYXJyb2lzR290aGljU0MtUmVndWxhci50dGYiLAorICAgICAgICAiQ29taW5nU29vbi50dGYiLAorICAgICAgICAiQ3V0aXZlTW9uby50dGYiLAorICAgICAgICAiRGFuY2luZ1NjcmlwdC1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJEcm9pZFNhbnNNb25vLnR0ZiIsCisgICAgICAgICJOb3RvQ29sb3JFbW9qaS50dGYiLAorICAgICAgICAiTm90b0NvbG9yRW1vamlGbGFncy50dGYiLAorICAgICAgICAiTm90b05hc2toQXJhYmljLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9OYXNraEFyYWJpYy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvTmFza2hBcmFiaWNVSS1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvTmFza2hBcmFiaWNVSS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0FkbGFtLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0Fob20tUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNBbmF0b2xpYW5IaWVyb2dseXBocy1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0FybWVuaWFuLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0F2ZXN0YW4tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNCYWxpbmVzZS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0JhbXVtLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQmFzc2FWYWgtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNCYXRhay1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0JlbmdhbGktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQmVuZ2FsaVVJLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0JoYWlrc3VraS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0JyYWhtaS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0J1Z2luZXNlLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQnVoaWQtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNDSkstUmVndWxhci50dGMiLAorICAgICAgICAiTm90b1NhbnNDYW5hZGlhbkFib3JpZ2luYWwtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNDYXJpYW4tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNDaGFrbWEtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNDaGFtLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQ2hhbS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0NoZXJva2VlLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQ29wdGljLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQ3VuZWlmb3JtLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQ3lwcmlvdC1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0Rlc2VyZXQtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNEZXZhbmFnYXJpLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0RldmFuYWdhcmlVSS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNFZ3lwdGlhbkhpZXJvZ2x5cGhzLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zRWxiYXNhbi1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0V0aGlvcGljLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0dlb3JnaWFuLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0dsYWdvbGl0aWMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNHb3RoaWMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNHcmFudGhhLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zR3VqYXJhdGktQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNHdWphcmF0aS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0d1amFyYXRpVUktQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNHdWphcmF0aVVJLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zR3VuamFsYUdvbmRpLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zR3VybXVraGktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zR3VybXVraGlVSS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNIYW5pZmlSb2hpbmd5YS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0hhbnVub28tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNIYXRyYW4tUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNIZWJyZXctQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNIZWJyZXctUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNJbXBlcmlhbEFyYW1haWMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNJbnNjcmlwdGlvbmFsUGFobGF2aS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0luc2NyaXB0aW9uYWxQYXJ0aGlhbi1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0phdmFuZXNlLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zS2FpdGhpLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zS2FubmFkYS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNLYW5uYWRhVUktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zS2F5YWhMaS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0toYXJvc2h0aGktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNLaG1lci1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNLaG1lclVJLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zS2htZXJVSS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0tob2praS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0xhby1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0xhby1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0xhb1VJLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTGFvVUktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNMZXBjaGEtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNMaW1idS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0xpbmVhckEtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNMaW5lYXJCLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTGlzdS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0x5Y2lhbi1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0x5ZGlhbi1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc01hbGF5YWxhbS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNNYWxheWFsYW1VSS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNNYW5kYWljLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTWFuaWNoYWVhbi1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc01hcmNoZW4tUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNNYXNhcmFtR29uZGktUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNNZWRlZmFpZHJpbi1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNNZWV0ZWlNYXllay1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc01lcm9pdGljLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTWlhby1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc01vZGktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNNb25nb2xpYW4tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNNcm8tUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNNdWx0YW5pLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTXlhbm1hci1Cb2xkLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc015YW5tYXItTWVkaXVtLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc015YW5tYXItUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNNeWFubWFyVUktQm9sZC5vdGYiLAorICAgICAgICAiTm90b1NhbnNNeWFubWFyVUktTWVkaXVtLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc015YW5tYXJVSS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc05Lby1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc05hYmF0YWVhbi1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc05ld1RhaUx1ZS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc05ld2EtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNPZ2hhbS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc09sQ2hpa2ktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNPbGRJdGFsaWMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNPbGROb3J0aEFyYWJpYW4tUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNPbGRQZXJtaWMtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNPbGRQZXJzaWFuLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zT2xkU291dGhBcmFiaWFuLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zT2xkVHVya2ljLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zT3JpeWEtQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNPcml5YS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc09yaXlhVUktQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNPcml5YVVJLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zT3NhZ2UtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNPc21hbnlhLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zUGFoYXdoSG1vbmctUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNQYWxteXJlbmUtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNQYXVDaW5IYXUtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNQaGFnc1BhLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zUGhvZW5pY2lhbi1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1JlamFuZy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1J1bmljLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU2FtYXJpdGFuLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU2F1cmFzaHRyYS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1NoYXJhZGEtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNTaGF2aWFuLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU2luaGFsYS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNTaW5oYWxhVUktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU29yYVNvbXBlbmctUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNTb3lvbWJvLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1N1bmRhbmVzZS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1N5bG90aU5hZ3JpLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU3ltYm9scy1SZWd1bGFyLVN1YnNldHRlZC50dGYiLAorICAgICAgICAiTm90b1NhbnNTeW1ib2xzLVJlZ3VsYXItU3Vic2V0dGVkMi50dGYiLAorICAgICAgICAiTm90b1NhbnNTeXJpYWNFYXN0ZXJuLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU3lyaWFjRXN0cmFuZ2VsYS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1N5cmlhY1dlc3Rlcm4tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNUYWdhbG9nLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGFnYmFud2EtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNUYWlMZS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1RhaVRoYW0tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNUYWlWaWV0LVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGFrcmktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGFtaWwtVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGFtaWxVSS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNUZWx1Z3UtVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGVsdWd1VUktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGhhYW5hLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGhhYW5hLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGhhaS1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1RoYWktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNUaGFpVUktQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNUaGFpVUktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNUaWZpbmFnaC1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc1VnYXJpdGljLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVmFpLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zV2FuY2hvLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zV2FyYW5nQ2l0aS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc1lpLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZi1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWYtQm9sZEl0YWxpYy50dGYiLAorICAgICAgICAiTm90b1NlcmlmLUl0YWxpYy50dGYiLAorICAgICAgICAiTm90b1NlcmlmLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZkFybWVuaWFuLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZCZW5nYWxpLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZDSkstUmVndWxhci50dGMiLAorICAgICAgICAiTm90b1NlcmlmRGV2YW5hZ2FyaS1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmRG9ncmEtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NlcmlmRXRoaW9waWMtVkYudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZkdlb3JnaWFuLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZHdWphcmF0aS1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmR3VybXVraGktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZkhlYnJldy1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZIZWJyZXctUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NlcmlmSGVudGFpZ2FuYS50dGYiLAorICAgICAgICAiTm90b1NlcmlmS2FubmFkYS1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmS2htZXItQm9sZC5vdGYiLAorICAgICAgICAiTm90b1NlcmlmS2htZXItUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NlcmlmTGFvLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZkxhby1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZNYWxheWFsYW0tVkYudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZk15YW5tYXItQm9sZC5vdGYiLAorICAgICAgICAiTm90b1NlcmlmTXlhbm1hci1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2VyaWZOeWlha2VuZ1B1YWNodWVIbW9uZy1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmU2luaGFsYS1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmVGFtaWwtVkYudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZlRlbHVndS1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmVGhhaS1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZUaGFpLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZlRpYmV0YW4tVkYudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZlllemlkaS1WRi50dGYiLAorICAgICAgICAiUm9ib3RvLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIlJvYm90b0ZsZXgtUmVndWxhci50dGYiLAorICAgICAgICAiUm9ib3RvU3RhdGljLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIlNvdXJjZVNhbnNQcm8tQm9sZC50dGYiLAorICAgICAgICAiU291cmNlU2Fuc1Byby1Cb2xkSXRhbGljLnR0ZiIsCisgICAgICAgICJTb3VyY2VTYW5zUHJvLUl0YWxpYy50dGYiLAorICAgICAgICAiU291cmNlU2Fuc1Byby1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJTb3VyY2VTYW5zUHJvLVNlbWlCb2xkLnR0ZiIsCisgICAgICAgICJTb3VyY2VTYW5zUHJvLVNlbWlCb2xkSXRhbGljLnR0ZiIsCisgICAgICAgICJmb250X2ZhbGxiYWNrLnhtbCIsCisgICAgICAgICJmb250cy54bWwiLAorICAgIF0sCit9CisKK2FuZHJvaWRfZmlsZXN5c3RlbV9kZWZhdWx0cyB7CisgICAgbmFtZTogInN5c3RlbV9pbWFnZV9kZWZhdWx0cyIsCisgICAgcGFydGl0aW9uX25hbWU6ICJzeXN0ZW0iLAorICAgIGJhc2VfZGlyOiAic3lzdGVtIiwKKyAgICBkaXJzOiBnZW5lcmljX3Jvb3RkaXJzLAorICAgIHN5bWxpbmtzOiBnZW5lcmljX3N5bWxpbmtzLAorICAgIGZpbGVfY29udGV4dHM6ICI6cGxhdF9maWxlX2NvbnRleHRzIiwKKyAgICBsaW5rZXJfY29uZmlnOiB7CisgICAgICAgIGdlbl9saW5rZXJfY29uZmlnOiB0cnVlLAorICAgICAgICBsaW5rZXJfY29uZmlnX3NyY3M6IFsiOnN5c3RlbV9saW5rZXJfY29uZmlnX2pzb25fZmlsZSJdLAorICAgIH0sCisgICAgZnN2ZXJpdHk6IHsKKyAgICAgICAgaW5wdXRzOiBbCisgICAgICAgICAgICAiZXRjL2Jvb3QtaW1hZ2UucHJvZiIsCisgICAgICAgICAgICAiZXRjL2NsYXNzcGF0aHMvKi5wYiIsCisgICAgICAgICAgICAiZXRjL2RpcnR5LWltYWdlLW9iamVjdHMiLAorICAgICAgICAgICAgImV0Yy9wcmVsb2FkZWQtY2xhc3NlcyIsCisgICAgICAgICAgICAiZnJhbWV3b3JrLyoiLAorICAgICAgICAgICAgImZyYW1ld29yay8qLyoiLCAvLyBmcmFtZXdvcmsve2FyY2h9CisgICAgICAgICAgICAiZnJhbWV3b3JrL29hdC8qLyoiLCAvLyBmcmFtZXdvcmsvb2F0L3thcmNofQorICAgICAgICBdLAorICAgICAgICBsaWJzOiBbIjpmcmFtZXdvcmstcmVzey5leHBvcnQtcGFja2FnZS5hcGt9Il0sCisgICAgfSwKKyAgICBidWlsZF9sb2d0YWdzOiB0cnVlLAorICAgIGdlbl9hY29uZmlnX2ZsYWdzX3BiOiB0cnVlLAorCisgICAgY29tcGlsZV9tdWx0aWxpYjogImJvdGgiLAorCisgICAgdXNlX2F2YjogdHJ1ZSwKKyAgICBhdmJfcHJpdmF0ZV9rZXk6ICI6Z2VuZXJpY19zeXN0ZW1fc2lnbl9rZXkiLAorICAgIGF2Yl9hbGdvcml0aG06ICJTSEEyNTZfUlNBNDA5NiIsCisgICAgYXZiX2hhc2hfYWxnb3JpdGhtOiAic2hhMjU2IiwKKworICAgIGRlcHM6IFsKKyAgICAgICAgImFieCIsCisgICAgICAgICJhY29uZmlnZC1zeXN0ZW0iLAorICAgICAgICAiYWZsYWdzIiwKKyAgICAgICAgImFtIiwKKyAgICAgICAgImFuZHJvaWQuc29mdHdhcmUuY3JlZGVudGlhbHMucHJlYnVpbHQueG1sIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgImFuZHJvaWQuc29mdHdhcmUud2Vidmlldy5wcmVidWlsdC54bWwiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgImFuZHJvaWQuc29mdHdhcmUud2luZG93X21hZ25pZmljYXRpb24ucHJlYnVpbHQueG1sIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICJhbmRyb2lkLnN5c3RlbS5zdXNwZW5kLXNlcnZpY2UiLAorICAgICAgICAiYXBleGQiLAorICAgICAgICAiYXBwb3BzIiwKKyAgICAgICAgImFwcHJvdmVkLW9na2ktYnVpbGRzLnhtbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJhcHB3aWRnZXQiLAorICAgICAgICAiYXRyYWNlIiwKKyAgICAgICAgImF1ZGlvc2VydmVyIiwKKyAgICAgICAgImJjYyIsCisgICAgICAgICJibGFua19zY3JlZW4iLAorICAgICAgICAiYmxraWQiLAorICAgICAgICAiYm1nciIsCisgICAgICAgICJib290YW5pbWF0aW9uIiwKKyAgICAgICAgImJvb3RzdGF0IiwKKyAgICAgICAgImJwZmxvYWRlciIsCisgICAgICAgICJidSIsCisgICAgICAgICJidWdyZXBvcnQiLAorICAgICAgICAiYnVncmVwb3J0eiIsCisgICAgICAgICJjYW1lcmFzZXJ2ZXIiLAorICAgICAgICAiY2dyb3Vwcy5qc29uIiwKKyAgICAgICAgImNtZCIsCisgICAgICAgICJjb250ZW50IiwKKyAgICAgICAgImNwcHJlb3B0cy5zaCIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICJjcmVkc3RvcmUiLAorICAgICAgICAiZGVidWdnZXJkIiwKKyAgICAgICAgImRldmljZV9jb25maWciLAorICAgICAgICAiZGlydHktaW1hZ2Utb2JqZWN0cyIsCisgICAgICAgICJkbWN0bCIsCisgICAgICAgICJkbWVzZ2QiLAorICAgICAgICAiZG5zbWFzcSIsCisgICAgICAgICJkcG0iLAorICAgICAgICAiZHVtcC5lcm9mcyIsCisgICAgICAgICJkdW1wc3RhdGUiLAorICAgICAgICAiZHVtcHN5cyIsCisgICAgICAgICJlMmZzY2siLAorICAgICAgICAiZW5oYW5jZWQtY29uZmlybWF0aW9uLnhtbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJldGNfaG9zdHMiLAorICAgICAgICAiZmxhZ3NfaGVhbHRoX2NoZWNrIiwKKyAgICAgICAgImZyYW1ld29yay1hdWRpb19lZmZlY3RzLnhtbCIsIC8vIGZvciBoYW5kaGVsZCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgImZyYW1ld29yay1zeXNjb25maWcueG1sIiwKKyAgICAgICAgImZzX2NvbmZpZ19kaXJzX3N5c3RlbSIsCisgICAgICAgICJmc19jb25maWdfZmlsZXNfc3lzdGVtIiwKKyAgICAgICAgImZzY2suZXJvZnMiLAorICAgICAgICAiZnNjay5mMmZzIiwgLy8gZm9yIG1lZGlhX3N5c3RlbQorICAgICAgICAiZnNja19tc2RvcyIsCisgICAgICAgICJmc3Zlcml0eS1yZWxlYXNlLWNlcnQtZGVyIiwKKyAgICAgICAgImdhdGVrZWVwZXJkIiwKKyAgICAgICAgImdwdV9jb3VudGVyX3Byb2R1Y2VyIiwKKyAgICAgICAgImdwdXNlcnZpY2UiLAorICAgICAgICAiZ3JvdXBfc3lzdGVtIiwKKyAgICAgICAgImdzaV90b29sIiwKKyAgICAgICAgImdzaWQiLAorICAgICAgICAiaGVhcHByb2ZkIiwKKyAgICAgICAgImhpZCIsCisgICAgICAgICJoaWRkZW5hcGktcGFja2FnZS13aGl0ZWxpc3QueG1sIiwgLy8gZnJvbSBydW50aW1lX2xpYmFydAorICAgICAgICAiaWRjX2RhdGEiLAorICAgICAgICAiaWRtYXAyIiwKKyAgICAgICAgImlkbWFwMmQiLAorICAgICAgICAiaW1lIiwKKyAgICAgICAgImluY2lkZW50IiwKKyAgICAgICAgImluY2lkZW50LWhlbHBlci1jbWQiLAorICAgICAgICAiaW5jaWRlbnRfaGVscGVyIiwKKyAgICAgICAgImluY2lkZW50ZCIsCisgICAgICAgICJpbml0LmVudmlyb24ucmMtc29vbmciLAorICAgICAgICAiaW5pdC51c2IuY29uZmlnZnMucmMiLAorICAgICAgICAiaW5pdC51c2IucmMiLAorICAgICAgICAiaW5pdC56eWdvdGUzMi5yYyIsCisgICAgICAgICJpbml0Lnp5Z290ZTY0LnJjIiwKKyAgICAgICAgImluaXQuenlnb3RlNjRfMzIucmMiLAorICAgICAgICAiaW5pdGlhbC1wYWNrYWdlLXN0b3BwZWQtc3RhdGVzLnhtbCIsCisgICAgICAgICJpbnB1dCIsCisgICAgICAgICJpbnN0YWxsZCIsCisgICAgICAgICJpcCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJpcHRhYmxlcyIsCisgICAgICAgICJrY21kbGluZWN0cmwiLAorICAgICAgICAia2VybmVsLWxpZmV0aW1lcy54bWwiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAia2V5Y2hhcnNfZGF0YSIsCisgICAgICAgICJrZXlsYXlvdXRfZGF0YSIsCisgICAgICAgICJrZXlzdG9yZTIiLAorICAgICAgICAibGQubWMiLAorICAgICAgICAibGxrZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJsbWtkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgImxvY2tzZXR0aW5ncyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJsb2djYXQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibG9nZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJsb2dwZXJzaXN0LnN0YXJ0IiwKKyAgICAgICAgImxwZHVtcCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJsc2hhbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJtYWtlX2YyZnMiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgIm1kbnNkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm1lZGlhX3Byb2ZpbGVzX1YxXzAuZHRkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm1lZGlhY29kZWMucG9saWN5IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm1lZGlhZXh0cmFjdG9yIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm1lZGlhbWV0cmljcyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJtaXNjdHJsIiwgLy8gZnJvbSBiYXNlX3N5c3RlbQorICAgICAgICAibWtlMmZzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm1rZnMuZXJvZnMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibW9ua2V5IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm10ZWN0cmwiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibmRjIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm5ldGQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibmV0dXRpbHMtd3JhcHBlci0xLjAiLCAvLyBmdWxsX2Jhc2UKKyAgICAgICAgIm5vdGljZV94bWxfc3lzdGVtIiwKKyAgICAgICAgIm9kc2lnbiIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJvdGFwcmVvcHRfc2NyaXB0IiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgInBhY2thZ2Utc2hhcmVkdWlkLWFsbG93bGlzdC54bWwiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicGFzc3dkX3N5c3RlbSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwZXJmZXR0byIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwaW5nIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInBpbmc2IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInBpbnRvb2wiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicGxhdGZvcm0ueG1sIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInBtIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInByZWZldGNoIiwgLy9iYXNlX3N5c3RlbQorICAgICAgICAicHJlaW5zdGFsbGVkLXBhY2thZ2VzLWFzbC1maWxlcy54bWwiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicHJlaW5zdGFsbGVkLXBhY2thZ2VzLXBsYXRmb3JtLWdlbmVyaWMtc3lzdGVtLnhtbCIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICJwcmVpbnN0YWxsZWQtcGFja2FnZXMtcGxhdGZvcm0taGFuZGhlbGQtc3lzdGVtLnhtbCIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAicHJlaW5zdGFsbGVkLXBhY2thZ2VzLXBsYXRmb3JtLnhtbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwcmVpbnN0YWxsZWQtcGFja2FnZXMtc3RyaWN0LXNpZ25hdHVyZS54bWwiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicHJlbG9hZGVkLWNsYXNzZXMiLCAvLyBvaworICAgICAgICAicHJpbnRmbGFncyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwcml2YXBwLXBlcm1pc3Npb25zLXBsYXRmb3JtLnhtbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwcm5nX3NlZWRlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwdWJsaWMubGlicmFyaWVzLmFuZHJvaWQudHh0IiwKKyAgICAgICAgInJlY292ZXJ5LXBlcnNpc3QiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicmVjb3ZlcnktcmVmcmVzaCIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICJyZXF1ZXN0c3luYyIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAicmVzaXplMmZzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInJzc19od21fcmVzZXQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicnVuLWFzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInNjaGVkdGVzdCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzY3JlZW5jYXAiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic2NyZWVucmVjb3JkIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICJzZGNhcmQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic2VjZGlzY2FyZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzZW5zb3JzZXJ2aWNlIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInNlcnZpY2UiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic2VydmljZW1hbmFnZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic2V0dGluZ3MiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic2ZkbyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzZ2Rpc2siLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic20iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic25hcHNob3RjdGwiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic25hcHVzZXJkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInN0b3JhZ2VkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInN1cmZhY2VmbGluZ2VyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInN2YyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzeXN0ZW1fbWFuaWZlc3QueG1sIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInRhc2tfcHJvZmlsZXMuanNvbiIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ0YyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ0ZWxlY29tIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInRvbWJzdG9uZWQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAidHJhY2VkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInRyYWNlZF9wcm9iZXMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAidHJhZGVpbm1vZGUiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAidHVuZTJmcyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ1aWF1dG9tYXRvciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ1aW5wdXQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAidW5jcnlwdCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ1cGRhdGVfZW5naW5lIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgInVwZGF0ZV9lbmdpbmVfc2lkZWxvYWQiLCAvLyByZWNvdmVyeQorICAgICAgICAidXBkYXRlX3ZlcmlmaWVyIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgInVzYmQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAidmRjIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInZpcnR1YWxfY2FtZXJhIiwgLy8gaGFuZGhlbGRfc3lzdGVtIC8vIHJlbGVhc2VfcGFja2FnZV92aXJ0dWFsX2NhbWVyYQorICAgICAgICAidm9sZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ2ciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAid2F0Y2hkb2dkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIndpZmkucmMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAid2lmaWNvbmQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAid20iLCAvLyBiYXNlX3N5c3RlbQorICAgIF0gKyBzZWxlY3QocmVsZWFzZV9mbGFnKCJSRUxFQVNFX1BMQVRGT1JNX1ZFUlNJT05fQ09ERU5BTUUiKSwgeworICAgICAgICAiUkVMIjogW10sCisgICAgICAgIGRlZmF1bHQ6IFsKKyAgICAgICAgICAgICJhbmRyb2lkLnNvZnR3YXJlLnByZXZpZXdfc2RrLnByZWJ1aWx0LnhtbCIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICBdLAorICAgIH0pICsgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiQU5EUk9JRCIsICJyZWxlYXNlX3BhY2thZ2VfcHJvZmlsaW5nX21vZHVsZSIpLCB7CisgICAgICAgICJ0cnVlIjogWworICAgICAgICAgICAgInRyYWNlX3JlZGFjdG9yIiwgLy8gYmFzZV9zeXN0ZW0gKFJFTEVBU0VfUEFDS0FHRV9QUk9GSUxJTkdfTU9EVUxFKQorICAgICAgICBdLAorICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICB9KSArIHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfTUVNT1JZX01BTkFHRU1FTlRfREFFTU9OIiksIHsKKyAgICAgICAgdHJ1ZTogWworICAgICAgICAgICAgIm1tX2RhZW1vbiIsIC8vIGJhc2Vfc3lzdGVtIChSRUxFQVNFX01FTU9SWV9NQU5BR0VNRU5UX0RBRU1PTikKKyAgICAgICAgXSwKKyAgICAgICAgZGVmYXVsdDogW10sCisgICAgfSkgKyBzZWxlY3QocHJvZHVjdF92YXJpYWJsZSgiZGVidWdnYWJsZSIpLCB7CisgICAgICAgIHRydWU6IFsKKyAgICAgICAgICAgICJhZGV2aWNlX2ZpbmdlcnByaW50IiwKKyAgICAgICAgICAgICJhcnBpbmciLAorICAgICAgICAgICAgImF2YmN0bCIsCisgICAgICAgICAgICAiYm9vdGN0bCIsCisgICAgICAgICAgICAiZG11c2VyZCIsCisgICAgICAgICAgICAiZXZlbXUtcmVjb3JkIiwKKyAgICAgICAgICAgICJpZGxjbGkiLAorICAgICAgICAgICAgImluaXQtZGVidWcucmMiLAorICAgICAgICAgICAgImlvdG9wIiwKKyAgICAgICAgICAgICJpcGVyZjMiLAorICAgICAgICAgICAgIml3IiwKKyAgICAgICAgICAgICJsYXllcnRyYWNlZ2VuZXJhdG9yIiwKKyAgICAgICAgICAgICJsb2d0YWdkLnJjIiwKKyAgICAgICAgICAgICJvdC1jbGktZnRkIiwKKyAgICAgICAgICAgICJvdC1jdGwiLAorICAgICAgICAgICAgInByb2NyYW5rIiwKKyAgICAgICAgICAgICJwcm9mY29sbGVjdGN0bCIsCisgICAgICAgICAgICAicHJvZmNvbGxlY3RkIiwKKyAgICAgICAgICAgICJyZWNvcmRfYmluZGVyIiwKKyAgICAgICAgICAgICJzYW5pdGl6ZXItc3RhdHVzIiwKKyAgICAgICAgICAgICJzZXJ2aWNlZGlzcGF0Y2hlciIsCisgICAgICAgICAgICAic2hvd21hcCIsCisgICAgICAgICAgICAic3FsaXRlMyIsCisgICAgICAgICAgICAic3MiLAorICAgICAgICAgICAgInN0YXJ0X3dpdGhfbG9ja2FnZW50IiwKKyAgICAgICAgICAgICJzdHJhY2UiLAorICAgICAgICAgICAgInN1IiwKKyAgICAgICAgICAgICJ0aW55Y2FwIiwKKyAgICAgICAgICAgICJ0aW55aG9zdGxlc3MiLAorICAgICAgICAgICAgInRpbnltaXgiLAorICAgICAgICAgICAgInRpbnlwY21pbmZvIiwKKyAgICAgICAgICAgICJ0aW55cGxheSIsIC8vIGhvc3QKKyAgICAgICAgICAgICJ0cmFjZXBhdGgiLAorICAgICAgICAgICAgInRyYWNlcGF0aDYiLAorICAgICAgICAgICAgInRyYWNlcm91dGU2IiwKKyAgICAgICAgICAgICJ1bndpbmRfaW5mbyIsCisgICAgICAgICAgICAidW53aW5kX3JlZ19pbmZvIiwKKyAgICAgICAgICAgICJ1bndpbmRfc3ltYm9scyIsCisgICAgICAgICAgICAidXBkYXRlX2VuZ2luZV9jbGllbnQiLAorICAgICAgICBdLAorICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICB9KSwKKyAgICBtdWx0aWxpYjogeworICAgICAgICBjb21tb246IHsKKyAgICAgICAgICAgIGRlcHM6IFsKKyAgICAgICAgICAgICAgICAiQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbiIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgIkJhc2ljRHJlYW1zIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkJsb2NrZWROdW1iZXJQcm92aWRlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJCbHVldG9vdGhNaWRpU2VydmljZSIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJCb29rbWFya1Byb3ZpZGVyIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkJ1aWx0SW5QcmludFNlcnZpY2UiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiQ2FsZW5kYXJQcm92aWRlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJDYWxsTG9nQmFja3VwIiwgLy8gdGVsZXBob255X3N5c3RlbQorICAgICAgICAgICAgICAgICJDYW1lcmFFeHRlbnNpb25zUHJveHkiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiQ2FwdGl2ZVBvcnRhbExvZ2luIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkNhcnJpZXJEZWZhdWx0QXBwIiwgLy8gdGVsZXBob255X3N5c3RlbQorICAgICAgICAgICAgICAgICJDZWxsQnJvYWRjYXN0TGVnYWN5QXBwIiwgLy8gdGVsZXBob255X3N5c3RlbQorICAgICAgICAgICAgICAgICJDZXJ0SW5zdGFsbGVyIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkNvbXBhbmlvbkRldmljZU1hbmFnZXIiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiQ29udGFjdHNQcm92aWRlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgIkNyZWRlbnRpYWxNYW5hZ2VyIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkRldmljZUFzV2ViY2FtIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkRldmljZURpYWdub3N0aWNzIiwgLy8gaGFuZGhlbGRfc3lzdGVtIC0gaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAiRG9jdW1lbnRzVUkiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiRG93bmxvYWRQcm92aWRlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgIkRvd25sb2FkUHJvdmlkZXJVaSIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJEeW5hbWljU3lzdGVtSW5zdGFsbGF0aW9uU2VydmljZSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgIkUyZWVDb250YWN0S2V5c1Byb3ZpZGVyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiRWFzdGVyRWdnIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkV4dFNoYXJlZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgIkV4dGVybmFsU3RvcmFnZVByb3ZpZGVyIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkZ1c2VkTG9jYXRpb24iLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiSFRNTFZpZXdlciIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAgICAgICAgICJJbnB1dERldmljZXMiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiSW50ZW50UmVzb2x2ZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJLZXlDaGFpbiIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJMaXZlV2FsbHBhcGVyc1BpY2tlciIsIC8vIGdlbmVyaWNfc3lzdGVtLCBmdWxsX2Jhc2UKKyAgICAgICAgICAgICAgICAiTG9jYWxUcmFuc3BvcnQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJNYW5hZ2VkUHJvdmlzaW9uaW5nIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIk1lZGlhUHJvdmlkZXJMZWdhY3kiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJNbXNTZXJ2aWNlIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIk10cFNlcnZpY2UiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiTXVzaWNGWCIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJOZXR3b3JrU3RhY2siLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJPTlMiLCAvLyB0ZWxlcGhvbnlfc3lzdGVtCisgICAgICAgICAgICAgICAgIlBhY1Byb2Nlc3NvciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJQYWNrYWdlSW5zdGFsbGVyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiUGFydG5lckJvb2ttYXJrc1Byb3ZpZGVyIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAiUHJpbnRSZWNvbW1lbmRhdGlvblNlcnZpY2UiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiUHJpbnRTcG9vbGVyIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIlByb3h5SGFuZGxlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJTZWN1cmVFbGVtZW50IiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIlNldHRpbmdzUHJvdmlkZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJTaGFyZWRTdG9yYWdlQmFja3VwIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIlNoZWxsIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiU2ltQXBwRGlhbG9nIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIlNvdW5kUGlja2VyIiwgLy8gbm90IGluc3RhbGxlZCBieSBhbnlvbmUKKyAgICAgICAgICAgICAgICAiU3RhdGVtZW50U2VydmljZSIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAgICAgICAgICJTdGsiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJUYWciLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJUZWxlU2VydmljZSIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJUZWxlY29tIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIlRlbGVwaG9ueVByb3ZpZGVyIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIlRyYWNldXIiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiVXNlckRpY3Rpb25hcnlQcm92aWRlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJWcG5EaWFsb2dzIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIldhbGxwYXBlckJhY2t1cCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImFkYmRfc3lzdGVtX2FwaSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQuaGlkbC5iYXNlLVYxLjAtamF2YSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQuaGlkbC5tYW5hZ2VyLVYxLjAtamF2YSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQudGVzdC5iYXNlIiwgLy8gZnJvbSBydW50aW1lX2xpYmFydAorICAgICAgICAgICAgICAgICJhbmRyb2lkLnRlc3QubW9jayIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQudGVzdC5ydW5uZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJhb3NwX21haW5saW5lX21vZHVsZXMiLCAvLyBvaworICAgICAgICAgICAgICAgICJidWlsZF9mbGFnX3N5c3RlbSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImNoYXJnZXJfcmVzX2ltYWdlcyIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFwZXguY3RzLnNoaW0udjFfcHJlYnVpbHQiLCAvLyBvaworICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5jZWxsYnJvYWRjYXN0IiwgLy8gdGVsZXBob255X3N5c3RlbQorICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5mdXR1cmUudXNiLmFjY2Vzc29yeSIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5sb2NhdGlvbi5wcm92aWRlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLm1lZGlhLnJlbW90ZWRpc3BsYXkiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQubWVkaWEucmVtb3RlZGlzcGxheS54bWwiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQubWVkaWFkcm0uc2lnbmVyIiwgLy8gbWVkaWFfc3lzdGVtCisgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLm5mY19leHRyYXMiLCAvLyBvaworICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5uZmNzZXJ2aWNlcyIsIC8vIGJhc2Vfc3lzdGVtIChSRUxFQVNFX1BBQ0tBR0VfTkZDX1NUQUNLICE9IE5mY05jaSkKKyAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQucnVudGltZSIsIC8vIG9rCisgICAgICAgICAgICAgICAgImRleF9ib290amFycyIsCisgICAgICAgICAgICAgICAgImV4dCIsIC8vIGZyb20gcnVudGltZV9saWJhcnQKKyAgICAgICAgICAgICAgICAiZnJhbWV3b3JrLWdyYXBoaWNzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiZnJhbWV3b3JrLWxvY2F0aW9uIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiZnJhbWV3b3JrLW1pbnVzLWFwZXgtaW5zdGFsbC1kZXBlbmRlbmNpZXMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJmcmFtZXdvcmstY29ubmVjdGl2aXR5LWIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJmcmFtZXdvcmtfY29tcGF0aWJpbGl0eV9tYXRyaXguZGV2aWNlLnhtbCIsCisgICAgICAgICAgICAgICAgImdlbmVyaWNfc3lzdGVtX2ZvbnRzIiwgLy8gb2sKKyAgICAgICAgICAgICAgICAiaHdzZXJ2aWNlbWFuYWdlcl9jb21wYXRfc3ltbGlua19tb2R1bGUiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJoeXBoLWRhdGEiLAorICAgICAgICAgICAgICAgICJpbXMtY29tbW9uIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiaW5pdF9zeXN0ZW0iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJqYXZheC5vYmV4IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGxuZGsubGlicmFyaWVzLnR4dCIsIC8vb2sKKyAgICAgICAgICAgICAgICAib3JnLmFwYWNoZS5odHRwLmxlZ2FjeSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgInBlcmZldHRvLWV4dHJhcyIsIC8vIHN5c3RlbQorICAgICAgICAgICAgICAgICJzYW5pdGl6ZXIubGlicmFyaWVzLnR4dCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgInNlbGludXhfcG9saWN5X3N5c3RlbV9zb29uZyIsIC8vIG9rCisgICAgICAgICAgICAgICAgInNlcnZpY2VzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAic2hlbGxfYW5kX3V0aWxpdGllc19zeXN0ZW0iLCAvLyBvaworICAgICAgICAgICAgICAgICJzeXN0ZW0tYnVpbGQucHJvcCIsCisgICAgICAgICAgICAgICAgInN5c3RlbV9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwiLCAvL2Jhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgInRlbGVwaG9ueS1jb21tb24iLCAvLyBsaWJzIGZyb20gVGVsZVNlcnZpY2UKKyAgICAgICAgICAgICAgICAidm9pcC1jb21tb24iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgXSArIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoIkFORFJPSUQiLCAicmVsZWFzZV9jcmFzaHJlY292ZXJ5X21vZHVsZSIpLCB7CisgICAgICAgICAgICAgICAgInRydWUiOiBbCisgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5jcmFzaHJlY292ZXJ5IiwgLy8gYmFzZV9zeXN0ZW0gKFJFTEVBU0VfQ1JBU0hSRUNPVkVSWV9NT0RVTEUpCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgICAgIH0pICsgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiQU5EUk9JRCIsICJyZWxlYXNlX3BhY2thZ2VfcHJvZmlsaW5nX21vZHVsZSIpLCB7CisgICAgICAgICAgICAgICAgInRydWUiOiBbCisgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5wcm9maWxpbmciLCAvLyBiYXNlX3N5c3RlbSAoUkVMRUFTRV9QQUNLQUdFX1BST0ZJTElOR19NT0RVTEUpCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgICAgIH0pICsgc2VsZWN0KHJlbGVhc2VfZmxhZygiUkVMRUFTRV9BVkFUQVJfUElDS0VSX0FQUCIpLCB7CisgICAgICAgICAgICAgICAgdHJ1ZTogWworICAgICAgICAgICAgICAgICAgICAiQXZhdGFyUGlja2VyIiwgLy8gZ2VuZXJpY19zeXN0ZW0gKFJFTEVBU0VfQVZBVEFSX1BJQ0tFUl9BUFApCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgICAgIH0pLAorICAgICAgICB9LAorICAgICAgICBwcmVmZXIzMjogeworICAgICAgICAgICAgZGVwczogWworICAgICAgICAgICAgICAgICJkcm1zZXJ2ZXIiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibWVkaWFzZXJ2ZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgXSwKKyAgICAgICAgfSwKKyAgICAgICAgbGliNjQ6IHsKKyAgICAgICAgICAgIGRlcHM6IFsKKyAgICAgICAgICAgICAgICAiYW5kcm9pZC5zeXN0ZW0udmlydHVhbGl6YXRpb25jb21tb24tbmRrIiwKKyAgICAgICAgICAgICAgICAiYW5kcm9pZC5zeXN0ZW0udmlydHVhbGl6YXRpb25zZXJ2aWNlLW5kayIsCisgICAgICAgICAgICAgICAgImxpYmdzaSIsCisgICAgICAgICAgICAgICAgInNlcnZpY2VtYW5hZ2VyIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgIH0sCisgICAgICAgIGJvdGg6IHsKKyAgICAgICAgICAgIGRlcHM6IFsKKyAgICAgICAgICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5iaW9tZXRyaWNzLmZpbmdlcnByaW50QDIuMSIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUucmFkaW8uY29uZmlnQDEuMCIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUucmFkaW8uZGVwcmVjYXRlZEAxLjAiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLnJhZGlvQDEuMCIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUucmFkaW9AMS4xIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5yYWRpb0AxLjIiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLnJhZGlvQDEuMyIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUucmFkaW9AMS40IiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5zZWN1cmVfZWxlbWVudEAxLjAiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJhcHBfcHJvY2VzcyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImJvcmluZ3NzbF9zZWxmX3Rlc3QiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJoZWFwcHJvZmRfY2xpZW50IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliRUdMIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliRUdMX2FuZ2xlIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliRVRDMSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYkZGVEVtIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliR0xFU3YxX0NNIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliR0xFU3YxX0NNX2FuZ2xlIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliR0xFU3YyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliR0xFU3YyX2FuZ2xlIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliR0xFU3YzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliT3Blbk1BWEFMIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliT3BlblNMRVMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJhYXVkaW8iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJhbGFybV9qbmkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJhbWlkaSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmFuZHJvaWQiLAorICAgICAgICAgICAgICAgICJsaWJhbmRyb2lkX3J1bnRpbWUiLAorICAgICAgICAgICAgICAgICJsaWJhbmRyb2lkX3NlcnZlcnMiLAorICAgICAgICAgICAgICAgICJsaWJhbmRyb2lkZnciLAorICAgICAgICAgICAgICAgICJsaWJhcnRwYWxldHRlLXN5c3RlbSIsCisgICAgICAgICAgICAgICAgImxpYmF1ZGlvLXJlc2FtcGxlciIsIC8vIGdlbmVyaWMtc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmF1ZGlvZWZmZWN0X2puaSIsCisgICAgICAgICAgICAgICAgImxpYmF1ZGlvaGFsIiwgLy8gZ2VuZXJpYy1zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliYXVkaW9wb2xpY3llbmdpbmVjb25maWd1cmFibGUiLCAvLyBnZW5lcmljLXN5c3RlbQorICAgICAgICAgICAgICAgICJsaWJiaW5kZXIiLAorICAgICAgICAgICAgICAgICJsaWJiaW5kZXJfbmRrIiwKKyAgICAgICAgICAgICAgICAibGliYmluZGVyX3JwY191bnN0YWJsZSIsCisgICAgICAgICAgICAgICAgImxpYmNhbWVyYTJuZGsiLAorICAgICAgICAgICAgICAgICJsaWJjZ3JvdXByYyIsIC8vIGxsbmRrIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAibGliY2xhbmdfcnQuYXNhbiIsCisgICAgICAgICAgICAgICAgImxpYmNvbXBpbGVyX3J0IiwKKyAgICAgICAgICAgICAgICAibGliY3V0aWxzIiwgLy8gdXNlZCBieSBtYW55IGxpYnMKKyAgICAgICAgICAgICAgICAibGliZG1hYnVmaGVhcCIsIC8vIHVzZWQgYnkgbWFueSBsaWJzCisgICAgICAgICAgICAgICAgImxpYmRybSIsIC8vIHVzZWQgYnkgbWFueSBsaWJzIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmRybWZyYW1ld29yayIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmRybWZyYW1ld29ya19qbmkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJmZHRyYWNrIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliZmlsdGVyZnciLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJmaWx0ZXJwYWNrX2ltYWdlcHJvYyIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJmd2Rsb2NrZW5naW5lIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliZ2F0ZWtlZXBlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmd1aSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmhhcmR3YXJlIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliaGFyZHdhcmVfbGVnYWN5IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliaGlkbHRyYW5zcG9ydCIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmh3YmluZGVyIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliaW5wdXQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJpbnB1dGZsaW5nZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJpcHJvdXRldXRpbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmpuaWdyYXBoaWNzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlianBlZyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmxvZyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmxvZ3dyYXAiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJsejQiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJtZWRpYSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYm1lZGlhX2puaSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYm1lZGlhbmRrIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlibWludWkiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJtdHAiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJuZXRkX2NsaWVudCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYm5ldGxpbmsiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJuZXR1dGlscyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYm5ldXJhbG5ldHdvcmtzX3BhY2thZ2VpbmZvIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlibmwiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJwZGZpdW0iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJwb2xpY3ktc3Vic3lzdGVtIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlicG93ZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJwb3dlcm1hbmFnZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJwcm90b2J1Zi1jcHAtZnVsbCIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnJhZGlvX21ldGFkYXRhIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlicnNfam5pIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnJ0cF9qbmkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJzZW5zb3JzZXJ2aWNlIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic2ZwbHVnaW5fY2NvZGVjIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic2tpYSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnNvbmljIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic29uaXZveCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnNvdW5kcG9vbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnNwZWV4cmVzYW1wbGVyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic3FsaXRlIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic3RhZ2VmcmlnaHQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic3RhZ2VmcmlnaHRfb214IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic3RkYysrIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic3lzdXRpbHMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJ1aSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnVzYmhvc3QiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJ1dGlscyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnZlbmRvcnN1cHBvcnQiLCAvLyBsbG5kayBsaWJyYXJ5CisgICAgICAgICAgICAgICAgImxpYnZpbnRmX2puaSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnZ1bGthbiIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYndlYnZpZXdjaHJvbWl1bV9sb2FkZXIiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlid2Vidmlld2Nocm9taXVtX3BsYXRfc3VwcG9ydCIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJ3aWxoZWxtIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlua2VyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgIF0gKyBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJBTkRST0lEIiwgIlRBUkdFVF9EWU5BTUlDXzY0XzMyX0RSTVNFUlZFUiIpLCB7CisgICAgICAgICAgICAgICAgInRydWUiOiBbImRybXNlcnZlciJdLAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICAgICAgfSkgKyBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJBTkRST0lEIiwgIlRBUkdFVF9EWU5BTUlDXzY0XzMyX01FRElBU0VSVkVSIiksIHsKKyAgICAgICAgICAgICAgICAidHJ1ZSI6IFsibWVkaWFzZXJ2ZXIiXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgICAgIH0pLAorICAgICAgICB9LAorICAgIH0sCisgICAgYXJjaDogeworICAgICAgICBhcm02NDogeworICAgICAgICAgICAgZGVwczogWworICAgICAgICAgICAgICAgICJsaWJjbGFuZ19ydC5od2FzYW4iLAorICAgICAgICAgICAgICAgICJsaWJjX2h3YXNhbiIsCisgICAgICAgICAgICBdLAorICAgICAgICB9LAorICAgIH0sCit9CisKK2FuZHJvaWRfc3lzdGVtX2ltYWdlIHsKKyAgICBuYW1lOiAiYW9zcF9zaGFyZWRfc3lzdGVtX2ltYWdlIiwKKyAgICBkZWZhdWx0czogWyJzeXN0ZW1faW1hZ2VfZGVmYXVsdHMiXSwKKyAgICBkaXJzOiBhbmRyb2lkX3Jvb3RkaXJzLAorICAgIHN5bWxpbmtzOiBhbmRyb2lkX3N5bWxpbmtzLAorICAgIHR5cGU6ICJlcm9mcyIsCisgICAgZXJvZnM6IHsKKyAgICAgICAgY29tcHJlc3NvcjogImx6NGhjLDkiLAorICAgICAgICBjb21wcmVzc19oaW50czogImVyb2ZzX2NvbXByZXNzX2hpbnRzLnR4dCIsCisgICAgfSwKK30KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvT1dORVJTIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9PV05FUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxNDQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvT1dORVJTCkBAIC0wLDAgKzEsNiBAQAorIyBCdWcgY29tcG9uZW50OiAxMzIyNzEzCitpbnNlb2JAZ29vZ2xlLmNvbQoramVvbmdpa0Bnb29nbGUuY29tCitqaXlvbmdAZ29vZ2xlLmNvbQoranVzdGlueXVuQGdvb2dsZS5jb20KK2tpeW91bmdraW1AZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9lcm9mc19jb21wcmVzc19oaW50cy50eHQgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljL2Vyb2ZzX2NvbXByZXNzX2hpbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjJhNzExCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9lcm9mc19jb21wcmVzc19oaW50cy50eHQKQEAgLTAsMCArMSBAQAorMCAuKlwuYXBleCQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9nZW5lcmljX3JhbWRpc2subWsgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljX3JhbWRpc2subWsKaW5kZXggZWJhYzYyZi4uNWVjYjU1ZiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpY19yYW1kaXNrLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWNfcmFtZGlzay5tawpAQCAtMjMsNiArMjMsNyBAQAogUFJPRFVDVF9QQUNLQUdFUyArPSBcCiAgICAgaW5pdF9maXJzdF9zdGFnZSBcCiAgICAgc25hcHVzZXJkX3JhbWRpc2sgXAorICAgIHJhbWRpc2stYnVpbGQucHJvcCBcCiAKICMgRGVidWcgcmFtZGlzawogUFJPRFVDVF9QQUNLQUdFUyArPSBcCkBAIC0zNSw4ICszNiw2IEBACiBfbXlfcGF0aHMgOj0gXAogICAgICQoVEFSR0VUX0NPUFlfT1VUX1JBTURJU0spLyBcCiAgICAgJChUQVJHRVRfQ09QWV9PVVRfREVCVUdfUkFNRElTSykvIFwKLSAgICBzeXN0ZW0vdXNyL3NoYXJlL3pvbmVpbmZvL3R6X3ZlcnNpb24gXAotICAgIHN5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8vdHpkYXRhIFwKICAgICAkKFRBUkdFVF9DT1BZX09VVF9SRUNPVkVSWSkvcm9vdC9maXJzdF9zdGFnZV9yYW1kaXNrL3N5c3RlbSBcCiAKIApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpY19zeXN0ZW0ubWsgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljX3N5c3RlbS5tawppbmRleCAwYTA5ZWIxLi5iOWE2MjNkIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9nZW5lcmljX3N5c3RlbS5taworKysgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljX3N5c3RlbS5tawpAQCAtMTUyLDQgKzE1Miw1IEBACiAkKGNhbGwgcmVxdWlyZS1hcnRpZmFjdHMtaW4tcGF0aCwgJChfbXlfcGF0aHMpLCAkKF9teV9hbGxvd2VkX2xpc3QpKQogCiAjIFByb2R1Y3QgY29uZmlnIG1hcCB0byB0b2dnbGUgYmV0d2VlbiBzb3VyY2VzIGFuZCBwcmVidWlsdHMgb2YgcmVxdWlyZWQgbWFpbmxpbmUgbW9kdWxlcworUFJPRFVDVF9SRUxFQVNFX0NPTkZJR19NQVBTICs9ICQod2lsZGNhcmQgYnVpbGQvcmVsZWFzZS9nbXNfbWFpbmxpbmUvcmVxdWlyZWQvcmVsZWFzZV9jb25maWdfbWFwLnRleHRwcm90bykKIFBST0RVQ1RfUkVMRUFTRV9DT05GSUdfTUFQUyArPSAkKHdpbGRjYXJkIHZlbmRvci9nb29nbGVfc2hhcmVkL2J1aWxkL3JlbGVhc2UvZ21zX21haW5saW5lL3JlcXVpcmVkL3JlbGVhc2VfY29uZmlnX21hcC50ZXh0cHJvdG8pCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9nb19kZWZhdWx0cy5tayBiL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzLm1rCmluZGV4IGM5Mjg1MzAuLmNjYzRmMzYgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzLm1rCkBAIC0xOCw2ICsxOCw3IEBACiAkKGNhbGwgaW5oZXJpdC1wcm9kdWN0LCBidWlsZC9tYWtlL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzX2NvbW1vbi5taykKIAogIyBQcm9kdWN0IGNvbmZpZyBtYXAgdG8gdG9nZ2xlIGJldHdlZW4gc291cmNlcyBhbmQgcHJlYnVpbHRzIG9mIHJlcXVpcmVkIG1haW5saW5lIG1vZHVsZXMKK1BST0RVQ1RfUkVMRUFTRV9DT05GSUdfTUFQUyArPSAkKHdpbGRjYXJkIGJ1aWxkL3JlbGVhc2UvZ21zX21haW5saW5lX2dvL3JlcXVpcmVkL3JlbGVhc2VfY29uZmlnX21hcC50ZXh0cHJvdG8pCiBQUk9EVUNUX1JFTEVBU0VfQ09ORklHX01BUFMgKz0gJCh3aWxkY2FyZCB2ZW5kb3IvZ29vZ2xlX3NoYXJlZC9idWlsZC9yZWxlYXNlL2dtc19tYWlubGluZV9nby9yZXF1aXJlZC9yZWxlYXNlX2NvbmZpZ19tYXAudGV4dHByb3RvKQogCiAjIEFkZCB0aGUgc3lzdGVtIHByb3BlcnRpZXMuCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9nb19kZWZhdWx0c19jb21tb24ubWsgYi90YXJnZXQvcHJvZHVjdC9nb19kZWZhdWx0c19jb21tb24ubWsKaW5kZXggZmQ0MDQ3YS4uMGZjZjE2YiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ29fZGVmYXVsdHNfY29tbW9uLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzX2NvbW1vbi5tawpAQCAtMjQsMTEgKzI0LDYgQEAKICMgU3BlZWQgcHJvZmlsZSBzZXJ2aWNlcyBhbmQgd2lmaS1zZXJ2aWNlIHRvIHJlZHVjZSBSQU0gYW5kIHN0b3JhZ2UuCiBQUk9EVUNUX1NZU1RFTV9TRVJWRVJfQ09NUElMRVJfRklMVEVSIDo9IHNwZWVkLXByb2ZpbGUKIAotIyBVc2UgYSBwcm9maWxlIGJhc2VkIGJvb3QgaW1hZ2UgZm9yIHRoaXMgZGV2aWNlLiBOb3RlIHRoYXQgdGhpcyBpcyBjdXJyZW50bHkgYQotIyBnZW5lcmljIHByb2ZpbGUgYW5kIG5vdCBBbmRyb2lkIEdvIG9wdGltaXplZC4KLVBST0RVQ1RfVVNFX1BST0ZJTEVfRk9SX0JPT1RfSU1BR0UgOj0gdHJ1ZQotUFJPRFVDVF9ERVhfUFJFT1BUX0JPT1RfSU1BR0VfUFJPRklMRV9MT0NBVElPTiA6PSBmcmFtZXdvcmtzL2Jhc2UvY29uZmlnL2Jvb3QtaW1hZ2UtcHJvZmlsZS50eHQKLQogIyBEbyBub3QgZ2VuZXJhdGUgbGliYXJ0ZC4KIFBST0RVQ1RfQVJUX1RBUkdFVF9JTkNMVURFX0RFQlVHX0JVSUxEIDo9IGZhbHNlCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dzaS9BbmRyb2lkLmJwIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpL0FuZHJvaWQuYnAKaW5kZXggNDViYTE0My4uOWU4OTQ2ZCAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ3NpL0FuZHJvaWQuYnAKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpL0FuZHJvaWQuYnAKQEAgLTQ2LDMgKzQ2LDE2NCBAQAogICAgIGluc3RhbGxlZF9sb2NhdGlvbjogImV0Yy9pbml0L2NvbmZpZyIsCiAgICAgc3ltbGlua190YXJnZXQ6ICIvc3lzdGVtL3N5c3RlbV9leHQvZXRjL2luaXQvY29uZmlnIiwKIH0KKworLy8gaW5pdC5nc2kucmMsIEdTSS1zcGVjaWZpYyBpbml0IHNjcmlwdC4KK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImluaXQuZ3NpLnJjIiwKKyAgICBzcmM6ICJpbml0LmdzaS5yYyIsCisgICAgc3lzdGVtX2V4dF9zcGVjaWZpYzogdHJ1ZSwKKyAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJpbml0IiwKK30KKworcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiaW5pdC52bmRrLW5vZGVmLnJjIiwKKyAgICBzcmM6ICJpbml0LnZuZGstbm9kZWYucmMiLAorICAgIHN5c3RlbV9leHRfc3BlY2lmaWM6IHRydWUsCisgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiZ3NpIiwKK30KKworZ3NpX3N5bWxpbmtzID0gWworICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3N5c3RlbS9zeXN0ZW1fZXh0IiwKKyAgICAgICAgbmFtZTogInN5c3RlbV9leHQiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtL3Byb2R1Y3QiLAorICAgICAgICBuYW1lOiAicHJvZHVjdCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9vZG0vb2RtX2Rsa20vZXRjIiwKKyAgICAgICAgbmFtZTogIm9kbV9kbGttL2V0YyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3IvdmVuZG9yX2Rsa20vZXRjIiwKKyAgICAgICAgbmFtZTogInZlbmRvcl9kbGttL2V0YyIsCisgICAgfSwKK10KKworYW5kcm9pZF9zeXN0ZW1faW1hZ2UgeworICAgIG5hbWU6ICJhbmRyb2lkX2dzaSIsCisgICAgZGVmYXVsdHM6IFsic3lzdGVtX2ltYWdlX2RlZmF1bHRzIl0sCisgICAgc3ltbGlua3M6IGdzaV9zeW1saW5rcywKKyAgICBkaXJzOiBbImNhY2hlIl0sCisgICAgZGVwczogWworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIGdzaV9zeXN0ZW1fZXh0CisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgICAgICAvLyBoYW5kaGVsZCBwYWNrYWdlcworICAgICAgICAiTGF1bmNoZXIzUXVpY2tTdGVwIiwKKyAgICAgICAgIlByb3Zpc2lvbiIsCisgICAgICAgICJTZXR0aW5ncyIsCisgICAgICAgICJTdG9yYWdlTWFuYWdlciIsCisgICAgICAgICJTeXN0ZW1VSSIsCisKKyAgICAgICAgLy8gdGVsZXBob255IHBhY2thZ2VzCisgICAgICAgICJDYXJyaWVyQ29uZmlnIiwKKworICAgICAgICAvLyBJbnN0YWxsIGEgY29weSBvZiB0aGUgZGVidWcgcG9saWN5IHRvIHRoZSBzeXN0ZW1fZXh0IHBhcnRpdGlvbiwgYW5kIGFsbG93CisgICAgICAgIC8vIGluaXQtc2Vjb25kLXN0YWdlIHRvIGxvYWQgZGVidWcgcG9saWN5IGZyb20gc3lzdGVtX2V4dC4KKyAgICAgICAgLy8gVGhpcyBvcHRpb24gaXMgb25seSBtZWFudCB0byBiZSBzZXQgYnkgY29tcGxpYW5jZSBHU0kgdGFyZ2V0cy4KKyAgICAgICAgInN5c3RlbV9leHRfdXNlcmRlYnVnX3BsYXRfc2Vwb2xpY3kuY2lsIiwKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIGJhc2Vfc3lzdGVtX2V4dAorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgICJidWlsZF9mbGFnX3N5c3RlbV9leHQiLAorICAgICAgICAiZnNfY29uZmlnX2RpcnNfc3lzdGVtX2V4dCIsCisgICAgICAgICJmc19jb25maWdfZmlsZXNfc3lzdGVtX2V4dCIsCisgICAgICAgICJncm91cF9zeXN0ZW1fZXh0IiwKKyAgICAgICAgInBhc3N3ZF9zeXN0ZW1fZXh0IiwKKyAgICAgICAgIlNhdGVsbGl0ZUNsaWVudCIsCisgICAgICAgICJzZWxpbnV4X3BvbGljeV9zeXN0ZW1fZXh0IiwKKyAgICAgICAgInN5c3RlbV9leHRfbWFuaWZlc3QueG1sIiwKKyAgICAgICAgInN5c3RlbV9leHQtYnVpbGQucHJvcCIsCisgICAgICAgIC8vIEJhc2UgbW9kdWxlcyB3aGVuIHNoaXBwaW5nIGFwaSBsZXZlbCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzQKKyAgICAgICAgImh3c2VydmljZW1hbmFnZXIiLAorICAgICAgICAiYW5kcm9pZC5oaWRsLmFsbG9jYXRvckAxLjAtc2VydmljZSIsCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAvLyB3aW5kb3dfZXh0ZW5zaW9uc19iYXNlCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgImFuZHJvaWR4LndpbmRvdy5leHRlbnNpb25zIiwKKyAgICAgICAgImFuZHJvaWR4LndpbmRvdy5zaWRlY2FyIiwKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIGdzaV9yZWxlYXNlCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgImdzaV9za2lwX21vdW50LmNmZyIsCisgICAgICAgICJpbml0LmdzaS5yYyIsCisgICAgICAgICJpbml0LnZuZGstbm9kZWYucmMiLAorICAgICAgICAvLyBPdmVybGF5IHRoZSBHU0kgc3BlY2lmaWMgc2V0dGluZyBmb3IgZnJhbWV3b3JrIGFuZCBTeXN0ZW1VSQorICAgICAgICAiZ3NpX292ZXJsYXlfZnJhbWV3b3JrIiwKKyAgICAgICAgImdzaV9vdmVybGF5X3N5c3RlbXVpIiwKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIFZOREsKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzAiLAorICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzEiLAorICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzIiLAorICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzMiLAorICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzQiLAorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gQVZGCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbXBvcyIsCisgICAgICAgICJmZWF0dXJlc19jb20uYW5kcm9pZC52aXJ0LnhtbCIsCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAvLyBnc2lfcHJvZHVjdAorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgICJCcm93c2VyMiIsCisgICAgICAgICJDYW1lcmEyIiwKKyAgICAgICAgIkRpYWxlciIsCisgICAgICAgICJMYXRpbklNRSIsCisgICAgICAgICJhcG5zLWZ1bGwtY29uZi54bWwiLAorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gbWVkaWFfcHJvZHVjdAorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgICJ3ZWJ2aWV3IiwKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIGJhc2VfcHJvZHVjdAorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgLy8gQmFzZSBtb2R1bGVzIGFuZCBzZXR0aW5ncyBmb3IgdGhlIHByb2R1Y3QgcGFydGl0aW9uLgorICAgICAgICAiYnVpbGRfZmxhZ19wcm9kdWN0IiwKKyAgICAgICAgImZzX2NvbmZpZ19kaXJzX3Byb2R1Y3QiLAorICAgICAgICAiZnNfY29uZmlnX2ZpbGVzX3Byb2R1Y3QiLAorICAgICAgICAiZ3JvdXBfcHJvZHVjdCIsCisgICAgICAgICJNb2R1bGVNZXRhZGF0YSIsCisgICAgICAgICJwYXNzd2RfcHJvZHVjdCIsCisgICAgICAgICJwcm9kdWN0X2NvbXBhdGliaWxpdHlfbWF0cml4LnhtbCIsCisgICAgICAgICJwcm9kdWN0X21hbmlmZXN0LnhtbCIsCisgICAgICAgICJzZWxpbnV4X3BvbGljeV9wcm9kdWN0IiwKKyAgICAgICAgInByb2R1Y3QtYnVpbGQucHJvcCIsCisKKyAgICAgICAgLy8gQVVESU8KKyAgICAgICAgImZyYW1ld29ya3Nfc291bmRzIiwKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgImNoYXJnZXIiLAorICAgIF0gKyBzZWxlY3QocHJvZHVjdF92YXJpYWJsZSgiZGVidWdnYWJsZSIpLCB7CisgICAgICAgIC8vIFBhY2thZ2VzIGluY2x1ZGVkIG9ubHkgZm9yIGVuZyBvciB1c2VyZGVidWcgYnVpbGRzLCBwcmV2aW91c2x5IGRlYnVnIHRhZ2dlZAorICAgICAgICB0cnVlOiBbImFkYl9rZXlzIl0sCisgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgIH0pLAorICAgIG11bHRpbGliOiB7CisgICAgICAgIGJvdGg6IHsKKyAgICAgICAgICAgIC8vIFBST0RVQ1RfUEFDS0FHRVNfU0hJUFBJTkdfQVBJX0xFVkVMXzM0CisgICAgICAgICAgICBkZXBzOiBbImFuZHJvaWQuaGlkbC5tZW1vcnlAMS4wLWltcGwiXSwKKyAgICAgICAgfSwKKyAgICB9LAorICAgIGVuYWJsZWQ6IHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoIkFORFJPSUQiLCAiUFJPRFVDVF9JTlNUQUxMX0RFQlVHX1BPTElDWV9UT19TWVNURU1fRVhUIiksIHsKKyAgICAgICAgInRydWUiOiB0cnVlLAorICAgICAgICBkZWZhdWx0OiBmYWxzZSwKKyAgICB9KSwKKyAgICB0eXBlOiAiZXh0NCIsCit9CmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9nc2kvY3VycmVudC50eHQgYi90YXJnZXQvcHJvZHVjdC9nc2kvY3VycmVudC50eHQKaW5kZXggZjc3MTkxNi4uY2JiOGEwZSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ3NpL2N1cnJlbnQudHh0CisrKyBiL3RhcmdldC9wcm9kdWN0L2dzaS9jdXJyZW50LnR4dApAQCAtMjQsNyArMjQsNyBAQAogVk5ESy1TUDogYW5kcm9pZC5oYXJkd2FyZS5jb21tb24tVjItbmRrLnNvCiBWTkRLLVNQOiBhbmRyb2lkLmhhcmR3YXJlLmNvbW1vbi5mbXEtVjEtbmRrLnNvCiBWTkRLLVNQOiBhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmFsbG9jYXRvci1WMi1uZGsuc28KLVZOREstU1A6IGFuZHJvaWQuaGFyZHdhcmUuZ3JhcGhpY3MuY29tbW9uLVY1LW5kay5zbworVk5ESy1TUDogYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5jb21tb24tVjYtbmRrLnNvCiBWTkRLLVNQOiBhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmNvbW1vbkAxLjAuc28KIFZOREstU1A6IGFuZHJvaWQuaGFyZHdhcmUuZ3JhcGhpY3MuY29tbW9uQDEuMS5zbwogVk5ESy1TUDogYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5jb21tb25AMS4yLnNvCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9nc2lfcmVsZWFzZS5tayBiL3RhcmdldC9wcm9kdWN0L2dzaV9yZWxlYXNlLm1rCmluZGV4IDM5NDI4ZDIuLmYwMGMzOGMgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2dzaV9yZWxlYXNlLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2dzaV9yZWxlYXNlLm1rCkBAIC04Miw2ICs4Miw3IEBACiAjIEFkZGl0aW9uYWwgc2V0dGluZ3MgdXNlZCBpbiBhbGwgR1NJIGJ1aWxkcwogUFJPRFVDVF9QUk9EVUNUX1BST1BFUlRJRVMgKz0gXAogICAgIHJvLmNyeXB0by5tZXRhZGF0YV9pbml0X2RlbGV0ZV9hbGxfa2V5cy5lbmFibGVkPWZhbHNlIFwKKyAgICBkZWJ1Zy5jb2RlYzIuYnFwb29sX2RlYWxsb2NfYWZ0ZXJfc3RvcD0xIFwKIAogIyBXaW5kb3cgRXh0ZW5zaW9ucwogaWZuZXEgKCQoUFJPRFVDVF9JU19BVFYpLHRydWUpCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9tZWRpYV9zeXN0ZW1fZXh0Lm1rIGIvdGFyZ2V0L3Byb2R1Y3QvbWVkaWFfc3lzdGVtX2V4dC5tawppbmRleCAzMGRkMmUyLi5lNzlhN2ViIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9tZWRpYV9zeXN0ZW1fZXh0Lm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L21lZGlhX3N5c3RlbV9leHQubWsKQEAgLTIwLDkgKzIwLDUgQEAKICMgYmFzZV9zeXN0ZW1fZXh0Lm1rLgogJChjYWxsIGluaGVyaXQtcHJvZHVjdCwgJChTUkNfVEFSR0VUX0RJUikvcHJvZHVjdC9iYXNlX3N5c3RlbV9leHQubWspCiAKLSMgL3N5c3RlbV9leHQgcGFja2FnZXMKLVBST0RVQ1RfUEFDS0FHRVMgKz0gXAotICAgIHZuZGtfYXBleF9zbmFwc2hvdF9wYWNrYWdlIFwKLQogIyBXaW5kb3cgRXh0ZW5zaW9ucwogJChjYWxsIGluaGVyaXQtcHJvZHVjdCwgJChTUkNfVEFSR0VUX0RJUikvcHJvZHVjdC93aW5kb3dfZXh0ZW5zaW9uc19iYXNlLm1rKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQW5kcm9pZC5icCBiL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L0FuZHJvaWQuYnAKaW5kZXggMGQ3YjM1ZS4uMjE0YzAwOSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQW5kcm9pZC5icAorKysgYi90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9BbmRyb2lkLmJwCkBAIC0zMyw3ICszMywxOCBAQAogLy8gaW1hZ2UKIG90YWNlcnRzX3ppcCB7CiAgICAgbmFtZTogIm90YWNlcnRzIiwKLSAgICByZWNvdmVyeV9hdmFpbGFibGU6IHRydWUsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAic2VjdXJpdHkiLAogICAgIGZpbGVuYW1lOiAib3RhY2VydHMuemlwIiwKIH0KKworb3RhY2VydHNfemlwIHsKKyAgICBuYW1lOiAib3RhY2VydHMucmVjb3ZlcnkiLAorICAgIHJlY292ZXJ5OiB0cnVlLAorICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogInNlY3VyaXR5IiwKKyAgICBmaWxlbmFtZTogIm90YWNlcnRzLnppcCIsCit9CisKK2FkYl9rZXlzIHsKKyAgICBuYW1lOiAiYWRiX2tleXMiLAorICAgIHByb2R1Y3Rfc3BlY2lmaWM6IHRydWUsCit9CmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9BbmRyb2lkLm1rIGIvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM4ZTViYi4uMDAwMDAwMAotLS0gYS90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBhZGIga2V5LCBpZiBjb25maWd1cmVkIHZpYSBQUk9EVUNUX0FEQl9LRVlTCi1pZmRlZiBQUk9EVUNUX0FEQl9LRVlTCi0gIGlmbmVxICgkKGZpbHRlciBlbmcgdXNlcmRlYnVnLCQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpKSwpCi0gICAgaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0gICAgTE9DQUxfTU9EVUxFIDo9IGFkYl9rZXlzCi0gICAgTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi0gICAgTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotICAgIExPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLSAgICBMT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi0gICAgTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX1BST0RVQ1RfRVRDKS9zZWN1cml0eQotICAgIExPQ0FMX1BSRUJVSUxUX01PRFVMRV9GSUxFIDo9ICQoUFJPRFVDVF9BREJfS0VZUykKLSAgICBpbmNsdWRlICQoQlVJTERfUFJFQlVJTFQpCi0gIGVuZGlmCi1lbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQlVJTEQuYmF6ZWwgYi90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9CVUlMRC5iYXplbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyYmU3OS4uMDAwMDAwMAotLS0gYS90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9CVUlMRC5iYXplbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotZmlsZWdyb3VwKAotICAgIG5hbWUgPSAiYW5kcm9pZF9jZXJ0aWZpY2F0ZV9kaXJlY3RvcnkiLAotICAgIHNyY3MgPSBnbG9iKFsKLSAgICAgICAgIioucGs4IiwKLSAgICAgICAgIioucGVtIiwKLSAgICBdKSwKLSAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCi0pCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS9jb21wcmVzc2lvbi5tayBiL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL2NvbXByZXNzaW9uLm1rCmluZGV4IGRjMWVlM2UuLmU3N2MzNmYgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL2NvbXByZXNzaW9uLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL2NvbXByZXNzaW9uLm1rCkBAIC0xOCw5ICsxOCwxMiBAQAogCiBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuY29tcHJlc3Npb24uZW5hYmxlZD10cnVlCiBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIudXNlcnNwYWNlLnNuYXBzaG90cy5lbmFibGVkPXRydWUKLVBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5pb191cmluZy5lbmFibGVkPXRydWUKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5iYXRjaF93cml0ZXM9dHJ1ZQogCisjIE9wdGlvbmFsIGFzc2lnbm1lbnQuIE9uIGxvdyBtZW1vcnkgZGV2aWNlcywgZGlzYWJsaW5nIGlvX3VyaW5nIGNhbiByZWxpZXZlIGNwdSBhbmQgbWVtb3J5CisjIHByZXNzdXJlIGR1cmluZyBhbiBPVEEuCitQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuaW9fdXJpbmcuZW5hYmxlZD89dHJ1ZQorCiAjIEVuYWJsaW5nIHRoaXMgcHJvcGVydHksIHdpbGwgaW1wcm92ZSBPVEEgaW5zdGFsbCB0aW1lCiAjIGJ1dCB3aWxsIHVzZSBhbiBhZGRpdGlvbmFsIENQVSBjb3JlCiAjIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5jb21wcmVzc2lvbi50aHJlYWRzPXRydWUKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL3ZhYmNfZmVhdHVyZXMubWsgYi90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS92YWJjX2ZlYXR1cmVzLm1rCmluZGV4IGUyNzQ1YTEuLmQwOTI2OTkgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL3ZhYmNfZmVhdHVyZXMubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvdmlydHVhbF9hYl9vdGEvdmFiY19mZWF0dXJlcy5tawpAQCAtMzEsMTQgKzMxLDE1IEBACiAKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5jb21wcmVzc2lvbi5lbmFibGVkPXRydWUKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi51c2Vyc3BhY2Uuc25hcHNob3RzLmVuYWJsZWQ9dHJ1ZQotUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmlvX3VyaW5nLmVuYWJsZWQ9dHJ1ZQotUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmNvbXByZXNzaW9uLnhvci5lbmFibGVkPXRydWUKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5iYXRjaF93cml0ZXM9dHJ1ZQorCisjIE9wdGlvbmFsIGFzc2lnbm1lbnRzLCBsb3cgbWVtb3J5IGRldmljZXMgbWF5IGJlbmVmaXQgZnJvbSBvdmVycmlkaW5nIHRoZXNlLgorUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmlvX3VyaW5nLmVuYWJsZWQ/PXRydWUKK1BST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5jb21wcmVzc2lvbi54b3IuZW5hYmxlZD89dHJ1ZQorCiAjIExvdyBtZW1vcnkgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLiBJZiBtZW1vcnkgdXNhZ2UgYW5kIGNwdSB1dGlsaXphdGlvbiBpcwogIyBhIGJvdHRsZW5lY2sgZHVyaW5nIE9UQSwgdGhlIGJlbG93IGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBhZGRlZCB0byBhCi0jIGRldmljZSdzIC5tayBmaWxlIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yIGxvdyBtZW0gZGV2aWNlcy4gRGlzYWJsaW5nCi0jIHJvLnZpcnR1YWxfYWIuY29tcHJlc3Npb24ueG9yLmVuYWJsZWQgYW5kIHJvLnZpcnR1YWxfYWIuaW9fdXJpbmcuZW5hYmxlZAotIyBpcyBhbHNvIHJlY29tbWVuZGVkCisjIGRldmljZSdzIC5tayBmaWxlIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yIGxvdyBtZW0gZGV2aWNlcy4KICMKICMgUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLnJlYWRfYWhlYWRfc2l6ZT0xNgogIyBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIub19kaXJlY3QuZW5hYmxlZD10cnVlCmRpZmYgLS1naXQgYS90ZWFtcy9BbmRyb2lkLmJwIGIvdGVhbXMvQW5kcm9pZC5icAppbmRleCAwZjViNDc1Li5hMmIwZDE0IDEwMDY0NAotLS0gYS90ZWFtcy9BbmRyb2lkLmJwCisrKyBiL3RlYW1zL0FuZHJvaWQuYnAKQEAgLTEzLDYgKzEzLDkgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCisvLyBET04nVCBBREQgTkVXIFJVTEVTIEhFUkUuIEZvciBtb3JlIGRldGFpbHMgcmVmZXIgdG8KKy8vIGdvL25ldy1hbmRyb2lkLW93bmVyc2hpcC1tb2RlbAorCiBwYWNrYWdlIHsKICAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCiB9CkBAIC02NywxMyArNzAsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl93ZWFyX2Nsb3VkX3BsYXRmb3JtIiwKLQotICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzU5MTc3NjI1MjYyODE3MjgKLSAgICB0cmVuZHlfdGVhbV9pZDogIjU5MTc3NjI1MjYyODE3MjgiLAotfQotCi10ZWFtIHsKICAgICBuYW1lOiAidHJlbmR5X3RlYW1fcGl4ZWxfc3lzdGVtX3NvZnR3YXJlIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ4NTYwMDUxMjA2MjI1OTIKQEAgLTUxNSwxMyArNTExLDYgQEAKIH0KIAogdGVhbSB7Ci0gICAgbmFtZTogInRyZW5keV90ZWFtX3dlYXJfd2Vhcl9ub3RpZmljYXRpb25zX2FsZXJ0c19hdHRlbnRpb25fbWFuYWdlbWVudCIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy82MjY3NjQzNjgxOTk2ODAwCi0gICAgdHJlbmR5X3RlYW1faWQ6ICI2MjY3NjQzNjgxOTk2ODAwIiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX2Z3a19uZmMiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTk2MjMxMjUxMjg2NDI1NgpAQCAtNTI5LDEzICs1MTgsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl9wZXJzb25hbGl6YXRpb25fZGV2ZWxvcGVyX3N1cmZhY2VzIiwKLQotICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ4MTk4OTA5ODg4MTAyNDAKLSAgICB0cmVuZHlfdGVhbV9pZDogIjQ4MTk4OTA5ODg4MTAyNDAiLAotfQotCi10ZWFtIHsKICAgICBuYW1lOiAidHJlbmR5X3RlYW1fc3Jhamt1bWFyX3RlYW0iLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTE3MDA1Mzg5NDAxMjkyOApAQCAtNjkwLDEzICs2NzIsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fdGVzdF9lbmdfYW5kcm9pZF93ZWFyIiwKLQotICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ5NzkxNTA0MjI5MzM1MDQKLSAgICB0cmVuZHlfdGVhbV9pZDogIjQ5NzkxNTA0MjI5MzM1MDQiLAotfQotCi10ZWFtIHsKICAgICBuYW1lOiAidHJlbmR5X3RlYW1fbWVzY2hfdGVhbSIsCiAKICAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MjA1NDY1ODk5MzY4NDQ4CkBAIC03MTgsMTMgKzY5Myw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3dlYXJfZGV2ZWxvcGVyX2RldngiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNDg5NDg5MDc2NDY5NzYwMAotICAgIHRyZW5keV90ZWFtX2lkOiAiNDg5NDg5MDc2NDY5NzYwMCIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX3J1c3QiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNDg0NDYwMDU4NjMwNTUzNgpAQCAtOTI4LDEzICs4OTYsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl93YWxsZXRfb25fd2VhciIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81NzI0OTYwNDM3NzMxMzI4Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1NzI0OTYwNDM3NzMxMzI4IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX2dsYW5jZWFibGVzIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ2NTgyMjIwMDQ2MDA4MzIKQEAgLTEwNjgsMTMgKzEwMjksNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl8zeHAiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTY5MjMxNzYxMjUzOTkwNAotICAgIHRyZW5keV90ZWFtX2lkOiAiNTY5MjMxNzYxMjUzOTkwNCIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9jbG9ja3dvcmsiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNDkwODc4MTY3ODc1NTg0MApAQCAtMTIwOCwxMyArMTE2Miw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3NvZnR3YXJlX250aSIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MTY0OTczNTU4NzU5NDI0Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1MTY0OTczNTU4NzU5NDI0IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX21hY2hpbmVfbGVhcm5pbmciLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTI3NjU2ODMxODI0NjkxMgpAQCAtMTMwNiwxMyArMTI1Myw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3dlYXJfcG93ZXJfZW11bGF0b3IiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTE2MDMzODkzNjcyNTUwNAotICAgIHRyZW5keV90ZWFtX2lkOiAiNTE2MDMzODkzNjcyNTUwNCIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9kZXByZWNhdGVkX2ZyYW1ld29ya19zdmV0b3NsYXZnYW5vdiIsCiAKICAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy82NDA0MTE3NDkyNTMxMjAwCkBAIC0xMzI3LDEzICsxMjY3LDYgQEAKIH0KIAogdGVhbSB7Ci0gICAgbmFtZTogInRyZW5keV90ZWFtX3dlYXJfb3B1cyIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MDk4MzUxNjM2Njc2NjA4Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1MDk4MzUxNjM2Njc2NjA4IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX3RleHRfdG9fc3BlZWNoIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzYzNjg5MzMxMjA0NDIzNjgKQEAgLTE0MzksMTMgKzEzNzIsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl9kZXZlbG9wZXJfZm91bmRhdGlvbiIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MjM5MTI3MTA4NjQ4OTYwCi0gICAgdHJlbmR5X3RlYW1faWQ6ICI1MjM5MTI3MTA4NjQ4OTYwIiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX3RwbV90dmMiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTM5MDY4MzMzMzIzMDU5MgpAQCAtMTQ1MywxMyArMTM3OSw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3dlYXJfdXgiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTc4MjA5NzQxMTA4MDE5MgotICAgIHRyZW5keV90ZWFtX2lkOiAiNTc4MjA5NzQxMTA4MDE5MiIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9sc2VfZGVza3RvcF9vc19leHBlcmllbmNlIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUxMjUyMzQ5MDA0MzQ5NDQKQEAgLTE2NzAsMTMgKzE1ODksNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl93ZWFyX2Fzc2lzdGFudCIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81ODQ4MDc1MzA2MTcyNDE2Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1ODQ4MDc1MzA2MTcyNDE2IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX2FuZHJvaWRfcG93ZXJfYW5kX2NvbW1zX2luZnJhIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUzMjU1NDc2NTMzMzI5OTIKQEAgLTM0NTUsNiArMzM2NywxMyBAQAogfQogCiB0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fYWFvc19kaXNwbGF5X3NhZmV0eV90cmlhZ2UiLAorCisgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNjUyMjA5MzY2Mzc4MDg2NAorICAgIHRyZW5keV90ZWFtX2lkOiAiNjUyMjA5MzY2Mzc4MDg2NCIsCit9CisKK3RlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9jYW1lcmFfaHRjX2xnX3F1YWxjb21tIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzYzMzIwOTk0ODA5MTE4NzIKQEAgLTQ0NDcsMyArNDM2Niw0MSBAQAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzU3ODc5Mzg0NTQ4NjM4NzIKICAgICB0cmVuZHlfdGVhbV9pZDogIjU3ODc5Mzg0NTQ4NjM4NzIiLAogfQorCit0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fYXJ0X2Nsb3VkIiwKKworICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUxMjE0NDA2NDc1Nzc2MDAKKyAgICB0cmVuZHlfdGVhbV9pZDogIjUxMjE0NDA2NDc1Nzc2MDAiLAorfQorCit0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fcmF2ZW53b29kIiwKKworICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzYwMjcxODE1MDA0OTc5MjAKKyAgICB0cmVuZHlfdGVhbV9pZDogIjYwMjcxODE1MDA0OTc5MjAiLAorfQorCit0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fYXV0b21vdGl2ZV9jYXN0IiwKKworICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUyOTM2ODMwMjYyNjQwNjQKKyAgICB0cmVuZHlfdGVhbV9pZDogIjUyOTM2ODMwMjYyNjQwNjQiLAorfQorCit0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl9zdGFuZGFsb25lX2tpZHMiLAorCisgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNjMwMzI5ODcwMzk0OTgyNAorICAgIHRyZW5keV90ZWFtX2lkOiAiNjMwMzI5ODcwMzk0OTgyNCIsCit9CisKK3RlYW0geworICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9kZXNrdG9wX3N0YXRzIiwKKworICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzU0NDA3NjQxMTQyMDY3MjAKKyAgICB0cmVuZHlfdGVhbV9pZDogIjU0NDA3NjQxMTQyMDY3MjAiLAorfQorCisvLyBET04nVCBBREQgTkVXIFJVTEVTIEhFUkUuIEZvciBtb3JlIGRldGFpbHMgcmVmZXIgdG8KKy8vIGdvL25ldy1hbmRyb2lkLW93bmVyc2hpcC1tb2RlbApkaWZmIC0tZ2l0IGEvdG9vbHMvQW5kcm9pZC5icCBiL3Rvb2xzL0FuZHJvaWQuYnAKaW5kZXggNTk4MzFhNi4uMjQzY2I1NiAxMDA2NDQKLS0tIGEvdG9vbHMvQW5kcm9pZC5icAorKysgYi90b29scy9BbmRyb2lkLmJwCkBAIC0xMjMsMyArMTIzLDExIEBACiAgICAgICAgICJtZXJnZS1ldmVudC1sb2ctdGFncy5weSIsCiAgICAgXSwKIH0KKworcHl0aG9uX2JpbmFyeV9ob3N0IHsKKyAgICBuYW1lOiAiamF2YS1ldmVudC1sb2ctdGFncyIsCisgICAgc3JjczogWworICAgICAgICAiZXZlbnRfbG9nX3RhZ3MucHkiLAorICAgICAgICAiamF2YS1ldmVudC1sb2ctdGFncy5weSIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL0JVSUxELmJhemVsIGIvdG9vbHMvQlVJTEQuYmF6ZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYzBkY2UuLjAwMDAwMDAKLS0tIGEvdG9vbHMvQlVJTEQuYmF6ZWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1weV9saWJyYXJ5KAotICAgIG5hbWUgPSAiZXZlbnRfbG9nX3RhZ3MiLAotICAgIHNyY3MgPSBbImV2ZW50X2xvZ190YWdzLnB5Il0sCi0gICAgaW1wb3J0cyA9IFsiLiJdLAotKQotCi1weV9iaW5hcnkoCi0gICAgbmFtZSA9ICJqYXZhLWV2ZW50LWxvZy10YWdzIiwKLSAgICBzcmNzID0gWyJqYXZhLWV2ZW50LWxvZy10YWdzLnB5Il0sCi0gICAgcHl0aG9uX3ZlcnNpb24gPSAiUFkzIiwKLSAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCi0gICAgZGVwcyA9IFsiOmV2ZW50X2xvZ190YWdzIl0sCi0pCi0KLXB5X2JpbmFyeSgKLSAgICBuYW1lID0gIm1lcmdlLWV2ZW50LWxvZy10YWdzIiwKLSAgICBzcmNzID0gWyJtZXJnZS1ldmVudC1sb2ctdGFncy5weSJdLAotICAgIHB5dGhvbl92ZXJzaW9uID0gIlBZMyIsCi0gICAgdmlzaWJpbGl0eSA9IFsiLy92aXNpYmlsaXR5OnB1YmxpYyJdLAotICAgIGRlcHMgPSBbIjpldmVudF9sb2dfdGFncyJdLAotKQotCi1weV9iaW5hcnkoCi0gICAgbmFtZSA9ICJjaGVja19lbGZfZmlsZSIsCi0gICAgc3JjcyA9IFsiY2hlY2tfZWxmX2ZpbGUucHkiXSwKLSAgICBweXRob25fdmVyc2lvbiA9ICJQWTMiLAotICAgIHZpc2liaWxpdHkgPSBbIi8vdmlzaWJpbGl0eTpwdWJsaWMiXSwKLSkKLQotcHlfYmluYXJ5KAotICAgIG5hbWUgPSAiYXV0b19nZW5fdGVzdF9jb25maWciLAotICAgIHNyY3MgPSBbImF1dG9fZ2VuX3Rlc3RfY29uZmlnLnB5Il0sCi0gICAgcHl0aG9uX3ZlcnNpb24gPSAiUFkzIiwKLSAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCi0pCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL09XTkVSUyBiL3Rvb2xzL2Fjb25maWcvT1dORVJTCmluZGV4IDlhNzYyNzkuLmM5MmZjN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvT1dORVJTCisrKyBiL3Rvb2xzL2Fjb25maWcvT1dORVJTCkBAIC0xLDcgKzEsOCBAQAotYW1oa0Bnb29nbGUuY29tCiBkenNoZW5AZ29vZ2xlLmNvbQotamhhbUBnb29nbGUuY29tCi1qb2VvQGdvb2dsZS5jb20KIG9wZ0Bnb29nbGUuY29tCiB0ZWRiYXVlckBnb29nbGUuY29tCiB6aGlkb3VAZ29vZ2xlLmNvbQorCithbWhrQGdvb2dsZS5jb20gICN7TEFTVF9SRVNPUlRfU1VHR0VTVElPTn0KK2poYW1AZ29vZ2xlLmNvbSAgI3tMQVNUX1JFU09SVF9TVUdHRVNUSU9OfQoram9lb0Bnb29nbGUuY29tICAje0xBU1RfUkVTT1JUX1NVR0dFU1RJT059CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL1RFU1RfTUFQUElORyBiL3Rvb2xzL2Fjb25maWcvVEVTVF9NQVBQSU5HCmluZGV4IDE1ZTQxODcuLmE3ZjBhNGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvVEVTVF9NQVBQSU5HCisrKyBiL3Rvb2xzL2Fjb25maWcvVEVTVF9NQVBQSU5HCkBAIC0xMDIsMTIgKzEwMiwxNCBAQAogICAgIHsKICAgICAgIC8vIGFjb25maWdfc3RvcmFnZSBmaWxlIGphdmEgaW50ZWdyYXRpb24gdGVzdHMKICAgICAgICJuYW1lIjogImFjb25maWdfc3RvcmFnZV9maWxlLnRlc3QuamF2YSIKLSAgICB9Ci0gIF0sCi0gICJwb3N0c3VibWl0IjogWworICAgIH0sCiAgICAgewotICAgICAgLy8gYWNvbmZpZ19zdG9yYWdlIHJlYWQgYXBpIGphdmEgaW50ZWdyYXRpb24gdGVzdHMKLSAgICAgICJuYW1lIjogImFjb25maWdfc3RvcmFnZV9yZWFkX2FwaS50ZXN0LmphdmEiCisgICAgICAvLyBhY29uZmlnX3N0b3JhZ2UgcmVhZCBmdW5jdGlvbmFsIHRlc3QKKyAgICAgICJuYW1lIjogImFjb25maWdfc3RvcmFnZV9yZWFkX2Z1bmN0aW9uYWwiCisgICAgfSwKKyAgICB7CisgICAgICAvLyBhY29uZmlnX3N0b3JhZ2UgcmVhZCB1bml0IHRlc3QKKyAgICAgICJuYW1lIjogImFjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQiCiAgICAgfQogICBdCiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9BbmRyb2lkLmJwCmluZGV4IDY4NTIxYWYuLjVlM2ViMTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9BbmRyb2lkLmJwCkBAIC02OCw2ICs2OCwxNCBAQAogICAgIF0sCiB9CiAKK2Fjb25maWdfdmFsdWVzIHsKKyAgICBuYW1lOiAiYWNvbmZpZy50ZXN0LmZsYWcuc2Vjb25kX3ZhbHVlcyIsCisgICAgcGFja2FnZTogImNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIsCisgICAgc3JjczogWworICAgICAgICAidGVzdHMvdGhpcmQudmFsdWVzIiwKKyAgICBdLAorfQorCiBhY29uZmlnX3ZhbHVlX3NldCB7CiAgICAgbmFtZTogImFjb25maWcudGVzdC5mbGFnLnZhbHVlX3NldCIsCiAgICAgdmFsdWVzOiBbCkBAIC0yMzQsNiArMjQyLDcgQEAKICAgICBuYW1lOiAibGliYWNvbmZpZ190ZXN0X3J1c3RfbGlicmFyeSIsCiAgICAgY3JhdGVfbmFtZTogImFjb25maWdfdGVzdF9ydXN0X2xpYnJhcnkiLAogICAgIGFjb25maWdfZGVjbGFyYXRpb25zOiAiYWNvbmZpZy50ZXN0LmZsYWdzIiwKKyAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKIH0KIAogcnVzdF90ZXN0IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9jcHAucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vY3BwLnJzCmluZGV4IDdhOWMzODIuLmFlMTg2NzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9jcHAucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2NwcC5ycwpAQCAtMTI3LDYgKzEyNywyNiBAQAogICAgIGZsYWdfaWRzOiBIYXNoTWFwPFN0cmluZywgdTE2PiwKICAgICByd19jb3VudDogJm11dCBpMzIsCiApIC0+IENsYXNzRWxlbWVudCB7CisgICAgbGV0IG5vX2Fzc2lnbmVkX29mZnNldCA9CisgICAgICAgIChwZi5jb250YWluZXIoKSA9PSAic3lzdGVtIiB8fCBwZi5jb250YWluZXIoKSA9PSAidmVuZG9yIiB8fCBwZi5jb250YWluZXIoKSA9PSAicHJvZHVjdCIpCisgICAgICAgICAgICAmJiBwZi5wZXJtaXNzaW9uKCkgPT0gUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZCisgICAgICAgICAgICAmJiBwZi5zdGF0ZSgpID09IFByb3RvRmxhZ1N0YXRlOjpESVNBQkxFRDsKKworICAgIGxldCBmbGFnX29mZnNldCA9IG1hdGNoIGZsYWdfaWRzLmdldChwZi5uYW1lKCkpIHsKKyAgICAgICAgU29tZShvZmZzZXQpID0+IG9mZnNldCwKKyAgICAgICAgTm9uZSA9PiB7CisgICAgICAgICAgICAvLyBTeXN0ZW0vdmVuZG9yL3Byb2R1Y3QgUk8rZGlzYWJsZWQgZmxhZ3MgaGF2ZSBubyBvZmZzZXQgaW4gc3RvcmFnZSBmaWxlcy4KKyAgICAgICAgICAgIC8vIEFzc2lnbiBwbGFjZWhvbGRlciB2YWx1ZS4KKyAgICAgICAgICAgIGlmIG5vX2Fzc2lnbmVkX29mZnNldCB7CisgICAgICAgICAgICAgICAgJjAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFsbCBvdGhlciBmbGFncyBfbXVzdF8gaGF2ZSBhbiBvZmZzZXQuCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYW5pYyEoInt9IiwgZm9ybWF0ISgibWlzc2luZyBmbGFnIG9mZnNldCBmb3Ige30iLCBwZi5uYW1lKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKICAgICBDbGFzc0VsZW1lbnQgewogICAgICAgICByZWFkd3JpdGVfaWR4OiBpZiBwZi5wZXJtaXNzaW9uKCkgPT0gUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSB7CiAgICAgICAgICAgICBsZXQgaW5kZXggPSAqcndfY291bnQ7CkBAIC0xNDQsNyArMTY0LDcgQEAKICAgICAgICAgfSwKICAgICAgICAgZmxhZ19uYW1lOiBwZi5uYW1lKCkudG9fc3RyaW5nKCksCiAgICAgICAgIGZsYWdfbWFjcm86IHBmLm5hbWUoKS50b191cHBlcmNhc2UoKSwKLSAgICAgICAgZmxhZ19vZmZzZXQ6ICpmbGFnX2lkcy5nZXQocGYubmFtZSgpKS5leHBlY3QoInZhbHVlcyBjaGVja2VkIGF0IGZsYWcgcGFyc2UgdGltZSIpLAorICAgICAgICBmbGFnX29mZnNldDogKmZsYWdfb2Zmc2V0LAogICAgICAgICBkZXZpY2VfY29uZmlnX25hbWVzcGFjZTogcGYubmFtZXNwYWNlKCkudG9fc3RyaW5nKCksCiAgICAgICAgIGRldmljZV9jb25maWdfZmxhZzogY29kZWdlbjo6Y3JlYXRlX2RldmljZV9jb25maWdfaWRlbnQocGFja2FnZSwgcGYubmFtZSgpKQogICAgICAgICAgICAgLmV4cGVjdCgidmFsdWVzIGNoZWNrZWQgYXQgZmxhZyBwYXJzZSB0aW1lIiksCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vamF2YS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzCmluZGV4IDFhYzU4YzEuLjBkNTI4ZDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzCkBAIC0zMiw2ICszMiw4IEBACiAgICAgY29kZWdlbl9tb2RlOiBDb2RlZ2VuTW9kZSwKICAgICBmbGFnX2lkczogSGFzaE1hcDxTdHJpbmcsIHUxNj4sCiAgICAgYWxsb3dfaW5zdHJ1bWVudGF0aW9uOiBib29sLAorICAgIHBhY2thZ2VfZmluZ2VycHJpbnQ6IHU2NCwKKyAgICBuZXdfZXhwb3J0ZWQ6IGJvb2wsCiApIC0+IFJlc3VsdDxWZWM8T3V0cHV0RmlsZT4+CiB3aGVyZQogICAgIEk6IEl0ZXJhdG9yPEl0ZW0gPSBQcm90b1BhcnNlZEZsYWc+LApAQCAtNDYsNiArNDgsNyBAQAogICAgIGxldCBydW50aW1lX2xvb2t1cF9yZXF1aXJlZCA9CiAgICAgICAgIGZsYWdfZWxlbWVudHMuaXRlcigpLmFueSh8ZWxlbXwgZWxlbS5pc19yZWFkX3dyaXRlKSB8fCBsaWJyYXJ5X2V4cG9ydGVkOwogICAgIGxldCBjb250YWluZXIgPSAoZmxhZ19lbGVtZW50cy5maXJzdCgpLmV4cGVjdCgiemVybyB0ZW1wbGF0ZSBmbGFncyIpLmNvbnRhaW5lcikudG9fc3RyaW5nKCk7CisgICAgbGV0IGlzX3BsYXRmb3JtX2NvbnRhaW5lciA9IG1hdGNoZXMhKGNvbnRhaW5lci5hc19zdHIoKSwgInN5c3RlbSIgfCAicHJvZHVjdCIgfCAidmVuZG9yIik7CiAgICAgbGV0IGNvbnRleHQgPSBDb250ZXh0IHsKICAgICAgICAgZmxhZ19lbGVtZW50cywKICAgICAgICAgbmFtZXNwYWNlX2ZsYWdzLApAQCAtNTYsNiArNTksOSBAQAogICAgICAgICBsaWJyYXJ5X2V4cG9ydGVkLAogICAgICAgICBhbGxvd19pbnN0cnVtZW50YXRpb24sCiAgICAgICAgIGNvbnRhaW5lciwKKyAgICAgICAgaXNfcGxhdGZvcm1fY29udGFpbmVyLAorICAgICAgICBwYWNrYWdlX2ZpbmdlcnByaW50OiBmb3JtYXQhKCIweHs6WH1MIiwgcGFja2FnZV9maW5nZXJwcmludCksCisgICAgICAgIG5ld19leHBvcnRlZCwKICAgICB9OwogICAgIGxldCBtdXQgdGVtcGxhdGUgPSBUaW55VGVtcGxhdGU6Om5ldygpOwogICAgIHRlbXBsYXRlLmFkZF90ZW1wbGF0ZSgiRmxhZ3MuamF2YSIsIGluY2x1ZGVfc3RyISgiLi4vLi4vdGVtcGxhdGVzL0ZsYWdzLmphdmEudGVtcGxhdGUiKSk/OwpAQCAtMTIzLDYgKzEyOSw5IEBACiAgICAgcHViIGxpYnJhcnlfZXhwb3J0ZWQ6IGJvb2wsCiAgICAgcHViIGFsbG93X2luc3RydW1lbnRhdGlvbjogYm9vbCwKICAgICBwdWIgY29udGFpbmVyOiBTdHJpbmcsCisgICAgcHViIGlzX3BsYXRmb3JtX2NvbnRhaW5lcjogYm9vbCwKKyAgICBwdWIgcGFja2FnZV9maW5nZXJwcmludDogU3RyaW5nLAorICAgIHB1YiBuZXdfZXhwb3J0ZWQ6IGJvb2wsCiB9CiAKICNbZGVyaXZlKFNlcmlhbGl6ZSwgRGVidWcpXQpAQCAtMTM3LDYgKzE0Niw3IEBACiAgICAgcHViIGRlZmF1bHRfdmFsdWU6IGJvb2wsCiAgICAgcHViIGRldmljZV9jb25maWdfbmFtZXNwYWNlOiBTdHJpbmcsCiAgICAgcHViIGRldmljZV9jb25maWdfZmxhZzogU3RyaW5nLAorICAgIHB1YiBmbGFnX25hbWU6IFN0cmluZywKICAgICBwdWIgZmxhZ19uYW1lX2NvbnN0YW50X3N1ZmZpeDogU3RyaW5nLAogICAgIHB1YiBmbGFnX29mZnNldDogdTE2LAogICAgIHB1YiBpc19yZWFkX3dyaXRlOiBib29sLApAQCAtMTUxLDEzICsxNjEsMzUgQEAKICkgLT4gRmxhZ0VsZW1lbnQgewogICAgIGxldCBkZXZpY2VfY29uZmlnX2ZsYWcgPSBjb2RlZ2VuOjpjcmVhdGVfZGV2aWNlX2NvbmZpZ19pZGVudChwYWNrYWdlLCBwZi5uYW1lKCkpCiAgICAgICAgIC5leHBlY3QoInZhbHVlcyBjaGVja2VkIGF0IGZsYWcgcGFyc2UgdGltZSIpOworCisgICAgbGV0IG5vX2Fzc2lnbmVkX29mZnNldCA9CisgICAgICAgIChwZi5jb250YWluZXIoKSA9PSAic3lzdGVtIiB8fCBwZi5jb250YWluZXIoKSA9PSAidmVuZG9yIiB8fCBwZi5jb250YWluZXIoKSA9PSAicHJvZHVjdCIpCisgICAgICAgICAgICAmJiBwZi5wZXJtaXNzaW9uKCkgPT0gUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZCisgICAgICAgICAgICAmJiBwZi5zdGF0ZSgpID09IFByb3RvRmxhZ1N0YXRlOjpESVNBQkxFRDsKKworICAgIGxldCBmbGFnX29mZnNldCA9IG1hdGNoIGZsYWdfb2Zmc2V0cy5nZXQocGYubmFtZSgpKSB7CisgICAgICAgIFNvbWUob2Zmc2V0KSA9PiBvZmZzZXQsCisgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgLy8gU3lzdGVtL3ZlbmRvci9wcm9kdWN0IFJPK2Rpc2FibGVkIGZsYWdzIGhhdmUgbm8gb2Zmc2V0IGluIHN0b3JhZ2UgZmlsZXMuCisgICAgICAgICAgICAvLyBBc3NpZ24gcGxhY2Vob2xkZXIgdmFsdWUuCisgICAgICAgICAgICBpZiBub19hc3NpZ25lZF9vZmZzZXQgeworICAgICAgICAgICAgICAgICYwCisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBbGwgb3RoZXIgZmxhZ3MgX211c3RfIGhhdmUgYW4gb2Zmc2V0LgorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcGFuaWMhKCJ7fSIsIGZvcm1hdCEoIm1pc3NpbmcgZmxhZyBvZmZzZXQgZm9yIHt9IiwgcGYubmFtZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCiAgICAgRmxhZ0VsZW1lbnQgewogICAgICAgICBjb250YWluZXI6IHBmLmNvbnRhaW5lcigpLnRvX3N0cmluZygpLAogICAgICAgICBkZWZhdWx0X3ZhbHVlOiBwZi5zdGF0ZSgpID09IFByb3RvRmxhZ1N0YXRlOjpFTkFCTEVELAogICAgICAgICBkZXZpY2VfY29uZmlnX25hbWVzcGFjZTogcGYubmFtZXNwYWNlKCkudG9fc3RyaW5nKCksCiAgICAgICAgIGRldmljZV9jb25maWdfZmxhZywKKyAgICAgICAgZmxhZ19uYW1lOiBwZi5uYW1lKCkudG9fc3RyaW5nKCksCiAgICAgICAgIGZsYWdfbmFtZV9jb25zdGFudF9zdWZmaXg6IHBmLm5hbWUoKS50b19hc2NpaV91cHBlcmNhc2UoKSwKLSAgICAgICAgZmxhZ19vZmZzZXQ6ICpmbGFnX29mZnNldHMuZ2V0KHBmLm5hbWUoKSkuZXhwZWN0KCJkaWRudCBmaW5kIHBhY2thZ2Ugb2Zmc2V0IDooIiksCisgICAgICAgIGZsYWdfb2Zmc2V0OiAqZmxhZ19vZmZzZXQsCiAgICAgICAgIGlzX3JlYWRfd3JpdGU6IHBmLnBlcm1pc3Npb24oKSA9PSBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX1dSSVRFLAogICAgICAgICBtZXRob2RfbmFtZTogZm9ybWF0X2phdmFfbWV0aG9kX25hbWUocGYubmFtZSgpKSwKICAgICAgICAgcHJvcGVydGllczogZm9ybWF0X3Byb3BlcnR5X25hbWUocGYubmFtZXNwYWNlKCkpLApAQCAtNDk5LDYgKzUzMSw4IEBACiAgICAgICAgICAgICBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaW50b19pdGVyKCksCiAgICAgICAgICAgICBtb2RlLAogICAgICAgICAgICAgZmxhZ19pZHMsCisgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgNTgwMTE0NDc4NDYxODIyMTY2OCwKICAgICAgICAgICAgIGZhbHNlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKQEAgLTUwNywyNSArNTQxLDM4IEBACiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBGZWF0dXJlRmxhZ3MgRkVBVFVSRV9GTEFHUyA9IG5ldyBGZWF0dXJlRmxhZ3NJbXBsKCk7CiAgICAgICAgIH0iIzsKIAotICAgICAgICBsZXQgZXhwZWN0ZWRfZmVhdHVyZWZsYWdzbXBsX2NvbnRlbnRfMCA9IHIjIgorICAgICAgICBsZXQgZXhwZWN0ZWRfZmVhdHVyZWZsYWdzbXBsX2NvbnRlbnQgPSByIyIKICAgICAgICAgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3Q7CiAgICAgICAgIC8vIFRPRE8oYi8zMDM3NzMwNTUpOiBSZW1vdmUgdGhlIGFubm90YXRpb24gYWZ0ZXIgYWNjZXNzIGlzc3VlIGlzIHJlc29sdmVkLgogICAgICAgICBpbXBvcnQgYW5kcm9pZC5jb21wYXQuYW5ub3RhdGlvbi5VbnN1cHBvcnRlZEFwcFVzYWdlOwotICAgICAgICBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWc7Ci0gICAgICAgIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRldmljZUNvbmZpZy5Qcm9wZXJ0aWVzOwotICAgICAgICAiIzsKLQotICAgICAgICBsZXQgZXhwZWN0ZWRfZmVhdHVyZWZsYWdzbXBsX2NvbnRlbnRfMSA9IHIjIgorICAgICAgICBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKKyAgICAgICAgaW1wb3J0IGFuZHJvaWQub3MuZmxhZ2dpbmcuUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsOworICAgICAgICBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKICAgICAgICAgLyoqIEBoaWRlICovCiAgICAgICAgIHB1YmxpYyBmaW5hbCBjbGFzcyBGZWF0dXJlRmxhZ3NJbXBsIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIHsKLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBvdGhlcl9uYW1lc3BhY2VfaXNfY2FjaGVkID0gZmFsc2U7CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5GZWF0dXJlRmxhZ3NJbXBsIjsKKyAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gaXNDYWNoZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZGlzYWJsZWRSdyA9IGZhbHNlOwogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkaXNhYmxlZFJ3RXhwb3J0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZGlzYWJsZWRSd0luT3RoZXJOYW1lc3BhY2UgPSBmYWxzZTsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZW5hYmxlZFJ3ID0gdHJ1ZTsKLSAgICAgICAgIiM7Ci0gICAgICAgIGxldCBleHBlY3RlZF9mZWF0dXJlZmxhZ3NtcGxfY29udGVudF8yID0gciMiCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgcmVhZGVyID0gUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoInN5c3RlbSIsICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiLCAweDUwODFDRTcyMjFDNzcwNjRMKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSdyA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDApOworICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3RXhwb3J0ZWQgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgxKTsKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZFJ3ID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoNyk7CisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMik7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5vQ2xhc3NEZWZGb3VuZEVycm9yIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG1haW5saW5lIG1vZHVsZSBydW5uaW5nIG9uIG9sZGVyIGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VzIHRvIHZlcnNpb24gY2hlY2ssIGFmdGVyIHRoZSB2ZXJzaW9uIGJ1bXAuCisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXNDYWNoZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKICAgICAgICAgICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCkBAIC01MzYsOCArNTgzLDggQEAKICAgICAgICAgICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKICAgICAgICAgICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCiAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBkaXNhYmxlZFJ3KCkgewotICAgICAgICAgICAgICAgIGlmICghYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2FjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2FibGVkUnc7CiAgICAgICAgICAgICB9CkBAIC01NDUsOCArNTkyLDggQEAKICAgICAgICAgICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKICAgICAgICAgICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCiAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBkaXNhYmxlZFJ3RXhwb3J0ZWQoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY29uZmlnX3Rlc3RfaXNfY2FjaGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpOworICAgICAgICAgICAgICAgIGlmICghaXNDYWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gZGlzYWJsZWRSd0V4cG9ydGVkOwogICAgICAgICAgICAgfQpAQCAtNTU0LDggKzYwMSw4IEBACiAgICAgICAgICAgICBAY29tLmFuZHJvaWQuYWNvbmZpZy5hbm5vdGF0aW9ucy5BY29uZmlnRmxhZ0FjY2Vzc29yCiAgICAgICAgICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQogICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZWRSd0luT3RoZXJOYW1lc3BhY2UoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvdGhlcl9uYW1lc3BhY2VfaXNfY2FjaGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX290aGVyX25hbWVzcGFjZSgpOworICAgICAgICAgICAgICAgIGlmICghaXNDYWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gZGlzYWJsZWRSd0luT3RoZXJOYW1lc3BhY2U7CiAgICAgICAgICAgICB9CkBAIC01ODcsMjM3ICs2MzQsMTcgQEAKICAgICAgICAgICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKICAgICAgICAgICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCiAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVkUncoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY29uZmlnX3Rlc3RfaXNfY2FjaGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpOworICAgICAgICAgICAgICAgIGlmICghaXNDYWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZFJ3OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgICIjOwogCi0gICAgICAgIGxldCBleHBlY3RfZmVhdHVyZWZsYWdzaW1wbF9jb250ZW50X29sZCA9IGV4cGVjdGVkX2ZlYXR1cmVmbGFnc21wbF9jb250ZW50XzAudG9fb3duZWQoKQotICAgICAgICAgICAgKyBleHBlY3RlZF9mZWF0dXJlZmxhZ3NtcGxfY29udGVudF8xCi0gICAgICAgICAgICArIHIjIgotICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygiYWNvbmZpZ190ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUncgPQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5nZXRCb29sZWFuKEZsYWdzLkZMQUdfRElTQUJMRURfUlcsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSd0V4cG9ydGVkID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXX0VYUE9SVEVELCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRSdyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19FTkFCTEVEX1JXLCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHZhbHVlIGZyb20gbmFtZXNwYWNlIGFjb25maWdfdGVzdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJmcm9tIERldmljZUNvbmZpZy4gSXQgY291bGQgYmUgdGhhdCB0aGUgY29kZSB1c2luZyBmbGFnICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImV4ZWN1dGVkIGJlZm9yZSBTZXR0aW5nc1Byb3ZpZGVyIGluaXRpYWxpemF0aW9uLiBQbGVhc2UgdXNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImZpeGVkIHJlYWQtb25seSBmbGFnIGJ5IGFkZGluZyBpc19maXhlZF9yZWFkX29ubHk6IHRydWUgaW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiZmxhZyBkZWNsYXJhdGlvbi4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhY29uZmlnX3Rlc3RfaXNfY2FjaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGxvYWRfb3ZlcnJpZGVzX290aGVyX25hbWVzcGFjZSgpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygib3RoZXJfbmFtZXNwYWNlIik7Ci0gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXX0lOX09USEVSX05BTUVTUEFDRSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgdmFsdWUgZnJvbSBuYW1lc3BhY2Ugb3RoZXJfbmFtZXNwYWNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImZyb20gRGV2aWNlQ29uZmlnLiBJdCBjb3VsZCBiZSB0aGF0IHRoZSBjb2RlIHVzaW5nIGZsYWcgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiZXhlY3V0ZWQgYmVmb3JlIFNldHRpbmdzUHJvdmlkZXIgaW5pdGlhbGl6YXRpb24uIFBsZWFzZSB1c2UgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiZml4ZWQgcmVhZC1vbmx5IGZsYWcgYnkgYWRkaW5nIGlzX2ZpeGVkX3JlYWRfb25seTogdHJ1ZSBpbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG90aGVyX25hbWVzcGFjZV9pc19jYWNoZWQgPSB0cnVlOwotICAgICAgICAgICAgfSIjCi0gICAgICAgICAgICArIGV4cGVjdGVkX2ZlYXR1cmVmbGFnc21wbF9jb250ZW50XzI7Ci0KICAgICAgICAgbGV0IG11dCBmaWxlX3NldCA9IEhhc2hNYXA6OmZyb20oWwogICAgICAgICAgICAgKCJjb20vYW5kcm9pZC9hY29uZmlnL3Rlc3QvRmxhZ3MuamF2YSIsIGV4cGVjdF9mbGFnc19jb250ZW50LmFzX3N0cigpKSwKLSAgICAgICAgICAgICgKLSAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0ZlYXR1cmVGbGFnc0ltcGwuamF2YSIsCi0gICAgICAgICAgICAgICAgJmV4cGVjdF9mZWF0dXJlZmxhZ3NpbXBsX2NvbnRlbnRfb2xkLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICgiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0ZlYXR1cmVGbGFncy5qYXZhIiwgRVhQRUNURURfRkVBVFVSRUZMQUdTX0NPTU1PTl9DT05URU5UKSwKLSAgICAgICAgICAgICgKLSAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0N1c3RvbUZlYXR1cmVGbGFncy5qYXZhIiwKLSAgICAgICAgICAgICAgICBFWFBFQ1RFRF9DVVNUT01GRUFUVVJFRkxBR1NfQ09OVEVOVCwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAoCi0gICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9GYWtlRmVhdHVyZUZsYWdzSW1wbC5qYXZhIiwKLSAgICAgICAgICAgICAgICBFWFBFQ1RFRF9GQUtFRkVBVFVSRUZMQUdTSU1QTF9DT05URU5ULAotICAgICAgICAgICAgKSwKLSAgICAgICAgXSk7Ci0KLSAgICAgICAgZm9yIGZpbGUgaW4gZ2VuZXJhdGVkX2ZpbGVzIHsKLSAgICAgICAgICAgIGxldCBmaWxlX3BhdGggPSBmaWxlLnBhdGgudG9fc3RyKCkudW53cmFwKCk7Ci0gICAgICAgICAgICBhc3NlcnQhKGZpbGVfc2V0LmNvbnRhaW5zX2tleShmaWxlX3BhdGgpLCAiQ2Fubm90IGZpbmQge30iLCBmaWxlX3BhdGgpOwotICAgICAgICAgICAgYXNzZXJ0X2VxISgKLSAgICAgICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgICAgIGNyYXRlOjp0ZXN0OjpmaXJzdF9zaWduaWZpY2FudF9jb2RlX2RpZmYoCi0gICAgICAgICAgICAgICAgICAgIGZpbGVfc2V0LmdldChmaWxlX3BhdGgpLnVud3JhcCgpLAotICAgICAgICAgICAgICAgICAgICAmU3RyaW5nOjpmcm9tX3V0ZjgoZmlsZS5jb250ZW50cykudW53cmFwKCkKLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICJGaWxlIHt9IGNvbnRlbnQgaXMgbm90IGNvcnJlY3QiLAotICAgICAgICAgICAgICAgIGZpbGVfcGF0aAotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGZpbGVfc2V0LnJlbW92ZShmaWxlX3BhdGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IShmaWxlX3NldC5pc19lbXB0eSgpKTsKLQotICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzID0gY3JhdGU6OnRlc3Q6OnBhcnNlX3Rlc3RfZmxhZ3MoKTsKLSAgICAgICAgbGV0IG1vZGUgPSBDb2RlZ2VuTW9kZTo6UHJvZHVjdGlvbjsKLSAgICAgICAgbGV0IG1vZGlmaWVkX3BhcnNlZF9mbGFncyA9Ci0gICAgICAgICAgICBjcmF0ZTo6Y29tbWFuZHM6Om1vZGlmeV9wYXJzZWRfZmxhZ3NfYmFzZWRfb25fbW9kZShwYXJzZWRfZmxhZ3MsIG1vZGUpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ19pZHMgPQotICAgICAgICAgICAgYXNzaWduX2ZsYWdfaWRzKGNyYXRlOjp0ZXN0OjpURVNUX1BBQ0tBR0UsIG1vZGlmaWVkX3BhcnNlZF9mbGFncy5pdGVyKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZ2VuZXJhdGVkX2ZpbGVzID0gZ2VuZXJhdGVfamF2YV9jb2RlKAotICAgICAgICAgICAgY3JhdGU6OnRlc3Q6OlRFU1RfUEFDS0FHRSwKLSAgICAgICAgICAgIG1vZGlmaWVkX3BhcnNlZF9mbGFncy5pbnRvX2l0ZXIoKSwKLSAgICAgICAgICAgIG1vZGUsCi0gICAgICAgICAgICBmbGFnX2lkcywKLSAgICAgICAgICAgIHRydWUsCi0gICAgICAgICkKLSAgICAgICAgLnVud3JhcCgpOwotCi0gICAgICAgIGxldCBleHBlY3RfZmVhdHVyZWZsYWdzaW1wbF9jb250ZW50X25ldyA9IGV4cGVjdGVkX2ZlYXR1cmVmbGFnc21wbF9jb250ZW50XzAudG9fb3duZWQoKQotICAgICAgICAgICAgKyByIyIKLSAgICAgICAgICAgIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlSW50ZXJuYWxSZWFkZXI7Ci0gICAgICAgICAgICBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLSAgICAgICAgICAgICIjCi0gICAgICAgICAgICArIGV4cGVjdGVkX2ZlYXR1cmVmbGFnc21wbF9jb250ZW50XzEKLSAgICAgICAgICAgICsgciMiCi0gICAgICAgIFN0b3JhZ2VJbnRlcm5hbFJlYWRlciByZWFkZXI7Ci0gICAgICAgIGJvb2xlYW4gcmVhZEZyb21OZXdTdG9yYWdlOwotCi0gICAgICAgIGJvb2xlYW4gdXNlTmV3U3RvcmFnZVZhbHVlQW5kRGlzY2FyZE9sZCA9IGZhbHNlOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiQWNvbmZpZ0phdmFDb2RlZ2VuIjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNVQ0NFU1NfTE9HID0gInN1Y2Nlc3M6ICVzIHZhbHVlIG1hdGNoZXMiOwotICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTUlTTUFUQ0hfTE9HID0gImVycm9yOiAlcyB2YWx1ZSBtaXNtYXRjaCwgbmV3IHN0b3JhZ2UgdmFsdWUgaXMgJXMsIG9sZCBzdG9yYWdlIHZhbHVlIGlzICVzIjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEVSUk9SX0xPRyA9ICJlcnJvcjogZmFpbGVkIHRvIHJlYWQgZmxhZyB2YWx1ZSI7Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0gICAgICAgICAgICBpZiAocmVhZGVyICE9IG51bGwpIHJldHVybjsKLSAgICAgICAgICAgIGlmIChEZXZpY2VDb25maWcuZ2V0Qm9vbGVhbigiY29yZV9leHBlcmltZW50c190ZWFtX2ludGVybmFsIiwgImNvbS5hbmRyb2lkLnByb3ZpZGVycy5zZXR0aW5ncy5zdG9yYWdlX3Rlc3RfbWlzc2lvbl8xIiwgZmFsc2UpKSB7Ci0gICAgICAgICAgICAgICAgcmVhZEZyb21OZXdTdG9yYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgU3RvcmFnZUludGVybmFsUmVhZGVyKCJzeXN0ZW0iLCAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVzZU5ld1N0b3JhZ2VWYWx1ZUFuZERpc2NhcmRPbGQgPQotICAgICAgICAgICAgICAgIERldmljZUNvbmZpZy5nZXRCb29sZWFuKCJjb3JlX2V4cGVyaW1lbnRzX3RlYW1faW50ZXJuYWwiLCAiY29tLmFuZHJvaWQucHJvdmlkZXJzLnNldHRpbmdzLnVzZV9uZXdfc3RvcmFnZV92YWx1ZSIsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IERldmljZUNvbmZpZy5nZXRQcm9wZXJ0aWVzKCJhY29uZmlnX3Rlc3QiKTsKLSAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3ID0KLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5nZXRCb29sZWFuKEZsYWdzLkZMQUdfRElTQUJMRURfUlcsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3RXhwb3J0ZWQgPQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19ESVNBQkxFRF9SV19FWFBPUlRFRCwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGVuYWJsZWRSdyA9Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0VOQUJMRURfUlcsIHRydWUpOwotICAgICAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgdmFsdWUgZnJvbSBuYW1lc3BhY2UgYWNvbmZpZ190ZXN0ICIKLSAgICAgICAgICAgICAgICAgICAgKyAiZnJvbSBEZXZpY2VDb25maWcuIEl0IGNvdWxkIGJlIHRoYXQgdGhlIGNvZGUgdXNpbmcgZmxhZyAiCi0gICAgICAgICAgICAgICAgICAgICsgImV4ZWN1dGVkIGJlZm9yZSBTZXR0aW5nc1Byb3ZpZGVyIGluaXRpYWxpemF0aW9uLiBQbGVhc2UgdXNlICIKLSAgICAgICAgICAgICAgICAgICAgKyAiZml4ZWQgcmVhZC1vbmx5IGZsYWcgYnkgYWRkaW5nIGlzX2ZpeGVkX3JlYWRfb25seTogdHJ1ZSBpbiAiCi0gICAgICAgICAgICAgICAgICAgICsgImZsYWcgZGVjbGFyYXRpb24uIiwKLSAgICAgICAgICAgICAgICAgICAgZQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhY29uZmlnX3Rlc3RfaXNfY2FjaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGluaXQoKTsKLSAgICAgICAgICAgIGlmIChyZWFkRnJvbU5ld1N0b3JhZ2UgJiYgcmVhZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIHZhbDsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPSBkaXNhYmxlZFJ3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFN0cmluZy5mb3JtYXQoTUlTTUFUQ0hfTE9HLCAiZGlzYWJsZWRSdyIsIHZhbCwgZGlzYWJsZWRSdykpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVzZU5ld1N0b3JhZ2VWYWx1ZUFuZERpc2NhcmRPbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUncgPSB2YWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPSBkaXNhYmxlZFJ3RXhwb3J0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgU3RyaW5nLmZvcm1hdChNSVNNQVRDSF9MT0csICJkaXNhYmxlZFJ3RXhwb3J0ZWQiLCB2YWwsIGRpc2FibGVkUndFeHBvcnRlZCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVzZU5ld1N0b3JhZ2VWYWx1ZUFuZERpc2NhcmRPbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndFeHBvcnRlZCA9IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZhbCA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9IGVuYWJsZWRSdykgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBTdHJpbmcuZm9ybWF0KE1JU01BVENIX0xPRywgImVuYWJsZWRSdyIsIHZhbCwgZW5hYmxlZFJ3KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodXNlTmV3U3RvcmFnZVZhbHVlQW5kRGlzY2FyZE9sZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZFJ3ID0gdmFsOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsIEVSUk9SX0xPRywgZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGxvYWRfb3ZlcnJpZGVzX290aGVyX25hbWVzcGFjZSgpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gRGV2aWNlQ29uZmlnLmdldFByb3BlcnRpZXMoIm90aGVyX25hbWVzcGFjZSIpOwotICAgICAgICAgICAgICAgIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0KLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5nZXRCb29sZWFuKEZsYWdzLkZMQUdfRElTQUJMRURfUldfSU5fT1RIRVJfTkFNRVNQQUNFLCBmYWxzZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJDYW5ub3QgcmVhZCB2YWx1ZSBmcm9tIG5hbWVzcGFjZSBvdGhlcl9uYW1lc3BhY2UgIgotICAgICAgICAgICAgICAgICAgICArICJmcm9tIERldmljZUNvbmZpZy4gSXQgY291bGQgYmUgdGhhdCB0aGUgY29kZSB1c2luZyBmbGFnICIKLSAgICAgICAgICAgICAgICAgICAgKyAiZXhlY3V0ZWQgYmVmb3JlIFNldHRpbmdzUHJvdmlkZXIgaW5pdGlhbGl6YXRpb24uIFBsZWFzZSB1c2UgIgotICAgICAgICAgICAgICAgICAgICArICJmaXhlZCByZWFkLW9ubHkgZmxhZyBieSBhZGRpbmcgaXNfZml4ZWRfcmVhZF9vbmx5OiB0cnVlIGluICIKLSAgICAgICAgICAgICAgICAgICAgKyAiZmxhZyBkZWNsYXJhdGlvbi4iLAotICAgICAgICAgICAgICAgICAgICBlCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG90aGVyX25hbWVzcGFjZV9pc19jYWNoZWQgPSB0cnVlOwotICAgICAgICAgICAgaW5pdCgpOwotICAgICAgICAgICAgaWYgKHJlYWRGcm9tTmV3U3RvcmFnZSAmJiByZWFkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGJvb2xlYW4gdmFsOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDMpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9IGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFN0cmluZy5mb3JtYXQoTUlTTUFUQ0hfTE9HLCAiZGlzYWJsZWRSd0luT3RoZXJOYW1lc3BhY2UiLCB2YWwsIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodXNlTmV3U3RvcmFnZVZhbHVlQW5kRGlzY2FyZE9sZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSd0luT3RoZXJOYW1lc3BhY2UgPSB2YWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgRVJST1JfTE9HLCBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0iIyArIGV4cGVjdGVkX2ZlYXR1cmVmbGFnc21wbF9jb250ZW50XzI7Ci0KLSAgICAgICAgbGV0IG11dCBmaWxlX3NldCA9IEhhc2hNYXA6OmZyb20oWwotICAgICAgICAgICAgKCJjb20vYW5kcm9pZC9hY29uZmlnL3Rlc3QvRmxhZ3MuamF2YSIsIGV4cGVjdF9mbGFnc19jb250ZW50LmFzX3N0cigpKSwKLSAgICAgICAgICAgICgKLSAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0ZlYXR1cmVGbGFnc0ltcGwuamF2YSIsCi0gICAgICAgICAgICAgICAgJmV4cGVjdF9mZWF0dXJlZmxhZ3NpbXBsX2NvbnRlbnRfbmV3LAotICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICgiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0ZlYXR1cmVGbGFnc0ltcGwuamF2YSIsIGV4cGVjdGVkX2ZlYXR1cmVmbGFnc21wbF9jb250ZW50KSwKICAgICAgICAgICAgICgiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0ZlYXR1cmVGbGFncy5qYXZhIiwgRVhQRUNURURfRkVBVFVSRUZMQUdTX0NPTU1PTl9DT05URU5UKSwKICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0N1c3RvbUZlYXR1cmVGbGFncy5qYXZhIiwKQEAgLTg2MSw2ICs2ODgsOCBAQAogICAgICAgICAgICAgbW9kZSwKICAgICAgICAgICAgIGZsYWdfaWRzLAogICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgICAgIDU4MDExNDQ3ODQ2MTgyMjE2NjgsCisgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgKQogICAgICAgICAudW53cmFwKCk7CiAKQEAgLTg5OSw2ICs3MjgsNyBAQAogCiAgICAgICAgIGxldCBleHBlY3RfZmVhdHVyZV9mbGFnc19pbXBsX2NvbnRlbnQgPSByIyIKICAgICAgICAgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3Q7CisgICAgICAgIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKICAgICAgICAgaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnOwogICAgICAgICBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWcuUHJvcGVydGllczsKICAgICAgICAgLyoqIEBoaWRlICovCkBAIC05MDgsOCArNzM4LDggQEAKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZW5hYmxlZEZpeGVkUm9FeHBvcnRlZCA9IGZhbHNlOwogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBlbmFibGVkUm9FeHBvcnRlZCA9IGZhbHNlOwogCi0KICAgICAgICAgICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKSB7CisgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IERldmljZUNvbmZpZy5nZXRQcm9wZXJ0aWVzKCJhY29uZmlnX3Rlc3QiKTsKICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSd0V4cG9ydGVkID0KQEAgLTkyNywyNyArNzU3LDIyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiZmxhZyBkZWNsYXJhdGlvbi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZQogICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGlzb2xhdGVkIHByb2Nlc3MgY2FzZSwgc2tpcCBsb2FkaW5nIGZsYWcgdmFsdWUgZnJvbSB0aGUgc3RvcmFnZSwgdXNlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhY29uZmlnX3Rlc3RfaXNfY2FjaGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkKCkgewogICAgICAgICAgICAgICAgIGlmICghYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gZGlzYWJsZWRSd0V4cG9ydGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVkRml4ZWRSb0V4cG9ydGVkKCkgewogICAgICAgICAgICAgICAgIGlmICghYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZEZpeGVkUm9FeHBvcnRlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZW5hYmxlZFJvRXhwb3J0ZWQoKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhY29uZmlnX3Rlc3RfaXNfY2FjaGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfYWNvbmZpZ190ZXN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBlbmFibGVkUm9FeHBvcnRlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSIjOworCisgICAgICAgIGxldCBleHBlY3RfY3VzdG9tX2ZlYXR1cmVfZmxhZ3NfY29udGVudCA9IHIjIgorICAgICAgICBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdDsKKworICAgICAgICBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKyAgICAgICAgaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworICAgICAgICBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisgICAgICAgIGltcG9ydCBqYXZhLnV0aWwuU2V0OworICAgICAgICBpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkJpUHJlZGljYXRlOworICAgICAgICBpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlByZWRpY2F0ZTsKKworICAgICAgICAvKiogQGhpZGUgKi8KKyAgICAgICAgcHVibGljIGNsYXNzIEN1c3RvbUZlYXR1cmVGbGFncyBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyB7CisKKyAgICAgICAgICAgIHByaXZhdGUgQmlQcmVkaWNhdGU8U3RyaW5nLCBQcmVkaWNhdGU8RmVhdHVyZUZsYWdzPj4gbUdldFZhbHVlSW1wbDsKKworICAgICAgICAgICAgcHVibGljIEN1c3RvbUZlYXR1cmVGbGFncyhCaVByZWRpY2F0ZTxTdHJpbmcsIFByZWRpY2F0ZTxGZWF0dXJlRmxhZ3M+PiBnZXRWYWx1ZUltcGwpIHsKKyAgICAgICAgICAgICAgICBtR2V0VmFsdWVJbXBsID0gZ2V0VmFsdWVJbXBsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGRpc2FibGVkUndFeHBvcnRlZCgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWUoRmxhZ3MuRkxBR19ESVNBQkxFRF9SV19FWFBPUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgRmVhdHVyZUZsYWdzOjpkaXNhYmxlZFJ3RXhwb3J0ZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVkRml4ZWRSb0V4cG9ydGVkKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZShGbGFncy5GTEFHX0VOQUJMRURfRklYRURfUk9fRVhQT1JURUQsCisgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVGbGFnczo6ZW5hYmxlZEZpeGVkUm9FeHBvcnRlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVuYWJsZWRSb0V4cG9ydGVkKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZShGbGFncy5GTEFHX0VOQUJMRURfUk9fRVhQT1JURUQsCisgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVGbGFnczo6ZW5hYmxlZFJvRXhwb3J0ZWQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBnZXRWYWx1ZShTdHJpbmcgZmxhZ05hbWUsIFByZWRpY2F0ZTxGZWF0dXJlRmxhZ3M+IGdldHRlcikgeworICAgICAgICAgICAgICAgIHJldHVybiBtR2V0VmFsdWVJbXBsLnRlc3QoZmxhZ05hbWUsIGdldHRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0RmxhZ05hbWVzKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBcnJheXMuYXNMaXN0KAorICAgICAgICAgICAgICAgICAgICBGbGFncy5GTEFHX0RJU0FCTEVEX1JXX0VYUE9SVEVELAorICAgICAgICAgICAgICAgICAgICBGbGFncy5GTEFHX0VOQUJMRURfRklYRURfUk9fRVhQT1JURUQsCisgICAgICAgICAgICAgICAgICAgIEZsYWdzLkZMQUdfRU5BQkxFRF9ST19FWFBPUlRFRAorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbVJlYWRPbmx5RmxhZ3NTZXQgPSBuZXcgSGFzaFNldDw+KAorICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoCisgICAgICAgICAgICAgICAgICAgICIiCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICIjOworCisgICAgICAgIGxldCBtdXQgZmlsZV9zZXQgPSBIYXNoTWFwOjpmcm9tKFsKKyAgICAgICAgICAgICgiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0ZsYWdzLmphdmEiLCBleHBlY3RfZmxhZ3NfY29udGVudCksCisgICAgICAgICAgICAoImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9GZWF0dXJlRmxhZ3MuamF2YSIsIGV4cGVjdF9mZWF0dXJlX2ZsYWdzX2NvbnRlbnQpLAorICAgICAgICAgICAgKCJjb20vYW5kcm9pZC9hY29uZmlnL3Rlc3QvRmVhdHVyZUZsYWdzSW1wbC5qYXZhIiwgZXhwZWN0X2ZlYXR1cmVfZmxhZ3NfaW1wbF9jb250ZW50KSwKKyAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0N1c3RvbUZlYXR1cmVGbGFncy5qYXZhIiwKKyAgICAgICAgICAgICAgICBleHBlY3RfY3VzdG9tX2ZlYXR1cmVfZmxhZ3NfY29udGVudCwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9GYWtlRmVhdHVyZUZsYWdzSW1wbC5qYXZhIiwKKyAgICAgICAgICAgICAgICBFWFBFQ1RFRF9GQUtFRkVBVFVSRUZMQUdTSU1QTF9DT05URU5ULAorICAgICAgICAgICAgKSwKKyAgICAgICAgXSk7CisKKyAgICAgICAgZm9yIGZpbGUgaW4gZ2VuZXJhdGVkX2ZpbGVzIHsKKyAgICAgICAgICAgIGxldCBmaWxlX3BhdGggPSBmaWxlLnBhdGgudG9fc3RyKCkudW53cmFwKCk7CisgICAgICAgICAgICBhc3NlcnQhKGZpbGVfc2V0LmNvbnRhaW5zX2tleShmaWxlX3BhdGgpLCAiQ2Fubm90IGZpbmQge30iLCBmaWxlX3BhdGgpOworICAgICAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgIGNyYXRlOjp0ZXN0OjpmaXJzdF9zaWduaWZpY2FudF9jb2RlX2RpZmYoCisgICAgICAgICAgICAgICAgICAgIGZpbGVfc2V0LmdldChmaWxlX3BhdGgpLnVud3JhcCgpLAorICAgICAgICAgICAgICAgICAgICAmU3RyaW5nOjpmcm9tX3V0ZjgoZmlsZS5jb250ZW50cykudW53cmFwKCkKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICJGaWxlIHt9IGNvbnRlbnQgaXMgbm90IGNvcnJlY3QiLAorICAgICAgICAgICAgICAgIGZpbGVfcGF0aAorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGZpbGVfc2V0LnJlbW92ZShmaWxlX3BhdGgpOworICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0IShmaWxlX3NldC5pc19lbXB0eSgpKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9nZW5lcmF0ZV9qYXZhX2NvZGVfbmV3X2V4cG9ydGVkKCkgeworICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzID0gY3JhdGU6OnRlc3Q6OnBhcnNlX3Rlc3RfZmxhZ3MoKTsKKyAgICAgICAgbGV0IG1vZGUgPSBDb2RlZ2VuTW9kZTo6RXhwb3J0ZWQ7CisgICAgICAgIGxldCBtb2RpZmllZF9wYXJzZWRfZmxhZ3MgPQorICAgICAgICAgICAgY3JhdGU6OmNvbW1hbmRzOjptb2RpZnlfcGFyc2VkX2ZsYWdzX2Jhc2VkX29uX21vZGUocGFyc2VkX2ZsYWdzLCBtb2RlKS51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfaWRzID0KKyAgICAgICAgICAgIGFzc2lnbl9mbGFnX2lkcyhjcmF0ZTo6dGVzdDo6VEVTVF9QQUNLQUdFLCBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaXRlcigpKS51bndyYXAoKTsKKyAgICAgICAgbGV0IGdlbmVyYXRlZF9maWxlcyA9IGdlbmVyYXRlX2phdmFfY29kZSgKKyAgICAgICAgICAgIGNyYXRlOjp0ZXN0OjpURVNUX1BBQ0tBR0UsCisgICAgICAgICAgICBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaW50b19pdGVyKCksCisgICAgICAgICAgICBtb2RlLAorICAgICAgICAgICAgZmxhZ19pZHMsCisgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgNTgwMTE0NDc4NDYxODIyMTY2OCwKKyAgICAgICAgICAgIHRydWUsCisgICAgICAgICkKKyAgICAgICAgLnVud3JhcCgpOworCisgICAgICAgIGxldCBleHBlY3RfZmxhZ3NfY29udGVudCA9IHIjIgorICAgICAgICBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdDsKKyAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgIHB1YmxpYyBmaW5hbCBjbGFzcyBGbGFncyB7CisgICAgICAgICAgICAvKiogQGhpZGUgKi8KKyAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfRElTQUJMRURfUldfRVhQT1JURUQgPSAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmRpc2FibGVkX3J3X2V4cG9ydGVkIjsKKyAgICAgICAgICAgIC8qKiBAaGlkZSAqLworICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19FTkFCTEVEX0ZJWEVEX1JPX0VYUE9SVEVEID0gImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5lbmFibGVkX2ZpeGVkX3JvX2V4cG9ydGVkIjsKKyAgICAgICAgICAgIC8qKiBAaGlkZSAqLworICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR19FTkFCTEVEX1JPX0VYUE9SVEVEID0gImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5lbmFibGVkX3JvX2V4cG9ydGVkIjsKKyAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkaXNhYmxlZFJ3RXhwb3J0ZWQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZFQVRVUkVfRkxBR1MuZGlzYWJsZWRSd0V4cG9ydGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZW5hYmxlZEZpeGVkUm9FeHBvcnRlZCgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkVBVFVSRV9GTEFHUy5lbmFibGVkRml4ZWRSb0V4cG9ydGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZW5hYmxlZFJvRXhwb3J0ZWQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZFQVRVUkVfRkxBR1MuZW5hYmxlZFJvRXhwb3J0ZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIEZlYXR1cmVGbGFncyBGRUFUVVJFX0ZMQUdTID0gbmV3IEZlYXR1cmVGbGFnc0ltcGwoKTsKKyAgICAgICAgfQorICAgICAgICAiIzsKKworICAgICAgICBsZXQgZXhwZWN0X2ZlYXR1cmVfZmxhZ3NfY29udGVudCA9IHIjIgorICAgICAgICBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdDsKKyAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgIHB1YmxpYyBpbnRlcmZhY2UgRmVhdHVyZUZsYWdzIHsKKyAgICAgICAgICAgIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkKCk7CisgICAgICAgICAgICBib29sZWFuIGVuYWJsZWRGaXhlZFJvRXhwb3J0ZWQoKTsKKyAgICAgICAgICAgIGJvb2xlYW4gZW5hYmxlZFJvRXhwb3J0ZWQoKTsKKyAgICAgICAgfQorICAgICAgICAiIzsKKworICAgICAgICBsZXQgZXhwZWN0X2ZlYXR1cmVfZmxhZ3NfaW1wbF9jb250ZW50ID0gciMiCisgICAgICAgIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0OworICAgICAgICBpbXBvcnQgYW5kcm9pZC5vcy5mbGFnZ2luZy5BY29uZmlnUGFja2FnZTsKKyAgICAgICAgaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisgICAgICAgIC8qKiBAaGlkZSAqLworICAgICAgICBwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyB7CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5GZWF0dXJlRmxhZ3NJbXBsX2V4cG9ydGVkIjsKKyAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gaXNDYWNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkID0gZmFsc2U7CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGVuYWJsZWRGaXhlZFJvRXhwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZW5hYmxlZFJvRXhwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByaXZhdGUgdm9pZCBpbml0KCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIEFjb25maWdQYWNrYWdlIHJlYWRlciA9IEFjb25maWdQYWNrYWdlLmxvYWQoImNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpOworICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3RXhwb3J0ZWQgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgiZGlzYWJsZWRfcndfZXhwb3J0ZWQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRGaXhlZFJvRXhwb3J0ZWQgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgiZW5hYmxlZF9maXhlZF9yb19leHBvcnRlZCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZFJvRXhwb3J0ZWQgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgiZW5hYmxlZF9yb19leHBvcnRlZCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBwYXNzCisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChOb0NsYXNzRGVmRm91bmRFcnJvciBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZvciBtYWlubGluZSBtb2R1bGUgcnVubmluZyBvbiBvbGRlciBkZXZpY2VzLgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSByZXBsYWNlcyB0byB2ZXJzaW9uIGNoZWNrLCBhZnRlciB0aGUgdmVyc2lvbiBidW1wLgorICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlzQ2FjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkKCkgeworICAgICAgICAgICAgICAgIGlmICghaXNDYWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZGlzYWJsZWRSd0V4cG9ydGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVkRml4ZWRSb0V4cG9ydGVkKCkgeworICAgICAgICAgICAgICAgIGlmICghaXNDYWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZEZpeGVkUm9FeHBvcnRlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZW5hYmxlZFJvRXhwb3J0ZWQoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0NhY2hlZCkgeworICAgICAgICAgICAgICAgICAgICBpbml0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBlbmFibGVkUm9FeHBvcnRlZDsKICAgICAgICAgICAgIH0KQEAgLTEwNTQsNiArMTA3Nyw4IEBACiAgICAgICAgICAgICBtb2RlLAogICAgICAgICAgICAgZmxhZ19pZHMsCiAgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgNTgwMTE0NDc4NDYxODIyMTY2OCwKKyAgICAgICAgICAgIGZhbHNlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKIApAQCAtMTE3NSw2ICsxMjAwLDggQEAKICAgICAgICAgICAgIG1vZGUsCiAgICAgICAgICAgICBmbGFnX2lkcywKICAgICAgICAgICAgIHRydWUsCisgICAgICAgICAgICA1ODAxMTQ0Nzg0NjE4MjIxNjY4LAorICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcCgpOwogICAgICAgICBsZXQgZXhwZWN0X2ZlYXR1cmVmbGFnc19jb250ZW50ID0gciMiCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vcnVzdC5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9ydXN0LnJzCmluZGV4IDdiYzM0ZDYuLjJiZjU2NWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9ydXN0LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9ydXN0LnJzCkBAIC04OCw2ICs4OCwyNyBAQAogaW1wbCBUZW1wbGF0ZVBhcnNlZEZsYWcgewogICAgICNbYWxsb3coY2xpcHB5Ojpub25taW5pbWFsX2Jvb2wpXQogICAgIGZuIG5ldyhwYWNrYWdlOiAmc3RyLCBmbGFnX29mZnNldHM6IEhhc2hNYXA8U3RyaW5nLCB1MTY+LCBwZjogJlByb3RvUGFyc2VkRmxhZykgLT4gU2VsZiB7CisgICAgICAgIGxldCBub19hc3NpZ25lZF9vZmZzZXQgPSAocGYuY29udGFpbmVyKCkgPT0gInN5c3RlbSIKKyAgICAgICAgICAgIHx8IHBmLmNvbnRhaW5lcigpID09ICJ2ZW5kb3IiCisgICAgICAgICAgICB8fCBwZi5jb250YWluZXIoKSA9PSAicHJvZHVjdCIpCisgICAgICAgICAgICAmJiBwZi5wZXJtaXNzaW9uKCkgPT0gUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZCisgICAgICAgICAgICAmJiBwZi5zdGF0ZSgpID09IFByb3RvRmxhZ1N0YXRlOjpESVNBQkxFRDsKKworICAgICAgICBsZXQgZmxhZ19vZmZzZXQgPSBtYXRjaCBmbGFnX29mZnNldHMuZ2V0KHBmLm5hbWUoKSkgeworICAgICAgICAgICAgU29tZShvZmZzZXQpID0+IG9mZnNldCwKKyAgICAgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgICAgIC8vIFN5c3RlbS92ZW5kb3IvcHJvZHVjdCBSTytkaXNhYmxlZCBmbGFncyBoYXZlIG5vIG9mZnNldCBpbiBzdG9yYWdlIGZpbGVzLgorICAgICAgICAgICAgICAgIC8vIEFzc2lnbiBwbGFjZWhvbGRlciB2YWx1ZS4KKyAgICAgICAgICAgICAgICBpZiBub19hc3NpZ25lZF9vZmZzZXQgeworICAgICAgICAgICAgICAgICAgICAmMAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBBbGwgb3RoZXIgZmxhZ3MgX211c3RfIGhhdmUgYW4gb2Zmc2V0LgorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYW5pYyEoInt9IiwgZm9ybWF0ISgibWlzc2luZyBmbGFnIG9mZnNldCBmb3Ige30iLCBwZi5uYW1lKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKICAgICAgICAgU2VsZiB7CiAgICAgICAgICAgICByZWFkd3JpdGU6IHBmLnBlcm1pc3Npb24oKSA9PSBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX1dSSVRFLAogICAgICAgICAgICAgZGVmYXVsdF92YWx1ZTogbWF0Y2ggcGYuc3RhdGUoKSB7CkBAIC05Niw3ICsxMTcsNyBAQAogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIG5hbWU6IHBmLm5hbWUoKS50b19zdHJpbmcoKSwKICAgICAgICAgICAgIGNvbnRhaW5lcjogcGYuY29udGFpbmVyKCkudG9fc3RyaW5nKCksCi0gICAgICAgICAgICBmbGFnX29mZnNldDogKmZsYWdfb2Zmc2V0cy5nZXQocGYubmFtZSgpKS5leHBlY3QoImRpZG50IGZpbmQgcGFja2FnZSBvZmZzZXQgOigiKSwKKyAgICAgICAgICAgIGZsYWdfb2Zmc2V0OiAqZmxhZ19vZmZzZXQsCiAgICAgICAgICAgICBkZXZpY2VfY29uZmlnX25hbWVzcGFjZTogcGYubmFtZXNwYWNlKCkudG9fc3RyaW5nKCksCiAgICAgICAgICAgICBkZXZpY2VfY29uZmlnX2ZsYWc6IGNvZGVnZW46OmNyZWF0ZV9kZXZpY2VfY29uZmlnX2lkZW50KHBhY2thZ2UsIHBmLm5hbWUoKSkKICAgICAgICAgICAgICAgICAuZXhwZWN0KCJ2YWx1ZXMgY2hlY2tlZCBhdCBmbGFnIHBhcnNlIHRpbWUiKSwKQEAgLTI1OSwxMCArMjgwLDYgQEAKIC8vLyBmbGFnIHByb3ZpZGVyCiBwdWIgc3RydWN0IEZsYWdQcm92aWRlcjsKIAotc3RhdGljIFJFQURfRlJPTV9ORVdfU1RPUkFHRTogTGF6eUxvY2s8Ym9vbD4gPSBMYXp5TG9jazo6bmV3KHx8IHVuc2FmZSB7Ci0gICAgUGF0aDo6bmV3KCIvbWV0YWRhdGEvYWNvbmZpZy9ib290L2VuYWJsZV9vbmx5X25ld19zdG9yYWdlIikuZXhpc3RzKCkKLX0pOwotCiBzdGF0aWMgUEFDS0FHRV9PRkZTRVQ6IExhenlMb2NrPFJlc3VsdDxPcHRpb248dTMyPiwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4+ID0gTGF6eUxvY2s6Om5ldyh8fCB1bnNhZmUgewogICAgIGdldF9tYXBwZWRfc3RvcmFnZV9maWxlKCJzeXN0ZW0iLCBTdG9yYWdlRmlsZVR5cGU6OlBhY2thZ2VNYXApCiAgICAgLmFuZF90aGVuKHxwYWNrYWdlX21hcHwgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcCwgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpKQpAQCAtMjc1LDcgKzI5Miw0NiBAQAogCiAvLy8gZmxhZyB2YWx1ZSBjYWNoZSBmb3IgZGlzYWJsZWRfcncKIHN0YXRpYyBDQUNIRURfZGlzYWJsZWRfcnc6IExhenlMb2NrPGJvb2w+ID0gTGF6eUxvY2s6Om5ldyh8fCB7Ci0gICAgaWYgKlJFQURfRlJPTV9ORVdfU1RPUkFHRSB7CisgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gU3Vic2VxdWVudCBjYWxscyBhZnRlciB0aGUgZmlyc3QgYXJlIG5vb3BzLgorICAgIGxvZ2dlcjo6aW5pdCgKKyAgICAgICAgbG9nZ2VyOjpDb25maWc6OmRlZmF1bHQoKQorICAgICAgICAgICAgLndpdGhfdGFnX29uX2RldmljZSgiYWNvbmZpZ19ydXN0X2NvZGVnZW4iKQorICAgICAgICAgICAgLndpdGhfbWF4X2xldmVsKExldmVsRmlsdGVyOjpJbmZvKSk7CisKKyAgICBsZXQgZmxhZ192YWx1ZV9yZXN1bHQgPSBGTEFHX1ZBTF9NQVAKKyAgICAgICAgLmFzX3JlZigpCisgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZyB2YWwgbWFwOiB7ZXJyfSIpKQorICAgICAgICAuYW5kX3RoZW4ofGZsYWdfdmFsX21hcHwgeworICAgICAgICAgICAgUEFDS0FHRV9PRkZTRVQKKyAgICAgICAgICAgICAgIC5hc19yZWYoKQorICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHJlYWQgb2Zmc2V0OiB7ZXJyfSIpKQorICAgICAgICAgICAgICAgLmFuZF90aGVuKHxwYWNrYWdlX29mZnNldHwgeworICAgICAgICAgICAgICAgICAgIG1hdGNoIHBhY2thZ2Vfb2Zmc2V0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgU29tZShvZmZzZXQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsX21hcCwgb2Zmc2V0ICsgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IGZsYWc6IHtlcnJ9IikpCisgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyKGZvcm1hdCEoImZhaWxlZCB0byBmbGFnIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IikpCisgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KTsKKworICAgIG1hdGNoIGZsYWdfdmFsdWVfcmVzdWx0IHsKKyAgICAgICAgT2soZmxhZ192YWx1ZSkgPT4geworICAgICAgICAgICAgcmV0dXJuIGZsYWdfdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIEVycihlcnIpID0+IHsKKyAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAiYWNvbmZpZ19ydXN0X2NvZGVnZW46IGVycm9yOiB7ZXJyfSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorfSk7CisKKy8vLyBmbGFnIHZhbHVlIGNhY2hlIGZvciBkaXNhYmxlZF9yd19leHBvcnRlZAorc3RhdGljIENBQ0hFRF9kaXNhYmxlZF9yd19leHBvcnRlZDogTGF6eUxvY2s8Ym9vbD4gPSBMYXp5TG9jazo6bmV3KHx8IHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gU3Vic2VxdWVudCBjYWxscyBhZnRlciB0aGUgZmlyc3QgYXJlIG5vb3BzLgogICAgICAgICBsb2dnZXI6OmluaXQoCiAgICAgICAgICAgICBsb2dnZXI6OkNvbmZpZzo6ZGVmYXVsdCgpCkBAIC0yOTUsNyArMzUxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsX21hcCwgb2Zmc2V0ICsgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZzoge2Vycn0iKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gRXJyKCJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlICdjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QnIi50b19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoZm9ybWF0ISgiZmFpbGVkIHRvIGZsYWcgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgfSk7CkBAIC0zMDYsMjAgKzM2NSwxMyBAQAogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIEVycihlcnIpID0+IHsKICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgImFjb25maWdfcnVzdF9jb2RlZ2VuOiBlcnJvcjoge2Vycn0iKTsKLSAgICAgICAgICAgICAgICBwYW5pYyEoImZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWU6IHtlcnJ9Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxhZ3NfcnVzdDo6R2V0U2VydmVyQ29uZmlndXJhYmxlRmxhZygKLSAgICAgICAgICAgICJhY29uZmlnX2ZsYWdzLmFjb25maWdfdGVzdCIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmRpc2FibGVkX3J3IiwKLSAgICAgICAgICAgICJmYWxzZSIpID09ICJ0cnVlIgotICAgIH0KIH0pOwogCi0vLy8gZmxhZyB2YWx1ZSBjYWNoZSBmb3IgZGlzYWJsZWRfcndfZXhwb3J0ZWQKLXN0YXRpYyBDQUNIRURfZGlzYWJsZWRfcndfZXhwb3J0ZWQ6IExhenlMb2NrPGJvb2w+ID0gTGF6eUxvY2s6Om5ldyh8fCB7Ci0gICAgaWYgKlJFQURfRlJPTV9ORVdfU1RPUkFHRSB7CisvLy8gZmxhZyB2YWx1ZSBjYWNoZSBmb3IgZGlzYWJsZWRfcndfaW5fb3RoZXJfbmFtZXNwYWNlCitzdGF0aWMgQ0FDSEVEX2Rpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZTogTGF6eUxvY2s8Ym9vbD4gPSBMYXp5TG9jazo6bmV3KHx8IHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gU3Vic2VxdWVudCBjYWxscyBhZnRlciB0aGUgZmlyc3QgYXJlIG5vb3BzLgogICAgICAgICBsb2dnZXI6OmluaXQoCiAgICAgICAgICAgICBsb2dnZXI6OkNvbmZpZzo6ZGVmYXVsdCgpCkBAIC0zMzksNyArMzkxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsX21hcCwgb2Zmc2V0ICsgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZzoge2Vycn0iKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gRXJyKCJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlICdjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QnIi50b19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoZm9ybWF0ISgiZmFpbGVkIHRvIGZsYWcgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgfSk7CkBAIC0zNTAsNjUgKzQwNSwxNCBAQAogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIEVycihlcnIpID0+IHsKICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgImFjb25maWdfcnVzdF9jb2RlZ2VuOiBlcnJvcjoge2Vycn0iKTsKLSAgICAgICAgICAgICAgICBwYW5pYyEoImZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWU6IHtlcnJ9Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxhZ3NfcnVzdDo6R2V0U2VydmVyQ29uZmlndXJhYmxlRmxhZygKLSAgICAgICAgICAgICJhY29uZmlnX2ZsYWdzLmFjb25maWdfdGVzdCIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmRpc2FibGVkX3J3X2V4cG9ydGVkIiwKLSAgICAgICAgICAgICJmYWxzZSIpID09ICJ0cnVlIgotICAgIH0KLX0pOwotCi0vLy8gZmxhZyB2YWx1ZSBjYWNoZSBmb3IgZGlzYWJsZWRfcndfaW5fb3RoZXJfbmFtZXNwYWNlCi1zdGF0aWMgQ0FDSEVEX2Rpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZTogTGF6eUxvY2s8Ym9vbD4gPSBMYXp5TG9jazo6bmV3KHx8IHsKLSAgICBpZiAqUkVBRF9GUk9NX05FV19TVE9SQUdFIHsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gU3Vic2VxdWVudCBjYWxscyBhZnRlciB0aGUgZmlyc3QgYXJlIG5vb3BzLgotICAgICAgICBsb2dnZXI6OmluaXQoCi0gICAgICAgICAgICBsb2dnZXI6OkNvbmZpZzo6ZGVmYXVsdCgpCi0gICAgICAgICAgICAgICAgLndpdGhfdGFnX29uX2RldmljZSgiYWNvbmZpZ19ydXN0X2NvZGVnZW4iKQotICAgICAgICAgICAgICAgIC53aXRoX21heF9sZXZlbChMZXZlbEZpbHRlcjo6SW5mbykpOwotCi0gICAgICAgIGxldCBmbGFnX3ZhbHVlX3Jlc3VsdCA9IEZMQUdfVkFMX01BUAotICAgICAgICAgICAgLmFzX3JlZigpCi0gICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IGZsYWcgdmFsIG1hcDoge2Vycn0iKSkKLSAgICAgICAgICAgIC5hbmRfdGhlbih8ZmxhZ192YWxfbWFwfCB7Ci0gICAgICAgICAgICAgICAgUEFDS0FHRV9PRkZTRVQKLSAgICAgICAgICAgICAgICAgICAgLmFzX3JlZigpCi0gICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgcGFja2FnZSByZWFkIG9mZnNldDoge2Vycn0iKSkKLSAgICAgICAgICAgICAgICAgICAgLmFuZF90aGVuKHxwYWNrYWdlX29mZnNldHwgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggcGFja2FnZV9vZmZzZXQgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUob2Zmc2V0KSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsX21hcCwgb2Zmc2V0ICsgMykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZzoge2Vycn0iKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gRXJyKCJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlICdjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QnIi50b19zdHJpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICBtYXRjaCBmbGFnX3ZhbHVlX3Jlc3VsdCB7Ci0gICAgICAgICAgICBPayhmbGFnX3ZhbHVlKSA9PiB7Ci0gICAgICAgICAgICAgICAgIHJldHVybiBmbGFnX3ZhbHVlOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIEVycihlcnIpID0+IHsKLSAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgImFjb25maWdfcnVzdF9jb2RlZ2VuOiBlcnJvcjoge2Vycn0iKTsKLSAgICAgICAgICAgICAgICBwYW5pYyEoImZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWU6IHtlcnJ9Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmbGFnc19ydXN0OjpHZXRTZXJ2ZXJDb25maWd1cmFibGVGbGFnKAotICAgICAgICAgICAgImFjb25maWdfZmxhZ3Mub3RoZXJfbmFtZXNwYWNlIiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZGlzYWJsZWRfcndfaW5fb3RoZXJfbmFtZXNwYWNlIiwKLSAgICAgICAgICAgICJmYWxzZSIpID09ICJ0cnVlIgotICAgIH0KIH0pOwogCiAKIC8vLyBmbGFnIHZhbHVlIGNhY2hlIGZvciBlbmFibGVkX3J3CiBzdGF0aWMgQ0FDSEVEX2VuYWJsZWRfcnc6IExhenlMb2NrPGJvb2w+ID0gTGF6eUxvY2s6Om5ldyh8fCB7Ci0gICAgaWYgKlJFQURfRlJPTV9ORVdfU1RPUkFHRSB7CiAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFN1YnNlcXVlbnQgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0IGFyZSBub29wcy4KICAgICAgICAgbG9nZ2VyOjppbml0KAogICAgICAgICAgICAgbG9nZ2VyOjpDb25maWc6OmRlZmF1bHQoKQpAQCAtNDI1LDEwICs0MjksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgLmFuZF90aGVuKHxwYWNrYWdlX29mZnNldHwgewogICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggcGFja2FnZV9vZmZzZXQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUob2Zmc2V0KSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsX21hcCwgb2Zmc2V0ICsgOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWxfbWFwLCBvZmZzZXQgKyA3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnOiB7ZXJyfSIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBFcnIoIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgJ2NvbS5hbmRyb2lkLmFjb25maWcudGVzdCciLnRvX3N0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihmb3JtYXQhKCJmYWlsZWQgdG8gZmxhZyBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICB9KTsKQEAgLTQzOSwxNSArNDQ2LDkgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBFcnIoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IHtlcnJ9Iik7Ci0gICAgICAgICAgICAgICAgcGFuaWMhKCJmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiB7ZXJyfSIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxhZ3NfcnVzdDo6R2V0U2VydmVyQ29uZmlndXJhYmxlRmxhZygKLSAgICAgICAgICAgICJhY29uZmlnX2ZsYWdzLmFjb25maWdfdGVzdCIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmVuYWJsZWRfcnciLAotICAgICAgICAgICAgInRydWUiKSA9PSAidHJ1ZSIKLSAgICB9CiB9KTsKIAogaW1wbCBGbGFnUHJvdmlkZXIgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb21tYW5kcy5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29tbWFuZHMucnMKaW5kZXggNzk3YTg5My4uNGMwNjQ2MiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb21tYW5kcy5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvbW1hbmRzLnJzCkBAIC0xNyw3ICsxNyw3IEBACiB1c2UgYW55aG93Ojp7YmFpbCwgZW5zdXJlLCBDb250ZXh0LCBSZXN1bHR9OwogdXNlIGl0ZXJ0b29sczo6SXRlcnRvb2xzOwogdXNlIHByb3RvYnVmOjpNZXNzYWdlOwotdXNlIHN0ZDo6Y29sbGVjdGlvbnM6OntCVHJlZU1hcCwgSGFzaE1hcH07Cit1c2Ugc3RkOjpjb2xsZWN0aW9uczo6SGFzaE1hcDsKIHVzZSBzdGQ6Omhhc2g6Okhhc2hlcjsKIHVzZSBzdGQ6OmlvOjpSZWFkOwogdXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsKQEAgLTY5LDYgKzY5LDcgQEAKICAgICBkZWNsYXJhdGlvbnM6IFZlYzxJbnB1dD4sCiAgICAgdmFsdWVzOiBWZWM8SW5wdXQ+LAogICAgIGRlZmF1bHRfcGVybWlzc2lvbjogUHJvdG9GbGFnUGVybWlzc2lvbiwKKyAgICBhbGxvd19yZWFkX3dyaXRlOiBib29sLAogKSAtPiBSZXN1bHQ8VmVjPHU4Pj4gewogICAgIGxldCBtdXQgcGFyc2VkX2ZsYWdzID0gUHJvdG9QYXJzZWRGbGFnczo6bmV3KCk7CiAKQEAgLTE5NSw2ICsxOTYsMTYgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICFhbGxvd19yZWFkX3dyaXRlIHsKKyAgICAgICAgaWYgbGV0IFNvbWUocGYpID0gcGFyc2VkX2ZsYWdzCisgICAgICAgICAgICAucGFyc2VkX2ZsYWcKKyAgICAgICAgICAgIC5pdGVyKCkKKyAgICAgICAgICAgIC5maW5kKHxwZnwgcGYucGVybWlzc2lvbigpID09IFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfV1JJVEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhaWwhKCJmbGFnIHt9IGhhcyBwZXJtaXNzaW9uIFJFQURfV1JJVEUsIGJ1dCBhbGxvd19yZWFkX3dyaXRlIGlzIGZhbHNlIiwgcGYubmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIENyZWF0ZSBhIHNvcnRlZCBwYXJzZWRfZmxhZ3MKICAgICBhY29uZmlnX3Byb3Rvczo6cGFyc2VkX2ZsYWdzOjpzb3J0X3BhcnNlZF9mbGFncygmbXV0IHBhcnNlZF9mbGFncyk7CiAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6dmVyaWZ5X2ZpZWxkcygmcGFyc2VkX2ZsYWdzKT87CkBAIC0yMDcsNiArMjE4LDcgQEAKICAgICBtdXQgaW5wdXQ6IElucHV0LAogICAgIGNvZGVnZW5fbW9kZTogQ29kZWdlbk1vZGUsCiAgICAgYWxsb3dfaW5zdHJ1bWVudGF0aW9uOiBib29sLAorICAgIG5ld19leHBvcnRlZDogYm9vbCwKICkgLT4gUmVzdWx0PFZlYzxPdXRwdXRGaWxlPj4gewogICAgIGxldCBwYXJzZWRfZmxhZ3MgPSBpbnB1dC50cnlfcGFyc2VfZmxhZ3MoKT87CiAgICAgbGV0IG1vZGlmaWVkX3BhcnNlZF9mbGFncyA9IG1vZGlmeV9wYXJzZWRfZmxhZ3NfYmFzZWRfb25fbW9kZShwYXJzZWRfZmxhZ3MsIGNvZGVnZW5fbW9kZSk/OwpAQCAtMjE0LDYgKzIyNiw5IEBACiAgICAgICAgIGJhaWwhKCJubyBwYXJzZWQgZmxhZ3MsIG9yIHRoZSBwYXJzZWQgZmxhZ3MgdXNlIGRpZmZlcmVudCBwYWNrYWdlcyIpOwogICAgIH07CiAgICAgbGV0IHBhY2thZ2UgPSBwYWNrYWdlLnRvX3N0cmluZygpOworICAgIGxldCBtdXQgZmxhZ19uYW1lcyA9CisgICAgICAgIG1vZGlmaWVkX3BhcnNlZF9mbGFncy5pdGVyKCkubWFwKHxwZnwgcGYubmFtZSgpLnRvX3N0cmluZygpKS5jb2xsZWN0Ojo8VmVjPF8+PigpOworICAgIGxldCBwYWNrYWdlX2ZpbmdlcnByaW50ID0gY29tcHV0ZV9mbGFnc19maW5nZXJwcmludCgmbXV0IGZsYWdfbmFtZXMpOwogICAgIGxldCBmbGFnX2lkcyA9IGFzc2lnbl9mbGFnX2lkcygmcGFja2FnZSwgbW9kaWZpZWRfcGFyc2VkX2ZsYWdzLml0ZXIoKSk/OwogICAgIGdlbmVyYXRlX2phdmFfY29kZSgKICAgICAgICAgJnBhY2thZ2UsCkBAIC0yMjEsNiArMjM2LDggQEAKICAgICAgICAgY29kZWdlbl9tb2RlLAogICAgICAgICBmbGFnX2lkcywKICAgICAgICAgYWxsb3dfaW5zdHJ1bWVudGF0aW9uLAorICAgICAgICBwYWNrYWdlX2ZpbmdlcnByaW50LAorICAgICAgICBuZXdfZXhwb3J0ZWQsCiAgICAgKQogfQogCkBAIC0yODAsMTAgKzI5NywxMSBAQAogICAgIGNhY2hlczogVmVjPElucHV0PiwKICAgICBjb250YWluZXI6ICZzdHIsCiAgICAgZmlsZTogJlN0b3JhZ2VGaWxlVHlwZSwKKyAgICB2ZXJzaW9uOiB1MzIsCiApIC0+IFJlc3VsdDxWZWM8dTg+PiB7CiAgICAgbGV0IHBhcnNlZF9mbGFnc192ZWM6IFZlYzxQcm90b1BhcnNlZEZsYWdzPiA9CiAgICAgICAgIGNhY2hlcy5pbnRvX2l0ZXIoKS5tYXAofG11dCBpbnB1dHwgaW5wdXQudHJ5X3BhcnNlX2ZsYWdzKCkpLmNvbGxlY3Q6OjxSZXN1bHQ8VmVjPF8+Pj4oKT87Ci0gICAgZ2VuZXJhdGVfc3RvcmFnZV9maWxlKGNvbnRhaW5lciwgcGFyc2VkX2ZsYWdzX3ZlYy5pdGVyKCksIGZpbGUpCisgICAgZ2VuZXJhdGVfc3RvcmFnZV9maWxlKGNvbnRhaW5lciwgcGFyc2VkX2ZsYWdzX3ZlYy5pdGVyKCksIGZpbGUsIHZlcnNpb24pCiB9CiAKIHB1YiBmbiBjcmVhdGVfZGV2aWNlX2NvbmZpZ19kZWZhdWx0cyhtdXQgaW5wdXQ6IElucHV0KSAtPiBSZXN1bHQ8VmVjPHU4Pj4gewpAQCAtNDA3LDM4ICs0MjUsNjAgQEAKIHsKICAgICBhc3NlcnQhKHBhcnNlZF9mbGFnc19pdGVyLmNsb25lKCkudHVwbGVfd2luZG93cygpLmFsbCh8KGEsIGIpfCBhLm5hbWUoKSA8PSBiLm5hbWUoKSkpOwogICAgIGxldCBtdXQgZmxhZ19pZHMgPSBIYXNoTWFwOjpuZXcoKTsKLSAgICBmb3IgKGlkX3RvX2Fzc2lnbiwgcGYpIGluICgwX3UzMi4uKS56aXAocGFyc2VkX2ZsYWdzX2l0ZXIpIHsKKyAgICBsZXQgbXV0IGZsYWdfaWR4ID0gMDsKKyAgICBmb3IgcGYgaW4gcGFyc2VkX2ZsYWdzX2l0ZXIgewogICAgICAgICBpZiBwYWNrYWdlICE9IHBmLnBhY2thZ2UoKSB7CiAgICAgICAgICAgICByZXR1cm4gRXJyKGFueWhvdzo6YW55aG93ISgiZW5jb3VudGVyZWQgYSBmbGFnIG5vdCBpbiBjdXJyZW50IHBhY2thZ2UiKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBwdXQgYSBjYXAgb24gaG93IG1hbnkgZmxhZ3MgYSBwYWNrYWdlIGNhbiBjb250YWluIHRvIDY1NTM1Ci0gICAgICAgIGlmIGlkX3RvX2Fzc2lnbiA+IHUxNjo6TUFYIGFzIHUzMiB7CisgICAgICAgIGlmIGZsYWdfaWR4ID4gdTE2OjpNQVggYXMgdTMyIHsKICAgICAgICAgICAgIHJldHVybiBFcnIoYW55aG93Ojphbnlob3chKCJ0aGUgbnVtYmVyIG9mIGZsYWdzIGluIGEgcGFja2FnZSBjYW5ub3QgZXhjZWVkIDY1NTM1IikpOwogICAgICAgICB9CiAKLSAgICAgICAgZmxhZ19pZHMuaW5zZXJ0KHBmLm5hbWUoKS50b19zdHJpbmcoKSwgaWRfdG9fYXNzaWduIGFzIHUxNik7CisgICAgICAgIC8vIEV4Y2x1ZGUgc3lzdGVtL3ZlbmRvci9wcm9kdWN0IGZsYWdzIHRoYXQgYXJlIFJPK2Rpc2FibGVkLgorICAgICAgICBsZXQgc2hvdWxkX2ZpbHRlcl9jb250YWluZXIgPSBwZi5jb250YWluZXIgPT0gU29tZSgidmVuZG9yIi50b19zdHJpbmcoKSkKKyAgICAgICAgICAgIHx8IHBmLmNvbnRhaW5lciA9PSBTb21lKCJzeXN0ZW0iLnRvX3N0cmluZygpKQorICAgICAgICAgICAgfHwgcGYuY29udGFpbmVyID09IFNvbWUoInZlbmRvciIudG9fc3RyaW5nKCkpOworICAgICAgICBpZiAhKHNob3VsZF9maWx0ZXJfY29udGFpbmVyCisgICAgICAgICAgICAmJiBwZi5zdGF0ZSA9PSBTb21lKFByb3RvRmxhZ1N0YXRlOjpESVNBQkxFRC5pbnRvKCkpCisgICAgICAgICAgICAmJiBwZi5wZXJtaXNzaW9uID09IFNvbWUoUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLmludG8oKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYWdfaWRzLmluc2VydChwZi5uYW1lKCkudG9fc3RyaW5nKCksIGZsYWdfaWR4IGFzIHUxNik7CisgICAgICAgICAgICBmbGFnX2lkeCArPSAxOworICAgICAgICB9CiAgICAgfQogICAgIE9rKGZsYWdfaWRzKQogfQogCiAjW2FsbG93KGRlYWRfY29kZSldIC8vIFRPRE86IGIvMzE2MzU3Njg2IC0gVXNlIGZpbmdlcnByaW50IGluIGNvZGVnZW4gdG8KICAgICAgICAgICAgICAgICAgICAgLy8gcHJvdGVjdCBoYXJkY29kZWQgb2Zmc2V0IHJlYWRzLgotcHViIGZuIGNvbXB1dGVfZmxhZ19vZmZzZXRzX2ZpbmdlcnByaW50KGZsYWdzX21hcDogJkhhc2hNYXA8U3RyaW5nLCB1MTY+KSAtPiBSZXN1bHQ8dTY0PiB7CisgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZXMgYSBmaW5nZXJwcmludCBvZiB0aGUgZmxhZyBuYW1lcyAod2hpY2ggcmVxdWlyZXMgc29ydGluZyB0aGUgdmVjdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gRmluZ2VycHJpbnQgaXMgdXNlZCBieSBib3RoIGNvZGVnZW4gYW5kIHN0b3JhZ2UgZmlsZXMuCitwdWIgZm4gY29tcHV0ZV9mbGFnc19maW5nZXJwcmludChmbGFnX25hbWVzOiAmbXV0IFZlYzxTdHJpbmc+KSAtPiB1NjQgeworICAgIGZsYWdfbmFtZXMuc29ydCgpOworCiAgICAgbGV0IG11dCBoYXNoZXIgPSBTaXBIYXNoZXIxMzo6bmV3KCk7Ci0KLSAgICAvLyBOZWVkIHRvIHNvcnQgdG8gZW5zdXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBoYXNoZXIgaW4gdGhlIHNhbWUgb3JkZXIKLSAgICAvLyBlYWNoIHJ1bi4KLSAgICBsZXQgc29ydGVkX21hcDogQlRyZWVNYXA8JlN0cmluZywgJnUxNj4gPSBmbGFnc19tYXAuaXRlcigpLmNvbGxlY3QoKTsKLQotICAgIGZvciAoZmxhZywgb2Zmc2V0KSBpbiBzb3J0ZWRfbWFwIHsKLSAgICAgICAgLy8gU2VlIGh0dHBzOi8vZG9jcy5ycy9zaXBoYXNoZXIvbGF0ZXN0L3NpcGhhc2hlci8jbm90ZSBmb3IgdXNlIG9mIHdyaXRlCi0gICAgICAgIC8vIG92ZXIgd3JpdGVfaTE2LiBTaW1pbGFybHksIHVzZSB0b19iZV9ieXRlcyByYXRoZXIgdGhhbiB0b19uZV9ieXRlcyB0bwotICAgICAgICAvLyBlbnN1cmUgY29uc2lzdGVuY3kuCisgICAgZm9yIGZsYWcgaW4gZmxhZ19uYW1lcyB7CiAgICAgICAgIGhhc2hlci53cml0ZShmbGFnLmFzX2J5dGVzKCkpOwotICAgICAgICBoYXNoZXIud3JpdGUoJm9mZnNldC50b19iZV9ieXRlcygpKTsKICAgICB9Ci0gICAgT2soaGFzaGVyLmZpbmlzaCgpKQorICAgIGhhc2hlci5maW5pc2goKQorfQorCisjW2FsbG93KGRlYWRfY29kZSldIC8vIFRPRE86IGIvMzE2MzU3Njg2IC0gVXNlIGZpbmdlcnByaW50IGluIGNvZGVnZW4gdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvdGVjdCBoYXJkY29kZWQgb2Zmc2V0IHJlYWRzLgorICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0cyBQcm90b1BhcnNlZEZsYWdzIGludG8gYSB2ZWN0b3Igb2Ygc3RyaW5ncyBjb250YWluaW5nIGFsbCBvZiB0aGUgZmxhZworICAgICAgICAgICAgICAgICAgICAvLyBuYW1lcy4gSGVscGVyIGZuIGZvciBjcmVhdGluZyBmaW5nZXJwcmludCBmb3IgY29kZWdlbiBmaWxlcy4gRmxhZ3MgbXVzdCBhbGwKKyAgICAgICAgICAgICAgICAgICAgLy8gYmVsb25nIHRvIHRoZSBzYW1lIHBhY2thZ2UuCitmbiBleHRyYWN0X2ZsYWdfbmFtZXMoZmxhZ3M6IFByb3RvUGFyc2VkRmxhZ3MpIC0+IFJlc3VsdDxWZWM8U3RyaW5nPj4geworICAgIGxldCBzZXBhcmF0ZWRfZmxhZ3M6IFZlYzxQcm90b1BhcnNlZEZsYWc+ID0gZmxhZ3MucGFyc2VkX2ZsYWcuaW50b19pdGVyKCkuY29sbGVjdDo6PFZlYzxfPj4oKTsKKworICAgIC8vIEFsbCBmbGFncyBtdXN0IGJlbG9uZyB0byB0aGUgc2FtZSBwYWNrYWdlIGFzIHRoZSBmaW5nZXJwcmludCBpcyBwZXItcGFja2FnZS4KKyAgICBsZXQgU29tZShfcGFja2FnZSkgPSBmaW5kX3VuaXF1ZV9wYWNrYWdlKCZzZXBhcmF0ZWRfZmxhZ3MpIGVsc2UgeworICAgICAgICBiYWlsISgiTm8gcGFyc2VkIGZsYWdzLCBvciB0aGUgcGFyc2VkIGZsYWdzIHVzZSBkaWZmZXJlbnQgcGFja2FnZXMuIik7CisgICAgfTsKKworICAgIE9rKHNlcGFyYXRlZF9mbGFncy5pbnRvX2l0ZXIoKS5tYXAofGZsYWd8IGZsYWcubmFtZS51bndyYXAoKSkuY29sbGVjdDo6PFZlYzxfPj4oKSkKIH0KIAogI1tjZmcodGVzdCldCkBAIC00NDksMTMgKzQ4OSw0OCBAQAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X29mZnNldF9maW5nZXJwcmludCgpIHsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFncyA9IGNyYXRlOjp0ZXN0OjpwYXJzZV90ZXN0X2ZsYWdzKCk7Ci0gICAgICAgIGxldCBwYWNrYWdlID0gZmluZF91bmlxdWVfcGFja2FnZSgmcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnKS51bndyYXAoKS50b19zdHJpbmcoKTsKLSAgICAgICAgbGV0IGZsYWdfaWRzID0gYXNzaWduX2ZsYWdfaWRzKCZwYWNrYWdlLCBwYXJzZWRfZmxhZ3MucGFyc2VkX2ZsYWcuaXRlcigpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX2ZpbmdlcnByaW50ID0gMTA3MDk4OTI0ODEwMDIyNTIxMzJ1NjQ7CisgICAgICAgIGxldCBleHBlY3RlZF9maW5nZXJwcmludDogdTY0ID0gNTgwMTE0NDc4NDYxODIyMTY2ODsKIAotICAgICAgICBsZXQgaGFzaF9yZXN1bHQgPSBjb21wdXRlX2ZsYWdfb2Zmc2V0c19maW5nZXJwcmludCgmZmxhZ19pZHMpOworICAgICAgICBsZXQgbXV0IGV4dHJhY3RlZF9mbGFncyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhwYXJzZWRfZmxhZ3MpLnVud3JhcCgpOworICAgICAgICBsZXQgaGFzaF9yZXN1bHQgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZXh0cmFjdGVkX2ZsYWdzKTsKIAotICAgICAgICBhc3NlcnRfZXEhKGhhc2hfcmVzdWx0LnVud3JhcCgpLCBleHBlY3RlZF9maW5nZXJwcmludCk7CisgICAgICAgIGFzc2VydF9lcSEoaGFzaF9yZXN1bHQsIGV4cGVjdGVkX2ZpbmdlcnByaW50KTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9vZmZzZXRfZmluZ2VycHJpbnRfbWF0Y2hlc19mcm9tX3BhY2thZ2UoKSB7CisgICAgICAgIGxldCBwYXJzZWRfZmxhZ3M6IFByb3RvUGFyc2VkRmxhZ3MgPSBjcmF0ZTo6dGVzdDo6cGFyc2VfdGVzdF9mbGFncygpOworCisgICAgICAgIC8vIEFsbCB0ZXN0IGZsYWdzIGFyZSBpbiB0aGUgc2FtZSBwYWNrYWdlLCBzbyBmaW5nZXJwcmludCBmcm9tIGFsbCBvZiB0aGVtLgorICAgICAgICBsZXQgbXV0IGV4dHJhY3RlZF9mbGFncyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhwYXJzZWRfZmxhZ3MuY2xvbmUoKSkudW53cmFwKCk7CisgICAgICAgIGxldCByZXN1bHRfZnJvbV9wYXJzZWRfZmxhZ3MgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZXh0cmFjdGVkX2ZsYWdzKTsKKworICAgICAgICBsZXQgbXV0IGZsYWdfbmFtZXNfdmVjID0gcGFyc2VkX2ZsYWdzCisgICAgICAgICAgICAucGFyc2VkX2ZsYWcKKyAgICAgICAgICAgIC5jbG9uZSgpCisgICAgICAgICAgICAuaW50b19pdGVyKCkKKyAgICAgICAgICAgIC5tYXAofGZsYWd8IGZsYWcubmFtZS51bndyYXAoKSkKKyAgICAgICAgICAgIC5tYXAoU3RyaW5nOjpmcm9tKQorICAgICAgICAgICAgLmNvbGxlY3Q6OjxWZWM8Xz4+KCk7CisgICAgICAgIGxldCByZXN1bHRfZnJvbV9uYW1lcyA9IGNvbXB1dGVfZmxhZ3NfZmluZ2VycHJpbnQoJm11dCBmbGFnX25hbWVzX3ZlYyk7CisKKyAgICAgICAgLy8gQXNzZXJ0IHRoZSBzYW1lIGhhc2ggaXMgZ2VuZXJhdGVkIGZvciBlYWNoIGNhc2UuCisgICAgICAgIGFzc2VydF9lcSEocmVzdWx0X2Zyb21fcGFyc2VkX2ZsYWdzLCByZXN1bHRfZnJvbV9uYW1lcyk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfb2Zmc2V0X2ZpbmdlcnByaW50X2RpZmZlcmVudF9wYWNrYWdlc19kb2VzX25vdF9tYXRjaCgpIHsKKyAgICAgICAgLy8gUGFyc2UgZmxhZ3MgZnJvbSB0d28gcGFja2FnZXMuCisgICAgICAgIGxldCBwYXJzZWRfZmxhZ3M6IFByb3RvUGFyc2VkRmxhZ3MgPSBjcmF0ZTo6dGVzdDo6cGFyc2VfdGVzdF9mbGFncygpOworICAgICAgICBsZXQgc2Vjb25kX3BhcnNlZF9mbGFncyA9IGNyYXRlOjp0ZXN0OjpwYXJzZV9zZWNvbmRfcGFja2FnZV9mbGFncygpOworCisgICAgICAgIGxldCBtdXQgZXh0cmFjdGVkX2ZsYWdzID0gZXh0cmFjdF9mbGFnX25hbWVzKHBhcnNlZF9mbGFncykudW53cmFwKCk7CisgICAgICAgIGxldCByZXN1bHRfZnJvbV9wYXJzZWRfZmxhZ3MgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZXh0cmFjdGVkX2ZsYWdzKTsKKyAgICAgICAgbGV0IG11dCBzZWNvbmRfZXh0cmFjdGVkX2ZsYWdzID0gZXh0cmFjdF9mbGFnX25hbWVzKHNlY29uZF9wYXJzZWRfZmxhZ3MpLnVud3JhcCgpOworICAgICAgICBsZXQgc2Vjb25kX3Jlc3VsdCA9IGNvbXB1dGVfZmxhZ3NfZmluZ2VycHJpbnQoJm11dCBzZWNvbmRfZXh0cmFjdGVkX2ZsYWdzKTsKKworICAgICAgICAvLyBEaWZmZXJlbnQgZmxhZ3Mgc2hvdWxkIGhhdmUgYSBkaWZmZXJlbnQgZmluZ2VycHJpbnQuCisgICAgICAgIGFzc2VydF9uZSEocmVzdWx0X2Zyb21fcGFyc2VkX2ZsYWdzLCBzZWNvbmRfcmVzdWx0KTsKICAgICB9CiAKICAgICAjW3Rlc3RdCkBAIC01MjksNiArNjA0LDcgQEAKICAgICAgICAgICAgIGRlY2xhcmF0aW9uLAogICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFksCisgICAgICAgICAgICB0cnVlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFncyA9CkBAIC01NjIsNiArNjM4LDcgQEAKICAgICAgICAgICAgIGRlY2xhcmF0aW9uLAogICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX1dSSVRFLAorICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgKQogICAgICAgICAudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKApAQCAtNTkzLDYgKzY3MCw3IEBACiAgICAgICAgICAgICBkZWNsYXJhdGlvbiwKICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSwKKyAgICAgICAgICAgIHRydWUsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKQEAgLTYwMCw2ICs2NzgsMTIxIEBACiAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIG1lbW9yeTogZXhwZWN0ZWQgY29udGFpbmVyIGFyZ3VtZW50LmNvbnRhaW5lciwgZ290IGRlY2xhcmF0aW9uLmNvbnRhaW5lciIKICAgICAgICAgKTsKICAgICB9CisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfcGFyc2VfZmxhZ3Nfbm9fYWxsb3dfcmVhZF93cml0ZV9kZWZhdWx0X2Vycm9yKCkgeworICAgICAgICBsZXQgZmlyc3RfZmxhZyA9IHIjIgorICAgICAgICBwYWNrYWdlOiAiY29tLmZpcnN0IgorICAgICAgICBjb250YWluZXI6ICJjb20uZmlyc3QuY29udGFpbmVyIgorICAgICAgICBmbGFnIHsKKyAgICAgICAgICAgIG5hbWU6ICJmaXJzdCIKKyAgICAgICAgICAgIG5hbWVzcGFjZTogImZpcnN0X25zIgorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlyc3QgZmxhZy4iCisgICAgICAgICAgICBidWc6ICIxMjMiCisgICAgICAgIH0KKyAgICAgICAgIiM7CisgICAgICAgIGxldCBkZWNsYXJhdGlvbiA9CisgICAgICAgICAgICB2ZWMhW0lucHV0IHsgc291cmNlOiAibWVtb3J5Ii50b19zdHJpbmcoKSwgcmVhZGVyOiBCb3g6Om5ldyhmaXJzdF9mbGFnLmFzX2J5dGVzKCkpIH1dOworCisgICAgICAgIGxldCBlcnJvciA9IGNyYXRlOjpjb21tYW5kczo6cGFyc2VfZmxhZ3MoCisgICAgICAgICAgICAiY29tLmZpcnN0IiwKKyAgICAgICAgICAgIFNvbWUoImNvbS5maXJzdC5jb250YWluZXIiKSwKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLAorICAgICAgICAgICAgdmVjIVtdLAorICAgICAgICAgICAgUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSwKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICApCisgICAgICAgIC51bndyYXBfZXJyKCk7CisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBmb3JtYXQhKCJ7Oj99IiwgZXJyb3IpLAorICAgICAgICAgICAgImZsYWcgZmlyc3QgaGFzIHBlcm1pc3Npb24gUkVBRF9XUklURSwgYnV0IGFsbG93X3JlYWRfd3JpdGUgaXMgZmFsc2UiCisgICAgICAgICk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfcGFyc2VfZmxhZ3Nfbm9fYWxsb3dfcmVhZF93cml0ZV92YWx1ZV9lcnJvcigpIHsKKyAgICAgICAgbGV0IGZpcnN0X2ZsYWcgPSByIyIKKyAgICAgICAgcGFja2FnZTogImNvbS5maXJzdCIKKyAgICAgICAgY29udGFpbmVyOiAiY29tLmZpcnN0LmNvbnRhaW5lciIKKyAgICAgICAgZmxhZyB7CisgICAgICAgICAgICBuYW1lOiAiZmlyc3QiCisgICAgICAgICAgICBuYW1lc3BhY2U6ICJmaXJzdF9ucyIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0IGZsYWcuIgorICAgICAgICAgICAgYnVnOiAiMTIzIgorICAgICAgICB9CisgICAgICAgICIjOworICAgICAgICBsZXQgZGVjbGFyYXRpb24gPQorICAgICAgICAgICAgdmVjIVtJbnB1dCB7IHNvdXJjZTogIm1lbW9yeSIudG9fc3RyaW5nKCksIHJlYWRlcjogQm94OjpuZXcoZmlyc3RfZmxhZy5hc19ieXRlcygpKSB9XTsKKworICAgICAgICBsZXQgZmlyc3RfZmxhZ192YWx1ZSA9IHIjIgorICAgICAgICBmbGFnX3ZhbHVlIHsKKyAgICAgICAgICAgIHBhY2thZ2U6ICJjb20uZmlyc3QiCisgICAgICAgICAgICBuYW1lOiAiZmlyc3QiCisgICAgICAgICAgICBzdGF0ZTogRElTQUJMRUQKKyAgICAgICAgICAgIHBlcm1pc3Npb246IFJFQURfV1JJVEUKKyAgICAgICAgfQorICAgICAgICAiIzsKKyAgICAgICAgbGV0IHZhbHVlID0gdmVjIVtJbnB1dCB7CisgICAgICAgICAgICBzb3VyY2U6ICJtZW1vcnkiLnRvX3N0cmluZygpLAorICAgICAgICAgICAgcmVhZGVyOiBCb3g6Om5ldyhmaXJzdF9mbGFnX3ZhbHVlLmFzX2J5dGVzKCkpLAorICAgICAgICB9XTsKKyAgICAgICAgbGV0IGVycm9yID0gY3JhdGU6OmNvbW1hbmRzOjpwYXJzZV9mbGFncygKKyAgICAgICAgICAgICJjb20uZmlyc3QiLAorICAgICAgICAgICAgU29tZSgiY29tLmZpcnN0LmNvbnRhaW5lciIpLAorICAgICAgICAgICAgZGVjbGFyYXRpb24sCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgIFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfT05MWSwKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICApCisgICAgICAgIC51bndyYXBfZXJyKCk7CisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBmb3JtYXQhKCJ7Oj99IiwgZXJyb3IpLAorICAgICAgICAgICAgImZsYWcgZmlyc3QgaGFzIHBlcm1pc3Npb24gUkVBRF9XUklURSwgYnV0IGFsbG93X3JlYWRfd3JpdGUgaXMgZmFsc2UiCisgICAgICAgICk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfcGFyc2VfZmxhZ3Nfbm9fYWxsb3dfcmVhZF93cml0ZV9zdWNjZXNzKCkgeworICAgICAgICBsZXQgZmlyc3RfZmxhZyA9IHIjIgorICAgICAgICBwYWNrYWdlOiAiY29tLmZpcnN0IgorICAgICAgICBjb250YWluZXI6ICJjb20uZmlyc3QuY29udGFpbmVyIgorICAgICAgICBmbGFnIHsKKyAgICAgICAgICAgIG5hbWU6ICJmaXJzdCIKKyAgICAgICAgICAgIG5hbWVzcGFjZTogImZpcnN0X25zIgorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlyc3QgZmxhZy4iCisgICAgICAgICAgICBidWc6ICIxMjMiCisgICAgICAgIH0KKyAgICAgICAgIiM7CisgICAgICAgIGxldCBkZWNsYXJhdGlvbiA9CisgICAgICAgICAgICB2ZWMhW0lucHV0IHsgc291cmNlOiAibWVtb3J5Ii50b19zdHJpbmcoKSwgcmVhZGVyOiBCb3g6Om5ldyhmaXJzdF9mbGFnLmFzX2J5dGVzKCkpIH1dOworCisgICAgICAgIGxldCBmaXJzdF9mbGFnX3ZhbHVlID0gciMiCisgICAgICAgIGZsYWdfdmFsdWUgeworICAgICAgICAgICAgcGFja2FnZTogImNvbS5maXJzdCIKKyAgICAgICAgICAgIG5hbWU6ICJmaXJzdCIKKyAgICAgICAgICAgIHN0YXRlOiBESVNBQkxFRAorICAgICAgICAgICAgcGVybWlzc2lvbjogUkVBRF9PTkxZCisgICAgICAgIH0KKyAgICAgICAgIiM7CisgICAgICAgIGxldCB2YWx1ZSA9IHZlYyFbSW5wdXQgeworICAgICAgICAgICAgc291cmNlOiAibWVtb3J5Ii50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIHJlYWRlcjogQm94OjpuZXcoZmlyc3RfZmxhZ192YWx1ZS5hc19ieXRlcygpKSwKKyAgICAgICAgfV07CisgICAgICAgIGxldCBmbGFnc19ieXRlcyA9IGNyYXRlOjpjb21tYW5kczo6cGFyc2VfZmxhZ3MoCisgICAgICAgICAgICAiY29tLmZpcnN0IiwKKyAgICAgICAgICAgIFNvbWUoImNvbS5maXJzdC5jb250YWluZXIiKSwKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFksCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBwYXJzZWRfZmxhZ3MgPQorICAgICAgICAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6dHJ5X2Zyb21fYmluYXJ5X3Byb3RvKCZmbGFnc19ieXRlcykudW53cmFwKCk7CisgICAgICAgIGFzc2VydF9lcSEoMSwgcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnLmxlbigpKTsKKyAgICAgICAgbGV0IHBhcnNlZF9mbGFnID0gcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnLmZpcnN0KCkudW53cmFwKCk7CisgICAgICAgIGFzc2VydF9lcSEoUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVELCBwYXJzZWRfZmxhZy5zdGF0ZSgpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFksIHBhcnNlZF9mbGFnLnBlcm1pc3Npb24oKSk7CisgICAgfQogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfcGFyc2VfZmxhZ3Nfb3ZlcnJpZGVfZml4ZWRfcmVhZF9vbmx5KCkgewpAQCAtNjM1LDYgKzgyOCw3IEBACiAgICAgICAgICAgICBkZWNsYXJhdGlvbiwKICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSwKKyAgICAgICAgICAgIHRydWUsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKQEAgLTY2OSw2ICs4NjMsNyBAQAogICAgICAgICAgICAgZGVjbGFyYXRpb24sCiAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgIFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfT05MWSwKKyAgICAgICAgICAgIHRydWUsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcCgpOwogICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzID0KQEAgLTcwOSw2ICs5MDQsMzAgQEAKICAgICB9CiAKICAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9kdW1wX211bHRpcGxlX2ZpbHRlcnMoKSB7CisgICAgICAgIGxldCBpbnB1dCA9IHBhcnNlX3Rlc3RfZmxhZ3NfYXNfaW5wdXQoKTsKKyAgICAgICAgbGV0IGJ5dGVzID0gZHVtcF9wYXJzZWRfZmxhZ3MoCisgICAgICAgICAgICB2ZWMhW2lucHV0XSwKKyAgICAgICAgICAgIER1bXBGb3JtYXQ6OkN1c3RvbSgie2Z1bGx5X3F1YWxpZmllZF9uYW1lfSIudG9fc3RyaW5nKCkpLAorICAgICAgICAgICAgJlsiY29udGFpbmVyOnN5c3RlbStzdGF0ZTpFTkFCTEVEIiwgImNvbnRhaW5lcjpzeXN0ZW0rcGVybWlzc2lvbjpSRUFEX1dSSVRFIl0sCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCB0ZXh0ID0gc3RkOjpzdHI6OmZyb21fdXRmOCgmYnl0ZXMpLnVud3JhcCgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ19saXN0ID0gJlsKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZGlzYWJsZWRfcnciLAorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5kaXNhYmxlZF9yd19leHBvcnRlZCIsCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmRpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZSIsCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmVuYWJsZWRfZml4ZWRfcm8iLAorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5lbmFibGVkX2ZpeGVkX3JvX2V4cG9ydGVkIiwKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZW5hYmxlZF9ybyIsCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmVuYWJsZWRfcm9fZXhwb3J0ZWQiLAorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5lbmFibGVkX3J3IiwKKyAgICAgICAgXTsKKyAgICAgICAgYXNzZXJ0X2VxIShleHBlY3RlZF9mbGFnX2xpc3QubWFwKHxzfCBmb3JtYXQhKCJ7fVxuIiwgcykpLmpvaW4oIiIpLCB0ZXh0KTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9kdW1wX3RleHRwcm90b19mb3JtYXRfZGVkdXAoKSB7CiAgICAgICAgIGxldCBpbnB1dCA9IHBhcnNlX3Rlc3RfZmxhZ3NfYXNfaW5wdXQoKTsKICAgICAgICAgbGV0IGlucHV0MiA9IHBhcnNlX3Rlc3RfZmxhZ3NfYXNfaW5wdXQoKTsKQEAgLTc3MCwxNSArOTg5LDE0IEBACiAgICAgICAgIGxldCBwYWNrYWdlID0gZmluZF91bmlxdWVfcGFja2FnZSgmcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnKS51bndyYXAoKS50b19zdHJpbmcoKTsKICAgICAgICAgbGV0IGZsYWdfaWRzID0gYXNzaWduX2ZsYWdfaWRzKCZwYWNrYWdlLCBwYXJzZWRfZmxhZ3MucGFyc2VkX2ZsYWcuaXRlcigpKS51bndyYXAoKTsKICAgICAgICAgbGV0IGV4cGVjdGVkX2ZsYWdfaWRzID0gSGFzaE1hcDo6ZnJvbShbCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9ybyIpLCAwX3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9ydyIpLCAxX3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9yd19leHBvcnRlZCIpLCAyX3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9yd19pbl9vdGhlcl9uYW1lc3BhY2UiKSwgM191MTYpLAotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9maXhlZF9ybyIpLCA0X3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX2ZpeGVkX3JvX2V4cG9ydGVkIiksIDVfdTE2KSwKLSAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImVuYWJsZWRfcm8iKSwgNl91MTYpLAotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9yb19leHBvcnRlZCIpLCA3X3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX3J3IiksIDhfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImRpc2FibGVkX3J3IiksIDBfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImRpc2FibGVkX3J3X2V4cG9ydGVkIiksIDFfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImRpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZSIpLCAyX3UxNiksCisgICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX2ZpeGVkX3JvIiksIDNfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImVuYWJsZWRfZml4ZWRfcm9fZXhwb3J0ZWQiKSwgNF91MTYpLAorICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9ybyIpLCA1X3UxNiksCisgICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX3JvX2V4cG9ydGVkIiksIDZfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImVuYWJsZWRfcnciKSwgN191MTYpLAogICAgICAgICBdKTsKICAgICAgICAgYXNzZXJ0X2VxIShmbGFnX2lkcywgZXhwZWN0ZWRfZmxhZ19pZHMpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvbWFpbi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvbWFpbi5ycwppbmRleCAxZmI2NGY5Li4yODg3ODZiIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL21haW4ucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9tYWluLnJzCkBAIC0xNiw2ICsxNiw4IEBACiAKIC8vISBgYWNvbmZpZ2AgaXMgYSBidWlsZCB0aW1lIHRvb2wgdG8gbWFuYWdlIGJ1aWxkIHRpbWUgY29uZmlndXJhdGlvbnMsIHN1Y2ggYXMgZmVhdHVyZSBmbGFncy4KIAordXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjpERUZBVUxUX0ZJTEVfVkVSU0lPTjsKK3VzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6TUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT047CiB1c2UgYW55aG93Ojp7YW55aG93LCBiYWlsLCBDb250ZXh0LCBSZXN1bHR9OwogdXNlIGNsYXA6OntidWlsZGVyOjpBcmdBY3Rpb24sIGJ1aWxkZXI6OkVudW1WYWx1ZVBhcnNlciwgQXJnLCBBcmdNYXRjaGVzLCBDb21tYW5kfTsKIHVzZSBjb3JlOjphbnk6OkFueTsKQEAgLTQ5LDggKzUxLDcgQEAKICAgICAgICAgLnN1YmNvbW1hbmQoCiAgICAgICAgICAgICBDb21tYW5kOjpuZXcoImNyZWF0ZS1jYWNoZSIpCiAgICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygicGFja2FnZSIpLmxvbmcoInBhY2thZ2UiKS5yZXF1aXJlZCh0cnVlKSkKLSAgICAgICAgICAgICAgICAvLyBUT0RPKGIvMzEyNzY5NzEwKTogTWFrZSB0aGlzIGFyZ3VtZW50IHJlcXVpcmVkLgotICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImNvbnRhaW5lciIpLmxvbmcoImNvbnRhaW5lciIpKQorICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImNvbnRhaW5lciIpLmxvbmcoImNvbnRhaW5lciIpLnJlcXVpcmVkKHRydWUpKQogICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImRlY2xhcmF0aW9ucyIpLmxvbmcoImRlY2xhcmF0aW9ucyIpLmFjdGlvbihBcmdBY3Rpb246OkFwcGVuZCkpCiAgICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygidmFsdWVzIikubG9uZygidmFsdWVzIikuYWN0aW9uKEFyZ0FjdGlvbjo6QXBwZW5kKSkKICAgICAgICAgICAgICAgICAuYXJnKApAQCAtNjEsNiArNjIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tbWFuZHM6OkRFRkFVTFRfRkxBR19QRVJNSVNTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgKSksCiAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIC5hcmcoCisgICAgICAgICAgICAgICAgICAgIEFyZzo6bmV3KCJhbGxvdy1yZWFkLXdyaXRlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5sb25nKCJhbGxvdy1yZWFkLXdyaXRlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZV9wYXJzZXIoY2xhcDo6dmFsdWVfcGFyc2VyIShib29sKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0X3ZhbHVlKCJ0cnVlIiksCisgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImNhY2hlIikubG9uZygiY2FjaGUiKS5yZXF1aXJlZCh0cnVlKSksCiAgICAgICAgICkKICAgICAgICAgLnN1YmNvbW1hbmQoCkBAIC03OCw2ICs4NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLmxvbmcoImFsbG93LWluc3RydW1lbnRhdGlvbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVfcGFyc2VyKGNsYXA6OnZhbHVlX3BhcnNlciEoYm9vbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdF92YWx1ZSgiZmFsc2UiKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgLmFyZygKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpuZXcoIm5ldy1leHBvcnRlZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAubG9uZygibmV3LWV4cG9ydGVkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZV9wYXJzZXIoY2xhcDo6dmFsdWVfcGFyc2VyIShib29sKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0X3ZhbHVlKCJmYWxzZSIpLAogICAgICAgICAgICAgICAgICksCiAgICAgICAgICkKICAgICAgICAgLnN1YmNvbW1hbmQoCkBAIC0xNTksNyArMTcyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVfcGFyc2VyKHxzOiAmc3RyfCBTdG9yYWdlRmlsZVR5cGU6OnRyeV9mcm9tKHMpKSwKICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygiY2FjaGUiKS5sb25nKCJjYWNoZSIpLmFjdGlvbihBcmdBY3Rpb246OkFwcGVuZCkucmVxdWlyZWQodHJ1ZSkpCi0gICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygib3V0IikubG9uZygib3V0IikucmVxdWlyZWQodHJ1ZSkpLAorICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoIm91dCIpLmxvbmcoIm91dCIpLnJlcXVpcmVkKHRydWUpKQorICAgICAgICAgICAgICAgIC5hcmcoCisgICAgICAgICAgICAgICAgICAgIEFyZzo6bmV3KCJ2ZXJzaW9uIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5sb25nKCJ2ZXJzaW9uIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5yZXF1aXJlZChmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZV9wYXJzZXIofHM6ICZzdHJ8IHMucGFyc2U6Ojx1MzI+KCkpLAorICAgICAgICAgICAgICAgICksCiAgICAgICAgICkKIH0KIApAQCAtMjM1LDEyICsyNTQsMTUgQEAKICAgICAgICAgICAgICAgICBzdWJfbWF0Y2hlcywKICAgICAgICAgICAgICAgICAiZGVmYXVsdC1wZXJtaXNzaW9uIiwKICAgICAgICAgICAgICk/OworICAgICAgICAgICAgbGV0IGFsbG93X3JlYWRfd3JpdGUgPSBnZXRfb3B0aW9uYWxfYXJnOjo8Ym9vbD4oc3ViX21hdGNoZXMsICJhbGxvdy1yZWFkLXdyaXRlIikKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJmYWlsZWQgdG8gcGFyc2UgYWxsb3ctcmVhZC13cml0ZSIpOwogICAgICAgICAgICAgbGV0IG91dHB1dCA9IGNvbW1hbmRzOjpwYXJzZV9mbGFncygKICAgICAgICAgICAgICAgICBwYWNrYWdlLAogICAgICAgICAgICAgICAgIGNvbnRhaW5lciwKICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMsCiAgICAgICAgICAgICAgICAgdmFsdWVzLAogICAgICAgICAgICAgICAgICpkZWZhdWx0X3Blcm1pc3Npb24sCisgICAgICAgICAgICAgICAgKmFsbG93X3JlYWRfd3JpdGUsCiAgICAgICAgICAgICApCiAgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIGNyZWF0ZSBjYWNoZSIpPzsKICAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0X3JlcXVpcmVkX2FyZzo6PFN0cmluZz4oc3ViX21hdGNoZXMsICJjYWNoZSIpPzsKQEAgLTI1MSw4ICsyNzMsMTAgQEAKICAgICAgICAgICAgIGxldCBtb2RlID0gZ2V0X3JlcXVpcmVkX2FyZzo6PENvZGVnZW5Nb2RlPihzdWJfbWF0Y2hlcywgIm1vZGUiKT87CiAgICAgICAgICAgICBsZXQgYWxsb3dfaW5zdHJ1bWVudGF0aW9uID0KICAgICAgICAgICAgICAgICBnZXRfcmVxdWlyZWRfYXJnOjo8Ym9vbD4oc3ViX21hdGNoZXMsICJhbGxvdy1pbnN0cnVtZW50YXRpb24iKT87Ci0gICAgICAgICAgICBsZXQgZ2VuZXJhdGVkX2ZpbGVzID0gY29tbWFuZHM6OmNyZWF0ZV9qYXZhX2xpYihjYWNoZSwgKm1vZGUsICphbGxvd19pbnN0cnVtZW50YXRpb24pCi0gICAgICAgICAgICAgICAgLmNvbnRleHQoImZhaWxlZCB0byBjcmVhdGUgamF2YSBsaWIiKT87CisgICAgICAgICAgICBsZXQgbmV3X2V4cG9ydGVkID0gZ2V0X3JlcXVpcmVkX2FyZzo6PGJvb2w+KHN1Yl9tYXRjaGVzLCAibmV3LWV4cG9ydGVkIik/OworICAgICAgICAgICAgbGV0IGdlbmVyYXRlZF9maWxlcyA9CisgICAgICAgICAgICAgICAgY29tbWFuZHM6OmNyZWF0ZV9qYXZhX2xpYihjYWNoZSwgKm1vZGUsICphbGxvd19pbnN0cnVtZW50YXRpb24sICpuZXdfZXhwb3J0ZWQpCisgICAgICAgICAgICAgICAgICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gY3JlYXRlIGphdmEgbGliIik/OwogICAgICAgICAgICAgbGV0IGRpciA9IFBhdGhCdWY6OmZyb20oZ2V0X3JlcXVpcmVkX2FyZzo6PFN0cmluZz4oc3ViX21hdGNoZXMsICJvdXQiKT8pOwogICAgICAgICAgICAgZ2VuZXJhdGVkX2ZpbGVzCiAgICAgICAgICAgICAgICAgLml0ZXIoKQpAQCAtMzA5LDEyICszMzMsMTggQEAKICAgICAgICAgICAgIHdyaXRlX291dHB1dF90b19maWxlX29yX3N0ZG91dChwYXRoLCAmb3V0cHV0KT87CiAgICAgICAgIH0KICAgICAgICAgU29tZSgoImNyZWF0ZS1zdG9yYWdlIiwgc3ViX21hdGNoZXMpKSA9PiB7CisgICAgICAgICAgICBsZXQgdmVyc2lvbiA9CisgICAgICAgICAgICAgICAgZ2V0X29wdGlvbmFsX2FyZzo6PHUzMj4oc3ViX21hdGNoZXMsICJ2ZXJzaW9uIikudW53cmFwX29yKCZERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgICAgICBpZiAqdmVyc2lvbiA+IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OIHsKKyAgICAgICAgICAgICAgICBiYWlsISgiSW52YWxpZCB2ZXJzaW9uIHNlbGVjdGVkICh7fSkiLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxldCBmaWxlID0gZ2V0X3JlcXVpcmVkX2FyZzo6PFN0b3JhZ2VGaWxlVHlwZT4oc3ViX21hdGNoZXMsICJmaWxlIikKICAgICAgICAgICAgICAgICAuY29udGV4dCgiSW52YWxpZCBzdG9yYWdlIGZpbGUgc2VsZWN0aW9uIik/OwogICAgICAgICAgICAgbGV0IGNhY2hlID0gb3Blbl96ZXJvX29yX21vcmVfZmlsZXMoc3ViX21hdGNoZXMsICJjYWNoZSIpPzsKICAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBnZXRfcmVxdWlyZWRfYXJnOjo8U3RyaW5nPihzdWJfbWF0Y2hlcywgImNvbnRhaW5lciIpPzsKICAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0X3JlcXVpcmVkX2FyZzo6PFN0cmluZz4oc3ViX21hdGNoZXMsICJvdXQiKT87Ci0gICAgICAgICAgICBsZXQgb3V0cHV0ID0gY29tbWFuZHM6OmNyZWF0ZV9zdG9yYWdlKGNhY2hlLCBjb250YWluZXIsIGZpbGUpCisKKyAgICAgICAgICAgIGxldCBvdXRwdXQgPSBjb21tYW5kczo6Y3JlYXRlX3N0b3JhZ2UoY2FjaGUsIGNvbnRhaW5lciwgZmlsZSwgKnZlcnNpb24pCiAgICAgICAgICAgICAgICAgLmNvbnRleHQoImZhaWxlZCB0byBjcmVhdGUgc3RvcmFnZSBmaWxlcyIpPzsKICAgICAgICAgICAgIHdyaXRlX291dHB1dF90b19maWxlX29yX3N0ZG91dChwYXRoLCAmb3V0cHV0KT87CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX2luZm8ucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ19pbmZvLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDNkYWEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ19pbmZvLnJzCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCit1c2UgY3JhdGU6OmNvbW1hbmRzOjphc3NpZ25fZmxhZ19pZHM7Cit1c2UgY3JhdGU6OnN0b3JhZ2U6OkZsYWdQYWNrYWdlOwordXNlIGFjb25maWdfcHJvdG9zOjp7UHJvdG9GbGFnUGVybWlzc2lvbiwgUHJvdG9GbGFnU3RhdGV9OwordXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7RmxhZ0luZm9IZWFkZXIsIEZsYWdJbmZvTGlzdCwgRmxhZ0luZm9Ob2RlLCBTdG9yYWdlRmlsZVR5cGV9OwordXNlIGFueWhvdzo6e2FueWhvdywgUmVzdWx0fTsKKworZm4gbmV3X2hlYWRlcihjb250YWluZXI6ICZzdHIsIG51bV9mbGFnczogdTMyLCB2ZXJzaW9uOiB1MzIpIC0+IEZsYWdJbmZvSGVhZGVyIHsKKyAgICBGbGFnSW5mb0hlYWRlciB7CisgICAgICAgIHZlcnNpb24sCisgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKGNvbnRhaW5lciksCisgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpGbGFnSW5mbyBhcyB1OCwKKyAgICAgICAgZmlsZV9zaXplOiAwLAorICAgICAgICBudW1fZmxhZ3MsCisgICAgICAgIGJvb2xlYW5fZmxhZ19vZmZzZXQ6IDAsCisgICAgfQorfQorCitwdWIgZm4gY3JlYXRlX2ZsYWdfaW5mbygKKyAgICBjb250YWluZXI6ICZzdHIsCisgICAgcGFja2FnZXM6ICZbRmxhZ1BhY2thZ2VdLAorICAgIHZlcnNpb246IHUzMiwKKykgLT4gUmVzdWx0PEZsYWdJbmZvTGlzdD4geworICAgIC8vIEV4Y2x1ZGUgc3lzdGVtL3ZlbmRvci9wcm9kdWN0IGZsYWdzIHRoYXQgYXJlIFJPK2Rpc2FibGVkLgorICAgIGxldCBtdXQgZmlsdGVyZWRfcGFja2FnZXMgPSBwYWNrYWdlcy50b192ZWMoKTsKKyAgICBpZiBjb250YWluZXIgPT0gInN5c3RlbSIgfHwgY29udGFpbmVyID09ICJ2ZW5kb3IiIHx8IGNvbnRhaW5lciA9PSAicHJvZHVjdCIgeworICAgICAgICBmb3IgcGFja2FnZSBpbiBmaWx0ZXJlZF9wYWNrYWdlcy5pdGVyX211dCgpIHsKKyAgICAgICAgICAgIHBhY2thZ2UuYm9vbGVhbl9mbGFncy5yZXRhaW4ofGJ8IHsKKyAgICAgICAgICAgICAgICAhKGIuc3RhdGUgPT0gU29tZShQcm90b0ZsYWdTdGF0ZTo6RElTQUJMRUQuaW50bygpKQorICAgICAgICAgICAgICAgICAgICAmJiBiLnBlcm1pc3Npb24gPT0gU29tZShQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFkuaW50bygpKSkKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgbGV0IG51bV9mbGFncyA9IGZpbHRlcmVkX3BhY2thZ2VzLml0ZXIoKS5tYXAofHBrZ3wgcGtnLmJvb2xlYW5fZmxhZ3MubGVuKCkgYXMgdTMyKS5zdW0oKTsKKworICAgIGxldCBtdXQgaXNfZmxhZ19ydyA9IHZlYyFbZmFsc2U7IG51bV9mbGFncyBhcyB1c2l6ZV07CisgICAgZm9yIHBrZyBpbiBmaWx0ZXJlZF9wYWNrYWdlcyB7CisgICAgICAgIGxldCBzdGFydF9pbmRleCA9IHBrZy5ib29sZWFuX3N0YXJ0X2luZGV4IGFzIHVzaXplOworICAgICAgICBsZXQgZmxhZ19pZHMgPSBhc3NpZ25fZmxhZ19pZHMocGtnLnBhY2thZ2VfbmFtZSwgcGtnLmJvb2xlYW5fZmxhZ3MuaXRlcigpLmNvcGllZCgpKT87CisgICAgICAgIGZvciBwZiBpbiBwa2cuYm9vbGVhbl9mbGFncyB7CisgICAgICAgICAgICBsZXQgZmlkID0gZmxhZ19pZHMKKyAgICAgICAgICAgICAgICAuZ2V0KHBmLm5hbWUoKSkKKyAgICAgICAgICAgICAgICAub2tfb3IoYW55aG93IShmb3JtYXQhKCJtaXNzaW5nIGZsYWcgaWQgZm9yIHt9IiwgcGYubmFtZSgpKSkpPzsKKyAgICAgICAgICAgIGlzX2ZsYWdfcndbc3RhcnRfaW5kZXggKyAoKmZpZCBhcyB1c2l6ZSldID0KKyAgICAgICAgICAgICAgICBwZi5wZXJtaXNzaW9uKCkgPT0gUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxldCBtdXQgbGlzdCA9IEZsYWdJbmZvTGlzdCB7CisgICAgICAgIGhlYWRlcjogbmV3X2hlYWRlcihjb250YWluZXIsIG51bV9mbGFncywgdmVyc2lvbiksCisgICAgICAgIG5vZGVzOiBpc19mbGFnX3J3Lml0ZXIoKS5tYXAofCZyd3wgRmxhZ0luZm9Ob2RlOjpjcmVhdGUocncpKS5jb2xsZWN0KCksCisgICAgfTsKKworICAgIC8vIGluaXRpYWxpemUgYWxsIGhlYWRlciBmaWVsZHMKKyAgICBsaXN0LmhlYWRlci5ib29sZWFuX2ZsYWdfb2Zmc2V0ID0gbGlzdC5oZWFkZXIuaW50b19ieXRlcygpLmxlbigpIGFzIHUzMjsKKyAgICBsZXQgYnl0ZXNfcGVyX25vZGUgPSBGbGFnSW5mb05vZGU6OmNyZWF0ZShmYWxzZSkuaW50b19ieXRlcygpLmxlbigpIGFzIHUzMjsKKyAgICBsaXN0LmhlYWRlci5maWxlX3NpemUgPSBsaXN0LmhlYWRlci5ib29sZWFuX2ZsYWdfb2Zmc2V0ICsgbnVtX2ZsYWdzICogYnl0ZXNfcGVyX25vZGU7CisKKyAgICBPayhsaXN0KQorfQorCisjW2NmZyh0ZXN0KV0KK21vZCB0ZXN0cyB7CisgICAgdXNlIHN1cGVyOjoqOworICAgIHVzZSBjcmF0ZTo6c3RvcmFnZTo6e2dyb3VwX2ZsYWdzX2J5X3BhY2thZ2UsIHRlc3RzOjpwYXJzZV9hbGxfdGVzdF9mbGFnc307CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjpERUZBVUxUX0ZJTEVfVkVSU0lPTjsKKworICAgIHB1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdF9mcm9tX3NvdXJjZSgpIC0+IFJlc3VsdDxGbGFnSW5mb0xpc3Q+IHsKKyAgICAgICAgbGV0IGNhY2hlcyA9IHBhcnNlX2FsbF90ZXN0X2ZsYWdzKCk7CisgICAgICAgIGxldCBwYWNrYWdlcyA9IGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2UoY2FjaGVzLml0ZXIoKSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgICAgICBjcmVhdGVfZmxhZ19pbmZvKCJtb2NrdXAiLCAmcGFja2FnZXMsIERFRkFVTFRfRklMRV9WRVJTSU9OKQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgZmxhZyBpbmZvIGNyZWF0aW9uIGFuZCBlYWNoIGZpZWxkCisgICAgZm4gdGVzdF9saXN0X2NvbnRlbnRzKCkgeworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdF9mcm9tX3NvdXJjZSgpOworICAgICAgICBhc3NlcnQhKGZsYWdfaW5mb19saXN0LmlzX29rKCkpOworICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ19pbmZvX2xpc3QgPQorICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgYXNzZXJ0X2VxIShmbGFnX2luZm9fbGlzdC51bndyYXAoKSwgZXhwZWN0ZWRfZmxhZ19pbmZvX2xpc3QpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3RhYmxlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdGFibGUucnMKaW5kZXggYTk3MTIxMS4uM2IyNDVhNyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdGFibGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdGFibGUucnMKQEAgLTE2LDE2ICsxNiwxNSBAQAogCiB1c2UgY3JhdGU6OmNvbW1hbmRzOjphc3NpZ25fZmxhZ19pZHM7CiB1c2UgY3JhdGU6OnN0b3JhZ2U6OkZsYWdQYWNrYWdlOwotdXNlIGFjb25maWdfcHJvdG9zOjpQcm90b0ZsYWdQZXJtaXNzaW9uOwordXNlIGFjb25maWdfcHJvdG9zOjp7UHJvdG9GbGFnUGVybWlzc2lvbiwgUHJvdG9GbGFnU3RhdGV9OwogdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7CiAgICAgZ2V0X3RhYmxlX3NpemUsIEZsYWdUYWJsZSwgRmxhZ1RhYmxlSGVhZGVyLCBGbGFnVGFibGVOb2RlLCBTdG9yYWdlRmlsZVR5cGUsIFN0b3JlZEZsYWdUeXBlLAotICAgIEZJTEVfVkVSU0lPTiwKIH07CiB1c2UgYW55aG93Ojp7YW55aG93LCBSZXN1bHR9OwogCi1mbiBuZXdfaGVhZGVyKGNvbnRhaW5lcjogJnN0ciwgbnVtX2ZsYWdzOiB1MzIpIC0+IEZsYWdUYWJsZUhlYWRlciB7CitmbiBuZXdfaGVhZGVyKGNvbnRhaW5lcjogJnN0ciwgbnVtX2ZsYWdzOiB1MzIsIHZlcnNpb246IHUzMikgLT4gRmxhZ1RhYmxlSGVhZGVyIHsKICAgICBGbGFnVGFibGVIZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiBGSUxFX1ZFUlNJT04sCisgICAgICAgIHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKGNvbnRhaW5lciksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpGbGFnTWFwIGFzIHU4LAogICAgICAgICBmaWxlX3NpemU6IDAsCkBAIC02Myw5ICs2MiwxOSBAQAogICAgIH0KIAogICAgIGZuIGNyZWF0ZV9ub2RlcyhwYWNrYWdlOiAmRmxhZ1BhY2thZ2UsIG51bV9idWNrZXRzOiB1MzIpIC0+IFJlc3VsdDxWZWM8U2VsZj4+IHsKKyAgICAgICAgLy8gRXhjbHVkZSBzeXN0ZW0vdmVuZG9yL3Byb2R1Y3QgZmxhZ3MgdGhhdCBhcmUgUk8rZGlzYWJsZWQuCisgICAgICAgIGxldCBtdXQgZmlsdGVyZWRfcGFja2FnZSA9IHBhY2thZ2UuY2xvbmUoKTsKKyAgICAgICAgZmlsdGVyZWRfcGFja2FnZS5ib29sZWFuX2ZsYWdzLnJldGFpbih8ZnwgeworICAgICAgICAgICAgISgoZi5jb250YWluZXIgPT0gU29tZSgic3lzdGVtIi50b19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICB8fCBmLmNvbnRhaW5lciA9PSBTb21lKCJ2ZW5kb3IiLnRvX3N0cmluZygpKQorICAgICAgICAgICAgICAgIHx8IGYuY29udGFpbmVyID09IFNvbWUoInByb2R1Y3QiLnRvX3N0cmluZygpKSkKKyAgICAgICAgICAgICAgICAmJiBmLnBlcm1pc3Npb24gPT0gU29tZShQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFkuaW50bygpKQorICAgICAgICAgICAgICAgICYmIGYuc3RhdGUgPT0gU29tZShQcm90b0ZsYWdTdGF0ZTo6RElTQUJMRUQuaW50bygpKSkKKyAgICAgICAgfSk7CisKICAgICAgICAgbGV0IGZsYWdfaWRzID0KLSAgICAgICAgICAgIGFzc2lnbl9mbGFnX2lkcyhwYWNrYWdlLnBhY2thZ2VfbmFtZSwgcGFja2FnZS5ib29sZWFuX2ZsYWdzLml0ZXIoKS5jb3BpZWQoKSk/OwotICAgICAgICBwYWNrYWdlCisgICAgICAgICAgICBhc3NpZ25fZmxhZ19pZHMocGFja2FnZS5wYWNrYWdlX25hbWUsIGZpbHRlcmVkX3BhY2thZ2UuYm9vbGVhbl9mbGFncy5pdGVyKCkuY29waWVkKCkpPzsKKyAgICAgICAgZmlsdGVyZWRfcGFja2FnZQogICAgICAgICAgICAgLmJvb2xlYW5fZmxhZ3MKICAgICAgICAgICAgIC5pdGVyKCkKICAgICAgICAgICAgIC5tYXAofCZwZnwgewpAQCAtODYsMTIgKzk1LDE2IEBACiAgICAgfQogfQogCi1wdWIgZm4gY3JlYXRlX2ZsYWdfdGFibGUoY29udGFpbmVyOiAmc3RyLCBwYWNrYWdlczogJltGbGFnUGFja2FnZV0pIC0+IFJlc3VsdDxGbGFnVGFibGU+IHsKK3B1YiBmbiBjcmVhdGVfZmxhZ190YWJsZSgKKyAgICBjb250YWluZXI6ICZzdHIsCisgICAgcGFja2FnZXM6ICZbRmxhZ1BhY2thZ2VdLAorICAgIHZlcnNpb246IHUzMiwKKykgLT4gUmVzdWx0PEZsYWdUYWJsZT4gewogICAgIC8vIGNyZWF0ZSB0YWJsZQogICAgIGxldCBudW1fZmxhZ3MgPSBwYWNrYWdlcy5pdGVyKCkubWFwKHxwa2d8IHBrZy5ib29sZWFuX2ZsYWdzLmxlbigpIGFzIHUzMikuc3VtKCk7CiAgICAgbGV0IG51bV9idWNrZXRzID0gZ2V0X3RhYmxlX3NpemUobnVtX2ZsYWdzKT87CiAKLSAgICBsZXQgbXV0IGhlYWRlciA9IG5ld19oZWFkZXIoY29udGFpbmVyLCBudW1fZmxhZ3MpOworICAgIGxldCBtdXQgaGVhZGVyID0gbmV3X2hlYWRlcihjb250YWluZXIsIG51bV9mbGFncywgdmVyc2lvbik7CiAgICAgbGV0IG11dCBidWNrZXRzID0gdmVjIVtOb25lOyBudW1fYnVja2V0cyBhcyB1c2l6ZV07CiAgICAgbGV0IG11dCBub2RlX3dyYXBwZXJzID0gcGFja2FnZXMKICAgICAgICAgLml0ZXIoKQpAQCAtMTM4LDEzICsxNTEsMTUgQEAKIAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgeworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6REVGQVVMVF9GSUxFX1ZFUlNJT047CisKICAgICB1c2Ugc3VwZXI6Oio7CiAgICAgdXNlIGNyYXRlOjpzdG9yYWdlOjp7Z3JvdXBfZmxhZ3NfYnlfcGFja2FnZSwgdGVzdHM6OnBhcnNlX2FsbF90ZXN0X2ZsYWdzfTsKIAogICAgIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGVfZnJvbV9zb3VyY2UoKSAtPiBSZXN1bHQ8RmxhZ1RhYmxlPiB7CiAgICAgICAgIGxldCBjYWNoZXMgPSBwYXJzZV9hbGxfdGVzdF9mbGFncygpOwotICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCkpOwotICAgICAgICBjcmVhdGVfZmxhZ190YWJsZSgibW9ja3VwIiwgJnBhY2thZ2VzKQorICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCksIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgY3JlYXRlX2ZsYWdfdGFibGUoIm1vY2t1cCIsICZwYWNrYWdlcywgREVGQVVMVF9GSUxFX1ZFUlNJT04pCiAgICAgfQogCiAgICAgI1t0ZXN0XQpAQCAtMTUyLDcgKzE2Nyw4IEBACiAgICAgZm4gdGVzdF90YWJsZV9jb250ZW50cygpIHsKICAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlX2Zyb21fc291cmNlKCk7CiAgICAgICAgIGFzc2VydCEoZmxhZ190YWJsZS5pc19vaygpKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX2ZsYWdfdGFibGUgPSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ190YWJsZSA9CisgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGFzc2VydF9lcSEoZmxhZ190YWJsZS51bndyYXAoKSwgZXhwZWN0ZWRfZmxhZ190YWJsZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdmFsdWUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ192YWx1ZS5ycwppbmRleCBjMTViYTU0Li4zY2ZhNDQ3IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ192YWx1ZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ192YWx1ZS5ycwpAQCAtMTYsMTMgKzE2LDEzIEBACiAKIHVzZSBjcmF0ZTo6Y29tbWFuZHM6OmFzc2lnbl9mbGFnX2lkczsKIHVzZSBjcmF0ZTo6c3RvcmFnZTo6RmxhZ1BhY2thZ2U7Ci11c2UgYWNvbmZpZ19wcm90b3M6OlByb3RvRmxhZ1N0YXRlOwotdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7RmxhZ1ZhbHVlSGVhZGVyLCBGbGFnVmFsdWVMaXN0LCBTdG9yYWdlRmlsZVR5cGUsIEZJTEVfVkVSU0lPTn07Cit1c2UgYWNvbmZpZ19wcm90b3M6OntQcm90b0ZsYWdQZXJtaXNzaW9uLCBQcm90b0ZsYWdTdGF0ZX07Cit1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OntGbGFnVmFsdWVIZWFkZXIsIEZsYWdWYWx1ZUxpc3QsIFN0b3JhZ2VGaWxlVHlwZX07CiB1c2UgYW55aG93Ojp7YW55aG93LCBSZXN1bHR9OwogCi1mbiBuZXdfaGVhZGVyKGNvbnRhaW5lcjogJnN0ciwgbnVtX2ZsYWdzOiB1MzIpIC0+IEZsYWdWYWx1ZUhlYWRlciB7CitmbiBuZXdfaGVhZGVyKGNvbnRhaW5lcjogJnN0ciwgbnVtX2ZsYWdzOiB1MzIsIHZlcnNpb246IHUzMikgLT4gRmxhZ1ZhbHVlSGVhZGVyIHsKICAgICBGbGFnVmFsdWVIZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiBGSUxFX1ZFUlNJT04sCisgICAgICAgIHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKGNvbnRhaW5lciksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpGbGFnVmFsIGFzIHU4LAogICAgICAgICBmaWxlX3NpemU6IDAsCkBAIC0zMSwxNiArMzEsMjcgQEAKICAgICB9CiB9CiAKLXB1YiBmbiBjcmVhdGVfZmxhZ192YWx1ZShjb250YWluZXI6ICZzdHIsIHBhY2thZ2VzOiAmW0ZsYWdQYWNrYWdlXSkgLT4gUmVzdWx0PEZsYWdWYWx1ZUxpc3Q+IHsKLSAgICAvLyBjcmVhdGUgbGlzdAotICAgIGxldCBudW1fZmxhZ3MgPSBwYWNrYWdlcy5pdGVyKCkubWFwKHxwa2d8IHBrZy5ib29sZWFuX2ZsYWdzLmxlbigpIGFzIHUzMikuc3VtKCk7Ci0KK3B1YiBmbiBjcmVhdGVfZmxhZ192YWx1ZSgKKyAgICBjb250YWluZXI6ICZzdHIsCisgICAgcGFja2FnZXM6ICZbRmxhZ1BhY2thZ2VdLAorICAgIHZlcnNpb246IHUzMiwKKykgLT4gUmVzdWx0PEZsYWdWYWx1ZUxpc3Q+IHsKKyAgICAvLyBFeGNsdWRlIHN5c3RlbS92ZW5kb3IvcHJvZHVjdCBmbGFncyB0aGF0IGFyZSBSTytkaXNhYmxlZC4KKyAgICBsZXQgbXV0IGZpbHRlcmVkX3BhY2thZ2VzID0gcGFja2FnZXMudG9fdmVjKCk7CisgICAgaWYgY29udGFpbmVyID09ICJzeXN0ZW0iIHx8IGNvbnRhaW5lciA9PSAidmVuZG9yIiB8fCBjb250YWluZXIgPT0gInByb2R1Y3QiIHsKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gZmlsdGVyZWRfcGFja2FnZXMuaXRlcl9tdXQoKSB7CisgICAgICAgICAgICBwYWNrYWdlLmJvb2xlYW5fZmxhZ3MucmV0YWluKHxifCB7CisgICAgICAgICAgICAgICAgIShiLnN0YXRlID09IFNvbWUoUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVELmludG8oKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgYi5wZXJtaXNzaW9uID09IFNvbWUoUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLmludG8oKSkpCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBsZXQgbnVtX2ZsYWdzID0gZmlsdGVyZWRfcGFja2FnZXMuaXRlcigpLm1hcCh8cGtnfCBwa2cuYm9vbGVhbl9mbGFncy5sZW4oKSBhcyB1MzIpLnN1bSgpOwogICAgIGxldCBtdXQgbGlzdCA9IEZsYWdWYWx1ZUxpc3QgewotICAgICAgICBoZWFkZXI6IG5ld19oZWFkZXIoY29udGFpbmVyLCBudW1fZmxhZ3MpLAorICAgICAgICBoZWFkZXI6IG5ld19oZWFkZXIoY29udGFpbmVyLCBudW1fZmxhZ3MsIHZlcnNpb24pLAogICAgICAgICBib29sZWFuczogdmVjIVtmYWxzZTsgbnVtX2ZsYWdzIGFzIHVzaXplXSwKICAgICB9OwotCi0gICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5pdGVyKCkgeworICAgIGZvciBwa2cgaW4gZmlsdGVyZWRfcGFja2FnZXMgewogICAgICAgICBsZXQgc3RhcnRfaW5kZXggPSBwa2cuYm9vbGVhbl9zdGFydF9pbmRleCBhcyB1c2l6ZTsKICAgICAgICAgbGV0IGZsYWdfaWRzID0gYXNzaWduX2ZsYWdfaWRzKHBrZy5wYWNrYWdlX25hbWUsIHBrZy5ib29sZWFuX2ZsYWdzLml0ZXIoKS5jb3BpZWQoKSk/OwogICAgICAgICBmb3IgcGYgaW4gcGtnLmJvb2xlYW5fZmxhZ3MuaXRlcigpIHsKQEAgLTYxLDEzICs3MiwxNSBAQAogCiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjpERUZBVUxUX0ZJTEVfVkVSU0lPTjsKKwogICAgIHVzZSBzdXBlcjo6KjsKICAgICB1c2UgY3JhdGU6OnN0b3JhZ2U6Ontncm91cF9mbGFnc19ieV9wYWNrYWdlLCB0ZXN0czo6cGFyc2VfYWxsX3Rlc3RfZmxhZ3N9OwogCiAgICAgcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdF9mcm9tX3NvdXJjZSgpIC0+IFJlc3VsdDxGbGFnVmFsdWVMaXN0PiB7CiAgICAgICAgIGxldCBjYWNoZXMgPSBwYXJzZV9hbGxfdGVzdF9mbGFncygpOwotICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCkpOwotICAgICAgICBjcmVhdGVfZmxhZ192YWx1ZSgibW9ja3VwIiwgJnBhY2thZ2VzKQorICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCksIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgY3JlYXRlX2ZsYWdfdmFsdWUoIm1vY2t1cCIsICZwYWNrYWdlcywgREVGQVVMVF9GSUxFX1ZFUlNJT04pCiAgICAgfQogCiAgICAgI1t0ZXN0XQpAQCAtNzYsNyArODksNyBAQAogICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0X2Zyb21fc291cmNlKCk7CiAgICAgICAgIGFzc2VydCEoZmxhZ192YWx1ZV9saXN0LmlzX29rKCkpOwogICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ192YWx1ZV9saXN0ID0KLSAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBhc3NlcnRfZXEhKGZsYWdfdmFsdWVfbGlzdC51bndyYXAoKSwgZXhwZWN0ZWRfZmxhZ192YWx1ZV9saXN0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvbW9kLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL21vZC5ycwppbmRleCA3MzMzOWYyLi42MWU2NWQxIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvbW9kLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9tb2QucnMKQEAgLTE0LDIzICsxNCwyNyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAorcHViIG1vZCBmbGFnX2luZm87CiBwdWIgbW9kIGZsYWdfdGFibGU7CiBwdWIgbW9kIGZsYWdfdmFsdWU7CiBwdWIgbW9kIHBhY2thZ2VfdGFibGU7CiAKLXVzZSBhbnlob3c6Onthbnlob3csIFJlc3VsdH07Cit1c2UgYW55aG93OjpSZXN1bHQ7CiB1c2Ugc3RkOjpjb2xsZWN0aW9uczo6e0hhc2hNYXAsIEhhc2hTZXR9OwogCit1c2UgY3JhdGU6OmNvbW1hbmRzOjpjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50OwogdXNlIGNyYXRlOjpzdG9yYWdlOjp7Ci0gICAgZmxhZ190YWJsZTo6Y3JlYXRlX2ZsYWdfdGFibGUsIGZsYWdfdmFsdWU6OmNyZWF0ZV9mbGFnX3ZhbHVlLAorICAgIGZsYWdfaW5mbzo6Y3JlYXRlX2ZsYWdfaW5mbywgZmxhZ190YWJsZTo6Y3JlYXRlX2ZsYWdfdGFibGUsIGZsYWdfdmFsdWU6OmNyZWF0ZV9mbGFnX3ZhbHVlLAogICAgIHBhY2thZ2VfdGFibGU6OmNyZWF0ZV9wYWNrYWdlX3RhYmxlLAogfTsKLXVzZSBhY29uZmlnX3Byb3Rvczo6e1Byb3RvUGFyc2VkRmxhZywgUHJvdG9QYXJzZWRGbGFnc307Cit1c2UgYWNvbmZpZ19wcm90b3M6OntQcm90b0ZsYWdQZXJtaXNzaW9uLCBQcm90b0ZsYWdTdGF0ZSwgUHJvdG9QYXJzZWRGbGFnLCBQcm90b1BhcnNlZEZsYWdzfTsKIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6U3RvcmFnZUZpbGVUeXBlOwogCisjW2Rlcml2ZShDbG9uZSldCiBwdWIgc3RydWN0IEZsYWdQYWNrYWdlPCdhPiB7CiAgICAgcHViIHBhY2thZ2VfbmFtZTogJidhIHN0ciwKICAgICBwdWIgcGFja2FnZV9pZDogdTMyLAorICAgIHB1YiBmaW5nZXJwcmludDogdTY0LAogICAgIHB1YiBmbGFnX25hbWVzOiBIYXNoU2V0PCYnYSBzdHI+LAogICAgIHB1YiBib29sZWFuX2ZsYWdzOiBWZWM8JidhIFByb3RvUGFyc2VkRmxhZz4sCiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBib29sZWFuIGZsYWcgaW4gdGhpcyBhY29uZmlnIHBhY2thZ2UgYW1vbmcgYWxsIGJvb2xlYW4KQEAgLTQzLDYgKzQ3LDcgQEAKICAgICAgICAgRmxhZ1BhY2thZ2UgewogICAgICAgICAgICAgcGFja2FnZV9uYW1lLAogICAgICAgICAgICAgcGFja2FnZV9pZCwKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiAwLAogICAgICAgICAgICAgZmxhZ19uYW1lczogSGFzaFNldDo6bmV3KCksCiAgICAgICAgICAgICBib29sZWFuX2ZsYWdzOiB2ZWMhW10sCiAgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAwLApAQCAtNTYsNyArNjEsNyBAQAogICAgIH0KIH0KIAotcHViIGZuIGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2U8J2EsIEk+KHBhcnNlZF9mbGFnc192ZWNfaXRlcjogSSkgLT4gVmVjPEZsYWdQYWNrYWdlPCdhPj4KK3B1YiBmbiBncm91cF9mbGFnc19ieV9wYWNrYWdlPCdhLCBJPihwYXJzZWRfZmxhZ3NfdmVjX2l0ZXI6IEksIHZlcnNpb246IHUzMikgLT4gVmVjPEZsYWdQYWNrYWdlPCdhPj4KIHdoZXJlCiAgICAgSTogSXRlcmF0b3I8SXRlbSA9ICYnYSBQcm90b1BhcnNlZEZsYWdzPiwKIHsKQEAgLTY5LDE1ICs3NCwzMyBAQAogICAgICAgICAgICAgaWYgaW5kZXggPT0gcGFja2FnZXMubGVuKCkgewogICAgICAgICAgICAgICAgIHBhY2thZ2VzLnB1c2goRmxhZ1BhY2thZ2U6Om5ldyhwYXJzZWRfZmxhZy5wYWNrYWdlKCksIGluZGV4IGFzIHUzMikpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBFeGNsdWRlIHN5c3RlbS92ZW5kb3IvcHJvZHVjdCBmbGFncyB0aGF0IGFyZSBSTytkaXNhYmxlZC4KKyAgICAgICAgICAgIGlmIChwYXJzZWRfZmxhZy5jb250YWluZXIgPT0gU29tZSgic3lzdGVtIi50b19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICB8fCBwYXJzZWRfZmxhZy5jb250YWluZXIgPT0gU29tZSgidmVuZG9yIi50b19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICB8fCBwYXJzZWRfZmxhZy5jb250YWluZXIgPT0gU29tZSgicHJvZHVjdCIudG9fc3RyaW5nKCkpKQorICAgICAgICAgICAgICAgICYmIHBhcnNlZF9mbGFnLnBlcm1pc3Npb24gPT0gU29tZShQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFkuaW50bygpKQorICAgICAgICAgICAgICAgICYmIHBhcnNlZF9mbGFnLnN0YXRlID09IFNvbWUoUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVELmludG8oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgcGFja2FnZXNbaW5kZXhdLmluc2VydChwYXJzZWRfZmxhZyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBjYWNsdWF0ZSBib29sZWFuIGZsYWcgc3RhcnQgaW5kZXggZm9yIGVhY2ggcGFja2FnZQorICAgIC8vIENhbGN1bGF0ZSBib29sZWFuIGZsYWcgc3RhcnQgaW5kZXggZm9yIGVhY2ggcGFja2FnZQogICAgIGxldCBtdXQgYm9vbGVhbl9zdGFydF9pbmRleCA9IDA7CiAgICAgZm9yIHAgaW4gcGFja2FnZXMuaXRlcl9tdXQoKSB7CiAgICAgICAgIHAuYm9vbGVhbl9zdGFydF9pbmRleCA9IGJvb2xlYW5fc3RhcnRfaW5kZXg7CiAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXggKz0gcC5ib29sZWFuX2ZsYWdzLmxlbigpIGFzIHUzMjsKKworICAgICAgICBpZiB2ZXJzaW9uID49IDIgeworICAgICAgICAgICAgbGV0IG11dCBmbGFnX25hbWVzX3ZlYyA9CisgICAgICAgICAgICAgICAgcC5mbGFnX25hbWVzLmNsb25lKCkuaW50b19pdGVyKCkubWFwKFN0cmluZzo6ZnJvbSkuY29sbGVjdDo6PFZlYzxfPj4oKTsKKyAgICAgICAgICAgIGxldCBmaW5nZXJwcmludCA9IGNvbXB1dGVfZmxhZ3NfZmluZ2VycHJpbnQoJm11dCBmbGFnX25hbWVzX3ZlYyk7CisgICAgICAgICAgICBwLmZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwYWNrYWdlcwpAQCAtODcsMzEgKzExMCwzNyBAQAogICAgIGNvbnRhaW5lcjogJnN0ciwKICAgICBwYXJzZWRfZmxhZ3NfdmVjX2l0ZXI6IEksCiAgICAgZmlsZTogJlN0b3JhZ2VGaWxlVHlwZSwKKyAgICB2ZXJzaW9uOiB1MzIsCiApIC0+IFJlc3VsdDxWZWM8dTg+Pgogd2hlcmUKICAgICBJOiBJdGVyYXRvcjxJdGVtID0gJidhIFByb3RvUGFyc2VkRmxhZ3M+LAogewotICAgIGxldCBwYWNrYWdlcyA9IGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2UocGFyc2VkX2ZsYWdzX3ZlY19pdGVyKTsKKyAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKHBhcnNlZF9mbGFnc192ZWNfaXRlciwgdmVyc2lvbik7CiAKICAgICBtYXRjaCBmaWxlIHsKICAgICAgICAgU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwID0+IHsKLSAgICAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3BhY2thZ2VfdGFibGUoY29udGFpbmVyLCAmcGFja2FnZXMpPzsKKyAgICAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3BhY2thZ2VfdGFibGUoY29udGFpbmVyLCAmcGFja2FnZXMsIHZlcnNpb24pPzsKICAgICAgICAgICAgIE9rKHBhY2thZ2VfdGFibGUuaW50b19ieXRlcygpKQogICAgICAgICB9CiAgICAgICAgIFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ01hcCA9PiB7Ci0gICAgICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV9mbGFnX3RhYmxlKGNvbnRhaW5lciwgJnBhY2thZ2VzKT87CisgICAgICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV9mbGFnX3RhYmxlKGNvbnRhaW5lciwgJnBhY2thZ2VzLCB2ZXJzaW9uKT87CiAgICAgICAgICAgICBPayhmbGFnX3RhYmxlLmludG9fYnl0ZXMoKSkKICAgICAgICAgfQogICAgICAgICBTdG9yYWdlRmlsZVR5cGU6OkZsYWdWYWwgPT4gewotICAgICAgICAgICAgbGV0IGZsYWdfdmFsdWUgPSBjcmVhdGVfZmxhZ192YWx1ZShjb250YWluZXIsICZwYWNrYWdlcyk/OworICAgICAgICAgICAgbGV0IGZsYWdfdmFsdWUgPSBjcmVhdGVfZmxhZ192YWx1ZShjb250YWluZXIsICZwYWNrYWdlcywgdmVyc2lvbik/OwogICAgICAgICAgICAgT2soZmxhZ192YWx1ZS5pbnRvX2J5dGVzKCkpCiAgICAgICAgIH0KLSAgICAgICAgXyA9PiBFcnIoYW55aG93ISgiYWNvbmZpZyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjcmVhdGlvbiBvZiB0aGlzIHN0b3JhZ2UgZmlsZSB0eXBlIikpLAorICAgICAgICBTdG9yYWdlRmlsZVR5cGU6OkZsYWdJbmZvID0+IHsKKyAgICAgICAgICAgIGxldCBmbGFnX2luZm8gPSBjcmVhdGVfZmxhZ19pbmZvKGNvbnRhaW5lciwgJnBhY2thZ2VzLCB2ZXJzaW9uKT87CisgICAgICAgICAgICBPayhmbGFnX2luZm8uaW50b19ieXRlcygpKQorICAgICAgICB9CiAgICAgfQogfQogCiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjpERUZBVUxUX0ZJTEVfVkVSU0lPTjsKKwogICAgIHVzZSBzdXBlcjo6KjsKICAgICB1c2UgY3JhdGU6OklucHV0OwogCkBAIC0xNTQsNiArMTgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcjogQm94OjpuZXcodmFsdWVfY29udGVudCksCiAgICAgICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgICAgICBjcmF0ZTo6Y29tbWFuZHM6OkRFRkFVTFRfRkxBR19QRVJNSVNTSU9OLAorICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7CiAgICAgICAgICAgICAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6dHJ5X2Zyb21fYmluYXJ5X3Byb3RvKCZieXRlcykudW53cmFwKCkKQEAgLTE2NCw3ICsxOTQsNyBAQAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ZsYWdfcGFja2FnZSgpIHsKICAgICAgICAgbGV0IGNhY2hlcyA9IHBhcnNlX2FsbF90ZXN0X2ZsYWdzKCk7Ci0gICAgICAgIGxldCBwYWNrYWdlcyA9IGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2UoY2FjaGVzLml0ZXIoKSk7CisgICAgICAgIGxldCBwYWNrYWdlcyA9IGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2UoY2FjaGVzLml0ZXIoKSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogCiAgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuaXRlcigpIHsKICAgICAgICAgICAgIGxldCBwa2dfbmFtZSA9IHBrZy5wYWNrYWdlX25hbWU7CkBAIC0xODQsNiArMjE0LDcgQEAKICAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1swXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJkaXNhYmxlZF9ydyIpKTsKICAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1swXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX3JvIikpOwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzBdLmJvb2xlYW5fc3RhcnRfaW5kZXgsIDApOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzBdLmZpbmdlcnByaW50LCAwKTsKIAogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzFdLnBhY2thZ2VfbmFtZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1sxXS5wYWNrYWdlX2lkLCAxKTsKQEAgLTE5Miw2ICsyMjMsNyBAQAogICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzFdLmZsYWdfbmFtZXMuY29udGFpbnMoImRpc2FibGVkX3J3IikpOwogICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzFdLmZsYWdfbmFtZXMuY29udGFpbnMoImVuYWJsZWRfZml4ZWRfcm8iKSk7CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMV0uYm9vbGVhbl9zdGFydF9pbmRleCwgMyk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMF0uZmluZ2VycHJpbnQsIDApOwogCiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0ucGFja2FnZV9uYW1lLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpOwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzJdLnBhY2thZ2VfaWQsIDIpOwpAQCAtMTk5LDUgKzIzMSw0OSBAQAogICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzJdLmZsYWdfbmFtZXMuY29udGFpbnMoImVuYWJsZWRfcnciKSk7CiAgICAgICAgIGFzc2VydCEocGFja2FnZXNbMl0uZmxhZ19uYW1lcy5jb250YWlucygiZW5hYmxlZF9maXhlZF9ybyIpKTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5ib29sZWFuX3N0YXJ0X2luZGV4LCA2KTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5maW5nZXJwcmludCwgMCk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfZmxhZ19wYWNrYWdlX3dpdGhfZmluZ2VycHJpbnQoKSB7CisgICAgICAgIGxldCBjYWNoZXMgPSBwYXJzZV9hbGxfdGVzdF9mbGFncygpOworICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCksIDIpOworCisgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuaXRlcigpIHsKKyAgICAgICAgICAgIGxldCBwa2dfbmFtZSA9IHBrZy5wYWNrYWdlX25hbWU7CisgICAgICAgICAgICBhc3NlcnRfZXEhKHBrZy5mbGFnX25hbWVzLmxlbigpLCBwa2cuYm9vbGVhbl9mbGFncy5sZW4oKSk7CisgICAgICAgICAgICBmb3IgcGYgaW4gcGtnLmJvb2xlYW5fZmxhZ3MuaXRlcigpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQhKHBrZy5mbGFnX25hbWVzLmNvbnRhaW5zKHBmLm5hbWUoKSkpOworICAgICAgICAgICAgICAgIGFzc2VydF9lcSEocGYucGFja2FnZSgpLCBwa2dfbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzLmxlbigpLCAzKTsKKworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzBdLnBhY2thZ2VfbmFtZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1swXS5wYWNrYWdlX2lkLCAwKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1swXS5mbGFnX25hbWVzLmxlbigpLCAzKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1swXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX3J3IikpOworICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzBdLmZsYWdfbmFtZXMuY29udGFpbnMoImRpc2FibGVkX3J3IikpOworICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzBdLmZsYWdfbmFtZXMuY29udGFpbnMoImVuYWJsZWRfcm8iKSk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMF0uYm9vbGVhbl9zdGFydF9pbmRleCwgMCk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMF0uZmluZ2VycHJpbnQsIDE1MjQ4OTQ4NTEwNTkwMTU4MDg2dTY0KTsKKworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzFdLnBhY2thZ2VfbmFtZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1sxXS5wYWNrYWdlX2lkLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmxlbigpLCAzKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX3JvIikpOworICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzFdLmZsYWdfbmFtZXMuY29udGFpbnMoImRpc2FibGVkX3J3IikpOworICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzFdLmZsYWdfbmFtZXMuY29udGFpbnMoImVuYWJsZWRfZml4ZWRfcm8iKSk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMV0uYm9vbGVhbl9zdGFydF9pbmRleCwgMyk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMV0uZmluZ2VycHJpbnQsIDQ0MzE5NDA1MDIyNzQ4NTc5NjR1NjQpOworCisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0ucGFja2FnZV9uYW1lLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzJdLnBhY2thZ2VfaWQsIDIpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzJdLmZsYWdfbmFtZXMubGVuKCksIDIpOworICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzJdLmZsYWdfbmFtZXMuY29udGFpbnMoImVuYWJsZWRfcnciKSk7CisgICAgICAgIGFzc2VydCEocGFja2FnZXNbMl0uZmxhZ19uYW1lcy5jb250YWlucygiZW5hYmxlZF9maXhlZF9ybyIpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5ib29sZWFuX3N0YXJ0X2luZGV4LCA2KTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5maW5nZXJwcmludCwgMTYyMzMyMjk5MTc3MTE2MjIzNzV1NjQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9wYWNrYWdlX3RhYmxlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL3BhY2thZ2VfdGFibGUucnMKaW5kZXggYzUzNjAyZi4uNTNkYWE3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL3BhY2thZ2VfdGFibGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL3BhY2thZ2VfdGFibGUucnMKQEAgLTE4LDE0ICsxOCwxMyBAQAogCiB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnsKICAgICBnZXRfdGFibGVfc2l6ZSwgUGFja2FnZVRhYmxlLCBQYWNrYWdlVGFibGVIZWFkZXIsIFBhY2thZ2VUYWJsZU5vZGUsIFN0b3JhZ2VGaWxlVHlwZSwKLSAgICBGSUxFX1ZFUlNJT04sCiB9OwogCiB1c2UgY3JhdGU6OnN0b3JhZ2U6OkZsYWdQYWNrYWdlOwogCi1mbiBuZXdfaGVhZGVyKGNvbnRhaW5lcjogJnN0ciwgbnVtX3BhY2thZ2VzOiB1MzIpIC0+IFBhY2thZ2VUYWJsZUhlYWRlciB7CitmbiBuZXdfaGVhZGVyKGNvbnRhaW5lcjogJnN0ciwgbnVtX3BhY2thZ2VzOiB1MzIsIHZlcnNpb246IHUzMikgLT4gUGFja2FnZVRhYmxlSGVhZGVyIHsKICAgICBQYWNrYWdlVGFibGVIZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiBGSUxFX1ZFUlNJT04sCisgICAgICAgIHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKGNvbnRhaW5lciksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwIGFzIHU4LAogICAgICAgICBmaWxlX3NpemU6IDAsCkBAIC00OCw2ICs0Nyw3IEBACiAgICAgICAgIGxldCBub2RlID0gUGFja2FnZVRhYmxlTm9kZSB7CiAgICAgICAgICAgICBwYWNrYWdlX25hbWU6IFN0cmluZzo6ZnJvbShwYWNrYWdlLnBhY2thZ2VfbmFtZSksCiAgICAgICAgICAgICBwYWNrYWdlX2lkOiBwYWNrYWdlLnBhY2thZ2VfaWQsCisgICAgICAgICAgICBmaW5nZXJwcmludDogcGFja2FnZS5maW5nZXJwcmludCwKICAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IHBhY2thZ2UuYm9vbGVhbl9zdGFydF9pbmRleCwKICAgICAgICAgICAgIG5leHRfb2Zmc2V0OiBOb25lLAogICAgICAgICB9OwpAQCAtNTYsMjAgKzU2LDI2IEBACiAgICAgfQogfQogCi1wdWIgZm4gY3JlYXRlX3BhY2thZ2VfdGFibGUoY29udGFpbmVyOiAmc3RyLCBwYWNrYWdlczogJltGbGFnUGFja2FnZV0pIC0+IFJlc3VsdDxQYWNrYWdlVGFibGU+IHsKK3B1YiBmbiBjcmVhdGVfcGFja2FnZV90YWJsZSgKKyAgICBjb250YWluZXI6ICZzdHIsCisgICAgcGFja2FnZXM6ICZbRmxhZ1BhY2thZ2VdLAorICAgIHZlcnNpb246IHUzMiwKKykgLT4gUmVzdWx0PFBhY2thZ2VUYWJsZT4gewogICAgIC8vIGNyZWF0ZSB0YWJsZQogICAgIGxldCBudW1fcGFja2FnZXMgPSBwYWNrYWdlcy5sZW4oKSBhcyB1MzI7CiAgICAgbGV0IG51bV9idWNrZXRzID0gZ2V0X3RhYmxlX3NpemUobnVtX3BhY2thZ2VzKT87Ci0gICAgbGV0IG11dCBoZWFkZXIgPSBuZXdfaGVhZGVyKGNvbnRhaW5lciwgbnVtX3BhY2thZ2VzKTsKKyAgICBsZXQgbXV0IGhlYWRlciA9IG5ld19oZWFkZXIoY29udGFpbmVyLCBudW1fcGFja2FnZXMsIHZlcnNpb24pOwogICAgIGxldCBtdXQgYnVja2V0cyA9IHZlYyFbTm9uZTsgbnVtX2J1Y2tldHMgYXMgdXNpemVdOwotICAgIGxldCBtdXQgbm9kZV93cmFwcGVyczogVmVjPF8+ID0KLSAgICAgICAgcGFja2FnZXMuaXRlcigpLm1hcCh8cGtnfCBQYWNrYWdlVGFibGVOb2RlV3JhcHBlcjo6bmV3KHBrZywgbnVtX2J1Y2tldHMpKS5jb2xsZWN0KCk7CisgICAgbGV0IG11dCBub2RlX3dyYXBwZXJzOiBWZWM8Xz4gPSBwYWNrYWdlcworICAgICAgICAuaXRlcigpCisgICAgICAgIC5tYXAofHBrZzogJkZsYWdQYWNrYWdlPCdfPnwgUGFja2FnZVRhYmxlTm9kZVdyYXBwZXI6Om5ldyhwa2csIG51bV9idWNrZXRzKSkKKyAgICAgICAgLmNvbGxlY3QoKTsKIAogICAgIC8vIGluaXRpYWxpemUgYWxsIGhlYWRlciBmaWVsZHMKICAgICBoZWFkZXIuYnVja2V0X29mZnNldCA9IGhlYWRlci5pbnRvX2J5dGVzKCkubGVuKCkgYXMgdTMyOwogICAgIGhlYWRlci5ub2RlX29mZnNldCA9IGhlYWRlci5idWNrZXRfb2Zmc2V0ICsgbnVtX2J1Y2tldHMgKiA0OwogICAgIGhlYWRlci5maWxlX3NpemUgPSBoZWFkZXIubm9kZV9vZmZzZXQKLSAgICAgICAgKyBub2RlX3dyYXBwZXJzLml0ZXIoKS5tYXAofHh8IHgubm9kZS5pbnRvX2J5dGVzKCkubGVuKCkpLnN1bTo6PHVzaXplPigpIGFzIHUzMjsKKyAgICAgICAgKyBub2RlX3dyYXBwZXJzLml0ZXIoKS5tYXAofHh8IHgubm9kZS5pbnRvX2J5dGVzKHZlcnNpb24pLmxlbigpKS5zdW06Ojx1c2l6ZT4oKSBhcyB1MzI7CiAKICAgICAvLyBzb3J0IG5vZGVfd3JhcHBlcnMgYnkgYnVja2V0IGluZGV4IGZvciBlZmZpY2llbmN5CiAgICAgbm9kZV93cmFwcGVycy5zb3J0X2J5KHxhLCBifCBhLmJ1Y2tldF9pbmRleC5jbXAoJmIuYnVja2V0X2luZGV4KSk7CkBAIC04Nyw3ICs5Myw3IEBACiAgICAgICAgIGlmIGJ1Y2tldHNbbm9kZV9idWNrZXRfaWR4IGFzIHVzaXplXS5pc19ub25lKCkgewogICAgICAgICAgICAgYnVja2V0c1tub2RlX2J1Y2tldF9pZHggYXMgdXNpemVdID0gU29tZShvZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAgIG9mZnNldCArPSBub2RlX3dyYXBwZXJzW2ldLm5vZGUuaW50b19ieXRlcygpLmxlbigpIGFzIHUzMjsKKyAgICAgICAgb2Zmc2V0ICs9IG5vZGVfd3JhcHBlcnNbaV0ubm9kZS5pbnRvX2J5dGVzKHZlcnNpb24pLmxlbigpIGFzIHUzMjsKIAogICAgICAgICBpZiBsZXQgU29tZShpbmRleCkgPSBuZXh0X25vZGVfYnVja2V0X2lkeCB7CiAgICAgICAgICAgICBpZiBpbmRleCA9PSBub2RlX2J1Y2tldF9pZHggewpAQCAtMTA2LDIxICsxMTIsNTkgQEAKIAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgeworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e0RFRkFVTFRfRklMRV9WRVJTSU9OLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTn07CisKICAgICB1c2Ugc3VwZXI6Oio7CiAgICAgdXNlIGNyYXRlOjpzdG9yYWdlOjp7Z3JvdXBfZmxhZ3NfYnlfcGFja2FnZSwgdGVzdHM6OnBhcnNlX2FsbF90ZXN0X2ZsYWdzfTsKIAotICAgIHB1YiBmbiBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlX2Zyb21fc291cmNlKCkgLT4gUmVzdWx0PFBhY2thZ2VUYWJsZT4geworICAgIHB1YiBmbiBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlX2Zyb21fc291cmNlKHZlcnNpb246IHUzMikgLT4gUmVzdWx0PFBhY2thZ2VUYWJsZT4gewogICAgICAgICBsZXQgY2FjaGVzID0gcGFyc2VfYWxsX3Rlc3RfZmxhZ3MoKTsKLSAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpKTsKLSAgICAgICAgY3JlYXRlX3BhY2thZ2VfdGFibGUoIm1vY2t1cCIsICZwYWNrYWdlcykKKyAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpLCB2ZXJzaW9uKTsKKyAgICAgICAgY3JlYXRlX3BhY2thZ2VfdGFibGUoIm1vY2t1cCIsICZwYWNrYWdlcywgdmVyc2lvbikKICAgICB9CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHRhYmxlIGNyZWF0aW9uIGFuZCBlYWNoIGZpZWxkCi0gICAgZm4gdGVzdF90YWJsZV9jb250ZW50cygpIHsKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlX2Zyb21fc291cmNlKCk7Ci0gICAgICAgIGFzc2VydCEocGFja2FnZV90YWJsZS5pc19vaygpKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfdGFibGUgPSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOwotICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfdGFibGUudW53cmFwKCksIGV4cGVjdGVkX3BhY2thZ2VfdGFibGUpOworICAgIGZuIHRlc3RfdGFibGVfY29udGVudHNfZGVmYXVsdF92ZXJzaW9uKCkgeworICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9yZXN1bHQgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlX2Zyb21fc291cmNlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlX3RhYmxlX3Jlc3VsdC5pc19vaygpKTsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBwYWNrYWdlX3RhYmxlX3Jlc3VsdC51bndyYXAoKTsKKworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV90YWJsZSA9CisgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX3RhYmxlLmhlYWRlciwgZXhwZWN0ZWRfcGFja2FnZV90YWJsZS5oZWFkZXIpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfdGFibGUuYnVja2V0cywgZXhwZWN0ZWRfcGFja2FnZV90YWJsZS5idWNrZXRzKTsKKyAgICAgICAgZm9yIChub2RlLCBleHBlY3RlZF9ub2RlKSBpbgorICAgICAgICAgICAgcGFja2FnZV90YWJsZS5ub2Rlcy5pdGVyKCkuemlwKGV4cGVjdGVkX3BhY2thZ2VfdGFibGUubm9kZXMuaXRlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUucGFja2FnZV9uYW1lLCBleHBlY3RlZF9ub2RlLnBhY2thZ2VfbmFtZSk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUucGFja2FnZV9pZCwgZXhwZWN0ZWRfbm9kZS5wYWNrYWdlX2lkKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZS5ib29sZWFuX3N0YXJ0X2luZGV4LCBleHBlY3RlZF9ub2RlLmJvb2xlYW5fc3RhcnRfaW5kZXgpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLm5leHRfb2Zmc2V0LCBleHBlY3RlZF9ub2RlLm5leHRfb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdGFibGUgY3JlYXRpb24gYW5kIGVhY2ggZmllbGQKKyAgICBmbiB0ZXN0X3RhYmxlX2NvbnRlbnRzX21heF92ZXJzaW9uKCkgeworICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9yZXN1bHQgPQorICAgICAgICAgICAgY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZV9mcm9tX3NvdXJjZShNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGFzc2VydCEocGFja2FnZV90YWJsZV9yZXN1bHQuaXNfb2soKSk7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gcGFja2FnZV90YWJsZV9yZXN1bHQudW53cmFwKCk7CisKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfdGFibGUgPQorICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOworCisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV90YWJsZS5oZWFkZXIsIGV4cGVjdGVkX3BhY2thZ2VfdGFibGUuaGVhZGVyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX3RhYmxlLmJ1Y2tldHMsIGV4cGVjdGVkX3BhY2thZ2VfdGFibGUuYnVja2V0cyk7CisgICAgICAgIGZvciAobm9kZSwgZXhwZWN0ZWRfbm9kZSkgaW4KKyAgICAgICAgICAgIHBhY2thZ2VfdGFibGUubm9kZXMuaXRlcigpLnppcChleHBlY3RlZF9wYWNrYWdlX3RhYmxlLm5vZGVzLml0ZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLnBhY2thZ2VfbmFtZSwgZXhwZWN0ZWRfbm9kZS5wYWNrYWdlX25hbWUpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLnBhY2thZ2VfaWQsIGV4cGVjdGVkX25vZGUucGFja2FnZV9pZCk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUuYm9vbGVhbl9zdGFydF9pbmRleCwgZXhwZWN0ZWRfbm9kZS5ib29sZWFuX3N0YXJ0X2luZGV4KTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZS5uZXh0X29mZnNldCwgZXhwZWN0ZWRfbm9kZS5uZXh0X29mZnNldCk7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3Rlc3QucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3Rlc3QucnMKaW5kZXggNzQwOWNkYS4uMTBkYTI1MiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy90ZXN0LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvdGVzdC5ycwpAQCAtMjY2LDYgKzI2Niw3IEBACiAgICAgICAgICAgICAgICAgcmVhZGVyOiBCb3g6Om5ldyhpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvcmVhZF9vbmx5X3Rlc3QudmFsdWVzIikuYXNfc2xpY2UoKSksCiAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgIGNyYXRlOjpjb21tYW5kczo6REVGQVVMVF9GTEFHX1BFUk1JU1NJT04sCisgICAgICAgICAgICB0cnVlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKICAgICAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6dHJ5X2Zyb21fYmluYXJ5X3Byb3RvKCZieXRlcykudW53cmFwKCkKQEAgLTI5MCw2ICsyOTEsMjYgQEAKICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgIGNyYXRlOjpjb21tYW5kczo6REVGQVVMVF9GTEFHX1BFUk1JU1NJT04sCisgICAgICAgICAgICB0cnVlLAorICAgICAgICApCisgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6dHJ5X2Zyb21fYmluYXJ5X3Byb3RvKCZieXRlcykudW53cmFwKCkKKyAgICB9CisKKyAgICBwdWIgZm4gcGFyc2Vfc2Vjb25kX3BhY2thZ2VfZmxhZ3MoKSAtPiBQcm90b1BhcnNlZEZsYWdzIHsKKyAgICAgICAgbGV0IGJ5dGVzID0gY3JhdGU6OmNvbW1hbmRzOjpwYXJzZV9mbGFncygKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnNlY29uZF90ZXN0IiwKKyAgICAgICAgICAgIFNvbWUoInN5c3RlbSIpLAorICAgICAgICAgICAgdmVjIVtJbnB1dCB7CisgICAgICAgICAgICAgICAgc291cmNlOiAidGVzdHMvdGVzdF9zZWNvbmRfcGFja2FnZS5hY29uZmlnIi50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICByZWFkZXI6IEJveDo6bmV3KGluY2x1ZGVfYnl0ZXMhKCIuLi90ZXN0cy90ZXN0X3NlY29uZF9wYWNrYWdlLmFjb25maWciKS5hc19zbGljZSgpKSwKKyAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgdmVjIVtJbnB1dCB7CisgICAgICAgICAgICAgICAgc291cmNlOiAidGVzdHMvdGhpcmQudmFsdWVzIi50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICByZWFkZXI6IEJveDo6bmV3KGluY2x1ZGVfYnl0ZXMhKCIuLi90ZXN0cy90aGlyZC52YWx1ZXMiKS5hc19zbGljZSgpKSwKKyAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgY3JhdGU6OmNvbW1hbmRzOjpERUZBVUxUX0ZMQUdfUEVSTUlTU0lPTiwKKyAgICAgICAgICAgIHRydWUsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcCgpOwogICAgICAgICBhY29uZmlnX3Byb3Rvczo6cGFyc2VkX2ZsYWdzOjp0cnlfZnJvbV9iaW5hcnlfcHJvdG8oJmJ5dGVzKS51bndyYXAoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3MuamF2YS50ZW1wbGF0ZSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzLmphdmEudGVtcGxhdGUKaW5kZXggMzhjOGYxMy4uZDI3OTliMiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3MuamF2YS50ZW1wbGF0ZQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFncy5qYXZhLnRlbXBsYXRlCkBAIC0xOSw0ICsxOSw0IEBACiB7eyAtZW5kaWYgfX0KICAgICBib29sZWFuIHtpdGVtLm1ldGhvZF9uYW1lfSgpOwoge3sgLWVuZGZvciB9fQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzSW1wbC5qYXZhLnRlbXBsYXRlIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3NJbXBsLmphdmEudGVtcGxhdGUKaW5kZXggYmMwMWFhNC4uOGIzZDNlMSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3NJbXBsLmphdmEudGVtcGxhdGUKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3NJbXBsLmphdmEudGVtcGxhdGUKQEAgLTEsNjYgKzEsMTI1IEBACiBwYWNrYWdlIHtwYWNrYWdlX25hbWV9Owoge3sgLWlmIG5vdCBpc190ZXN0X21vZGUgfX0KLXt7IGlmIG5vdCBsaWJyYXJ5X2V4cG9ydGVkLSB9fQore3sgLWlmIGFsbG93X2luc3RydW1lbnRhdGlvbiB9fQore3sgaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQtIH19eyMtIG9ubHkgbmV3IHN0b3JhZ2UgZm9yIHByb2QgbW9kZSAjfQogLy8gVE9ETyhiLzMwMzc3MzA1NSk6IFJlbW92ZSB0aGUgYW5ub3RhdGlvbiBhZnRlciBhY2Nlc3MgaXNzdWUgaXMgcmVzb2x2ZWQuCiBpbXBvcnQgYW5kcm9pZC5jb21wYXQuYW5ub3RhdGlvbi5VbnN1cHBvcnRlZEFwcFVzYWdlOwote3sgLWVuZGlmIH19Ci0KIHt7IC1pZiBydW50aW1lX2xvb2t1cF9yZXF1aXJlZCB9fQotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnLlByb3BlcnRpZXM7Ci0KLQote3sgLWlmIG5vdCBsaWJyYXJ5X2V4cG9ydGVkIH19Ci17eyAtaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIH19Ci1pbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUludGVybmFsUmVhZGVyOworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Cit7eyBpZiBpc19wbGF0Zm9ybV9jb250YWluZXIgfX0KK2ltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbDsKK3t7IC1lbHNlIH19CitpbXBvcnQgYW5kcm9pZC5vcy5mbGFnZ2luZy5BY29uZmlnUGFja2FnZUludGVybmFsOwore3sgLWVuZGlmIH19CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIHt7IC1lbmRpZiB9fQote3sgLWVuZGlmIH19Ci0KLXt7IC1lbmRpZiB9fQogLyoqIEBoaWRlICovCiBwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBcewoge3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19Ci17eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQotICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4ge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gZmFsc2U7Ci17eyAtZW5kZm9yLSB9fQotCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJ7cGFja2FnZV9uYW1lfS5GZWF0dXJlRmxhZ3NJbXBsIjsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGlzQ2FjaGVkID0gZmFsc2U7CiB7eyBmb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19Ci17ey0gaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19Cit7eyAtaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0gPSB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKIHt7IC1lbmRpZiB9fQoge3sgLWVuZGZvciB9fQote3sgLWlmIG5vdCBsaWJyYXJ5X2V4cG9ydGVkIH19Ci17eyAtaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIH19Ci0gICAgU3RvcmFnZUludGVybmFsUmVhZGVyIHJlYWRlcjsKLSAgICBib29sZWFuIHJlYWRGcm9tTmV3U3RvcmFnZTsKLQotICAgIGJvb2xlYW4gdXNlTmV3U3RvcmFnZVZhbHVlQW5kRGlzY2FyZE9sZCA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJBY29uZmlnSmF2YUNvZGVnZW4iOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBTVUNDRVNTX0xPRyA9ICJzdWNjZXNzOiAlcyB2YWx1ZSBtYXRjaGVzIjsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTUlTTUFUQ0hfTE9HID0gImVycm9yOiAlcyB2YWx1ZSBtaXNtYXRjaCwgbmV3IHN0b3JhZ2UgdmFsdWUgaXMgJXMsIG9sZCBzdG9yYWdlIHZhbHVlIGlzICVzIjsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgRVJST1JfTE9HID0gImVycm9yOiBmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlIjsKIAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgXHsKLSAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKSByZXR1cm47Ci0gICAgICAgIGlmIChEZXZpY2VDb25maWcuZ2V0Qm9vbGVhbigiY29yZV9leHBlcmltZW50c190ZWFtX2ludGVybmFsIiwgImNvbS5hbmRyb2lkLnByb3ZpZGVycy5zZXR0aW5ncy5zdG9yYWdlX3Rlc3RfbWlzc2lvbl8xIiwgZmFsc2UpKSBcewotICAgICAgICAgICAgcmVhZEZyb21OZXdTdG9yYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgIHRyeSBcewotICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBTdG9yYWdlSW50ZXJuYWxSZWFkZXIoIntjb250YWluZXJ9IiwgIntwYWNrYWdlX25hbWV9Iik7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgXHsKLSAgICAgICAgICAgICAgICByZWFkZXIgPSBudWxsOwotICAgICAgICAgICAgfQorICAgICAgICB0cnkgXHsKK3t7IGlmIGlzX3BsYXRmb3JtX2NvbnRhaW5lciB9fQorICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJ7Y29udGFpbmVyfSIsICJ7cGFja2FnZV9uYW1lfSIsIHtwYWNrYWdlX2ZpbmdlcnByaW50fSk7Cit7eyAtZWxzZSB9fQorICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCByZWFkZXIgPSBBY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoIntjb250YWluZXJ9IiwgIntwYWNrYWdlX25hbWV9Iiwge3BhY2thZ2VfZmluZ2VycHJpbnR9KTsKK3t7IC1lbmRpZiB9fQorICAgICAgICB7eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgICAgICB7eyAtZm9yIGZsYWcgaW4gbmFtZXNwYWNlX3dpdGhfZmxhZ3MuZmxhZ3MgfX0KKyAgICAgICAge3sgLWlmIGZsYWcuaXNfcmVhZF93cml0ZSB9fQorICAgICAgICAgICAge2ZsYWcubWV0aG9kX25hbWV9ID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoe2ZsYWcuZmxhZ19vZmZzZXR9KTsKKyAgICAgICAge3sgLWVuZGlmIH19CisgICAgICAgIHt7IC1lbmRmb3IgfX0KKyAgICAgICAge3sgLWVuZGZvciB9fQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgXHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgfSBjYXRjaCAoTm9DbGFzc0RlZkZvdW5kRXJyb3IgZSkgXHsKKyAgICAgICAgICAgIC8vIGZvciBtYWlubGluZSBtb2R1bGUgcnVubmluZyBvbiBvbGRlciBkZXZpY2VzLgorICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcmVwbGFjZXMgdG8gdmVyc2lvbiBjaGVjaywgYWZ0ZXIgdGhlIHZlcnNpb24gYnVtcC4KKyAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKICAgICAgICAgfQotCi0gICAgICAgIHVzZU5ld1N0b3JhZ2VWYWx1ZUFuZERpc2NhcmRPbGQgPQotICAgICAgICAgICAgRGV2aWNlQ29uZmlnLmdldEJvb2xlYW4oImNvcmVfZXhwZXJpbWVudHNfdGVhbV9pbnRlcm5hbCIsICJjb20uYW5kcm9pZC5wcm92aWRlcnMuc2V0dGluZ3MudXNlX25ld19zdG9yYWdlX3ZhbHVlIiwgZmFsc2UpOworICAgICAgICBpc0NhY2hlZCA9IHRydWU7CiAgICAgfQotCit7eyAtZW5kaWYgfX17Iy0gZW5kIG9mIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkICN9Cit7eyAtZm9yIGZsYWcgaW4gZmxhZ19lbGVtZW50cyB9fQorICAgIEBPdmVycmlkZQorICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKKyAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQorICAgIHB1YmxpYyBib29sZWFuIHtmbGFnLm1ldGhvZF9uYW1lfSgpIFx7Cit7eyAtaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CisgICAgICAgIGlmICghaXNDYWNoZWQpIFx7CisgICAgICAgICAgICBpbml0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtmbGFnLm1ldGhvZF9uYW1lfTsKK3t7IC1lbHNlIH19CisgICAgICAgIHJldHVybiB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKIHt7IC1lbmRpZiB9fQorICAgIH0KK3t7IGVuZGZvciB9fQorfQore3sgLWVsc2UtIH19eyMtIGRldmljZSBjb25maWcgZm9yIGV4cHJvdGVkIG1vZGUgI30KK3t7IC1pZiBuZXdfZXhwb3J0ZWQgfX0KK2ltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLkFjb25maWdQYWNrYWdlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisvKiogQGhpZGUgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBGZWF0dXJlRmxhZ3NJbXBsIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIFx7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJ7cGFja2FnZV9uYW1lfS5GZWF0dXJlRmxhZ3NJbXBsX2V4cG9ydGVkIjsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGlzQ2FjaGVkID0gZmFsc2U7Cit7eyBmb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0gPSB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKK3t7IC1lbmRmb3IgfX0KKyAgICBwcml2YXRlIHZvaWQgaW5pdCgpIFx7CisgICAgICAgIHRyeSBceworICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2UgcmVhZGVyID0gQWNvbmZpZ1BhY2thZ2UubG9hZCgie3BhY2thZ2VfbmFtZX0iKTsKKyAgICAgICAgICAgIHt7IC1mb3IgbmFtZXNwYWNlX3dpdGhfZmxhZ3MgaW4gbmFtZXNwYWNlX2ZsYWdzIH19CisgICAgICAgICAgICB7eyAtZm9yIGZsYWcgaW4gbmFtZXNwYWNlX3dpdGhfZmxhZ3MuZmxhZ3MgfX0KKyAgICAgICAgICAgIHtmbGFnLm1ldGhvZF9uYW1lfSA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKCJ7ZmxhZy5mbGFnX25hbWV9Iiwge2ZsYWcuZGVmYXVsdF92YWx1ZX0pOworICAgICAgICAgICAge3sgLWVuZGZvciB9fQorICAgICAgICAgICAge3sgLWVuZGZvciB9fQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgXHsKKyAgICAgICAgICAgIC8vIHBhc3MKKyAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgfSBjYXRjaCAoTm9DbGFzc0RlZkZvdW5kRXJyb3IgZSkgXHsKKyAgICAgICAgICAgIC8vIGZvciBtYWlubGluZSBtb2R1bGUgcnVubmluZyBvbiBvbGRlciBkZXZpY2VzLgorICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcmVwbGFjZXMgdG8gdmVyc2lvbiBjaGVjaywgYWZ0ZXIgdGhlIHZlcnNpb24gYnVtcC4KKyAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICBpc0NhY2hlZCA9IHRydWU7CisgICAgfQore3sgLWZvciBmbGFnIGluIGZsYWdfZWxlbWVudHMgfX0KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0oKSBceworICAgICAgICBpZiAoIWlzQ2FjaGVkKSBceworICAgICAgICAgICAgaW5pdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7ZmxhZy5tZXRob2RfbmFtZX07CisgICAgfQore3sgZW5kZm9yIH19Cit9Cit7eyBlbHNlIH19CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWc7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWcuUHJvcGVydGllczsKKy8qKiBAaGlkZSAqLworcHVibGljIGZpbmFsIGNsYXNzIEZlYXR1cmVGbGFnc0ltcGwgaW1wbGVtZW50cyBGZWF0dXJlRmxhZ3MgXHsKK3t7IC1mb3IgbmFtZXNwYWNlX3dpdGhfZmxhZ3MgaW4gbmFtZXNwYWNlX2ZsYWdzIH19CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiB7bmFtZXNwYWNlX3dpdGhfZmxhZ3MubmFtZXNwYWNlfV9pc19jYWNoZWQgPSBmYWxzZTsKK3t7IC1lbmRmb3ItIH19Cit7eyBmb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19Cit7eyAtaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0gPSB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKIHt7IC1lbmRpZiB9fQore3sgLWVuZGZvciB9fQoge3sgZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQogICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc197bmFtZXNwYWNlX3dpdGhfZmxhZ3MubmFtZXNwYWNlfSgpIFx7CisgICAgICAgIGZpbmFsIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IFx7CiAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygie25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0iKTsKIHt7IC1mb3IgZmxhZyBpbiBuYW1lc3BhY2Vfd2l0aF9mbGFncy5mbGFncyB9fQpAQCAtNzgsMzUgKzEzNyw3NCBAQAogICAgICAgICAgICAgICAgICsgImZsYWcgZGVjbGFyYXRpb24uIiwKICAgICAgICAgICAgICAgICBlCiAgICAgICAgICAgICApOworICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSBceworICAgICAgICAgICAgLy8gZm9yIGlzb2xhdGVkIHByb2Nlc3MgY2FzZSwgc2tpcCBsb2FkaW5nIGZsYWcgdmFsdWUgZnJvbSB0aGUgc3RvcmFnZSwgdXNlIHRoZSBkZWZhdWx0CisgICAgICAgIH0gZmluYWxseSBceworICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwogICAgICAgICB9CiAgICAgICAgIHtuYW1lc3BhY2Vfd2l0aF9mbGFncy5uYW1lc3BhY2V9X2lzX2NhY2hlZCA9IHRydWU7Ci17eyAtaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQgfX0KLXt7IC1pZiBhbGxvd19pbnN0cnVtZW50YXRpb24gfX0KLSAgICAgICAgaW5pdCgpOwotICAgICAgICBpZiAocmVhZEZyb21OZXdTdG9yYWdlICYmIHJlYWRlciAhPSBudWxsKSBcewotICAgICAgICAgICAgYm9vbGVhbiB2YWw7Ci0gICAgICAgICAgICB0cnkgXHsKLXt7IC1mb3IgZmxhZyBpbiBuYW1lc3BhY2Vfd2l0aF9mbGFncy5mbGFncyB9fQote3sgLWlmIGZsYWcuaXNfcmVhZF93cml0ZSB9fQorICAgIH0KK3t7IGVuZGZvci0gfX0KK3t7IC1mb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4ge2ZsYWcubWV0aG9kX25hbWV9KCkgXHsKKyAgICAgICAgaWYgKCF7ZmxhZy5kZXZpY2VfY29uZmlnX25hbWVzcGFjZX1faXNfY2FjaGVkKSBceworICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfe2ZsYWcuZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtmbGFnLm1ldGhvZF9uYW1lfTsKKyAgICB9Cit7eyBlbmRmb3IgfX0KK30KK3t7IC1lbmRpZi0gfX0geyMtIGVuZCBuZXdfZXhwb3J0ZWQgbW9kZSAjfQore3sgLWVuZGlmLSB9fSB7Iy0gZW5kIGV4cG9ydGVkIG1vZGUgI30KK3t7IGVsc2UgfX0geyMtIGVsc2UgZm9yIGFsbG93X2luc3RydW1lbnRhdGlvbiBpcyBub3QgZW5hYmxlZCAjfQore3sgaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQtIH19CisvLyBUT0RPKGIvMzAzNzczMDU1KTogUmVtb3ZlIHRoZSBhbm5vdGF0aW9uIGFmdGVyIGFjY2VzcyBpc3N1ZSBpcyByZXNvbHZlZC4KK2ltcG9ydCBhbmRyb2lkLmNvbXBhdC5hbm5vdGF0aW9uLlVuc3VwcG9ydGVkQXBwVXNhZ2U7Cit7eyAtZW5kaWYgfX0KIAotICAgICAgICAgICAgICAgIHZhbCA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKHtmbGFnLmZsYWdfb2Zmc2V0fSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbCAhPSB7ZmxhZy5tZXRob2RfbmFtZX0pIFx7Ci0gICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgU3RyaW5nLmZvcm1hdChNSVNNQVRDSF9MT0csICJ7ZmxhZy5tZXRob2RfbmFtZX0iLCB2YWwsIHtmbGFnLm1ldGhvZF9uYW1lfSkpOwotICAgICAgICAgICAgICAgIH0KK3t7IC1pZiBydW50aW1lX2xvb2t1cF9yZXF1aXJlZCB9fQoraW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnLlByb3BlcnRpZXM7Cit7eyAtZW5kaWYgfX0KKy8qKiBAaGlkZSAqLworcHVibGljIGZpbmFsIGNsYXNzIEZlYXR1cmVGbGFnc0ltcGwgaW1wbGVtZW50cyBGZWF0dXJlRmxhZ3MgXHsKK3t7IC1pZiBydW50aW1lX2xvb2t1cF9yZXF1aXJlZCB9fQore3sgLWZvciBuYW1lc3BhY2Vfd2l0aF9mbGFncyBpbiBuYW1lc3BhY2VfZmxhZ3MgfX0KKyAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIHtuYW1lc3BhY2Vfd2l0aF9mbGFncy5uYW1lc3BhY2V9X2lzX2NhY2hlZCA9IGZhbHNlOwore3sgLWVuZGZvci0gfX0KIAotICAgICAgICAgICAgICAgIGlmICh1c2VOZXdTdG9yYWdlVmFsdWVBbmREaXNjYXJkT2xkKSBcewotICAgICAgICAgICAgICAgICAgICB7ZmxhZy5tZXRob2RfbmFtZX0gPSB2YWw7Ci0gICAgICAgICAgICAgICAgfQotCit7eyBmb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19Cit7ey0gaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0gPSB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKIHt7IC1lbmRpZiB9fQoge3sgLWVuZGZvciB9fQotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIFx7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgRVJST1JfTE9HLCBlKTsKLSAgICAgICAgICAgIH0KK3t7IGZvciBuYW1lc3BhY2Vfd2l0aF9mbGFncyBpbiBuYW1lc3BhY2VfZmxhZ3MgfX0KKyAgICBwcml2YXRlIHZvaWQgbG9hZF9vdmVycmlkZXNfe25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0oKSBceworICAgICAgICBmaW5hbCBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIHRyeSBceworICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gRGV2aWNlQ29uZmlnLmdldFByb3BlcnRpZXMoIntuYW1lc3BhY2Vfd2l0aF9mbGFncy5uYW1lc3BhY2V9Iik7Cit7eyAtZm9yIGZsYWcgaW4gbmFtZXNwYWNlX3dpdGhfZmxhZ3MuZmxhZ3MgfX0KK3t7IC1pZiBmbGFnLmlzX3JlYWRfd3JpdGUgfX0KKyAgICAgICAgICAgIHtmbGFnLm1ldGhvZF9uYW1lfSA9CisgICAgICAgICAgICAgICAgcHJvcGVydGllcy5nZXRCb29sZWFuKEZsYWdzLkZMQUdfe2ZsYWcuZmxhZ19uYW1lX2NvbnN0YW50X3N1ZmZpeH0sIHtmbGFnLmRlZmF1bHRfdmFsdWV9KTsKK3t7IC1lbmRpZiB9fQore3sgLWVuZGZvciB9fQorICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSBceworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHZhbHVlIGZyb20gbmFtZXNwYWNlIHtuYW1lc3BhY2Vfd2l0aF9mbGFncy5uYW1lc3BhY2V9ICIKKyAgICAgICAgICAgICAgICArICJmcm9tIERldmljZUNvbmZpZy4gSXQgY291bGQgYmUgdGhhdCB0aGUgY29kZSB1c2luZyBmbGFnICIKKyAgICAgICAgICAgICAgICArICJleGVjdXRlZCBiZWZvcmUgU2V0dGluZ3NQcm92aWRlciBpbml0aWFsaXphdGlvbi4gUGxlYXNlIHVzZSAiCisgICAgICAgICAgICAgICAgKyAiZml4ZWQgcmVhZC1vbmx5IGZsYWcgYnkgYWRkaW5nIGlzX2ZpeGVkX3JlYWRfb25seTogdHJ1ZSBpbiAiCisgICAgICAgICAgICAgICAgKyAiZmxhZyBkZWNsYXJhdGlvbi4iLAorICAgICAgICAgICAgICAgIGUKKyAgICAgICAgICAgICk7CisgICAgICAgIH0gZmluYWxseSBceworICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwogICAgICAgICB9Ci17eyAtZW5kaWYgfX0KLXt7IC1lbmRpZiB9fQotICAgIH0KKyAgICAgICAge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gdHJ1ZTsKK30KIHt7IGVuZGZvci0gfX0KIHt7IC1lbmRpZiB9fXsjLSBlbmQgb2YgcnVudGltZV9sb29rdXBfcmVxdWlyZWQgI30KIHt7IC1mb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CkBAIC0xMjcsOCArMjI1LDggQEAKICAgICB9CiB7eyBlbmRmb3IgfX0KIH0KLXt7IGVsc2UgfX0KLXsjLSBHZW5lcmF0ZSBvbmx5IHN0dWIgaWYgaW4gdGVzdCBtb2RlICN9Cit7eyBlbmRpZn19IHsjLSBlbmRpZiBmb3IgYWxsb3dfaW5zdHJ1bWVudGF0aW9uICN9Cit7eyBlbHNlIH19IHsjLSBHZW5lcmF0ZSBvbmx5IHN0dWIgaWYgaW4gdGVzdCBtb2RlICN9CiAvKiogQGhpZGUgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBGZWF0dXJlRmxhZ3NJbXBsIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIFx7CiB7eyBmb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL2NwcF9zb3VyY2VfZmlsZS50ZW1wbGF0ZSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvY3BwX3NvdXJjZV9maWxlLnRlbXBsYXRlCmluZGV4IDg1MmI5MDUuLjliZTU5ZTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvY3BwX3NvdXJjZV9maWxlLnRlbXBsYXRlCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvY3BwX3NvdXJjZV9maWxlLnRlbXBsYXRlCkBAIC03NiwyNyArNzYsMjggQEAKICAgICAgICAgICAgIDogYm9vbGVhbl9zdGFydF9pbmRleF8oKQogICAgICAgICAgICAge3sgLWVuZGlmIH19CiAgICAgICAgICAgICAsIGZsYWdfdmFsdWVfZmlsZV8obnVsbHB0cikKLSAgICAgICAgICAgICwgcmVhZF9mcm9tX25ld19zdG9yYWdlXyhmYWxzZSkgXHsKLQotICAgICAgICAgICAgaWYgKGFjY2VzcygiL21ldGFkYXRhL2Fjb25maWcvYm9vdC9lbmFibGVfb25seV9uZXdfc3RvcmFnZSIsIEZfT0spID09IDApIFx7Ci0gICAgICAgICAgICAgICByZWFkX2Zyb21fbmV3X3N0b3JhZ2VfID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFyZWFkX2Zyb21fbmV3X3N0b3JhZ2VfKSBcewotICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgLCBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXyh0cnVlKSBcewogCiAgICAgICAgICAgICBhdXRvIHBhY2thZ2VfbWFwX2ZpbGUgPSBhY29uZmlnX3N0b3JhZ2U6OmdldF9tYXBwZWRfZmlsZSgKICAgICAgICAgICAgICAgICAgIntjb250YWluZXJ9IiwKICAgICAgICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlOjpTdG9yYWdlRmlsZVR5cGU6OnBhY2thZ2VfbWFwKTsKICAgICAgICAgICAgIGlmICghcGFja2FnZV9tYXBfZmlsZS5vaygpKSBcewogICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvcjogZmFpbGVkIHRvIGdldCBwYWNrYWdlIG1hcCBmaWxlOiAlcyIsIHBhY2thZ2VfbWFwX2ZpbGUuZXJyb3IoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYXV0byBjb250ZXh0ID0gYWNvbmZpZ19zdG9yYWdlOjpnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoCiAgICAgICAgICAgICAgICAgKipwYWNrYWdlX21hcF9maWxlLCAie3BhY2thZ2V9Iik7CiAgICAgICAgICAgICBpZiAoIWNvbnRleHQub2soKSkgXHsKICAgICAgICAgICAgICAgICBBTE9HRSgiZXJyb3I6IGZhaWxlZCB0byBnZXQgcGFja2FnZSByZWFkIGNvbnRleHQ6ICVzIiwgY29udGV4dC5lcnJvcigpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5wYWNrYWdlX2V4aXN0cykpIFx7CisgICAgICAgICAgICAgICAgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIGNhY2hlIHBhY2thZ2UgYm9vbGVhbiBmbGFnIHN0YXJ0IGluZGV4CkBAIC0xMTAsNiArMTExLDggQEAKICAgICAgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2U6OlN0b3JhZ2VGaWxlVHlwZTo6ZmxhZ192YWwpOwogICAgICAgICAgICAgaWYgKCFmbGFnX3ZhbHVlX2ZpbGUub2soKSkgXHsKICAgICAgICAgICAgICAgICBBTE9HRSgiZXJyb3I6IGZhaWxlZCB0byBnZXQgZmxhZyB2YWx1ZSBmaWxlOiAlcyIsIGZsYWdfdmFsdWVfZmlsZS5lcnJvcigpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBjYWNoZSBmbGFnIHZhbHVlIGZpbGUKQEAgLTEyNSwyMiArMTI4LDE5IEBACiAgICAgICAgICAgICB7eyAtaWYgaXRlbS5yZWFkd3JpdGUgfX0KICAgICAgICAgICAgIGlmIChjYWNoZV9be2l0ZW0ucmVhZHdyaXRlX2lkeH1dID09IC0xKSBcewogICAgICAgICAgICAge3sgaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uLSB9fQotICAgICAgICAgICAgICAgIGlmIChyZWFkX2Zyb21fbmV3X3N0b3JhZ2VfKSBcewotICAgICAgICAgICAgICAgICAgICBhdXRvIHZhbHVlID0gYWNvbmZpZ19zdG9yYWdlOjpnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgKmZsYWdfdmFsdWVfZmlsZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4XyArIHtpdGVtLmZsYWdfb2Zmc2V0fSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5vaygpKSBcewotICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0UoImVycm9yOiBmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiAlcyIsIHZhbHVlLmVycm9yKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjYWNoZV9be2l0ZW0ucmVhZHdyaXRlX2lkeH1dID0gKnZhbHVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBcewotICAgICAgICAgICAgICAgICAgICBjYWNoZV9be2l0ZW0ucmVhZHdyaXRlX2lkeH1dID0gc2VydmVyX2NvbmZpZ3VyYWJsZV9mbGFnczo6R2V0U2VydmVyQ29uZmlndXJhYmxlRmxhZygKLSAgICAgICAgICAgICAgICAgICAgICAgICJhY29uZmlnX2ZsYWdzLntpdGVtLmRldmljZV9jb25maWdfbmFtZXNwYWNlfSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAie2l0ZW0uZGV2aWNlX2NvbmZpZ19mbGFnfSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAie2l0ZW0uZGVmYXVsdF92YWx1ZX0iKSA9PSAidHJ1ZSI7CisgICAgICAgICAgICAgICAgaWYgKCFwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXykgXHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtpdGVtLmRlZmF1bHRfdmFsdWV9OwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBhY29uZmlnX3N0b3JhZ2U6OmdldF9ib29sZWFuX2ZsYWdfdmFsdWUoCisgICAgICAgICAgICAgICAgICAgICpmbGFnX3ZhbHVlX2ZpbGVfLAorICAgICAgICAgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4XyArIHtpdGVtLmZsYWdfb2Zmc2V0fSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLm9rKCkpIFx7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvcjogZmFpbGVkIHRvIHJlYWQgZmxhZyB2YWx1ZTogJXMiLCB2YWx1ZS5lcnJvcigpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhY2hlX1t7aXRlbS5yZWFkd3JpdGVfaWR4fV0gPSAqdmFsdWU7CiAgICAgICAgICAgICB7eyAtZWxzZS0gfX0KICAgICAgICAgICAgICAgICBjYWNoZV9be2l0ZW0ucmVhZHdyaXRlX2lkeH1dID0gc2VydmVyX2NvbmZpZ3VyYWJsZV9mbGFnczo6R2V0U2VydmVyQ29uZmlndXJhYmxlRmxhZygKICAgICAgICAgICAgICAgICAgICAgImFjb25maWdfZmxhZ3Mue2l0ZW0uZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9IiwKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxhY29uZmlnX3N0b3JhZ2U6Ok1hcHBlZFN0b3JhZ2VGaWxlPiBmbGFnX3ZhbHVlX2ZpbGVfOwogCi0gICAgICAgIGJvb2wgcmVhZF9mcm9tX25ld19zdG9yYWdlXzsKKyAgICAgICAgYm9vbCBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXzsKICAgICB7eyAtZW5kaWYgfX0KICAgICB7eyAtZW5kaWYgfX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9ydXN0LnRlbXBsYXRlIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9ydXN0LnRlbXBsYXRlCmluZGV4IGMyZjE2MmYuLmU5ZTEwMzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvcnVzdC50ZW1wbGF0ZQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL3J1c3QudGVtcGxhdGUKQEAgLTEwLDEwICsxMCw2IEBACiAKIHt7IGlmIGhhc19yZWFkd3JpdGUtIH19CiB7eyBpZiBhbGxvd19pbnN0cnVtZW50YXRpb24gfX0KLXN0YXRpYyBSRUFEX0ZST01fTkVXX1NUT1JBR0U6IExhenlMb2NrPGJvb2w+ID0gTGF6eUxvY2s6Om5ldyh8fCB1bnNhZmUgXHsKLSAgICBQYXRoOjpuZXcoIi9tZXRhZGF0YS9hY29uZmlnL2Jvb3QvZW5hYmxlX29ubHlfbmV3X3N0b3JhZ2UiKS5leGlzdHMoKQotfSk7Ci0KIHN0YXRpYyBQQUNLQUdFX09GRlNFVDogTGF6eUxvY2s8UmVzdWx0PE9wdGlvbjx1MzI+LCBBY29uZmlnU3RvcmFnZUVycm9yPj4gPSBMYXp5TG9jazo6bmV3KHx8IHVuc2FmZSBcewogICAgIGdldF9tYXBwZWRfc3RvcmFnZV9maWxlKCJ7Y29udGFpbmVyfSIsIFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCkKICAgICAuYW5kX3RoZW4ofHBhY2thZ2VfbWFwfCBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwLCAie3BhY2thZ2V9IikpCkBAIC0zMSw0NSArMjcsNDEgQEAKIHt7IGlmIGFsbG93X2luc3RydW1lbnRhdGlvbiB9fQogc3RhdGljIENBQ0hFRF97ZmxhZy5uYW1lfTogTGF6eUxvY2s8Ym9vbD4gPSBMYXp5TG9jazo6bmV3KHx8IFx7CiAKLSAgICBpZiAqUkVBRF9GUk9NX05FV19TVE9SQUdFIFx7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFN1YnNlcXVlbnQgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0IGFyZSBub29wcy4KLSAgICAgICAgbG9nZ2VyOjppbml0KAotICAgICAgICAgICAgbG9nZ2VyOjpDb25maWc6OmRlZmF1bHQoKQotICAgICAgICAgICAgICAgIC53aXRoX3RhZ19vbl9kZXZpY2UoImFjb25maWdfcnVzdF9jb2RlZ2VuIikKLSAgICAgICAgICAgICAgICAud2l0aF9tYXhfbGV2ZWwoTGV2ZWxGaWx0ZXI6OkluZm8pKTsKKyAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBTdWJzZXF1ZW50IGNhbGxzIGFmdGVyIHRoZSBmaXJzdCBhcmUgbm9vcHMuCisgICAgbG9nZ2VyOjppbml0KAorICAgICAgICBsb2dnZXI6OkNvbmZpZzo6ZGVmYXVsdCgpCisgICAgICAgICAgICAud2l0aF90YWdfb25fZGV2aWNlKCJhY29uZmlnX3J1c3RfY29kZWdlbiIpCisgICAgICAgICAgICAud2l0aF9tYXhfbGV2ZWwoTGV2ZWxGaWx0ZXI6OkluZm8pKTsKIAotICAgICAgICBsZXQgZmxhZ192YWx1ZV9yZXN1bHQgPSBGTEFHX1ZBTF9NQVAKLSAgICAgICAgICAgIC5hc19yZWYoKQotICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnIHZhbCBtYXA6IFx7ZXJyfSIpKQotICAgICAgICAgICAgLmFuZF90aGVuKHxmbGFnX3ZhbF9tYXB8IFx7Ci0gICAgICAgICAgICAgICAgUEFDS0FHRV9PRkZTRVQKLSAgICAgICAgICAgICAgICAgICAgLmFzX3JlZigpCi0gICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgcGFja2FnZSByZWFkIG9mZnNldDogXHtlcnJ9IikpCi0gICAgICAgICAgICAgICAgICAgIC5hbmRfdGhlbih8cGFja2FnZV9vZmZzZXR8IFx7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCBwYWNrYWdlX29mZnNldCBcewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUob2Zmc2V0KSA9PiBcewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbF9tYXAsIG9mZnNldCArIHtmbGFnLmZsYWdfb2Zmc2V0fSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZzogXHtlcnJ9IikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IEVycigibm8gY29udGV4dCBmb3VuZCBmb3IgcGFja2FnZSAne3BhY2thZ2V9JyIudG9fc3RyaW5nKCkpCisgICAgbGV0IGZsYWdfdmFsdWVfcmVzdWx0ID0gRkxBR19WQUxfTUFQCisgICAgICAgIC5hc19yZWYoKQorICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IGZsYWcgdmFsIG1hcDogXHtlcnJ9IikpCisgICAgICAgIC5hbmRfdGhlbih8ZmxhZ192YWxfbWFwfCBceworICAgICAgICAgICAgUEFDS0FHRV9PRkZTRVQKKyAgICAgICAgICAgICAgICAuYXNfcmVmKCkKKyAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2UgcmVhZCBvZmZzZXQ6IFx7ZXJyfSIpKQorICAgICAgICAgICAgICAgIC5hbmRfdGhlbih8cGFja2FnZV9vZmZzZXR8IFx7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHBhY2thZ2Vfb2Zmc2V0IFx7CisgICAgICAgICAgICAgICAgICAgICAgICBTb21lKG9mZnNldCkgPT4gXHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbF9tYXAsIG9mZnNldCArIHtmbGFnLmZsYWdfb2Zmc2V0fSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnOiBce2Vycn0iKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IFx7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlIHtwYWNrYWdlfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihmb3JtYXQhKCJmYWlsZWQgdG8gZmxhZyBwYWNrYWdlIHtwYWNrYWdlfSIpKQogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0pOwogCi0gICAgICAgIG1hdGNoIGZsYWdfdmFsdWVfcmVzdWx0IFx7Ci0gICAgICAgICAgICBPayhmbGFnX3ZhbHVlKSA9PiBcewotICAgICAgICAgICAgICAgIHJldHVybiBmbGFnX3ZhbHVlOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIEVycihlcnIpID0+IFx7Ci0gICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IFx7ZXJyfSIpOwotICAgICAgICAgICAgICAgIHBhbmljISgiZmFpbGVkIHRvIHJlYWQgZmxhZyB2YWx1ZTogXHtlcnJ9Iik7Ci0gICAgICAgICAgICB9CisgICAgbWF0Y2ggZmxhZ192YWx1ZV9yZXN1bHQgXHsKKyAgICAgICAgT2soZmxhZ192YWx1ZSkgPT4gXHsKKyAgICAgICAgICAgIHJldHVybiBmbGFnX3ZhbHVlOworICAgICAgICB9LAorICAgICAgICBFcnIoZXJyKSA9PiBceworICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IFx7ZXJyfSIpOworICAgICAgICAgICAgcmV0dXJuIHtmbGFnLmRlZmF1bHRfdmFsdWV9OwogICAgICAgICB9Ci0gICAgfSBlbHNlIFx7Ci0gICAgICAgIGZsYWdzX3J1c3Q6OkdldFNlcnZlckNvbmZpZ3VyYWJsZUZsYWcoCi0gICAgICAgICAgICAiYWNvbmZpZ19mbGFncy57ZmxhZy5kZXZpY2VfY29uZmlnX25hbWVzcGFjZX0iLAotICAgICAgICAgICAgIntmbGFnLmRldmljZV9jb25maWdfZmxhZ30iLAotICAgICAgICAgICAgIntmbGFnLmRlZmF1bHRfdmFsdWV9IikgPT0gInRydWUiCiAgICAgfQogCiB9KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZXN0cy90ZXN0X3NlY29uZF9wYWNrYWdlLmFjb25maWcgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVzdHMvdGVzdF9zZWNvbmRfcGFja2FnZS5hY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OGJjOTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVzdHMvdGVzdF9zZWNvbmRfcGFja2FnZS5hY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2U6ICJjb20uYW5kcm9pZC5hY29uZmlnLnNlY29uZF90ZXN0IgorY29udGFpbmVyOiAic3lzdGVtIgorCitmbGFnIHsKKyAgICBuYW1lOiAidGVzdGluZ19mbGFnIgorICAgIG5hbWVzcGFjZTogImFub3RoZXJfbmFtZXNwYWNlIgorICAgIGRlc2NyaXB0aW9uOiAiVGhpcyBpcyBhIGZsYWcgZm9yIHRlc3RpbmcuIgorICAgIGJ1ZzogIjEyMyIKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3Rlc3RzL3RoaXJkLnZhbHVlcyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZXN0cy90aGlyZC52YWx1ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1ODMyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZXN0cy90aGlyZC52YWx1ZXMKQEAgLTAsMCArMSw2IEBACitmbGFnX3ZhbHVlIHsKKyAgICBwYWNrYWdlOiAiY29tLmFuZHJvaWQuYWNvbmZpZy5zZWNvbmRfdGVzdCIKKyAgICBuYW1lOiAidGVzdGluZ19mbGFnIgorICAgIHN0YXRlOiBESVNBQkxFRAorICAgIHBlcm1pc3Npb246IFJFQURfV1JJVEUKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvQW5kcm9pZC5icAppbmRleCBkZGE3YTU1Li5iZGY5NmVkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9BbmRyb2lkLmJwCkBAIC02MSw4ICs2MSwxMiBAQAogICAgIG5hbWU6ICJsaWJhY29uZmlnX2phdmFfaG9zdF9kZXZpY2VfcGF0aHNfc3JjIiwKICAgICBzcmNzOiBbInNyYy9Ib3N0RGV2aWNlUHJvdG9zVGVtcGxhdGUuamF2YSJdLAogICAgIG91dDogWyJIb3N0RGV2aWNlUHJvdG9zLmphdmEiXSwKLSAgICB0b29sX2ZpbGVzOiBbInBhcnRpdGlvbl9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCJdLAotICAgIGNtZDogInNlZCAtZSAnL1RFTVBMQVRFL3tyJChsb2NhdGlvbiBwYXJ0aXRpb25fYWNvbmZpZ19mbGFnc19wYXRocy50eHQpJyAtZSAnZH0nICQoaW4pID4gJChvdXQpIiwKKyAgICB0b29sX2ZpbGVzOiBbCisgICAgICAgICJwYXJ0aXRpb25fYWNvbmZpZ19mbGFnc19wYXRocy50eHQiLAorICAgICAgICAibWFpbmxpbmVfYWNvbmZpZ19mbGFnc19wYXRocy50eHQiLAorICAgIF0sCisgICAgY21kOiAic2VkIC1lICcvVEVNUExBVEUve3IkKGxvY2F0aW9uIHBhcnRpdGlvbl9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCknIC1lICdkfScgJChpbikgPiAkKG91dCkudG1wICYmICIgKworICAgICJzZWQgLWUgJy9NQUlOTElORV9UL3tyJChsb2NhdGlvbiBtYWlubGluZV9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCknIC1lICdkfScgJChvdXQpLnRtcCA+ICQob3V0KSIsCiB9CiAKIGphdmFfbGlicmFyeV9ob3N0IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvbWFpbmxpbmVfYWNvbmZpZ19mbGFnc19wYXRocy50eHQgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL21haW5saW5lX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzNhODQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL21haW5saW5lX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0CkBAIC0wLDAgKzEsMjAgQEAKKyIvYXBleC9jb20uYW5kcm9pZC5hZHNlcnZpY2VzL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5hcHBzZWFyY2gvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLmFydC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQuYnRzZXJ2aWNlcy9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQuY2VsbGJyb2FkY2FzdC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLmNvbnNjcnlwdC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQuZGV2aWNlbG9jay9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQuaGVhbHRoZml0bmVzcy9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQuaXBzZWMvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLm1lZGlhL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5tZWRpYXByb3ZpZGVyL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5vbmRldmljZXBlcnNvbmFsaXphdGlvbi9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQub3Muc3RhdHNkL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5wZXJtaXNzaW9uL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5wcm9maWxpbmcvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLnRldGhlcmluZy9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQudXdiL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC52aXJ0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC53aWZpL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvcGFydGl0aW9uX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0IGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9wYXJ0aXRpb25fYWNvbmZpZ19mbGFnc19wYXRocy50eHQKaW5kZXggMTQwY2QyMS4uZTk5N2UzZCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9wYXJ0aXRpb25fYWNvbmZpZ19mbGFnc19wYXRocy50eHQKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9wYXJ0aXRpb25fYWNvbmZpZ19mbGFnc19wYXRocy50eHQKQEAgLTEsNCArMSwzIEBACiAiL3N5c3RlbS9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCi0iL3N5c3RlbV9leHQvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAogIi9wcm9kdWN0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKICIvdmVuZG9yL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvc3JjL0hvc3REZXZpY2VQcm90b3NUZW1wbGF0ZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9zcmMvSG9zdERldmljZVByb3Rvc1RlbXBsYXRlLmphdmEKaW5kZXggODQ0MjMyYi4uZTdkMGE3NiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9zcmMvSG9zdERldmljZVByb3Rvc1RlbXBsYXRlLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9zcmMvSG9zdERldmljZVByb3Rvc1RlbXBsYXRlLmphdmEKQEAgLTI1LDYgKzI1LDcgQEAKIAogLyoqCiAgKiBBIGhvc3QgbGliIHRoYXQgY2FuIHJlYWQgYWxsIGFjb25maWcgcHJvdG8gZmlsZSBwYXRocyBvbiBhIGdpdmVuIGRldmljZS4KKyAqIFRoaXMgbGliIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGRldmljZSB3aXRoIHJvb3QgYWNjZXNzICh1c2VyZGVidWcvZW5nKS4KICAqLwogcHVibGljIGNsYXNzIEhvc3REZXZpY2VQcm90b3MgewogICAgIC8qKgpAQCAtMzksOCArNDAsMTMgQEAKICAgICAgICAgVEVNUExBVEUKICAgICB9OwogCisgICAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIE1BSU5MSU5FX1BBVEhTID0geworICAgICAgICBNQUlOTElORV9UCisgICAgfTsKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBUEVYX0RJUiA9ICIvYXBleCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFQ1VSU0lWRUxZX0xJU1RfQVBFWF9ESVJfQ09NTUFORCA9ICJzaGVsbCBmaW5kIC9hcGV4IHwgZ3JlcCBhY29uZmlnX2ZsYWdzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVDVVJTSVZFTFlfTElTVF9BUEVYX0RJUl9DT01NQU5EID0KKyAgICAgICAgInNoZWxsIHN1IDAgZmluZCAvYXBleCB8IGdyZXAgYWNvbmZpZ19mbGFncyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFQRVhfQUNPTkZJR19QQVRIX1NVRkZJWCA9ICIvZXRjL2Fjb25maWdfZmxhZ3MucGIiOwogCiAKQEAgLTUzLDcgKzU5LDggQEAKICAgICAgICAgU3RyaW5nIGFkYkNvbW1hbmRPdXRwdXQgPSBhZGJDb21tYW5kRXhlY3V0b3IuZXhlY3V0ZUFkYkNvbW1hbmQoCiAgICAgICAgICAgICBSRUNVUlNJVkVMWV9MSVNUX0FQRVhfRElSX0NPTU1BTkQpOwogCi0gICAgICAgIGlmIChhZGJDb21tYW5kT3V0cHV0ID09IG51bGwpIHsKKyAgICAgICAgaWYgKGFkYkNvbW1hbmRPdXRwdXQgPT0gbnVsbCB8fCBhZGJDb21tYW5kT3V0cHV0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcGF0aHMuYWRkQWxsKEFycmF5cy5hc0xpc3QoTUFJTkxJTkVfUEFUSFMpKTsKICAgICAgICAgICAgIHJldHVybiBwYXRoczsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3NyYy9saWIucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3NyYy9saWIucnMKaW5kZXggOWFiOWNlYS4uODg3MWI0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9zcmMvbGliLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvc3JjL2xpYi5ycwpAQCAtNjIsMTMgKzYyLDEyIEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9yZWFkX3BhcnRpdGlvbl9wYXRocygpIHsKLSAgICAgICAgYXNzZXJ0X2VxIShyZWFkX3BhcnRpdGlvbl9wYXRocygpLmxlbigpLCA0KTsKKyAgICAgICAgYXNzZXJ0X2VxIShyZWFkX3BhcnRpdGlvbl9wYXRocygpLmxlbigpLCAzKTsKIAogICAgICAgICBhc3NlcnRfZXEhKAogICAgICAgICAgICAgcmVhZF9wYXJ0aXRpb25fcGF0aHMoKSwKICAgICAgICAgICAgIHZlYyFbCiAgICAgICAgICAgICAgICAgUGF0aEJ1Zjo6ZnJvbSgiL3N5c3RlbS9ldGMvYWNvbmZpZ19mbGFncy5wYiIpLAotICAgICAgICAgICAgICAgIFBhdGhCdWY6OmZyb20oIi9zeXN0ZW1fZXh0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiksCiAgICAgICAgICAgICAgICAgUGF0aEJ1Zjo6ZnJvbSgiL3Byb2R1Y3QvZXRjL2Fjb25maWdfZmxhZ3MucGIiKSwKICAgICAgICAgICAgICAgICBQYXRoQnVmOjpmcm9tKCIvdmVuZG9yL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIikKICAgICAgICAgICAgIF0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL0FuZHJvaWQuYnAKaW5kZXggZTMyN2NlZC4uNGMxZmQ0ZSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL0FuZHJvaWQuYnAKQEAgLTQ0LDMgKzQ0LDggQEAKICAgICBuYW1lOiAibGliYWNvbmZpZ19mbGFnc19jYyIsCiAgICAgYWNvbmZpZ19kZWNsYXJhdGlvbnM6ICJhY29uZmlnX2ZsYWdzIiwKIH0KKworamF2YV9hY29uZmlnX2xpYnJhcnkgeworICAgIG5hbWU6ICJhY29uZmlnX2ZsYWdzX2phdmEiLAorICAgIGFjb25maWdfZGVjbGFyYXRpb25zOiAiYWNvbmZpZ19mbGFncyIsCit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvZmxhZ3MuYWNvbmZpZyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnCmluZGV4IGRiOGIxYjcuLjBhMDA0Y2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnCkBAIC03LDMgKzcsMTAgQEAKICAgYnVnOiAiMzEyMjM1NTk2IgogICBkZXNjcmlwdGlvbjogIldoZW4gZW5hYmxlZCwgYWNvbmZpZyBmbGFncyBhcmUgcmVhZCBmcm9tIHRoZSBuZXcgYWNvbmZpZyBzdG9yYWdlIG9ubHkuIgogfQorCitmbGFnIHsKKyAgbmFtZTogImVuYWJsZV9hY29uZmlnZF9mcm9tX21haW5saW5lIgorICBuYW1lc3BhY2U6ICJjb3JlX2V4cGVyaW1lbnRzX3RlYW1faW50ZXJuYWwiCisgIGJ1ZzogIjM2OTgwODgwNSIKKyAgZGVzY3JpcHRpb246ICJXaGVuIGVuYWJsZWQsIGxhdW5jaCBhY29uZmlnZCBmcm9tIGNvbmZpZyBpbmZyYSBtb2R1bGUuIgorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL3NyYy9saWIucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycwppbmRleCBhNjA3ZWZiLi4yZTg5MTI3IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycwpAQCAtMzQsNiArMzQsMTEgQEAKICAgICBwdWIgZm4gZW5hYmxlX29ubHlfbmV3X3N0b3JhZ2UoKSAtPiBib29sIHsKICAgICAgICAgYWNvbmZpZ19mbGFnc19ydXN0OjplbmFibGVfb25seV9uZXdfc3RvcmFnZSgpCiAgICAgfQorCisgICAgLy8vIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgZW5hYmxlX2Fjb25maWdkX2Zyb21fbWFpbmxpbmUgZmxhZy4KKyAgICBwdWIgZm4gZW5hYmxlX2Fjb25maWdkX2Zyb21fbWFpbmxpbmUoKSAtPiBib29sIHsKKyAgICAgICAgYWNvbmZpZ19mbGFnc19ydXN0OjplbmFibGVfb25seV9uZXdfc3RvcmFnZSgpCisgICAgfQogfQogCiAvLy8gTW9kdWxlIHVzZWQgd2hlbiBidWlsZGluZyB3aXRoIGNhcmdvCkBAIC00NCw0ICs0OSwxMCBAQAogICAgICAgICAvLyBVc2VkIG9ubHkgdG8gZW5hYmxlIHR5cGVjaGVja2luZyBhbmQgdGVzdGluZyB3aXRoIGNhcmdvCiAgICAgICAgIHRydWUKICAgICB9CisKKyAgICAvLy8gUmV0dXJucyBhIHBsYWNlaG9sZGVyIHZhbHVlIGZvciB0aGUgZW5hYmxlX2Fjb25maWdkX2Zyb21fbWFpbmxpbmUgZmxhZy4KKyAgICBwdWIgZm4gZW5hYmxlX2Fjb25maWdkX2Zyb21fbWFpbmxpbmUoKSAtPiBib29sIHsKKyAgICAgICAgLy8gVXNlZCBvbmx5IHRvIGVuYWJsZSB0eXBlY2hlY2tpbmcgYW5kIHRlc3Rpbmcgd2l0aCBjYXJnbworICAgICAgICB0cnVlCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ19pbmZvLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ19pbmZvLnJzCmluZGV4IGYwOTAzOTYuLmNmMTY4MzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfaW5mby5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX2luZm8ucnMKQEAgLTE5NCwxMiArMTk0LDE1IEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBjcmF0ZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3Q7CisgICAgdXNlIGNyYXRlOjp7CisgICAgICAgIHRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0LCBERUZBVUxUX0ZJTEVfVkVSU0lPTiwgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04sCisgICAgfTsKIAotICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdmFsdWUgbGlzdCBzZXJpYWxpemF0aW9uCi0gICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uKCkgewotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpOworICAgIC8vIFRPRE86IGIvMzc2MTA4MjY4IC0gVXNlIHBhcmFtZXRlcml6ZWQgdGVzdHMuCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9kZWZhdWx0KCkgeworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAKICAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdJbmZvSGVhZGVyID0gJmZsYWdfaW5mb19saXN0LmhlYWRlcjsKICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ0luZm9IZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOwpAQCAtMjIwLDIwICsyMjMsNDIgQEAKICAgICB9CiAKICAgICAjW3Rlc3RdCi0gICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhhdCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgYXQgdGhlIHRvcCBvZiBzZXJpYWxpemVkCi0gICAgLy8gYnl0ZXMKLSAgICBmbiB0ZXN0X3ZlcnNpb25fbnVtYmVyKCkgewotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpOwotICAgICAgICBsZXQgYnl0ZXMgPSAmZmxhZ19pbmZvX2xpc3QuaW50b19ieXRlcygpOwotICAgICAgICBsZXQgbXV0IGhlYWQgPSAwOwotICAgICAgICBsZXQgdmVyc2lvbiA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCkudW53cmFwKCk7Ci0gICAgICAgIGFzc2VydF9lcSEodmVyc2lvbiwgMSk7CisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX21heCgpIHsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOworCisgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnSW5mb0hlYWRlciA9ICZmbGFnX2luZm9fbGlzdC5oZWFkZXI7CisgICAgICAgIGxldCByZWludGVycHJldGVkX2hlYWRlciA9IEZsYWdJbmZvSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShoZWFkZXIsICZyZWludGVycHJldGVkX2hlYWRlci51bndyYXAoKSk7CisKKyAgICAgICAgbGV0IG5vZGVzOiAmVmVjPEZsYWdJbmZvTm9kZT4gPSAmZmxhZ19pbmZvX2xpc3Qubm9kZXM7CisgICAgICAgIGZvciBub2RlIGluIG5vZGVzLml0ZXIoKSB7CisgICAgICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9ub2RlID0gRmxhZ0luZm9Ob2RlOjpmcm9tX2J5dGVzKCZub2RlLmludG9fYnl0ZXMoKSkudW53cmFwKCk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUsICZyZWludGVycHJldGVkX25vZGUpOworICAgICAgICB9CisKKyAgICAgICAgbGV0IGZsYWdfaW5mb19ieXRlcyA9IGZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaW5mb19saXN0ID0gRmxhZ0luZm9MaXN0Ojpmcm9tX2J5dGVzKCZmbGFnX2luZm9fYnl0ZXMpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfaW5mb19saXN0LmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKCZmbGFnX2luZm9fbGlzdCwgJnJlaW50ZXJwcmV0ZWRfaW5mb19saXN0LnVud3JhcCgpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShmbGFnX2luZm9fYnl0ZXMubGVuKCkgYXMgdTMyLCBoZWFkZXIuZmlsZV9zaXplKTsKICAgICB9CiAKKyAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGF0IHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBhdCB0aGUgdG9wIG9mIHNlcmlhbGl6ZWQKKyAgICAvLyBieXRlcwogICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3ZlcnNpb25fbnVtYmVyKCkgeworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCBieXRlcyA9ICZmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBtdXQgaGVhZCA9IDA7CisgICAgICAgIGxldCB2ZXJzaW9uX2Zyb21fZmlsZSA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCkudW53cmFwKCk7CisgICAgICAgIGFzc2VydF9lcSEodmVyc2lvbl9mcm9tX2ZpbGUsIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICB9CisKICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBmaWxlIHR5cGUgY2hlY2sKKyAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9maWxlX3R5cGVfY2hlY2soKSB7Ci0gICAgICAgIGxldCBtdXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpOworICAgICAgICBsZXQgbXV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBmbGFnX2luZm9fbGlzdC5oZWFkZXIuZmlsZV90eXBlID0gMTIzdTg7CiAgICAgICAgIGxldCBlcnJvciA9IEZsYWdJbmZvTGlzdDo6ZnJvbV9ieXRlcygmZmxhZ19pbmZvX2xpc3QuaW50b19ieXRlcygpKS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3RhYmxlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ190YWJsZS5ycwppbmRleCAwNTg4ZmU1Li42ZmJlZTAyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3RhYmxlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdGFibGUucnMKQEAgLTIyMCwxMiArMjIwLDE1IEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBjcmF0ZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZTsKKyAgICB1c2UgY3JhdGU6OnsKKyAgICAgICAgdGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT04sIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OLAorICAgIH07CiAKLSAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHRhYmxlIHNlcmlhbGl6YXRpb24KLSAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb24oKSB7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpOworICAgIC8vIFRPRE86IGIvMzc2MTA4MjY4IC0gVXNlIHBhcmFtZXRlcml6ZWQgdGVzdHMuCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9kZWZhdWx0KCkgeworICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogCiAgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnVGFibGVIZWFkZXIgPSAmZmxhZ190YWJsZS5oZWFkZXI7CiAgICAgICAgIGxldCByZWludGVycHJldGVkX2hlYWRlciA9IEZsYWdUYWJsZUhlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CkBAIC0yNDYsMjAgKzI0OSw0MiBAQAogICAgIH0KIAogICAgICNbdGVzdF0KLSAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGF0IHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBhdCB0aGUgdG9wIG9mIHNlcmlhbGl6ZWQKLSAgICAvLyBieXRlcwotICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpOwotICAgICAgICBsZXQgYnl0ZXMgPSAmZmxhZ190YWJsZS5pbnRvX2J5dGVzKCk7Ci0gICAgICAgIGxldCBtdXQgaGVhZCA9IDA7Ci0gICAgICAgIGxldCB2ZXJzaW9uID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKLSAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uLCAxKTsKKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fbWF4KCkgeworICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOworCisgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnVGFibGVIZWFkZXIgPSAmZmxhZ190YWJsZS5oZWFkZXI7CisgICAgICAgIGxldCByZWludGVycHJldGVkX2hlYWRlciA9IEZsYWdUYWJsZUhlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF9oZWFkZXIuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoaGVhZGVyLCAmcmVpbnRlcnByZXRlZF9oZWFkZXIudW53cmFwKCkpOworCisgICAgICAgIGxldCBub2RlczogJlZlYzxGbGFnVGFibGVOb2RlPiA9ICZmbGFnX3RhYmxlLm5vZGVzOworICAgICAgICBmb3Igbm9kZSBpbiBub2Rlcy5pdGVyKCkgeworICAgICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfbm9kZSA9IEZsYWdUYWJsZU5vZGU6OmZyb21fYnl0ZXMoJm5vZGUuaW50b19ieXRlcygpKS51bndyYXAoKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZSwgJnJlaW50ZXJwcmV0ZWRfbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBsZXQgZmxhZ190YWJsZV9ieXRlcyA9IGZsYWdfdGFibGUuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF90YWJsZSA9IEZsYWdUYWJsZTo6ZnJvbV9ieXRlcygmZmxhZ190YWJsZV9ieXRlcyk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF90YWJsZS5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxISgmZmxhZ190YWJsZSwgJnJlaW50ZXJwcmV0ZWRfdGFibGUudW53cmFwKCkpOworICAgICAgICBhc3NlcnRfZXEhKGZsYWdfdGFibGVfYnl0ZXMubGVuKCkgYXMgdTMyLCBoZWFkZXIuZmlsZV9zaXplKTsKICAgICB9CiAKKyAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGF0IHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBhdCB0aGUgdG9wIG9mIHNlcmlhbGl6ZWQKKyAgICAvLyBieXRlcwogICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3ZlcnNpb25fbnVtYmVyKCkgeworICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgICAgICBsZXQgYnl0ZXMgPSAmZmxhZ190YWJsZS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBtdXQgaGVhZCA9IDA7CisgICAgICAgIGxldCB2ZXJzaW9uX2Zyb21fZmlsZSA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCkudW53cmFwKCk7CisgICAgICAgIGFzc2VydF9lcSEodmVyc2lvbl9mcm9tX2ZpbGUsIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICB9CisKICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBmaWxlIHR5cGUgY2hlY2sKKyAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9maWxlX3R5cGVfY2hlY2soKSB7Ci0gICAgICAgIGxldCBtdXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKTsKKyAgICAgICAgbGV0IG11dCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGZsYWdfdGFibGUuaGVhZGVyLmZpbGVfdHlwZSA9IDEyM3U4OwogICAgICAgICBsZXQgZXJyb3IgPSBGbGFnVGFibGU6OmZyb21fYnl0ZXMoJmZsYWdfdGFibGUuaW50b19ieXRlcygpKS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3ZhbHVlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ192YWx1ZS5ycwppbmRleCBiNjRjMTBlLi45YTE0YmVjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3ZhbHVlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdmFsdWUucnMKQEAgLTEzMiwxMiArMTMyLDMyIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBjcmF0ZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0OworICAgIHVzZSBjcmF0ZTo6eworICAgICAgICB0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QsIERFRkFVTFRfRklMRV9WRVJTSU9OLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiwKKyAgICB9OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSB2YWx1ZSBsaXN0IHNlcmlhbGl6YXRpb24KLSAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb24oKSB7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAvLyBUT0RPOiBiLzM3NjEwODI2OCAtIFVzZSBwYXJhbWV0ZXJpemVkIHRlc3RzLgorICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9kZWZhdWx0KCkgeworICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKworICAgICAgICBsZXQgaGVhZGVyOiAmRmxhZ1ZhbHVlSGVhZGVyID0gJmZsYWdfdmFsdWVfbGlzdC5oZWFkZXI7CisgICAgICAgIGxldCByZWludGVycHJldGVkX2hlYWRlciA9IEZsYWdWYWx1ZUhlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF9oZWFkZXIuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoaGVhZGVyLCAmcmVpbnRlcnByZXRlZF9oZWFkZXIudW53cmFwKCkpOworCisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2J5dGVzID0gZmxhZ192YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfdmFsdWVfbGlzdCA9IEZsYWdWYWx1ZUxpc3Q6OmZyb21fYnl0ZXMoJmZsYWdfdmFsdWVfYnl0ZXMpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfdmFsdWVfbGlzdC5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxISgmZmxhZ192YWx1ZV9saXN0LCAmcmVpbnRlcnByZXRlZF92YWx1ZV9saXN0LnVud3JhcCgpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShmbGFnX3ZhbHVlX2J5dGVzLmxlbigpIGFzIHUzMiwgaGVhZGVyLmZpbGVfc2l6ZSk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSB2YWx1ZSBsaXN0IHNlcmlhbGl6YXRpb24KKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fbWF4KCkgeworICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OKTsKIAogICAgICAgICBsZXQgaGVhZGVyOiAmRmxhZ1ZhbHVlSGVhZGVyID0gJmZsYWdfdmFsdWVfbGlzdC5oZWFkZXI7CiAgICAgICAgIGxldCByZWludGVycHJldGVkX2hlYWRlciA9IEZsYWdWYWx1ZUhlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CkBAIC0xNTUsMTcgKzE3NSwxNyBAQAogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAogICAgIC8vIGJ5dGVzCiAgICAgZm4gdGVzdF92ZXJzaW9uX251bWJlcigpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IGJ5dGVzID0gJmZsYWdfdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBtdXQgaGVhZCA9IDA7Ci0gICAgICAgIGxldCB2ZXJzaW9uID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKLSAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uLCAxKTsKKyAgICAgICAgbGV0IHZlcnNpb25fZnJvbV9maWxlID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uX2Zyb21fZmlsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgIH0KIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBmaWxlIHR5cGUgY2hlY2sKICAgICBmbiB0ZXN0X2ZpbGVfdHlwZV9jaGVjaygpIHsKLSAgICAgICAgbGV0IG11dCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAgICAgbGV0IG11dCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBmbGFnX3ZhbHVlX2xpc3QuaGVhZGVyLmZpbGVfdHlwZSA9IDEyM3U4OwogICAgICAgICBsZXQgZXJyb3IgPSBGbGFnVmFsdWVMaXN0Ojpmcm9tX2J5dGVzKCZmbGFnX3ZhbHVlX2xpc3QuaW50b19ieXRlcygpKS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9saWIucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9saWIucnMKaW5kZXggY2Y1MmJjMC4uZTk5MTMyMCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvbGliLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2xpYi5ycwpAQCAtNTcsOCArNTcsMTMgQEAKICAgICBCeXRlc1BhcnNlRmFpbCwgSGFzaFRhYmxlU2l6ZUxpbWl0LCBJbnZhbGlkRmxhZ1ZhbHVlVHlwZSwgSW52YWxpZFN0b3JlZEZsYWdUeXBlLAogfTsKIAotLy8vIFN0b3JhZ2UgZmlsZSB2ZXJzaW9uCi1wdWIgY29uc3QgRklMRV9WRVJTSU9OOiB1MzIgPSAxOworLy8vIFRoZSBtYXggc3RvcmFnZSBmaWxlIHZlcnNpb24gZnJvbSB3aGljaCB3ZSBjYW4gc2FmZWx5IHJlYWQvd3JpdGUuIE1heSBiZQorLy8vIGV4cGVyaW1lbnRhbC4KK3B1YiBjb25zdCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTjogdTMyID0gMjsKKworLy8vIFRoZSBuZXdlc3QgZnVsbHktcmVsZWFzZWQgdmVyc2lvbi4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIHRoaXMgaXMgdGhlCisvLy8gdmVyc2lvbiB3ZSB3aWxsIHdyaXRlLgorcHViIGNvbnN0IERFRkFVTFRfRklMRV9WRVJTSU9OOiB1MzIgPSAxOwogCiAvLy8gR29vZCBoYXNoIHRhYmxlIHByaW1lIG51bWJlcgogcHViKGNyYXRlKSBjb25zdCBIQVNIX1BSSU1FUzogW3UzMjsgMjldID0gWwpAQCAtMjQ0LDYgKzI0OSwxMSBAQAogICAgIE9rKHZhbCkKIH0KIAorLy8vIFJlYWQgYW5kIHBhcnNlIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIGJ1ZiBhcyB1MzIuCitwdWIgZm4gcmVhZF91MzJfZnJvbV9zdGFydF9vZl9ieXRlcyhidWY6ICZbdThdKSAtPiBSZXN1bHQ8dTMyLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CisgICAgcmVhZF91MzJfZnJvbV9ieXRlcyhidWYsICZtdXQgMCkKK30KKwogLy8vIFJlYWQgYW5kIHBhcnNlIGJ5dGVzIGFzIHUzMgogcHViIGZuIHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnVmOiAmW3U4XSwgaGVhZDogJm11dCB1c2l6ZSkgLT4gUmVzdWx0PHUzMiwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGxldCB2YWwgPQpAQCAtMjU0LDYgKzI2NCwxNiBAQAogICAgIE9rKHZhbCkKIH0KIAorLy8gUmVhZCBhbmQgcGFyc2UgYnl0ZXMgYXMgdTY0CitwdWIgZm4gcmVhZF91NjRfZnJvbV9ieXRlcyhidWY6ICZbdThdLCBoZWFkOiAmbXV0IHVzaXplKSAtPiBSZXN1bHQ8dTY0LCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CisgICAgbGV0IHZhbCA9CisgICAgICAgIHU2NDo6ZnJvbV9sZV9ieXRlcyhidWZbKmhlYWQuLipoZWFkICsgOF0udHJ5X2ludG8oKS5tYXBfZXJyKHxlcnJtc2d8IHsKKyAgICAgICAgICAgIEJ5dGVzUGFyc2VGYWlsKGFueWhvdyEoImZhaWwgdG8gcGFyc2UgdTY0IGZyb20gYnl0ZXM6IHt9IiwgZXJybXNnKSkKKyAgICAgICAgfSk/KTsKKyAgICAqaGVhZCArPSA4OworICAgIE9rKHZhbCkKK30KKwogLy8vIFJlYWQgYW5kIHBhcnNlIGJ5dGVzIGFzIHN0cmluZwogcHViKGNyYXRlKSBmbiByZWFkX3N0cl9mcm9tX2J5dGVzKAogICAgIGJ1ZjogJlt1OF0sCkBAIC01MTYsMTAgKzUzNiwxNSBAQAogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSBmbGFnIGxpc3QgYXBpCiAgICAgZm4gdGVzdF9saXN0X2ZsYWcoKSB7CiAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0KLSAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7CisgICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0KKyAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgKKyAgICAgICAgICAgICZjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CiAKICAgICAgICAgbGV0IHBhY2thZ2VfdGFibGVfcGF0aCA9IHBhY2thZ2VfdGFibGUucGF0aCgpLmRpc3BsYXkoKS50b19zdHJpbmcoKTsKICAgICAgICAgbGV0IGZsYWdfdGFibGVfcGF0aCA9IGZsYWdfdGFibGUucGF0aCgpLmRpc3BsYXkoKS50b19zdHJpbmcoKTsKQEAgLTU4NCwxMiArNjA5LDE5IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIGZsYWcgbGlzdCB3aXRoIGluZm8gYXBpCiAgICAgZm4gdGVzdF9saXN0X2ZsYWdfd2l0aF9pbmZvKCkgewogICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPQotICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPQotICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7CisgICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0KKyAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgKKyAgICAgICAgICAgICZjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgKKyAgICAgICAgICAgICZjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpLAorICAgICAgICApCisgICAgICAgIC51bndyYXAoKTsKIAogICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9wYXRoID0gcGFja2FnZV90YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOwogICAgICAgICBsZXQgZmxhZ190YWJsZV9wYXRoID0gZmxhZ190YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvcGFja2FnZV90YWJsZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3BhY2thZ2VfdGFibGUucnMKaW5kZXggYTViZDllNi4uMjEzNTdjNyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvcGFja2FnZV90YWJsZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9wYWNrYWdlX3RhYmxlLnJzCkBAIC0xNyw3ICsxNywxMCBAQAogLy8hIHBhY2thZ2UgdGFibGUgbW9kdWxlIGRlZmluZXMgdGhlIHBhY2thZ2UgdGFibGUgZmlsZSBmb3JtYXQgYW5kIG1ldGhvZHMgZm9yIHNlcmlhbGl6YXRpb24KIC8vISBhbmQgZGVzZXJpYWxpemF0aW9uCiAKLXVzZSBjcmF0ZTo6e2dldF9idWNrZXRfaW5kZXgsIHJlYWRfc3RyX2Zyb21fYnl0ZXMsIHJlYWRfdTMyX2Zyb21fYnl0ZXMsIHJlYWRfdThfZnJvbV9ieXRlc307Cit1c2UgY3JhdGU6OnsKKyAgICBnZXRfYnVja2V0X2luZGV4LCByZWFkX3N0cl9mcm9tX2J5dGVzLCByZWFkX3UzMl9mcm9tX2J5dGVzLCByZWFkX3U2NF9mcm9tX2J5dGVzLAorICAgIHJlYWRfdThfZnJvbV9ieXRlcywKK307CiB1c2UgY3JhdGU6OntBY29uZmlnU3RvcmFnZUVycm9yLCBTdG9yYWdlRmlsZVR5cGV9OwogdXNlIGFueWhvdzo6YW55aG93OwogdXNlIHNlcmRlOjp7RGVzZXJpYWxpemUsIFNlcmlhbGl6ZX07CkBAIC05Nyw2ICsxMDAsNyBAQAogcHViIHN0cnVjdCBQYWNrYWdlVGFibGVOb2RlIHsKICAgICBwdWIgcGFja2FnZV9uYW1lOiBTdHJpbmcsCiAgICAgcHViIHBhY2thZ2VfaWQ6IHUzMiwKKyAgICBwdWIgZmluZ2VycHJpbnQ6IHU2NCwKICAgICAvLyBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJvb2xlYW4gZmxhZyBpbiB0aGlzIGFjb25maWcgcGFja2FnZSBhbW9uZyBhbGwgYm9vbGVhbgogICAgIC8vIGZsYWdzIGluIHRoaXMgY29udGFpbmVyLgogICAgIHB1YiBib29sZWFuX3N0YXJ0X2luZGV4OiB1MzIsCkBAIC0xMDgsOCArMTEyLDEyIEBACiAgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IGZtdDo6Rm9ybWF0dGVyKSAtPiBmbXQ6OlJlc3VsdCB7CiAgICAgICAgIHdyaXRlbG4hKAogICAgICAgICAgICAgZiwKLSAgICAgICAgICAgICJQYWNrYWdlOiB7fSwgSWQ6IHt9LCBCb29sZWFuIGZsYWcgc3RhcnQgaW5kZXg6IHt9LCBOZXh0OiB7Oj99IiwKLSAgICAgICAgICAgIHNlbGYucGFja2FnZV9uYW1lLCBzZWxmLnBhY2thZ2VfaWQsIHNlbGYuYm9vbGVhbl9zdGFydF9pbmRleCwgc2VsZi5uZXh0X29mZnNldAorICAgICAgICAgICAgIlBhY2thZ2U6IHt9LCBJZDoge30sIEZpbmdlcnByaW50OiB7fSwgQm9vbGVhbiBmbGFnIHN0YXJ0IGluZGV4OiB7fSwgTmV4dDogezo/fSIsCisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbmFtZSwKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9pZCwKKyAgICAgICAgICAgIHNlbGYuZmluZ2VycHJpbnQsCisgICAgICAgICAgICBzZWxmLmJvb2xlYW5fc3RhcnRfaW5kZXgsCisgICAgICAgICAgICBzZWxmLm5leHRfb2Zmc2V0CiAgICAgICAgICk/OwogICAgICAgICBPaygoKSkKICAgICB9CkBAIC0xMTcsNyArMTI1LDE2IEBACiAKIGltcGwgUGFja2FnZVRhYmxlTm9kZSB7CiAgICAgLy8vIFNlcmlhbGl6ZSB0byBieXRlcwotICAgIHB1YiBmbiBpbnRvX2J5dGVzKCZzZWxmKSAtPiBWZWM8dTg+IHsKKyAgICBwdWIgZm4gaW50b19ieXRlcygmc2VsZiwgdmVyc2lvbjogdTMyKSAtPiBWZWM8dTg+IHsKKyAgICAgICAgbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgICAgICAxID0+IFNlbGY6OmludG9fYnl0ZXNfdjEoc2VsZiksCisgICAgICAgICAgICAyID0+IFNlbGY6OmludG9fYnl0ZXNfdjIoc2VsZiksCisgICAgICAgICAgICAvLyBUT0RPKGIvMzE2MzU3Njg2KTogaW50b19ieXRlcyBzaG91bGQgcmV0dXJuIGEgUmVzdWx0LgorICAgICAgICAgICAgXyA9PiBTZWxmOjppbnRvX2J5dGVzX3YyKCZzZWxmKSwKKyAgICAgICAgfQorICAgIH0KKworICAgIGZuIGludG9fYnl0ZXNfdjEoJnNlbGYpIC0+IFZlYzx1OD4gewogICAgICAgICBsZXQgbXV0IHJlc3VsdCA9IFZlYzo6bmV3KCk7CiAgICAgICAgIGxldCBuYW1lX2J5dGVzID0gc2VsZi5wYWNrYWdlX25hbWUuYXNfYnl0ZXMoKTsKICAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCYobmFtZV9ieXRlcy5sZW4oKSBhcyB1MzIpLnRvX2xlX2J5dGVzKCkpOwpAQCAtMTI4LDE4ICsxNDUsNjAgQEAKICAgICAgICAgcmVzdWx0CiAgICAgfQogCi0gICAgLy8vIERlc2VyaWFsaXplIGZyb20gYnl0ZXMKLSAgICBwdWIgZm4gZnJvbV9ieXRlcyhieXRlczogJlt1OF0pIC0+IFJlc3VsdDxTZWxmLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CisgICAgZm4gaW50b19ieXRlc192Migmc2VsZikgLT4gVmVjPHU4PiB7CisgICAgICAgIGxldCBtdXQgcmVzdWx0ID0gVmVjOjpuZXcoKTsKKyAgICAgICAgbGV0IG5hbWVfYnl0ZXMgPSBzZWxmLnBhY2thZ2VfbmFtZS5hc19ieXRlcygpOworICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJihuYW1lX2J5dGVzLmxlbigpIGFzIHUzMikudG9fbGVfYnl0ZXMoKSk7CisgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZShuYW1lX2J5dGVzKTsKKyAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCZzZWxmLnBhY2thZ2VfaWQudG9fbGVfYnl0ZXMoKSk7CisgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZSgmc2VsZi5maW5nZXJwcmludC50b19sZV9ieXRlcygpKTsKKyAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCZzZWxmLmJvb2xlYW5fc3RhcnRfaW5kZXgudG9fbGVfYnl0ZXMoKSk7CisgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZSgmc2VsZi5uZXh0X29mZnNldC51bndyYXBfb3IoMCkudG9fbGVfYnl0ZXMoKSk7CisgICAgICAgIHJlc3VsdAorICAgIH0KKworICAgIC8vLyBEZXNlcmlhbGl6ZSBmcm9tIGJ5dGVzIGJhc2VkIG9uIGZpbGUgdmVyc2lvbi4KKyAgICBwdWIgZm4gZnJvbV9ieXRlcyhieXRlczogJlt1OF0sIHZlcnNpb246IHUzMikgLT4gUmVzdWx0PFNlbGYsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKKyAgICAgICAgbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgICAgICAxID0+IFNlbGY6OmZyb21fYnl0ZXNfdjEoYnl0ZXMpLAorICAgICAgICAgICAgMiA9PiBTZWxmOjpmcm9tX2J5dGVzX3YyKGJ5dGVzKSwKKyAgICAgICAgICAgIF8gPT4geworICAgICAgICAgICAgICAgIHJldHVybiBFcnIoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6Qnl0ZXNQYXJzZUZhaWwoYW55aG93ISgKKyAgICAgICAgICAgICAgICAgICAgIkJpbmFyeSBmaWxlIGlzIGFuIHVuc3VwcG9ydGVkIHZlcnNpb246IHt9IiwKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbgorICAgICAgICAgICAgICAgICkpKQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm4gZnJvbV9ieXRlc192MShieXRlczogJlt1OF0pIC0+IFJlc3VsdDxTZWxmLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CiAgICAgICAgIGxldCBtdXQgaGVhZCA9IDA7Ci0gICAgICAgIGxldCBub2RlID0gU2VsZiB7Ci0gICAgICAgICAgICBwYWNrYWdlX25hbWU6IHJlYWRfc3RyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/LAotICAgICAgICAgICAgcGFja2FnZV9pZDogcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT8sCi0gICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPywKLSAgICAgICAgICAgIG5leHRfb2Zmc2V0OiBtYXRjaCByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPyB7Ci0gICAgICAgICAgICAgICAgMCA9PiBOb25lLAotICAgICAgICAgICAgICAgIHZhbCA9PiBTb21lKHZhbCksCi0gICAgICAgICAgICB9LAorICAgICAgICBsZXQgcGFja2FnZV9uYW1lID0gcmVhZF9zdHJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CisgICAgICAgIGxldCBwYWNrYWdlX2lkID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CisgICAgICAgIC8vIHYxIGRvZXMgbm90IGhhdmUgZmluZ2VycHJpbnQsIHNvIGp1c3Qgc2V0IHRvIDAuCisgICAgICAgIGxldCBmaW5nZXJwcmludDogdTY0ID0gMDsKKyAgICAgICAgbGV0IGJvb2xlYW5fc3RhcnRfaW5kZXggPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKKyAgICAgICAgbGV0IG5leHRfb2Zmc2V0ID0gbWF0Y2ggcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT8geworICAgICAgICAgICAgMCA9PiBOb25lLAorICAgICAgICAgICAgdmFsID0+IFNvbWUodmFsKSwKICAgICAgICAgfTsKKworICAgICAgICBsZXQgbm9kZSA9IFNlbGYgeyBwYWNrYWdlX25hbWUsIHBhY2thZ2VfaWQsIGZpbmdlcnByaW50LCBib29sZWFuX3N0YXJ0X2luZGV4LCBuZXh0X29mZnNldCB9OworICAgICAgICBPayhub2RlKQorICAgIH0KKworICAgIGZuIGZyb21fYnl0ZXNfdjIoYnl0ZXM6ICZbdThdKSAtPiBSZXN1bHQ8U2VsZiwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4geworICAgICAgICBsZXQgbXV0IGhlYWQgPSAwOworICAgICAgICBsZXQgcGFja2FnZV9uYW1lID0gcmVhZF9zdHJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CisgICAgICAgIGxldCBwYWNrYWdlX2lkID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CisgICAgICAgIGxldCBmaW5nZXJwcmludCA9IHJlYWRfdTY0X2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OworICAgICAgICBsZXQgYm9vbGVhbl9zdGFydF9pbmRleCA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OworICAgICAgICBsZXQgbmV4dF9vZmZzZXQgPSBtYXRjaCByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPyB7CisgICAgICAgICAgICAwID0+IE5vbmUsCisgICAgICAgICAgICB2YWwgPT4gU29tZSh2YWwpLAorICAgICAgICB9OworCisgICAgICAgIGxldCBub2RlID0gU2VsZiB7IHBhY2thZ2VfbmFtZSwgcGFja2FnZV9pZCwgZmluZ2VycHJpbnQsIGJvb2xlYW5fc3RhcnRfaW5kZXgsIG5leHRfb2Zmc2V0IH07CiAgICAgICAgIE9rKG5vZGUpCiAgICAgfQogCkBAIC0xODAsNyArMjM5LDExIEBACiAgICAgICAgIFsKICAgICAgICAgICAgIHNlbGYuaGVhZGVyLmludG9fYnl0ZXMoKSwKICAgICAgICAgICAgIHNlbGYuYnVja2V0cy5pdGVyKCkubWFwKHx2fCB2LnVud3JhcF9vcigwKS50b19sZV9ieXRlcygpKS5jb2xsZWN0Ojo8VmVjPF8+PigpLmNvbmNhdCgpLAotICAgICAgICAgICAgc2VsZi5ub2Rlcy5pdGVyKCkubWFwKHx2fCB2LmludG9fYnl0ZXMoKSkuY29sbGVjdDo6PFZlYzxfPj4oKS5jb25jYXQoKSwKKyAgICAgICAgICAgIHNlbGYubm9kZXMKKyAgICAgICAgICAgICAgICAuaXRlcigpCisgICAgICAgICAgICAgICAgLm1hcCh8dnwgdi5pbnRvX2J5dGVzKHNlbGYuaGVhZGVyLnZlcnNpb24pKQorICAgICAgICAgICAgICAgIC5jb2xsZWN0Ojo8VmVjPF8+PigpCisgICAgICAgICAgICAgICAgLmNvbmNhdCgpLAogICAgICAgICBdCiAgICAgICAgIC5jb25jYXQoKQogICAgIH0KQEAgLTE5OSw4ICsyNjIsOCBAQAogICAgICAgICAgICAgLmNvbGxlY3QoKTsKICAgICAgICAgbGV0IG5vZGVzID0gKDAuLm51bV9wYWNrYWdlcykKICAgICAgICAgICAgIC5tYXAofF98IHsKLSAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IFBhY2thZ2VUYWJsZU5vZGU6OmZyb21fYnl0ZXMoJmJ5dGVzW2hlYWQuLl0pPzsKLSAgICAgICAgICAgICAgICBoZWFkICs9IG5vZGUuaW50b19ieXRlcygpLmxlbigpOworICAgICAgICAgICAgICAgIGxldCBub2RlID0gUGFja2FnZVRhYmxlTm9kZTo6ZnJvbV9ieXRlcygmYnl0ZXNbaGVhZC4uXSwgaGVhZGVyLnZlcnNpb24pPzsKKyAgICAgICAgICAgICAgICBoZWFkICs9IG5vZGUuaW50b19ieXRlcyhoZWFkZXIudmVyc2lvbikubGVuKCk7CiAgICAgICAgICAgICAgICAgT2sobm9kZSkKICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAuY29sbGVjdDo6PFJlc3VsdDxWZWM8Xz4sIEFjb25maWdTdG9yYWdlRXJyb3I+PigpCkBAIC0yMjAsMTEgKzI4MywxMyBAQAogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7CiAgICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlOworICAgIHVzZSBjcmF0ZTo6e3JlYWRfdTMyX2Zyb21fc3RhcnRfb2ZfYnl0ZXMsIERFRkFVTFRfRklMRV9WRVJTSU9OLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHRhYmxlIHNlcmlhbGl6YXRpb24KLSAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb24oKSB7Ci0gICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOworICAgIC8vIFRPRE86IGIvMzc2MTA4MjY4IC0gVXNlIHBhcmFtZXRlcml6ZWQgdGVzdHMuCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGxldCBoZWFkZXI6ICZQYWNrYWdlVGFibGVIZWFkZXIgPSAmcGFja2FnZV90YWJsZS5oZWFkZXI7CiAgICAgICAgIGxldCByZWludGVycHJldGVkX2hlYWRlciA9IFBhY2thZ2VUYWJsZUhlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CiAgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF9oZWFkZXIuaXNfb2soKSk7CkBAIC0yMzIsNyArMjk3LDMyIEBACiAKICAgICAgICAgbGV0IG5vZGVzOiAmVmVjPFBhY2thZ2VUYWJsZU5vZGU+ID0gJnBhY2thZ2VfdGFibGUubm9kZXM7CiAgICAgICAgIGZvciBub2RlIGluIG5vZGVzLml0ZXIoKSB7Ci0gICAgICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9ub2RlID0gUGFja2FnZVRhYmxlTm9kZTo6ZnJvbV9ieXRlcygmbm9kZS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOworICAgICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfbm9kZSA9CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlTm9kZTo6ZnJvbV9ieXRlcygmbm9kZS5pbnRvX2J5dGVzKGhlYWRlci52ZXJzaW9uKSwgaGVhZGVyLnZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZSwgJnJlaW50ZXJwcmV0ZWRfbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9ieXRlcyA9IHBhY2thZ2VfdGFibGUuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF90YWJsZSA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmcGFja2FnZV90YWJsZV9ieXRlcyk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF90YWJsZS5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxISgmcGFja2FnZV90YWJsZSwgJnJlaW50ZXJwcmV0ZWRfdGFibGUudW53cmFwKCkpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfdGFibGVfYnl0ZXMubGVuKCkgYXMgdTMyLCBoZWFkZXIuZmlsZV9zaXplKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX21heCgpIHsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IGhlYWRlcjogJlBhY2thZ2VUYWJsZUhlYWRlciA9ICZwYWNrYWdlX3RhYmxlLmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gUGFja2FnZVRhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShoZWFkZXIsICZyZWludGVycHJldGVkX2hlYWRlci51bndyYXAoKSk7CisKKyAgICAgICAgbGV0IG5vZGVzOiAmVmVjPFBhY2thZ2VUYWJsZU5vZGU+ID0gJnBhY2thZ2VfdGFibGUubm9kZXM7CisgICAgICAgIGZvciBub2RlIGluIG5vZGVzLml0ZXIoKSB7CisgICAgICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9ub2RlID0KKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGVOb2RlOjpmcm9tX2J5dGVzKCZub2RlLmludG9fYnl0ZXMoaGVhZGVyLnZlcnNpb24pLCBoZWFkZXIudmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwogICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLCAmcmVpbnRlcnByZXRlZF9ub2RlKTsKICAgICAgICAgfQogCkBAIC0yNDcsMTcgKzMzNywzNiBAQAogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAogICAgIC8vIGJ5dGVzCiAgICAgZm4gdGVzdF92ZXJzaW9uX251bWJlcigpIHsKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCk7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGxldCBieXRlcyA9ICZwYWNrYWdlX3RhYmxlLmludG9fYnl0ZXMoKTsKLSAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKLSAgICAgICAgbGV0IHZlcnNpb24gPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOwotICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb24sIDEpOworICAgICAgICBsZXQgdW5wYWNrZWRfdmVyc2lvbiA9IHJlYWRfdTMyX2Zyb21fc3RhcnRfb2ZfYnl0ZXMoYnl0ZXMpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKHVucGFja2VkX3ZlcnNpb24sIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9yb3VuZF90cmlwX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCB0YWJsZTogUGFja2FnZVRhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCB0YWJsZV9ieXRlcyA9IHRhYmxlLmludG9fYnl0ZXMoKTsKKworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF90YWJsZSA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmdGFibGVfYnl0ZXMpLnVud3JhcCgpOworCisgICAgICAgIGFzc2VydF9lcSEodGFibGUsIHJlaW50ZXJwcmV0ZWRfdGFibGUpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3JvdW5kX3RyaXBfbWF4KCkgeworICAgICAgICBsZXQgdGFibGU6IFBhY2thZ2VUYWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOworICAgICAgICBsZXQgdGFibGVfYnl0ZXMgPSB0YWJsZS5pbnRvX2J5dGVzKCk7CisKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfdGFibGUgPSBQYWNrYWdlVGFibGU6OmZyb21fYnl0ZXMoJnRhYmxlX2J5dGVzKS51bndyYXAoKTsKKworICAgICAgICBhc3NlcnRfZXEhKHRhYmxlLCByZWludGVycHJldGVkX3RhYmxlKTsKICAgICB9CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmlsZSB0eXBlIGNoZWNrCiAgICAgZm4gdGVzdF9maWxlX3R5cGVfY2hlY2soKSB7Ci0gICAgICAgIGxldCBtdXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKKyAgICAgICAgbGV0IG11dCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIHBhY2thZ2VfdGFibGUuaGVhZGVyLmZpbGVfdHlwZSA9IDEyM3U4OwogICAgICAgICBsZXQgZXJyb3IgPSBQYWNrYWdlVGFibGU6OmZyb21fYnl0ZXMoJnBhY2thZ2VfdGFibGUuaW50b19ieXRlcygpKS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy90ZXN0X3V0aWxzLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvdGVzdF91dGlscy5ycwppbmRleCAxMDY2NjZjLi43YzYwM2RmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy90ZXN0X3V0aWxzLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3Rlc3RfdXRpbHMucnMKQEAgLTI0LDMyICsyNCw1OSBAQAogdXNlIHN0ZDo6aW86OldyaXRlOwogdXNlIHRlbXBmaWxlOjpOYW1lZFRlbXBGaWxlOwogCi1wdWIgZm4gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpIC0+IFBhY2thZ2VUYWJsZSB7CitwdWIgZm4gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSh2ZXJzaW9uOiB1MzIpIC0+IFBhY2thZ2VUYWJsZSB7CiAgICAgbGV0IGhlYWRlciA9IFBhY2thZ2VUYWJsZUhlYWRlciB7Ci0gICAgICAgIHZlcnNpb246IDEsCisgICAgICAgIHZlcnNpb246IHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKCJtb2NrdXAiKSwKICAgICAgICAgZmlsZV90eXBlOiBTdG9yYWdlRmlsZVR5cGU6OlBhY2thZ2VNYXAgYXMgdTgsCi0gICAgICAgIGZpbGVfc2l6ZTogMjA5LAorICAgICAgICBmaWxlX3NpemU6IG1hdGNoIHZlcnNpb24geworICAgICAgICAgICAgMSA9PiAyMDksCisgICAgICAgICAgICAyID0+IDIzMywKKyAgICAgICAgICAgIF8gPT4gcGFuaWMhKCJVbnN1cHBvcnRlZCB2ZXJzaW9uLiIpLAorICAgICAgICB9LAogICAgICAgICBudW1fcGFja2FnZXM6IDMsCiAgICAgICAgIGJ1Y2tldF9vZmZzZXQ6IDMxLAogICAgICAgICBub2RlX29mZnNldDogNTksCiAgICAgfTsKLSAgICBsZXQgYnVja2V0czogVmVjPE9wdGlvbjx1MzI+PiA9IHZlYyFbU29tZSg1OSksIE5vbmUsIE5vbmUsIFNvbWUoMTA5KSwgTm9uZSwgTm9uZSwgTm9uZV07CisgICAgbGV0IGJ1Y2tldHM6IFZlYzxPcHRpb248dTMyPj4gPSBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgMSA9PiB2ZWMhW1NvbWUoNTkpLCBOb25lLCBOb25lLCBTb21lKDEwOSksIE5vbmUsIE5vbmUsIE5vbmVdLAorICAgICAgICAyID0+IHZlYyFbU29tZSg1OSksIE5vbmUsIE5vbmUsIFNvbWUoMTE3KSwgTm9uZSwgTm9uZSwgTm9uZV0sCisgICAgICAgIF8gPT4gcGFuaWMhKCJVbnN1cHBvcnRlZCB2ZXJzaW9uLiIpLAorICAgIH07CiAgICAgbGV0IGZpcnN0X25vZGUgPSBQYWNrYWdlVGFibGVOb2RlIHsKICAgICAgICAgcGFja2FnZV9uYW1lOiBTdHJpbmc6OmZyb20oImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKSwKICAgICAgICAgcGFja2FnZV9pZDogMSwKKyAgICAgICAgZmluZ2VycHJpbnQ6IG1hdGNoIHZlcnNpb24geworICAgICAgICAgICAgMSA9PiAwLAorICAgICAgICAgICAgMiA9PiA0NDMxOTQwNTAyMjc0ODU3OTY0dTY0LAorICAgICAgICAgICAgXyA9PiBwYW5pYyEoIlVuc3VwcG9ydGVkIHZlcnNpb24uIiksCisgICAgICAgIH0sCiAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDMsCiAgICAgICAgIG5leHRfb2Zmc2V0OiBOb25lLAogICAgIH07CiAgICAgbGV0IHNlY29uZF9ub2RlID0gUGFja2FnZVRhYmxlTm9kZSB7CiAgICAgICAgIHBhY2thZ2VfbmFtZTogU3RyaW5nOjpmcm9tKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiksCiAgICAgICAgIHBhY2thZ2VfaWQ6IDAsCisgICAgICAgIGZpbmdlcnByaW50OiBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgICAgIDEgPT4gMCwKKyAgICAgICAgICAgIDIgPT4gMTUyNDg5NDg1MTA1OTAxNTgwODZ1NjQsCisgICAgICAgICAgICBfID0+IHBhbmljISgiVW5zdXBwb3J0ZWQgdmVyc2lvbi4iKSwKKyAgICAgICAgfSwKICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogMCwKLSAgICAgICAgbmV4dF9vZmZzZXQ6IFNvbWUoMTU5KSwKKyAgICAgICAgbmV4dF9vZmZzZXQ6IG1hdGNoIHZlcnNpb24geworICAgICAgICAgICAgMSA9PiBTb21lKDE1OSksCisgICAgICAgICAgICAyID0+IFNvbWUoMTc1KSwKKyAgICAgICAgICAgIF8gPT4gcGFuaWMhKCJVbnN1cHBvcnRlZCB2ZXJzaW9uLiIpLAorICAgICAgICB9LAogICAgIH07CiAgICAgbGV0IHRoaXJkX25vZGUgPSBQYWNrYWdlVGFibGVOb2RlIHsKICAgICAgICAgcGFja2FnZV9uYW1lOiBTdHJpbmc6OmZyb20oImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKSwKICAgICAgICAgcGFja2FnZV9pZDogMiwKKyAgICAgICAgZmluZ2VycHJpbnQ6IG1hdGNoIHZlcnNpb24geworICAgICAgICAgICAgMSA9PiAwLAorICAgICAgICAgICAgMiA9PiAxNjIzMzIyOTkxNzcxMTYyMjM3NXU2NCwKKyAgICAgICAgICAgIF8gPT4gcGFuaWMhKCJVbnN1cHBvcnRlZCB2ZXJzaW9uLiIpLAorICAgICAgICB9LAogICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiA2LAogICAgICAgICBuZXh0X29mZnNldDogTm9uZSwKICAgICB9OwpAQCAtNzYsOSArMTAzLDkgQEAKICAgICB9CiB9CiAKLXB1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCkgLT4gRmxhZ1RhYmxlIHsKK3B1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKHZlcnNpb246IHUzMikgLT4gRmxhZ1RhYmxlIHsKICAgICBsZXQgaGVhZGVyID0gRmxhZ1RhYmxlSGVhZGVyIHsKLSAgICAgICAgdmVyc2lvbjogMSwKKyAgICAgICAgdmVyc2lvbjogdmVyc2lvbiwKICAgICAgICAgY29udGFpbmVyOiBTdHJpbmc6OmZyb20oIm1vY2t1cCIpLAogICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ01hcCBhcyB1OCwKICAgICAgICAgZmlsZV9zaXplOiAzMjEsCkBAIC0xMTgsOSArMTQ1LDkgQEAKICAgICBGbGFnVGFibGUgeyBoZWFkZXIsIGJ1Y2tldHMsIG5vZGVzIH0KIH0KIAotcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpIC0+IEZsYWdWYWx1ZUxpc3QgeworcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCh2ZXJzaW9uOiB1MzIpIC0+IEZsYWdWYWx1ZUxpc3QgewogICAgIGxldCBoZWFkZXIgPSBGbGFnVmFsdWVIZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiAxLAorICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbSgibW9ja3VwIiksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpGbGFnVmFsIGFzIHU4LAogICAgICAgICBmaWxlX3NpemU6IDM1LApAQCAtMTMxLDkgKzE1OCw5IEBACiAgICAgRmxhZ1ZhbHVlTGlzdCB7IGhlYWRlciwgYm9vbGVhbnMgfQogfQogCi1wdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKSAtPiBGbGFnSW5mb0xpc3QgeworcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KHZlcnNpb246IHUzMikgLT4gRmxhZ0luZm9MaXN0IHsKICAgICBsZXQgaGVhZGVyID0gRmxhZ0luZm9IZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiAxLAorICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbSgibW9ja3VwIiksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpGbGFnSW5mbyBhcyB1OCwKICAgICAgICAgZmlsZV9zaXplOiAzNSwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0Fjb25maWdTdG9yYWdlRXhjZXB0aW9uLmphdmEKaW5kZXggODZhNzVmMi4uMzI0YzU1ZCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0Fjb25maWdTdG9yYWdlRXhjZXB0aW9uLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0Fjb25maWdTdG9yYWdlRXhjZXB0aW9uLmphdmEKQEAgLTE2LDEyICsxNiwxMjIgQEAKIAogcGFja2FnZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZTsKIAorLyoqCisgKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGFjY2Vzc2luZyBBY29uZmlnIFN0b3JhZ2UuCisgKgorICogPHA+VGhpcyBleGNlcHRpb24gaW5kaWNhdGVzIGEgZ2VuZXJhbCBwcm9ibGVtIHdpdGggQWNvbmZpZyBTdG9yYWdlLCBzdWNoIGFzIGFuIGluYWJpbGl0eSB0byByZWFkCisgKiBvciB3cml0ZSBkYXRhLgorICovCiBwdWJsaWMgY2xhc3MgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKworICAgIC8qKiBHZW5lcmljIGVycm9yIGNvZGUgaW5kaWNhdGluZyBhbiB1bnNwZWNpZmllZCBBY29uZmlnIFN0b3JhZ2UgZXJyb3IuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfR0VORVJJQyA9IDA7CisKKyAgICAvKiogRXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIEFjb25maWcgU3RvcmFnZSBzeXN0ZW0gaXMgbm90IGZvdW5kIG9uIHRoZSBkZXZpY2UuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfU1RPUkFHRV9TWVNURU1fTk9UX0ZPVU5EID0gMTsKKworICAgIC8qKiBFcnJvciBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24gcGFja2FnZSBpcyBub3QgZm91bmQuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQgPSAyOworCisgICAgLyoqIEVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGlzIG5vdCBmb3VuZC4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9DT05UQUlORVJfTk9UX0ZPVU5EID0gMzsKKworICAgIC8qKiBFcnJvciBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgQWNvbmZpZyBTdG9yYWdlIGZpbGUuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFID0gNDsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0ZJTEVfRklOR0VSUFJJTlRfTUlTTUFUQ0ggPSA1OworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUVycm9yQ29kZTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0Bjb2RlIEFjb25maWdTdG9yYWdlRXhjZXB0aW9ufSB3aXRoIGEgZ2VuZXJpYyBlcnJvciBjb2RlIGFuZCB0aGUgc3BlY2lmaWVkCisgICAgICogZGV0YWlsIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbXNnIFRoZSBkZXRhaWwgbWVzc2FnZSBmb3IgdGhpcyBleGNlcHRpb24uCisgICAgICovCiAgICAgcHVibGljIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKFN0cmluZyBtc2cpIHsKICAgICAgICAgc3VwZXIobXNnKTsKKyAgICAgICAgbUVycm9yQ29kZSA9IEVSUk9SX0dFTkVSSUM7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb259IHdpdGggYSBnZW5lcmljIGVycm9yIGNvZGUsIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBkZXRhaWwgbWVzc2FnZSwgYW5kIGNhdXNlLgorICAgICAqCisgICAgICogQHBhcmFtIG1zZyBUaGUgZGV0YWlsIG1lc3NhZ2UgZm9yIHRoaXMgZXhjZXB0aW9uLgorICAgICAqIEBwYXJhbSBjYXVzZSBUaGUgY2F1c2Ugb2YgdGhpcyBleGNlcHRpb24uCisgICAgICovCiAgICAgcHVibGljIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSBjYXVzZSkgewogICAgICAgICBzdXBlcihtc2csIGNhdXNlKTsKKyAgICAgICAgbUVycm9yQ29kZSA9IEVSUk9SX0dFTkVSSUM7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb259IHdpdGggdGhlIHNwZWNpZmllZCBlcnJvciBjb2RlIGFuZCBkZXRhaWwKKyAgICAgKiBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBUaGUgZXJyb3IgY29kZSBmb3IgdGhpcyBleGNlcHRpb24uCisgICAgICogQHBhcmFtIG1zZyBUaGUgZGV0YWlsIG1lc3NhZ2UgZm9yIHRoaXMgZXhjZXB0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbihpbnQgZXJyb3JDb2RlLCBTdHJpbmcgbXNnKSB7CisgICAgICAgIHN1cGVyKG1zZyk7CisgICAgICAgIG1FcnJvckNvZGUgPSBlcnJvckNvZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb259IHdpdGggdGhlIHNwZWNpZmllZCBlcnJvciBjb2RlLCBkZXRhaWwKKyAgICAgKiBtZXNzYWdlLCBhbmQgY2F1c2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIFRoZSBlcnJvciBjb2RlIGZvciB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKiBAcGFyYW0gbXNnIFRoZSBkZXRhaWwgbWVzc2FnZSBmb3IgdGhpcyBleGNlcHRpb24uCisgICAgICogQHBhcmFtIGNhdXNlIFRoZSBjYXVzZSBvZiB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oaW50IGVycm9yQ29kZSwgU3RyaW5nIG1zZywgVGhyb3dhYmxlIGNhdXNlKSB7CisgICAgICAgIHN1cGVyKG1zZywgY2F1c2UpOworICAgICAgICBtRXJyb3JDb2RlID0gZXJyb3JDb2RlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGVycm9yIGNvZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXhjZXB0aW9uLgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgZXJyb3IgY29kZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEVycm9yQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIG1FcnJvckNvZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhpcyBleGNlcHRpb24sIGluY2x1ZGluZyB0aGUgZXJyb3IgY29kZSBhbmQgdGhlIG9yaWdpbmFsCisgICAgICogbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGVycm9yIG1lc3NhZ2UuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICByZXR1cm4gZXJyb3JTdHJpbmcoKSArICI6ICIgKyBzdXBlci5nZXRNZXNzYWdlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgY29kZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGVycm9yIGNvZGUgc3RyaW5nLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGVycm9yU3RyaW5nKCkgeworICAgICAgICBzd2l0Y2ggKG1FcnJvckNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfR0VORVJJQzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SX0dFTkVSSUMiOworICAgICAgICAgICAgY2FzZSBFUlJPUl9TVE9SQUdFX1NZU1RFTV9OT1RfRk9VTkQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFUlJPUl9TVE9SQUdFX1NZU1RFTV9OT1RfRk9VTkQiOworICAgICAgICAgICAgY2FzZSBFUlJPUl9QQUNLQUdFX05PVF9GT1VORDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5EIjsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfQ09OVEFJTkVSX05PVF9GT1VORDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SX0NPTlRBSU5FUl9OT1RfRk9VTkQiOworICAgICAgICAgICAgY2FzZSBFUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEU6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUiOworICAgICAgICAgICAgY2FzZSBFUlJPUl9GSUxFX0ZJTkdFUlBSSU5UX01JU01BVENIOgorICAgICAgICAgICAgICAgIHJldHVybiAiRVJST1JfRklMRV9GSU5HRVJQUklOVF9NSVNNQVRDSCI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAiPFVua25vd24gZXJyb3IgY29kZSAiICsgbUVycm9yQ29kZSArICI+IjsKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9CeXRlQnVmZmVyUmVhZGVyLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQnl0ZUJ1ZmZlclJlYWRlci5qYXZhCmluZGV4IDRiZWEwODMuLjFmYmNiODUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9CeXRlQnVmZmVyUmVhZGVyLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0J5dGVCdWZmZXJSZWFkZXIuamF2YQpAQCAtNDEsOCArNDEsMTYgQEAKICAgICAgICAgcmV0dXJuIHRoaXMubUJ5dGVCdWZmZXIuZ2V0SW50KCk7CiAgICAgfQogCisgICAgcHVibGljIGxvbmcgcmVhZExvbmcoKSB7CisgICAgICAgIHJldHVybiB0aGlzLm1CeXRlQnVmZmVyLmdldExvbmcoKTsKKyAgICB9CisKICAgICBwdWJsaWMgU3RyaW5nIHJlYWRTdHJpbmcoKSB7CiAgICAgICAgIGludCBsZW5ndGggPSByZWFkSW50KCk7CisgICAgICAgIGlmIChsZW5ndGggPiAxMDI0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJTdHJpbmcgbGVuZ3RoIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUgKDEwMjQgYnl0ZXMpOiAiICsgbGVuZ3RoKTsKKyAgICAgICAgfQogICAgICAgICBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVtsZW5ndGhdOwogICAgICAgICBtQnl0ZUJ1ZmZlci5nZXQoYnl0ZXMsIDAsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ5dGVzLCBTdGFuZGFyZENoYXJzZXRzLlVURl84KTsKQEAgLTU1LDQgKzYzLDggQEAKICAgICBwdWJsaWMgdm9pZCBwb3NpdGlvbihpbnQgbmV3UG9zaXRpb24pIHsKICAgICAgICAgbUJ5dGVCdWZmZXIucG9zaXRpb24obmV3UG9zaXRpb24pOwogICAgIH0KKworICAgIHB1YmxpYyBpbnQgcG9zaXRpb24oKSB7CisgICAgICAgIHJldHVybiBtQnl0ZUJ1ZmZlci5wb3NpdGlvbigpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9GaWxlVHlwZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0ZpbGVUeXBlLmphdmEKaW5kZXggYjBiMWI5Yi4uYzM1NDg3MyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0ZpbGVUeXBlLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0ZpbGVUeXBlLmphdmEKQEAgLTQyLDQgKzQyLDIwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlBBQ0tBR0VfTUFQIjsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkZMQUdfTUFQIjsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkZMQUdfVkFMIjsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkZMQUdfSU5GTyI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAidW5yZWNvZ25pemVkIHR5cGUiOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0ZsYWdUYWJsZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0ZsYWdUYWJsZS5qYXZhCmluZGV4IDk4MzhhN2MuLjc1Nzg0NGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9GbGFnVGFibGUuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvRmxhZ1RhYmxlLmphdmEKQEAgLTM3LDkgKzM3LDE2IEBACiAgICAgcHVibGljIE5vZGUgZ2V0KGludCBwYWNrYWdlSWQsIFN0cmluZyBmbGFnTmFtZSkgewogICAgICAgICBpbnQgbnVtQnVja2V0cyA9IChtSGVhZGVyLm1Ob2RlT2Zmc2V0IC0gbUhlYWRlci5tQnVja2V0T2Zmc2V0KSAvIDQ7CiAgICAgICAgIGludCBidWNrZXRJbmRleCA9IFRhYmxlVXRpbHMuZ2V0QnVja2V0SW5kZXgobWFrZUtleShwYWNrYWdlSWQsIGZsYWdOYW1lKSwgbnVtQnVja2V0cyk7CisgICAgICAgIGludCBuZXdQb3NpdGlvbiA9IG1IZWFkZXIubUJ1Y2tldE9mZnNldCArIGJ1Y2tldEluZGV4ICogNDsKKyAgICAgICAgaWYgKG5ld1Bvc2l0aW9uID49IG1IZWFkZXIubU5vZGVPZmZzZXQpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAKLSAgICAgICAgbVJlYWRlci5wb3NpdGlvbihtSGVhZGVyLm1CdWNrZXRPZmZzZXQgKyBidWNrZXRJbmRleCAqIDQpOworICAgICAgICBtUmVhZGVyLnBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKICAgICAgICAgaW50IG5vZGVJbmRleCA9IG1SZWFkZXIucmVhZEludCgpOworICAgICAgICBpZiAobm9kZUluZGV4IDwgbUhlYWRlci5tTm9kZU9mZnNldCB8fCBub2RlSW5kZXggPj0gbUhlYWRlci5tRmlsZVNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAKICAgICAgICAgd2hpbGUgKG5vZGVJbmRleCAhPSAtMSkgewogICAgICAgICAgICAgbVJlYWRlci5wb3NpdGlvbihub2RlSW5kZXgpOwpAQCAtNTAsNyArNTcsNyBAQAogICAgICAgICAgICAgbm9kZUluZGV4ID0gbm9kZS5tTmV4dE9mZnNldDsKICAgICAgICAgfQogCi0gICAgICAgIHRocm93IG5ldyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbigiZ2V0IGNhbm5vdCBmaW5kIGZsYWc6ICIgKyBmbGFnTmFtZSk7CisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIHB1YmxpYyBIZWFkZXIgZ2V0SGVhZGVyKCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1BhY2thZ2VUYWJsZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1BhY2thZ2VUYWJsZS5qYXZhCmluZGV4IDc3M2I4ODIuLjFlN2MyY2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9QYWNrYWdlVGFibGUuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvUGFja2FnZVRhYmxlLmphdmEKQEAgLTE5LDEwICsxOSwxNiBAQAogaW1wb3J0IHN0YXRpYyBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzg7CiAKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiAKIHB1YmxpYyBjbGFzcyBQYWNrYWdlVGFibGUgewogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJTkdFUlBSSU5UX0JZVEVTID0gODsKKyAgICAvLyBpbnQ6IG1QYWNrYWdlSWQgKyBpbnQ6IG1Cb29sZWFuU3RhcnRJbmRleCArIGludDogbU5leHRPZmZzZXQKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9ERV9TS0lQX0JZVEVTID0gMTI7CisKICAgICBwcml2YXRlIEhlYWRlciBtSGVhZGVyOwogICAgIHByaXZhdGUgQnl0ZUJ1ZmZlclJlYWRlciBtUmVhZGVyOwogCkBAIC0zNSwyMyArNDEsNDEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTm9kZSBnZXQoU3RyaW5nIHBhY2thZ2VOYW1lKSB7Ci0KICAgICAgICAgaW50IG51bUJ1Y2tldHMgPSAobUhlYWRlci5tTm9kZU9mZnNldCAtIG1IZWFkZXIubUJ1Y2tldE9mZnNldCkgLyA0OwogICAgICAgICBpbnQgYnVja2V0SW5kZXggPSBUYWJsZVV0aWxzLmdldEJ1Y2tldEluZGV4KHBhY2thZ2VOYW1lLmdldEJ5dGVzKFVURl84KSwgbnVtQnVja2V0cyk7Ci0KLSAgICAgICAgbVJlYWRlci5wb3NpdGlvbihtSGVhZGVyLm1CdWNrZXRPZmZzZXQgKyBidWNrZXRJbmRleCAqIDQpOworICAgICAgICBpbnQgbmV3UG9zaXRpb24gPSBtSGVhZGVyLm1CdWNrZXRPZmZzZXQgKyBidWNrZXRJbmRleCAqIDQ7CisgICAgICAgIGlmIChuZXdQb3NpdGlvbiA+PSBtSGVhZGVyLm1Ob2RlT2Zmc2V0KSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBtUmVhZGVyLnBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKICAgICAgICAgaW50IG5vZGVJbmRleCA9IG1SZWFkZXIucmVhZEludCgpOwogCisgICAgICAgIGlmIChub2RlSW5kZXggPCBtSGVhZGVyLm1Ob2RlT2Zmc2V0IHx8IG5vZGVJbmRleCA+PSBtSGVhZGVyLm1GaWxlU2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKwogICAgICAgICB3aGlsZSAobm9kZUluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICBtUmVhZGVyLnBvc2l0aW9uKG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBOb2RlIG5vZGUgPSBOb2RlLmZyb21CeXRlcyhtUmVhZGVyKTsKKyAgICAgICAgICAgIE5vZGUgbm9kZSA9IE5vZGUuZnJvbUJ5dGVzKG1SZWFkZXIsIG1IZWFkZXIubVZlcnNpb24pOwogICAgICAgICAgICAgaWYgKE9iamVjdHMuZXF1YWxzKHBhY2thZ2VOYW1lLCBub2RlLm1QYWNrYWdlTmFtZSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vZGVJbmRleCA9IG5vZGUubU5leHRPZmZzZXQ7CiAgICAgICAgIH0KIAotICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oImdldCBjYW5ub3QgZmluZCBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFBhY2thZ2VMaXN0KCkgeworICAgICAgICBMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PihtSGVhZGVyLm1OdW1QYWNrYWdlcyk7CisgICAgICAgIG1SZWFkZXIucG9zaXRpb24obUhlYWRlci5tTm9kZU9mZnNldCk7CisgICAgICAgIGludCBmaW5nZXJwcmludEJ5dGVzID0gbUhlYWRlci5tVmVyc2lvbiA9PSAxID8gMCA6IEZJTkdFUlBSSU5UX0JZVEVTOworICAgICAgICBpbnQgc2tpcEJ5dGVzID0gZmluZ2VycHJpbnRCeXRlcyArIE5PREVfU0tJUF9CWVRFUzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtSGVhZGVyLm1OdW1QYWNrYWdlczsgaSsrKSB7CisgICAgICAgICAgICBsaXN0LmFkZChtUmVhZGVyLnJlYWRTdHJpbmcoKSk7CisgICAgICAgICAgICBtUmVhZGVyLnBvc2l0aW9uKG1SZWFkZXIucG9zaXRpb24oKSArIHNraXBCeXRlcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAgfQogCiAgICAgcHVibGljIEhlYWRlciBnZXRIZWFkZXIoKSB7CkBAIC02OCw3ICs5Miw3IEBACiAgICAgICAgIHByaXZhdGUgaW50IG1CdWNrZXRPZmZzZXQ7CiAgICAgICAgIHByaXZhdGUgaW50IG1Ob2RlT2Zmc2V0OwogCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgSGVhZGVyIGZyb21CeXRlcyhCeXRlQnVmZmVyUmVhZGVyIHJlYWRlcikgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBIZWFkZXIgZnJvbUJ5dGVzKEJ5dGVCdWZmZXJSZWFkZXIgcmVhZGVyKSB7CiAgICAgICAgICAgICBIZWFkZXIgaGVhZGVyID0gbmV3IEhlYWRlcigpOwogICAgICAgICAgICAgaGVhZGVyLm1WZXJzaW9uID0gcmVhZGVyLnJlYWRJbnQoKTsKICAgICAgICAgICAgIGhlYWRlci5tQ29udGFpbmVyID0gcmVhZGVyLnJlYWRTdHJpbmcoKTsKQEAgLTExOCwxMCArMTQyLDI0IEBACiAKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbVBhY2thZ2VOYW1lOwogICAgICAgICBwcml2YXRlIGludCBtUGFja2FnZUlkOworICAgICAgICBwcml2YXRlIGxvbmcgbVBhY2thZ2VGaW5nZXJwcmludDsKICAgICAgICAgcHJpdmF0ZSBpbnQgbUJvb2xlYW5TdGFydEluZGV4OwogICAgICAgICBwcml2YXRlIGludCBtTmV4dE9mZnNldDsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNQYWNrYWdlRmluZ2VycHJpbnQ7CiAKLSAgICAgICAgcHVibGljIHN0YXRpYyBOb2RlIGZyb21CeXRlcyhCeXRlQnVmZmVyUmVhZGVyIHJlYWRlcikgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBOb2RlIGZyb21CeXRlcyhCeXRlQnVmZmVyUmVhZGVyIHJlYWRlciwgaW50IHZlcnNpb24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmVyc2lvbikgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyb21CeXRlc1YxKHJlYWRlcik7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbUJ5dGVzVjIocmVhZGVyKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBEbyB3ZSB3YW50IHRvIHRocm93IGhlcmU/CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgTm9kZSBmcm9tQnl0ZXNWMShCeXRlQnVmZmVyUmVhZGVyIHJlYWRlcikgewogICAgICAgICAgICAgTm9kZSBub2RlID0gbmV3IE5vZGUoKTsKICAgICAgICAgICAgIG5vZGUubVBhY2thZ2VOYW1lID0gcmVhZGVyLnJlYWRTdHJpbmcoKTsKICAgICAgICAgICAgIG5vZGUubVBhY2thZ2VJZCA9IHJlYWRlci5yZWFkSW50KCk7CkBAIC0xMzEsNiArMTY5LDE4IEBACiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQogCisgICAgICAgIHByaXZhdGUgc3RhdGljIE5vZGUgZnJvbUJ5dGVzVjIoQnl0ZUJ1ZmZlclJlYWRlciByZWFkZXIpIHsKKyAgICAgICAgICAgIE5vZGUgbm9kZSA9IG5ldyBOb2RlKCk7CisgICAgICAgICAgICBub2RlLm1QYWNrYWdlTmFtZSA9IHJlYWRlci5yZWFkU3RyaW5nKCk7CisgICAgICAgICAgICBub2RlLm1QYWNrYWdlSWQgPSByZWFkZXIucmVhZEludCgpOworICAgICAgICAgICAgbm9kZS5tUGFja2FnZUZpbmdlcnByaW50ID0gcmVhZGVyLnJlYWRMb25nKCk7CisgICAgICAgICAgICBub2RlLm1Cb29sZWFuU3RhcnRJbmRleCA9IHJlYWRlci5yZWFkSW50KCk7CisgICAgICAgICAgICBub2RlLm1OZXh0T2Zmc2V0ID0gcmVhZGVyLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG5vZGUubU5leHRPZmZzZXQgPSBub2RlLm1OZXh0T2Zmc2V0ID09IDAgPyAtMSA6IG5vZGUubU5leHRPZmZzZXQ7CisgICAgICAgICAgICBub2RlLm1IYXNQYWNrYWdlRmluZ2VycHJpbnQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgICAgIHJldHVybiBPYmplY3RzLmhhc2gobVBhY2thZ2VOYW1lLCBtUGFja2FnZUlkLCBtQm9vbGVhblN0YXJ0SW5kZXgsIG1OZXh0T2Zmc2V0KTsKQEAgLTE2MSw2ICsyMTEsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBtUGFja2FnZUlkOwogICAgICAgICB9CiAKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0UGFja2FnZUZpbmdlcnByaW50KCkgeworICAgICAgICAgICAgcmV0dXJuIG1QYWNrYWdlRmluZ2VycHJpbnQ7CisgICAgICAgIH0KKwogICAgICAgICBwdWJsaWMgaW50IGdldEJvb2xlYW5TdGFydEluZGV4KCkgewogICAgICAgICAgICAgcmV0dXJuIG1Cb29sZWFuU3RhcnRJbmRleDsKICAgICAgICAgfQpAQCAtMTY4LDUgKzIyMiw5IEBACiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0TmV4dE9mZnNldCgpIHsKICAgICAgICAgICAgIHJldHVybiBtTmV4dE9mZnNldDsKICAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc1BhY2thZ2VGaW5nZXJwcmludCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSGFzUGFja2FnZUZpbmdlcnByaW50OworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlRmlsZVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1YWMzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlRmlsZVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlOworCitpbXBvcnQgamF2YS5pby5DbG9zZWFibGU7CitpbXBvcnQgamF2YS5uaW8uTWFwcGVkQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkRpcmVjdG9yeVN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuTm9TdWNoRmlsZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlN0YW5kYXJkT3Blbk9wdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqIEBoaWRlICovCitwdWJsaWMgY2xhc3MgU3RvcmFnZUZpbGVQcm92aWRlciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NQVBfUEFUSCA9ICIvbWV0YWRhdGEvYWNvbmZpZy9tYXBzLyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfQk9PVF9QQVRIID0gIi9tZXRhZGF0YS9hY29uZmlnL2Jvb3QvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE1BUF9GSUxFX0VYVCA9ICIucGFja2FnZS5tYXAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGTUFQX0ZJTEVfRVhUID0gIi5mbGFnLm1hcCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTF9GSUxFX0VYVCA9ICIudmFsIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdG9yYWdlRmlsZVByb3ZpZGVyIERFRkFVTFRfSU5TVEFOQ0UgPQorICAgICAgICAgICAgbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoREVGQVVMVF9NQVBfUEFUSCwgREVGQVVMVF9CT09UX1BBVEgpOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU1hcFBhdGg7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUJvb3RQYXRoOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBTdG9yYWdlRmlsZVByb3ZpZGVyIGdldERlZmF1bHRQcm92aWRlcigpIHsKKyAgICAgICAgcmV0dXJuIERFRkFVTFRfSU5TVEFOQ0U7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIFN0b3JhZ2VGaWxlUHJvdmlkZXIoU3RyaW5nIG1hcFBhdGgsIFN0cmluZyBib290UGF0aCkgeworICAgICAgICBtTWFwUGF0aCA9IG1hcFBhdGg7CisgICAgICAgIG1Cb290UGF0aCA9IGJvb3RQYXRoOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gbGlzdENvbnRhaW5lcnMoU3RyaW5nW10gZXhjbHVkZXMpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTZXQ8U3RyaW5nPiBzZXQgPSBuZXcgSGFzaFNldDw+KEFycmF5cy5hc0xpc3QoZXhjbHVkZXMpKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgRGlyZWN0b3J5U3RyZWFtPFBhdGg+IHN0cmVhbSA9CisgICAgICAgICAgICAgICAgICAgIEZpbGVzLm5ld0RpcmVjdG9yeVN0cmVhbShQYXRocy5nZXQobU1hcFBhdGgpLCAiKiIgKyBQTUFQX0ZJTEVfRVhUKTsKKyAgICAgICAgICAgIGZvciAoUGF0aCBlbnRyeSA6IHN0cmVhbSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGVudHJ5LmdldEZpbGVOYW1lKCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sZW5ndGgoKSAtIFBNQVBfRklMRV9FWFQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGlmICghc2V0LmNvbnRhaW5zKGNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChjb250YWluZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoRmlsZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJGYWlsIHRvIGxpc3QgbWFwIGZpbGVzIGluIHBhdGggJXMiLCBtTWFwUGF0aCksIGUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgUGFja2FnZVRhYmxlIGdldFBhY2thZ2VUYWJsZShTdHJpbmcgY29udGFpbmVyKSB7CisgICAgICAgIHJldHVybiBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKAorICAgICAgICAgICAgICAgIG1hcFN0b3JhZ2VGaWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgUGF0aHMuZ2V0KG1NYXBQYXRoLCBjb250YWluZXIgKyBQTUFQX0ZJTEVfRVhUKSwgRmlsZVR5cGUuUEFDS0FHRV9NQVApKTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgRmxhZ1RhYmxlIGdldEZsYWdUYWJsZShTdHJpbmcgY29udGFpbmVyKSB7CisgICAgICAgIHJldHVybiBGbGFnVGFibGUuZnJvbUJ5dGVzKAorICAgICAgICAgICAgICAgIG1hcFN0b3JhZ2VGaWxlKFBhdGhzLmdldChtTWFwUGF0aCwgY29udGFpbmVyICsgRk1BUF9GSUxFX0VYVCksIEZpbGVUeXBlLkZMQUdfTUFQKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIEZsYWdWYWx1ZUxpc3QgZ2V0RmxhZ1ZhbHVlTGlzdChTdHJpbmcgY29udGFpbmVyKSB7CisgICAgICAgIHJldHVybiBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcygKKyAgICAgICAgICAgICAgICBtYXBTdG9yYWdlRmlsZShQYXRocy5nZXQobUJvb3RQYXRoLCBjb250YWluZXIgKyBWQUxfRklMRV9FWFQpLCBGaWxlVHlwZS5GTEFHX1ZBTCkpOworICAgIH0KKworICAgIC8vIE1hcCBhIHN0b3JhZ2UgZmlsZSBnaXZlbiBmaWxlIHBhdGgKKyAgICBwcml2YXRlIHN0YXRpYyBNYXBwZWRCeXRlQnVmZmVyIG1hcFN0b3JhZ2VGaWxlKFBhdGggZmlsZSwgRmlsZVR5cGUgdHlwZSkgeworICAgICAgICBGaWxlQ2hhbm5lbCBjaGFubmVsID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNoYW5uZWwgPSBGaWxlQ2hhbm5lbC5vcGVuKGZpbGUsIFN0YW5kYXJkT3Blbk9wdGlvbi5SRUFEKTsKKyAgICAgICAgICAgIHJldHVybiBjaGFubmVsLm1hcChGaWxlQ2hhbm5lbC5NYXBNb2RlLlJFQURfT05MWSwgMCwgY2hhbm5lbC5zaXplKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIkZhaWwgdG8gbW1hcCBzdG9yYWdlICVzIGZpbGUgJXMiLCB0eXBlLnRvU3RyaW5nKCksIGZpbGUpLAorICAgICAgICAgICAgICAgICAgICBlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHF1aWV0bHlEaXNwb3NlKGNoYW5uZWwpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBxdWlldGx5RGlzcG9zZShDbG9zZWFibGUgY2xvc2FibGUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChjbG9zYWJsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY2xvc2FibGUuY2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gY2FyZSwgYXQgbGVhc3QgYXMgb2Ygbm93CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWQuYnAKaW5kZXggMTJlNGFjYS4uYmQ0NmQ1ZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZC5icApAQCAtMTAsMTAgKzEwLDE0IEBACiAgICAgICAgICJsaWJiYXNlIiwKICAgICBdLAogICAgIGRhdGE6IFsKLSAgICAgICAgInBhY2thZ2UubWFwIiwKLSAgICAgICAgImZsYWcubWFwIiwKLSAgICAgICAgImZsYWcudmFsIiwKLSAgICAgICAgImZsYWcuaW5mbyIsCisgICAgICAgICJkYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLnZhbCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEuaW5mbyIsCisgICAgICAgICJkYXRhL3YyL3BhY2thZ2VfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLnZhbCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIuaW5mbyIsCiAgICAgXSwKICAgICB0ZXN0X3N1aXRlczogWwogICAgICAgICAiZGV2aWNlLXRlc3RzIiwKQEAgLTM1LDEwICszOSwxNCBAQAogICAgIHRlc3RfY29uZmlnOiAiQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwiLAogICAgIHNka192ZXJzaW9uOiAidGVzdF9jdXJyZW50IiwKICAgICBkYXRhOiBbCi0gICAgICAgICJwYWNrYWdlLm1hcCIsCi0gICAgICAgICJmbGFnLm1hcCIsCi0gICAgICAgICJmbGFnLnZhbCIsCi0gICAgICAgICJmbGFnLmluZm8iLAorICAgICAgICAiZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS52YWwiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLmluZm8iLAorICAgICAgICAiZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi52YWwiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLmluZm8iLAogICAgIF0sCiAgICAgdGVzdF9zdWl0ZXM6IFsKICAgICAgICAgImdlbmVyYWwtdGVzdHMiLApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwKaW5kZXggMmQ1MmQ0NC4uYmZjMjM4ZSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sCkBAIC0yMSwxMyArMjEsMTggQEAKICAgICA8L3RhcmdldF9wcmVwYXJlcj4KICAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC5jb21wYXRpYmlsaXR5LmNvbW1vbi50cmFkZWZlZC50YXJnZXRwcmVwLkZpbGVQdXNoZXIiPgogICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAiIHZhbHVlPSJ0cnVlIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJwYWNrYWdlLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9wYWNrYWdlLm1hcCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZy5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvZmxhZy5tYXAiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWcudmFsLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL2ZsYWcudmFsIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnLmluZm8tPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvZmxhZy5pbmZvIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJwYWNrYWdlX3YxLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9tb2NrLnYxLnBhY2thZ2UubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YxLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9tb2NrLnYxLmZsYWcubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YxLnZhbC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9tb2NrLnYxLnZhbCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192MS5pbmZvLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjEuaW5mbyIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0icGFja2FnZV92Mi5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52Mi5wYWNrYWdlLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192Mi5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52Mi5mbGFnLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192Mi52YWwtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52Mi52YWwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjIuaW5mby0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9tb2NrLnYyLmluZm8iIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icG9zdC1wdXNoIiB2YWx1ZT0iY2htb2QgK3IgL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS8iIC8+CiAgICAgPC90YXJnZXRfcHJlcGFyZXI+CiAgICAgPHRlc3QgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRlc3R0eXBlLkFuZHJvaWRKVW5pdFRlc3QiID4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJwYWNrYWdlIiB2YWx1ZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCIgLz4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJydW50aW1lLWhpbnQiIHZhbHVlPSIxbSIgLz4KICAgICA8L3Rlc3Q+Ci08L2NvbmZpZ3VyYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9mbGFnLmluZm8gYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2ZsYWcuaW5mbwpyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2ZsYWcubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2ZsYWcubWFwCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9mbGFnLnZhbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9mbGFnLnZhbApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvcGFja2FnZS5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvcGFja2FnZS5tYXAKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGI3ZmRlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0Njg1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi52YWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi52YWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkNDc1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5Zjk1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2phcmphci50eHQgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2phcmphci50eHQKaW5kZXggYTZjMTdmYS4uMjQ5NTJlYyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9qYXJqYXIudHh0CisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvamFyamFyLnR4dApAQCAtNyw2ICs3LDggQEAKIHJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmlsZVR5cGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GaWxlVHlwZQogcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmxhZ1ZhbHVlTGlzdAogcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5UYWJsZVV0aWxzIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuVGFibGVVdGlscworcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnUGFja2FnZUltcGwgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5BY29uZmlnUGFja2FnZUltcGwKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUZpbGVQcm92aWRlciBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlN0b3JhZ2VGaWxlUHJvdmlkZXIKIAogCiBydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUYWJsZSQqIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmxhZ1RhYmxlJEAxCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1RhYmxlVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdUYWJsZVRlc3QuamF2YQppbmRleCBmZDQwZDRjLi5kYzQ2NWI2IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1RhYmxlVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVGFibGVUZXN0LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZsYWdUYWJsZV9yaWdodEhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoMSkpOwogICAgICAgICBGbGFnVGFibGUuSGVhZGVyIGhlYWRlciA9IGZsYWdUYWJsZS5nZXRIZWFkZXIoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGhlYWRlci5nZXRWZXJzaW9uKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2t1cCIsIGhlYWRlci5nZXRDb250YWluZXIoKSk7CkBAIC00NCw3ICs0NCw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RGbGFnVGFibGVfcmlnaHROb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigxKSk7CiAKICAgICAgICAgRmxhZ1RhYmxlLk5vZGUgbm9kZTEgPSBmbGFnVGFibGUuZ2V0KDAsICJlbmFibGVkX3JvIik7CiAgICAgICAgIEZsYWdUYWJsZS5Ob2RlIG5vZGUyID0gZmxhZ1RhYmxlLmdldCgwLCAiZW5hYmxlZF9ydyIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdWYWx1ZUxpc3RUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1ZhbHVlTGlzdFRlc3QuamF2YQppbmRleCAxYjBkZTYzLi4zMDZkZjdkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1ZhbHVlTGlzdFRlc3QuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1ZhbHVlTGlzdFRlc3QuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZsYWdWYWx1ZUxpc3RfcmlnaHRIZWFkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRmxhZ1ZhbHVlTGlzdCBmbGFnVmFsdWVMaXN0ID0KLSAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigxKSk7CiAgICAgICAgIEZsYWdWYWx1ZUxpc3QuSGVhZGVyIGhlYWRlciA9IGZsYWdWYWx1ZUxpc3QuZ2V0SGVhZGVyKCk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBoZWFkZXIuZ2V0VmVyc2lvbigpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtb2NrdXAiLCBoZWFkZXIuZ2V0Q29udGFpbmVyKCkpOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZsYWdWYWx1ZUxpc3RfcmlnaHROb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIEZsYWdWYWx1ZUxpc3QgZmxhZ1ZhbHVlTGlzdCA9Ci0gICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoKSk7CisgICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIGJvb2xlYW5bXSBleHBlY3RlZCA9IG5ldyBib29sZWFuW10ge2ZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07CiAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5sZW5ndGgsIGZsYWdWYWx1ZUxpc3Quc2l6ZSgpKTsKQEAgLTYwLDExICs2MCwxMSBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZsYWdWYWx1ZUxpc3RfZ2V0VmFsdWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9Ci0gICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigpKTsKLSAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoKSk7CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigxKSk7CisgICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKDEpKTsKIAogICAgICAgICBGbGFnVmFsdWVMaXN0IGZsYWdWYWx1ZUxpc3QgPQotICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKDEpKTsKIAogICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBwTm9kZSA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKTsKICAgICAgICAgRmxhZ1RhYmxlLk5vZGUgZk5vZGUgPSBmbGFnVGFibGUuZ2V0KHBOb2RlLmdldFBhY2thZ2VJZCgpLCAiZW5hYmxlZF9ydyIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1BhY2thZ2VUYWJsZVRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9QYWNrYWdlVGFibGVUZXN0LmphdmEKaW5kZXggZTdlMTlkOC4uODEyY2UzNSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1BhY2thZ2VUYWJsZVRlc3QuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvUGFja2FnZVRhYmxlVGVzdC5qYXZhCkBAIC0xNyw2ICsxNyw4IEBACiBwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3Q7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIAogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZpbGVUeXBlOwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKQEAgLTI1LDEzICsyNywxNiBAQAogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVycy5KVW5pdDQ7CiAKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCiBAUnVuV2l0aChKVW5pdDQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgUGFja2FnZVRhYmxlVGVzdCB7CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlVGFibGVfcmlnaHRIZWFkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9Ci0gICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDEpKTsKICAgICAgICAgUGFja2FnZVRhYmxlLkhlYWRlciBoZWFkZXIgPSBwYWNrYWdlVGFibGUuZ2V0SGVhZGVyKCk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBoZWFkZXIuZ2V0VmVyc2lvbigpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtb2NrdXAiLCBoZWFkZXIuZ2V0Q29udGFpbmVyKCkpOwpAQCAtNDMsOSArNDgsMjMgQEAKICAgICB9CiAKICAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlVGFibGVfcmlnaHRIZWFkZXJfdjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigyKSk7CisgICAgICAgIFBhY2thZ2VUYWJsZS5IZWFkZXIgaGVhZGVyID0gcGFja2FnZVRhYmxlLmdldEhlYWRlcigpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaGVhZGVyLmdldFZlcnNpb24oKSk7CisgICAgICAgIGFzc2VydEVxdWFscygibW9ja3VwIiwgaGVhZGVyLmdldENvbnRhaW5lcigpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEZpbGVUeXBlLlBBQ0tBR0VfTUFQLCBoZWFkZXIuZ2V0RmlsZVR5cGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyMzMsIGhlYWRlci5nZXRGaWxlU2l6ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGhlYWRlci5nZXROdW1QYWNrYWdlcygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMxLCBoZWFkZXIuZ2V0QnVja2V0T2Zmc2V0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoNTksIGhlYWRlci5nZXROb2RlT2Zmc2V0KCkpOworICAgIH0KKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9yaWdodE5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9Ci0gICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDEpKTsKIAogICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMSA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKTsKICAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgbm9kZTIgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIik7CkBAIC02Niw1ICs4NSw2MSBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoMTU5LCBub2RlMS5nZXROZXh0T2Zmc2V0KCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoLTEsIG5vZGUyLmdldE5leHRPZmZzZXQoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygtMSwgbm9kZTQuZ2V0TmV4dE9mZnNldCgpKTsKKworICAgICAgICBhc3NlcnRGYWxzZShub2RlMS5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisgICAgICAgIGFzc2VydEZhbHNlKG5vZGUyLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0RmFsc2Uobm9kZTQuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9yaWdodE5vZGVfdjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigyKSk7CisKKyAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgbm9kZTEgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIik7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUyID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpOworICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlNCA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCBub2RlMS5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgbm9kZTIuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsIG5vZGU0LmdldFBhY2thZ2VOYW1lKCkpOworCisgICAgICAgIGFzc2VydEVxdWFscygwLCBub2RlMS5nZXRQYWNrYWdlSWQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlMi5nZXRQYWNrYWdlSWQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBub2RlNC5nZXRQYWNrYWdlSWQoKSk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUxLmdldEJvb2xlYW5TdGFydEluZGV4KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMywgbm9kZTIuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyg2LCBub2RlNC5nZXRCb29sZWFuU3RhcnRJbmRleCgpKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoMTc1LCBub2RlMS5nZXROZXh0T2Zmc2V0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoLTEsIG5vZGUyLmdldE5leHRPZmZzZXQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygtMSwgbm9kZTQuZ2V0TmV4dE9mZnNldCgpKTsKKworICAgICAgICBhc3NlcnRUcnVlKG5vZGUxLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShub2RlMi5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisgICAgICAgIGFzc2VydFRydWUobm9kZTQuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOworCisgICAgICAgIGFzc2VydEVxdWFscygtMzE5Nzc5NTU2MzExOTM5MzUzMEwsIG5vZGUxLmdldFBhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDQ0MzE5NDA1MDIyNzQ4NTc5NjRMLCBub2RlMi5nZXRQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygtMjIxMzUxNDE1NTk5NzkyOTI0MUwsIG5vZGU0LmdldFBhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlVGFibGVfZ2V0UGFja2FnZUxpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigyKSk7CisgICAgICAgIFNldDxTdHJpbmc+IHBhY2thZ2VzID0gbmV3IEhhc2hTZXQ8PihwYWNrYWdlVGFibGUuZ2V0UGFja2FnZUxpc3QoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygzLCBwYWNrYWdlcy5zaXplKCkpOworICAgICAgICBhc3NlcnRUcnVlKHBhY2thZ2VzLmNvbnRhaW5zKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIikpOworICAgICAgICBhc3NlcnRUcnVlKHBhY2thZ2VzLmNvbnRhaW5zKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIikpOworICAgICAgICBhc3NlcnRUcnVlKHBhY2thZ2VzLmNvbnRhaW5zKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IikpOworCisgICAgICAgIHBhY2thZ2VUYWJsZSA9IFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMSkpOworICAgICAgICBwYWNrYWdlcyA9IG5ldyBIYXNoU2V0PD4ocGFja2FnZVRhYmxlLmdldFBhY2thZ2VMaXN0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMywgcGFja2FnZXMuc2l6ZSgpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShwYWNrYWdlcy5jb250YWlucygiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShwYWNrYWdlcy5jb250YWlucygiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShwYWNrYWdlcy5jb250YWlucygiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvU3RvcmFnZUZpbGVQcm92aWRlclRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9TdG9yYWdlRmlsZVByb3ZpZGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNzIwZjkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvU3RvcmFnZUZpbGVQcm92aWRlclRlc3QuamF2YQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0OworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLkpVbml0NDsKKworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BSdW5XaXRoKEpVbml0NC5jbGFzcykKK3B1YmxpYyBjbGFzcyBTdG9yYWdlRmlsZVByb3ZpZGVyVGVzdCB7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RsaXN0Q29udGFpbmVycygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIHAgPQorICAgICAgICAgICAgICAgIG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKFRlc3REYXRhVXRpbHMuVEVTVERBVEFfUEFUSCwgVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRIKTsKKyAgICAgICAgU3RyaW5nW10gZXhjbHVkZXMgPSB7fTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGNvbnRhaW5lcnMgPSBwLmxpc3RDb250YWluZXJzKGV4Y2x1ZGVzKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvbnRhaW5lcnMuc2l6ZSgpKTsKKworICAgICAgICBleGNsdWRlcyA9IG5ldyBTdHJpbmdbXSB7Im1vY2sudjEifTsKKyAgICAgICAgY29udGFpbmVycyA9IHAubGlzdENvbnRhaW5lcnMoZXhjbHVkZXMpOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29udGFpbmVycy5zaXplKCkpOworCisgICAgICAgIHAgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcigiZmFrZS9wYXRoLyIsICJmYWtlL3BhdGgvIik7CisgICAgICAgIGNvbnRhaW5lcnMgPSBwLmxpc3RDb250YWluZXJzKGV4Y2x1ZGVzKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShjb250YWluZXJzLmlzRW1wdHkoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TG9hZEZpbGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgcCA9CisgICAgICAgICAgICAgICAgbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRILCBUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgpOworICAgICAgICBQYWNrYWdlVGFibGUgcHQgPSBwLmdldFBhY2thZ2VUYWJsZSgibW9jay52MSIpOworICAgICAgICBhc3NlcnROb3ROdWxsKHB0KTsKKyAgICAgICAgRmxhZ1RhYmxlIGYgPSBwLmdldEZsYWdUYWJsZSgibW9jay52MSIpOworICAgICAgICBhc3NlcnROb3ROdWxsKGYpOworICAgICAgICBGbGFnVmFsdWVMaXN0IHYgPSBwLmdldEZsYWdWYWx1ZUxpc3QoIm1vY2sudjEiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCh2KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvVGVzdERhdGFVdGlscy5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1Rlc3REYXRhVXRpbHMuamF2YQppbmRleCBmMzU5NTJkLi4zODg5NzFlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvVGVzdERhdGFVdGlscy5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9UZXN0RGF0YVV0aWxzLmphdmEKQEAgLTIxLDI4ICsyMSwyNyBAQAogaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CiAKIHB1YmxpYyBmaW5hbCBjbGFzcyBUZXN0RGF0YVV0aWxzIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QQUNLQUdFX01BUF9QQVRIID0gInBhY2thZ2UubWFwIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX01BUF9QQVRIID0gImZsYWcubWFwIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX1ZBTF9QQVRIID0gImZsYWcudmFsIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX0lORk9fUEFUSCA9ICJmbGFnLmluZm8iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BBQ0tBR0VfTUFQX1BBVEggPSAibW9jay52JWQucGFja2FnZS5tYXAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfTUFQX1BBVEggPSAibW9jay52JWQuZmxhZy5tYXAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfVkFMX1BBVEggPSAibW9jay52JWQudmFsIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX0lORk9fUEFUSCA9ICJtb2NrLnYlZC5pbmZvIjsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUREFUQV9QQVRIID0KLSAgICAgICAgICAgICIvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhLyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVERBVEFfUEFUSCA9ICIvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhLyI7CiAKLSAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9QQUNLQUdFX01BUF9QQVRIKTsKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKGludCB2ZXJzaW9uKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBTdHJpbmcuZm9ybWF0KFRFU1RfUEFDS0FHRV9NQVBfUEFUSCwgdmVyc2lvbikpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBURVNUX0ZMQUdfTUFQX1BBVEgpOworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoaW50IHZlcnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFN0cmluZy5mb3JtYXQoVEVTVF9GTEFHX01BUF9QQVRILCB2ZXJzaW9uKSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFRFU1RfRkxBR19WQUxfUEFUSCk7CisgICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcihpbnQgdmVyc2lvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgU3RyaW5nLmZvcm1hdChURVNUX0ZMQUdfVkFMX1BBVEgsIHZlcnNpb24pKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdJbmZvQnl0ZUJ1ZmZlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFRFU1RfRkxBR19JTkZPX1BBVEgpOworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0RmxhZ0luZm9CeXRlQnVmZmVyKGludCB2ZXJzaW9uKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBTdHJpbmcuZm9ybWF0KFRFU1RfRkxBR19JTkZPX1BBVEgsIHZlcnNpb24pKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBCeXRlQnVmZmVyIHJlYWRGaWxlKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3N0b3JhZ2VfZmlsZV90ZXN0LmNwcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3RvcmFnZV9maWxlX3Rlc3QuY3BwCmluZGV4IGViZDFkZDguLjVjMDA4YWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3RvcmFnZV9maWxlX3Rlc3QuY3BwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3RvcmFnZV9maWxlX3Rlc3QuY3BwCkBAIC0yNCwxMCArMjQsOCBAQAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ6OmJhc2U7CiB1c2luZyBuYW1lc3BhY2UgYWNvbmZpZ19zdG9yYWdlOwogCi12b2lkIHZlcmlmeV92YWx1ZShjb25zdCBGbGFnVmFsdWVTdW1tYXJ5JiBmbGFnLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBhY2thZ2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX25hbWUsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ192YWwsCit2b2lkIHZlcmlmeV92YWx1ZShjb25zdCBGbGFnVmFsdWVTdW1tYXJ5JiBmbGFnLCBjb25zdCBzdGQ6OnN0cmluZyYgcGFja2FnZV9uYW1lLAorICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWdfbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWdfdmFsLAogICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlX3R5cGUpIHsKICAgQVNTRVJUX0VRKGZsYWcucGFja2FnZV9uYW1lLCBwYWNrYWdlX25hbWUpOwogICBBU1NFUlRfRVEoZmxhZy5mbGFnX25hbWUsIGZsYWdfbmFtZSk7CkBAIC0zOSwxMCArMzcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGFja2FnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ192YWwsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX3JlYWR3cml0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNfc2VydmVyX292ZXJyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc19sb2NhbF9vdmVycmlkZSkgeworICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWVfdHlwZSwgYm9vbCBpc19yZWFkd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzX3NlcnZlcl9vdmVycmlkZSwgYm9vbCBoYXNfbG9jYWxfb3ZlcnJpZGUpIHsKICAgQVNTRVJUX0VRKGZsYWcucGFja2FnZV9uYW1lLCBwYWNrYWdlX25hbWUpOwogICBBU1NFUlRfRVEoZmxhZy5mbGFnX25hbWUsIGZsYWdfbmFtZSk7CiAgIEFTU0VSVF9FUShmbGFnLmZsYWdfdmFsdWUsIGZsYWdfdmFsKTsKQEAgLTUyLDYxICs0OCwxMzcgQEAKICAgQVNTRVJUX0VRKGZsYWcuaGFzX2xvY2FsX292ZXJyaWRlLCBoYXNfbG9jYWxfb3ZlcnJpZGUpOwogfQogCitSZXN1bHQ8c3RkOjp2ZWN0b3I8RmxhZ1ZhbHVlU3VtbWFyeT4+IGdldF9mbGFnX2xpc3RfcmVzdWx0KAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHZlcnNpb24pIHsKKyAgYXV0byBjb25zdCB0ZXN0X2Jhc2VfZGlyID0gR2V0RXhlY3V0YWJsZURpcmVjdG9yeSgpOworICBhdXRvIGNvbnN0IHRlc3RfZGlyID0gdGVzdF9iYXNlX2RpciArICIvZGF0YS92IiArIHZlcnNpb247CisgIGF1dG8gY29uc3QgcGFja2FnZV9tYXAgPSB0ZXN0X2RpciArICIvcGFja2FnZV92IiArIHZlcnNpb24gKyAiLm1hcCI7CisgIGF1dG8gY29uc3QgZmxhZ19tYXAgPSB0ZXN0X2RpciArICIvZmxhZ192IiArIHZlcnNpb24gKyAiLm1hcCI7CisgIGF1dG8gY29uc3QgZmxhZ192YWwgPSB0ZXN0X2RpciArICIvZmxhZ192IiArIHZlcnNpb24gKyAiLnZhbCI7CisgIHJldHVybiBhY29uZmlnX3N0b3JhZ2U6Omxpc3RfZmxhZ3MocGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCk7Cit9CisKK1Jlc3VsdDxzdGQ6OnZlY3RvcjxGbGFnVmFsdWVBbmRJbmZvU3VtbWFyeT4+IGdldF9mbGFnX2xpc3RfcmVzdWx0X3dpdGhfaW5mbygKKyAgICBjb25zdCBzdGQ6OnN0cmluZyB2ZXJzaW9uKSB7CisgIGF1dG8gY29uc3QgdGVzdF9iYXNlX2RpciA9IEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKTsKKyAgYXV0byBjb25zdCB0ZXN0X2RpciA9IHRlc3RfYmFzZV9kaXIgKyAiL2RhdGEvdiIgKyB2ZXJzaW9uOworICBhdXRvIGNvbnN0IHBhY2thZ2VfbWFwID0gdGVzdF9kaXIgKyAiL3BhY2thZ2VfdiIgKyB2ZXJzaW9uICsgIi5tYXAiOworICBhdXRvIGNvbnN0IGZsYWdfbWFwID0gdGVzdF9kaXIgKyAiL2ZsYWdfdiIgKyB2ZXJzaW9uICsgIi5tYXAiOworICBhdXRvIGNvbnN0IGZsYWdfdmFsID0gdGVzdF9kaXIgKyAiL2ZsYWdfdiIgKyB2ZXJzaW9uICsgIi52YWwiOworICBhdXRvIGNvbnN0IGZsYWdfaW5mbyA9IHRlc3RfZGlyICsgIi9mbGFnX3YiICsgdmVyc2lvbiArICIuaW5mbyI7CisgIHJldHVybiBhY29uZmlnX3N0b3JhZ2U6Omxpc3RfZmxhZ3Nfd2l0aF9pbmZvKHBhY2thZ2VfbWFwLCBmbGFnX21hcCwgZmxhZ192YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfaW5mbyk7Cit9CisKIFRFU1QoQWNvbmZpZ1N0b3JhZ2VGaWxlVGVzdCwgdGVzdF9saXN0X2ZsYWcpIHsKLSAgYXV0byBjb25zdCB0ZXN0X2RpciA9IEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKTsKLSAgYXV0byBjb25zdCBwYWNrYWdlX21hcCA9IHRlc3RfZGlyICsgIi9wYWNrYWdlLm1hcCI7Ci0gIGF1dG8gY29uc3QgZmxhZ19tYXAgPSB0ZXN0X2RpciArICIvZmxhZy5tYXAiOwotICBhdXRvIGNvbnN0IGZsYWdfdmFsID0gdGVzdF9kaXIgKyAiL2ZsYWcudmFsIjsKLSAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gYWNvbmZpZ19zdG9yYWdlOjpsaXN0X2ZsYWdzKAotICAgICAgcGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCk7CisgIGF1dG8gZmxhZ19saXN0X3Jlc3VsdCA9IGdldF9mbGFnX2xpc3RfcmVzdWx0KCIxIik7CiAgIEFTU0VSVF9UUlVFKGZsYWdfbGlzdF9yZXN1bHQub2soKSk7CiAKICAgYXV0byBjb25zdCYgZmxhZ19saXN0ID0gKmZsYWdfbGlzdF9yZXN1bHQ7CiAgIEFTU0VSVF9FUShmbGFnX2xpc3Quc2l6ZSgpLCA4KTsKLSAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZGlzYWJsZWRfcnciLAotICAgICAgICAgICAgICAgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKICAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFsxXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ybyIsCiAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iKTsKICAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFsyXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ydyIsCiAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIik7Ci0gIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImRpc2FibGVkX3J3IiwKLSAgICAgICAgICAgICAgICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7Ci0gIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfZml4ZWRfcm8iLAotICAgICAgICAgICAgICAgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFszXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs0XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIpOwogICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzVdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJlbmFibGVkX3JvIiwKICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIpOwotICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX2ZpeGVkX3JvIiwKLSAgICAgICAgICAgICAgICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs3XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLCAiZW5hYmxlZF9ydyIsCisgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIik7Cit9CisKKy8vIFRPRE86IGIvMzc2MjU2NDcyIC0gVXNlIHBhcmFtZXRlcml6ZWQgdGVzdHMuCitURVNUKEFjb25maWdTdG9yYWdlRmlsZVRlc3QsIHRlc3RfbGlzdF9mbGFnX3YyKSB7CisgIGF1dG8gZmxhZ19saXN0X3Jlc3VsdCA9IGdldF9mbGFnX2xpc3RfcmVzdWx0KCIyIik7CisgIEFTU0VSVF9UUlVFKGZsYWdfbGlzdF9yZXN1bHQub2soKSk7CisKKyAgYXV0byBjb25zdCYgZmxhZ19saXN0ID0gKmZsYWdfbGlzdF9yZXN1bHQ7CisgIEFTU0VSVF9FUShmbGFnX2xpc3Quc2l6ZSgpLCA4KTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFsxXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ybyIsCisgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFsyXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ydyIsCisgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs1XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCAiZW5hYmxlZF9ybyIsCisgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIpOwogICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzddLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX3J3IiwKICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKIH0KIAogVEVTVChBY29uZmlnU3RvcmFnZUZpbGVUZXN0LCB0ZXN0X2xpc3RfZmxhZ193aXRoX2luZm8pIHsKLSAgYXV0byBjb25zdCB0ZXN0X2RpciA9IEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKTsKLSAgYXV0byBjb25zdCBwYWNrYWdlX21hcCA9IHRlc3RfZGlyICsgIi9wYWNrYWdlLm1hcCI7Ci0gIGF1dG8gY29uc3QgZmxhZ19tYXAgPSB0ZXN0X2RpciArICIvZmxhZy5tYXAiOwotICBhdXRvIGNvbnN0IGZsYWdfdmFsID0gdGVzdF9kaXIgKyAiL2ZsYWcudmFsIjsKLSAgYXV0byBjb25zdCBmbGFnX2luZm8gPSB0ZXN0X2RpciArICIvZmxhZy5pbmZvIjsKLSAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gYWNvbmZpZ19zdG9yYWdlOjpsaXN0X2ZsYWdzX3dpdGhfaW5mbygKLSAgICAgIHBhY2thZ2VfbWFwLCBmbGFnX21hcCwgZmxhZ192YWwsIGZsYWdfaW5mbyk7CisgIGF1dG8gZmxhZ19saXN0X3Jlc3VsdCA9IGdldF9mbGFnX2xpc3RfcmVzdWx0X3dpdGhfaW5mbygiMSIpOwogICBBU1NFUlRfVFJVRShmbGFnX2xpc3RfcmVzdWx0Lm9rKCkpOwogCiAgIGF1dG8gY29uc3QmIGZsYWdfbGlzdCA9ICpmbGFnX2xpc3RfcmVzdWx0OwogICBBU1NFUlRfRVEoZmxhZ19saXN0LnNpemUoKSwgOCk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZGlzYWJsZWRfcnciLAotICAgICAgICAgICAgICAgICAgICAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLCBmYWxzZSk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsxXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ybyIsCi0gICAgICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcnciLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJkaXNhYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAgICAgICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJlbmFibGVkX2ZpeGVkX3JvIiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzVdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJlbmFibGVkX3JvIiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLCAiZW5hYmxlZF9maXhlZF9ybyIsCi0gICAgICAgICAgICAgICAgICAgICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs3XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLCAiZW5hYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcm8iLCAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzJdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3J3IiwgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFszXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs0XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs1XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ybyIsICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbN10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcnciLCAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKK30KKworVEVTVChBY29uZmlnU3RvcmFnZUZpbGVUZXN0LCB0ZXN0X2xpc3RfZmxhZ193aXRoX2luZm9fdjIpIHsKKyAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gZ2V0X2ZsYWdfbGlzdF9yZXN1bHRfd2l0aF9pbmZvKCIyIik7CisgIEFTU0VSVF9UUlVFKGZsYWdfbGlzdF9yZXN1bHQub2soKSk7CisKKyAgYXV0byBjb25zdCYgZmxhZ19saXN0ID0gKmZsYWdfbGlzdF9yZXN1bHQ7CisgIEFTU0VSVF9FUShmbGFnX2xpc3Quc2l6ZSgpLCA4KTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzBdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzFdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3JvIiwgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsyXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ydyIsICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcm8iLCAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzddLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3J3IiwgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvQW5kcm9pZC5icAppbmRleCBmOTZiMjIzLi42MjE0ZTJjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL0FuZHJvaWQuYnAKQEAgLTM2LDEwICszNiwxMCBAQAogICAgICAgICAibGlicmFuZCIsCiAgICAgXSwKICAgICBkYXRhOiBbCi0gICAgICAgICJ0ZXN0cy9wYWNrYWdlLm1hcCIsCi0gICAgICAgICJ0ZXN0cy9mbGFnLm1hcCIsCi0gICAgICAgICJ0ZXN0cy9mbGFnLnZhbCIsCi0gICAgICAgICJ0ZXN0cy9mbGFnLmluZm8iLAorICAgICAgICAidGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIsCisgICAgICAgICJ0ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIiwKKyAgICAgICAgInRlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwiLAorICAgICAgICAidGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8iLAogICAgIF0sCiB9CiAKQEAgLTEwNywzMSArMTA3LDEyIEBACiAgICAgYWZkbzogdHJ1ZSwKIH0KIAotc29vbmdfY29uZmlnX21vZHVsZV90eXBlIHsKLSAgICBuYW1lOiAiYWNvbmZpZ19saWJfY2Nfc2hhcmVkX2xpbmtfZGVmYXVsdHMiLAotICAgIG1vZHVsZV90eXBlOiAiY2NfZGVmYXVsdHMiLAotICAgIGNvbmZpZ19uYW1lc3BhY2U6ICJBY29uZmlnIiwKLSAgICBib29sX3ZhcmlhYmxlczogWwotICAgICAgICAicmVhZF9mcm9tX25ld19zdG9yYWdlIiwKLSAgICBdLAotICAgIHByb3BlcnRpZXM6IFsKLSAgICAgICAgInNoYXJlZF9saWJzIiwKLSAgICBdLAotfQotCi1zb29uZ19jb25maWdfYm9vbF92YXJpYWJsZSB7Ci0gICAgbmFtZTogInJlYWRfZnJvbV9uZXdfc3RvcmFnZSIsCi19Ci0KLWFjb25maWdfbGliX2NjX3NoYXJlZF9saW5rX2RlZmF1bHRzIHsKK2NjX2RlZmF1bHRzIHsKICAgICBuYW1lOiAiYWNvbmZpZ19saWJfY2Nfc2hhcmVkX2xpbmsuZGVmYXVsdHMiLAotICAgIHNvb25nX2NvbmZpZ192YXJpYWJsZXM6IHsKLSAgICAgICAgcmVhZF9mcm9tX25ld19zdG9yYWdlOiB7Ci0gICAgICAgICAgICBzaGFyZWRfbGliczogWwotICAgICAgICAgICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGlfY2MiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICB9LAorICAgIHNoYXJlZF9saWJzOiBzZWxlY3QocmVsZWFzZV9mbGFnKCJSRUxFQVNFX1JFQURfRlJPTV9ORVdfU1RPUkFHRSIpLCB7CisgICAgICAgIHRydWU6IFsibGliYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpX2NjIl0sCisgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgIH0pLAogfQogCiBjY19kZWZhdWx0cyB7CkBAIC0xNzQsMzYgKzE1NSwyMCBAQAogICAgIG5hbWU6ICJhY29uZmlnX3N0b3JhZ2VfcmVhZGVyX2phdmEiLAogICAgIHNyY3M6IFsKICAgICAgICAgInNyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvU3RvcmFnZUludGVybmFsUmVhZGVyLmphdmEiLAorICAgICAgICAic3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhIiwKICAgICBdLAogICAgIGxpYnM6IFsKICAgICAgICAgInVuc3VwcG9ydGVkYXBwdXNhZ2UiLAogICAgICAgICAic3RyaWN0X21vZGVfc3R1YiIsCisgICAgICAgICJhY29uZmlnX3N0b3JhZ2Vfc3R1YiIsCiAgICAgXSwKICAgICBzdGF0aWNfbGliczogWwogICAgICAgICAiYWNvbmZpZ19zdG9yYWdlX2ZpbGVfamF2YSIsCiAgICAgXSwKICAgICBzZGtfdmVyc2lvbjogImNvcmVfY3VycmVudCIsCiAgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCi0gICAgbWluX3Nka192ZXJzaW9uOiAiMjkiLAotICAgIGFwZXhfYXZhaWxhYmxlOiBbCi0gICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKLSAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6YW55YXBleCIsCisgICAgdmlzaWJpbGl0eTogWworICAgICAgICAiLy9mcmFtZXdvcmtzL2Jhc2UiLAorICAgICAgICAiLy9idWlsZC9tYWtlL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzIiwKICAgICBdLAogfQotCi1qYXZhX2xpYnJhcnkgewotICAgIG5hbWU6ICJhY29uZmlnX3N0b3JhZ2VfcmVhZGVyX2phdmFfbm9uZSIsCi0gICAgc3JjczogWwotICAgICAgICAic3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlSW50ZXJuYWxSZWFkZXIuamF2YSIsCi0gICAgXSwKLSAgICBsaWJzOiBbCi0gICAgICAgICJ1bnN1cHBvcnRlZGFwcHVzYWdlLXNkay1ub25lIiwKLSAgICAgICAgImZha2VfZGV2aWNlX2NvbmZpZyIsCi0gICAgXSwKLSAgICBzdGF0aWNfbGliczogWwotICAgICAgICAiYWNvbmZpZ19zdG9yYWdlX2ZpbGVfamF2YV9ub25lIiwKLSAgICBdLAotICAgIHNka192ZXJzaW9uOiAibm9uZSIsCi0gICAgc3lzdGVtX21vZHVsZXM6ICJjb3JlLWFsbC1zeXN0ZW0tbW9kdWxlcyIsCi0gICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCi19CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ19pbmZvX3F1ZXJ5LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfaW5mb19xdWVyeS5ycwppbmRleCA2ZDAzMzc3Li42OGI2MTkzIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ19pbmZvX3F1ZXJ5LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX2luZm9fcXVlcnkucnMKQEAgLTE2LDggKzE2LDEwIEBACiAKIC8vISBmbGFnIHZhbHVlIHF1ZXJ5IG1vZHVsZSBkZWZpbmVzIHRoZSBmbGFnIHZhbHVlIGZpbGUgcmVhZCBmcm9tIG1hcHBlZCBieXRlcwogCi11c2UgY3JhdGU6OntBY29uZmlnU3RvcmFnZUVycm9yLCBGSUxFX1ZFUlNJT059OwotdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7ZmxhZ19pbmZvOjpGbGFnSW5mb0hlYWRlciwgcmVhZF91OF9mcm9tX2J5dGVzLCBGbGFnVmFsdWVUeXBlfTsKK3VzZSBjcmF0ZTo6QWNvbmZpZ1N0b3JhZ2VFcnJvcjsKK3VzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6eworICAgIGZsYWdfaW5mbzo6RmxhZ0luZm9IZWFkZXIsIHJlYWRfdThfZnJvbV9ieXRlcywgRmxhZ1ZhbHVlVHlwZSwgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04sCit9OwogdXNlIGFueWhvdzo6YW55aG93OwogCiAvLy8gR2V0IGZsYWcgYXR0cmlidXRlIGJpdGZpZWxkCkBAIC0yNywxMSArMjksMTEgQEAKICAgICBmbGFnX2luZGV4OiB1MzIsCiApIC0+IFJlc3VsdDx1OCwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGxldCBpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnSW5mb0hlYWRlcjo6ZnJvbV9ieXRlcyhidWYpPzsKLSAgICBpZiBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiA+IGNyYXRlOjpGSUxFX1ZFUlNJT04geworICAgIGlmIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uID4gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gewogICAgICAgICByZXR1cm4gRXJyKEFjb25maWdTdG9yYWdlRXJyb3I6OkhpZ2hlclN0b3JhZ2VGaWxlVmVyc2lvbihhbnlob3chKAogICAgICAgICAgICAgIkNhbm5vdCByZWFkIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSIsCiAgICAgICAgICAgICBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiwKLSAgICAgICAgICAgIEZJTEVfVkVSU0lPTgorICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgKSkpOwogICAgIH0KIApAQCAtNTMsMTIgKzU1LDE0IEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0LCBGbGFnSW5mb0JpdH07CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7CisgICAgICAgIHRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0LCBGbGFnSW5mb0JpdCwgREVGQVVMVF9GSUxFX1ZFUlNJT04sCisgICAgfTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBpZiBmbGFnIGhhcyBzZXJ2ZXIgb3ZlcnJpZGUKICAgICBmbiB0ZXN0X2lzX2ZsYWdfc3RpY2t5KCkgewotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgZm9yIG9mZnNldCBpbiAwLi44IHsKICAgICAgICAgICAgIGxldCBhdHRyaWJ1dGUgPQogICAgICAgICAgICAgICAgIGZpbmRfZmxhZ19hdHRyaWJ1dGUoJmZsYWdfaW5mb19saXN0Wy4uXSwgRmxhZ1ZhbHVlVHlwZTo6Qm9vbGVhbiwgb2Zmc2V0KS51bndyYXAoKTsKQEAgLTY5LDcgKzczLDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgaWYgZmxhZyBpcyByZWFkd3JpdGUKICAgICBmbiB0ZXN0X2lzX2ZsYWdfcmVhZHdyaXRlKCkgewotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGJhc2VsaW5lOiBWZWM8Ym9vbD4gPSB2ZWMhW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXTsKICAgICAgICAgZm9yIG9mZnNldCBpbiAwLi44IHsKICAgICAgICAgICAgIGxldCBhdHRyaWJ1dGUgPQpAQCAtODQsNyArODgsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBpZiBmbGFnIGhhcyBsb2NhbCBvdmVycmlkZQogICAgIGZuIHRlc3RfZmxhZ19oYXNfb3ZlcnJpZGUoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBmb3Igb2Zmc2V0IGluIDAuLjggewogICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZSA9CiAgICAgICAgICAgICAgICAgZmluZF9mbGFnX2F0dHJpYnV0ZSgmZmxhZ19pbmZvX2xpc3RbLi5dLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCBvZmZzZXQpLnVud3JhcCgpOwpAQCAtOTUsNyArOTksNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBiZXlvbmQgdGhlIGVuZCBvZiBib29sZWFuIHNlY3Rpb24KICAgICBmbiB0ZXN0X2Jvb2xlYW5fb3V0X29mX3JhbmdlKCkgewotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0KICAgICAgICAgICAgIGZpbmRfZmxhZ19hdHRyaWJ1dGUoJmZsYWdfaW5mb19saXN0Wy4uXSwgRmxhZ1ZhbHVlVHlwZTo6Qm9vbGVhbiwgOCkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKApAQCAtMTA3LDE2ICsxMTEsMTYgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKLSAgICAgICAgaW5mb19saXN0LmhlYWRlci52ZXJzaW9uID0gY3JhdGU6OkZJTEVfVkVSU0lPTiArIDE7CisgICAgICAgIGxldCBtdXQgaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgICAgICBpbmZvX2xpc3QuaGVhZGVyLnZlcnNpb24gPSBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDE7CiAgICAgICAgIGxldCBmbGFnX2luZm8gPSBpbmZvX2xpc3QuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSBmaW5kX2ZsYWdfYXR0cmlidXRlKCZmbGFnX2luZm9bLi5dLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCA0KS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCiAgICAgICAgICAgICBmb3JtYXQhKCJ7Oj99IiwgZXJyb3IpLAogICAgICAgICAgICAgZm9ybWF0ISgKICAgICAgICAgICAgICAgICAiSGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKENhbm5vdCByZWFkIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSkiLAotICAgICAgICAgICAgICAgIGNyYXRlOjpGSUxFX1ZFUlNJT04gKyAxLAotICAgICAgICAgICAgICAgIGNyYXRlOjpGSUxFX1ZFUlNJT04KKyAgICAgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDEsCisgICAgICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgICAgICkKICAgICAgICAgKTsKICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ190YWJsZV9xdWVyeS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3RhYmxlX3F1ZXJ5LnJzCmluZGV4IGExYTQ3OTMuLjNlODdhY2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3RhYmxlX3F1ZXJ5LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3RhYmxlX3F1ZXJ5LnJzCkBAIC0xNiw5ICsxNiwxMCBAQAogCiAvLyEgZmxhZyB0YWJsZSBxdWVyeSBtb2R1bGUgZGVmaW5lcyB0aGUgZmxhZyB0YWJsZSBmaWxlIHJlYWQgZnJvbSBtYXBwZWQgYnl0ZXMKIAotdXNlIGNyYXRlOjp7QWNvbmZpZ1N0b3JhZ2VFcnJvciwgRklMRV9WRVJTSU9OfTsKK3VzZSBjcmF0ZTo6QWNvbmZpZ1N0b3JhZ2VFcnJvcjsKIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6ewogICAgIGZsYWdfdGFibGU6OkZsYWdUYWJsZUhlYWRlciwgZmxhZ190YWJsZTo6RmxhZ1RhYmxlTm9kZSwgcmVhZF91MzJfZnJvbV9ieXRlcywgU3RvcmVkRmxhZ1R5cGUsCisgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04sCiB9OwogdXNlIGFueWhvdzo6YW55aG93OwogCkBAIC0zNiwxMSArMzcsMTEgQEAKICAgICBmbGFnOiAmc3RyLAogKSAtPiBSZXN1bHQ8T3B0aW9uPEZsYWdSZWFkQ29udGV4dD4sIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKICAgICBsZXQgaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1RhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKGJ1Zik/OwotICAgIGlmIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uID4gY3JhdGU6OkZJTEVfVkVSU0lPTiB7CisgICAgaWYgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24gPiBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiB7CiAgICAgICAgIHJldHVybiBFcnIoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6SGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKGFueWhvdyEoCiAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgc3RvcmFnZSBmaWxlIHdpdGggYSBoaWdoZXIgdmVyc2lvbiBvZiB7fSB3aXRoIGxpYiB2ZXJzaW9uIHt9IiwKICAgICAgICAgICAgIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uLAotICAgICAgICAgICAgRklMRV9WRVJTSU9OCisgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTgogICAgICAgICApKSk7CiAgICAgfQogCkBAIC03MywxMiArNzQsMTIgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlOworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUsIERFRkFVTFRfRklMRV9WRVJTSU9OfTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0YWJsZSBxdWVyeQogICAgIGZuIHRlc3RfZmxhZ19xdWVyeSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGJhc2VsaW5lID0gdmVjIVsKICAgICAgICAgICAgICgwLCAiZW5hYmxlZF9ybyIsIFN0b3JlZEZsYWdUeXBlOjpSZWFkT25seUJvb2xlYW4sIDF1MTYpLAogICAgICAgICAgICAgKDAsICJlbmFibGVkX3J3IiwgU3RvcmVkRmxhZ1R5cGU6OlJlYWRXcml0ZUJvb2xlYW4sIDJ1MTYpLApAQCAtMTAwLDcgKzEwMSw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRhYmxlIHF1ZXJ5IG9mIGEgbm9uIGV4aXN0IGZsYWcKICAgICBmbiB0ZXN0X25vdF9leGlzdGVkX2ZsYWdfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBmbGFnX2NvbnRleHQgPSBmaW5kX2ZsYWdfcmVhZF9jb250ZXh0KCZmbGFnX3RhYmxlWy4uXSwgMSwgImRpc2FibGVkX2ZpeGVkX3JvIikudW53cmFwKCk7CiAgICAgICAgIGFzc2VydF9lcSEoZmxhZ19jb250ZXh0LCBOb25lKTsKICAgICAgICAgbGV0IGZsYWdfY29udGV4dCA9IGZpbmRfZmxhZ19yZWFkX2NvbnRleHQoJmZsYWdfdGFibGVbLi5dLCAyLCAiZGlzYWJsZWRfcnciKS51bndyYXAoKTsKQEAgLTExMCwxNiArMTExLDE2IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGVycm9yIHdoZW4gZmlsZSBoYXMgYSBoaWdoZXIgdmVyc2lvbgogICAgIGZuIHRlc3RfaGlnaGVyX3ZlcnNpb25fc3RvcmFnZV9maWxlKCkgewotICAgICAgICBsZXQgbXV0IHRhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpOwotICAgICAgICB0YWJsZS5oZWFkZXIudmVyc2lvbiA9IGNyYXRlOjpGSUxFX1ZFUlNJT04gKyAxOworICAgICAgICBsZXQgbXV0IHRhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIHRhYmxlLmhlYWRlci52ZXJzaW9uID0gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxOwogICAgICAgICBsZXQgZmxhZ190YWJsZSA9IHRhYmxlLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gZmluZF9mbGFnX3JlYWRfY29udGV4dCgmZmxhZ190YWJsZVsuLl0sIDAsICJlbmFibGVkX3JvIikudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKAogICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGVycm9yKSwKICAgICAgICAgICAgIGZvcm1hdCEoCiAgICAgICAgICAgICAgICAgIkhpZ2hlclN0b3JhZ2VGaWxlVmVyc2lvbihDYW5ub3QgcmVhZCBzdG9yYWdlIGZpbGUgd2l0aCBhIGhpZ2hlciB2ZXJzaW9uIG9mIHt9IHdpdGggbGliIHZlcnNpb24ge30pIiwKLSAgICAgICAgICAgICAgICBjcmF0ZTo6RklMRV9WRVJTSU9OICsgMSwKLSAgICAgICAgICAgICAgICBjcmF0ZTo6RklMRV9WRVJTSU9OCisgICAgICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxLAorICAgICAgICAgICAgICAgIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OCiAgICAgICAgICAgICApCiAgICAgICAgICk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdmFsdWVfcXVlcnkucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ192YWx1ZV9xdWVyeS5ycwppbmRleCA5ZDMyYTE2Li4zNWY1NjkyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ192YWx1ZV9xdWVyeS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ192YWx1ZV9xdWVyeS5ycwpAQCAtMTYsMTggKzE2LDIwIEBACiAKIC8vISBmbGFnIHZhbHVlIHF1ZXJ5IG1vZHVsZSBkZWZpbmVzIHRoZSBmbGFnIHZhbHVlIGZpbGUgcmVhZCBmcm9tIG1hcHBlZCBieXRlcwogCi11c2UgY3JhdGU6OntBY29uZmlnU3RvcmFnZUVycm9yLCBGSUxFX1ZFUlNJT059OwotdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7ZmxhZ192YWx1ZTo6RmxhZ1ZhbHVlSGVhZGVyLCByZWFkX3U4X2Zyb21fYnl0ZXN9OwordXNlIGNyYXRlOjpBY29uZmlnU3RvcmFnZUVycm9yOwordXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7CisgICAgZmxhZ192YWx1ZTo6RmxhZ1ZhbHVlSGVhZGVyLCByZWFkX3U4X2Zyb21fYnl0ZXMsIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OLAorfTsKIHVzZSBhbnlob3c6OmFueWhvdzsKIAogLy8vIFF1ZXJ5IGZsYWcgdmFsdWUKIHB1YiBmbiBmaW5kX2Jvb2xlYW5fZmxhZ192YWx1ZShidWY6ICZbdThdLCBmbGFnX2luZGV4OiB1MzIpIC0+IFJlc3VsdDxib29sLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CiAgICAgbGV0IGludGVycHJldGVkX2hlYWRlciA9IEZsYWdWYWx1ZUhlYWRlcjo6ZnJvbV9ieXRlcyhidWYpPzsKLSAgICBpZiBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiA+IGNyYXRlOjpGSUxFX1ZFUlNJT04geworICAgIGlmIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uID4gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gewogICAgICAgICByZXR1cm4gRXJyKEFjb25maWdTdG9yYWdlRXJyb3I6OkhpZ2hlclN0b3JhZ2VGaWxlVmVyc2lvbihhbnlob3chKAogICAgICAgICAgICAgIkNhbm5vdCByZWFkIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSIsCiAgICAgICAgICAgICBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiwKLSAgICAgICAgICAgIEZJTEVfVkVSU0lPTgorICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgKSkpOwogICAgIH0KIApAQCAtNDYsMTIgKzQ4LDEyIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0OworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZsYWcgdmFsdWUgcXVlcnkKICAgICBmbiB0ZXN0X2ZsYWdfdmFsdWVfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGJhc2VsaW5lOiBWZWM8Ym9vbD4gPSB2ZWMhW2ZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07CiAgICAgICAgIGZvciAob2Zmc2V0LCBleHBlY3RlZF92YWx1ZSkgaW4gYmFzZWxpbmUuaW50b19pdGVyKCkuZW51bWVyYXRlKCkgewogICAgICAgICAgICAgbGV0IGZsYWdfdmFsdWUgPSBmaW5kX2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWx1ZV9saXN0Wy4uXSwgb2Zmc2V0IGFzIHUzMikudW53cmFwKCk7CkBAIC02Miw3ICs2NCw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGJleW9uZCB0aGUgZW5kIG9mIGJvb2xlYW4gc2VjdGlvbgogICAgIGZuIHRlc3RfYm9vbGVhbl9vdXRfb2ZfcmFuZ2UoKSB7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gZmluZF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsdWVfbGlzdFsuLl0sIDgpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKICAgICAgICAgICAgIGZvcm1hdCEoIns6P30iLCBlcnJvciksCkBAIC03MywxNiArNzUsMTYgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOwotICAgICAgICB2YWx1ZV9saXN0LmhlYWRlci52ZXJzaW9uID0gY3JhdGU6OkZJTEVfVkVSU0lPTiArIDE7CisgICAgICAgIGxldCBtdXQgdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIHZhbHVlX2xpc3QuaGVhZGVyLnZlcnNpb24gPSBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDE7CiAgICAgICAgIGxldCBmbGFnX3ZhbHVlID0gdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9IGZpbmRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbHVlWy4uXSwgNCkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKAogICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGVycm9yKSwKICAgICAgICAgICAgIGZvcm1hdCEoCiAgICAgICAgICAgICAgICAgIkhpZ2hlclN0b3JhZ2VGaWxlVmVyc2lvbihDYW5ub3QgcmVhZCBzdG9yYWdlIGZpbGUgd2l0aCBhIGhpZ2hlciB2ZXJzaW9uIG9mIHt9IHdpdGggbGliIHZlcnNpb24ge30pIiwKLSAgICAgICAgICAgICAgICBjcmF0ZTo6RklMRV9WRVJTSU9OICsgMSwKLSAgICAgICAgICAgICAgICBjcmF0ZTo6RklMRV9WRVJTSU9OCisgICAgICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxLAorICAgICAgICAgICAgICAgIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OCiAgICAgICAgICAgICApCiAgICAgICAgICk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2xpYi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9saWIucnMKaW5kZXggZDc2Y2YzZi4uZDNjYzlkNCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2xpYi5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbGliLnJzCkBAIC00NCw5ICs0NCwxMCBAQAogCiBwdWIgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7QWNvbmZpZ1N0b3JhZ2VFcnJvciwgRmxhZ1ZhbHVlVHlwZSwgU3RvcmFnZUZpbGVUeXBlfTsKIHB1YiB1c2UgZmxhZ190YWJsZV9xdWVyeTo6RmxhZ1JlYWRDb250ZXh0OworcHViIHVzZSBtYXBwZWRfZmlsZTo6bWFwX2ZpbGU7CiBwdWIgdXNlIHBhY2thZ2VfdGFibGVfcXVlcnk6OlBhY2thZ2VSZWFkQ29udGV4dDsKIAotdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7cmVhZF91MzJfZnJvbV9ieXRlcywgRklMRV9WRVJTSU9OfTsKK3VzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6cmVhZF91MzJfZnJvbV9ieXRlczsKIHVzZSBmbGFnX2luZm9fcXVlcnk6OmZpbmRfZmxhZ19hdHRyaWJ1dGU7CiB1c2UgZmxhZ190YWJsZV9xdWVyeTo6ZmluZF9mbGFnX3JlYWRfY29udGV4dDsKIHVzZSBmbGFnX3ZhbHVlX3F1ZXJ5OjpmaW5kX2Jvb2xlYW5fZmxhZ192YWx1ZTsKQEAgLTExNCwxMyArMTE1LDEzIEBACiAKIC8vLyBHZXQgdGhlIGJvb2xlYW4gZmxhZyB2YWx1ZS4KIC8vLwotLy8vIFxpbnB1dCBmaWxlOiBtYXBwZWQgZmxhZyBmaWxlCisvLy8gXGlucHV0IGZpbGU6IGEgYnl0ZSBzbGljZSwgY2FuIGJlIGVpdGhlciAmTW1hcCBvciAmTWFwTXV0CiAvLy8gXGlucHV0IGluZGV4OiBib29sZWFuIGZsYWcgb2Zmc2V0CiAvLy8KIC8vLyBccmV0dXJuCiAvLy8gSWYgdGhlIHByb3ZpZGUgb2Zmc2V0IGlzIHZhbGlkLCBpdCByZXR1cm5zIHRoZSBib29sZWFuIGZsYWcgdmFsdWUsIG90aGVyd2lzZSBpdAogLy8vIHJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UuCi1wdWIgZm4gZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZShmaWxlOiAmTW1hcCwgaW5kZXg6IHUzMikgLT4gUmVzdWx0PGJvb2wsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKK3B1YiBmbiBnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKGZpbGU6ICZbdThdLCBpbmRleDogdTMyKSAtPiBSZXN1bHQ8Ym9vbCwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGZpbmRfYm9vbGVhbl9mbGFnX3ZhbHVlKGZpbGUsIGluZGV4KQogfQogCkBAIC0xNDgsNyArMTQ5LDcgQEAKIAogLy8vIEdldCB0aGUgZmxhZyBhdHRyaWJ1dGUuCiAvLy8KLS8vLyBcaW5wdXQgZmlsZTogbWFwcGVkIGZsYWcgaW5mbyBmaWxlCisvLy8gXGlucHV0IGZpbGU6IGEgYnl0ZSBzbGljZSwgY2FuIGJlIGVpdGhlciAmTW1hcCBvciAmTWFwTXV0CiAvLy8gXGlucHV0IGZsYWdfdHlwZTogZmxhZyB2YWx1ZSB0eXBlCiAvLy8gXGlucHV0IGZsYWdfaW5kZXg6IGZsYWcgaW5kZXgKIC8vLwpAQCAtMTU2LDcgKzE1Nyw3IEBACiAvLy8gSWYgdGhlIHByb3ZpZGUgb2Zmc2V0IGlzIHZhbGlkLCBpdCByZXR1cm5zIHRoZSBmbGFnIGF0dHJpYnV0ZSBiaXRmaWxlZCwgb3RoZXJ3aXNlIGl0CiAvLy8gcmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZS4KIHB1YiBmbiBnZXRfZmxhZ19hdHRyaWJ1dGUoCi0gICAgZmlsZTogJk1tYXAsCisgICAgZmlsZTogJlt1OF0sCiAgICAgZmxhZ190eXBlOiBGbGFnVmFsdWVUeXBlLAogICAgIGZsYWdfaW5kZXg6IHUzMiwKICkgLT4gUmVzdWx0PHU4LCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CkBAIC00MTIsMTAgKzQxMywxMCBAQAogICAgICAgICBsZXQgZmxhZ19tYXAgPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9tYXBzL21vY2t1cC5mbGFnLm1hcCI7CiAgICAgICAgIGxldCBmbGFnX3ZhbCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLnZhbCI7CiAgICAgICAgIGxldCBmbGFnX2luZm8gPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9ib290L21vY2t1cC5pbmZvIjsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvcGFja2FnZS5tYXAiLCAmcGFja2FnZV9tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9mbGFnLm1hcCIsICZmbGFnX21hcCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2ZsYWcudmFsIiwgJmZsYWdfdmFsKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZmxhZy5pbmZvIiwgJmZsYWdfaW5mbykudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiLCAmcGFja2FnZV9tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIiwgJmZsYWdfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbCIsICZmbGFnX3ZhbCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvIiwgJmZsYWdfaW5mbykudW53cmFwKCk7CiAKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VfZGlyOwogICAgIH0KQEAgLTQzMiwyMSArNDMzLDI0IEBACiAgICAgICAgICAgICBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwcGVkX2ZpbGUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAwLCBib29sZWFuX3N0YXJ0X2luZGV4OiAwIH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMCwgYm9vbGVhbl9zdGFydF9pbmRleDogMCwgZmluZ2VycHJpbnQ6IDAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwcGVkX2ZpbGUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAxLCBib29sZWFuX3N0YXJ0X2luZGV4OiAzIH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMSwgYm9vbGVhbl9zdGFydF9pbmRleDogMywgZmluZ2VycHJpbnQ6IDAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwcGVkX2ZpbGUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAyLCBib29sZWFuX3N0YXJ0X2luZGV4OiA2IH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMiwgYm9vbGVhbl9zdGFydF9pbmRleDogNiwgZmluZ2VycHJpbnQ6IDAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAgICAgfQogCkBAIC01MDcsOSArNTExLDkgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmxhZyBzdG9yYWdlIGZpbGUgdmVyc2lvbiBudW1iZXIgcXVlcnkgYXBpCiAgICAgZm4gdGVzdF9zdG9yYWdlX3ZlcnNpb25fcXVlcnkoKSB7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL3BhY2thZ2UubWFwIikudW53cmFwKCksIDEpOwotICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9mbGFnLm1hcCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZmxhZy52YWwiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2ZsYWcuaW5mbyIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcCIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbCIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8iKS51bndyYXAoKSwgMSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL21hcHBlZF9maWxlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL21hcHBlZF9maWxlLnJzCmluZGV4IDVhMTY2NDUuLmY0ZTI2OWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9tYXBwZWRfZmlsZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbWFwcGVkX2ZpbGUucnMKQEAgLTI4LDcgKzI4LDcgQEAKIC8vLyBUaGUgbWVtb3J5IG1hcHBlZCBmaWxlIG1heSBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBpZiB0aGVyZSBhcmUgd3JpdGVzIHRvIHRoaXMKIC8vLyBmaWxlIGFmdGVyIGJlaW5nIG1hcHBlZC4gRW5zdXJlIG5vIHdyaXRlcyBjYW4gaGFwcGVuIHRvIHRoaXMgZmlsZSB3aGlsZSB0aGlzCiAvLy8gbWFwcGluZyBzdGF5cyBhbGl2ZS4KLXVuc2FmZSBmbiBtYXBfZmlsZShmaWxlX3BhdGg6ICZzdHIpIC0+IFJlc3VsdDxNbWFwLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CitwdWIgdW5zYWZlIGZuIG1hcF9maWxlKGZpbGVfcGF0aDogJnN0cikgLT4gUmVzdWx0PE1tYXAsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKICAgICBsZXQgZmlsZSA9IEZpbGU6Om9wZW4oZmlsZV9wYXRoKQogICAgICAgICAubWFwX2Vycih8ZXJybXNnfCBGaWxlUmVhZEZhaWwoYW55aG93ISgiRmFpbGVkIHRvIG9wZW4gZmlsZSB7fToge30iLCBmaWxlX3BhdGgsIGVycm1zZykpKT87CiAgICAgdW5zYWZlIHsKQEAgLTk3LDEwICs5NywxMCBAQAogICAgICAgICBsZXQgZmxhZ19tYXAgPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9tYXBzL21vY2t1cC5mbGFnLm1hcCI7CiAgICAgICAgIGxldCBmbGFnX3ZhbCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLnZhbCI7CiAgICAgICAgIGxldCBmbGFnX2luZm8gPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9ib290L21vY2t1cC5pbmZvIjsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvcGFja2FnZS5tYXAiLCAmcGFja2FnZV9tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9mbGFnLm1hcCIsICZmbGFnX21hcCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2ZsYWcudmFsIiwgJmZsYWdfdmFsKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZmxhZy5pbmZvIiwgJmZsYWdfaW5mbykudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiLCAmcGFja2FnZV9tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIiwgJmZsYWdfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbCIsICZmbGFnX3ZhbCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvIiwgJmZsYWdfaW5mbykudW53cmFwKCk7CiAKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VfZGlyOwogICAgIH0KQEAgLTEwOCw5ICsxMDgsOSBAQAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X21hcHBlZF9maWxlX2NvbnRlbnRzKCkgewogICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7Ci0gICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwLCAiLi90ZXN0cy9wYWNrYWdlLm1hcCIpOwotICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ01hcCwgIi4vdGVzdHMvZmxhZy5tYXAiKTsKLSAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdWYWwsICIuL3Rlc3RzL2ZsYWcudmFsIik7Ci0gICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnSW5mbywgIi4vdGVzdHMvZmxhZy5pbmZvIik7CisgICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwLCAiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIik7CisgICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnTWFwLCAiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIik7CisgICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnVmFsLCAiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsIik7CisgICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnSW5mbywgIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8iKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvcGFja2FnZV90YWJsZV9xdWVyeS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9wYWNrYWdlX3RhYmxlX3F1ZXJ5LnJzCmluZGV4IDJjYjg1NGIuLmIyMDY2OGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9wYWNrYWdlX3RhYmxlX3F1ZXJ5LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9wYWNrYWdlX3RhYmxlX3F1ZXJ5LnJzCkBAIC0xNiw5ICsxNiwxMCBAQAogCiAvLyEgcGFja2FnZSB0YWJsZSBxdWVyeSBtb2R1bGUgZGVmaW5lcyB0aGUgcGFja2FnZSB0YWJsZSBmaWxlIHJlYWQgZnJvbSBtYXBwZWQgYnl0ZXMKIAotdXNlIGNyYXRlOjp7QWNvbmZpZ1N0b3JhZ2VFcnJvciwgRklMRV9WRVJTSU9OfTsKK3VzZSBjcmF0ZTo6QWNvbmZpZ1N0b3JhZ2VFcnJvcjsKIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6ewogICAgIHBhY2thZ2VfdGFibGU6OlBhY2thZ2VUYWJsZUhlYWRlciwgcGFja2FnZV90YWJsZTo6UGFja2FnZVRhYmxlTm9kZSwgcmVhZF91MzJfZnJvbV9ieXRlcywKKyAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiwKIH07CiB1c2UgYW55aG93Ojphbnlob3c7CiAKQEAgLTI3LDYgKzI4LDcgQEAKIHB1YiBzdHJ1Y3QgUGFja2FnZVJlYWRDb250ZXh0IHsKICAgICBwdWIgcGFja2FnZV9pZDogdTMyLAogICAgIHB1YiBib29sZWFuX3N0YXJ0X2luZGV4OiB1MzIsCisgICAgcHViIGZpbmdlcnByaW50OiB1NjQsCiB9CiAKIC8vLyBRdWVyeSBwYWNrYWdlIHJlYWQgY29udGV4dDogcGFja2FnZSBpZCBhbmQgc3RhcnQgaW5kZXgKQEAgLTM1LDExICszNywxMSBAQAogICAgIHBhY2thZ2U6ICZzdHIsCiApIC0+IFJlc3VsdDxPcHRpb248UGFja2FnZVJlYWRDb250ZXh0PiwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGxldCBpbnRlcnByZXRlZF9oZWFkZXIgPSBQYWNrYWdlVGFibGVIZWFkZXI6OmZyb21fYnl0ZXMoYnVmKT87Ci0gICAgaWYgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24gPiBGSUxFX1ZFUlNJT04geworICAgIGlmIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uID4gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gewogICAgICAgICByZXR1cm4gRXJyKEFjb25maWdTdG9yYWdlRXJyb3I6OkhpZ2hlclN0b3JhZ2VGaWxlVmVyc2lvbihhbnlob3chKAogICAgICAgICAgICAgIkNhbm5vdCByZWFkIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSIsCiAgICAgICAgICAgICBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiwKLSAgICAgICAgICAgIEZJTEVfVkVSU0lPTgorICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgKSkpOwogICAgIH0KIApAQCAtNTUsMTEgKzU3LDEzIEBACiAgICAgfQogCiAgICAgbG9vcCB7Ci0gICAgICAgIGxldCBpbnRlcnByZXRlZF9ub2RlID0gUGFja2FnZVRhYmxlTm9kZTo6ZnJvbV9ieXRlcygmYnVmW3BhY2thZ2Vfbm9kZV9vZmZzZXQuLl0pPzsKKyAgICAgICAgbGV0IGludGVycHJldGVkX25vZGUgPQorICAgICAgICAgICAgUGFja2FnZVRhYmxlTm9kZTo6ZnJvbV9ieXRlcygmYnVmW3BhY2thZ2Vfbm9kZV9vZmZzZXQuLl0sIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uKT87CiAgICAgICAgIGlmIGludGVycHJldGVkX25vZGUucGFja2FnZV9uYW1lID09IHBhY2thZ2UgewogICAgICAgICAgICAgcmV0dXJuIE9rKFNvbWUoUGFja2FnZVJlYWRDb250ZXh0IHsKICAgICAgICAgICAgICAgICBwYWNrYWdlX2lkOiBpbnRlcnByZXRlZF9ub2RlLnBhY2thZ2VfaWQsCiAgICAgICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogaW50ZXJwcmV0ZWRfbm9kZS5ib29sZWFuX3N0YXJ0X2luZGV4LAorICAgICAgICAgICAgICAgIGZpbmdlcnByaW50OiBpbnRlcnByZXRlZF9ub2RlLmZpbmdlcnByaW50LAogICAgICAgICAgICAgfSkpOwogICAgICAgICB9CiAgICAgICAgIG1hdGNoIGludGVycHJldGVkX25vZGUubmV4dF9vZmZzZXQgewpAQCAtNzIsMjkgKzc2LDY4IEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZTsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGFibGUgcXVlcnkKICAgICBmbiB0ZXN0X3BhY2thZ2VfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZmluZF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV90YWJsZVsuLl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAwLCBib29sZWFuX3N0YXJ0X2luZGV4OiAwIH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMCwgYm9vbGVhbl9zdGFydF9pbmRleDogMCwgZmluZ2VycHJpbnQ6IDAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZmluZF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV90YWJsZVsuLl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAxLCBib29sZWFuX3N0YXJ0X2luZGV4OiAzIH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMSwgYm9vbGVhbl9zdGFydF9pbmRleDogMywgZmluZ2VycHJpbnQ6IDAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZmluZF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV90YWJsZVsuLl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAyLCBib29sZWFuX3N0YXJ0X2luZGV4OiA2IH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMiwgYm9vbGVhbl9zdGFydF9pbmRleDogNiwgZmluZ2VycHJpbnQ6IDAgfTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRhYmxlIHF1ZXJ5CisgICAgZm4gdGVzdF9wYWNrYWdlX3F1ZXJ5X3YyKCkgeworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoMikuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIGZpbmRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfdGFibGVbLi5dLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsKKyAgICAgICAgICAgIHBhY2thZ2VfaWQ6IDAsCisgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAwLAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IDE1MjQ4OTQ4NTEwNTkwMTU4MDg2dTY0LAorICAgICAgICB9OworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKKyAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKQorICAgICAgICAgICAgICAgIC51bndyYXAoKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7CisgICAgICAgICAgICBwYWNrYWdlX2lkOiAxLAorICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogMywKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiA0NDMxOTQwNTAyMjc0ODU3OTY0dTY0LAorICAgICAgICB9OworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKKyAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKQorICAgICAgICAgICAgICAgIC51bndyYXAoKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7CisgICAgICAgICAgICBwYWNrYWdlX2lkOiAyLAorICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogNiwKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiAxNjIzMzIyOTkxNzcxMTYyMjM3NXU2NCwKKyAgICAgICAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAgICAgfQogCkBAIC0xMDIsNyArMTQ1LDcgQEAKICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0YWJsZSBxdWVyeSBvZiBhIG5vbiBleGlzdCBwYWNrYWdlCiAgICAgZm4gdGVzdF9ub3RfZXhpc3RlZF9wYWNrYWdlX3F1ZXJ5KCkgewogICAgICAgICAvLyB0aGlzIHdpbGwgbGFuZCBhdCBhbiBlbXB0eSBidWNrZXQKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzMiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKQEAgLTExNyw4ICsxNjAsOCBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBlcnJvciB3aGVuIGZpbGUgaGFzIGEgaGlnaGVyIHZlcnNpb24KICAgICBmbiB0ZXN0X2hpZ2hlcl92ZXJzaW9uX3N0b3JhZ2VfZmlsZSgpIHsKLSAgICAgICAgbGV0IG11dCB0YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKLSAgICAgICAgdGFibGUuaGVhZGVyLnZlcnNpb24gPSBjcmF0ZTo6RklMRV9WRVJTSU9OICsgMTsKKyAgICAgICAgbGV0IG11dCB0YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgICAgICB0YWJsZS5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSB0YWJsZS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9CiAgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKQpAQCAtMTI3LDggKzE3MCw4IEBACiAgICAgICAgICAgICBmb3JtYXQhKCJ7Oj99IiwgZXJyb3IpLAogICAgICAgICAgICAgZm9ybWF0ISgKICAgICAgICAgICAgICAgICAiSGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKENhbm5vdCByZWFkIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSkiLAotICAgICAgICAgICAgICAgIGNyYXRlOjpGSUxFX1ZFUlNJT04gKyAxLAotICAgICAgICAgICAgICAgIGNyYXRlOjpGSUxFX1ZFUlNJT04KKyAgICAgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDEsCisgICAgICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgICAgICkKICAgICAgICAgKTsKICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VJbnRlcm5hbFJlYWRlci5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlSW50ZXJuYWxSZWFkZXIuamF2YQppbmRleCAyOWViZWU1Li42ZmJjZGIzIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VJbnRlcm5hbFJlYWRlci5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvU3RvcmFnZUludGVybmFsUmVhZGVyLmphdmEKQEAgLTUzLDkgKzUzLDYgQEAKICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQogICAgIHB1YmxpYyBib29sZWFuIGdldEJvb2xlYW5GbGFnVmFsdWUoaW50IGluZGV4KSB7CiAgICAgICAgIGluZGV4ICs9IG1QYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0OwotICAgICAgICBpZiAoaW5kZXggPj0gbUZsYWdWYWx1ZUxpc3Quc2l6ZSgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oIkZhaWwgdG8gZ2V0IGJvb2xlYW4gZmxhZyB2YWx1ZSIpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBtRmxhZ1ZhbHVlTGlzdC5nZXRCb29sZWFuKGluZGV4KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzNkOWViCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm9zLmZsYWdnaW5nOworCitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1ZhbHVlTGlzdDsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGU7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUZpbGVQcm92aWRlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbXBhdC5hbm5vdGF0aW9uLlVuc3VwcG9ydGVkQXBwVXNhZ2U7CitpbXBvcnQgYW5kcm9pZC5vcy5TdHJpY3RNb2RlOworCisvKioKKyAqIEFuIHtAY29kZSBhY29uZmlnfSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhlIGVuYWJsZWQgc3RhdGUgb2YgaXRzIGZsYWdzLgorICoKKyAqIDxwPjxzdHJvbmc+Tm90ZTogdGhpcyBpcyBpbnRlbmRlZCBvbmx5IHRvIGJlIHVzZWQgYnkgZ2VuZXJhdGVkIGNvZGUuIFRvIGRldGVybWluZSBpZiBhIGdpdmVuIGZsYWcKKyAqIGlzIGVuYWJsZWQgaW4gYXBwIGNvZGUsIHRoZSBnZW5lcmF0ZWQgYW5kcm9pZCBmbGFncyBzaG91bGQgYmUgdXNlZC48L3N0cm9uZz4KKyAqCisgKiA8cD5UaGlzIGNsYXNzIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIGFuZCBzaG91bGQgYmUgdXNlZCBieSBBY25vZmlnIEZsYWcgaW50ZXJuYWxseSA8L2I+IEl0CisgKiBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIHdpbGwgYmUgY2hhbmdlZCBvciByZW1vdmVkIHdpdGhvdXQgbm90aWNlLgorICoKKyAqIDxwPlRoaXMgY2xhc3MgaXMgdXNlZCB0byByZWFkIHRoZSBmbGFnIGZyb20gQWNvbmZpZyBQYWNrYWdlLkVhY2ggaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyB3aWxsCisgKiBjYWNoZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIG9uZSBwYWNrYWdlLiBUbyByZWFkIGZsYWdzIGZyb20gYSBkaWZmZXJlbnQgcGFja2FnZSwgYSBuZXcgaW5zdGFuY2UKKyAqIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIHtAbGluayAjbG9hZCBsb2FkZWR9LgorICoKKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgeworCisgICAgcHJpdmF0ZSBmaW5hbCBGbGFnVmFsdWVMaXN0IG1GbGFnVmFsdWVMaXN0OworICAgIHByaXZhdGUgZmluYWwgaW50IG1QYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0OworCisgICAgcHJpdmF0ZSBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwoCisgICAgICAgICAgICBGbGFnVmFsdWVMaXN0IGZsYWdWYWx1ZUxpc3QsIGludCBwYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0KSB7CisgICAgICAgIHRoaXMubUZsYWdWYWx1ZUxpc3QgPSBmbGFnVmFsdWVMaXN0OworICAgICAgICB0aGlzLm1QYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0ID0gcGFja2FnZUJvb2xlYW5TdGFydE9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMb2FkcyBhbiBBY29uZmlnIHBhY2thZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBhbmQgdmVyaWZpZXMgaXRzIGZpbmdlcnByaW50LgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBtYXkgYmUgY2hhbmdlZCBvciByZW1vdmVkIHdpdGhvdXQKKyAgICAgKiBub3RpY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGFpbmVyIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIuCisgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBBY29uZmlnIHBhY2thZ2UuCisgICAgICogQHBhcmFtIHBhY2thZ2VGaW5nZXJwcmludCBUaGUgZXhwZWN0ZWQgZmluZ2VycHJpbnQgb2YgdGhlIHBhY2thZ2UuCisgICAgICogQHJldHVybiBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsfSByZXByZXNlbnRpbmcgdGhlIGxvYWRlZAorICAgICAqICAgICBwYWNrYWdlLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKKyAgICBwdWJsaWMgc3RhdGljIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCBsb2FkKAorICAgICAgICAgICAgU3RyaW5nIGNvbnRhaW5lciwgU3RyaW5nIHBhY2thZ2VOYW1lLCBsb25nIHBhY2thZ2VGaW5nZXJwcmludCkgeworICAgICAgICByZXR1cm4gbG9hZCgKKyAgICAgICAgICAgICAgICBjb250YWluZXIsCisgICAgICAgICAgICAgICAgcGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgcGFja2FnZUZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIuZ2V0RGVmYXVsdFByb3ZpZGVyKCkpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoCisgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyLAorICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgbG9uZyBwYWNrYWdlRmluZ2VycHJpbnQsCisgICAgICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIGZpbGVQcm92aWRlcikgeworICAgICAgICBTdHJpY3RNb2RlLlRocmVhZFBvbGljeSBvbGRQb2xpY3kgPSBTdHJpY3RNb2RlLmFsbG93VGhyZWFkRGlza1JlYWRzKCk7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gbnVsbDsKKyAgICAgICAgRmxhZ1ZhbHVlTGlzdCB2TGlzdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwTm9kZSA9IGZpbGVQcm92aWRlci5nZXRQYWNrYWdlVGFibGUoY29udGFpbmVyKS5nZXQocGFja2FnZU5hbWUpOworICAgICAgICAgICAgdkxpc3QgPSBmaWxlUHJvdmlkZXIuZ2V0RmxhZ1ZhbHVlTGlzdChjb250YWluZXIpOworICAgICAgICB9IGNhdGNoIChBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uKGUuZ2V0RXJyb3JDb2RlKCksIGUudG9TdHJpbmcoKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBTdHJpY3RNb2RlLnNldFRocmVhZFBvbGljeShvbGRQb2xpY3kpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBOb2RlID09IG51bGwgfHwgdkxpc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLkVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5ELAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGFja2FnZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBpbiBjb250YWluZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250YWluZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZSIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwTm9kZS5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSAmJiBwYWNrYWdlRmluZ2VycHJpbnQgIT0gcE5vZGUuZ2V0UGFja2FnZUZpbmdlcnByaW50KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIDUsIC8vIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5FUlJPUl9GSUxFX0ZJTkdFUlBSSU5UX01JU01BVENILAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGFja2FnZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBpbiBjb250YWluZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250YWluZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZSIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXcgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsKHZMaXN0LCBwTm9kZS5nZXRCb29sZWFuU3RhcnRJbmRleCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgYm9vbGVhbiBmbGFnIHVzaW5nIGl0cyBpbmRleC4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seSBhbmQgbWF5IGJlIGNoYW5nZWQgb3IgcmVtb3ZlZCB3aXRob3V0CisgICAgICogbm90aWNlLgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIGZsYWcgd2l0aGluIHRoZSBsb2FkZWQgQWNvbmZpZyBwYWNrYWdlIHVzaW5nIGl0cworICAgICAqIGluZGV4LiBUaGUgaW5kZXggaXMgZ2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYW5kIG1heSB2YXJ5IGJldHdlZW4gYnVpbGRzLgorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZmxhZyB3aXRoaW4gdGhlIHBhY2thZ2UuCisgICAgICogQHJldHVybiBUaGUgYm9vbGVhbiB2YWx1ZSBvZiB0aGUgZmxhZy4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCisgICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIG1GbGFnVmFsdWVMaXN0LmdldEJvb2xlYW4oaW5kZXggKyBtUGFja2FnZUJvb2xlYW5TdGFydE9mZnNldCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkVGVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BY29uZmlnU3RvcmFnZVJlYWRGdW5jdGlvbmFsVGVzdC54bWwKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkVGVzdC54bWwKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0Fjb25maWdTdG9yYWdlUmVhZEZ1bmN0aW9uYWxUZXN0LnhtbAppbmRleCA5OWM5ZTI1Li5lZTUwMDYwIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRUZXN0LnhtbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BY29uZmlnU3RvcmFnZVJlYWRGdW5jdGlvbmFsVGVzdC54bWwKQEAgLTI2LDcgKzI2LDcgQEAKICAgICA8L3RhcmdldF9wcmVwYXJlcj4KIAogICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRhcmdldHByZXAuVGVzdEFwcEluc3RhbGxTZXR1cCI+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0idGVzdC1maWxlLW5hbWUiIHZhbHVlPSJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkudGVzdC5qYXZhLmFwayIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJ0ZXN0LWZpbGUtbmFtZSIgdmFsdWU9ImFjb25maWdfc3RvcmFnZV9yZWFkX2Z1bmN0aW9uYWwuYXBrIiAvPgogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogCiAgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGFyZ2V0cHJlcC5EaXNhYmxlU0VMaW51eFRhcmdldFByZXBhcmVyIiAvPgpAQCAtMzUsMTcgKzM1LDE3IEBACiAgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGFyZ2V0cHJlcC5QdXNoRmlsZVByZXBhcmVyIj4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJjbGVhbnVwIiB2YWx1ZT0idHJ1ZSIgLz4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJhYm9ydC1vbi1wdXNoLWZhaWx1cmUiIHZhbHVlPSJ0cnVlIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJwYWNrYWdlLm1hcCIKKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0icGFja2FnZV92MS5tYXAiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX2phdmFfYXBpX3Rlc3QvbWFwcy9tb2NrdXAucGFja2FnZS5tYXAiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9ImZsYWcubWFwIgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJmbGFnX3YxLm1hcCIKICAgICAgICAgICAgICAgICB2YWx1ZT0iL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfamF2YV9hcGlfdGVzdC9tYXBzL21vY2t1cC5mbGFnLm1hcCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0iZmxhZy52YWwiCisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9ImZsYWdfdjEudmFsIgogICAgICAgICAgICAgICAgIHZhbHVlPSIvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19qYXZhX2FwaV90ZXN0L2Jvb3QvbW9ja3VwLnZhbCIgLz4KICAgICA8L3RhcmdldF9wcmVwYXJlcj4KIAogICAgIDx0ZXN0IGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50ZXN0dHlwZS5BbmRyb2lkSlVuaXRUZXN0IiA+CiAgICAgICAgIDxvcHRpb24gbmFtZT0icnVubmVyIiB2YWx1ZT0iYW5kcm9pZHgudGVzdC5ydW5uZXIuQW5kcm9pZEpVbml0UnVubmVyIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InBhY2thZ2UiIHZhbHVlPSJhbmRyb2lkLmFjb25maWdfc3RvcmFnZS50ZXN0IiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InBhY2thZ2UiIHZhbHVlPSJhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0IiAvPgogICAgICAgICA8b3B0aW9uIG5hbWU9InJ1bnRpbWUtaGludCIgdmFsdWU9IjFtIiAvPgogICAgIDwvdGVzdD4KLTwvY29uZmlndXJhdGlvbj4KKzwvY29uZmlndXJhdGlvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BY29uZmlnU3RvcmFnZVJlYWRVbml0VGVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BY29uZmlnU3RvcmFnZVJlYWRVbml0VGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyOGRkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0Fjb25maWdTdG9yYWdlUmVhZFVuaXRUZXN0LnhtbApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICB+IENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgIH4KKyAgfiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAtLT4KKzxjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9uPSJUZXN0IGFjb25maWcgc3RvcmFnZSBqYXZhIHRlc3RzIj4KKyAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50YXJnZXRwcmVwLnN1aXRlLlN1aXRlQXBrSW5zdGFsbGVyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJjbGVhbnVwLWFwa3MiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InRlc3QtZmlsZS1uYW1lIiB2YWx1ZT0iYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC5hcGsiIC8+CisgICAgPC90YXJnZXRfcHJlcGFyZXI+CisgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQuY29tcGF0aWJpbGl0eS5jb21tb24udHJhZGVmZWQudGFyZ2V0cHJlcC5GaWxlUHVzaGVyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJjbGVhbnVwIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0icGFja2FnZV92Mi5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcmVhZF91bml0L3Rlc3RkYXRhL21vY2t1cC5wYWNrYWdlLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192Mi5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcmVhZF91bml0L3Rlc3RkYXRhL21vY2t1cC5mbGFnLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192Mi52YWwtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcmVhZF91bml0L3Rlc3RkYXRhL21vY2t1cC52YWwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjIuaW5mby0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvbW9ja3VwLmluZm8iIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icG9zdC1wdXNoIiB2YWx1ZT0iY2htb2QgK3IgL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvIiAvPgorICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgorICAgIDx0ZXN0IGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50ZXN0dHlwZS5BbmRyb2lkSlVuaXRUZXN0IiA+CisgICAgICAgIDxvcHRpb24gbmFtZT0icGFja2FnZSIgdmFsdWU9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icnVudGltZS1oaW50IiB2YWx1ZT0iMW0iIC8+CisgICAgPC90ZXN0PgorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAKaW5kZXggZWQwYzcyOC4uNzAyMzI1ZCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwCkBAIC0xLDkgKzEsMTQgQEAKIGZpbGVncm91cCB7CiAgICAgbmFtZTogInJlYWRfYXBpX3Rlc3Rfc3RvcmFnZV9maWxlcyIsCi0gICAgc3JjczogWyJwYWNrYWdlLm1hcCIsCi0gICAgICAgICJmbGFnLm1hcCIsCi0gICAgICAgICJmbGFnLnZhbCIsCi0gICAgICAgICJmbGFnLmluZm8iCisgICAgc3JjczogWworICAgICAgICAiZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS52YWwiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLmluZm8iLAorICAgICAgICAiZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi52YWwiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLmluZm8iLAogICAgIF0sCiB9CiAKQEAgLTQzLDMgKzQ4LDUyIEBACiAgICAgICAgICJnZW5lcmFsLXRlc3RzIiwKICAgICBdLAogfQorCithbmRyb2lkX3Rlc3QgeworICAgIG5hbWU6ICJhY29uZmlnX3N0b3JhZ2VfcmVhZF9mdW5jdGlvbmFsIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJmdW5jdGlvbmFsL3NyY3MvKiovKi5qYXZhIiwKKyAgICBdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJhY29uZmlnX2RldmljZV9wYXRoc19qYXZhIiwKKyAgICAgICAgImFjb25maWdfc3RvcmFnZV9maWxlX2phdmEiLAorICAgICAgICAiYW5kcm9pZHgudGVzdC5ydWxlcyIsCisgICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGlfamF2YSIsCisgICAgICAgICJqdW5pdCIsCisgICAgXSwKKyAgICBqbmlfbGliczogWworICAgICAgICAibGliYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpX3J1c3Rfam5pIiwKKyAgICBdLAorICAgIGRhdGE6IFsKKyAgICAgICAgIjpyZWFkX2FwaV90ZXN0X3N0b3JhZ2VfZmlsZXMiLAorICAgIF0sCisgICAgcGxhdGZvcm1fYXBpczogdHJ1ZSwKKyAgICBjZXJ0aWZpY2F0ZTogInBsYXRmb3JtIiwKKyAgICB0ZXN0X3N1aXRlczogWworICAgICAgICAiZ2VuZXJhbC10ZXN0cyIsCisgICAgXSwKKyAgICB0ZXN0X2NvbmZpZzogIkFjb25maWdTdG9yYWdlUmVhZEZ1bmN0aW9uYWxUZXN0LnhtbCIsCisgICAgdGVhbTogInRyZW5keV90ZWFtX2FuZHJvaWRfY29yZV9leHBlcmltZW50cyIsCit9CisKK2FuZHJvaWRfdGVzdCB7CisgICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQiLAorICAgIHRlYW06ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX2NvcmVfZXhwZXJpbWVudHMiLAorICAgIHNyY3M6IFsKKyAgICAgICAgInVuaXQvc3Jjcy8qKi8qLmphdmEiLAorICAgIF0sCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImFuZHJvaWR4LnRlc3QucnVubmVyIiwKKyAgICAgICAgImp1bml0IiwKKyAgICAgICAgImFjb25maWdfc3RvcmFnZV9yZWFkZXJfamF2YSIsCisgICAgXSwKKyAgICBzZGtfdmVyc2lvbjogInRlc3RfY3VycmVudCIsCisgICAgZGF0YTogWworICAgICAgICAiOnJlYWRfYXBpX3Rlc3Rfc3RvcmFnZV9maWxlcyIsCisgICAgXSwKKyAgICB0ZXN0X3N1aXRlczogWworICAgICAgICAiZ2VuZXJhbC10ZXN0cyIsCisgICAgXSwKKyAgICB0ZXN0X2NvbmZpZzogIkFjb25maWdTdG9yYWdlUmVhZFVuaXRUZXN0LnhtbCIsCisgICAgamFyamFyX3J1bGVzOiAiamFyamFyLnR4dCIsCit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRNYW5pZmVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZE1hbmlmZXN0LnhtbApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbAppbmRleCA3OGJmYjM3Li41ZTAxODc5IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMTUsMTIgKzE1LDEzIEBACiAgIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgIC0tPgogCi08bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBwYWNrYWdlPSJhbmRyb2lkLmFjb25maWdfc3RvcmFnZS50ZXN0Ij4KKzxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgcGFja2FnZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCI+CiAgICAgPGFwcGxpY2F0aW9uPgogICAgICAgICA8dXNlcy1saWJyYXJ5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0LnJ1bm5lciIgLz4KICAgICA8L2FwcGxpY2F0aW9uPgogCiAgICAgPGluc3RydW1lbnRhdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWR4LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lciIKLSAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0iYW5kcm9pZC5hY29uZmlnX3N0b3JhZ2UudGVzdCIgLz4KKyAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCIgLz4KIAogPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2ZsYWcuaW5mbyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mbGFnLmluZm8KcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2ZsYWcubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZmxhZy5tYXAKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZmxhZy52YWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mbGFnLnZhbApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9wYWNrYWdlLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3BhY2thZ2UubWFwCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiN2ZkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDY4NWMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi52YWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDQ3NTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOWY5NWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL0Fjb25maWdTdG9yYWdlUmVhZEFQSVRlc3QuamF2YQpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0Fjb25maWdTdG9yYWdlUmVhZEFQSVRlc3QuamF2YQpyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL0Fjb25maWdTdG9yYWdlUmVhZEFQSVRlc3QuamF2YQppbmRleCAxOTE3NDFlLi42ZGQxYmNlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0Fjb25maWdTdG9yYWdlUmVhZEFQSVRlc3QuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCkBAIC0yNjcsNCArMjY3LDQgQEAKICAgICAgICAgICAgIGFzc2VydEVxdWFscyhyVmFsLCBqVmFsKTsKICAgICAgICAgfQogICAgIH0KLX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWUyMjRiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7CisKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuRGV2aWNlUHJvdG9zOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5uYW5vLkFjb25maWc7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZzsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGU7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1ZhbHVlTGlzdDsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGU7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUZpbGVQcm92aWRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLkFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbDsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVycy5KVW5pdDQ7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworQFJ1bldpdGgoSlVuaXQ0LmNsYXNzKQorcHVibGljIGNsYXNzIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gUExBVEZPUk1fQ09OVEFJTkVSUyA9IFNldC5vZigic3lzdGVtIiwgInZlbmRvciIsICJwcm9kdWN0Iik7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBY29uZmlnUGFja2FnZUludGVybmFsX2xvYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBMaXN0PHBhcnNlZF9mbGFnPiBmbGFncyA9IERldmljZVByb3Rvcy5sb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCk7CisgICAgICAgIE1hcDxTdHJpbmcsIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbD4gcmVhZGVyTWFwID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIGZwID0gU3RvcmFnZUZpbGVQcm92aWRlci5nZXREZWZhdWx0UHJvdmlkZXIoKTsKKworICAgICAgICBmb3IgKHBhcnNlZF9mbGFnIGZsYWcgOiBmbGFncykgeworICAgICAgICAgICAgaWYgKGZsYWcucGVybWlzc2lvbiA9PSBBY29uZmlnLlJFQURfT05MWSAmJiBmbGFnLnN0YXRlID09IEFjb25maWcuRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIgPSBmbGFnLmNvbnRhaW5lcjsKKyAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGZsYWcucGFja2FnZV87CisgICAgICAgICAgICBTdHJpbmcgZmxhZ05hbWUgPSBmbGFnLm5hbWU7CisgICAgICAgICAgICBpZiAoIVBMQVRGT1JNX0NPTlRBSU5FUlMuY29udGFpbnMoY29udGFpbmVyKSkgY29udGludWU7CisKKyAgICAgICAgICAgIFBhY2thZ2VUYWJsZSBwVGFibGUgPSBmcC5nZXRQYWNrYWdlVGFibGUoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gcFRhYmxlLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICBGbGFnVGFibGUgZlRhYmxlID0gZnAuZ2V0RmxhZ1RhYmxlKGNvbnRhaW5lcik7CisgICAgICAgICAgICBGbGFnVGFibGUuTm9kZSBmTm9kZSA9IGZUYWJsZS5nZXQocE5vZGUuZ2V0UGFja2FnZUlkKCksIGZsYWdOYW1lKTsKKyAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QgZkxpc3QgPSBmcC5nZXRGbGFnVmFsdWVMaXN0KGNvbnRhaW5lcik7CisKKyAgICAgICAgICAgIGludCBpbmRleCA9IHBOb2RlLmdldEJvb2xlYW5TdGFydEluZGV4KCkgKyBmTm9kZS5nZXRGbGFnSW5kZXgoKTsKKyAgICAgICAgICAgIGJvb2xlYW4gclZhbCA9IGZMaXN0LmdldEJvb2xlYW4oaW5kZXgpOworCisgICAgICAgICAgICBsb25nIGZpbmdlcnByaW50ID0gcE5vZGUuZ2V0UGFja2FnZUZpbmdlcnByaW50KCk7CisKKyAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCByZWFkZXIgPSByZWFkZXJNYXAuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIGlmIChyZWFkZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKGNvbnRhaW5lciwgcGFja2FnZU5hbWUsIGZpbmdlcnByaW50KTsKKyAgICAgICAgICAgICAgICByZWFkZXJNYXAucHV0KHBhY2thZ2VOYW1lLCByZWFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbGVhbiBqVmFsID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoZk5vZGUuZ2V0RmxhZ0luZGV4KCkpOworCisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoclZhbCwgalZhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBY29uZmlnUGFja2FnZV9sb2FkX3dpdGhFcnJvcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIC8vIGNvbnRhaW5lciBub3QgZm91bmQgZmFrZV9jb250YWluZXIKKyAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWtlX2NvbnRhaW5lciIsICJmYWtlX3BhY2thZ2UiLCAwKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFLCBlLmdldEVycm9yQ29kZSgpKTsKKworICAgICAgICAvLyBwYWNrYWdlIG5vdCBmb3VuZAorICAgICAgICBlID0KKyAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPiBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgic3lzdGVtIiwgImZha2VfY29udGFpbmVyIiwgMCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLkVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5ELCBlLmdldEVycm9yQ29kZSgpKTsKKworICAgICAgICAvLyBmaW5nZXJwcmludCBkb2Vzbid0IG1hdGNoCisgICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlciBmcCA9IFN0b3JhZ2VGaWxlUHJvdmlkZXIuZ2V0RGVmYXVsdFByb3ZpZGVyKCk7CisKKyAgICAgICAgcGFyc2VkX2ZsYWcgZmxhZyA9IGZsYWdzLmdldCgwKTsKKworICAgICAgICBTdHJpbmcgY29udGFpbmVyID0gZmxhZy5jb250YWluZXI7CisgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGZsYWcucGFja2FnZV87CisgICAgICAgIGJvb2xlYW4gdmFsdWUgPSBmbGFnLnN0YXRlID09IEFjb25maWcuRU5BQkxFRDsKKworICAgICAgICBQYWNrYWdlVGFibGUgcFRhYmxlID0gZnAuZ2V0UGFja2FnZVRhYmxlKGNvbnRhaW5lcik7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gcFRhYmxlLmdldChwYWNrYWdlTmFtZSk7CisKKyAgICAgICAgaWYgKHBOb2RlLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKSB7CisgICAgICAgICAgICBsb25nIGZpbmdlcnByaW50ID0gcE5vZGUuZ2V0UGFja2FnZUZpbmdlcnByaW50KCk7CisgICAgICAgICAgICBlID0KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciwgcGFja2FnZU5hbWUsIGZpbmdlcnByaW50ICsgMSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAvLyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9GSUxFX0ZJTkdFUlBSSU5UX01JU01BVENILAorICAgICAgICAgICAgICAgICAgICA1LCBlLmdldEVycm9yQ29kZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvU3RvcmFnZUludGVybmFsUmVhZGVyVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1N0b3JhZ2VJbnRlcm5hbFJlYWRlclRlc3QuamF2YQpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL1N0b3JhZ2VJbnRlcm5hbFJlYWRlclRlc3QuamF2YQpyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1N0b3JhZ2VJbnRlcm5hbFJlYWRlclRlc3QuamF2YQppbmRleCAzYTFiYmEwLi44YThmMDU0IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL1N0b3JhZ2VJbnRlcm5hbFJlYWRlclRlc3QuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvU3RvcmFnZUludGVybmFsUmVhZGVyVGVzdC5qYXZhCkBAIC00Miw0ICs0Miw0IEBACiAgICAgICAgIGFzc2VydEZhbHNlKHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDApKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShyZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgxKSk7CiAgICAgfQotfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phcmphci50eHQgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXJqYXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjUwZDQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXJqYXIudHh0CkBAIC0wLDAgKzEsMTkgQEAKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24gYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbgorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVGFibGUKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuUGFja2FnZVRhYmxlCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkJ5dGVCdWZmZXJSZWFkZXIgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5CeXRlQnVmZmVyUmVhZGVyCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUeXBlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmxhZ1R5cGUKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU2lwSGFzaGVyMTMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5TaXBIYXNoZXIxMworcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GaWxlVHlwZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZpbGVUeXBlCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3QgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVmFsdWVMaXN0CitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlRhYmxlVXRpbHMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5UYWJsZVV0aWxzCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdQYWNrYWdlSW1wbCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkFjb25maWdQYWNrYWdlSW1wbAorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuU3RvcmFnZUZpbGVQcm92aWRlcgorCisKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlJCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVGFibGUkQDEKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlJCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5QYWNrYWdlVGFibGUkQDEKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1ZhbHVlTGlzdCQqIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmxhZ1ZhbHVlTGlzdEAxCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlNpcEhhc2hlcjEzJCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5TaXBIYXNoZXIxM0AxCisKK3J1bGUgYW5kcm9pZC5vcy5mbGFnZ2luZy5QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZC5icApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q0ZTlhZC4uMDAwMDAwMAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWQuYnAKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1hbmRyb2lkX3Rlc3QgewotICAgIG5hbWU6ICJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkudGVzdC5qYXZhIiwKLSAgICBzcmNzOiBbIi4vKiovKi5qYXZhIl0sCi0gICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgImFjb25maWdfZGV2aWNlX3BhdGhzX2phdmEiLAotICAgICAgICAiYWNvbmZpZ19zdG9yYWdlX2ZpbGVfamF2YSIsCi0gICAgICAgICJhY29uZmlnX3N0b3JhZ2VfcmVhZGVyX2phdmEiLAotICAgICAgICAiYW5kcm9pZHgudGVzdC5ydWxlcyIsCi0gICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGlfamF2YSIsCi0gICAgICAgICJqdW5pdCIsCi0gICAgXSwKLSAgICBqbmlfbGliczogWwotICAgICAgICAibGliYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpX3J1c3Rfam5pIiwKLSAgICBdLAotICAgIGRhdGE6IFsKLSAgICAgICAgIjpyZWFkX2FwaV90ZXN0X3N0b3JhZ2VfZmlsZXMiLAotICAgIF0sCi0gICAgcGxhdGZvcm1fYXBpczogdHJ1ZSwKLSAgICBjZXJ0aWZpY2F0ZTogInBsYXRmb3JtIiwKLSAgICB0ZXN0X3N1aXRlczogWwotICAgICAgICAiZ2VuZXJhbC10ZXN0cyIsCi0gICAgXSwKLSAgICB0ZWFtOiAidHJlbmR5X3RlYW1fYW5kcm9pZF9jb3JlX2V4cGVyaW1lbnRzIiwKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5jcHAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QuY3BwCmluZGV4IDZkMjkwNDUuLjUyODlmYWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5jcHAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LmNwcApAQCAtNDUsNyArNDUsOCBAQAogICB9CiAKICAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKLSAgICBhdXRvIGNvbnN0IHRlc3RfZGlyID0gYW5kcm9pZDo6YmFzZTo6R2V0RXhlY3V0YWJsZURpcmVjdG9yeSgpOworICAgIGF1dG8gY29uc3QgdGVzdF9iYXNlX2RpciA9IGFuZHJvaWQ6OmJhc2U6OkdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKTsKKyAgICBhdXRvIGNvbnN0IHRlc3RfZGlyID0gdGVzdF9iYXNlX2RpciArICIvZGF0YS92MSI7CiAgICAgc3RvcmFnZV9kaXIgPSBzdGQ6OnN0cmluZyhyb290X2Rpci5wYXRoKTsKICAgICBhdXRvIG1hcHNfZGlyID0gc3RvcmFnZV9kaXIgKyAiL21hcHMiOwogICAgIGF1dG8gYm9vdF9kaXIgPSBzdG9yYWdlX2RpciArICIvYm9vdCI7CkBAIC01NSwxMCArNTYsMTAgQEAKICAgICBmbGFnX21hcCA9IHN0ZDo6c3RyaW5nKG1hcHNfZGlyKSArICIvbW9ja3VwLmZsYWcubWFwIjsKICAgICBmbGFnX3ZhbCA9IHN0ZDo6c3RyaW5nKGJvb3RfZGlyKSArICIvbW9ja3VwLnZhbCI7CiAgICAgZmxhZ19pbmZvID0gc3RkOjpzdHJpbmcoYm9vdF9kaXIpICsgIi9tb2NrdXAuaW5mbyI7Ci0gICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9wYWNrYWdlLm1hcCIsIHBhY2thZ2VfbWFwKTsKLSAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWcubWFwIiwgZmxhZ19tYXApOwotICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZy52YWwiLCBmbGFnX3ZhbCk7Ci0gICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnLmluZm8iLCBmbGFnX2luZm8pOworICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvcGFja2FnZV92MS5tYXAiLCBwYWNrYWdlX21hcCk7CisgICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnX3YxLm1hcCIsIGZsYWdfbWFwKTsKKyAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWdfdjEudmFsIiwgZmxhZ192YWwpOworICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZ192MS5pbmZvIiwgZmxhZ19pbmZvKTsKICAgfQogCiAgIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSB7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QucnMKaW5kZXggYWZjNDRkNC4uMmE4ZWRmMyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5ycwpAQCAtOSw3ICs5LDcgQEAKICAgICB1c2UgcmFuZDo6Um5nOwogICAgIHVzZSBzdGQ6OmZzOwogCi0gICAgZm4gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpIC0+IFN0cmluZyB7CisgICAgZm4gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcyh2ZXJzaW9uOiB1MzIpIC0+IFN0cmluZyB7CiAgICAgICAgIGxldCBtdXQgcm5nID0gcmFuZDo6dGhyZWFkX3JuZygpOwogICAgICAgICBsZXQgbnVtYmVyOiB1MzIgPSBybmcuZ2VuKCk7CiAgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IFN0cmluZzo6ZnJvbSgiL3RtcC8iKSArICZudW1iZXIudG9fc3RyaW5nKCk7CkBAIC0yNiwxNyArMjYsMTcgQEAKICAgICAgICAgbGV0IGZsYWdfbWFwID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvbWFwcy9tb2NrdXAuZmxhZy5tYXAiOwogICAgICAgICBsZXQgZmxhZ192YWwgPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9ib290L21vY2t1cC52YWwiOwogICAgICAgICBsZXQgZmxhZ19pbmZvID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAuaW5mbyI7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3BhY2thZ2UubWFwIiwgcGFja2FnZV9tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi9mbGFnLm1hcCIsIGZsYWdfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vZmxhZy52YWwiLCBmbGFnX3ZhbCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL2ZsYWcuaW5mbyIsIGZsYWdfaW5mbykudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KGZvcm1hdCEoIi4vZGF0YS92ezB9L3BhY2thZ2VfdnswfS5tYXAiLCB2ZXJzaW9uKSwgcGFja2FnZV9tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weShmb3JtYXQhKCIuL2RhdGEvdnswfS9mbGFnX3Z7MH0ubWFwIiwgdmVyc2lvbiksIGZsYWdfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoZm9ybWF0ISgiLi9kYXRhL3Z7fS9mbGFnX3Z7MH0udmFsIiwgdmVyc2lvbiksIGZsYWdfdmFsKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoZm9ybWF0ISgiLi9kYXRhL3Z7fS9mbGFnX3Z7MH0uaW5mbyIsIHZlcnNpb24pLCBmbGFnX2luZm8pLnVud3JhcCgpOwogCiAgICAgICAgIHN0b3JhZ2VfZGlyCiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIGZuIHRlc3RfdW5hdmFpbGFibGVfc3RvYXJnZSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgIGZuIHRlc3RfdW5hdmFpbGFibGVfc3RvcmFnZSgpIHsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBlcnIgPSB1bnNhZmUgewpAQCAtNTMsNyArNTMsNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfcGFja2FnZV9jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgcGFja2FnZV9tYXBwZWRfZmlsZSA9IHVuc2FmZSB7CkBAIC02NCwyNyArNjQsNzMgQEAKICAgICAgICAgICAgIGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXBwZWRfZmlsZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDAsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAgfTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAwLCBib29sZWFuX3N0YXJ0X2luZGV4OiAwLCBmaW5nZXJwcmludDogMCB9OwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKIAogICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KICAgICAgICAgICAgIGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXBwZWRfZmlsZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDEsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDMgfTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAxLCBib29sZWFuX3N0YXJ0X2luZGV4OiAzLCBmaW5nZXJwcmludDogMCB9OwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKIAogICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KICAgICAgICAgICAgIGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXBwZWRfZmlsZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDIsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDYgfTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAyLCBib29sZWFuX3N0YXJ0X2luZGV4OiA2LCBmaW5nZXJwcmludDogMCB9OworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9wYWNrYWdlX2NvbnRleHRfcXVlcnlfd2l0aF9maW5nZXJwcmludCgpIHsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygyKTsKKyAgICAgICAgLy8gU0FGRVRZOgorICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCisgICAgICAgIGxldCBwYWNrYWdlX21hcHBlZF9maWxlID0gdW5zYWZlIHsKKyAgICAgICAgICAgIGdldF9tYXBwZWRfZmlsZSgmc3RvcmFnZV9kaXIsICJtb2NrdXAiLCBTdG9yYWdlRmlsZVR5cGU6OlBhY2thZ2VNYXApLnVud3JhcCgpCisgICAgICAgIH07CisKKyAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwcGVkX2ZpbGUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIikKKyAgICAgICAgICAgICAgICAudW53cmFwKCkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeworICAgICAgICAgICAgcGFja2FnZV9pZDogMCwKKyAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAsCisgICAgICAgICAgICBmaW5nZXJwcmludDogMTUyNDg5NDg1MTA1OTAxNTgwODZ1NjQsCisgICAgICAgIH07CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOworCisgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcHBlZF9maWxlLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsKKyAgICAgICAgICAgIHBhY2thZ2VfaWQ6IDEsCisgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAzLAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IDQ0MzE5NDA1MDIyNzQ4NTc5NjR1NjQsCisgICAgICAgIH07CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOworCisgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcHBlZF9maWxlLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsKKyAgICAgICAgICAgIHBhY2thZ2VfaWQ6IDIsCisgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiA2LAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IDE2MjMzMjI5OTE3NzExNjIyMzc1dTY0LAorICAgICAgICB9OwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKICAgICB9CiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9ub25lX2V4aXN0X3BhY2thZ2VfY29udGV4dF9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IHBhY2thZ2VfbWFwcGVkX2ZpbGUgPSB1bnNhZmUgewpAQCAtOTksNyArMTQ1LDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ZsYWdfY29udGV4dF9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IGZsYWdfbWFwcGVkX2ZpbGUgPQpAQCAtMTI1LDcgKzE3MSw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9ub25lX2V4aXN0X2ZsYWdfY29udGV4dF9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IGZsYWdfbWFwcGVkX2ZpbGUgPQpAQCAtMTQxLDcgKzE4Nyw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9ib29sZWFuX2ZsYWdfdmFsdWVfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBmbGFnX3ZhbHVlX2ZpbGUgPQpAQCAtMTU1LDcgKzIwMSw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9pbnZhbGlkX2Jvb2xlYW5fZmxhZ192YWx1ZV9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IGZsYWdfdmFsdWVfZmlsZSA9CkBAIC0xNjksNyArMjE1LDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ZsYWdfaW5mb19xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IGZsYWdfaW5mb19maWxlID0KQEAgLTE4Niw3ICsyMzIsNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfaW52YWxpZF9ib29sZWFuX2ZsYWdfaW5mb19xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IGZsYWdfaW5mb19maWxlID0KQEAgLTE5OSwxMCArMjQ1LDE4IEBACiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIGZuIHRlc3Rfc3RvcmFnZV92ZXJzaW9uX3F1ZXJ5KCkgewotICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9wYWNrYWdlLm1hcCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZmxhZy5tYXAiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2ZsYWcudmFsIikudW53cmFwKCksIDEpOwotICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9mbGFnLmluZm8iKS51bndyYXAoKSwgMSk7CisgICAgZm4gdGVzdF9zdG9yYWdlX3ZlcnNpb25fcXVlcnlfdjEoKSB7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZ192MS5tYXAiKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZ192MS52YWwiKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZ192MS5pbmZvIikudW53cmFwKCksIDEpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3N0b3JhZ2VfdmVyc2lvbl9xdWVyeV92MigpIHsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCIpLnVud3JhcCgpLCAyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92Mi9mbGFnX3YyLm1hcCIpLnVud3JhcCgpLCAyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92Mi9mbGFnX3YyLnZhbCIpLnVud3JhcCgpLCAyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92Mi9mbGFnX3YyLmluZm8iKS51bndyYXAoKSwgMik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvdW5pdC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3VuaXQvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxZjBlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3VuaXQvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxUZXN0LmphdmEKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhyb3dzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGU7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUZpbGVQcm92aWRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLkFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbDsKKworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLkpVbml0NDsKKworQFJ1bldpdGgoSlVuaXQ0LmNsYXNzKQorcHVibGljIGNsYXNzIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVERBVEFfUEFUSCA9CisgICAgICAgICAgICAiL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvIjsKKworICAgIHByaXZhdGUgU3RvcmFnZUZpbGVQcm92aWRlciBwcjsKKworICAgIEBCZWZvcmUKKyAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHsKKyAgICAgICAgcHIgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihURVNUREFUQV9QQVRILCBURVNUREFUQV9QQVRIKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkX2NvbnRhaW5lcl9wYWNrYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPSBwci5nZXRQYWNrYWdlVGFibGUoIm1vY2t1cCIpOworCisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOworCisgICAgICAgIGxvbmcgZmluZ2VycHJpbnQgPSBub2RlMS5nZXRQYWNrYWdlRmluZ2VycHJpbnQoKTsKKyAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHAgPQorICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAorICAgICAgICAgICAgICAgICAgICAgICAgIm1vY2t1cCIsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgZmluZ2VycHJpbnQsIHByKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkX2NvbnRhaW5lcl9wYWNrYWdlX2Vycm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPSBwci5nZXRQYWNrYWdlVGFibGUoIm1vY2t1cCIpOworICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMSA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKTsKKyAgICAgICAgbG9uZyBmaW5nZXJwcmludCA9IG5vZGUxLmdldFBhY2thZ2VGaW5nZXJwcmludCgpOworICAgICAgICAvLyBjYW5ub3QgZmluZCBwYWNrYWdlCisgICAgICAgIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbiBlID0KKyAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQsIGUuZ2V0RXJyb3JDb2RlKCkpOworCisgICAgICAgIC8vIGNhbm5vdCBmaW5kIGNvbnRhaW5lcgorICAgICAgICBlID0KKyAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwgZS5nZXRFcnJvckNvZGUoKSk7CisKKyAgICAgICAgZSA9CisgICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAorICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwgZS5nZXRFcnJvckNvZGUoKSk7CisKKyAgICAgICAgLy8gZmluZ2VycHJpbnQgZG9lc24ndCBtYXRjaAorICAgICAgICBlID0KKyAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7CisgICAgICAgIGFzc2VydEVxdWFscygKKyAgICAgICAgICAgICAgICAvLyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9GSUxFX0ZJTkdFUlBSSU5UX01JU01BVENILAorICAgICAgICAgICAgICAgIDUsIGUuZ2V0RXJyb3JDb2RlKCkpOworCisgICAgICAgIC8vIG5ldyBzdG9yYWdlIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgcHIgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcigiZmFrZS9wYXRoLyIsICJmYWtlL3BhdGgvIik7CisgICAgICAgIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2NrdXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwgZS5nZXRFcnJvckNvZGUoKSk7CisKKyAgICAgICAgLy8gZmlsZSByZWFkIGlzc3VlCisgICAgICAgIHByID0gbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoVEVTVERBVEFfUEFUSCwgImZha2UvcGF0aC8iKTsKKyAgICAgICAgZSA9CisgICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAorICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vY2t1cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFLCBlLmdldEVycm9yQ29kZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRCb29sZWFuRmxhZ1ZhbHVlX2luZGV4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPSBwci5nZXRQYWNrYWdlVGFibGUoIm1vY2t1cCIpOworICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMSA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKTsKKyAgICAgICAgbG9uZyBmaW5nZXJwcmludCA9IG5vZGUxLmdldFBhY2thZ2VGaW5nZXJwcmludCgpOworICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgcCA9CisgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCBmaW5nZXJwcmludCwgcHIpOworICAgICAgICBhc3NlcnRGYWxzZShwLmdldEJvb2xlYW5GbGFnVmFsdWUoMCkpOworICAgICAgICBhc3NlcnRUcnVlKHAuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgxKSk7CisgICAgICAgIGFzc2VydFRydWUocC5nZXRCb29sZWFuRmxhZ1ZhbHVlKDIpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9BbmRyb2lkLmJwCmluZGV4IDBmMTk2MmMuLjRjODgyYjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9BbmRyb2lkLmJwCkBAIC0xNiw2ICsxNiwxMSBAQAogICAgICAgICAibGliYWNvbmZpZ19zdG9yYWdlX2ZpbGUiLAogICAgICAgICAibGliYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpIiwKICAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTphbnlhcGV4IiwKKyAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAorICAgIF0sCiB9CiAKIHJ1c3RfbGlicmFyeSB7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS5jcHAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS5jcHAKaW5kZXggN2I0MzU3NC4uMDNhOGZhMiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkuY3BwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpLmNwcApAQCAtMTAwLDE4ICsxMDAsNCBAQAogICByZXR1cm4ge307CiB9CiAKLWFuZHJvaWQ6OmJhc2U6OlJlc3VsdDx2b2lkPiBjcmVhdGVfZmxhZ19pbmZvKAotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwYWNrYWdlX21hcCwKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgZmxhZ19tYXAsCi0gICAgc3RkOjpzdHJpbmcgY29uc3QmIGZsYWdfaW5mb19vdXQpIHsKLSAgYXV0byBjcmVhdGlvbl9jeHggPSBjcmVhdGVfZmxhZ19pbmZvX2N4eCgKLSAgICAgIHJ1c3Q6OlN0cihwYWNrYWdlX21hcC5jX3N0cigpKSwKLSAgICAgIHJ1c3Q6OlN0cihmbGFnX21hcC5jX3N0cigpKSwKLSAgICAgIHJ1c3Q6OlN0cihmbGFnX2luZm9fb3V0LmNfc3RyKCkpKTsKLSAgaWYgKGNyZWF0aW9uX2N4eC5zdWNjZXNzKSB7Ci0gICAgcmV0dXJuIHt9OwotICB9IGVsc2UgewotICAgIHJldHVybiBhbmRyb2lkOjpiYXNlOjpFcnJvcigpIDw8IGNyZWF0aW9uX2N4eC5lcnJvcl9tZXNzYWdlOwotICB9Ci19CiB9IC8vIG5hbWVzcGFjZSBhY29uZmlnX3N0b3JhZ2UKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9pbmNsdWRlL2Fjb25maWdfc3RvcmFnZS9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpLmhwcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9pbmNsdWRlL2Fjb25maWdfc3RvcmFnZS9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpLmhwcAppbmRleCAwYmJhN2ZmLi41MGE1MTg4IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvaW5jbHVkZS9hY29uZmlnX3N0b3JhZ2UvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS5ocHAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL2luY2x1ZGUvYWNvbmZpZ19zdG9yYWdlL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkuaHBwCkBAIC0zNiwxMyArMzYsNCBAQAogICAgIHVpbnQzMl90IG9mZnNldCwKICAgICBib29sIHZhbHVlKTsKIAotLy8vIENyZWF0ZSBmbGFnIGluZm8gZmlsZSBiYXNlZCBvbiBwYWNrYWdlIGFuZCBmbGFnIG1hcAotLy8vIFxpbnB1dCBwYWNrYWdlX21hcDogcGFja2FnZSBtYXAgZmlsZQotLy8vIFxpbnB1dCBmbGFnX21hcDogZmxhZyBtYXAgZmlsZQotLy8vIFxpbnB1dCBmbGFnX2luZm9fb3V0OiBmbGFnIGluZm8gZmlsZSB0byBiZSBjcmVhdGVkCi1hbmRyb2lkOjpiYXNlOjpSZXN1bHQ8dm9pZD4gY3JlYXRlX2ZsYWdfaW5mbygKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgcGFja2FnZV9tYXAsCi0gICAgc3RkOjpzdHJpbmcgY29uc3QmIGZsYWdfbWFwLAotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBmbGFnX2luZm9fb3V0KTsKLQogfSAvLyBuYW1lc3BhY2UgYWNvbmZpZ19zdG9yYWdlCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfaW5mb191cGRhdGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfaW5mb191cGRhdGUucnMKaW5kZXggN2U2MDcxMy4uNTcyMTEwNSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX2luZm9fdXBkYXRlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ19pbmZvX3VwZGF0ZS5ycwpAQCAtMTgsNyArMTgsNyBAQAogCiB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnsKICAgICByZWFkX3U4X2Zyb21fYnl0ZXMsIEFjb25maWdTdG9yYWdlRXJyb3IsIEZsYWdJbmZvQml0LCBGbGFnSW5mb0hlYWRlciwgRmxhZ1ZhbHVlVHlwZSwKLSAgICBGSUxFX1ZFUlNJT04sCisgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04sCiB9OwogdXNlIGFueWhvdzo6YW55aG93OwogCkBAIC0yOCwxMSArMjgsMTEgQEAKICAgICBmbGFnX2luZGV4OiB1MzIsCiApIC0+IFJlc3VsdDx1c2l6ZSwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGxldCBpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnSW5mb0hlYWRlcjo6ZnJvbV9ieXRlcyhidWYpPzsKLSAgICBpZiBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiA+IEZJTEVfVkVSU0lPTiB7CisgICAgaWYgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24gPiBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiB7CiAgICAgICAgIHJldHVybiBFcnIoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6SGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKGFueWhvdyEoCiAgICAgICAgICAgICAiQ2Fubm90IHdyaXRlIHRvIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSIsCiAgICAgICAgICAgICBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiwKLSAgICAgICAgICAgIEZJTEVfVkVSU0lPTgorICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgKSkpOwogICAgIH0KIApAQCAtOTQsMTMgKzk0LDEzIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3Q7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QsIERFRkFVTFRfRklMRV9WRVJTSU9OfTsKICAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpOjpmbGFnX2luZm9fcXVlcnk6OmZpbmRfZmxhZ19hdHRyaWJ1dGU7CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gaGFzIHNlcnZlciBvdmVycmlkZSB1cGRhdGUKICAgICBmbiB0ZXN0X3VwZGF0ZV9mbGFnX2hhc19zZXJ2ZXJfb3ZlcnJpZGUoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IG11dCBidWYgPSBmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGZvciBpIGluIDAuLmZsYWdfaW5mb19saXN0LmhlYWRlci5udW1fZmxhZ3MgewogICAgICAgICAgICAgdXBkYXRlX2ZsYWdfaGFzX3NlcnZlcl9vdmVycmlkZSgmbXV0IGJ1ZiwgRmxhZ1ZhbHVlVHlwZTo6Qm9vbGVhbiwgaSwgdHJ1ZSkudW53cmFwKCk7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gaGFzIGxvY2FsIG92ZXJyaWRlIHVwZGF0ZQogICAgIGZuIHRlc3RfdXBkYXRlX2ZsYWdfaGFzX2xvY2FsX292ZXJyaWRlKCkgewotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGxldCBtdXQgYnVmID0gZmxhZ19pbmZvX2xpc3QuaW50b19ieXRlcygpOwogICAgICAgICBmb3IgaSBpbiAwLi5mbGFnX2luZm9fbGlzdC5oZWFkZXIubnVtX2ZsYWdzIHsKICAgICAgICAgICAgIHVwZGF0ZV9mbGFnX2hhc19sb2NhbF9vdmVycmlkZSgmbXV0IGJ1ZiwgRmxhZ1ZhbHVlVHlwZTo6Qm9vbGVhbiwgaSwgdHJ1ZSkudW53cmFwKCk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfdmFsdWVfdXBkYXRlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX3ZhbHVlX3VwZGF0ZS5ycwppbmRleCBkZDE1Yzk5Li45NzcyZGI5IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfdmFsdWVfdXBkYXRlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ192YWx1ZV91cGRhdGUucnMKQEAgLTE2LDcgKzE2LDcgQEAKIAogLy8hIGZsYWcgdmFsdWUgdXBkYXRlIG1vZHVsZSBkZWZpbmVzIHRoZSBmbGFnIHZhbHVlIGZpbGUgd3JpdGUgdG8gbWFwcGVkIGJ5dGVzCiAKLXVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e0Fjb25maWdTdG9yYWdlRXJyb3IsIEZsYWdWYWx1ZUhlYWRlciwgRklMRV9WRVJTSU9OfTsKK3VzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e0Fjb25maWdTdG9yYWdlRXJyb3IsIEZsYWdWYWx1ZUhlYWRlciwgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT059OwogdXNlIGFueWhvdzo6YW55aG93OwogCiAvLy8gU2V0IGZsYWcgdmFsdWUKQEAgLTI2LDExICsyNiwxMSBAQAogICAgIGZsYWdfdmFsdWU6IGJvb2wsCiApIC0+IFJlc3VsdDx1c2l6ZSwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGxldCBpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnVmFsdWVIZWFkZXI6OmZyb21fYnl0ZXMoYnVmKT87Ci0gICAgaWYgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24gPiBGSUxFX1ZFUlNJT04geworICAgIGlmIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uID4gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gewogICAgICAgICByZXR1cm4gRXJyKEFjb25maWdTdG9yYWdlRXJyb3I6OkhpZ2hlclN0b3JhZ2VGaWxlVmVyc2lvbihhbnlob3chKAogICAgICAgICAgICAgIkNhbm5vdCB3cml0ZSB0byBzdG9yYWdlIGZpbGUgd2l0aCBhIGhpZ2hlciB2ZXJzaW9uIG9mIHt9IHdpdGggbGliIHZlcnNpb24ge30iLAogICAgICAgICAgICAgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24sCi0gICAgICAgICAgICBGSUxFX1ZFUlNJT04KKyAgICAgICAgICAgIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OCiAgICAgICAgICkpKTsKICAgICB9CiAKQEAgLTQ5LDEyICs0OSwxMiBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdDsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QsIERFRkFVTFRfRklMRV9WRVJTSU9OfTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBmbGFnIHZhbHVlIHVwZGF0ZQogICAgIGZuIHRlc3RfYm9vbGVhbl9mbGFnX3ZhbHVlX3VwZGF0ZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IHZhbHVlX29mZnNldCA9IGZsYWdfdmFsdWVfbGlzdC5oZWFkZXIuYm9vbGVhbl92YWx1ZV9vZmZzZXQ7CiAgICAgICAgIGxldCBtdXQgY29udGVudCA9IGZsYWdfdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCB0cnVlX2J5dGUgPSB1ODo6ZnJvbSh0cnVlKS50b19sZV9ieXRlcygpWzBdOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB1cGRhdGUgYmV5b25kIHRoZSBlbmQgb2YgYm9vbGVhbiBzZWN0aW9uCiAgICAgZm4gdGVzdF9ib29sZWFuX291dF9vZl9yYW5nZSgpIHsKLSAgICAgICAgbGV0IG11dCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBtdXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9IHVwZGF0ZV9ib29sZWFuX2ZsYWdfdmFsdWUoJm11dCBmbGFnX3ZhbHVlX2xpc3RbLi5dLCA4LCB0cnVlKS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCiAgICAgICAgICAgICBmb3JtYXQhKCJ7Oj99IiwgZXJyb3IpLApAQCAtODMsMTYgKzgzLDE2IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGVycm9yIHdoZW4gZmlsZSBoYXMgYSBoaWdoZXIgdmVyc2lvbgogICAgIGZuIHRlc3RfaGlnaGVyX3ZlcnNpb25fc3RvcmFnZV9maWxlKCkgewotICAgICAgICBsZXQgbXV0IHZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKLSAgICAgICAgdmFsdWVfbGlzdC5oZWFkZXIudmVyc2lvbiA9IEZJTEVfVkVSU0lPTiArIDE7CisgICAgICAgIGxldCBtdXQgdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIHZhbHVlX2xpc3QuaGVhZGVyLnZlcnNpb24gPSBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDE7CiAgICAgICAgIGxldCBtdXQgZmxhZ192YWx1ZSA9IHZhbHVlX2xpc3QuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSB1cGRhdGVfYm9vbGVhbl9mbGFnX3ZhbHVlKCZtdXQgZmxhZ192YWx1ZVsuLl0sIDQsIHRydWUpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKICAgICAgICAgICAgIGZvcm1hdCEoIns6P30iLCBlcnJvciksCiAgICAgICAgICAgICBmb3JtYXQhKAogICAgICAgICAgICAgICAgICJIaWdoZXJTdG9yYWdlRmlsZVZlcnNpb24oQ2Fubm90IHdyaXRlIHRvIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSkiLAotICAgICAgICAgICAgICAgIEZJTEVfVkVSU0lPTiArIDEsCi0gICAgICAgICAgICAgICAgRklMRV9WRVJTSU9OCisgICAgICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxLAorICAgICAgICAgICAgICAgIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OCiAgICAgICAgICAgICApCiAgICAgICAgICk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9saWIucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2xpYi5ycwppbmRleCAwMzk2YTYzLi4wOWJiNDFmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2xpYi5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2xpYi5ycwpAQCAtMjQsMTUgKzI0LDEwIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0X3V0aWxzOwogCi11c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnsKLSAgICBBY29uZmlnU3RvcmFnZUVycm9yLCBGbGFnSW5mb0hlYWRlciwgRmxhZ0luZm9MaXN0LCBGbGFnSW5mb05vZGUsIEZsYWdUYWJsZSwgRmxhZ1ZhbHVlVHlwZSwKLSAgICBQYWNrYWdlVGFibGUsIFN0b3JhZ2VGaWxlVHlwZSwgU3RvcmVkRmxhZ1R5cGUsIEZJTEVfVkVSU0lPTiwKLX07Cit1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OntBY29uZmlnU3RvcmFnZUVycm9yLCBGbGFnVmFsdWVUeXBlfTsKIAogdXNlIGFueWhvdzo6YW55aG93OwogdXNlIG1lbW1hcDI6Ok1tYXBNdXQ7Ci11c2Ugc3RkOjpmczo6RmlsZTsKLXVzZSBzdGQ6OmlvOjp7UmVhZCwgV3JpdGV9OwogCiAvLy8gR2V0IHJlYWQgd3JpdGUgbWFwcGVkIHN0b3JhZ2UgZmlsZXMuCiAvLy8KQEAgLTEwNCw4NiArOTksNiBAQAogICAgIH0pCiB9CiAKLS8vLyBSZWFkIGluIHN0b3JhZ2UgZmlsZSBhcyBieXRlcwotZm4gcmVhZF9maWxlX3RvX2J5dGVzKGZpbGVfcGF0aDogJnN0cikgLT4gUmVzdWx0PFZlYzx1OD4sIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKLSAgICBsZXQgbXV0IGZpbGUgPSBGaWxlOjpvcGVuKGZpbGVfcGF0aCkubWFwX2Vycih8ZXJybXNnfCB7Ci0gICAgICAgIEFjb25maWdTdG9yYWdlRXJyb3I6OkZpbGVSZWFkRmFpbChhbnlob3chKCJGYWlsZWQgdG8gb3BlbiBmaWxlIHt9OiB7fSIsIGZpbGVfcGF0aCwgZXJybXNnKSkKLSAgICB9KT87Ci0gICAgbGV0IG11dCBidWZmZXIgPSBWZWM6Om5ldygpOwotICAgIGZpbGUucmVhZF90b19lbmQoJm11dCBidWZmZXIpLm1hcF9lcnIofGVycm1zZ3wgewotICAgICAgICBBY29uZmlnU3RvcmFnZUVycm9yOjpGaWxlUmVhZEZhaWwoYW55aG93ISgKLSAgICAgICAgICAgICJGYWlsZWQgdG8gcmVhZCBieXRlcyBmcm9tIGZpbGUge306IHt9IiwKLSAgICAgICAgICAgIGZpbGVfcGF0aCwKLSAgICAgICAgICAgIGVycm1zZwotICAgICAgICApKQotICAgIH0pPzsKLSAgICBPayhidWZmZXIpCi19Ci0KLS8vLyBDcmVhdGUgZmxhZyBpbmZvIGZpbGUgZ2l2ZW4gcGFja2FnZSBtYXAgZmlsZSBhbmQgZmxhZyBtYXAgZmlsZQotLy8vIFxpbnB1dCBwYWNrYWdlX21hcDogcGFja2FnZSBtYXAgZmlsZQotLy8vIFxpbnB1dCBmbGFnX21hcDogZmxhZyBtYXAgZmlsZQotLy8vIFxvdXRwdXQgZmxhZ19pbmZvX291dDogY3JlYXRlZCBmbGFnIGluZm8gZmlsZQotcHViIGZuIGNyZWF0ZV9mbGFnX2luZm8oCi0gICAgcGFja2FnZV9tYXA6ICZzdHIsCi0gICAgZmxhZ19tYXA6ICZzdHIsCi0gICAgZmxhZ19pbmZvX291dDogJnN0ciwKLSkgLT4gUmVzdWx0PCgpLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7Ci0gICAgbGV0IHBhY2thZ2VfdGFibGUgPSBQYWNrYWdlVGFibGU6OmZyb21fYnl0ZXMoJnJlYWRfZmlsZV90b19ieXRlcyhwYWNrYWdlX21hcCk/KT87Ci0gICAgbGV0IGZsYWdfdGFibGUgPSBGbGFnVGFibGU6OmZyb21fYnl0ZXMoJnJlYWRfZmlsZV90b19ieXRlcyhmbGFnX21hcCk/KT87Ci0KLSAgICBpZiBwYWNrYWdlX3RhYmxlLmhlYWRlci5jb250YWluZXIgIT0gZmxhZ190YWJsZS5oZWFkZXIuY29udGFpbmVyIHsKLSAgICAgICAgcmV0dXJuIEVycihBY29uZmlnU3RvcmFnZUVycm9yOjpGaWxlQ3JlYXRpb25GYWlsKGFueWhvdyEoCi0gICAgICAgICAgICAiY29udGFpbmVyIGZvciBwYWNrYWdlIG1hcCB7fSBhbmQgZmxhZyBtYXAge30gZG9lcyBub3QgbWF0Y2giLAotICAgICAgICAgICAgcGFja2FnZV90YWJsZS5oZWFkZXIuY29udGFpbmVyLAotICAgICAgICAgICAgZmxhZ190YWJsZS5oZWFkZXIuY29udGFpbmVyLAotICAgICAgICApKSk7Ci0gICAgfQotCi0gICAgbGV0IG11dCBwYWNrYWdlX3N0YXJ0X2luZGV4ID0gdmVjIVswOyBwYWNrYWdlX3RhYmxlLmhlYWRlci5udW1fcGFja2FnZXMgYXMgdXNpemVdOwotICAgIGZvciBub2RlIGluIHBhY2thZ2VfdGFibGUubm9kZXMuaXRlcigpIHsKLSAgICAgICAgcGFja2FnZV9zdGFydF9pbmRleFtub2RlLnBhY2thZ2VfaWQgYXMgdXNpemVdID0gbm9kZS5ib29sZWFuX3N0YXJ0X2luZGV4OwotICAgIH0KLQotICAgIGxldCBtdXQgaXNfZmxhZ19ydyA9IHZlYyFbZmFsc2U7IGZsYWdfdGFibGUuaGVhZGVyLm51bV9mbGFncyBhcyB1c2l6ZV07Ci0gICAgZm9yIG5vZGUgaW4gZmxhZ190YWJsZS5ub2Rlcy5pdGVyKCkgewotICAgICAgICBsZXQgZmxhZ19pbmRleCA9IHBhY2thZ2Vfc3RhcnRfaW5kZXhbbm9kZS5wYWNrYWdlX2lkIGFzIHVzaXplXSArIG5vZGUuZmxhZ19pbmRleCBhcyB1MzI7Ci0gICAgICAgIGlzX2ZsYWdfcndbZmxhZ19pbmRleCBhcyB1c2l6ZV0gPSBub2RlLmZsYWdfdHlwZSA9PSBTdG9yZWRGbGFnVHlwZTo6UmVhZFdyaXRlQm9vbGVhbjsKLSAgICB9Ci0KLSAgICBsZXQgbXV0IGxpc3QgPSBGbGFnSW5mb0xpc3QgewotICAgICAgICBoZWFkZXI6IEZsYWdJbmZvSGVhZGVyIHsKLSAgICAgICAgICAgIHZlcnNpb246IEZJTEVfVkVSU0lPTiwKLSAgICAgICAgICAgIGNvbnRhaW5lcjogZmxhZ190YWJsZS5oZWFkZXIuY29udGFpbmVyLAotICAgICAgICAgICAgZmlsZV90eXBlOiBTdG9yYWdlRmlsZVR5cGU6OkZsYWdJbmZvIGFzIHU4LAotICAgICAgICAgICAgZmlsZV9zaXplOiAwLAotICAgICAgICAgICAgbnVtX2ZsYWdzOiBmbGFnX3RhYmxlLmhlYWRlci5udW1fZmxhZ3MsCi0gICAgICAgICAgICBib29sZWFuX2ZsYWdfb2Zmc2V0OiAwLAotICAgICAgICB9LAotICAgICAgICBub2RlczogaXNfZmxhZ19ydy5pdGVyKCkubWFwKHwmcnd8IEZsYWdJbmZvTm9kZTo6Y3JlYXRlKHJ3KSkuY29sbGVjdCgpLAotICAgIH07Ci0KLSAgICBsaXN0LmhlYWRlci5ib29sZWFuX2ZsYWdfb2Zmc2V0ID0gbGlzdC5oZWFkZXIuaW50b19ieXRlcygpLmxlbigpIGFzIHUzMjsKLSAgICBsaXN0LmhlYWRlci5maWxlX3NpemUgPSBsaXN0LmludG9fYnl0ZXMoKS5sZW4oKSBhcyB1MzI7Ci0KLSAgICBsZXQgbXV0IGZpbGUgPSBGaWxlOjpjcmVhdGUoZmxhZ19pbmZvX291dCkubWFwX2Vycih8ZXJybXNnfCB7Ci0gICAgICAgIEFjb25maWdTdG9yYWdlRXJyb3I6OkZpbGVDcmVhdGlvbkZhaWwoYW55aG93ISgKLSAgICAgICAgICAgICJmYWlsIHRvIGNyZWF0ZSBmaWxlIHt9OiB7fSIsCi0gICAgICAgICAgICBmbGFnX2luZm9fb3V0LAotICAgICAgICAgICAgZXJybXNnCi0gICAgICAgICkpCi0gICAgfSk/OwotICAgIGZpbGUud3JpdGVfYWxsKCZsaXN0LmludG9fYnl0ZXMoKSkubWFwX2Vycih8ZXJybXNnfCB7Ci0gICAgICAgIEFjb25maWdTdG9yYWdlRXJyb3I6OkZpbGVDcmVhdGlvbkZhaWwoYW55aG93ISgKLSAgICAgICAgICAgICJmYWlsIHRvIHdyaXRlIHRvIGZpbGUge306IHt9IiwKLSAgICAgICAgICAgIGZsYWdfaW5mb19vdXQsCi0gICAgICAgICAgICBlcnJtc2cKLSAgICAgICAgKSkKLSAgICB9KT87Ci0KLSAgICBPaygoKSkKLX0KLQogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8vCiAvLyBDQyBJTlRFUkxPUAogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8vCkBAIC0yMTIsMTIgKzEyNyw2IEBACiAgICAgICAgIHB1YiBlcnJvcl9tZXNzYWdlOiBTdHJpbmcsCiAgICAgfQogCi0gICAgLy8gRmxhZyBpbmZvIGZpbGUgY3JlYXRpb24gcmV0dXJuIGZvciBjYyBpbnRlcmxvcAotICAgIHB1YiBzdHJ1Y3QgRmxhZ0luZm9DcmVhdGlvbkNYWCB7Ci0gICAgICAgIHB1YiBzdWNjZXNzOiBib29sLAotICAgICAgICBwdWIgZXJyb3JfbWVzc2FnZTogU3RyaW5nLAotICAgIH0KLQogICAgIC8vIFJ1c3QgZXhwb3J0IHRvIGMrKwogICAgIGV4dGVybiAiUnVzdCIgewogICAgICAgICBwdWIgZm4gdXBkYXRlX2Jvb2xlYW5fZmxhZ192YWx1ZV9jeHgoCkBAIC0yMzksMTIgKzE0OCw2IEBACiAgICAgICAgICAgICBvZmZzZXQ6IHUzMiwKICAgICAgICAgICAgIHZhbHVlOiBib29sLAogICAgICAgICApIC0+IEZsYWdIYXNMb2NhbE92ZXJyaWRlVXBkYXRlQ1hYOwotCi0gICAgICAgIHB1YiBmbiBjcmVhdGVfZmxhZ19pbmZvX2N4eCgKLSAgICAgICAgICAgIHBhY2thZ2VfbWFwOiAmc3RyLAotICAgICAgICAgICAgZmxhZ19tYXA6ICZzdHIsCi0gICAgICAgICAgICBmbGFnX2luZm9fb3V0OiAmc3RyLAotICAgICAgICApIC0+IEZsYWdJbmZvQ3JlYXRpb25DWFg7CiAgICAgfQogfQogCkBAIC0zMjksMzQgKzIzMiwxNSBAQAogICAgIH0KIH0KIAotLy8vIENyZWF0ZSBmbGFnIGluZm8gZmlsZSBjYyBpbnRlcmxvcAotcHViKGNyYXRlKSBmbiBjcmVhdGVfZmxhZ19pbmZvX2N4eCgKLSAgICBwYWNrYWdlX21hcDogJnN0ciwKLSAgICBmbGFnX21hcDogJnN0ciwKLSAgICBmbGFnX2luZm9fb3V0OiAmc3RyLAotKSAtPiBmZmk6OkZsYWdJbmZvQ3JlYXRpb25DWFggewotICAgIG1hdGNoIGNyZWF0ZV9mbGFnX2luZm8ocGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX2luZm9fb3V0KSB7Ci0gICAgICAgIE9rKCgpKSA9PiBmZmk6OkZsYWdJbmZvQ3JlYXRpb25DWFggeyBzdWNjZXNzOiB0cnVlLCBlcnJvcl9tZXNzYWdlOiBTdHJpbmc6OmZyb20oIiIpIH0sCi0gICAgICAgIEVycihlcnJtc2cpID0+IHsKLSAgICAgICAgICAgIGZmaTo6RmxhZ0luZm9DcmVhdGlvbkNYWCB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcl9tZXNzYWdlOiBmb3JtYXQhKCJ7Oj99IiwgZXJybXNnKSB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7CiAgICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjb3B5X3RvX3RlbXBfZmlsZTsKLSAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OnsKLSAgICAgICAgY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QsIGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUsIGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUsCi0gICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSwKLSAgICB9OwogICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6RmxhZ0luZm9CaXQ7CiAgICAgdXNlIGFjb25maWdfc3RvcmFnZV9yZWFkX2FwaTo6ZmxhZ19pbmZvX3F1ZXJ5OjpmaW5kX2ZsYWdfYXR0cmlidXRlOwogICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGk6OmZsYWdfdmFsdWVfcXVlcnk6OmZpbmRfYm9vbGVhbl9mbGFnX3ZhbHVlOwogICAgIHVzZSBzdGQ6OmZzOjpGaWxlOwogICAgIHVzZSBzdGQ6OmlvOjpSZWFkOwotICAgIHVzZSB0ZW1wZmlsZTo6TmFtZWRUZW1wRmlsZTsKIAogICAgIGZuIGdldF9ib29sZWFuX2ZsYWdfdmFsdWVfYXRfb2Zmc2V0KGZpbGU6ICZzdHIsIG9mZnNldDogdTMyKSAtPiBib29sIHsKICAgICAgICAgbGV0IG11dCBmID0gRmlsZTo6b3BlbigmZmlsZSkudW53cmFwKCk7CkBAIC00MzksMzEgKzMyMyw0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBmbiBjcmVhdGVfZW1wdHlfdGVtcF9maWxlKCkgLT4gUmVzdWx0PE5hbWVkVGVtcEZpbGUsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKLSAgICAgICAgbGV0IGZpbGUgPSBOYW1lZFRlbXBGaWxlOjpuZXcoKS5tYXBfZXJyKHxffCB7Ci0gICAgICAgICAgICBBY29uZmlnU3RvcmFnZUVycm9yOjpGaWxlQ3JlYXRpb25GYWlsKGFueWhvdyEoIkZhaWxlZCB0byBjcmVhdGUgdGVtcCBmaWxlIikpCi0gICAgICAgIH0pPzsKLSAgICAgICAgT2soZmlsZSkKLSAgICB9Ci0KLSAgICAjW3Rlc3RdCi0gICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIGZsYWcgaW5mbyBjcmVhdGlvbgotICAgIGZuIHRlc3RfY3JlYXRlX2ZsYWdfaW5mbygpIHsKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPQotICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ19pbmZvID0gY3JlYXRlX2VtcHR5X3RlbXBfZmlsZSgpLnVud3JhcCgpOwotCi0gICAgICAgIGxldCBwYWNrYWdlX3RhYmxlX3BhdGggPSBwYWNrYWdlX3RhYmxlLnBhdGgoKS5kaXNwbGF5KCkudG9fc3RyaW5nKCk7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlX3BhdGggPSBmbGFnX3RhYmxlLnBhdGgoKS5kaXNwbGF5KCkudG9fc3RyaW5nKCk7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fcGF0aCA9IGZsYWdfaW5mby5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOwotCi0gICAgICAgIGFzc2VydCEoY3JlYXRlX2ZsYWdfaW5mbygmcGFja2FnZV90YWJsZV9wYXRoLCAmZmxhZ190YWJsZV9wYXRoLCAmZmxhZ19pbmZvX3BhdGgpLmlzX29rKCkpOwotCi0gICAgICAgIGxldCBmbGFnX2luZm8gPQotICAgICAgICAgICAgRmxhZ0luZm9MaXN0Ojpmcm9tX2J5dGVzKCZyZWFkX2ZpbGVfdG9fYnl0ZXMoJmZsYWdfaW5mb19wYXRoKS51bndyYXAoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9mbGFnX2luZm8gPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpOwotICAgICAgICBhc3NlcnRfZXEhKGZsYWdfaW5mbywgZXhwZWN0ZWRfZmxhZ19pbmZvKTsKLSAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2FmbGFncy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3MvQW5kcm9pZC5icAppbmRleCAyMDQwY2M2Li5hN2FjZWVlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0FuZHJvaWQuYnAKQEAgLTEyLDcgKzEyLDcgQEAKICAgICAgICAgImxpYmFjb25maWdfZGV2aWNlX3BhdGhzIiwKICAgICAgICAgImxpYmFjb25maWdfZmxhZ3MiLAogICAgICAgICAibGliYWNvbmZpZ19wcm90b3MiLAotICAgICAgICAibGliYWNvbmZpZ2RfcHJvdG9zIiwKKyAgICAgICAgImxpYmFjb25maWdkX3Byb3Rvc19ydXN0IiwKICAgICAgICAgImxpYmFjb25maWdfc3RvcmFnZV9yZWFkX2FwaSIsCiAgICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfZmlsZSIsCiAgICAgICAgICJsaWJhbnlob3ciLApAQCAtMjAsNiArMjAsMTAgQEAKICAgICAgICAgImxpYm5peCIsCiAgICAgICAgICJsaWJwcm90b2J1ZiIsCiAgICAgICAgICJsaWJyZWdleCIsCisgICAgICAgIC8vIFRPRE86IGIvMzcxMDIxMTc0IHJlbW92ZSB0aGlzIGZha2UgZGVwZW5kZW5jeSBvbmNlIHdlIGZpbmQgYSBwcm9wZXIgc3RyYXRlZ3kgdG8KKyAgICAgICAgLy8gZGVhbCB3aXRoIHRlc3QgYWNvbmZpZyBsaWJzIGFyZSBub3QgcHJlc2VudCBpbiBzdG9yYWdlIGJlY2F1c2UgdGhleSBhcmUgbmV2ZXIgdXNlZAorICAgICAgICAvLyBieSB0aGUgYWN0dWFsIGJ1aWxkCisgICAgICAgICJsaWJhY29uZmlnX3Rlc3RfcnVzdF9saWJyYXJ5IiwKICAgICBdLAogfQogCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2FmbGFncy9DYXJnby50b21sIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3MvQ2FyZ28udG9tbAppbmRleCA3ZWZjZTZkLi5kMzFlMjMyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9DYXJnby50b21sCisrKyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0NhcmdvLnRvbWwKQEAgLTksMTAgKzksMTAgQEAKIHByb3RvYnVmID0gIjMuMi4wIgogcmVnZXggPSAiMS4xMC4zIgogYWNvbmZpZ19wcm90b3MgPSB7IHBhdGggPSAiLi4vYWNvbmZpZ19wcm90b3MiIH0KLWFjb25maWdkX3Byb3RvcyA9IHsgdmVyc2lvbiA9ICIwLjEuMCIsIHBhdGggPSAiLi4vLi4vLi4vLi4vLi4vc3lzdGVtL3NlcnZlcl9jb25maWd1cmFibGVfZmxhZ3MvYWNvbmZpZ2QifQorYWNvbmZpZ2RfcHJvdG9zID0geyB2ZXJzaW9uID0gIjAuMS4wIiwgcGF0aCA9ICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9tb2R1bGVzL0NvbmZpZ0luZnJhc3RydWN0dXJlL2Fjb25maWdkL3Byb3RvIn0KIG5peCA9IHsgdmVyc2lvbiA9ICIwLjI4LjAiLCBmZWF0dXJlcyA9IFsidXNlciJdIH0KIGFjb25maWdfc3RvcmFnZV9maWxlID0geyB2ZXJzaW9uID0gIjAuMS4wIiwgcGF0aCA9ICIuLi9hY29uZmlnX3N0b3JhZ2VfZmlsZSIgfQogYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpID0geyB2ZXJzaW9uID0gIjAuMS4wIiwgcGF0aCA9ICIuLi9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkiIH0KIGNsYXAgPSB7dmVyc2lvbiA9ICI0LjUuMiIgfQogYWNvbmZpZ19kZXZpY2VfcGF0aHMgPSB7IHZlcnNpb24gPSAiMC4xLjAiLCBwYXRoID0gIi4uL2Fjb25maWdfZGV2aWNlX3BhdGhzIiB9Ci1hY29uZmlnX2ZsYWdzID0geyB2ZXJzaW9uID0gIjAuMS4wIiwgcGF0aCA9ICIuLi9hY29uZmlnX2ZsYWdzIiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorYWNvbmZpZ19mbGFncyA9IHsgdmVyc2lvbiA9ICIwLjEuMCIsIHBhdGggPSAiLi4vYWNvbmZpZ19mbGFncyIgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL2Fjb25maWdfc3RvcmFnZV9zb3VyY2UucnMgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycwppbmRleCA2OGVkZjdkLi5hZWY3ZDdlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycworKysgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycwpAQCAtOTMsNyArOTMsOCBAQAogICAgICAgICBzcGVjaWFsX2ZpZWxkczogU3BlY2lhbEZpZWxkczo6bmV3KCksCiAgICAgfTsKIAotICAgIGxldCBtdXQgc29ja2V0ID0gVW5peFN0cmVhbTo6Y29ubmVjdCgiL2Rldi9zb2NrZXQvYWNvbmZpZ2QiKT87CisgICAgbGV0IHNvY2tldF9uYW1lID0gIi9kZXYvc29ja2V0L2Fjb25maWdkX3N5c3RlbSI7CisgICAgbGV0IG11dCBzb2NrZXQgPSBVbml4U3RyZWFtOjpjb25uZWN0KHNvY2tldF9uYW1lKT87CiAKICAgICBsZXQgbWVzc2FnZV9idWZmZXIgPSBtZXNzYWdlcy53cml0ZV90b19ieXRlcygpPzsKICAgICBsZXQgbXV0IG1lc3NhZ2VfbGVuZ3RoX2J1ZmZlcjogW3U4OyA0XSA9IFswOyA0XTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9sb2FkX3Byb3Rvcy5ycyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9sb2FkX3Byb3Rvcy5ycwppbmRleCA5MGQ4NTk5Li5jNWFjOGZmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbG9hZF9wcm90b3MucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL2xvYWRfcHJvdG9zLnJzCkBAIC01MSw3ICs1MSwxMCBAQAogCiAgICAgbGV0IHBhdGhzID0gYWNvbmZpZ19kZXZpY2VfcGF0aHM6OnBhcnNlZF9mbGFnc19wcm90b19wYXRocygpPzsKICAgICBmb3IgcGF0aCBpbiBwYXRocyB7Ci0gICAgICAgIGxldCBieXRlcyA9IGZzOjpyZWFkKHBhdGguY2xvbmUoKSk/OworICAgICAgICBsZXQgT2soYnl0ZXMpID0gZnM6OnJlYWQoJnBhdGgpIGVsc2UgeworICAgICAgICAgICAgZXByaW50bG4hKCJ3YXJuaW5nOiBmYWlsZWQgdG8gcmVhZCB7Oj99IiwgcGF0aCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfTsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFnczogUHJvdG9QYXJzZWRGbGFncyA9IHByb3RvYnVmOjpNZXNzYWdlOjpwYXJzZV9mcm9tX2J5dGVzKCZieXRlcyk/OwogICAgICAgICBmb3IgZmxhZyBpbiBwYXJzZWRfZmxhZ3MucGFyc2VkX2ZsYWcgewogICAgICAgICAgICAgLy8gVE9ETyhiLzMzNDk1NDc0OCk6IGVuZm9yY2Ugb25lLWNvbnRhaW5lci1wZXItZmxhZyBpbnZhcmlhbnQuCkBAIC02MCwzICs2MywxMCBAQAogICAgIH0KICAgICBPayhyZXN1bHQpCiB9CisKK3B1YihjcmF0ZSkgZm4gbGlzdF9jb250YWluZXJzKCkgLT4gUmVzdWx0PFZlYzxTdHJpbmc+PiB7CisgICAgT2soYWNvbmZpZ19kZXZpY2VfcGF0aHM6OnBhcnNlZF9mbGFnc19wcm90b19wYXRocygpPworICAgICAgICAuaW50b19pdGVyKCkKKyAgICAgICAgLm1hcCh8cHwgaW5mZXJfY29udGFpbmVyKCZwKSkKKyAgICAgICAgLmNvbGxlY3QoKSkKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9tYWluLnJzIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL21haW4ucnMKaW5kZXggMDdiNzI0My4uODE3M2JjMiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL21haW4ucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL21haW4ucnMKQEAgLTI1Myw2ICsyNTMsMTQgQEAKICAgICAgICAgRmxhZ1NvdXJjZVR5cGU6OkRldmljZUNvbmZpZyA9PiBEZXZpY2VDb25maWdTb3VyY2U6Omxpc3RfZmxhZ3MoKT8sCiAgICAgICAgIEZsYWdTb3VyY2VUeXBlOjpBY29uZmlnU3RvcmFnZSA9PiBBY29uZmlnU3RvcmFnZVNvdXJjZTo6bGlzdF9mbGFncygpPywKICAgICB9OworCisgICAgaWYgbGV0IFNvbWUocmVmIGMpID0gY29udGFpbmVyIHsKKyAgICAgICAgZW5zdXJlISgKKyAgICAgICAgICAgIGxvYWRfcHJvdG9zOjpsaXN0X2NvbnRhaW5lcnMoKT8uY29udGFpbnMoYyksCisgICAgICAgICAgICBmb3JtYXQhKCJjb250YWluZXIgJ3t9JyBub3QgZm91bmQiLCAmYykKKyAgICAgICAgKTsKKyAgICB9CisKICAgICBsZXQgZmxhZ3MgPSAoRmlsdGVyIHsgY29udGFpbmVyIH0pLmFwcGx5KCZmbGFnc191bmZpbHRlcmVkKTsKICAgICBsZXQgcGFkZGluZ19pbmZvID0gUGFkZGluZ0luZm8gewogICAgICAgICBsb25nZXN0X2ZsYWdfY29sOiBmbGFncy5pdGVyKCkubWFwKHxmfCBmLnF1YWxpZmllZF9uYW1lKCkubGVuKCkpLm1heCgpLnVud3JhcF9vcigwKSwKQEAgLTI5OCw3ICszMDYsNyBAQAogICAgICAgICBDb21tYW5kOjpMaXN0IHsgY29udGFpbmVyIH0gPT4gewogICAgICAgICAgICAgaWYgYWNvbmZpZ19mbGFnczo6YXV0b19nZW5lcmF0ZWQ6OmVuYWJsZV9vbmx5X25ld19zdG9yYWdlKCkgewogICAgICAgICAgICAgICAgIGxpc3QoRmxhZ1NvdXJjZVR5cGU6OkFjb25maWdTdG9yYWdlLCBjb250YWluZXIpCi0gICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGFueWhvdyEoInN0b3JhZ2UgbWF5IG5vdCBiZSBlbmFibGVkOiB7ZXJyfSIpKQorICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBhbnlob3chKCJjb3VsZCBub3QgbGlzdCBmbGFnczoge2Vycn0iKSkKICAgICAgICAgICAgICAgICAgICAgLm1hcChTb21lKQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBsaXN0KEZsYWdTb3VyY2VUeXBlOjpEZXZpY2VDb25maWcsIGNvbnRhaW5lcikubWFwKFNvbWUpCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvQW5kcm9pZC5icAppbmRleCA3NzA0NzQyLi4xYzViN2M1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL0FuZHJvaWQuYnAKQEAgLTE1LDkgKzE1LDcgQEAKIGphdmFfbGlicmFyeSB7CiAgICAgbmFtZTogImZha2VfZGV2aWNlX2NvbmZpZyIsCiAgICAgc3JjczogWwotICAgICAgICAic3JjL2FuZHJvaWQvdXRpbC9Mb2cuamF2YSIsCi0gICAgICAgICJzcmMvYW5kcm9pZC9wcm92aWRlci9EZXZpY2VDb25maWcuamF2YSIsCi0gICAgICAgICJzcmMvYW5kcm9pZC9vcy9TdHJpY3RNb2RlLmphdmEiLAorICAgICAgICAic3JjLyoqLyouamF2YSIsCiAgICAgXSwKICAgICBzZGtfdmVyc2lvbjogIm5vbmUiLAogICAgIHN5c3RlbV9tb2R1bGVzOiAiY29yZS1hbGwtc3lzdGVtLW1vZHVsZXMiLApAQCAtMzQsMyArMzIsMjQgQEAKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKICAgICBpc19zdHVic19tb2R1bGU6IHRydWUsCiB9CisKK2phdmFfbGlicmFyeSB7CisgICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9zdHViIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJzcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy8qKi8qLmphdmEiLAorICAgIF0sCisgICAgc2RrX3ZlcnNpb246ICJjb3JlX2N1cnJlbnQiLAorICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorICAgIGlzX3N0dWJzX21vZHVsZTogdHJ1ZSwKK30KKworamF2YV9saWJyYXJ5IHsKKyAgICBuYW1lOiAiYWNvbmZpZ19zdG9yYWdlX3N0dWJfbm9uZSIsCisgICAgc3JjczogWworICAgICAgICAic3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvKiovKi5qYXZhIiwKKyAgICBdLAorICAgIHNka192ZXJzaW9uOiAibm9uZSIsCisgICAgc3lzdGVtX21vZHVsZXM6ICJjb3JlLWFsbC1zeXN0ZW0tbW9kdWxlcyIsCisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCisgICAgaXNfc3R1YnNfbW9kdWxlOiB0cnVlLAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvQmluZGVyLmphdmEgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9CaW5kZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTIzMTNkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvQmluZGVyLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5vczsKKworcHVibGljIGNsYXNzIEJpbmRlciB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIGNsZWFyQ2FsbGluZ0lkZW50aXR5KCkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCByZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGxvbmcgdG9rZW4pIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL0J1aWxkLmphdmEgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9CdWlsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzcyZmIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9CdWlsZC5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQub3M7CisKK3B1YmxpYyBjbGFzcyBCdWlsZCB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBWRVJTSU9OIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0RLX0lOVCA9IDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1BhY2thZ2UuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhYzUxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5vcy5mbGFnZ2luZzsKKworLyoKKyAqIFRoaXMgY2xhc3MgYWxsb3dzIGdlbmVyYXRlZCBhY29uZmlnIGNvZGUgdG8gY29tcGlsZSBpbmRlcGVuZGVudGx5IG9mIHRoZSBmcmFtZXdvcmsuCisgKi8KK3B1YmxpYyBjbGFzcyBBY29uZmlnUGFja2FnZSB7CisgICAgcHVibGljIHN0YXRpYyBBY29uZmlnUGFja2FnZSBsb2FkKFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShTdHJpbmcgZmxhZ05hbWUsIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4NDA0OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm9zLmZsYWdnaW5nOworCisvKgorICogVGhpcyBjbGFzcyBhbGxvd3MgZ2VuZXJhdGVkIGFjb25maWcgY29kZSB0byBjb21waWxlIGluZGVwZW5kZW50bHkgb2YgdGhlIGZyYW1ld29yay4KKyAqLworcHVibGljIGNsYXNzIEFjb25maWdQYWNrYWdlSW50ZXJuYWwgeworCisgICAgcHVibGljIHN0YXRpYyBBY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoCisgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyLCBTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuRmxhZ1ZhbHVlKGludCBpbmRleCkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLmphdmEgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVjOThjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5vcy5mbGFnZ2luZzsKKworcHVibGljIGNsYXNzIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geworCisgICAgLyoqIEdlbmVyaWMgZXJyb3IgY29kZSBpbmRpY2F0aW5nIGFuIHVuc3BlY2lmaWVkIEFjb25maWcgU3RvcmFnZSBlcnJvci4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9HRU5FUklDID0gMDsKKworICAgIC8qKiBFcnJvciBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgQWNvbmZpZyBTdG9yYWdlIHN5c3RlbSBpcyBub3QgZm91bmQgb24gdGhlIGRldmljZS4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9TVE9SQUdFX1NZU1RFTV9OT1RfRk9VTkQgPSAxOworCisgICAgLyoqIEVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbiBwYWNrYWdlIGlzIG5vdCBmb3VuZC4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9QQUNLQUdFX05PVF9GT1VORCA9IDI7CisKKyAgICAvKiogRXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHNwZWNpZmllZCBjb250YWluZXIgaXMgbm90IGZvdW5kLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0NPTlRBSU5FUl9OT1RfRk9VTkQgPSAzOworCisgICAgLyoqIEVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBBY29uZmlnIFN0b3JhZ2UgZmlsZS4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUgPSA0OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfRklMRV9GSU5HRVJQUklOVF9NSVNNQVRDSCA9IDU7CisKKyAgICBwdWJsaWMgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uKGludCBlcnJvckNvZGUsIFN0cmluZyBtc2cpIHsKKyAgICAgICAgc3VwZXIobXNnKTsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOworICAgIH0KKworICAgIHB1YmxpYyBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24oaW50IGVycm9yQ29kZSwgU3RyaW5nIG1zZywgVGhyb3dhYmxlIGNhdXNlKSB7CisgICAgICAgIHN1cGVyKG1zZywgY2F1c2UpOworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorCisgICAgcHVibGljIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbihpbnQgZXJyb3JDb2RlLCBUaHJvd2FibGUgY2F1c2UpIHsKKyAgICAgICAgc3VwZXIoY2F1c2UpOworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRFcnJvckNvZGUoKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4M2IyNTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm9zLmZsYWdnaW5nOworCisvKgorICogVGhpcyBjbGFzcyBhbGxvd3MgZ2VuZXJhdGVkIGFjb25maWcgY29kZSB0byBjb21waWxlIGluZGVwZW5kZW50bHkgb2YgdGhlIGZyYW1ld29yay4KKyAqLworcHVibGljIGNsYXNzIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCB7CisKKyAgICBwdWJsaWMgc3RhdGljIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCBsb2FkKAorICAgICAgICAgICAgU3RyaW5nIGNvbnRhaW5lciwgU3RyaW5nIHBhY2thZ2VOYW1lLCBsb25nIHBhY2thZ2VGaW5nZXJwcmludCkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShpbnQgaW5kZXgpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2F1dG9fZ2VuX3Rlc3RfY29uZmlnLnB5IGIvdG9vbHMvYXV0b19nZW5fdGVzdF9jb25maWcucHkKaW5kZXggOGVlNTk5YS4uZDU0YzQxMiAxMDA3NTUKLS0tIGEvdG9vbHMvYXV0b19nZW5fdGVzdF9jb25maWcucHkKKysrIGIvdG9vbHMvYXV0b19nZW5fdGVzdF9jb25maWcucHkKQEAgLTM0LDYgKzM0LDcgQEAKIFBMQUNFSE9MREVSX1BBQ0tBR0UgPSAne1BBQ0tBR0V9JwogUExBQ0VIT0xERVJfUlVOTkVSID0gJ3tSVU5ORVJ9JwogUExBQ0VIT0xERVJfVEVTVF9UWVBFID0gJ3tURVNUX1RZUEV9JworUExBQ0VIT0xERVJfRVhUUkFfVEVTVF9SVU5ORVJfQ09ORklHUyA9ICd7RVhUUkFfVEVTVF9SVU5ORVJfQ09ORklHU30nCiAKIAogZGVmIG1haW4oYXJndik6CkBAIC01OSw2ICs2MCw3IEBACiAgICAgICAiaW5zdHJ1bWVudGF0aW9uX3Rlc3RfY29uZmlnX3RlbXBsYXRlIiwKICAgICAgIGhlbHA9IlBhdGggdG8gdGhlIGluc3RydW1lbnRhdGlvbiB0ZXN0IGNvbmZpZyB0ZW1wbGF0ZS4iKQogICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWV4dHJhLWNvbmZpZ3MiLCBkZWZhdWx0PSIiKQorICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWV4dHJhLXRlc3QtcnVubmVyLWNvbmZpZ3MiLCBkZWZhdWx0PSIiKQogICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKIAogICB0YXJnZXRfY29uZmlnID0gYXJncy50YXJnZXRfY29uZmlnCkBAIC02Niw2ICs2OCw3IEBACiAgIGVtcHR5X2NvbmZpZyA9IGFyZ3MuZW1wdHlfY29uZmlnCiAgIGluc3RydW1lbnRhdGlvbl90ZXN0X2NvbmZpZ190ZW1wbGF0ZSA9IGFyZ3MuaW5zdHJ1bWVudGF0aW9uX3Rlc3RfY29uZmlnX3RlbXBsYXRlCiAgIGV4dHJhX2NvbmZpZ3MgPSAnXG4nLmpvaW4oYXJncy5leHRyYV9jb25maWdzLnNwbGl0KCdcXG4nKSkKKyAgZXh0cmFfdGVzdF9ydW5uZXJfY29uZmlncyA9ICdcbicuam9pbihhcmdzLmV4dHJhX3Rlc3RfcnVubmVyX2NvbmZpZ3Muc3BsaXQoJ1xcbicpKQogCiAgIG1vZHVsZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZSh0YXJnZXRfY29uZmlnKSlbMF0KIApAQCAtMTMxLDYgKzEzNCw3IEBACiAgICAgY29uZmlnID0gY29uZmlnLnJlcGxhY2UoUExBQ0VIT0xERVJfUEFDS0FHRSwgcGFja2FnZSkKICAgICBjb25maWcgPSBjb25maWcucmVwbGFjZShQTEFDRUhPTERFUl9URVNUX1RZUEUsIHRlc3RfdHlwZSkKICAgICBjb25maWcgPSBjb25maWcucmVwbGFjZShQTEFDRUhPTERFUl9FWFRSQV9DT05GSUdTLCBleHRyYV9jb25maWdzKQorICAgIGNvbmZpZyA9IGNvbmZpZy5yZXBsYWNlKFBMQUNFSE9MREVSX0VYVFJBX1RFU1RfUlVOTkVSX0NPTkZJR1MsIGV4dHJhX3Rlc3RfcnVubmVyX2NvbmZpZ3MpCiAgICAgY29uZmlnID0gY29uZmlnLnJlcGxhY2UoUExBQ0VIT0xERVJfUlVOTkVSLCBydW5uZXIpCiAgICAgd2l0aCBvcGVuKHRhcmdldF9jb25maWcsICd3JykgYXMgY29uZmlnX2ZpbGU6CiAgICAgICBjb25maWdfZmlsZS53cml0ZShjb25maWcpCmRpZmYgLS1naXQgYS90b29scy9jb21wbGlhbmNlL2dvLndvcmsgYi90b29scy9jb21wbGlhbmNlL2dvLndvcmsKaW5kZXggYTI0ZDJlYS4uNTA2ZTYxOSAxMDA2NDQKLS0tIGEvdG9vbHMvY29tcGxpYW5jZS9nby53b3JrCisrKyBiL3Rvb2xzL2NvbXBsaWFuY2UvZ28ud29yawpAQCAtMSw0ICsxLDQgQEAKLWdvIDEuMjIKK2dvIDEuMjMKIAogdXNlICgKIAkuCmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvQW5kcm9pZC5icCBiL3Rvb2xzL2VkaXRfbW9uaXRvci9BbmRyb2lkLmJwCmluZGV4IGI5Mzk2MzMuLmI4YWM1YmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VkaXRfbW9uaXRvci9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci9BbmRyb2lkLmJwCkBAIC0yMSwxMCArMjEsMjcgQEAKIH0KIAogcHl0aG9uX2xpYnJhcnlfaG9zdCB7CisgICAgbmFtZTogImVkaXRfZXZlbnRfcHJvdG8iLAorICAgIHNyY3M6IFsKKyAgICAgICAgInByb3RvL2VkaXRfZXZlbnQucHJvdG8iLAorICAgIF0sCisgICAgcHJvdG86IHsKKyAgICAgICAgY2Fub25pY2FsX3BhdGhfZnJvbV9yb290OiBmYWxzZSwKKyAgICB9LAorfQorCitweXRob25fbGlicmFyeV9ob3N0IHsKICAgICBuYW1lOiAiZWRpdF9tb25pdG9yX2xpYiIsCiAgICAgcGtnX3BhdGg6ICJlZGl0X21vbml0b3IiLAogICAgIHNyY3M6IFsKICAgICAgICAgImRhZW1vbl9tYW5hZ2VyLnB5IiwKKyAgICAgICAgImVkaXRfbW9uaXRvci5weSIsCisgICAgICAgICJ1dGlscy5weSIsCisgICAgXSwKKyAgICBsaWJzOiBbCisgICAgICAgICJhc3VpdGVfY2NfY2xpZW50IiwKKyAgICAgICAgImVkaXRfZXZlbnRfcHJvdG8iLAorICAgICAgICAid2F0Y2hkb2ciLAogICAgIF0sCiB9CiAKQEAgLTQyLDMgKzU5LDYwIEBACiAgICAgICAgIHVuaXRfdGVzdDogdHJ1ZSwKICAgICB9LAogfQorCitweXRob25fdGVzdF9ob3N0IHsKKyAgICBuYW1lOiAiZWRpdF9tb25pdG9yX3Rlc3QiLAorICAgIG1haW46ICJlZGl0X21vbml0b3JfdGVzdC5weSIsCisgICAgcGtnX3BhdGg6ICJlZGl0X21vbml0b3IiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImVkaXRfbW9uaXRvcl90ZXN0LnB5IiwKKyAgICBdLAorICAgIGxpYnM6IFsKKyAgICAgICAgImVkaXRfbW9uaXRvcl9saWIiLAorICAgIF0sCisgICAgdGVzdF9vcHRpb25zOiB7CisgICAgICAgIHVuaXRfdGVzdDogdHJ1ZSwKKyAgICB9LAorfQorCitweXRob25fdGVzdF9ob3N0IHsKKyAgICBuYW1lOiAiZWRpdF9tb25pdG9yX3V0aWxzX3Rlc3QiLAorICAgIG1haW46ICJ1dGlsc190ZXN0LnB5IiwKKyAgICBwa2dfcGF0aDogImVkaXRfbW9uaXRvciIsCisgICAgc3JjczogWworICAgICAgICAidXRpbHNfdGVzdC5weSIsCisgICAgXSwKKyAgICBsaWJzOiBbCisgICAgICAgICJlZGl0X21vbml0b3JfbGliIiwKKyAgICBdLAorICAgIHRlc3Rfb3B0aW9uczogeworICAgICAgICB1bml0X3Rlc3Q6IHRydWUsCisgICAgfSwKK30KKworcHl0aG9uX3Rlc3RfaG9zdCB7CisgICAgbmFtZTogImVkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0IiwKKyAgICBtYWluOiAiZWRpdF9tb25pdG9yX2ludGVncmF0aW9uX3Rlc3QucHkiLAorICAgIHBrZ19wYXRoOiAidGVzdGRhdGEiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImVkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0LnB5IiwKKyAgICBdLAorICAgIHRlc3Rfb3B0aW9uczogeworICAgICAgICB1bml0X3Rlc3Q6IHRydWUsCisgICAgfSwKKyAgICBkYXRhOiBbCisgICAgICAgICI6ZWRpdF9tb25pdG9yIiwKKyAgICBdLAorfQorCitweXRob25fYmluYXJ5X2hvc3QgeworICAgIG5hbWU6ICJlZGl0X21vbml0b3IiLAorICAgIHBrZ19wYXRoOiAiZWRpdF9tb25pdG9yIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJtYWluLnB5IiwKKyAgICBdLAorICAgIGxpYnM6IFsKKyAgICAgICAgImVkaXRfbW9uaXRvcl9saWIiLAorICAgIF0sCisgICAgbWFpbjogIm1haW4ucHkiLAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyLnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyLnB5CmluZGV4IDhlYzI1ODguLjdkNjY2ZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlci5weQorKysgYi90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXIucHkKQEAgLTEzLDE4ICsxMywzNSBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogCitpbXBvcnQgZXJybm8KK2ltcG9ydCBmY250bAoraW1wb3J0IGdldHBhc3MKIGltcG9ydCBoYXNobGliCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogCitmcm9tIGF0ZXN0Lm1ldHJpY3MgaW1wb3J0IGNsZWFyY3V0X2NsaWVudAorZnJvbSBhdGVzdC5wcm90byBpbXBvcnQgY2xpZW50YW5hbHl0aWNzX3BiMgorZnJvbSBlZGl0X21vbml0b3IgaW1wb3J0IHV0aWxzCitmcm9tIHByb3RvIGltcG9ydCBlZGl0X2V2ZW50X3BiMgogCi1ERUZBVUxUX1BST0NFU1NfVEVSTUlOQVRJT05fVElNRU9VVF9TRUNPTkRTID0gMQorREVGQVVMVF9QUk9DRVNTX1RFUk1JTkFUSU9OX1RJTUVPVVRfU0VDT05EUyA9IDUKK0RFRkFVTFRfTU9OSVRPUl9JTlRFUlZBTF9TRUNPTkRTID0gNQorREVGQVVMVF9NRU1PUllfVVNBR0VfVEhSRVNIT0xEID0gMC4wMiAgIyAyJSBvZiB0b3RhbCBtZW1vcnkKK0RFRkFVTFRfQ1BVX1VTQUdFX1RIUkVTSE9MRCA9IDIwMAorREVGQVVMVF9SRUJPT1RfVElNRU9VVF9TRUNPTkRTID0gNjAgKiA2MCAqIDI0CitCTE9DS19TSUdOX0ZJTEUgPSAiZWRpdF9tb25pdG9yX2Jsb2NrX3NpZ24iCisjIEVudW0gb2YgdGhlIENsZWFyY3V0IGxvZyBzb3VyY2UgZGVmaW5lZCB1bmRlcgorIyAvZ29vZ2xlMy93aXJlbGVzcy9hbmRyb2lkL3BsYXkvcGxheWxvZy9wcm90by9sb2dfc291cmNlX2VudW0ucHJvdG8KK0xPR19TT1VSQ0UgPSAyNTI0CiAKIAogZGVmIGRlZmF1bHRfZGFlbW9uX3RhcmdldCgpOgpAQCAtNDAsMzcgKzU3LDIwOSBAQAogICAgICAgYmluYXJ5X3BhdGg6IHN0ciwKICAgICAgIGRhZW1vbl90YXJnZXQ6IGNhbGxhYmxlID0gZGVmYXVsdF9kYWVtb25fdGFyZ2V0LAogICAgICAgZGFlbW9uX2FyZ3M6IHR1cGxlID0gKCksCisgICAgICBjY2xpZW50OiBjbGVhcmN1dF9jbGllbnQuQ2xlYXJjdXQgfCBOb25lID0gTm9uZSwKICAgKToKICAgICBzZWxmLmJpbmFyeV9wYXRoID0gYmluYXJ5X3BhdGgKICAgICBzZWxmLmRhZW1vbl90YXJnZXQgPSBkYWVtb25fdGFyZ2V0CiAgICAgc2VsZi5kYWVtb25fYXJncyA9IGRhZW1vbl9hcmdzCisgICAgc2VsZi5jY2xpZW50ID0gY2NsaWVudCBvciBjbGVhcmN1dF9jbGllbnQuQ2xlYXJjdXQoTE9HX1NPVVJDRSkKIAorICAgIHNlbGYudXNlcl9uYW1lID0gZ2V0cGFzcy5nZXR1c2VyKCkKKyAgICBzZWxmLmhvc3RfbmFtZSA9IHBsYXRmb3JtLm5vZGUoKQorICAgIHNlbGYuc291cmNlX3Jvb3QgPSBvcy5lbnZpcm9uLmdldCgiQU5EUk9JRF9CVUlMRF9UT1AiLCAiIikKICAgICBzZWxmLnBpZCA9IG9zLmdldHBpZCgpCiAgICAgc2VsZi5kYWVtb25fcHJvY2VzcyA9IE5vbmUKIAorICAgIHNlbGYubWF4X21lbW9yeV91c2FnZSA9IDAKKyAgICBzZWxmLm1heF9jcHVfdXNhZ2UgPSAwCisgICAgc2VsZi50b3RhbF9tZW1vcnlfc2l6ZSA9IG9zLnN5c2NvbmYoIlNDX1BBR0VfU0laRSIpICogb3Muc3lzY29uZigKKyAgICAgICAgIlNDX1BIWVNfUEFHRVMiCisgICAgKQorCiAgICAgcGlkX2ZpbGVfZGlyID0gcGF0aGxpYi5QYXRoKHRlbXBmaWxlLmdldHRlbXBkaXIoKSkuam9pbnBhdGgoImVkaXRfbW9uaXRvciIpCiAgICAgcGlkX2ZpbGVfZGlyLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKICAgICBzZWxmLnBpZF9maWxlX3BhdGggPSBzZWxmLl9nZXRfcGlkX2ZpbGVfcGF0aChwaWRfZmlsZV9kaXIpCisgICAgc2VsZi5ibG9ja19zaWduID0gcGF0aGxpYi5QYXRoKHRlbXBmaWxlLmdldHRlbXBkaXIoKSkuam9pbnBhdGgoCisgICAgICAgIEJMT0NLX1NJR05fRklMRQorICAgICkKIAogICBkZWYgc3RhcnQoc2VsZik6CiAgICAgIiIiV3JpdGVzIHRoZSBwaWRmaWxlIGFuZCBzdGFydHMgdGhlIGRhZW1vbiBwcm9jZXMuIiIiCi0gICAgdHJ5OgotICAgICAgc2VsZi5fc3RvcF9hbnlfZXhpc3RpbmdfaW5zdGFuY2UoKQotICAgICAgc2VsZi5fd3JpdGVfcGlkX3RvX3BpZGZpbGUoKQotICAgICAgc2VsZi5fc3RhcnRfZGFlbW9uX3Byb2Nlc3MoKQotICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJGYWlsZWQgdG8gc3RhcnQgZGFlbW9uIG1hbmFnZXIgd2l0aCBlcnJvciAlcyIsIGUpCisgICAgaWYgbm90IHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICAgICAgImVkaXRfbW9uaXRvciIsCisgICAgICAgIHNlbGYudXNlcl9uYW1lLAorICAgICAgICAiRU5BQkxFX0FORFJPSURfRURJVF9NT05JVE9SIiwKKyAgICAgICAgMTAwLAorICAgICk6CisgICAgICBsb2dnaW5nLndhcm5pbmcoIkVkaXQgbW9uaXRvciBpcyBkaXNhYmxlZCwgZXhpdGluZy4uLiIpCisgICAgICByZXR1cm4KKworICAgIGlmIHNlbGYuYmxvY2tfc2lnbi5leGlzdHMoKToKKyAgICAgIGxvZ2dpbmcud2FybmluZygiQmxvY2sgc2lnbiBmb3VuZCwgZXhpdGluZy4uLiIpCisgICAgICByZXR1cm4KKworICAgIGlmIHNlbGYuYmluYXJ5X3BhdGguc3RhcnRzd2l0aCgiL2dvb2dsZS9jb2cvIik6CisgICAgICBsb2dnaW5nLndhcm5pbmcoIkVkaXQgbW9uaXRvciBmb3IgY29nIGlzIG5vdCBzdXBwb3J0ZWQsIGV4aXRpbmcuLi4iKQorICAgICAgcmV0dXJuCisKKyAgICBzZXR1cF9sb2NrX2ZpbGUgPSBwYXRobGliLlBhdGgodGVtcGZpbGUuZ2V0dGVtcGRpcigpKS5qb2lucGF0aCgKKyAgICAgICAgc2VsZi5waWRfZmlsZV9wYXRoLm5hbWUgKyAiLnNldHVwIgorICAgICkKKyAgICBsb2dnaW5nLmluZm8oInNldHVwIGxvY2sgZmlsZTogJXMiLCBzZXR1cF9sb2NrX2ZpbGUpCisgICAgd2l0aCBvcGVuKHNldHVwX2xvY2tfZmlsZSwgInciKSBhcyBmOgorICAgICAgdHJ5OgorICAgICAgICAjIEFjcXVpcmUgYW4gZXhjbHVzaXZlIGxvY2sKKyAgICAgICAgZmNudGwuZmxvY2soZiwgZmNudGwuTE9DS19FWCB8IGZjbnRsLkxPQ0tfTkIpCisgICAgICAgIHNlbGYuX3N0b3BfYW55X2V4aXN0aW5nX2luc3RhbmNlKCkKKyAgICAgICAgc2VsZi5fd3JpdGVfcGlkX3RvX3BpZGZpbGUoKQorICAgICAgICBzZWxmLl9zdGFydF9kYWVtb25fcHJvY2VzcygpCisgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGlmICgKKyAgICAgICAgICAgIGlzaW5zdGFuY2UoZSwgSU9FcnJvcikgYW5kIGUuZXJybm8gPT0gZXJybm8uRUFHQUlOCisgICAgICAgICk6ICAjIEZhaWxlZCB0byBhY3F1aXJlIHRoZSBmaWxlIGxvY2suCisgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJBbm90aGVyIGVkaXQgbW9uaXRvciBpcyBzdGFydGluZywgZXhpdGlubmcuLi4iKQorICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJGYWlsZWQgdG8gc3RhcnQgZGFlbW9uIG1hbmFnZXIgd2l0aCBlcnJvciAlcyIsIGUpCisgICAgICAgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dCgKKyAgICAgICAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19TVEFSVF9FRElUX01PTklUT1IKKyAgICAgICAgICApCisgICAgICAgICAgcmFpc2UgZQorICAgICAgZmluYWxseToKKyAgICAgICAgIyBSZWxlYXNlIHRoZSBsb2NrCisgICAgICAgIGZjbnRsLmZsb2NrKGYsIGZjbnRsLkxPQ0tfVU4pCisKKyAgZGVmIG1vbml0b3JfZGFlbW9uKAorICAgICAgc2VsZiwKKyAgICAgIGludGVydmFsOiBpbnQgPSBERUZBVUxUX01PTklUT1JfSU5URVJWQUxfU0VDT05EUywKKyAgICAgIG1lbW9yeV90aHJlc2hvbGQ6IGZsb2F0ID0gREVGQVVMVF9NRU1PUllfVVNBR0VfVEhSRVNIT0xELAorICAgICAgY3B1X3RocmVzaG9sZDogZmxvYXQgPSBERUZBVUxUX0NQVV9VU0FHRV9USFJFU0hPTEQsCisgICAgICByZWJvb3RfdGltZW91dDogaW50ID0gREVGQVVMVF9SRUJPT1RfVElNRU9VVF9TRUNPTkRTLAorICApOgorICAgICIiIk1vbml0cyB0aGUgZGFlbW9uIHByb2Nlc3Mgc3RhdHVzLgorCisgICAgUGVyaW9kaWNhbGx5IGNoZWNrIHRoZSBDUFUvTWVtb3J5IHVzYWdlIG9mIHRoZSBkYWVtb24gcHJvY2VzcyBhcyBsb25nIGFzIHRoZQorICAgIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZyBhbmQga2lsbCB0aGUgcHJvY2VzcyBpZiB0aGUgcmVzb3VyY2UgdXNhZ2UgaXMgYWJvdmUKKyAgICBnaXZlbiB0aHJlc2hvbGRzLgorICAgICIiIgorICAgIGlmIG5vdCBzZWxmLmRhZW1vbl9wcm9jZXNzOgorICAgICAgcmV0dXJuCisKKyAgICBsb2dnaW5nLmluZm8oInN0YXJ0IG1vbml0b3JpbmcgZGFlbW9uIHByb2Nlc3MgJWQuIiwgc2VsZi5kYWVtb25fcHJvY2Vzcy5waWQpCisgICAgcmVib290X3RpbWUgPSB0aW1lLnRpbWUoKSArIHJlYm9vdF90aW1lb3V0CisgICAgd2hpbGUgc2VsZi5kYWVtb25fcHJvY2Vzcy5pc19hbGl2ZSgpOgorICAgICAgaWYgdGltZS50aW1lKCkgPiByZWJvb3RfdGltZToKKyAgICAgICAgc2VsZi5yZWJvb3QoKQorICAgICAgdHJ5OgorICAgICAgICBtZW1vcnlfdXNhZ2UgPSBzZWxmLl9nZXRfcHJvY2Vzc19tZW1vcnlfcGVyY2VudChzZWxmLmRhZW1vbl9wcm9jZXNzLnBpZCkKKyAgICAgICAgc2VsZi5tYXhfbWVtb3J5X3VzYWdlID0gbWF4KHNlbGYubWF4X21lbW9yeV91c2FnZSwgbWVtb3J5X3VzYWdlKQorCisgICAgICAgIGNwdV91c2FnZSA9IHNlbGYuX2dldF9wcm9jZXNzX2NwdV9wZXJjZW50KHNlbGYuZGFlbW9uX3Byb2Nlc3MucGlkKQorICAgICAgICBzZWxmLm1heF9jcHVfdXNhZ2UgPSBtYXgoc2VsZi5tYXhfY3B1X3VzYWdlLCBjcHVfdXNhZ2UpCisKKyAgICAgICAgdGltZS5zbGVlcChpbnRlcnZhbCkKKyAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgIyBMb2dnaW5nIHRoZSBlcnJvciBhbmQgY29udGludWUuCisgICAgICAgIGxvZ2dpbmcud2FybmluZygiRmFpbGVkIHRvIG1vbml0b3IgZGFlbW9uIHByb2Nlc3Mgd2l0aCBlcnJvcjogJXMiLCBlKQorCisgICAgICBpZiBzZWxmLm1heF9tZW1vcnlfdXNhZ2UgPj0gbWVtb3J5X3RocmVzaG9sZDoKKyAgICAgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dCgKKyAgICAgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5LSUxMRURfRFVFX1RPX0VYQ0VFREVEX01FTU9SWV9VU0FHRQorICAgICAgICApCisgICAgICAgIGxvZ2dpbmcuZXJyb3IoCisgICAgICAgICAgICAiRGFlbW9uIHByb2Nlc3MgaXMgY29uc3VtaW5nIHRvbyBtdWNoIG1lbW9yeSwgcmVib290aW5nLi4uIgorICAgICAgICApCisgICAgICAgIHNlbGYucmVib290KCkKKworICAgICAgaWYgc2VsZi5tYXhfY3B1X3VzYWdlID49IGNwdV90aHJlc2hvbGQ6CisgICAgICAgIHNlbGYuX3NlbmRfZXJyb3JfZXZlbnRfdG9fY2xlYXJjdXQoCisgICAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuS0lMTEVEX0RVRV9UT19FWENFRURFRF9DUFVfVVNBR0UKKyAgICAgICAgKQorICAgICAgICBsb2dnaW5nLmVycm9yKCJEYWVtb24gcHJvY2VzcyBpcyBjb25zdW1pbmcgdG9vIG11Y2ggY3B1LCBraWxsaW5nLi4uIikKKyAgICAgICAgc2VsZi5fdGVybWluYXRlX3Byb2Nlc3Moc2VsZi5kYWVtb25fcHJvY2Vzcy5waWQpCisKKyAgICBsb2dnaW5nLmluZm8oCisgICAgICAgICJEYWVtb24gcHJvY2VzcyAlZCB0ZXJtaW5hdGVkLiBNYXggbWVtb3J5IHVzYWdlOiAlZiwgTWF4IGNwdSIKKyAgICAgICAgIiB1c2FnZTogJWYuIiwKKyAgICAgICAgc2VsZi5kYWVtb25fcHJvY2Vzcy5waWQsCisgICAgICAgIHNlbGYubWF4X21lbW9yeV91c2FnZSwKKyAgICAgICAgc2VsZi5tYXhfY3B1X3VzYWdlLAorICAgICkKIAogICBkZWYgc3RvcChzZWxmKToKICAgICAiIiJTdG9wcyB0aGUgZGFlbW9uIHByb2Nlc3MgYW5kIHJlbW92ZXMgdGhlIHBpZGZpbGUuIiIiCiAKLSAgICBsb2dnaW5nLmRlYnVnKCJpbiBkYWVtb24gbWFuYWdlciBjbGVhbnVwLiIpCisgICAgbG9nZ2luZy5pbmZvKCJpbiBkYWVtb24gbWFuYWdlciBjbGVhbnVwLiIpCiAgICAgdHJ5OgotICAgICAgaWYgc2VsZi5kYWVtb25fcHJvY2VzcyBhbmQgc2VsZi5kYWVtb25fcHJvY2Vzcy5pc19hbGl2ZSgpOgotICAgICAgICBzZWxmLl90ZXJtaW5hdGVfcHJvY2VzcyhzZWxmLmRhZW1vbl9wcm9jZXNzLnBpZCkKLSAgICAgIHNlbGYuX3JlbW92ZV9waWRmaWxlKCkKKyAgICAgIGlmIHNlbGYuZGFlbW9uX3Byb2Nlc3M6CisgICAgICAgICMgVGhlIGRhZW1vbiBwcm9jZXNzIG1pZ2h0IGFscmVhZHkgaW4gdGVybWluYXRpb24gcHJvY2VzcywKKyAgICAgICAgIyB3YWl0IHNvbWUgdGltZSBiZWZvcmUga2lsbCBpdCBleHBsaWNpdGx5LgorICAgICAgICBzZWxmLl93YWl0X2Zvcl9wcm9jZXNzX3Rlcm1pbmF0ZShzZWxmLmRhZW1vbl9wcm9jZXNzLnBpZCwgMSkKKyAgICAgICAgaWYgc2VsZi5kYWVtb25fcHJvY2Vzcy5pc19hbGl2ZSgpOgorICAgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZV9wcm9jZXNzKHNlbGYuZGFlbW9uX3Byb2Nlc3MucGlkKQorICAgICAgc2VsZi5fcmVtb3ZlX3BpZGZpbGUoc2VsZi5waWQpCisgICAgICBsb2dnaW5nLmluZm8oIlN1Y2Nlc3NmdWxseSBzdG9wcGVkIGRhZW1vbiBtYW5hZ2VyLiIpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgbG9nZ2luZy5leGNlcHRpb24oIkZhaWxlZCB0byBzdG9wIGRhZW1vbiBtYW5hZ2VyIHdpdGggZXJyb3IgJXMiLCBlKQorICAgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dCgKKyAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUT1BfRURJVF9NT05JVE9SCisgICAgICApCisgICAgICBzeXMuZXhpdCgxKQorICAgIGZpbmFsbHk6CisgICAgICBzZWxmLmNjbGllbnQuZmx1c2hfZXZlbnRzKCkKKworICBkZWYgcmVib290KHNlbGYpOgorICAgICIiIlJlYm9vdHMgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKworICAgIFN0b3BzIHRoZSBjdXJyZW50IGRhZW1vbiBtYW5hZ2VyIGFuZCByZWJvb3RzIHRoZSBlbnRpcmUgcHJvY2VzcyBiYXNlZCBvbgorICAgIHRoZSBiaW5hcnkgZmlsZS4gRXhpdHMgZGlyZWN0bHkgSWYgdGhlIGJpbmFyeSBmaWxlIG5vIGxvbmdlciBleGlzdHMuCisgICAgIiIiCisgICAgbG9nZ2luZy5pbmZvKCJSZWJvb3RpbmcgcHJvY2VzcyBiYXNlZCBvbiBiaW5hcnkgJXMuIiwgc2VsZi5iaW5hcnlfcGF0aCkKKworICAgICMgU3RvcCB0aGUgY3VycmVudCBkYWVtb24gbWFuYWdlciBmaXJzdC4KKyAgICBzZWxmLnN0b3AoKQorCisgICAgIyBJZiB0aGUgYmluYXJ5IG5vIGxvbmdlciBleGlzdHMsIGV4aXQgZGlyZWN0bHkuCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuYmluYXJ5X3BhdGgpOgorICAgICAgbG9nZ2luZy5pbmZvKCJiaW5hcnkgJXMgbm8gbG9uZ2VyIGV4aXN0cywgZXhpdGluZy4iLCBzZWxmLmJpbmFyeV9wYXRoKQorICAgICAgc3lzLmV4aXQoMCkKKworICAgIHRyeToKKyAgICAgIG9zLmV4ZWN2KHNlbGYuYmluYXJ5X3BhdGgsIHN5cy5hcmd2KQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYm9vdCBwcm9jZXNzIHdpdGggZXJyb3I6ICVzLiIsIGUpCisgICAgICBzZWxmLl9zZW5kX2Vycm9yX2V2ZW50X3RvX2NsZWFyY3V0KAorICAgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5GQUlMRURfVE9fUkVCT09UX0VESVRfTU9OSVRPUgorICAgICAgKQorICAgICAgc3lzLmV4aXQoMSkgICMgSW5kaWNhdGUgYW4gZXJyb3Igb2NjdXJyZWQKKworICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAiIiJXaXBlcyBvdXQgYWxsIGVkaXQgbW9uaXRvciBpbnN0YW5jZXMgaW4gdGhlIHN5c3RlbS4KKworICAgIFN0b3BzIGFsbCB0aGUgZXhpc3RpbmcgZWRpdCBtb25pdG9yIGluc3RhbmNlcyBhbmQgcGxhY2UgYSBibG9jayBzaWduCisgICAgdG8gcHJldmVudCBhbnkgZWRpdCBtb25pdG9yIHByb2Nlc3MgdG8gc3RhcnQuIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZAorICAgIGluIGVtZXJnZW5jeSBjYXNlIHdoZW4gdGhlcmUncyBzb21ldGhpbmcgZ29lcyB3cm9uZyB3aXRoIHRoZSBlZGl0IG1vbml0b3IKKyAgICB0aGF0IHJlcXVpcmVzIGltbWVkaWF0ZSBjbGVhbnVwIHRvIHByZXZlbnQgZGFtYW5nZXIgdG8gdGhlIHN5c3RlbS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJTdGFydCBjbGVhbmluZyB1cCBhbGwgZXhpc3RpbmcgaW5zdGFuY2VzLiIpCisgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dChlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRk9SQ0VfQ0xFQU5VUCkKKworICAgIHRyeToKKyAgICAgICMgRmlyc3QgcGxhY2VzIGEgYmxvY2sgc2lnbiB0byBwcmV2ZW50IGFueSBlZGl0IG1vbml0b3IgcHJvY2VzcyB0byBzdGFydC4KKyAgICAgIHNlbGYuYmxvY2tfc2lnbi50b3VjaCgpCisgICAgZXhjZXB0IChGaWxlTm90Rm91bmRFcnJvciwgUGVybWlzc2lvbkVycm9yLCBPU0Vycm9yKToKKyAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJGYWlsZWQgdG8gcGxhY2UgdGhlIGJsb2NrIHNpZ24iKQorCisgICAgIyBGaW5kcyBhbmQga2lsbHMgYWxsIHRoZSBleGlzdGluZyBpbnN0YW5jZXMgb2YgZWRpdCBtb25pdG9yLgorICAgIGV4aXN0aW5nX2luc3RhbmNlc19waWRzID0gc2VsZi5fZmluZF9hbGxfaW5zdGFuY2VzX3BpZHMoKQorICAgIGZvciBwaWQgaW4gZXhpc3RpbmdfaW5zdGFuY2VzX3BpZHM6CisgICAgICBsb2dnaW5nLmluZm8oCisgICAgICAgICAgIkZvdW5kIGV4aXN0aW5nIGVkaXQgbW9uaXRvciBpbnN0YW5jZSB3aXRoIHBpZCAlZCwga2lsbGluZy4uLiIsIHBpZAorICAgICAgKQorICAgICAgdHJ5OgorICAgICAgICBzZWxmLl90ZXJtaW5hdGVfcHJvY2VzcyhwaWQpCisgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigiRmFpbGVkIHRvIHRlcm1pbmF0ZSBwcm9jZXNzICVkIiwgcGlkKQogCiAgIGRlZiBfc3RvcF9hbnlfZXhpc3RpbmdfaW5zdGFuY2Uoc2VsZik6CiAgICAgaWYgbm90IHNlbGYucGlkX2ZpbGVfcGF0aC5leGlzdHMoKToKQEAgLTgyLDExICsyNzEsMTUgQEAKICAgICBpZiBleF9waWQ6CiAgICAgICBsb2dnaW5nLmluZm8oIkZvdW5kIGFub3RoZXIgaW5zdGFuY2Ugd2l0aCBwaWQgJWQuIiwgZXhfcGlkKQogICAgICAgc2VsZi5fdGVybWluYXRlX3Byb2Nlc3MoZXhfcGlkKQotICAgICAgc2VsZi5fcmVtb3ZlX3BpZGZpbGUoKQorICAgICAgc2VsZi5fcmVtb3ZlX3BpZGZpbGUoZXhfcGlkKQogCi0gIGRlZiBfcmVhZF9waWRfZnJvbV9waWRmaWxlKHNlbGYpOgotICAgIHdpdGggb3BlbihzZWxmLnBpZF9maWxlX3BhdGgsICJyIikgYXMgZjoKLSAgICAgIHJldHVybiBpbnQoZi5yZWFkKCkuc3RyaXAoKSkKKyAgZGVmIF9yZWFkX3BpZF9mcm9tX3BpZGZpbGUoc2VsZikgLT4gaW50IHwgTm9uZToKKyAgICB0cnk6CisgICAgICB3aXRoIG9wZW4oc2VsZi5waWRfZmlsZV9wYXRoLCAiciIpIGFzIGY6CisgICAgICAgIHJldHVybiBpbnQoZi5yZWFkKCkuc3RyaXAoKSkKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3IgYXMgZToKKyAgICAgIGxvZ2dpbmcud2FybmluZygicGlkZmlsZSAlcyBkb2VzIG5vdCBleGlzdC4iLCBzZWxmLnBpZF9maWxlX3BhdGgpCisgICAgICByZXR1cm4gTm9uZQogCiAgIGRlZiBfd3JpdGVfcGlkX3RvX3BpZGZpbGUoc2VsZik6CiAgICAgIiIiQ3JlYXRlcyBhIHBpZGZpbGUgYW5kIHdyaXRlcyB0aGUgY3VycmVudCBwaWQgdG8gdGhlIGZpbGUuCkBAIC0xMTAsNiArMzAzLDcgQEAKICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MoCiAgICAgICAgIHRhcmdldD1zZWxmLmRhZW1vbl90YXJnZXQsIGFyZ3M9c2VsZi5kYWVtb25fYXJncwogICAgICkKKyAgICBwLmRhZW1vbiA9IFRydWUKICAgICBwLnN0YXJ0KCkKIAogICAgIGxvZ2dpbmcuaW5mbygiU3RhcnQgc3VicHJvY2VzcyB3aXRoIFBJRCAlZCIsIHAucGlkKQpAQCAtMTYxLDcgKzM1NSwyMyBAQAogICAgICAgKQogICAgICAgcmV0dXJuIFRydWUKIAotICBkZWYgX3JlbW92ZV9waWRmaWxlKHNlbGYpOgorICBkZWYgX3JlbW92ZV9waWRmaWxlKHNlbGYsIGV4cGVjdGVkX3BpZDogaW50KToKKyAgICByZWNvcmRlZF9waWQgPSBzZWxmLl9yZWFkX3BpZF9mcm9tX3BpZGZpbGUoKQorCisgICAgaWYgcmVjb3JkZWRfcGlkIGlzIE5vbmU6CisgICAgICBsb2dnaW5nLmluZm8oInBpZCBmaWxlICVzIGFscmVhZHkgcmVtb3ZlZC4iLCBzZWxmLnBpZF9maWxlX3BhdGgpCisgICAgICByZXR1cm4KKworICAgIGlmIHJlY29yZGVkX3BpZCAhPSBleHBlY3RlZF9waWQ6CisgICAgICBsb2dnaW5nLndhcm5pbmcoCisgICAgICAgICAgInBpZCBmaWxlIGNvbnRhaW5zIHBpZCBmcm9tIGEgZGlmZmVyZW50IHByb2Nlc3MsIGV4cGVjdGVkIHBpZDogJWQsIgorICAgICAgICAgICIgYWN0dWFsIHBpZDogJWQuIiwKKyAgICAgICAgICBleHBlY3RlZF9waWQsCisgICAgICAgICAgcmVjb3JkZWRfcGlkLAorICAgICAgKQorICAgICAgcmV0dXJuCisKKyAgICBsb2dnaW5nLmRlYnVnKCJyZW1vdmluZyBwaWRmaWxlIHdyaXR0ZW4gYnkgcHJvY2VzcyAlcyIsIGV4cGVjdGVkX3BpZCkKICAgICB0cnk6CiAgICAgICBvcy5yZW1vdmUoc2VsZi5waWRfZmlsZV9wYXRoKQogICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKQEAgLTE4MCwzICszOTAsNzQgQEAKICAgICBsb2dnaW5nLmluZm8oInBpZF9maWxlX3BhdGg6ICVzIiwgcGlkX2ZpbGVfcGF0aCkKIAogICAgIHJldHVybiBwaWRfZmlsZV9wYXRoCisKKyAgZGVmIF9nZXRfcHJvY2Vzc19tZW1vcnlfcGVyY2VudChzZWxmLCBwaWQ6IGludCkgLT4gZmxvYXQ6CisgICAgd2l0aCBvcGVuKGYiL3Byb2Mve3BpZH0vc3RhdCIsICJyIikgYXMgZjoKKyAgICAgIHN0YXRfZGF0YSA9IGYucmVhZGxpbmUoKS5zcGxpdCgpCisgICAgICAjIFJTUyBpcyB0aGUgMjR0aCBmaWVsZCBpbiAvcHJvYy9bcGlkXS9zdGF0CisgICAgICByc3NfcGFnZXMgPSBpbnQoc3RhdF9kYXRhWzIzXSkKKyAgICAgIHByb2Nlc3NfbWVtb3J5ID0gcnNzX3BhZ2VzICogNCAqIDEwMjQgICMgQ29udmVydCB0byBieXRlcworCisgICAgcmV0dXJuICgKKyAgICAgICAgcHJvY2Vzc19tZW1vcnkgLyBzZWxmLnRvdGFsX21lbW9yeV9zaXplCisgICAgICAgIGlmIHNlbGYudG90YWxfbWVtb3J5X3NpemUKKyAgICAgICAgZWxzZSAwLjAKKyAgICApCisKKyAgZGVmIF9nZXRfcHJvY2Vzc19jcHVfcGVyY2VudChzZWxmLCBwaWQ6IGludCwgaW50ZXJ2YWw6IGludCA9IDEpIC0+IGZsb2F0OgorICAgIHRvdGFsX3N0YXJ0X3RpbWUgPSBzZWxmLl9nZXRfdG90YWxfY3B1X3RpbWUocGlkKQorICAgIHdpdGggb3BlbigiL3Byb2MvdXB0aW1lIiwgInIiKSBhcyBmOgorICAgICAgdXB0aW1lX3N0YXJ0ID0gZmxvYXQoZi5yZWFkbGluZSgpLnNwbGl0KClbMF0pCisKKyAgICB0aW1lLnNsZWVwKGludGVydmFsKQorCisgICAgdG90YWxfZW5kX3RpbWUgPSBzZWxmLl9nZXRfdG90YWxfY3B1X3RpbWUocGlkKQorICAgIHdpdGggb3BlbigiL3Byb2MvdXB0aW1lIiwgInIiKSBhcyBmOgorICAgICAgdXB0aW1lX2VuZCA9IGZsb2F0KGYucmVhZGxpbmUoKS5zcGxpdCgpWzBdKQorCisgICAgcmV0dXJuICgKKyAgICAgICAgKHRvdGFsX2VuZF90aW1lIC0gdG90YWxfc3RhcnRfdGltZSkgLyAodXB0aW1lX2VuZCAtIHVwdGltZV9zdGFydCkgKiAxMDAKKyAgICApCisKKyAgZGVmIF9nZXRfdG90YWxfY3B1X3RpbWUoc2VsZiwgcGlkOiBpbnQpIC0+IGZsb2F0OgorICAgIHdpdGggb3BlbihmIi9wcm9jL3tzdHIocGlkKX0vc3RhdCIsICJyIikgYXMgZjoKKyAgICAgIHN0YXRzID0gZi5yZWFkbGluZSgpLnNwbGl0KCkKKyAgICAgICMgdXRpbWUgaXMgdGhlIDE0dGggZmllbGQgaW4gL3Byb2MvW3BpZF0vc3RhdCBtZWFzdXJlZCBpbiBjbG9jayB0aWNrcy4KKyAgICAgIHV0aW1lID0gaW50KHN0YXRzWzEzXSkKKyAgICAgICMgc3RpbWUgaXMgdGhlIDE1dGggZmllbGQgaW4gL3Byb2MvW3BpZF0vc3RhdCBtZWFzdXJlZCBpbiBjbG9jayB0aWNrcy4KKyAgICAgIHN0aW1lID0gaW50KHN0YXRzWzE0XSkKKyAgICAgIHJldHVybiAodXRpbWUgKyBzdGltZSkgLyBvcy5zeXNjb25mKG9zLnN5c2NvbmZfbmFtZXNbIlNDX0NMS19UQ0siXSkKKworICBkZWYgX2ZpbmRfYWxsX2luc3RhbmNlc19waWRzKHNlbGYpIC0+IGxpc3RbaW50XToKKyAgICBwaWRzID0gW10KKworICAgIHRyeToKKyAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsicHMiLCAiLWVmIiwgIi0tbm8taGVhZGVycyJdLCB0ZXh0PVRydWUpCisgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoKQorICAgICAgICBwcm9jZXNzX3BhdGggPSBwYXJ0c1s3XQorICAgICAgICBpZiBwYXRobGliLlBhdGgocHJvY2Vzc19wYXRoKS5uYW1lID09ICJlZGl0X21vbml0b3IiOgorICAgICAgICAgIHBpZCA9IGludChwYXJ0c1sxXSkKKyAgICAgICAgICBpZiBwaWQgIT0gc2VsZi5waWQ6ICAjIGV4Y2x1ZGUgdGhlIGN1cnJlbnQgcHJvY2VzcworICAgICAgICAgICAgcGlkcy5hcHBlbmQocGlkKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigKKyAgICAgICAgICAiRmFpbGVkIHRvIGdldCBwaWRzIG9mIGV4aXN0aW5nIGVkaXQgbW9uaXRvcnMgZnJvbSBwcyBjb21tYW5kLiIKKyAgICAgICkKKworICAgIHJldHVybiBwaWRzCisKKyAgZGVmIF9zZW5kX2Vycm9yX2V2ZW50X3RvX2NsZWFyY3V0KHNlbGYsIGVycm9yX3R5cGUpOgorICAgIGVkaXRfbW9uaXRvcl9lcnJvcl9ldmVudF9wcm90byA9IGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudCgKKyAgICAgICAgdXNlcl9uYW1lPXNlbGYudXNlcl9uYW1lLAorICAgICAgICBob3N0X25hbWU9c2VsZi5ob3N0X25hbWUsCisgICAgICAgIHNvdXJjZV9yb290PXNlbGYuc291cmNlX3Jvb3QsCisgICAgKQorICAgIGVkaXRfbW9uaXRvcl9lcnJvcl9ldmVudF9wcm90by5lZGl0X21vbml0b3JfZXJyb3JfZXZlbnQuQ29weUZyb20oCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5FZGl0TW9uaXRvckVycm9yRXZlbnQoZXJyb3JfdHlwZT1lcnJvcl90eXBlKQorICAgICkKKyAgICBsb2dfZXZlbnQgPSBjbGllbnRhbmFseXRpY3NfcGIyLkxvZ0V2ZW50KAorICAgICAgICBldmVudF90aW1lX21zPWludCh0aW1lLnRpbWUoKSAqIDEwMDApLAorICAgICAgICBzb3VyY2VfZXh0ZW5zaW9uPWVkaXRfbW9uaXRvcl9lcnJvcl9ldmVudF9wcm90by5TZXJpYWxpemVUb1N0cmluZygpLAorICAgICkKKyAgICBzZWxmLmNjbGllbnQubG9nKGxvZ19ldmVudCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlcl90ZXN0LnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyX3Rlc3QucHkKaW5kZXggMjE0YjAzOC4uYmUyODk2NSAxMDA2NDQKLS0tIGEvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyX3Rlc3QucHkKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyX3Rlc3QucHkKQEAgLTE0LDYgKzE0LDcgQEAKIAogIiIiVW5pdHRlc3RzIGZvciBEYWVtb25NYW5hZ2VyLiIiIgogCitpbXBvcnQgZmNudGwKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBpbXBvcnQgb3MKQEAgLTI2LDYgKzI3LDggQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogZnJvbSBlZGl0X21vbml0b3IgaW1wb3J0IGRhZW1vbl9tYW5hZ2VyCitmcm9tIHByb3RvIGltcG9ydCBlZGl0X2V2ZW50X3BiMgorCiAKIFRFU1RfQklOQVJZX0ZJTEUgPSAnL3BhdGgvdG8vdGVzdF9iaW5hcnknCiBURVNUX1BJRF9GSUxFX1BBVEggPSAoCkBAIC00Myw2ICs0NiwyNSBAQAogICAgIHRpbWUuc2xlZXAoMSkKIAogCitkZWYgbWVtb3J5X2NvbnN1bWVfZGFlbW9uX3RhcmdldChzaXplX21iKToKKyAgdHJ5OgorICAgIHNpemVfYnl0ZXMgPSBzaXplX21iICogMTAyNCAqIDEwMjQKKyAgICBkdW1teV9kYXRhID0gYnl0ZWFycmF5KHNpemVfYnl0ZXMpCisgICAgdGltZS5zbGVlcCgxMCkKKyAgZXhjZXB0IE1lbW9yeUVycm9yOgorICAgIHByaW50KGYnUHJvY2VzcyBmYWlsZWQgdG8gYWxsb2NhdGUge3NpemVfbWJ9IE1CIG9mIG1lbW9yeS4nKQorCisKK2RlZiBjcHVfY29uc3VtZV9kYWVtb25fdGFyZ2V0KHRhcmdldF91c2FnZV9wZXJjZW50KToKKyAgd2hpbGUgVHJ1ZToKKyAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICB3aGlsZSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUgPCB0YXJnZXRfdXNhZ2VfcGVyY2VudCAvIDEwMDoKKyAgICAgIHBhc3MgICMgQnVzeSBsb29wIHRvIGNvbnN1bWUgQ1BVCisKKyAgICAjIFNsZWVwIHRvIHJlZHVjZSBDUFUgdXNhZ2UKKyAgICB0aW1lLnNsZWVwKDEgLSB0YXJnZXRfdXNhZ2VfcGVyY2VudCAvIDEwMCkKKworCiBjbGFzcyBEYWVtb25NYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgQGNsYXNzbWV0aG9kCkBAIC02MCw2ICs4MiwxMCBAQAogICAgICMgU2V0cyB0aGUgdGVtcGRpciB1bmRlciB0aGUgd29ya2luZyBkaXIgc28gYW55IHRlbXAgZmlsZXMgY3JlYXRlZCBkdXJpbmcKICAgICAjIHRlc3RzIHdpbGwgYmUgY2xlYW5lZC4KICAgICB0ZW1wZmlsZS50ZW1wZGlyID0gc2VsZi53b3JraW5nX2Rpci5uYW1lCisgICAgc2VsZi5wYXRjaCA9IG1vY2sucGF0Y2guZGljdCgKKyAgICAgICAgb3MuZW52aXJvbiwgeydFTkFCTEVfQU5EUk9JRF9FRElUX01PTklUT1InOiAndHJ1ZSd9CisgICAgKQorICAgIHNlbGYucGF0Y2guc3RhcnQoKQogCiAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAjIENsZWFucyB1cCBhbnkgY2hpbGQgcHJvY2Vzc2VzIGxlZnQgYnkgdGhlIHRlc3RzLgpAQCAtNjcsMjYgKzkzLDE4IEBACiAgICAgc2VsZi53b3JraW5nX2Rpci5jbGVhbnVwKCkKICAgICAjIFJlc3RvcmVzIHRlbXBkaXIuCiAgICAgdGVtcGZpbGUudGVtcGRpciA9IHNlbGYub3JpZ2luYWxfdGVtcGRpcgorICAgIHNlbGYucGF0Y2guc3RvcCgpCiAgICAgc3VwZXIoKS50ZWFyRG93bigpCiAKICAgZGVmIHRlc3Rfc3RhcnRfc3VjY2Vzc193aXRoX25vX2V4aXN0aW5nX2luc3RhbmNlKHNlbGYpOgogICAgIHNlbGYuYXNzZXJ0X3J1bl9zaW1wbGVfZGFlbW9uX3N1Y2Nlc3MoKQogCiAgIGRlZiB0ZXN0X3N0YXJ0X3N1Y2Nlc3Nfd2l0aF9leGlzdGluZ19pbnN0YW5jZV9ydW5uaW5nKHNlbGYpOgotICAgICMgQ3JlYXRlIGEgbG9uZyBydW5uaW5nIHN1YnByb2Nlc3MKLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24pCi0gICAgcC5zdGFydCgpCi0KLSAgICAjIENyZWF0ZSBhIHBpZGZpbGUgd2l0aCB0aGUgc3VicHJvY2VzcyBwaWQKLSAgICBwaWRfZmlsZV9wYXRoX2RpciA9IHBhdGhsaWIuUGF0aChzZWxmLndvcmtpbmdfZGlyLm5hbWUpLmpvaW5wYXRoKAotICAgICAgICAnZWRpdF9tb25pdG9yJwotICAgICkKLSAgICBwaWRfZmlsZV9wYXRoX2Rpci5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCi0gICAgd2l0aCBvcGVuKHBpZF9maWxlX3BhdGhfZGlyLmpvaW5wYXRoKFRFU1RfUElEX0ZJTEVfUEFUSCksICd3JykgYXMgZjoKLSAgICAgIGYud3JpdGUoc3RyKHAucGlkKSkKKyAgICAjIENyZWF0ZSBhIHJ1bm5pbmcgZGFlbW9uIHN1YnByb2Nlc3MKKyAgICBwID0gc2VsZi5fY3JlYXRlX2Zha2VfZGVhbW9uX3Byb2Nlc3MoKQogCiAgICAgc2VsZi5hc3NlcnRfcnVuX3NpbXBsZV9kYWVtb25fc3VjY2VzcygpCi0gICAgcC50ZXJtaW5hdGUoKQorICAgIHNlbGYuYXNzZXJ0X25vX3N1YnByb2Nlc3NfcnVubmluZygpCiAKICAgZGVmIHRlc3Rfc3RhcnRfc3VjY2Vzc193aXRoX2V4aXN0aW5nX2luc3RhbmNlX2FscmVhZHlfZGVhZChzZWxmKToKICAgICAjIENyZWF0ZSBhIHBpZGZpbGUgd2l0aCBwaWQgdGhhdCBkb2VzIG5vdCBleGlzdC4KQEAgLTEwMiw3ICsxMjAsNyBAQAogICBkZWYgdGVzdF9zdGFydF9zdWNjZXNzX3dpdGhfZXhpc3RpbmdfaW5zdGFuY2VfZnJvbV9kaWZmZXJlbnRfYmluYXJ5KHNlbGYpOgogICAgICMgRmlyc3Qgc3RhcnQgYW4gaW5zdGFuY2UgYmFzZWQgb24gInNvbWVfYmluYXJ5X3BhdGgiCiAgICAgZXhpc3RpbmdfZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAotICAgICAgICAic29tZV9iaW5hcnlfcGF0aCIsCisgICAgICAgICdzb21lX2JpbmFyeV9wYXRoJywKICAgICAgICAgZGFlbW9uX3RhcmdldD1sb25nX3J1bm5pbmdfZGFlbW9uLAogICAgICkKICAgICBleGlzdGluZ19kbS5zdGFydCgpCkBAIC0xMTAsNiArMTI4LDU2IEBACiAgICAgc2VsZi5hc3NlcnRfcnVuX3NpbXBsZV9kYWVtb25fc3VjY2VzcygpCiAgICAgZXhpc3RpbmdfZG0uc3RvcCgpCiAKKyAgZGVmIHRlc3Rfc3RhcnRfcmV0dXJuX2RpcmVjdGx5X2lmX2Jsb2NrX3NpZ25fZXhpc3RzKHNlbGYpOgorICAgICMgQ3JlYXRlcyB0aGUgYmxvY2sgc2lnbi4KKyAgICBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgKKyAgICAgICAgZGFlbW9uX21hbmFnZXIuQkxPQ0tfU0lHTl9GSUxFCisgICAgKS50b3VjaCgpCisKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSkKKyAgICBkbS5zdGFydCgpCisKKyAgICAjIFZlcmlmeSBubyBkYWVtb24gcHJvY2VzcyBpcyBzdGFydGVkLgorICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRtLmRhZW1vbl9wcm9jZXNzKQorCisgIEBtb2NrLnBhdGNoLmRpY3QoCisgICAgICBvcy5lbnZpcm9uLCB7J0VOQUJMRV9BTkRST0lEX0VESVRfTU9OSVRPUic6ICdmYWxzZSd9LCBjbGVhcj1UcnVlCisgICkKKyAgZGVmIHRlc3Rfc3RhcnRfcmV0dXJuX2RpcmVjdGx5X2lmX2Rpc2FibGVkKHNlbGYpOgorICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcihURVNUX0JJTkFSWV9GSUxFKQorICAgIGRtLnN0YXJ0KCkKKworICAgICMgVmVyaWZ5IG5vIGRhZW1vbiBwcm9jZXNzIGlzIHN0YXJ0ZWQuCisgICAgc2VsZi5hc3NlcnRJc05vbmUoZG0uZGFlbW9uX3Byb2Nlc3MpCisKKyAgZGVmIHRlc3Rfc3RhcnRfcmV0dXJuX2RpcmVjdGx5X2lmX2luX2NvZ19lbnYoc2VsZik6CisgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAorICAgICAgICAnL2dvb2dsZS9jb2cvY2xvdWQvdXNlci93b3Jrc3BhY2UvZWRpdF9tb25pdG9yJworICAgICkKKyAgICBkbS5zdGFydCgpCisKKyAgICAjIFZlcmlmeSBubyBkYWVtb24gcHJvY2VzcyBpcyBzdGFydGVkLgorICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRtLmRhZW1vbl9wcm9jZXNzKQorCisgIGRlZiB0ZXN0X3N0YXJ0X2ZhaWxlZF9vdGhlcl9pbnN0YW5jZV9pc19zdGFydGluZyhzZWxmKToKKyAgICBmID0gb3BlbigKKyAgICAgICAgcGF0aGxpYi5QYXRoKHNlbGYud29ya2luZ19kaXIubmFtZSkuam9pbnBhdGgoCisgICAgICAgICAgICBURVNUX1BJRF9GSUxFX1BBVEggKyAnLnNldHVwJworICAgICAgICApLAorICAgICAgICAndycsCisgICAgKQorICAgICMgQWNxdWlyZSBhbiBleGNsdXNpdmUgbG9jaworICAgIGZjbnRsLmZsb2NrKGYsIGZjbnRsLkxPQ0tfRVggfCBmY250bC5MT0NLX05CKQorCisgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKFRFU1RfQklOQVJZX0ZJTEUpCisgICAgZG0uc3RhcnQoKQorCisgICAgIyBSZWxlYXNlIHRoZSBsb2NrCisgICAgZmNudGwuZmxvY2soZiwgZmNudGwuTE9DS19VTikKKyAgICBmLmNsb3NlKCkKKyAgICAjIFZlcmlmeSBubyBkYWVtb24gcHJvY2VzcyBpcyBzdGFydGVkLgorICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRtLmRhZW1vbl9wcm9jZXNzKQorCiAgIEBtb2NrLnBhdGNoKCdvcy5raWxsJykKICAgZGVmIHRlc3Rfc3RhcnRfZmFpbGVkX3RvX2tpbGxfZXhpc3RpbmdfaW5zdGFuY2Uoc2VsZiwgbW9ja19raWxsKToKICAgICBtb2NrX2tpbGwuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdVbmtub3duIE9TRXJyb3InKQpAQCAtMTIwLDM0ICsxODgsMTA3IEBACiAgICAgd2l0aCBvcGVuKHBpZF9maWxlX3BhdGhfZGlyLmpvaW5wYXRoKFRFU1RfUElEX0ZJTEVfUEFUSCksICd3JykgYXMgZjoKICAgICAgIGYud3JpdGUoJzEyMzQ1NicpCiAKLSAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSkKLSAgICBkbS5zdGFydCgpCi0KLSAgICAjIFZlcmlmeSBubyBkYWVtb24gcHJvY2VzcyBpcyBzdGFydGVkLgotICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRtLmRhZW1vbl9wcm9jZXNzKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcihURVNUX0JJTkFSWV9GSUxFLCBjY2xpZW50PWZha2VfY2NsaWVudCkKKyAgICAgIGRtLnN0YXJ0KCkKKyAgICBzZWxmLl9hc3NlcnRfZXJyb3JfZXZlbnRfbG9nZ2VkKAorICAgICAgICBmYWtlX2NjbGllbnQsIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5GQUlMRURfVE9fU1RBUlRfRURJVF9NT05JVE9SCisgICAgKQogCiAgIGRlZiB0ZXN0X3N0YXJ0X2ZhaWxlZF90b193cml0ZV9waWRmaWxlKHNlbGYpOgogICAgIHBpZF9maWxlX3BhdGhfZGlyID0gcGF0aGxpYi5QYXRoKHNlbGYud29ya2luZ19kaXIubmFtZSkuam9pbnBhdGgoCiAgICAgICAgICdlZGl0X21vbml0b3InCiAgICAgKQogICAgIHBpZF9maWxlX3BhdGhfZGlyLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKKwogICAgICMgTWFrZXMgdGhlIGRpcmVjdG9yeSByZWFkLW9ubHkgc28gd3JpdGUgcGlkZmlsZSB3aWxsIGZhaWwuCiAgICAgb3MuY2htb2QocGlkX2ZpbGVfcGF0aF9kaXIsIDBvNTU1KQogCi0gICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKFRFU1RfQklOQVJZX0ZJTEUpCi0gICAgZG0uc3RhcnQoKQotCi0gICAgIyBWZXJpZmllcyBubyBkYWVtb24gcHJvY2VzcyBpcyBzdGFydGVkLgotICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRtLmRhZW1vbl9wcm9jZXNzKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IpOgorICAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKFRFU1RfQklOQVJZX0ZJTEUsIGNjbGllbnQ9ZmFrZV9jY2xpZW50KQorICAgICAgZG0uc3RhcnQoKQorICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCisgICAgICAgIGZha2VfY2NsaWVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19TVEFSVF9FRElUX01PTklUT1IKKyAgICApCiAKICAgZGVmIHRlc3Rfc3RhcnRfZmFpbGVkX3RvX3N0YXJ0X2RhZW1vbl9wcm9jZXNzKHNlbGYpOgorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAorICAgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCisgICAgICAgICAgZGFlbW9uX3RhcmdldD0nd3JvbmdfdGFyZ2V0JywKKyAgICAgICAgICBkYWVtb25fYXJncz0oMSksCisgICAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCisgICAgICApCisgICAgICBkbS5zdGFydCgpCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUQVJUX0VESVRfTU9OSVRPUgorICAgICkKKworICBAbW9jay5wYXRjaCgnb3MuZXhlY3YnKQorICBkZWYgdGVzdF9tb25pdG9yX3JlYm9vdF93aXRoX2hpZ2hfbWVtb3J5X3VzYWdlKHNlbGYsIG1vY2tfZXhlY3YpOgorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCisgICAgYmluYXJ5X2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoCisgICAgICAgIGRpcj1zZWxmLndvcmtpbmdfZGlyLm5hbWUsIGRlbGV0ZT1GYWxzZQorICAgICkKKwogICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKLSAgICAgICAgVEVTVF9CSU5BUllfRklMRSwgZGFlbW9uX3RhcmdldD0nd3JvbmdfdGFyZ2V0JywgZGFlbW9uX2FyZ3M9KDEpCisgICAgICAgIGJpbmFyeV9maWxlLm5hbWUsCisgICAgICAgIGRhZW1vbl90YXJnZXQ9bWVtb3J5X2NvbnN1bWVfZGFlbW9uX3RhcmdldCwKKyAgICAgICAgZGFlbW9uX2FyZ3M9KDIsKSwKKyAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCisgICAgKQorICAgICMgc2V0IHRoZSBmYWtlIHRvdGFsX21lbW9yeV9zaXplCisgICAgZG0udG90YWxfbWVtb3J5X3NpemUgPSAxMDAgKiAxMDI0ICogMTAyNAorICAgIGRtLnN0YXJ0KCkKKyAgICBkbS5tb25pdG9yX2RhZW1vbihpbnRlcnZhbD0xKQorCisgICAgc2VsZi5hc3NlcnRUcnVlKGRtLm1heF9tZW1vcnlfdXNhZ2UgPj0gMC4wMikKKyAgICBzZWxmLmFzc2VydF9ub19zdWJwcm9jZXNzX3J1bm5pbmcoKQorICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCisgICAgICAgIGZha2VfY2NsaWVudCwKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LktJTExFRF9EVUVfVE9fRVhDRUVERURfTUVNT1JZX1VTQUdFLAorICAgICkKKyAgICBtb2NrX2V4ZWN2LmFzc2VydF9jYWxsZWRfb25jZSgpCisKKyAgZGVmIHRlc3RfbW9uaXRvcl9kYWVtb25fc3VicHJvY2Vzc19raWxsZWRfaGlnaF9jcHVfdXNhZ2Uoc2VsZik6CisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KCkKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCisgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCisgICAgICAgIGRhZW1vbl90YXJnZXQ9Y3B1X2NvbnN1bWVfZGFlbW9uX3RhcmdldCwKKyAgICAgICAgZGFlbW9uX2FyZ3M9KDIwLCksCisgICAgICAgIGNjbGllbnQ9ZmFrZV9jY2xpZW50LAogICAgICkKICAgICBkbS5zdGFydCgpCisgICAgZG0ubW9uaXRvcl9kYWVtb24oaW50ZXJ2YWw9MSwgY3B1X3RocmVzaG9sZD0yMCkKIAotICAgICMgVmVyaWZpZXMgbm8gZGFlbW9uIHByb2Nlc3MgaXMgc3RhcnRlZC4KLSAgICBzZWxmLmFzc2VydElzTm9uZShkbS5kYWVtb25fcHJvY2VzcykKKyAgICBzZWxmLmFzc2VydFRydWUoZG0ubWF4X2NwdV91c2FnZSA+PSAyMCkKKyAgICBzZWxmLmFzc2VydF9ub19zdWJwcm9jZXNzX3J1bm5pbmcoKQorICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCisgICAgICAgIGZha2VfY2NsaWVudCwKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LktJTExFRF9EVUVfVE9fRVhDRUVERURfQ1BVX1VTQUdFLAorICAgICkKKworICBAbW9jay5wYXRjaCgnc3VicHJvY2Vzcy5jaGVja19vdXRwdXQnKQorICBkZWYgdGVzdF9tb25pdG9yX2RhZW1vbl9mYWlsZWRfZG9lc19ub3RfbWF0dGVyKHNlbGYsIG1vY2tfb3V0cHV0KToKKyAgICBtb2NrX291dHB1dC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoJ1Vua25vd24gT1NFcnJvcicpCisgICAgc2VsZi5hc3NlcnRfcnVuX3NpbXBsZV9kYWVtb25fc3VjY2VzcygpCisKKyAgQG1vY2sucGF0Y2goJ29zLmV4ZWN2JykKKyAgZGVmIHRlc3RfbW9uaXRvcl9kYWVtb25fcmVib290X3RyaWdnZXJlZChzZWxmLCBtb2NrX2V4ZWN2KToKKyAgICBiaW5hcnlfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgKKyAgICAgICAgZGlyPXNlbGYud29ya2luZ19kaXIubmFtZSwgZGVsZXRlPUZhbHNlCisgICAgKQorCisgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAorICAgICAgICBiaW5hcnlfZmlsZS5uYW1lLAorICAgICAgICBkYWVtb25fdGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24sCisgICAgKQorICAgIGRtLnN0YXJ0KCkKKyAgICBkbS5tb25pdG9yX2RhZW1vbihyZWJvb3RfdGltZW91dD0wLjUpCisgICAgbW9ja19leGVjdi5hc3NlcnRfY2FsbGVkX29uY2UoKQogCiAgIGRlZiB0ZXN0X3N0b3Bfc3VjY2VzcyhzZWxmKToKICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCkBAIC0xNjIsMjcgKzMwMywxMTQgQEAKICAgQG1vY2sucGF0Y2goJ29zLmtpbGwnKQogICBkZWYgdGVzdF9zdG9wX2ZhaWxlZF90b19raWxsX2RhZW1vbl9wcm9jZXNzKHNlbGYsIG1vY2tfa2lsbCk6CiAgICAgbW9ja19raWxsLnNpZGVfZWZmZWN0ID0gT1NFcnJvcignVW5rbm93biBPU0Vycm9yJykKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoKQogICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKLSAgICAgICAgVEVTVF9CSU5BUllfRklMRSwgZGFlbW9uX3RhcmdldD1sb25nX3J1bm5pbmdfZGFlbW9uCisgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCisgICAgICAgIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbiwKKyAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCiAgICAgKQotICAgIGRtLnN0YXJ0KCkKLSAgICBkbS5zdG9wKCkKIAotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkbS5kYWVtb25fcHJvY2Vzcy5pc19hbGl2ZSgpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkbS5waWRfZmlsZV9wYXRoLmV4aXN0cygpKQorICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICBkbS5zdGFydCgpCisgICAgICBkbS5zdG9wKCkKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkbS5kYWVtb25fcHJvY2Vzcy5pc19hbGl2ZSgpKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKGRtLnBpZF9maWxlX3BhdGguZXhpc3RzKCkpCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUT1BfRURJVF9NT05JVE9SCisgICAgKQogCiAgIEBtb2NrLnBhdGNoKCdvcy5yZW1vdmUnKQogICBkZWYgdGVzdF9zdG9wX2ZhaWxlZF90b19yZW1vdmVfcGlkZmlsZShzZWxmLCBtb2NrX3JlbW92ZSk6CiAgICAgbW9ja19yZW1vdmUuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdVbmtub3duIE9TRXJyb3InKQogCisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KCkKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCisgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCisgICAgICAgIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbiwKKyAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCisgICAgKQorCisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgIGRtLnN0YXJ0KCkKKyAgICAgIGRtLnN0b3AoKQorICAgICAgc2VsZi5hc3NlcnRfbm9fc3VicHJvY2Vzc19ydW5uaW5nKCkKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkbS5waWRfZmlsZV9wYXRoLmV4aXN0cygpKQorCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUT1BfRURJVF9NT05JVE9SCisgICAgKQorCisgIEBtb2NrLnBhdGNoKCdvcy5leGVjdicpCisgIGRlZiB0ZXN0X3JlYm9vdF9zdWNjZXNzKHNlbGYsIG1vY2tfZXhlY3YpOgorICAgIGJpbmFyeV9maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKAorICAgICAgICBkaXI9c2VsZi53b3JraW5nX2Rpci5uYW1lLCBkZWxldGU9RmFsc2UKKyAgICApCisKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCisgICAgICAgIGJpbmFyeV9maWxlLm5hbWUsIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbgorICAgICkKKyAgICBkbS5zdGFydCgpCisgICAgZG0ucmVib290KCkKKworICAgICMgVmVyaWZpZXMgdGhlIG9sZCBwcm9jZXNzIGlzIHN0b3BwZWQKKyAgICBzZWxmLmFzc2VydF9ub19zdWJwcm9jZXNzX3J1bm5pbmcoKQorICAgIHNlbGYuYXNzZXJ0RmFsc2UoZG0ucGlkX2ZpbGVfcGF0aC5leGlzdHMoKSkKKworICAgIG1vY2tfZXhlY3YuYXNzZXJ0X2NhbGxlZF9vbmNlKCkKKworICBAbW9jay5wYXRjaCgnb3MuZXhlY3YnKQorICBkZWYgdGVzdF9yZWJvb3RfYmluYXJ5X25vX2xvbmdlcl9leGlzdHMoc2VsZiwgbW9ja19leGVjdik6CiAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAogICAgICAgICBURVNUX0JJTkFSWV9GSUxFLCBkYWVtb25fdGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24KICAgICApCiAgICAgZG0uc3RhcnQoKQotICAgIGRtLnN0b3AoKQogCi0gICAgc2VsZi5hc3NlcnRfbm9fc3VicHJvY2Vzc19ydW5uaW5nKCkKLSAgICBzZWxmLmFzc2VydFRydWUoZG0ucGlkX2ZpbGVfcGF0aC5leGlzdHMoKSkKKyAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgZG0ucmVib290KCkKKyAgICAgIG1vY2tfZXhlY3YuYXNzZXJ0X25vdF9jYWxsZWQoKQorICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uY29kZSwgMCkKKworICBAbW9jay5wYXRjaCgnb3MuZXhlY3YnKQorICBkZWYgdGVzdF9yZWJvb3RfZmFpbGVkKHNlbGYsIG1vY2tfZXhlY3YpOgorICAgIG1vY2tfZXhlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdVbmtub3duIE9TRXJyb3InKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCisgICAgYmluYXJ5X2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoCisgICAgICAgIGRpcj1zZWxmLndvcmtpbmdfZGlyLm5hbWUsIGRlbGV0ZT1GYWxzZQorICAgICkKKworICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKKyAgICAgICAgYmluYXJ5X2ZpbGUubmFtZSwKKyAgICAgICAgZGFlbW9uX3RhcmdldD1sb25nX3J1bm5pbmdfZGFlbW9uLAorICAgICAgICBjY2xpZW50PWZha2VfY2NsaWVudCwKKyAgICApCisgICAgZG0uc3RhcnQoKQorCisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgIGRtLnJlYm9vdCgpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5jb2RlLCAxKQorICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCisgICAgICAgIGZha2VfY2NsaWVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19SRUJPT1RfRURJVF9NT05JVE9SCisgICAgKQorCisgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLmNoZWNrX291dHB1dCcpCisgIGRlZiB0ZXN0X2NsZWFudXBfc3VjY2VzcyhzZWxmLCBtb2NrX2NoZWNrX291dHB1dCk6CisgICAgcCA9IHNlbGYuX2NyZWF0ZV9mYWtlX2RlYW1vbl9wcm9jZXNzKCkKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoKQorICAgIG1vY2tfY2hlY2tfb3V0cHV0LnJldHVybl92YWx1ZSA9IGYndXNlciB7cC5waWR9IDEgMSAxIDEgMSBlZGl0X21vbml0b3IgYXJnJworCisgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAorICAgICAgICBURVNUX0JJTkFSWV9GSUxFLAorICAgICAgICBkYWVtb25fdGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24sCisgICAgICAgIGNjbGllbnQ9ZmFrZV9jY2xpZW50LAorICAgICkKKyAgICBkbS5jbGVhbnVwKCkKKworICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5pc19hbGl2ZSgpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgcGF0aGxpYi5QYXRoKHNlbGYud29ya2luZ19kaXIubmFtZSkKKyAgICAgICAgLmpvaW5wYXRoKGRhZW1vbl9tYW5hZ2VyLkJMT0NLX1NJR05fRklMRSkKKyAgICAgICAgLmV4aXN0cygpCisgICAgKQogCiAgIGRlZiBhc3NlcnRfcnVuX3NpbXBsZV9kYWVtb25fc3VjY2VzcyhzZWxmKToKICAgICBkYW1vbmVfb3V0cHV0X2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoCkBAIC0xOTQsNyArNDIyLDcgQEAKICAgICAgICAgZGFlbW9uX2FyZ3M9KGRhbW9uZV9vdXRwdXRfZmlsZS5uYW1lLCksCiAgICAgKQogICAgIGRtLnN0YXJ0KCkKLSAgICBkbS5kYWVtb25fcHJvY2Vzcy5qb2luKCkKKyAgICBkbS5tb25pdG9yX2RhZW1vbihpbnRlcnZhbD0xKQogCiAgICAgIyBWZXJpZmllcyB0aGUgZXhwZWN0ZWQgcGlkIGZpbGUgaXMgY3JlYXRlZC4KICAgICBleHBlY3RlZF9waWRfZmlsZV9wYXRoID0gcGF0aGxpYi5QYXRoKHNlbGYud29ya2luZ19kaXIubmFtZSkuam9pbnBhdGgoCkBAIC0yMTQsNyArNDQyLDcgQEAKICAgICAgICAgICBzZWxmLl9pc19wcm9jZXNzX2FsaXZlKGNoaWxkX3BpZCksIGYncHJvY2VzcyB7Y2hpbGRfcGlkfSBzdGlsbCBhbGl2ZScKICAgICAgICkKIAotICBkZWYgX2dldF9jaGlsZF9wcm9jZXNzZXMoc2VsZiwgcGFyZW50X3BpZCk6CisgIGRlZiBfZ2V0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmLCBwYXJlbnRfcGlkOiBpbnQpIC0+IGxpc3RbaW50XToKICAgICB0cnk6CiAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICBbJ3BzJywgJy1vJywgJ3BpZCxwcGlkJywgJy0tbm8taGVhZGVycyddLCB0ZXh0PVRydWUKQEAgLTIyOSw3ICs0NTcsNyBAQAogICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgc2VsZi5mYWlsKGYnZmFpbGVkIHRvIGdldCBjaGlsZCBwcm9jZXNzLCBlcnJvcjoge2V9JykKIAotICBkZWYgX2lzX3Byb2Nlc3NfYWxpdmUoc2VsZiwgcGlkKToKKyAgZGVmIF9pc19wcm9jZXNzX2FsaXZlKHNlbGYsIHBpZDogaW50KSAtPiBib29sOgogICAgIHRyeToKICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgIFsncHMnLCAnLXAnLCBzdHIocGlkKSwgJy1vJywgJ3N0YXRlPSddLCB0ZXh0PVRydWUKQEAgLTI0OCw2ICs0NzYsNDkgQEAKICAgICAgICAgIyBwcm9jZXNzIGFscmVhZHkgdGVybWluYXRlZAogICAgICAgICBwYXNzCiAKKyAgZGVmIF9jcmVhdGVfZmFrZV9kZWFtb25fcHJvY2VzcygKKyAgICAgIHNlbGYsIG5hbWU6IHN0ciA9IFRFU1RfUElEX0ZJTEVfUEFUSAorICApIC0+IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzOgorICAgICMgQ3JlYXRlIGEgbG9uZyBydW5uaW5nIHN1YnByb2Nlc3MKKyAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24pCisgICAgcC5zdGFydCgpCisKKyAgICAjIENyZWF0ZSB0aGUgcGlkZmlsZSB3aXRoIHRoZSBzdWJwcm9jZXNzIHBpZAorICAgIHBpZF9maWxlX3BhdGhfZGlyID0gcGF0aGxpYi5QYXRoKHNlbGYud29ya2luZ19kaXIubmFtZSkuam9pbnBhdGgoCisgICAgICAgICdlZGl0X21vbml0b3InCisgICAgKQorICAgIHBpZF9maWxlX3BhdGhfZGlyLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKKyAgICB3aXRoIG9wZW4ocGlkX2ZpbGVfcGF0aF9kaXIuam9pbnBhdGgobmFtZSksICd3JykgYXMgZjoKKyAgICAgIGYud3JpdGUoc3RyKHAucGlkKSkKKyAgICByZXR1cm4gcAorCisgIGRlZiBfYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZChzZWxmLCBmYWtlX2NjbGllbnQsIGVycm9yX3R5cGUpOgorICAgIGVycm9yX2V2ZW50cyA9IGZha2VfY2NsaWVudC5nZXRfc2VudF9ldmVudHMoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihlcnJvcl9ldmVudHMpLCAxKQorICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRnJvbVN0cmluZygKKyAgICAgICAgICAgIGVycm9yX2V2ZW50c1swXS5zb3VyY2VfZXh0ZW5zaW9uCisgICAgICAgICkuZWRpdF9tb25pdG9yX2Vycm9yX2V2ZW50LmVycm9yX3R5cGUsCisgICAgICAgIGVycm9yX3R5cGUsCisgICAgKQorCisKK2NsYXNzIEZha2VDbGVhcmN1dENsaWVudDoKKworICBkZWYgX19pbml0X18oc2VsZik6CisgICAgc2VsZi5wZW5kaW5nX2xvZ19ldmVudHMgPSBbXQorICAgIHNlbGYuc2VudF9sb2dfZXZlbnQgPSBbXQorCisgIGRlZiBsb2coc2VsZiwgbG9nX2V2ZW50KToKKyAgICBzZWxmLnBlbmRpbmdfbG9nX2V2ZW50cy5hcHBlbmQobG9nX2V2ZW50KQorCisgIGRlZiBmbHVzaF9ldmVudHMoc2VsZik6CisgICAgc2VsZi5zZW50X2xvZ19ldmVudC5leHRlbmQoc2VsZi5wZW5kaW5nX2xvZ19ldmVudHMpCisgICAgc2VsZi5wZW5kaW5nX2xvZ19ldmVudHMuY2xlYXIoKQorCisgIGRlZiBnZXRfc2VudF9ldmVudHMoc2VsZik6CisgICAgcmV0dXJuIHNlbGYuc2VudF9sb2dfZXZlbnQgKyBzZWxmLnBlbmRpbmdfbG9nX2V2ZW50cworCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvci5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1MjhlOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3IucHkKQEAgLTAsMCArMSwyMjAgQEAKKyMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCitpbXBvcnQgZ2V0cGFzcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbgoraW1wb3J0IG9zCitpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQorCitmcm9tIGF0ZXN0Lm1ldHJpY3MgaW1wb3J0IGNsZWFyY3V0X2NsaWVudAorZnJvbSBhdGVzdC5wcm90byBpbXBvcnQgY2xpZW50YW5hbHl0aWNzX3BiMgorZnJvbSBwcm90byBpbXBvcnQgZWRpdF9ldmVudF9wYjIKK2Zyb20gd2F0Y2hkb2cuZXZlbnRzIGltcG9ydCBGaWxlU3lzdGVtRXZlbnQKK2Zyb20gd2F0Y2hkb2cuZXZlbnRzIGltcG9ydCBQYXR0ZXJuTWF0Y2hpbmdFdmVudEhhbmRsZXIKK2Zyb20gd2F0Y2hkb2cub2JzZXJ2ZXJzIGltcG9ydCBPYnNlcnZlcgorCisjIEVudW0gb2YgdGhlIENsZWFyY3V0IGxvZyBzb3VyY2UgZGVmaW5lZCB1bmRlcgorIyAvZ29vZ2xlMy93aXJlbGVzcy9hbmRyb2lkL3BsYXkvcGxheWxvZy9wcm90by9sb2dfc291cmNlX2VudW0ucHJvdG8KK0xPR19TT1VSQ0UgPSAyNTI0CitERUZBVUxUX0ZMVVNIX0lOVEVSVkFMX1NFQ09ORFMgPSA1CitERUZBVUxUX1NJTkdMRV9FVkVOVFNfU0laRV9USFJFU0hPTEQgPSAxMDAKKworCitjbGFzcyBDbGVhcmN1dEV2ZW50SGFuZGxlcihQYXR0ZXJuTWF0Y2hpbmdFdmVudEhhbmRsZXIpOgorCisgIGRlZiBfX2luaXRfXygKKyAgICAgIHNlbGYsCisgICAgICBwYXRoOiBzdHIsCisgICAgICBmbHVzaF9pbnRlcnZhbF9zZWM6IGludCwKKyAgICAgIHNpbmdsZV9ldmVudHNfc2l6ZV90aHJlc2hvbGQ6IGludCwKKyAgICAgIGlzX2RyeV9ydW46IGJvb2wgPSBGYWxzZSwKKyAgICAgIGNjbGllbnQ6IGNsZWFyY3V0X2NsaWVudC5DbGVhcmN1dCB8IE5vbmUgPSBOb25lLAorICApOgorCisgICAgc3VwZXIoKS5fX2luaXRfXyhwYXR0ZXJucz1bIioiXSwgaWdub3JlX2RpcmVjdG9yaWVzPVRydWUpCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aCA9IHBhdGgKKyAgICBzZWxmLmZsdXNoX2ludGVydmFsX3NlYyA9IGZsdXNoX2ludGVydmFsX3NlYworICAgIHNlbGYuc2luZ2xlX2V2ZW50c19zaXplX3RocmVzaG9sZCA9IHNpbmdsZV9ldmVudHNfc2l6ZV90aHJlc2hvbGQKKyAgICBzZWxmLmlzX2RyeV9ydW4gPSBpc19kcnlfcnVuCisgICAgc2VsZi5jY2xpZW50ID0gY2NsaWVudCBvciBjbGVhcmN1dF9jbGllbnQuQ2xlYXJjdXQoTE9HX1NPVVJDRSkKKworICAgIHNlbGYudXNlcl9uYW1lID0gZ2V0cGFzcy5nZXR1c2VyKCkKKyAgICBzZWxmLmhvc3RfbmFtZSA9IHBsYXRmb3JtLm5vZGUoKQorICAgIHNlbGYuc291cmNlX3Jvb3QgPSBvcy5lbnZpcm9uLmdldCgiQU5EUk9JRF9CVUlMRF9UT1AiLCAiIikKKworICAgIHNlbGYucGVuZGluZ19ldmVudHMgPSBbXQorICAgIHNlbGYuX3NjaGVkdWxlZF9sb2dfdGhyZWFkID0gTm9uZQorICAgIHNlbGYuX3BlbmRpbmdfZXZlbnRzX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgZGVmIG9uX21vdmVkKHNlbGYsIGV2ZW50OiBGaWxlU3lzdGVtRXZlbnQpOgorICAgIHNlbGYuX2xvZ19lZGl0X2V2ZW50KGV2ZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuTU9WRSkKKworICBkZWYgb25fY3JlYXRlZChzZWxmLCBldmVudDogRmlsZVN5c3RlbUV2ZW50KToKKyAgICBzZWxmLl9sb2dfZWRpdF9ldmVudChldmVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkNSRUFURSkKKworICBkZWYgb25fZGVsZXRlZChzZWxmLCBldmVudDogRmlsZVN5c3RlbUV2ZW50KToKKyAgICBzZWxmLl9sb2dfZWRpdF9ldmVudChldmVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkRFTEVURSkKKworICBkZWYgb25fbW9kaWZpZWQoc2VsZiwgZXZlbnQ6IEZpbGVTeXN0ZW1FdmVudCk6CisgICAgc2VsZi5fbG9nX2VkaXRfZXZlbnQoZXZlbnQsIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5NT0RJRlkpCisKKyAgZGVmIGZsdXNoYWxsKHNlbGYpOgorICAgIGxvZ2dpbmcuaW5mbygiZmx1c2hpbmcgYWxsIHBlbmRpbmcgZXZlbnRzLiIpCisgICAgaWYgc2VsZi5fc2NoZWR1bGVkX2xvZ190aHJlYWQ6CisgICAgICBsb2dnaW5nLmluZm8oImNhbmNlbGluZyBsb2cgdGhyZWFkIikKKyAgICAgIHNlbGYuX3NjaGVkdWxlZF9sb2dfdGhyZWFkLmNhbmNlbCgpCisgICAgICBzZWxmLl9zY2hlZHVsZWRfbG9nX3RocmVhZCA9IE5vbmUKKworICAgIHNlbGYuX2xvZ19jbGVhcmN1dF9ldmVudHMoKQorICAgIHNlbGYuY2NsaWVudC5mbHVzaF9ldmVudHMoKQorCisgIGRlZiBfbG9nX2VkaXRfZXZlbnQoCisgICAgICBzZWxmLCBldmVudDogRmlsZVN5c3RlbUV2ZW50LCBlZGl0X3R5cGU6IGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5FZGl0VHlwZQorICApOgorICAgIHRyeToKKyAgICAgIGV2ZW50X3RpbWUgPSB0aW1lLnRpbWUoKQorCisgICAgICBpZiBzZWxmLl9pc19oaWRkZW5fZmlsZShwYXRobGliLlBhdGgoZXZlbnQuc3JjX3BhdGgpKToKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiaWdub3JlIGhpZGRlbiBmaWxlOiAlcy4iLCBldmVudC5zcmNfcGF0aCkKKyAgICAgICAgcmV0dXJuCisKKyAgICAgIGlmIG5vdCBzZWxmLl9pc191bmRlcl9naXRfcHJvamVjdChwYXRobGliLlBhdGgoZXZlbnQuc3JjX3BhdGgpKToKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygKKyAgICAgICAgICAgICJpZ25vcmUgZmlsZSAlcyB3aGljaCBkb2VzIG5vdCBiZWxvbmcgdG8gYSBnaXQgcHJvamVjdCIsCisgICAgICAgICAgICBldmVudC5zcmNfcGF0aCwKKyAgICAgICAgKQorICAgICAgICByZXR1cm4KKworICAgICAgbG9nZ2luZy5pbmZvKCIlczogJXMiLCBldmVudC5ldmVudF90eXBlLCBldmVudC5zcmNfcGF0aCkKKworICAgICAgZXZlbnRfcHJvdG8gPSBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQoCisgICAgICAgICAgdXNlcl9uYW1lPXNlbGYudXNlcl9uYW1lLAorICAgICAgICAgIGhvc3RfbmFtZT1zZWxmLmhvc3RfbmFtZSwKKyAgICAgICAgICBzb3VyY2Vfcm9vdD1zZWxmLnNvdXJjZV9yb290LAorICAgICAgKQorICAgICAgZXZlbnRfcHJvdG8uc2luZ2xlX2VkaXRfZXZlbnQuQ29weUZyb20oCisgICAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LlNpbmdsZUVkaXRFdmVudCgKKyAgICAgICAgICAgICAgZmlsZV9wYXRoPWV2ZW50LnNyY19wYXRoLCBlZGl0X3R5cGU9ZWRpdF90eXBlCisgICAgICAgICAgKQorICAgICAgKQorICAgICAgd2l0aCBzZWxmLl9wZW5kaW5nX2V2ZW50c19sb2NrOgorICAgICAgICBzZWxmLnBlbmRpbmdfZXZlbnRzLmFwcGVuZCgoZXZlbnRfcHJvdG8sIGV2ZW50X3RpbWUpKQorICAgICAgICBpZiBub3Qgc2VsZi5fc2NoZWR1bGVkX2xvZ190aHJlYWQ6CisgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygKKyAgICAgICAgICAgICAgIlNjaGVkdWxpbmcgdGhyZWFkIHRvIHJ1biBpbiAlZCBzZWNvbmRzIiwgc2VsZi5mbHVzaF9pbnRlcnZhbF9zZWMKKyAgICAgICAgICApCisgICAgICAgICAgc2VsZi5fc2NoZWR1bGVkX2xvZ190aHJlYWQgPSB0aHJlYWRpbmcuVGltZXIoCisgICAgICAgICAgICAgIHNlbGYuZmx1c2hfaW50ZXJ2YWxfc2VjLCBzZWxmLl9sb2dfY2xlYXJjdXRfZXZlbnRzCisgICAgICAgICAgKQorICAgICAgICAgIHNlbGYuX3NjaGVkdWxlZF9sb2dfdGhyZWFkLnN0YXJ0KCkKKworICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigiRmFpbGVkIHRvIGxvZyBlZGl0IGV2ZW50LiIpCisKKyAgZGVmIF9pc19oaWRkZW5fZmlsZShzZWxmLCBmaWxlX3BhdGg6IHBhdGhsaWIuUGF0aCkgLT4gYm9vbDoKKyAgICByZXR1cm4gYW55KAorICAgICAgICBwYXJ0LnN0YXJ0c3dpdGgoIi4iKQorICAgICAgICBmb3IgcGFydCBpbiBmaWxlX3BhdGgucmVsYXRpdmVfdG8oc2VsZi5yb290X21vbml0b3JpbmdfcGF0aCkucGFydHMKKyAgICApCisKKyAgZGVmIF9pc191bmRlcl9naXRfcHJvamVjdChzZWxmLCBmaWxlX3BhdGg6IHBhdGhsaWIuUGF0aCkgLT4gYm9vbDoKKyAgICByb290X3BhdGggPSBwYXRobGliLlBhdGgoc2VsZi5yb290X21vbml0b3JpbmdfcGF0aCkucmVzb2x2ZSgpCisgICAgcmV0dXJuIGFueSgKKyAgICAgICAgcm9vdF9wYXRoLmpvaW5wYXRoKGRpcikuam9pbnBhdGgoJy5naXQnKS5leGlzdHMoKQorICAgICAgICBmb3IgZGlyIGluIGZpbGVfcGF0aC5yZWxhdGl2ZV90byhyb290X3BhdGgpLnBhcmVudHMKKyAgICApCisKKyAgZGVmIF9sb2dfY2xlYXJjdXRfZXZlbnRzKHNlbGYpOgorICAgIHdpdGggc2VsZi5fcGVuZGluZ19ldmVudHNfbG9jazoKKyAgICAgIHNlbGYuX3NjaGVkdWxlZF9sb2dfdGhyZWFkID0gTm9uZQorICAgICAgZWRpdF9ldmVudHMgPSBzZWxmLnBlbmRpbmdfZXZlbnRzCisgICAgICBzZWxmLnBlbmRpbmdfZXZlbnRzID0gW10KKworICAgIHBlbmRpbmdfZXZlbnRzX3NpemUgPSBsZW4oZWRpdF9ldmVudHMpCisgICAgaWYgcGVuZGluZ19ldmVudHNfc2l6ZSA+IHNlbGYuc2luZ2xlX2V2ZW50c19zaXplX3RocmVzaG9sZDoKKyAgICAgIGxvZ2dpbmcuaW5mbygKKyAgICAgICAgICAiZ290ICVkIGV2ZW50cyBpbiAlZCBzZWNvbmRzLCBzZW5kaW5nIGFnZ3JlZ2F0ZWQgZXZlbnRzIGluc3RlYWQiLAorICAgICAgICAgIHBlbmRpbmdfZXZlbnRzX3NpemUsCisgICAgICAgICAgc2VsZi5mbHVzaF9pbnRlcnZhbF9zZWMsCisgICAgICApCisgICAgICBhZ2dyZWdhdGVkX2V2ZW50X3RpbWUgPSBlZGl0X2V2ZW50c1swXVsxXQorICAgICAgYWdncmVnYXRlZF9ldmVudF9wcm90byA9IGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudCgKKyAgICAgICAgICB1c2VyX25hbWU9c2VsZi51c2VyX25hbWUsCisgICAgICAgICAgaG9zdF9uYW1lPXNlbGYuaG9zdF9uYW1lLAorICAgICAgICAgIHNvdXJjZV9yb290PXNlbGYuc291cmNlX3Jvb3QsCisgICAgICApCisgICAgICBhZ2dyZWdhdGVkX2V2ZW50X3Byb3RvLmFnZ3JlZ2F0ZWRfZWRpdF9ldmVudC5Db3B5RnJvbSgKKyAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuQWdncmVnYXRlZEVkaXRFdmVudCgKKyAgICAgICAgICAgICAgbnVtX2VkaXRzPXBlbmRpbmdfZXZlbnRzX3NpemUKKyAgICAgICAgICApCisgICAgICApCisgICAgICBlZGl0X2V2ZW50cyA9IFsoYWdncmVnYXRlZF9ldmVudF9wcm90bywgYWdncmVnYXRlZF9ldmVudF90aW1lKV0KKworICAgIGlmIHNlbGYuaXNfZHJ5X3J1bjoKKyAgICAgIGxvZ2dpbmcuaW5mbygiU2VudCAlZCBlZGl0IGV2ZW50cyBpbiBkcnkgcnVuLiIsIGxlbihlZGl0X2V2ZW50cykpCisgICAgICByZXR1cm4KKworICAgIGZvciBldmVudF9wcm90bywgZXZlbnRfdGltZSBpbiBlZGl0X2V2ZW50czoKKyAgICAgIGxvZ19ldmVudCA9IGNsaWVudGFuYWx5dGljc19wYjIuTG9nRXZlbnQoCisgICAgICAgICAgZXZlbnRfdGltZV9tcz1pbnQoZXZlbnRfdGltZSAqIDEwMDApLAorICAgICAgICAgIHNvdXJjZV9leHRlbnNpb249ZXZlbnRfcHJvdG8uU2VyaWFsaXplVG9TdHJpbmcoKSwKKyAgICAgICkKKyAgICAgIHNlbGYuY2NsaWVudC5sb2cobG9nX2V2ZW50KQorCisgICAgbG9nZ2luZy5pbmZvKCJzZW50ICVkIGVkaXQgZXZlbnRzIiwgbGVuKGVkaXRfZXZlbnRzKSkKKworCitkZWYgc3RhcnQoCisgICAgcGF0aDogc3RyLAorICAgIGlzX2RyeV9ydW46IGJvb2wgPSBGYWxzZSwKKyAgICBmbHVzaF9pbnRlcnZhbF9zZWM6IGludCA9IERFRkFVTFRfRkxVU0hfSU5URVJWQUxfU0VDT05EUywKKyAgICBzaW5nbGVfZXZlbnRzX3NpemVfdGhyZXNob2xkOiBpbnQgPSBERUZBVUxUX1NJTkdMRV9FVkVOVFNfU0laRV9USFJFU0hPTEQsCisgICAgY2NsaWVudDogY2xlYXJjdXRfY2xpZW50LkNsZWFyY3V0IHwgTm9uZSA9IE5vbmUsCisgICAgcGlwZV9zZW5kZXI6IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24gfCBOb25lID0gTm9uZSwKKyk6CisgICIiIk1ldGhvZCB0byBzdGFydCB0aGUgZWRpdCBtb25pdG9yLgorCisgIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHN0YXJ0IHRoZSBlZGl0IG1vbml0b3IgYXMgYSBzdWJwcm9jZXNzIG9mCisgIHRoZSBkYWVtb24gbWFuYWdlci4KKworICBwYXJhbXM6CisgICAgcGF0aDogVGhlIHJvb3QgcGF0aCB0byBtb25pdG9yCisgICAgY2NsaWVudDogVGhlIGNsZWFyY3V0IGNsaWVudCB0byBzZW5kIHRoZSBlZGl0IGxvZ3MuCisgICAgY29ubjogdGhlIHNlbmRlciBvZiB0aGUgcGlwZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkZWFtb24gbWFuYWdlci4KKyAgIiIiCisgIGV2ZW50X2hhbmRsZXIgPSBDbGVhcmN1dEV2ZW50SGFuZGxlcigKKyAgICAgIHBhdGgsIGZsdXNoX2ludGVydmFsX3NlYywgc2luZ2xlX2V2ZW50c19zaXplX3RocmVzaG9sZCwgaXNfZHJ5X3J1biwgY2NsaWVudCkKKyAgb2JzZXJ2ZXIgPSBPYnNlcnZlcigpCisKKyAgbG9nZ2luZy5pbmZvKCJTdGFydGluZyBvYnNlcnZlciBvbiBwYXRoICVzLiIsIHBhdGgpCisgIG9ic2VydmVyLnNjaGVkdWxlKGV2ZW50X2hhbmRsZXIsIHBhdGgsIHJlY3Vyc2l2ZT1UcnVlKQorICBvYnNlcnZlci5zdGFydCgpCisgIGxvZ2dpbmcuaW5mbygiT2JzZXJ2ZXIgc3RhcnRlZC4iKQorICBpZiBwaXBlX3NlbmRlcjoKKyAgICBwaXBlX3NlbmRlci5zZW5kKCJPYnNlcnZlciBzdGFydGVkLiIpCisKKyAgdHJ5OgorICAgIHdoaWxlIFRydWU6CisgICAgICB0aW1lLnNsZWVwKDEpCisgIGZpbmFsbHk6CisgICAgZXZlbnRfaGFuZGxlci5mbHVzaGFsbCgpCisgICAgb2JzZXJ2ZXIuc3RvcCgpCisgICAgb2JzZXJ2ZXIuam9pbigpCisgICAgaWYgcGlwZV9zZW5kZXI6CisgICAgICBwaXBlX3NlbmRlci5jbG9zZSgpCmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yX2ludGVncmF0aW9uX3Rlc3QucHkgYi90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yX2ludGVncmF0aW9uX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5YjkzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfaW50ZWdyYXRpb25fdGVzdC5weQpAQCAtMCwwICsxLDE2OSBAQAorIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisiIiJJbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgRWRpdCBNb25pdG9yLiIiIgorCitpbXBvcnQgZ2xvYgorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHJlc291cmNlcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHBhdGhsaWIKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworCitjbGFzcyBFZGl0TW9uaXRvckludGVncmF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgQGNsYXNzbWV0aG9kCisgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgc3VwZXIoKS5zZXRVcENsYXNzKCkKKyAgICAjIENvbmZpZ3VyZSB0byBwcmludCBsb2dnaW5nIHRvIHN0ZG91dC4KKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPU5vbmUsIGxldmVsPWxvZ2dpbmcuREVCVUcpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCIiKS5hZGRIYW5kbGVyKGNvbnNvbGUpCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgIHN1cGVyKCkuc2V0VXAoKQorICAgIHNlbGYud29ya2luZ19kaXIgPSB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKQorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGggPSBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgKKyAgICAgICAgImZpbGVzIgorICAgICkKKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLm1rZGlyKCkKKyAgICBzZWxmLmVkaXRfbW9uaXRvcl9iaW5hcnlfcGF0aCA9IHNlbGYuX2ltcG9ydF9leGVjdXRhYmxlKCJlZGl0X21vbml0b3IiKQorICAgIHNlbGYucGF0Y2ggPSBtb2NrLnBhdGNoLmRpY3QoCisgICAgICAgIG9zLmVudmlyb24sIHsiRU5BQkxFX0FORFJPSURfRURJVF9NT05JVE9SIjogInRydWUifQorICAgICkKKyAgICBzZWxmLnBhdGNoLnN0YXJ0KCkKKworICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgc2VsZi5wYXRjaC5zdG9wKCkKKyAgICBzZWxmLndvcmtpbmdfZGlyLmNsZWFudXAoKQorICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgIGRlZiB0ZXN0X2xvZ19zaW5nbGVfZWRpdF9ldmVudF9zdWNjZXNzKHNlbGYpOgorICAgIHAgPSBzZWxmLl9zdGFydF9lZGl0X21vbml0b3JfcHJvY2VzcygpCisKKyAgICAjIENyZWF0ZSB0aGUgLmdpdCBmaWxlIHVuZGVyIHRoZSBtb25pdG9yaW5nIGRpci4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCIuZ2l0IikudG91Y2goKQorCisgICAgIyBDcmVhdGUgYW5kIG1vZGlmeSBhIGZpbGUuCisgICAgdGVzdF9maWxlID0gc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgidGVzdC50eHQiKQorICAgIHdpdGggb3Blbih0ZXN0X2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgIGYud3JpdGUoInNvbWV0aGluZyIpCisKKyAgICAjIE1vdmUgdGhlIGZpbGUuCisgICAgdGVzdF9maWxlX21vdmVkID0gc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgibmV3X3Rlc3QudHh0IikKKyAgICB0ZXN0X2ZpbGUucmVuYW1lKHRlc3RfZmlsZV9tb3ZlZCkKKworICAgICMgRGVsZXRlIHRoZSBmaWxlLgorICAgIHRlc3RfZmlsZV9tb3ZlZC51bmxpbmsoKQorCisgICAgIyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIGVkaXQgbW9uaXRvciB0byByZWNlaXZlIHRoZSBlZGl0IGV2ZW50LgorICAgIHRpbWUuc2xlZXAoMSkKKyAgICAjIFN0b3AgdGhlIGVkaXQgbW9uaXRvciBhbmQgZmx1c2ggYWxsIGV2ZW50cy4KKyAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgIHAuY29tbXVuaWNhdGUoKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9nZXRfbG9nZ2VkX2V2ZW50c19udW0oKSwgNCkKKworICBkZWYgdGVzdF9zdGFydF9tdWx0aXBsZV9lZGl0X21vbml0b3Jfb25seV9vbmVfc3RhcnRlZChzZWxmKToKKyAgICBwMSA9IHNlbGYuX3N0YXJ0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKHdhaXRfZm9yX29ic2VydmVyX3N0YXJ0PUZhbHNlKQorICAgIHAyID0gc2VsZi5fc3RhcnRfZWRpdF9tb25pdG9yX3Byb2Nlc3Mod2FpdF9mb3Jfb2JzZXJ2ZXJfc3RhcnQ9RmFsc2UpCisgICAgcDMgPSBzZWxmLl9zdGFydF9lZGl0X21vbml0b3JfcHJvY2Vzcyh3YWl0X2Zvcl9vYnNlcnZlcl9zdGFydD1GYWxzZSkKKworICAgIGxpdmVfcHJvY2Vzc2VzID0gc2VsZi5fZ2V0X2xpdmVfcHJvY2Vzc2VzKFtwMSwgcDIsIHAzXSkKKworICAgICMgQ2xlYW51cCBhbGwgbGl2ZSBwcm9jZXNzZXMuCisgICAgZm9yIHAgaW4gbGl2ZV9wcm9jZXNzZXM6CisgICAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgcC5jb21tdW5pY2F0ZSgpCisKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXZlX3Byb2Nlc3NlcyksIDEpCisKKyAgZGVmIF9zdGFydF9lZGl0X21vbml0b3JfcHJvY2VzcyhzZWxmLCB3YWl0X2Zvcl9vYnNlcnZlcl9zdGFydD1UcnVlKToKKyAgICBjb21tYW5kID0gZiIiIgorICAgIGV4cG9ydCBUTVBESVI9IntzZWxmLndvcmtpbmdfZGlyLm5hbWV9IgorICAgIHtzZWxmLmVkaXRfbW9uaXRvcl9iaW5hcnlfcGF0aH0gLS1wYXRoPXtzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRofSAtLWRyeV9ydW4iIiIKKyAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgY29tbWFuZCwKKyAgICAgICAgc2hlbGw9VHJ1ZSwKKyAgICAgICAgdGV4dD1UcnVlLAorICAgICAgICBzdGFydF9uZXdfc2Vzc2lvbj1UcnVlLAorICAgICAgICBleGVjdXRhYmxlPSIvYmluL2Jhc2giLAorICAgICkKKyAgICBpZiB3YWl0X2Zvcl9vYnNlcnZlcl9zdGFydDoKKyAgICAgIHNlbGYuX3dhaXRfZm9yX29ic2VydmVyX3N0YXJ0KHRpbWVfb3V0PTUpCisKKyAgICByZXR1cm4gcAorCisgIGRlZiBfd2FpdF9mb3Jfb2JzZXJ2ZXJfc3RhcnQoc2VsZiwgdGltZV9vdXQpOgorICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorCisgICAgd2hpbGUgdGltZS50aW1lKCkgPCBzdGFydF90aW1lICsgdGltZV9vdXQ6CisgICAgICBsb2dfZmlsZXMgPSBnbG9iLmdsb2Ioc2VsZi53b3JraW5nX2Rpci5uYW1lICsgIi9lZGl0X21vbml0b3JfKi8qLmxvZyIpCisgICAgICBpZiBsb2dfZmlsZXM6CisgICAgICAgIHdpdGggb3Blbihsb2dfZmlsZXNbMF0sICJyIikgYXMgZjoKKyAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiaW5pdGlhbCBsb2c6ICVzIiwgbGluZSkKKyAgICAgICAgICAgIGlmIGxpbmUucnN0cmlwKCJcbiIpLmVuZHN3aXRoKCJPYnNlcnZlciBzdGFydGVkLiIpOgorICAgICAgICAgICAgICByZXR1cm4KKyAgICAgIGVsc2U6CisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgIHNlbGYuZmFpbChmIk9ic2VydmVyIG5vdCBzdGFydGVkIGluIHt0aW1lX291dH0gc2Vjb25kcy4iKQorCisgIGRlZiBfZ2V0X2xvZ2dlZF9ldmVudHNfbnVtKHNlbGYpOgorICAgIGxvZ19maWxlcyA9IGdsb2IuZ2xvYihzZWxmLndvcmtpbmdfZGlyLm5hbWUgKyAiL2VkaXRfbW9uaXRvcl8qLyoubG9nIikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dfZmlsZXMpLCAxKQorCisgICAgd2l0aCBvcGVuKGxvZ19maWxlc1swXSwgInIiKSBhcyBmOgorICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiY29tcGxldGUgbG9nOiAlcyIsIGxpbmUpCisgICAgICAgIGlmIGxpbmUucnN0cmlwKCJcbiIpLmVuZHN3aXRoKCJpbiBkcnkgcnVuLiIpOgorICAgICAgICAgIHJldHVybiBpbnQobGluZS5zcGxpdCgiOiIpWy0xXS5zcGxpdCgiICIpWzJdKQorCisgICAgcmV0dXJuIDAKKworICBkZWYgX2dldF9saXZlX3Byb2Nlc3NlcyhzZWxmLCBwcm9jZXNzZXMpOgorICAgIGxpdmVfcHJvY2Vzc2VzID0gW10KKyAgICBmb3IgcCBpbiBwcm9jZXNzZXM6CisgICAgICB0cnk6CisgICAgICAgIHAud2FpdCh0aW1lb3V0PTUpCisgICAgICBleGNlcHQgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZCBhcyBlOgorICAgICAgICBsaXZlX3Byb2Nlc3Nlcy5hcHBlbmQocCkKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJwcm9jZXNzOiAlZCBzdGlsbCBhbGl2ZS4iLCBwLnBpZCkKKyAgICAgIGVsc2U6CisgICAgICAgIGxvZ2dpbmcuaW5mbygicHJvY2VzczogJWQgc3RvcHBlZC4iLCBwLnBpZCkKKyAgICByZXR1cm4gbGl2ZV9wcm9jZXNzZXMKKworICBkZWYgX2ltcG9ydF9leGVjdXRhYmxlKHNlbGYsIGV4ZWN1dGFibGVfbmFtZTogc3RyKSAtPiBwYXRobGliLlBhdGg6CisgICAgYmluYXJ5X2RpciA9IHBhdGhsaWIuUGF0aChzZWxmLndvcmtpbmdfZGlyLm5hbWUpLmpvaW5wYXRoKCJiaW5hcnkiKQorICAgIGJpbmFyeV9kaXIubWtkaXIoKQorICAgIGV4ZWN1dGFibGVfcGF0aCA9IGJpbmFyeV9kaXIuam9pbnBhdGgoZXhlY3V0YWJsZV9uYW1lKQorICAgIHdpdGggcmVzb3VyY2VzLmFzX2ZpbGUoCisgICAgICAgIHJlc291cmNlcy5maWxlcygidGVzdGRhdGEiKS5qb2lucGF0aChleGVjdXRhYmxlX25hbWUpCisgICAgKSBhcyBiaW5hcnk6CisgICAgICBzaHV0aWwuY29weShiaW5hcnksIGV4ZWN1dGFibGVfcGF0aCkKKyAgICBleGVjdXRhYmxlX3BhdGguY2htb2QoMG83NTUpCisgICAgcmV0dXJuIGV4ZWN1dGFibGVfcGF0aAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvcl90ZXN0LnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvcl90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YTM4NzEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yX3Rlc3QucHkKQEAgLTAsMCArMSwzMDEgQEAKKyMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiVW5pdHRlc3RzIGZvciBFZGl0IE1vbml0b3IuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRobGliCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdGVzdC5wcm90byBpbXBvcnQgY2xpZW50YW5hbHl0aWNzX3BiMgorZnJvbSBlZGl0X21vbml0b3IgaW1wb3J0IGVkaXRfbW9uaXRvcgorZnJvbSBwcm90byBpbXBvcnQgZWRpdF9ldmVudF9wYjIKKworCitjbGFzcyBFZGl0TW9uaXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgIEBjbGFzc21ldGhvZAorICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgIHN1cGVyKCkuc2V0VXBDbGFzcygpCisgICAgIyBDb25maWd1cmUgdG8gcHJpbnQgbG9nZ2luZyB0byBzdGRvdXQuCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT1Ob25lLCBsZXZlbD1sb2dnaW5nLkRFQlVHKQorICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICBsb2dnaW5nLmdldExvZ2dlcignJykuYWRkSGFuZGxlcihjb25zb2xlKQorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICBzdXBlcigpLnNldFVwKCkKKyAgICBzZWxmLndvcmtpbmdfZGlyID0gdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkKKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoID0gcGF0aGxpYi5QYXRoKHNlbGYud29ya2luZ19kaXIubmFtZSkuam9pbnBhdGgoCisgICAgICAgICdmaWxlcycKKyAgICApCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5ta2RpcigpCisgICAgc2VsZi5sb2dfZXZlbnRfZGlyID0gcGF0aGxpYi5QYXRoKHNlbGYud29ya2luZ19kaXIubmFtZSkuam9pbnBhdGgoJ2xvZ3MnKQorICAgIHNlbGYubG9nX2V2ZW50X2Rpci5ta2RpcigpCisKKyAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgIHNlbGYud29ya2luZ19kaXIuY2xlYW51cCgpCisgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgZGVmIHRlc3RfbG9nX3NpbmdsZV9lZGl0X2V2ZW50X3N1Y2Nlc3Moc2VsZik6CisgICAgIyBDcmVhdGUgdGhlIC5naXQgZmlsZSB1bmRlciB0aGUgbW9uaXRvcmluZyBkaXIuCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnLmdpdCcpLnRvdWNoKCkKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoCisgICAgICAgIGxvZ19vdXRwdXRfZmlsZT1zZWxmLmxvZ19ldmVudF9kaXIuam9pbnBhdGgoJ2xvZ3Mub3V0cHV0JykKKyAgICApCisgICAgcCA9IHNlbGYuX3N0YXJ0X3Rlc3RfZWRpdF9tb25pdG9yX3Byb2Nlc3MoZmFrZV9jY2xpZW50KQorCisgICAgIyBDcmVhdGUgYW5kIG1vZGlmeSBhIGZpbGUuCisgICAgdGVzdF9maWxlID0gc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgndGVzdC50eHQnKQorICAgIHdpdGggb3Blbih0ZXN0X2ZpbGUsICd3JykgYXMgZjoKKyAgICAgIGYud3JpdGUoJ3NvbWV0aGluZycpCisgICAgIyBNb3ZlIHRoZSBmaWxlLgorICAgIHRlc3RfZmlsZV9tb3ZlZCA9IHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ25ld190ZXN0LnR4dCcpCisgICAgdGVzdF9maWxlLnJlbmFtZSh0ZXN0X2ZpbGVfbW92ZWQpCisgICAgIyBEZWxldGUgdGhlIGZpbGUuCisgICAgdGVzdF9maWxlX21vdmVkLnVubGluaygpCisgICAgIyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIGVkaXQgbW9uaXRvciB0byByZWNlaXZlIHRoZSBlZGl0IGV2ZW50LgorICAgIHRpbWUuc2xlZXAoMSkKKyAgICAjIFN0b3AgdGhlIGVkaXQgbW9uaXRvciBhbmQgZmx1c2ggYWxsIGV2ZW50cy4KKyAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgIHAuam9pbigpCisKKyAgICBsb2dnZWRfZXZlbnRzID0gc2VsZi5fZ2V0X2xvZ2dlZF9ldmVudHMoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ2dlZF9ldmVudHMpLCA0KQorICAgIGV4cGVjdGVkX2NyZWF0ZV9ldmVudCA9IGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5TaW5nbGVFZGl0RXZlbnQoCisgICAgICAgIGZpbGVfcGF0aD1zdHIoCisgICAgICAgICAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCd0ZXN0LnR4dCcpLnJlc29sdmUoKQorICAgICAgICApLAorICAgICAgICBlZGl0X3R5cGU9ZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkNSRUFURSwKKyAgICApCisgICAgZXhwZWN0ZWRfbW9kaWZ5X2V2ZW50ID0gZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LlNpbmdsZUVkaXRFdmVudCgKKyAgICAgICAgZmlsZV9wYXRoPXN0cigKKyAgICAgICAgICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ3Rlc3QudHh0JykucmVzb2x2ZSgpCisgICAgICAgICksCisgICAgICAgIGVkaXRfdHlwZT1lZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuTU9ESUZZLAorICAgICkKKyAgICBleHBlY3RlZF9tb3ZlX2V2ZW50ID0gZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LlNpbmdsZUVkaXRFdmVudCgKKyAgICAgICAgZmlsZV9wYXRoPXN0cigKKyAgICAgICAgICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ3Rlc3QudHh0JykucmVzb2x2ZSgpCisgICAgICAgICksCisgICAgICAgIGVkaXRfdHlwZT1lZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuTU9WRSwKKyAgICApCisgICAgZXhwZWN0ZWRfZGVsZXRlX2V2ZW50ID0gZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LlNpbmdsZUVkaXRFdmVudCgKKyAgICAgICAgZmlsZV9wYXRoPXN0cigKKyAgICAgICAgICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ25ld190ZXN0LnR4dCcpLnJlc29sdmUoKQorICAgICAgICApLAorICAgICAgICBlZGl0X3R5cGU9ZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkRFTEVURSwKKyAgICApCisgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgZXhwZWN0ZWRfY3JlYXRlX2V2ZW50LAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRnJvbVN0cmluZygKKyAgICAgICAgICAgIGxvZ2dlZF9ldmVudHNbMF0uc291cmNlX2V4dGVuc2lvbgorICAgICAgICApLnNpbmdsZV9lZGl0X2V2ZW50LAorICAgICkKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICBleHBlY3RlZF9tb2RpZnlfZXZlbnQsCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5Gcm9tU3RyaW5nKAorICAgICAgICAgICAgbG9nZ2VkX2V2ZW50c1sxXS5zb3VyY2VfZXh0ZW5zaW9uCisgICAgICAgICkuc2luZ2xlX2VkaXRfZXZlbnQsCisgICAgKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIGV4cGVjdGVkX21vdmVfZXZlbnQsCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5Gcm9tU3RyaW5nKAorICAgICAgICAgICAgbG9nZ2VkX2V2ZW50c1syXS5zb3VyY2VfZXh0ZW5zaW9uCisgICAgICAgICkuc2luZ2xlX2VkaXRfZXZlbnQsCisgICAgKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIGV4cGVjdGVkX2RlbGV0ZV9ldmVudCwKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZyb21TdHJpbmcoCisgICAgICAgICAgICBsb2dnZWRfZXZlbnRzWzNdLnNvdXJjZV9leHRlbnNpb24KKyAgICAgICAgKS5zaW5nbGVfZWRpdF9ldmVudCwKKyAgICApCisKKworICBkZWYgdGVzdF9sb2dfYWdncmVnYXRlZF9lZGl0X2V2ZW50X3N1Y2Nlc3Moc2VsZik6CisgICAgIyBDcmVhdGUgdGhlIC5naXQgZmlsZSB1bmRlciB0aGUgbW9uaXRvcmluZyBkaXIuCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnLmdpdCcpLnRvdWNoKCkKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoCisgICAgICAgIGxvZ19vdXRwdXRfZmlsZT1zZWxmLmxvZ19ldmVudF9kaXIuam9pbnBhdGgoJ2xvZ3Mub3V0cHV0JykKKyAgICApCisgICAgcCA9IHNlbGYuX3N0YXJ0X3Rlc3RfZWRpdF9tb25pdG9yX3Byb2Nlc3MoZmFrZV9jY2xpZW50KQorCisgICAgIyBDcmVhdGUgNiB0ZXN0IGZpbGVzCisgICAgZm9yIGkgaW4gcmFuZ2UoNik6CisgICAgICB0ZXN0X2ZpbGUgPSBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCd0ZXN0XycgKyBzdHIoaSkpCisgICAgICB0ZXN0X2ZpbGUudG91Y2goKQorCisgICAgIyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIGVkaXQgbW9uaXRvciB0byByZWNlaXZlIHRoZSBlZGl0IGV2ZW50LgorICAgIHRpbWUuc2xlZXAoMSkKKyAgICAjIFN0b3AgdGhlIGVkaXQgbW9uaXRvciBhbmQgZmx1c2ggYWxsIGV2ZW50cy4KKyAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgIHAuam9pbigpCisKKyAgICBsb2dnZWRfZXZlbnRzID0gc2VsZi5fZ2V0X2xvZ2dlZF9ldmVudHMoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ2dlZF9ldmVudHMpLCAxKQorCisgICAgZXhwZWN0ZWRfYWdncmVnYXRlZF9lZGl0X2V2ZW50ID0gKAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuQWdncmVnYXRlZEVkaXRFdmVudCgKKyAgICAgICAgICAgIG51bV9lZGl0cz02LAorICAgICAgICApCisgICAgKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgZXhwZWN0ZWRfYWdncmVnYXRlZF9lZGl0X2V2ZW50LAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRnJvbVN0cmluZygKKyAgICAgICAgICAgIGxvZ2dlZF9ldmVudHNbMF0uc291cmNlX2V4dGVuc2lvbgorICAgICAgICApLmFnZ3JlZ2F0ZWRfZWRpdF9ldmVudCwKKyAgICApCisKKyAgZGVmIHRlc3RfZG9fbm90X2xvZ19lZGl0X2V2ZW50X2Zvcl9kaXJlY3RvcnlfY2hhbmdlKHNlbGYpOgorICAgICMgQ3JlYXRlIHRoZSAuZ2l0IGZpbGUgdW5kZXIgdGhlIG1vbml0b3JpbmcgZGlyLgorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJy5naXQnKS50b3VjaCgpCisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KAorICAgICAgICBsb2dfb3V0cHV0X2ZpbGU9c2VsZi5sb2dfZXZlbnRfZGlyLmpvaW5wYXRoKCdsb2dzLm91dHB1dCcpCisgICAgKQorICAgIHAgPSBzZWxmLl9zdGFydF90ZXN0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKGZha2VfY2NsaWVudCkKKworICAgICMgQ3JlYXRlIGEgc3ViIGRpcmVjdG9yeQorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ3Rlc3RfZGlyJykubWtkaXIoKQorICAgICMgR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBlZGl0IG1vbml0b3IgdG8gcmVjZWl2ZSB0aGUgZWRpdCBldmVudC4KKyAgICB0aW1lLnNsZWVwKDEpCisgICAgIyBTdG9wIHRoZSBlZGl0IG1vbml0b3IgYW5kIGZsdXNoIGFsbCBldmVudHMuCisgICAgb3Mua2lsbChwLnBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICBwLmpvaW4oKQorCisgICAgbG9nZ2VkX2V2ZW50cyA9IHNlbGYuX2dldF9sb2dnZWRfZXZlbnRzKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dnZWRfZXZlbnRzKSwgMCkKKworICBkZWYgdGVzdF9kb19ub3RfbG9nX2VkaXRfZXZlbnRfZm9yX2hpZGRlbl9maWxlKHNlbGYpOgorICAgICMgQ3JlYXRlIHRoZSAuZ2l0IGZpbGUgdW5kZXIgdGhlIG1vbml0b3JpbmcgZGlyLgorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJy5naXQnKS50b3VjaCgpCisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KAorICAgICAgICBsb2dfb3V0cHV0X2ZpbGU9c2VsZi5sb2dfZXZlbnRfZGlyLmpvaW5wYXRoKCdsb2dzLm91dHB1dCcpCisgICAgKQorICAgIHAgPSBzZWxmLl9zdGFydF90ZXN0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKGZha2VfY2NsaWVudCkKKworICAgICMgQ3JlYXRlIGEgaGlkZGVuIGZpbGUuCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnLnRlc3QudHh0JykudG91Y2goKQorICAgICMgQ3JlYXRlIGEgaGlkZGVuIGRpci4KKyAgICBoaWRkZW5fZGlyID0gc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnLnRlc3QnKQorICAgIGhpZGRlbl9kaXIubWtkaXIoKQorICAgIGhpZGRlbl9kaXIuam9pbnBhdGgoJ3Rlc3QudHh0JykudG91Y2goKQorICAgICMgR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBlZGl0IG1vbml0b3IgdG8gcmVjZWl2ZSB0aGUgZWRpdCBldmVudC4KKyAgICB0aW1lLnNsZWVwKDEpCisgICAgIyBTdG9wIHRoZSBlZGl0IG1vbml0b3IgYW5kIGZsdXNoIGFsbCBldmVudHMuCisgICAgb3Mua2lsbChwLnBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICBwLmpvaW4oKQorCisgICAgbG9nZ2VkX2V2ZW50cyA9IHNlbGYuX2dldF9sb2dnZWRfZXZlbnRzKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dnZWRfZXZlbnRzKSwgMCkKKworICBkZWYgdGVzdF9kb19ub3RfbG9nX2VkaXRfZXZlbnRfZm9yX25vbl9naXRfcHJvamVjdF9maWxlKHNlbGYpOgorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgKKyAgICAgICAgbG9nX291dHB1dF9maWxlPXNlbGYubG9nX2V2ZW50X2Rpci5qb2lucGF0aCgnbG9ncy5vdXRwdXQnKQorICAgICkKKyAgICBwID0gc2VsZi5fc3RhcnRfdGVzdF9lZGl0X21vbml0b3JfcHJvY2VzcyhmYWtlX2NjbGllbnQpCisKKyAgICAjIENyZWF0ZSBhIGZpbGUuCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgndGVzdC50eHQnKS50b3VjaCgpCisgICAgIyBDcmVhdGUgYSBmaWxlIHVuZGVyIGEgc3ViIGRpci4KKyAgICBzdWJfZGlyID0gc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnLnRlc3QnKQorICAgIHN1Yl9kaXIubWtkaXIoKQorICAgIHN1Yl9kaXIuam9pbnBhdGgoJ3Rlc3QudHh0JykudG91Y2goKQorICAgICMgR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBlZGl0IG1vbml0b3IgdG8gcmVjZWl2ZSB0aGUgZWRpdCBldmVudC4KKyAgICB0aW1lLnNsZWVwKDEpCisgICAgIyBTdG9wIHRoZSBlZGl0IG1vbml0b3IgYW5kIGZsdXNoIGFsbCBldmVudHMuCisgICAgb3Mua2lsbChwLnBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICBwLmpvaW4oKQorCisgICAgbG9nZ2VkX2V2ZW50cyA9IHNlbGYuX2dldF9sb2dnZWRfZXZlbnRzKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dnZWRfZXZlbnRzKSwgMCkKKworICBkZWYgdGVzdF9sb2dfZWRpdF9ldmVudF9mYWlsKHNlbGYpOgorICAgICMgQ3JlYXRlIHRoZSAuZ2l0IGZpbGUgdW5kZXIgdGhlIG1vbml0b3JpbmcgZGlyLgorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJy5naXQnKS50b3VjaCgpCisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KAorICAgICAgICBsb2dfb3V0cHV0X2ZpbGU9c2VsZi5sb2dfZXZlbnRfZGlyLmpvaW5wYXRoKCdsb2dzLm91dHB1dCcpLAorICAgICAgICByYWlzZV9sb2dfZXhjZXB0aW9uPVRydWUsCisgICAgKQorICAgIHAgPSBzZWxmLl9zdGFydF90ZXN0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKGZha2VfY2NsaWVudCkKKworICAgICMgQ3JlYXRlIGEgZmlsZS4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCd0ZXN0LnR4dCcpLnRvdWNoKCkKKyAgICAjIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgZWRpdCBtb25pdG9yIHRvIHJlY2VpdmUgdGhlIGVkaXQgZXZlbnQuCisgICAgdGltZS5zbGVlcCgxKQorICAgICMgU3RvcCB0aGUgZWRpdCBtb25pdG9yIGFuZCBmbHVzaCBhbGwgZXZlbnRzLgorICAgIG9zLmtpbGwocC5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgcC5qb2luKCkKKworICAgIGxvZ2dlZF9ldmVudHMgPSBzZWxmLl9nZXRfbG9nZ2VkX2V2ZW50cygpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nZ2VkX2V2ZW50cyksIDApCisKKyAgZGVmIF9zdGFydF90ZXN0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKAorICAgICAgc2VsZiwgY2NsaWVudAorICApIC0+IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzOgorICAgIHJlY2VpdmVyLCBzZW5kZXIgPSBtdWx0aXByb2Nlc3NpbmcuUGlwZSgpCisgICAgIyBTdGFydCBlZGl0IG1vbml0b3IgaW4gYSBzdWJwcm9jZXNzLgorICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcygKKyAgICAgICAgdGFyZ2V0PWVkaXRfbW9uaXRvci5zdGFydCwKKyAgICAgICAgYXJncz0oc3RyKHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGgucmVzb2x2ZSgpKSwgRmFsc2UsIDAuNSwgNSwgY2NsaWVudCwgc2VuZGVyKSwKKyAgICApCisgICAgcC5kYWVtb24gPSBUcnVlCisgICAgcC5zdGFydCgpCisKKyAgICAjIFdhaXQgdW50aWwgb2JzZXJ2ZXIgc3RhcnRlZC4KKyAgICByZWNlaXZlZF9kYXRhID0gcmVjZWl2ZXIucmVjdigpCisgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVjZWl2ZWRfZGF0YSwgJ09ic2VydmVyIHN0YXJ0ZWQuJykKKworICAgIHJlY2VpdmVyLmNsb3NlKCkKKyAgICByZXR1cm4gcAorCisgIGRlZiBfZ2V0X2xvZ2dlZF9ldmVudHMoc2VsZik6CisgICAgd2l0aCBvcGVuKHNlbGYubG9nX2V2ZW50X2Rpci5qb2lucGF0aCgnbG9ncy5vdXRwdXQnKSwgJ3JiJykgYXMgZjoKKyAgICAgIGRhdGEgPSBmLnJlYWQoKQorCisgICAgcmV0dXJuIFsKKyAgICAgICAgY2xpZW50YW5hbHl0aWNzX3BiMi5Mb2dFdmVudC5Gcm9tU3RyaW5nKHJlY29yZCkKKyAgICAgICAgZm9yIHJlY29yZCBpbiBkYXRhLnNwbGl0KGInXHgwMCcpCisgICAgICAgIGlmIHJlY29yZAorICAgIF0KKworCitjbGFzcyBGYWtlQ2xlYXJjdXRDbGllbnQ6CisKKyAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ19vdXRwdXRfZmlsZSwgcmFpc2VfbG9nX2V4Y2VwdGlvbj1GYWxzZSk6CisgICAgc2VsZi5wZW5kaW5nX2xvZ19ldmVudHMgPSBbXQorICAgIHNlbGYucmFpc2VfbG9nX2V4Y2VwdGlvbiA9IHJhaXNlX2xvZ19leGNlcHRpb24KKyAgICBzZWxmLmxvZ19vdXRwdXRfZmlsZSA9IGxvZ19vdXRwdXRfZmlsZQorCisgIGRlZiBsb2coc2VsZiwgbG9nX2V2ZW50KToKKyAgICBpZiBzZWxmLnJhaXNlX2xvZ19leGNlcHRpb246CisgICAgICByYWlzZSBFeGNlcHRpb24oJ3Vua25vd24gZXhjZXB0aW9uJykKKyAgICBzZWxmLnBlbmRpbmdfbG9nX2V2ZW50cy5hcHBlbmQobG9nX2V2ZW50KQorCisgIGRlZiBmbHVzaF9ldmVudHMoc2VsZik6CisgICAgZGVsaW1pdGVyID0gYidceDAwJyAgIyBVc2UgYSBudWxsIGJ5dGUgYXMgdGhlIGRlbGltaXRlcgorICAgIHdpdGggb3BlbihzZWxmLmxvZ19vdXRwdXRfZmlsZSwgJ3diJykgYXMgZjoKKyAgICAgIGZvciBsb2dfZXZlbnQgaW4gc2VsZi5wZW5kaW5nX2xvZ19ldmVudHM6CisgICAgICAgIGYud3JpdGUobG9nX2V2ZW50LlNlcmlhbGl6ZVRvU3RyaW5nKCkgKyBkZWxpbWl0ZXIpCisKKyAgICBzZWxmLnBlbmRpbmdfbG9nX2V2ZW50cy5jbGVhcigpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvbWFpbi5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci9tYWluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMmQxODMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9lZGl0X21vbml0b3IvbWFpbi5weQpAQCAtMCwwICsxLDExOSBAQAorIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIGVkaXRfbW9uaXRvciBpbXBvcnQgZGFlbW9uX21hbmFnZXIKK2Zyb20gZWRpdF9tb25pdG9yIGltcG9ydCBlZGl0X21vbml0b3IKKworCitkZWYgY3JlYXRlX2FyZ19wYXJzZXIoKToKKyAgIiIiQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBhcmcgcGFyc2VyLiIiIgorCisgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgZGVzY3JpcHRpb249KAorICAgICAgICAgICdNb25pdG9ycyBlZGl0cyBpbiBBbmRyb2lkIHNvdXJjZSBjb2RlIGFuZCB1cGxvYWRzIHRoZSBlZGl0IGxvZ3MuJworICAgICAgKSwKKyAgICAgIGFkZF9oZWxwPVRydWUsCisgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAorICApCisKKyAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICctLXBhdGgnLAorICAgICAgdHlwZT1zdHIsCisgICAgICByZXF1aXJlZD1UcnVlLAorICAgICAgaGVscD0nUm9vdCBwYXRoIHRvIG1vbml0b3IgdGhlIGVkaXQgZXZlbnRzLicsCisgICkKKworICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgJy0tZHJ5X3J1bicsCisgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgaGVscD0nRHJ5IHJ1biB0aGUgZWRpdCBtb25pdG9yLiBUaGlzIHN0YXJ0cyB0aGUgZWRpdCBtb25pdG9yIHByb2Nlc3Mgd2l0aG91dCBhY3R1YWxseSBzZW5kIHRoZSBlZGl0IGxvZ3MgdG8gY2xlYXJjdXQuJywKKyAgKQorCisgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLS1mb3JjZV9jbGVhbnVwJywKKyAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICBoZWxwPSgKKyAgICAgICAgICAnSW5zdGVhZCBvZiBzdGFydCBhIG5ldyBlZGl0IG1vbml0b3IsIGZvcmNlIHN0b3AgYWxsIGV4aXN0aW5nIGVkaXQnCisgICAgICAgICAgJyBtb25pdG9ycyBpbiB0aGUgc3lzdGVtLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgaW4gZW1lcmdlbnQgY2FzZXMnCisgICAgICAgICAgJyB3aGVuIHdlIHdhbnQgdG8gcHJldmVudCB1c2VyIGRhbWFnZSBieSB0aGUgZWRpdCBtb25pdG9yLicKKyAgICAgICksCisgICkKKworICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgJy0tdmVyYm9zZScsCisgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgaGVscD0oCisgICAgICAgICAgJ0xvZyB2ZXJib3NlIGluZm8gaW4gdGhlIGxvZyBmaWxlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4nCisgICAgICApLAorICApCisKKyAgcmV0dXJuIHBhcnNlcgorCisKK2RlZiBjb25maWd1cmVfbG9nZ2luZyh2ZXJib3NlPUZhbHNlKToKKyAgcm9vdF9sb2dnaW5nX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdlZGl0X21vbml0b3JfJykKKyAgXywgbG9nX3BhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj1yb290X2xvZ2dpbmdfZGlyLCBzdWZmaXg9Jy5sb2cnKQorCisKKyAgbG9nX2ZtdCA9ICclKGFzY3RpbWUpcy4lKG1zZWNzKTAzZCAlKGZpbGVuYW1lKXM6JShsaW5lbm8pczolKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycKKyAgZGF0ZV9mbXQgPSAnJVktJW0tJWQgJUg6JU06JVMnCisgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcgaWYgdmVyYm9zZSBlbHNlIGxvZ2dpbmcuSU5GTworCisgIGxvZ2dpbmcuYmFzaWNDb25maWcoCisgICAgICBmaWxlbmFtZT1sb2dfcGF0aCwgbGV2ZWw9bG9nX2xldmVsLCBmb3JtYXQ9bG9nX2ZtdCwgZGF0ZWZtdD1kYXRlX2ZtdAorICApCisgICMgRmlsdGVyIG91dCBsb2dzIGZyb20gaW5vdGlmeV9idWZmIHRvIHByZXZlbnQgbG9nIHBvbGx1dGlvbi4KKyAgbG9nZ2luZy5nZXRMb2dnZXIoJ3dhdGNoZG9nLm9ic2VydmVycy5pbm90aWZ5X2J1ZmZlcicpLmFkZEZpbHRlcigKKyAgICAgIGxhbWJkYSByZWNvcmQ6IHJlY29yZC5maWxlbmFtZSAhPSAnaW5vdGlmeV9idWZmZXIucHknKQorICBwcmludChmJ2xvZ2dpbmcgdG8gZmlsZSB7bG9nX3BhdGh9JykKKworCitkZWYgdGVybV9zaWduYWxfaGFuZGxlcihfc2lnbmFsX251bWJlciwgX2ZyYW1lKToKKyAgbG9nZ2luZy5pbmZvKCdQcm9jZXNzICVkIHJlY2VpdmVkIFNJR1RFUk0sIFRlcm1pbmF0aW5nLi4uJywgb3MuZ2V0cGlkKCkpCisgIHN5cy5leGl0KDApCisKKworZGVmIG1haW4oYXJndjogbGlzdFtzdHJdKToKKyAgYXJncyA9IGNyZWF0ZV9hcmdfcGFyc2VyKCkucGFyc2VfYXJncyhhcmd2WzE6XSkKKyAgY29uZmlndXJlX2xvZ2dpbmcoYXJncy52ZXJib3NlKQorICBpZiBhcmdzLmRyeV9ydW46CisgICAgbG9nZ2luZy5pbmZvKCdUaGlzIGlzIGEgZHJ5IHJ1bi4nKQorICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCisgICAgICBiaW5hcnlfcGF0aD1hcmd2WzBdLAorICAgICAgZGFlbW9uX3RhcmdldD1lZGl0X21vbml0b3Iuc3RhcnQsCisgICAgICBkYWVtb25fYXJncz0oYXJncy5wYXRoLCBhcmdzLmRyeV9ydW4pLAorICApCisKKyAgdHJ5OgorICAgIGlmIGFyZ3MuZm9yY2VfY2xlYW51cDoKKyAgICAgIGRtLmNsZWFudXAoKQorICAgIGVsc2U6CisgICAgICBkbS5zdGFydCgpCisgICAgICBkbS5tb25pdG9yX2RhZW1vbigpCisgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgbG9nZ2luZy5leGNlcHRpb24oJ1VuZXhwZWN0ZWQgZXhjZXB0aW9uIHJhaXNlZCB3aGVuIHJ1biBkYWVtb24uJykKKyAgZmluYWxseToKKyAgICBkbS5zdG9wKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCB0ZXJtX3NpZ25hbF9oYW5kbGVyKQorICBtYWluKHN5cy5hcmd2KQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL3Byb3RvL2VkaXRfZXZlbnQucHJvdG8gYi90b29scy9lZGl0X21vbml0b3IvcHJvdG8vZWRpdF9ldmVudC5wcm90bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWNjMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL3Byb3RvL2VkaXRfZXZlbnQucHJvdG8KQEAgLTAsMCArMSw1NyBAQAorc3ludGF4ID0gInByb3RvMyI7CisKK3BhY2thZ2UgdG9vbHMuYXN1aXRlLmVkaXRfbW9uaXRvcjsKKworbWVzc2FnZSBFZGl0RXZlbnQgeworICBlbnVtIEVkaXRUeXBlIHsKKyAgICBVTlNVUFBPUlRFRF9UWVBFID0gMDsKKyAgICBDUkVBVEUgPSAxOworICAgIE1PRElGWSA9IDI7CisgICAgREVMRVRFID0gMzsKKyAgICBNT1ZFID0gNDsKKyAgfQorCisgIGVudW0gRXJyb3JUeXBlIHsKKyAgICBVTktOT1dOX0VSUk9SID0gMDsKKyAgICBGQUlMRURfVE9fU1RBUlRfRURJVF9NT05JVE9SID0gMTsKKyAgICBGQUlMRURfVE9fU1RPUF9FRElUX01PTklUT1IgPSAyOworICAgIEZBSUxFRF9UT19SRUJPT1RfRURJVF9NT05JVE9SID0gMzsKKyAgICBLSUxMRURfRFVFX1RPX0VYQ0VFREVEX01FTU9SWV9VU0FHRSA9IDQ7CisgICAgRk9SQ0VfQ0xFQU5VUCA9IDU7CisgICAgS0lMTEVEX0RVRV9UT19FWENFRURFRF9DUFVfVVNBR0UgPSA2OworICB9CisKKyAgLy8gRXZlbnQgdGhhdCBsb2dzIGEgc2luZ2xlIGVkaXQKKyAgbWVzc2FnZSBTaW5nbGVFZGl0RXZlbnQgeworICAgIC8vIEZ1bGwgcGF0aCBvZiB0aGUgZmlsZSB0aGF0IGVkaXRlZC4KKyAgICBzdHJpbmcgZmlsZV9wYXRoID0gMTsKKyAgICAvLyBUeXBlIG9mIHRoZSBlZGl0LgorICAgIEVkaXRUeXBlIGVkaXRfdHlwZSA9IDI7CisgIH0KKworICAvLyBFdmVudCB0aGF0IGxvZ3MgYWdncmVnYXRlZCBpbmZvIGZvciBhIHNldCBvZiBlZGl0cy4KKyAgbWVzc2FnZSBBZ2dyZWdhdGVkRWRpdEV2ZW50IHsKKyAgICBpbnQzMiBudW1fZWRpdHMgPSAxOworICB9CisKKyAgLy8gRXZlbnQgdGhhdCBsb2dzIGVycm9ycyBoYXBwZW5lZCBpbiB0aGUgZWRpdCBtb25pdG9yLgorICBtZXNzYWdlIEVkaXRNb25pdG9yRXJyb3JFdmVudCB7CisgICAgRXJyb3JUeXBlIGVycm9yX3R5cGUgPSAxOworICB9CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIEZJRUxEUyBGT1IgRWRpdEV2ZW50CisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBJbnRlcm5hbCB1c2VyIG5hbWUuCisgIHN0cmluZyB1c2VyX25hbWUgPSAxOworICAvLyBUaGUgcm9vdCBvZiBBbmRyb2lkIHNvdXJjZS4KKyAgc3RyaW5nIHNvdXJjZV9yb290ID0gMjsKKyAgLy8gTmFtZSBvZiB0aGUgaG9zdCB3b3Jrc3RhdGlvbi4KKyAgc3RyaW5nIGhvc3RfbmFtZSA9IDM7CisKKyAgb25lb2YgZXZlbnQgeworICAgIFNpbmdsZUVkaXRFdmVudCBzaW5nbGVfZWRpdF9ldmVudCA9IDQ7CisgICAgQWdncmVnYXRlZEVkaXRFdmVudCBhZ2dyZWdhdGVkX2VkaXRfZXZlbnQgPSA1OworICAgIEVkaXRNb25pdG9yRXJyb3JFdmVudCBlZGl0X21vbml0b3JfZXJyb3JfZXZlbnQgPSA2OworICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvdXRpbHMucHkgYi90b29scy9lZGl0X21vbml0b3IvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4OTQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlscy5weQpAQCAtMCwwICsxLDUzIEBACisjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCisKKworZGVmIGlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICBmZWF0dXJlX25hbWU6IHN0ciwKKyAgICB1c2VyX25hbWU6IHN0ciwKKyAgICBlbmFibGVfZmxhZzogc3RyID0gTm9uZSwKKyAgICByb2xsb3V0X3BlcmNlbnQ6IGludCA9IDEwMCwKKykgLT4gYm9vbDoKKyAgIiIiRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZC4KKworICBXaGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdCBkZXBlbmRzIG9uIHR3byBmbGFnczogMSkgdGhlCisgIGVuYWJsZV9mbGFnIHRoYXQgZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSB0aGUgZmVhdHVyZSBhbmQgMikgdGhlIHJvbGxvdXRfZmxhZworICB0aGF0IGNvbnRyb2xzIHRoZSByb2xsb3V0IHBlcmNlbnRhZ2UuCisKKyAgQXJnczoKKyAgICBmZWF0dXJlX25hbWU6IG5hbWUgb2YgdGhlIGZlYXR1cmUuCisgICAgdXNlcl9uYW1lOiBzeXN0ZW0gdXNlciBuYW1lLgorICAgIGVuYWJsZV9mbGFnOiBuYW1lIG9mIHRoZSBlbnYgdmFyIHRoYXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgZmVhdHVyZQorICAgICAgZXhwbGljaXRseS4KKyAgICByb2xsb3V0X2ZsZzogbmFtZSBvZiB0aGUgZW52IHZhciB0aGF0IGNvbnRyb2xzIHRoZSByb2xsb3V0IHBlcmNlbnRhZ2UsIHRoZQorICAgICAgdmFsdWUgc3RvcmVkIGluIHRoZSBlbnYgdmFyIHNob3VsZCBiZSBhbiBpbnQgYmV0d2VlbiAwIGFuZCAxMDAgc3RyaW5nCisgICIiIgorICBpZiBlbmFibGVfZmxhZzoKKyAgICBpZiBvcy5lbnZpcm9uLmdldChlbmFibGVfZmxhZywgIiIpID09ICJmYWxzZSI6CisgICAgICBsb2dnaW5nLmluZm8oImZlYXR1cmU6ICVzIGlzIGRpc2FibGVkIiwgZmVhdHVyZV9uYW1lKQorICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBvcy5lbnZpcm9uLmdldChlbmFibGVfZmxhZywgIiIpID09ICJ0cnVlIjoKKyAgICAgIGxvZ2dpbmcuaW5mbygiZmVhdHVyZTogJXMgaXMgZW5hYmxlZCIsIGZlYXR1cmVfbmFtZSkKKyAgICAgIHJldHVybiBUcnVlCisKKyAgaGFzaF9vYmplY3QgPSBoYXNobGliLnNoYTI1NigpCisgIGhhc2hfb2JqZWN0LnVwZGF0ZSgodXNlcl9uYW1lICsgZmVhdHVyZV9uYW1lKS5lbmNvZGUoInV0Zi04IikpCisgIGhhc2hfbnVtYmVyID0gaW50KGhhc2hfb2JqZWN0LmhleGRpZ2VzdCgpLCAxNikgJSAxMDAKKworICByZXR1cm4gaGFzaF9udW1iZXIgPCByb2xsb3V0X3BlcmNlbnQKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlsc190ZXN0LnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL3V0aWxzX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzMGFhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlsc190ZXN0LnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiVW5pdHRlc3RzIGZvciBlZGl0IG1vbml0b3IgdXRpbHMuIiIiCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitmcm9tIGVkaXRfbW9uaXRvciBpbXBvcnQgdXRpbHMKKworVEVTVF9VU0VSID0gJ3Rlc3RfdXNlcicKK1RFU1RfRkVBVFVSRSA9ICd0ZXN0X2ZlYXR1cmUnCitFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUcgPSAnRU5BQkxFX1RFU1RfRkVBVFVSRScKK1JPTExPVVRfVEVTVF9GRUFUVVJFX0ZMQUcgPSAnUk9MTE9VVF9URVNUX0ZFQVRVUkUnCisKKworY2xhc3MgRW5hYmxlRmVhdHVyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgIGRlZiB0ZXN0X2ZlYXR1cmVfZW5hYmxlZF93aXRob3V0X2ZsYWcoc2VsZik6CisgICAgc2VsZi5hc3NlcnRUcnVlKHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZChURVNUX0ZFQVRVUkUsIFRFU1RfVVNFUikpCisKKyAgQG1vY2sucGF0Y2guZGljdChvcy5lbnZpcm9uLCB7RU5BQkxFX1RFU1RfRkVBVFVSRV9GTEFHOiAnZmFsc2UnfSwgY2xlYXI9VHJ1ZSkKKyAgZGVmIHRlc3RfZmVhdHVyZV9kaXNhYmxlZF93aXRoX2ZsYWcoc2VsZik6CisgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgdXRpbHMuaXNfZmVhdHVyZV9lbmFibGVkKAorICAgICAgICAgICAgVEVTVF9GRUFUVVJFLCBURVNUX1VTRVIsIEVOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRworICAgICAgICApCisgICAgKQorCisgIEBtb2NrLnBhdGNoLmRpY3Qob3MuZW52aXJvbiwge0VOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRzogJ3RydWUnfSwgY2xlYXI9VHJ1ZSkKKyAgZGVmIHRlc3RfZmVhdHVyZV9lbmFibGVkX3dpdGhfZmxhZyhzZWxmKToKKyAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgIHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICAgICAgICAgIFRFU1RfRkVBVFVSRSwgVEVTVF9VU0VSLCBFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUcKKyAgICAgICAgKQorICAgICkKKworICBkZWYgdGVzdF9mZWF0dXJlX2VuYWJsZWRfd2l0aF9yb2xsb3V0X3BlcmNlbnRhZ2Uoc2VsZik6CisgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICB1dGlscy5pc19mZWF0dXJlX2VuYWJsZWQoCisgICAgICAgICAgICBURVNUX0ZFQVRVUkUsCisgICAgICAgICAgICBURVNUX1VTRVIsCisgICAgICAgICAgICBFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUcsCisgICAgICAgICAgICA5MCwKKyAgICAgICAgKQorICAgICkKKworICBkZWYgdGVzdF9mZWF0dXJlX2Rpc2FibGVkX3dpdGhfcm9sbG91dF9wZXJjZW50YWdlKHNlbGYpOgorICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgIHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICAgICAgICAgIFRFU1RfRkVBVFVSRSwKKyAgICAgICAgICAgIFRFU1RfVVNFUiwKKyAgICAgICAgICAgIEVOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRywKKyAgICAgICAgICAgIDEwLAorICAgICAgICApCisgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZXZlbnRfbG9nX3RhZ3MucHkgYi90b29scy9ldmVudF9sb2dfdGFncy5weQppbmRleCBhNmFlOWYxLi5lODU5YjZiIDEwMDY0NAotLS0gYS90b29scy9ldmVudF9sb2dfdGFncy5weQorKysgYi90b29scy9ldmVudF9sb2dfdGFncy5weQpAQCAtMTQsMjEgKzE0LDIxIEBACiAKICIiIkEgbW9kdWxlIGZvciByZWFkaW5nIGFuZCBwYXJzaW5nIGV2ZW50LWxvZy10YWdzIGZpbGVzLiIiIgogCitpbXBvcnQgZGF0YWNsYXNzZXMKIGltcG9ydCByZQogaW1wb3J0IHN5cworZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCiAKLWNsYXNzIFRhZyhvYmplY3QpOgotICBfX3Nsb3RzX18gPSBbInRhZ251bSIsICJ0YWduYW1lIiwgImRlc2NyaXB0aW9uIiwgImZpbGVuYW1lIiwgImxpbmVudW0iXQotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB0YWdudW0sIHRhZ25hbWUsIGRlc2NyaXB0aW9uLCBmaWxlbmFtZSwgbGluZW51bSk6Ci0gICAgc2VsZi50YWdudW0gPSB0YWdudW0KLSAgICBzZWxmLnRhZ25hbWUgPSB0YWduYW1lCi0gICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0gICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgc2VsZi5saW5lbnVtID0gbGluZW51bQorQGRhdGFjbGFzc2VzLmRhdGFjbGFzcworY2xhc3MgVGFnOgorICB0YWdudW06IGludAorICB0YWduYW1lOiBzdHIKKyAgZGVzY3JpcHRpb246IE9wdGlvbmFsW3N0cl0KKyAgZmlsZW5hbWU6IHN0cgorICBsaW5lbnVtOiBpbnQKIAogCi1jbGFzcyBUYWdGaWxlKG9iamVjdCk6CitjbGFzcyBUYWdGaWxlOgogICAiIiJSZWFkIGFuIGlucHV0IGV2ZW50LWxvZy10YWdzIGZpbGUuIiIiCiAgIGRlZiBBZGRFcnJvcihzZWxmLCBtc2csIGxpbmVudW09Tm9uZSk6CiAgICAgaWYgbGluZW51bSBpcyBOb25lOgpAQCAtNzYsMTQgKzc2LDExIEBACiAgICAgICAgICAgc2VsZi5vcHRpb25zW3BhcnRzWzFdXSA9IHBhcnRzWzI6XQogICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgaWYgcGFydHNbMF0gPT0gIj8iOgotICAgICAgICAgIHRhZyA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0YWcgPSBpbnQocGFydHNbMF0pCi0gICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLkFkZEVycm9yKCJcIiVzXCIgaXNuJ3QgYW4gaW50ZWdlciB0YWcgb3IgJz8nIiAlIChwYXJ0c1swXSwpKQotICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgIHRhZyA9IGludChwYXJ0c1swXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgc2VsZi5BZGRFcnJvcigiXCIlc1wiIGlzbid0IGFuIGludGVnZXIgdGFnIiAlIChwYXJ0c1swXSwpKQorICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgdGFnbmFtZSA9IHBhcnRzWzFdCiAgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gMzoKQEAgLTEyOCw4ICsxMjUsOCBAQAogICAgICAgb3V0ID0gc3lzLnN0ZG91dAogICAgICAgb3V0cHV0X2ZpbGUgPSAiPHN0ZG91dD4iCiAgICAgZWxzZToKLSAgICAgIG91dCA9IG9wZW4ob3V0cHV0X2ZpbGUsICJ3YiIpCi0gICAgb3V0LndyaXRlKHN0ci5lbmNvZGUoZGF0YSkpCisgICAgICBvdXQgPSBvcGVuKG91dHB1dF9maWxlLCAidyIpCisgICAgb3V0LndyaXRlKGRhdGEpCiAgICAgb3V0LmNsb3NlKCkKICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgIHByaW50KCJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIiAlIChvdXRwdXRfZmlsZSwgZSksIGZpbGU9c3lzLnN0ZGVycikKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9BbmRyb2lkLmJwIGIvdG9vbHMvZmlsZWxpc3RkaWZmL0FuZHJvaWQuYnAKaW5kZXggYWI3NjZkNi4uMzgyNmU1MCAxMDA2NDQKLS0tIGEvdG9vbHMvZmlsZWxpc3RkaWZmL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvZmlsZWxpc3RkaWZmL0FuZHJvaWQuYnAKQEAgLTI0LDQgKzI0LDkgQEAKIHByZWJ1aWx0X2V0Y19ob3N0IHsKICAgICBuYW1lOiAic3lzdGVtX2ltYWdlX2RpZmZfYWxsb3dsaXN0IiwKICAgICBzcmM6ICJhbGxvd2xpc3QiLAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KKworcHJlYnVpbHRfZXRjX2hvc3QgeworICAgIG5hbWU6ICJzeXN0ZW1faW1hZ2VfZGlmZl9hbGxvd2xpc3RfbmV4dCIsCisgICAgc3JjOiAiYWxsb3dsaXN0X25leHQiLAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZmlsZWxpc3RkaWZmL2FsbG93bGlzdCBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9hbGxvd2xpc3QKaW5kZXggMTIwMDQ1ZS4uZWI3ODU4NyAxMDA2NDQKLS0tIGEvdG9vbHMvZmlsZWxpc3RkaWZmL2FsbG93bGlzdAorKysgYi90b29scy9maWxlbGlzdGRpZmYvYWxsb3dsaXN0CkBAIC0xLDUxICsxLDUgQEAKLSMgS25vd24gZGlmZnMgb25seSBpbiB0aGUgS0FUSSBzeXN0ZW0gaW1hZ2UKLWV0Yy9OT1RJQ0UueG1sLmd6Ci1mcmFtZXdvcmsvb2F0L3g4Nl82NC9hcGV4QGNvbS5hbmRyb2lkLmNvbXBvc0BqYXZhbGliQHNlcnZpY2UtY29tcG9zLmphckBjbGFzc2VzLm9kZXgKLWZyYW1ld29yay9vYXQveDg2XzY0L2FwZXhAY29tLmFuZHJvaWQuY29tcG9zQGphdmFsaWJAc2VydmljZS1jb21wb3MuamFyQGNsYXNzZXMub2RleC5mc3ZfbWV0YQotZnJhbWV3b3JrL29hdC94ODZfNjQvYXBleEBjb20uYW5kcm9pZC5jb21wb3NAamF2YWxpYkBzZXJ2aWNlLWNvbXBvcy5qYXJAY2xhc3Nlcy52ZGV4Ci1mcmFtZXdvcmsvb2F0L3g4Nl82NC9hcGV4QGNvbS5hbmRyb2lkLmNvbXBvc0BqYXZhbGliQHNlcnZpY2UtY29tcG9zLmphckBjbGFzc2VzLnZkZXguZnN2X21ldGEKLWxpYi9hYXVkaW8tYWlkbC1jcHAuc28KLWxpYi9hbmRyb2lkLmhhcmR3YXJlLmJpb21ldHJpY3MuZmluZ2VycHJpbnRAMi4xLnNvCi1saWIvYW5kcm9pZC5oYXJkd2FyZS5yYWRpby5jb25maWdAMS4wLnNvCi1saWIvYW5kcm9pZC5oYXJkd2FyZS5yYWRpby5kZXByZWNhdGVkQDEuMC5zbwotbGliL2FuZHJvaWQuaGFyZHdhcmUucmFkaW9AMS4wLnNvCi1saWIvYW5kcm9pZC5oYXJkd2FyZS5yYWRpb0AxLjEuc28KLWxpYi9hbmRyb2lkLmhhcmR3YXJlLnJhZGlvQDEuMi5zbwotbGliL2FuZHJvaWQuaGFyZHdhcmUucmFkaW9AMS4zLnNvCi1saWIvYW5kcm9pZC5oYXJkd2FyZS5yYWRpb0AxLjQuc28KLWxpYi9hbmRyb2lkLmhhcmR3YXJlLnNlY3VyZV9lbGVtZW50QDEuMC5zbwotbGliL2NvbS5hbmRyb2lkLm1lZGlhLmFhdWRpby1hY29uZmlnLWNjLnNvCi1saWIvaGVhcHByb2ZkX2NsaWVudC5zbwotbGliL2hlYXBwcm9mZF9jbGllbnRfYXBpLnNvCi1saWIvbGliYWF1ZGlvLnNvCi1saWIvbGliYWF1ZGlvX2ludGVybmFsLnNvCi1saWIvbGliYWxhcm1fam5pLnNvCi1saWIvbGliYW1pZGkuc28KLWxpYi9saWJjdXBzLnNvCi1saWIvbGliam5pX2RldmljZUFzV2ViY2FtLnNvCi1saWIvbGlicHJpbnRzcG9vbGVyX2puaS5zbwotbGliL2xpYnZlbmRvcnN1cHBvcnQuc28KLWxpYi9saWJ3ZmRzLnNvCi1saWIvbGlieXV2LnNvCi0KLSMgYi8zNTEyNTg0NjEKLWFkYl9rZXlzCisjIEtub3duIGRpZmZzIHRoYXQgYXJlIGluc3RhbGxlZCBpbiBlaXRoZXIgc3lzdGVtIGltYWdlIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24KKyMgYi8zNTM0Mjk0MjIKIGluaXQuZW52aXJvbi5yYwotCi0jIEtub3duIGRpZmZzIG9ubHkgaW4gdGhlIFNvb25nIHN5c3RlbSBpbWFnZQotbGliL2xpYmhpZGNvbW1hbmRfam5pLnNvCi1saWIvbGlidWlucHV0Y29tbWFuZF9qbmkuc28KLQotIyBLbm93biBkaWZmcyBpbiBpbnRlcm5hbCBzb3VyY2UKLWJpbi91cHJvYmVzdGF0cwotZXRjL2Fjb25maWcvZmxhZy5tYXAKLWV0Yy9hY29uZmlnL2ZsYWcudmFsCi1ldGMvYWNvbmZpZy9wYWNrYWdlLm1hcAotZXRjL2JwZi91cHJvYmVzdGF0cy9CaXRtYXBBbGxvY2F0aW9uLm8KLWV0Yy9icGYvdXByb2Jlc3RhdHMvR2VuZXJpY0luc3RydW1lbnRhdGlvbi5vCi1ldGMvYnBmL3Vwcm9iZXN0YXRzL1Byb2Nlc3NNYW5hZ2VtZW50Lm8KLWV0Yy9pbml0L1Vwcm9iZVN0YXRzLnJjCi1saWIvbGlidXByb2Jlc3RhdHNfY2xpZW50LnNvCi1saWI2NC9saWJ1cHJvYmVzdGF0c19jbGllbnQuc28KLXByaXYtYXBwL0RldmljZURpYWdub3N0aWNzL0RldmljZURpYWdub3N0aWNzLmFwawotCisjIGIvMzM4MzQyMzgxCitldGMvTk9USUNFLnhtbC5negpkaWZmIC0tZ2l0IGEvdG9vbHMvZmlsZWxpc3RkaWZmL2FsbG93bGlzdF9uZXh0IGIvdG9vbHMvZmlsZWxpc3RkaWZmL2FsbG93bGlzdF9uZXh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTFjOWYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9maWxlbGlzdGRpZmYvYWxsb3dsaXN0X25leHQKQEAgLTAsMCArMSw5IEBACisjIEFsbG93bGlzdCBvbmx5IGZvciB0aGUgbmV4dCByZWxlYXNlIGNvbmZpZ3VyYXRpb24uCisjIFRPRE8oYi8zNjk2NzgxMjIpOiBUaGUgbGlzdCB3aWxsIGJlIGNsZWFyZWQgd2hlbiB0aGUgdHJ1bmsgY29uZmlndXJhdGlvbnMgYXJlCisjIGF2YWlsYWJsZSB0byB0aGUgbmV4dC4KKworIyBLQVRJIG9ubHkgaW5zdGFsbGVkIGZpbGVzCitmcmFtZXdvcmsvb2F0L3g4Nl82NC9hcGV4QGNvbS5hbmRyb2lkLmNvbXBvc0BqYXZhbGliQHNlcnZpY2UtY29tcG9zLmphckBjbGFzc2VzLm9kZXgKK2ZyYW1ld29yay9vYXQveDg2XzY0L2FwZXhAY29tLmFuZHJvaWQuY29tcG9zQGphdmFsaWJAc2VydmljZS1jb21wb3MuamFyQGNsYXNzZXMub2RleC5mc3ZfbWV0YQorZnJhbWV3b3JrL29hdC94ODZfNjQvYXBleEBjb20uYW5kcm9pZC5jb21wb3NAamF2YWxpYkBzZXJ2aWNlLWNvbXBvcy5qYXJAY2xhc3Nlcy52ZGV4CitmcmFtZXdvcmsvb2F0L3g4Nl82NC9hcGV4QGNvbS5hbmRyb2lkLmNvbXBvc0BqYXZhbGliQHNlcnZpY2UtY29tcG9zLmphckBjbGFzc2VzLnZkZXguZnN2X21ldGEKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9maWxlX2xpc3RfZGlmZi5weSBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9maWxlX2xpc3RfZGlmZi5weQppbmRleCBjZGM1YjJlLi5hNjQwOGU4IDEwMDY0NAotLS0gYS90b29scy9maWxlbGlzdGRpZmYvZmlsZV9saXN0X2RpZmYucHkKKysrIGIvdG9vbHMvZmlsZWxpc3RkaWZmL2ZpbGVfbGlzdF9kaWZmLnB5CkBAIC0xOSwzOCArMTksNTQgQEAKIENPTE9SX0VSUk9SID0gJ1wwMzNbOTFtJwogQ09MT1JfTk9STUFMID0gJ1wwMzNbMG0nCiAKLWRlZiBmaW5kX3VuaXF1ZV9pdGVtcyhrYXRpX2luc3RhbGxlZF9maWxlcywgc29vbmdfaW5zdGFsbGVkX2ZpbGVzLCBhbGxvd2xpc3QsIHN5c3RlbV9tb2R1bGVfbmFtZSk6CitkZWYgZmluZF91bmlxdWVfaXRlbXMoa2F0aV9pbnN0YWxsZWRfZmlsZXMsIHNvb25nX2luc3RhbGxlZF9maWxlcywgc3lzdGVtX21vZHVsZV9uYW1lLCBhbGxvd2xpc3RzKToKICAgICB3aXRoIG9wZW4oa2F0aV9pbnN0YWxsZWRfZmlsZXMsICdyJykgYXMga2F0aV9saXN0X2ZpbGUsIFwKLSAgICAgICAgICAgIG9wZW4oc29vbmdfaW5zdGFsbGVkX2ZpbGVzLCAncicpIGFzIHNvb25nX2xpc3RfZmlsZSwgXAotICAgICAgICAgICAgb3BlbihhbGxvd2xpc3QsICdyJykgYXMgYWxsb3dsaXN0X2ZpbGU6CisgICAgICAgICAgICBvcGVuKHNvb25nX2luc3RhbGxlZF9maWxlcywgJ3InKSBhcyBzb29uZ19saXN0X2ZpbGU6CiAgICAgICAgIGthdGlfZmlsZXMgPSBzZXQoa2F0aV9saXN0X2ZpbGUucmVhZCgpLnNwbGl0KCkpCiAgICAgICAgIHNvb25nX2ZpbGVzID0gc2V0KHNvb25nX2xpc3RfZmlsZS5yZWFkKCkuc3BsaXQoKSkKLSAgICAgICAgYWxsb3dlZF9maWxlcyA9IHNldChmaWx0ZXIobGFtYmRhIHg6IGxlbih4KSwgbWFwKGxhbWJkYSB4OiB4LmxzdHJpcCgpLnNwbGl0KCcjJywxKVswXS5yc3RyaXAoKSAsIGFsbG93bGlzdF9maWxlLnJlYWQoKS5zcGxpdCgnXG4nKSkpKQorCisgICAgYWxsb3dlZF9maWxlcyA9IHNldCgpCisgICAgZm9yIGFsbG93bGlzdCBpbiBhbGxvd2xpc3RzOgorICAgICAgICB3aXRoIG9wZW4oYWxsb3dsaXN0LCAncicpIGFzIGFsbG93bGlzdF9maWxlOgorICAgICAgICAgICAgYWxsb3dlZF9maWxlcy51cGRhdGUoc2V0KGZpbHRlcihsYW1iZGEgeDogbGVuKHgpLCBtYXAobGFtYmRhIHg6IHgubHN0cmlwKCkuc3BsaXQoJyMnLDEpWzBdLnJzdHJpcCgpICwgYWxsb3dsaXN0X2ZpbGUucmVhZCgpLnNwbGl0KCdcbicpKSkpKQogCiAgICAgZGVmIGlzX3Vua25vd25fZGlmZihmaWxlcGF0aCk6Ci0gICAgICAgIHJldHVybiBub3QgZmlsZXBhdGggaW4gYWxsb3dlZF9maWxlcworICAgICAgICByZXR1cm4gZmlsZXBhdGggbm90IGluIGFsbG93ZWRfZmlsZXMKKworICAgIGRlZiBpc191bm5lY2Vzc2FyeV9hbGxvd2xpc3QoZmlsZXBhdGgpOgorICAgICAgICByZXR1cm4gZmlsZXBhdGggbm90IGluIGthdGlfZmlsZXMuc3ltbWV0cmljX2RpZmZlcmVuY2Uoc29vbmdfZmlsZXMpCiAKICAgICB1bmlxdWVfaW5fa2F0aSA9IHNldChmaWx0ZXIoaXNfdW5rbm93bl9kaWZmLCBrYXRpX2ZpbGVzIC0gc29vbmdfZmlsZXMpKQogICAgIHVuaXF1ZV9pbl9zb29uZyA9IHNldChmaWx0ZXIoaXNfdW5rbm93bl9kaWZmLCBzb29uZ19maWxlcyAtIGthdGlfZmlsZXMpKQorICAgIHVubmVjZXNzYXJ5X2FsbG93bGlzdHMgPSBzZXQoZmlsdGVyKGlzX3VubmVjZXNzYXJ5X2FsbG93bGlzdCwgYWxsb3dlZF9maWxlcykpCiAKICAgICBpZiB1bmlxdWVfaW5fa2F0aToKLSAgICAgICAgcHJpbnQoZid7Q09MT1JfRVJST1J9UGxlYXNlIGFkZCBmb2xsb3dpbmcgbW9kdWxlcyBpbnRvIHN5c3RlbSBpbWFnZSBtb2R1bGUge3N5c3RlbV9tb2R1bGVfbmFtZX0ue0NPTE9SX05PUk1BTH0nKQotICAgICAgICBwcmludChmJ3tDT0xPUl9XQVJOSU5HfUtBVEkgb25seSBtb2R1bGUocyk6e0NPTE9SX05PUk1BTH0nKQorICAgICAgICBwcmludCgnJykKKyAgICAgICAgcHJpbnQoZid7Q09MT1JfRVJST1J9TWlzc2luZyByZXF1aXJlZCBtb2R1bGVzIGluIHtzeXN0ZW1fbW9kdWxlX25hbWV9IG1vZHVsZS57Q09MT1JfTk9STUFMfScpCisgICAgICAgIHByaW50KGYnVG8gcmVzb2x2ZSB0aGlzIGlzc3VlLCBwbGVhc2UgYWRkIHRoZSBtb2R1bGVzIHRvIHRoZSBBbmRyb2lkLmJwIGZpbGUgZm9yIHRoZSB7c3lzdGVtX21vZHVsZV9uYW1lfSB0byBpbnN0YWxsIHRoZSBmb2xsb3dpbmcgS0FUSSBvbmx5IGluc3RhbGxlZCBmaWxlcy4nKQorICAgICAgICBwcmludChmJ1lvdSBjYW4gZmluZCB0aGUgY29ycmVjdCBBbmRyb2lkLmJwIGZpbGUgdXNpbmcgdGhlIGNvbW1hbmQgImdvbW9kIHtzeXN0ZW1fbW9kdWxlX25hbWV9Ii4nKQorICAgICAgICBwcmludChmJ3tDT0xPUl9XQVJOSU5HfUtBVEkgb25seSBpbnN0YWxsZWQgZmlsZShzKTp7Q09MT1JfTk9STUFMfScpCiAgICAgICAgIGZvciBpdGVtIGluIHNvcnRlZCh1bmlxdWVfaW5fa2F0aSk6Ci0gICAgICAgICAgICBwcmludChpdGVtKQorICAgICAgICAgICAgcHJpbnQoJyAgJytpdGVtKQogCiAgICAgaWYgdW5pcXVlX2luX3Nvb25nOgotICAgICAgICBpZiB1bmlxdWVfaW5fa2F0aToKLSAgICAgICAgICAgIHByaW50KCcnKQotCi0gICAgICAgIHByaW50KGYne0NPTE9SX0VSUk9SfVBsZWFzZSBhZGQgZm9sbG93aW5nIG1vZHVsZXMgaW50byBidWlsZC9tYWtlL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rLntDT0xPUl9OT1JNQUx9JykKLSAgICAgICAgcHJpbnQoZid7Q09MT1JfV0FSTklOR31Tb29uZyBvbmx5IG1vZHVsZShzKTp7Q09MT1JfTk9STUFMfScpCi0gICAgICAgIGZvciBpdGVtIGluIHNvcnRlZCh1bmlxdWVfaW5fc29vbmcpOgotICAgICAgICAgICAgcHJpbnQoaXRlbSkKLQotICAgIGlmIHVuaXF1ZV9pbl9rYXRpIG9yIHVuaXF1ZV9pbl9zb29uZzoKICAgICAgICAgcHJpbnQoJycpCi0gICAgICAgIHByaW50KGYne0NPTE9SX0VSUk9SfUZBSUxFRDogU3lzdGVtIGltYWdlIGZyb20gS0FUSSBhbmQgU09PTkcgZGlmZmVycyBmcm9tIGluc3RhbGxlZCBmaWxlIGxpc3Que0NPTE9SX05PUk1BTH0nKQorICAgICAgICBwcmludChmJ3tDT0xPUl9FUlJPUn1NaXNzaW5nIHBhY2thZ2VzIGluIGJhc2Vfc3lzdGVtLm1rLntDT0xPUl9OT1JNQUx9JykKKyAgICAgICAgcHJpbnQoJ1BsZWFzZSBhZGQgcGFja2FnZXMgaW50byBidWlsZC9tYWtlL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rIG9yIGJ1aWxkL21ha2UvdG9vbHMvZmlsZWxpc3RkaWZmL2FsbG93bGlzdCB0byBpbnN0YWxsIG9yIHNraXAgdGhlIGZvbGxvd2luZyBTb29uZyBvbmx5IGluc3RhbGxlZCBmaWxlcy4nKQorICAgICAgICBwcmludChmJ3tDT0xPUl9XQVJOSU5HfVNvb25nIG9ubHkgaW5zdGFsbGVkIGZpbGUocyk6e0NPTE9SX05PUk1BTH0nKQorICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQodW5pcXVlX2luX3Nvb25nKToKKyAgICAgICAgICAgIHByaW50KCcgICcraXRlbSkKKworICAgIGlmIHVubmVjZXNzYXJ5X2FsbG93bGlzdHM6CisgICAgICAgIHByaW50KCcnKQorICAgICAgICBwcmludChmJ3tDT0xPUl9FUlJPUn1Vbm5lY2Vzc2FyeSBmaWxlcyBpbiBhbGxvd2xpc3Que0NPTE9SX05PUk1BTH0nKQorICAgICAgICBwcmludCgnUGxlYXNlIHJlbW92ZSB0aGVzZSBlbnRyaWVzIGZyb20gYnVpbGQvbWFrZS90b29scy9maWxlbGlzdGRpZmYvYWxsb3dsaXN0JykKKyAgICAgICAgZm9yIGl0ZW0gaW4gc29ydGVkKHVubmVjZXNzYXJ5X2FsbG93bGlzdHMpOgorICAgICAgICAgICAgcHJpbnQoJyAgJytpdGVtKQorCisKKyAgICBpZiB1bmlxdWVfaW5fa2F0aSBvciB1bmlxdWVfaW5fc29vbmcgb3IgdW5uZWNlc3NhcnlfYWxsb3dsaXN0czoKKyAgICAgICAgcHJpbnQoJycpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKIApAQCAtNTksOCArNzUsOCBAQAogCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgna2F0aV9pbnN0YWxsZWRfZmlsZV9saXN0JykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdzb29uZ19pbnN0YWxsZWRfZmlsZV9saXN0JykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdhbGxvd2xpc3QnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3N5c3RlbV9tb2R1bGVfbmFtZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hbGxvd2xpc3RzJywgbmFyZ3M9JyonLCBkZWZhdWx0PVtdKQogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAKLSAgICBmaW5kX3VuaXF1ZV9pdGVtcyhhcmdzLmthdGlfaW5zdGFsbGVkX2ZpbGVfbGlzdCwgYXJncy5zb29uZ19pbnN0YWxsZWRfZmlsZV9saXN0LCBhcmdzLmFsbG93bGlzdCwgYXJncy5zeXN0ZW1fbW9kdWxlX25hbWUpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICAgIGZpbmRfdW5pcXVlX2l0ZW1zKGFyZ3Mua2F0aV9pbnN0YWxsZWRfZmlsZV9saXN0LCBhcmdzLnNvb25nX2luc3RhbGxlZF9maWxlX2xpc3QsIGFyZ3Muc3lzdGVtX21vZHVsZV9uYW1lLCBhcmdzLmFsbG93bGlzdHMpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvZnNfY29uZmlnL0FuZHJvaWQuYnAgYi90b29scy9mc19jb25maWcvQW5kcm9pZC5icAppbmRleCA2YWE1Mjg5Li5hNWI2ZmQwIDEwMDY0NAotLS0gYS90b29scy9mc19jb25maWcvQW5kcm9pZC5icAorKysgYi90b29scy9mc19jb25maWcvQW5kcm9pZC5icApAQCAtMjc3LDYgKzI3Nyw3IEBACiAgICAgb3V0OiBbIm91dCJdLAogfQogCisvLyBzeXN0ZW0KIGdlbnJ1bGUgewogICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19zeXN0ZW1fZ2VuIiwKICAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKQEAgLTMwNyw2ICszMDgsNyBAQAogICAgIHNyYzogIjpmc19jb25maWdfZmlsZXNfc3lzdGVtX2dlbiIsCiB9CiAKKy8vIHN5c3RlbV9leHQKIGdlbnJ1bGUgewogICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19zeXN0ZW1fZXh0X2dlbiIsCiAgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCkBAIC0zMzcsNiArMzM5LDcgQEAKICAgICBzeXN0ZW1fZXh0X3NwZWNpZmljOiB0cnVlLAogfQogCisvLyBwcm9kdWN0CiBnZW5ydWxlIHsKICAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfcHJvZHVjdF9nZW4iLAogICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLApAQCAtMzY3LDYgKzM3MCw3IEBACiAgICAgcHJvZHVjdF9zcGVjaWZpYzogdHJ1ZSwKIH0KIAorLy8gdmVuZG9yCiBnZW5ydWxlIHsKICAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfdmVuZG9yX2dlbiIsCiAgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCkBAIC0zOTcsNiArNDAxLDcgQEAKICAgICB2ZW5kb3I6IHRydWUsCiB9CiAKKy8vIG9kbQogZ2VucnVsZSB7CiAgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX29kbV9nZW4iLAogICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLApAQCAtNDI3LDQgKzQzMiwyMTQgQEAKICAgICBkZXZpY2Vfc3BlY2lmaWM6IHRydWUsCiB9CiAKLS8vIFRPRE8oaml5b25nKTogYWRkIGZzX2NvbmZpZyBmb3Igb2VtLCBzeXN0ZW1fZGxrbSwgdmVuZG9yX2Rsa20sIG9kbV9kbGttIHBhcnRpdGlvbnMKKy8vIHN5c3RlbV9kbGttCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfc3lzdGVtX2Rsa21fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZGlycyArCisgICAgICAgICItLXBhcnRpdGlvbiBzeXN0ZW1fZGxrbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZGlycyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19kaXJzX3N5c3RlbV9kbGttX2dlbiIsCisgICAgc3lzdGVtX2Rsa21fc3BlY2lmaWM6IHRydWUsCit9CisKK2dlbnJ1bGUgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfc3lzdGVtX2Rsa21fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZmlsZXMgKworICAgICAgICAiLS1wYXJ0aXRpb24gc3lzdGVtX2Rsa20gIiArCisgICAgICAgICIkKGxvY2F0aW9ucyA6dGFyZ2V0X2ZzX2NvbmZpZ19nZW4pIiwKK30KKworcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2ZpbGVzX3N5c3RlbV9kbGttIiwKKyAgICBmaWxlbmFtZTogImZzX2NvbmZpZ19maWxlcyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZGxrbV9nZW4iLAorICAgIHN5c3RlbV9kbGttX3NwZWNpZmljOiB0cnVlLAorfQorCisvLyB2ZW5kb3JfZGxrbQorZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3ZlbmRvcl9kbGttX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2RpcnMgKworICAgICAgICAiLS1wYXJ0aXRpb24gdmVuZG9yX2Rsa20gIiArCisgICAgICAgICIkKGxvY2F0aW9ucyA6dGFyZ2V0X2ZzX2NvbmZpZ19nZW4pIiwKK30KKworcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfdmVuZG9yX2Rsa20iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2RpcnMiLAorICAgIHNyYzogIjpmc19jb25maWdfZGlyc192ZW5kb3JfZGxrbV9nZW4iLAorICAgIHZlbmRvcl9kbGttX3NwZWNpZmljOiB0cnVlLAorfQorCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2ZpbGVzX3ZlbmRvcl9kbGttX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2ZpbGVzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIHZlbmRvcl9kbGttICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc192ZW5kb3JfZGxrbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZmlsZXMiLAorICAgIHNyYzogIjpmc19jb25maWdfZmlsZXNfdmVuZG9yX2Rsa21fZ2VuIiwKKyAgICB2ZW5kb3JfZGxrbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworLy8gb2RtX2Rsa20KK2dlbnJ1bGUgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19vZG1fZGxrbV9nZW4iLAorICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLAorICAgIGNtZDogZnNfY29uZmlnX2NtZF9kaXJzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIG9kbV9kbGttICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX29kbV9kbGttIiwKKyAgICBmaWxlbmFtZTogImZzX2NvbmZpZ19kaXJzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2RpcnNfb2RtX2Rsa21fZ2VuIiwKKyAgICBvZG1fZGxrbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZG1fZGxrbV9nZW4iLAorICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLAorICAgIGNtZDogZnNfY29uZmlnX2NtZF9maWxlcyArCisgICAgICAgICItLXBhcnRpdGlvbiBvZG1fZGxrbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfb2RtX2Rsa20iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2ZpbGVzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2ZpbGVzX29kbV9kbGttX2dlbiIsCisgICAgb2RtX2Rsa21fc3BlY2lmaWM6IHRydWUsCit9CisKKy8vIG9lbQorZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX29lbV9nZW4iLAorICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLAorICAgIGNtZDogZnNfY29uZmlnX2NtZF9kaXJzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIG9lbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19vZW0iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2RpcnMiLAorICAgIHNyYzogIjpmc19jb25maWdfZGlyc19vZW1fZ2VuIiwKKyAgICBvZW1fc3BlY2lmaWM6IHRydWUsCit9CisKK2dlbnJ1bGUgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfb2VtX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2ZpbGVzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIG9lbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfb2VtIiwKKyAgICBmaWxlbmFtZTogImZzX2NvbmZpZ19maWxlcyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19maWxlc19vZW1fZ2VuIiwKKyAgICBvZW1fc3BlY2lmaWM6IHRydWUsCit9CisKKy8vIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlcyBmb3IgZWFjaCBwYXJ0aXRpb24uCisvLyBBZGQgZnNfY29uZmlnX2RpcnMgdG8gUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCitwaG9ueSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzIiwKKyAgICByZXF1aXJlZDogWworICAgICAgICAiZnNfY29uZmlnX2RpcnNfc3lzdGVtIiwKKyAgICAgICAgImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9leHQiLAorICAgICAgICAiZnNfY29uZmlnX2RpcnNfcHJvZHVjdCIsCisgICAgICAgICJmc19jb25maWdfZGlyc19ub25zeXN0ZW0iLAorICAgIF0sCit9CisKKy8vIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZXMgZm9yIGVhY2ggcGFydGl0aW9uLgorLy8gQWRkIGZzX2NvbmZpZ19maWxlcyB0byBQUk9EVUNUX1BBQ0tBR0VTIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZS4KK3Bob255IHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2ZpbGVzIiwKKyAgICByZXF1aXJlZDogWworICAgICAgICAiZnNfY29uZmlnX2ZpbGVzX3N5c3RlbSIsCisgICAgICAgICJmc19jb25maWdfZmlsZXNfc3lzdGVtX2V4dCIsCisgICAgICAgICJmc19jb25maWdfZmlsZXNfcHJvZHVjdCIsCisgICAgICAgICJmc19jb25maWdfZmlsZXNfbm9uc3lzdGVtIiwKKyAgICBdLAorfQorCisvLyBHZW5lcmF0ZSB0aGUgPHA+L2V0Yy9mc19jb25maWdfZGlycyBiaW5hcnkgZmlsZXMgZm9yIGFsbCBlbmFibGVkIHBhcnRpdGlvbnMKKy8vIGV4Y2x1ZGluZyAvc3lzdGVtLCAvc3lzdGVtX2V4dCBhbmQgL3Byb2R1Y3QuIEFkZCBmc19jb25maWdfZGlyc19ub25zeXN0ZW0gdG8KKy8vIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgorcGhvbnkgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19ub25zeXN0ZW0iLAorICAgIHJlcXVpcmVkOiBbXSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJ2ZW5kb3IiKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZGlyc192ZW5kb3IiXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJvZW0iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZGlyc19vZW0iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJvZG0iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZGlyc19vZG0iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJ2ZW5kb3JfZGxrbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX3ZlbmRvcl9kbGttIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAib2RtX2Rsa20iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZGlyc19vZG1fZGxrbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgInN5c3RlbV9kbGttIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2RpcnNfc3lzdGVtX2Rsa20iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSwKK30KKworLy8gR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlcyBmb3IgYWxsIGVuYWJsZWQgcGFydGl0aW9ucworLy8gZXhjbHVkaW5nIC9zeXN0ZW0sIC9zeXN0ZW1fZXh0IGFuZCAvcHJvZHVjdC4gQWRkIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0gdG8KKy8vIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgorcGhvbnkgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfbm9uc3lzdGVtIiwKKyAgICByZXF1aXJlZDogW10gKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAidmVuZG9yIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2ZpbGVzX3ZlbmRvciJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9lbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19maWxlc19vZW0iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJvZG0iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZmlsZXNfb2RtIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAidmVuZG9yX2Rsa20iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZmlsZXNfdmVuZG9yX2Rsa20iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJvZG1fZGxrbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19maWxlc19vZG1fZGxrbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgInN5c3RlbV9kbGttIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2ZpbGVzX3N5c3RlbV9kbGttIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSksCit9CmRpZmYgLS1naXQgYS90b29scy9mc19jb25maWcvQW5kcm9pZC5tayBiL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGMzNjI2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLUxPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKLQotIyBPbmUgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaCBmaWxlIGJ5IHVzaW5nIFRBUkdFVF9GU19DT05GSUdfR0VOLgotIyAgIFNldCBUQVJHRVRfRlNfQ09ORklHX0dFTiB0byBjb250YWluIGEgbGlzdCBvZiBpbnRlcm1lZGlhdGUgZm9ybWF0IGZpbGVzCi0jICAgZm9yIGdlbmVyYXRpbmcgdGhlIGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaCBmaWxlLgotIwotIyBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgUkVBRE1FCi0KLWlmbmVxICgkKHdpbGRjYXJkICQoVEFSR0VUX0RFVklDRV9ESVIpL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaCksKQotJChlcnJvciBVc2luZyAkKFRBUkdFVF9ERVZJQ0VfRElSKS9hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnLmggaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBUQVJHRVRfRlNfQ09ORklHX0dFTiBpbnN0ZWFkKQotZW5kaWYKLQotYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZyA6PSBzeXN0ZW0vY29yZS9saWJjdXRpbHMvaW5jbHVkZS9wcml2YXRlL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaAotY2FwYWJpbGl0eV9oZWFkZXIgOj0gYmlvbmljL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FwYWJpbGl0eS5oCi0KLSMgTGlzdCBvZiBzdXBwb3J0ZWQgdmVuZG9yLCBvZW0sIG9kbSwgdmVuZG9yX2Rsa20sIG9kbV9kbGttLCBhbmQgc3lzdGVtX2Rsa20gUGFydGl0aW9ucwotZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0IDo9ICQoc3RyaXAgXAotICAkKGlmICQoQk9BUkRfVVNFU19WRU5ET1JJTUFHRSkkKEJPQVJEX1ZFTkRPUklNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHZlbmRvcikgXAotICAkKGlmICQoQk9BUkRfVVNFU19PRU1JTUFHRSkkKEJPQVJEX09FTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLG9lbSkgXAotICAkKGlmICQoQk9BUkRfVVNFU19PRE1JTUFHRSkkKEJPQVJEX09ETUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLG9kbSkgXAotICAkKGlmICQoQk9BUkRfVVNFU19WRU5ET1JfRExLTUlNQUdFKSQoQk9BUkRfVkVORE9SX0RMS01JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSx2ZW5kb3JfZGxrbSkgXAotICAkKGlmICQoQk9BUkRfVVNFU19PRE1fRExLTUlNQUdFKSQoQk9BUkRfT0RNX0RMS01JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSxvZG1fZGxrbSkgXAotICAkKGlmICQoQk9BUkRfVVNFU19TWVNURU1fRExLTUlNQUdFKSQoQk9BUkRfU1lTVEVNX0RMS01JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSxzeXN0ZW1fZGxrbSkgXAotKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlcyBmb3IgZWFjaCBwYXJ0aXRpb24uCi0jIEFkZCBmc19jb25maWdfZGlycyB0byBQUk9EVUNUX1BBQ0tBR0VTIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZS4KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2RpcnMKLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSBcCi0gIGZzX2NvbmZpZ19kaXJzX3N5c3RlbSBcCi0gIGZzX2NvbmZpZ19kaXJzX3N5c3RlbV9leHQgXAotICBmc19jb25maWdfZGlyc19wcm9kdWN0IFwKLSAgZnNfY29uZmlnX2RpcnNfbm9uc3lzdGVtCi1pbmNsdWRlICQoQlVJTERfUEhPTllfUEFDS0FHRSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgPHA+L2V0Yy9mc19jb25maWdfZmlsZXMgYmluYXJ5IGZpbGVzIGZvciBlYWNoIHBhcnRpdGlvbi4KLSMgQWRkIGZzX2NvbmZpZ19maWxlcyB0byBQUk9EVUNUX1BBQ0tBR0VTIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZS4KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX1JFUVVJUkVEX01PRFVMRVMgOj0gXAotICBmc19jb25maWdfZmlsZXNfc3lzdGVtIFwKLSAgZnNfY29uZmlnX2ZpbGVzX3N5c3RlbV9leHQgXAotICBmc19jb25maWdfZmlsZXNfcHJvZHVjdCBcCi0gIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0KLWluY2x1ZGUgJChCVUlMRF9QSE9OWV9QQUNLQUdFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlcyBmb3IgYWxsIGVuYWJsZWQgcGFydGl0aW9ucwotIyBleGNsdWRpbmcgL3N5c3RlbSwgL3N5c3RlbV9leHQgYW5kIC9wcm9kdWN0LiBBZGQgZnNfY29uZmlnX2RpcnNfbm9uc3lzdGVtIHRvCi0jIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZGlyc19ub25zeXN0ZW0KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSAkKGZvcmVhY2ggdCwkKGZzX2NvbmZpZ19nZW5lcmF0ZV9leHRyYV9wYXJ0aXRpb25fbGlzdCksZnNfY29uZmlnX2RpcnNfJCh0KSkKLWluY2x1ZGUgJChCVUlMRF9QSE9OWV9QQUNLQUdFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZXMgZm9yIGFsbCBlbmFibGVkIHBhcnRpdGlvbnMKLSMgZXhjbHVkaW5nIC9zeXN0ZW0sIC9zeXN0ZW1fZXh0IGFuZCAvcHJvZHVjdC4gQWRkIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0gdG8KLSMgUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSAkKGZvcmVhY2ggdCwkKGZzX2NvbmZpZ19nZW5lcmF0ZV9leHRyYV9wYXJ0aXRpb25fbGlzdCksZnNfY29uZmlnX2ZpbGVzXyQodCkpCi1pbmNsdWRlICQoQlVJTERfUEhPTllfUEFDS0FHRSkKLQotaWZuZXEgKCQoZmlsdGVyIG9lbSwkKGZzX2NvbmZpZ19nZW5lcmF0ZV9leHRyYV9wYXJ0aXRpb25fbGlzdCkpLCkKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIG9lbS9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19kaXJzIG9yIGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSB0byBQUk9EVUNUX1BBQ0tBR0VTCi0jIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZGlyc19vZW0KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19kaXJzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0VNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiBvZW0gXAotCSAgIC0tZGlycyBcCi0JICAgLS1vdXRfZmlsZSAkQCBcCi0JICAgJChvciAkKFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4pLC9kZXYvbnVsbCkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgb2VtL2V0Yy9mc19jb25maWdfZmlsZXMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19maWxlcyBvciBmc19jb25maWdfZmlsZXNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMKLSMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19maWxlc19vZW0KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19maWxlcwotTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX09FTSkvZXRjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9GU19IRFIgOj0gJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfQ0FQX0hEUiA6PSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOIDo9ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvZnNfY29uZmlnX2dlbmVyYXRvci5weSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQ8IGZzY29uZmlnIFwKLQkgICAtLWFpZC1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfRlNfSERSKSBcCi0JICAgLS1jYXBhYmlsaXR5LWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSKSBcCi0JICAgLS1wYXJ0aXRpb24gb2VtIFwKLQkgICAtLWZpbGVzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi1lbmRpZgotCi1pZm5lcSAoJChmaWx0ZXIgdmVuZG9yX2Rsa20sJChmc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QpKSwpCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSB2ZW5kb3JfZGxrbS9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19kaXJzIG9yIGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSB0byBQUk9EVUNUX1BBQ0tBR0VTIGluCi0jIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZGlyc192ZW5kb3JfZGxrbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2RpcnMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9WRU5ET1JfRExLTSkvZXRjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9GU19IRFIgOj0gJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfQ0FQX0hEUiA6PSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOIDo9ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvZnNfY29uZmlnX2dlbmVyYXRvci5weSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQ8IGZzY29uZmlnIFwKLQkgICAtLWFpZC1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfRlNfSERSKSBcCi0JICAgLS1jYXBhYmlsaXR5LWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSKSBcCi0JICAgLS1wYXJ0aXRpb24gdmVuZG9yX2Rsa20gXAotCSAgIC0tZGlycyBcCi0JICAgLS1vdXRfZmlsZSAkQCBcCi0JICAgJChvciAkKFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4pLC9kZXYvbnVsbCkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgdmVuZG9yX2Rsa20vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIG9yIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUyBpbgotIyB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX3ZlbmRvcl9kbGttCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSBmc19jb25maWdfZmlsZXMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9WRU5ET1JfRExLTSkvZXRjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9GU19IRFIgOj0gJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfQ0FQX0hEUiA6PSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOIDo9ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvZnNfY29uZmlnX2dlbmVyYXRvci5weSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQ8IGZzY29uZmlnIFwKLQkgICAtLWFpZC1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfRlNfSERSKSBcCi0JICAgLS1jYXBhYmlsaXR5LWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSKSBcCi0JICAgLS1wYXJ0aXRpb24gdmVuZG9yX2Rsa20gXAotCSAgIC0tZmlsZXMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLWVuZGlmCi0KLWlmbmVxICgkKGZpbHRlciBvZG1fZGxrbSwkKGZzX2NvbmZpZ19nZW5lcmF0ZV9leHRyYV9wYXJ0aXRpb25fbGlzdCkpLCkKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIG9kbV9kbGttL2V0Yy9mc19jb25maWdfZGlycyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2RpcnMgb3IgZnNfY29uZmlnX2RpcnNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMKLSMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX29kbV9kbGttCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSBmc19jb25maWdfZGlycwotTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX09ETV9ETEtNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiBvZG1fZGxrbSBcCi0JICAgLS1kaXJzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSBvZG1fZGxrbS9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlIGZvciB0aGUgdGFyZ2V0Ci0jIEFkZCBmc19jb25maWdfZmlsZXMgb3IgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0byBQUk9EVUNUX1BBQ0tBR0VTCi0jIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZmlsZXNfb2RtX2Rsa20KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19maWxlcwotTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX09ETV9ETEtNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiBvZG1fZGxrbSBcCi0JICAgLS1maWxlcyBcCi0JICAgLS1vdXRfZmlsZSAkQCBcCi0JICAgJChvciAkKFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4pLC9kZXYvbnVsbCkKLQotZW5kaWYKLQotaWZuZXEgKCQoZmlsdGVyIHN5c3RlbV9kbGttLCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSksKQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgc3lzdGVtX2Rsa20vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlIGZvciB0aGUgdGFyZ2V0Ci0jIEFkZCBmc19jb25maWdfZGlycyBvciBmc19jb25maWdfZGlyc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2RpcnNfc3lzdGVtX2Rsa20KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19kaXJzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfU1lTVEVNX0RMS00pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIHN5c3RlbV9kbGttIFwKLQkgICAtLWRpcnMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIHN5c3RlbV9kbGttL2V0Yy9mc19jb25maWdfZmlsZXMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19maWxlcyBvciBmc19jb25maWdfZmlsZXNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMKLSMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZGxrbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2ZpbGVzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfU1lTVEVNX0RMS00pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIHN5c3RlbV9kbGttIFwKLQkgICAtLWZpbGVzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi1lbmRpZgotCi1hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnIDo9Ci1jYXBhYmlsaXR5X2hlYWRlciA6PQotZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0IDo9CmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LmdvIGIvdG9vbHMvaWRlX3F1ZXJ5L2lkZV9xdWVyeS5nbwppbmRleCAyM2M3YWJkLi5jN2NmNWVkIDEwMDY0NAotLS0gYS90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LmdvCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9pZGVfcXVlcnkuZ28KQEAgLTI5MywxMSArMjkzLDE5IEBACiAvLyBJZiBhIGZpbGUgaXMgY292ZXJlZCBieSBtdWx0aXBsZSBtb2R1bGVzLCB0aGUgZmlyc3QgbW9kdWxlIGlzIHJldHVybmVkLgogZnVuYyBmaW5kSmF2YU1vZHVsZXMocGF0aHMgW11zdHJpbmcsIG1vZHVsZXMgbWFwW3N0cmluZ10qamF2YU1vZHVsZSkgbWFwW3N0cmluZ11zdHJpbmcgewogCXJldCA6PSBtYWtlKG1hcFtzdHJpbmddc3RyaW5nKQotCWZvciBuYW1lLCBtb2R1bGUgOj0gcmFuZ2UgbW9kdWxlcyB7CisJLy8gQSBmaWxlIG1heSBiZSBwYXJ0IG9mIG11bHRpcGxlIG1vZHVsZXMuIFRvIG1ha2UgdGhlIHJlc3VsdCBkZXRlcm1pbmlzdGljLAorCS8vIGNoZWNrIHRoZSBtb2R1bGVzIGluIHNvcnRlZCBvcmRlci4KKwlrZXlzIDo9IG1ha2UoW11zdHJpbmcsIDAsIGxlbihtb2R1bGVzKSkKKwlmb3IgbmFtZSA6PSByYW5nZSBtb2R1bGVzIHsKKwkJa2V5cyA9IGFwcGVuZChrZXlzLCBuYW1lKQorCX0KKwlzbGljZXMuU29ydChrZXlzKQorCWZvciBfLCBuYW1lIDo9IHJhbmdlIGtleXMgewogCQlpZiBzdHJpbmdzLkhhc1N1ZmZpeChuYW1lLCAiLmltcGwiKSB7CiAJCQljb250aW51ZQogCQl9CiAKKwkJbW9kdWxlIDo9IG1vZHVsZXNbbmFtZV0KIAkJZm9yIGksIHAgOj0gcmFuZ2UgcGF0aHMgewogCQkJaWYgc2xpY2VzLkNvbnRhaW5zKG1vZHVsZS5TcmNzLCBwKSB7CiAJCQkJcmV0W3BdID0gbmFtZQpAQCAtMzQxLDYgKzM0OSw4IEBACiAJCQlJZDogICAgICAgICAgICAgIG1vZHVsZU5hbWUsCiAJCQlMYW5ndWFnZTogICAgICAgIHBiLkxhbmd1YWdlX0xBTkdVQUdFX0pBVkEsCiAJCQlTb3VyY2VGaWxlUGF0aHM6IG0uU3JjcywKKwkJCUdlbmVyYXRlZEZpbGVzOiAgZ2VuRmlsZXMoZW52LCBtKSwKKwkJCURlcGVuZGVuY3lJZHM6ICAgbS5EZXBzLAogCQl9CiAJCXVuaXRzQnlJZFt1LklkXSA9IHUKIApAQCAtMzU1LDE0ICszNjUsMTEgQEAKIAkJCQljb250aW51ZQogCQkJfQogCi0JCQl2YXIgcGF0aHMgW11zdHJpbmcKLQkJCXBhdGhzID0gYXBwZW5kKHBhdGhzLCBtb2QuU3Jjcy4uLikKLQkJCXBhdGhzID0gYXBwZW5kKHBhdGhzLCBtb2QuU3JjSmFycy4uLikKLQkJCXBhdGhzID0gYXBwZW5kKHBhdGhzLCBtb2QuSmFycy4uLikKIAkJCXVuaXRzQnlJZFtuYW1lXSA9ICZwYi5CdWlsZGFibGVVbml0ewogCQkJCUlkOiAgICAgICAgICAgICAgbmFtZSwKIAkJCQlTb3VyY2VGaWxlUGF0aHM6IG1vZC5TcmNzLAotCQkJCUdlbmVyYXRlZEZpbGVzOiAgZ2VuRmlsZXMoZW52LCBwYXRocyksCisJCQkJR2VuZXJhdGVkRmlsZXM6ICBnZW5GaWxlcyhlbnYsIG1vZCksCisJCQkJRGVwZW5kZW5jeUlkczogICBtb2QuRGVwcywKIAkJCX0KIAogCQkJZm9yIF8sIGQgOj0gcmFuZ2UgbW9kLkRlcHMgewpAQCAtMzc5LDggKzM4NiwxMyBAQAogfQogCiAvLyBnZW5GaWxlcyByZXR1cm5zIHRoZSBnZW5lcmF0ZWQgZmlsZXMgKHBhdGhzIHRoYXQgc3RhcnQgd2l0aCBvdXREaXIvKSBmb3IgdGhlCi0vLyBnaXZlbiBwYXRocy4gR2VuZXJhdGVkIGZpbGVzIHRoYXQgZG8gbm90IGV4aXN0IGFyZSBpZ25vcmVkLgotZnVuYyBnZW5GaWxlcyhlbnYgRW52LCBwYXRocyBbXXN0cmluZykgW10qcGIuR2VuZXJhdGVkRmlsZSB7CisvLyBnaXZlbiBtb2R1bGUuIEdlbmVyYXRlZCBmaWxlcyB0aGF0IGRvIG5vdCBleGlzdCBhcmUgaWdub3JlZC4KK2Z1bmMgZ2VuRmlsZXMoZW52IEVudiwgbW9kICpqYXZhTW9kdWxlKSBbXSpwYi5HZW5lcmF0ZWRGaWxlIHsKKwl2YXIgcGF0aHMgW11zdHJpbmcKKwlwYXRocyA9IGFwcGVuZChwYXRocywgbW9kLlNyY3MuLi4pCisJcGF0aHMgPSBhcHBlbmQocGF0aHMsIG1vZC5TcmNKYXJzLi4uKQorCXBhdGhzID0gYXBwZW5kKHBhdGhzLCBtb2QuSmFycy4uLikKKwogCXByZWZpeCA6PSBlbnYuT3V0RGlyICsgIi8iCiAJdmFyIHJldCBbXSpwYi5HZW5lcmF0ZWRGaWxlCiAJZm9yIF8sIHAgOj0gcmFuZ2UgcGF0aHMgewpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L2lkZV9xdWVyeS5zaCBiL3Rvb2xzL2lkZV9xdWVyeS9pZGVfcXVlcnkuc2gKaW5kZXggNmY5YjBjNC4uOGRmZmZjMSAxMDA3NTUKLS0tIGEvdG9vbHMvaWRlX3F1ZXJ5L2lkZV9xdWVyeS5zaAorKysgYi90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LnNoCkBAIC0xOSw3ICsxOSw3IEBACiByZXF1aXJlX3RvcAogCiAjIEVuc3VyZSBjb2dzZXR1cCAob3V0LyB3aWxsIGJlIHN5bWxpbmsgb3V0c2lkZSB0aGUgcmVwbykKLS4gJHtUT1B9L2J1aWxkL21ha2UvY29nc2V0dXAuc2gKK3NldHVwX2NvZ19lbnZfaWZfbmVlZGVkCiAKIGNhc2UgJCh1bmFtZSAtcykgaW4KICAgICBMaW51eCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0IGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2lkZV9xdWVyeS5vdXQKaW5kZXggY2Q3Y2U2ZC4uYmU0OGRhMSAxMDA2NDQKLS0tIGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2lkZV9xdWVyeS5vdXQKKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2lkZV9xdWVyeS5vdXQKQEAgLTEsNyArMSw5IEBACiAKLQNvdXQSlmEKLThidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYxo4cHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MjI4MTcvYmluL2NsYW5nKysaBy1tdGh1bWIaAy1PcxoULWZvbWl0LWZyYW1lLXBvaW50ZXIaBi1tbGx2bRoZLWVuYWJsZS1zaHJpbmstd3JhcD1mYWxzZRoDLU8yGgUtV2FsbBoHLVdleHRyYRoLLVdpbml0LXNlbGYaDy1XcG9pbnRlci1hcml0aBoYLVd1bmd1YXJkZWQtYXZhaWxhYmlsaXR5GhEtV2Vycm9yPWRhdGUtdGltZRoWLVdlcnJvcj1pbnQtY29udmVyc2lvbhoTLVdlcnJvcj1wcmFnbWEtcGFjaxomLVdlcnJvcj1wcmFnbWEtcGFjay1zdXNwaWNpb3VzLWluY2x1ZGUaGC1XZXJyb3I9c2l6ZW9mLWFycmF5LWRpdhoXLVdlcnJvcj1zdHJpbmctcGx1cy1pbnQaJy1XZXJyb3I9dW5yZWFjaGFibGUtY29kZS1sb29wLWluY3JlbWVudBoiLVduby1lcnJvcj1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucxoTLVduby1jOTktZGVzaWduYXRvchoZLVduby1nbnUtZm9sZGluZy1jb25zdGFudBoiLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZRocLVduby1lcnJvcj1yZW9yZGVyLWluaXQtbGlzdBoWLVduby1yZW9yZGVyLWluaXQtbGlzdBoRLVduby1zaWduLWNvbXBhcmUaCy1Xbm8tdW51c2VkGgktREFORFJPSUQaCC1ETkRFQlVHGgctVURFQlVHGigtRF9fY29tcGlsZXJfb2Zmc2V0b2Y9X19idWlsdGluX29mZnNldG9mGiotRF9fQU5EUk9JRF9VTkFWQUlMQUJMRV9TWU1CT0xTX0FSRV9XRUFLX18aCS1mYWRkcnNpZxoZLWZkZWJ1Zy1kZWZhdWx0LXZlcnNpb249NRoTLWZjb2xvci1kaWFnbm9zdGljcxoRLWZmcC1jb250cmFjdD1vZmYaDy1mbm8tZXhjZXB0aW9ucxoULWZuby1zdHJpY3QtYWxpYXNpbmcaEi1mbWVzc2FnZS1sZW5ndGg9MBojLWZuby1yZWxheGVkLXRlbXBsYXRlLXRlbXBsYXRlLWFyZ3MaFy1nc2ltcGxlLXRlbXBsYXRlLW5hbWVzGggtZ3o9enN0ZBoWLW5vLWNhbm9uaWNhbC1wcmVmaXhlcxoRLVduby1lcnJvcj1mb3JtYXQaIi1mZGVidWctcHJlZml4LW1hcD0vcHJvYy9zZWxmL2N3ZD0aHC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8aAi1nGhMtZmZ1bmN0aW9uLXNlY3Rpb25zGg8tZmRhdGEtc2VjdGlvbnMaEC1mbm8tc2hvcnQtZW51bXMaDy1mdW53aW5kLXRhYmxlcxoYLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nGhEtV2EsLS1ub2V4ZWNzdGFjaxoTLURfRk9SVElGWV9TT1VSQ0U9MhoTLVdzdHJpY3QtYWxpYXNpbmc9MhoTLVdlcnJvcj1yZXR1cm4tdHlwZRoYLVdlcnJvcj1ub24tdmlydHVhbC1kdG9yGg8tV2Vycm9yPWFkZHJlc3MaFi1XZXJyb3I9c2VxdWVuY2UtcG9pbnQaFy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5Ggwtbm9zdGRsaWJpbmMaGi1mZGVidWctaW5mby1mb3ItcHJvZmlsaW5nGgwtbXNvZnQtZmxvYXQaDi1tYXJjaD1hcm12Ny1hGhItbWZsb2F0LWFiaT1zb2Z0ZnAaCi0tbWZwdT1uZW9uGi8tSWJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcBqzAS1Jb3V0L3Nvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8vYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwGoUBLUlvdXQvc29vbmcvLmludGVybWVkaWF0ZXMvYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2lkZV9xdWVyeV9wcm9iZXJzY3JpcHRfY2MvYW5kcm9pZF9hcm1fYXJtdjctYS1uZW9uL2dlbi9wcm90bxoULURfX0xJQkNfQVBJX189MTAwMDAaFC1EX19MSUJNX0FQSV9fPTEwMDAwGhUtRF9fTElCRExfQVBJX189MTAwMDAaFy1JZXh0ZXJuYWwvcHJvdG9idWYvc3JjGlktSXByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTIyODE3L2FuZHJvaWRfbGliYysrL3BsYXRmb3JtL2FybS9pbmNsdWRlL2MrKy92MRo9LUlwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUyMjgxNy9pbmNsdWRlL2MrKy92MRogLUliaW9uaWMvbGliYy9hc3luY19zYWZlL2luY2x1ZGUaHy1Jc3lzdGVtL2xvZ2dpbmcvbGlibG9nL2luY2x1ZGUaJy1JYmlvbmljL2xpYmMvc3lzdGVtX3Byb3BlcnRpZXMvaW5jbHVkZRo8LUlzeXN0ZW0vY29yZS9wcm9wZXJ0eV9zZXJ2aWNlL2xpYnByb3BlcnR5aW5mb3BhcnNlci9pbmNsdWRlGggtaXN5c3RlbRoTYmlvbmljL2xpYmMvaW5jbHVkZRoILWlzeXN0ZW0aH2Jpb25pYy9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0aCC1pc3lzdGVtGhdiaW9uaWMvbGliYy9rZXJuZWwvdWFwaRoILWlzeXN0ZW0aH2Jpb25pYy9saWJjL2tlcm5lbC9hbmRyb2lkL3Njc2kaCC1pc3lzdGVtGh9iaW9uaWMvbGliYy9rZXJuZWwvYW5kcm9pZC91YXBpGgctdGFyZ2V0Gh1hcm12N2EtbGludXgtYW5kcm9pZGVhYmkxMDAwMBoQLURBTkRST0lEX1NUUklDVBoFLWZQSUUaBy1XZXJyb3IaFS1Xbm8tdW51c2VkLXBhcmFtZXRlchoZLURHT09HTEVfUFJPVE9CVUZfTk9fUlRUSRoWLVdpbXBsaWNpdC1mYWxsdGhyb3VnaBoqLURfTElCQ1BQX0VOQUJMRV9USFJFQURfU0FGRVRZX0FOTk9UQVRJT05TGhUtV25vLWdudS1pbmNsdWRlLW5leHQaGy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbhoGLW1sbHZtGhktZW5hYmxlLXNocmluay13cmFwPWZhbHNlGgwtc3RkPWdudSsrMjAaCS1mbm8tcnR0aRoVLUlzeXN0ZW0vY29yZS9pbmNsdWRlGh8tSXN5c3RlbS9sb2dnaW5nL2xpYmxvZy9pbmNsdWRlGhwtSXN5c3RlbS9tZWRpYS9hdWRpby9pbmNsdWRlGh4tSWhhcmR3YXJlL2xpYmhhcmR3YXJlL2luY2x1ZGUaJS1JaGFyZHdhcmUvbGliaGFyZHdhcmVfbGVnYWN5L2luY2x1ZGUaFi1JaGFyZHdhcmUvcmlsL2luY2x1ZGUaGy1JZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZRoiLUlmcmFtZXdvcmtzL25hdGl2ZS9vcGVuZ2wvaW5jbHVkZRoXLUlmcmFtZXdvcmtzL2F2L2luY2x1ZGUaFi1XZXJyb3I9Ym9vbC1vcGVyYXRpb24aIC1XZXJyb3I9Zm9ybWF0LWluc3VmZmljaWVudC1hcmdzGiUtV2Vycm9yPWltcGxpY2l0LWludC1mbG9hdC1jb252ZXJzaW9uGhstV2Vycm9yPWludC1pbi1ib29sLWNvbnRleHQaGy1XZXJyb3I9aW50LXRvLXBvaW50ZXItY2FzdBobLVdlcnJvcj1wb2ludGVyLXRvLWludC1jYXN0GhctV2Vycm9yPXhvci11c2VkLWFzLXBvdxoeLVduby12b2lkLXBvaW50ZXItdG8tZW51bS1jYXN0Gh0tV25vLXZvaWQtcG9pbnRlci10by1pbnQtY2FzdBoYLVduby1wb2ludGVyLXRvLWludC1jYXN0GhYtV2Vycm9yPWZvcnRpZnktc291cmNlGhQtV25vLXVudXNlZC12YXJpYWJsZRofLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycxoTLVduby1wYWNrZWQtbm9uLXBvZBocLVdlcnJvcj1hZGRyZXNzLW9mLXRlbXBvcmFyeRorLVdlcnJvcj1pbmNvbXBhdGlibGUtZnVuY3Rpb24tcG9pbnRlci10eXBlcxoYLVdlcnJvcj1udWxsLWRlcmVmZXJlbmNlGhMtV2Vycm9yPXJldHVybi10eXBlGiItV25vLXRhdXRvbG9naWNhbC1jb25zdGFudC1jb21wYXJlGiQtV25vLXRhdXRvbG9naWNhbC10eXBlLWxpbWl0LWNvbXBhcmUaIi1Xbm8taW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24aIS1Xbm8tdGF1dG9sb2dpY2FsLW92ZXJsYXAtY29tcGFyZRoULVduby1kZXByZWNhdGVkLWNvcHkaGS1Xbm8tcmFuZ2UtbG9vcC1jb25zdHJ1Y3QaIi1Xbm8temVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnQaKS1Xbm8tZGVwcmVjYXRlZC1hbm9uLWVudW0tZW51bS1jb252ZXJzaW9uGiQtV25vLWRlcHJlY2F0ZWQtZW51bS1lbnVtLWNvbnZlcnNpb24aFS1Xbm8tcGVzc2ltaXppbmctbW92ZRoeLVduby1ub24tYy10eXBlZGVmLWZvci1saW5rYWdlGhMtV25vLWFsaWduLW1pc21hdGNoGiItV25vLWVycm9yPXVudXNlZC1idXQtc2V0LXZhcmlhYmxlGiMtV25vLWVycm9yPXVudXNlZC1idXQtc2V0LXBhcmFtZXRlchoeLVduby1lcnJvcj1kZXByZWNhdGVkLWJ1aWx0aW5zGhUtV25vLWVycm9yPWRlcHJlY2F0ZWQaMi1Xbm8tZXJyb3I9c2luZ2xlLWJpdC1iaXRmaWVsZC1jb25zdGFudC1jb252ZXJzaW9uGiQtV25vLWVycm9yPWVudW0tY29uc3RleHByLWNvbnZlcnNpb24aGy1Xbm8tZXJyb3I9aW52YWxpZC1vZmZzZXRvZhomLVduby1kZXByZWNhdGVkLWR5bmFtaWMtZXhjZXB0aW9uLXNwZWMaOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjItU/CisDb3V0MngKKzhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYxICCAEaOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjOpciCis4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MQAho4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MiOHByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTMwNTY3L2Jpbi9jbGFuZysrIgwtbm9zdGRsaWJpbmMiBy1tdGh1bWIiAy1PcyIULWZvbWl0LWZyYW1lLXBvaW50ZXIiBi1tbGx2bSIZLWVuYWJsZS1zaHJpbmstd3JhcD1mYWxzZSIDLU8yIgUtV2FsbCIHLVdleHRyYSILLVdpbml0LXNlbGYiDy1XcG9pbnRlci1hcml0aCIYLVd1bmd1YXJkZWQtYXZhaWxhYmlsaXR5IhEtV2Vycm9yPWRhdGUtdGltZSIWLVdlcnJvcj1pbnQtY29udmVyc2lvbiITLVdlcnJvcj1wcmFnbWEtcGFjayImLVdlcnJvcj1wcmFnbWEtcGFjay1zdXNwaWNpb3VzLWluY2x1ZGUiGC1XZXJyb3I9c2l6ZW9mLWFycmF5LWRpdiIXLVdlcnJvcj1zdHJpbmctcGx1cy1pbnQiJy1XZXJyb3I9dW5yZWFjaGFibGUtY29kZS1sb29wLWluY3JlbWVudCIiLVduby1lcnJvcj1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyITLVduby1jMjMtZXh0ZW5zaW9ucyITLVduby1jOTktZGVzaWduYXRvciIZLVduby1nbnUtZm9sZGluZy1jb25zdGFudCIiLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZSIcLVduby1lcnJvcj1yZW9yZGVyLWluaXQtbGlzdCIWLVduby1yZW9yZGVyLWluaXQtbGlzdCIRLVduby1zaWduLWNvbXBhcmUiCy1Xbm8tdW51c2VkIgktREFORFJPSUQiCC1ETkRFQlVHIgctVURFQlVHIigtRF9fY29tcGlsZXJfb2Zmc2V0b2Y9X19idWlsdGluX29mZnNldG9mIiotRF9fQU5EUk9JRF9VTkFWQUlMQUJMRV9TWU1CT0xTX0FSRV9XRUFLX18iCS1mYWRkcnNpZyIZLWZkZWJ1Zy1kZWZhdWx0LXZlcnNpb249NSITLWZjb2xvci1kaWFnbm9zdGljcyIRLWZmcC1jb250cmFjdD1vZmYiDy1mbm8tZXhjZXB0aW9ucyIULWZuby1zdHJpY3QtYWxpYXNpbmciEi1mbWVzc2FnZS1sZW5ndGg9MCIXLWdzaW1wbGUtdGVtcGxhdGUtbmFtZXMiCC1nej16c3RkIhYtbm8tY2Fub25pY2FsLXByZWZpeGVzIiItZmRlYnVnLXByZWZpeC1tYXA9L3Byb2Mvc2VsZi9jd2Q9IhwtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIgItZyITLWZmdW5jdGlvbi1zZWN0aW9ucyIPLWZkYXRhLXNlY3Rpb25zIhAtZm5vLXNob3J0LWVudW1zIg8tZnVud2luZC10YWJsZXMiGC1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyIRLVdhLC0tbm9leGVjc3RhY2siEy1EX0ZPUlRJRllfU09VUkNFPTIiEy1Xc3RyaWN0LWFsaWFzaW5nPTIiEy1XZXJyb3I9cmV0dXJuLXR5cGUiGC1XZXJyb3I9bm9uLXZpcnR1YWwtZHRvciIPLVdlcnJvcj1hZGRyZXNzIhYtV2Vycm9yPXNlcXVlbmNlLXBvaW50IhctV2Vycm9yPWZvcm1hdC1zZWN1cml0eSIMLW1zb2Z0LWZsb2F0Ig4tbWFyY2g9YXJtdjctYSISLW1mbG9hdC1hYmk9c29mdGZwIgorLW1mcHU9bmVvbiIvLUlidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAiswEtSW91dC9zb29uZy8uaW50ZXJtZWRpYXRlcy9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9jYy9hbmRyb2lkX2FybV9hcm12Ny1hLW5lb24vZ2VuL3Byb3RvL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcCKFAS1Jb3V0L3Nvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8iFC1EX19MSUJDX0FQSV9fPTEwMDAwIhQtRF9fTElCTV9BUElfXz0xMDAwMCIVLURfX0xJQkRMX0FQSV9fPTEwMDAwIhctSWV4dGVybmFsL3Byb3RvYnVmL3NyYyJZLUlwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUzMDU2Ny9hbmRyb2lkX2xpYmMrKy9wbGF0Zm9ybS9hcm0vaW5jbHVkZS9jKysvdjEiPS1JcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MzA1NjcvaW5jbHVkZS9jKysvdjEiIC1JYmlvbmljL2xpYmMvYXN5bmNfc2FmZS9pbmNsdWRlIh8tSXN5c3RlbS9sb2dnaW5nL2xpYmxvZy9pbmNsdWRlIictSWJpb25pYy9saWJjL3N5c3RlbV9wcm9wZXJ0aWVzL2luY2x1ZGUiPC1Jc3lzdGVtL2NvcmUvcHJvcGVydHlfc2VydmljZS9saWJwcm9wZXJ0eWluZm9wYXJzZXIvaW5jbHVkZSIILWlzeXN0ZW0iE2Jpb25pYy9saWJjL2luY2x1ZGUiCC1pc3lzdGVtIh9iaW9uaWMvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtIggtaXN5c3RlbSIXYmlvbmljL2xpYmMva2VybmVsL3VhcGkiCC1pc3lzdGVtIh9iaW9uaWMvbGliYy9rZXJuZWwvYW5kcm9pZC9zY3NpIggtaXN5c3RlbSIfYmlvbmljL2xpYmMva2VybmVsL2FuZHJvaWQvdWFwaSIHLXRhcmdldCIdYXJtdjdhLWxpbnV4LWFuZHJvaWRlYWJpMTAwMDAiEC1EQU5EUk9JRF9TVFJJQ1QiBS1mUElFIgctV2Vycm9yIhUtV25vLXVudXNlZC1wYXJhbWV0ZXIiGS1ER09PR0xFX1BST1RPQlVGX05PX1JUVEkiFi1XaW1wbGljaXQtZmFsbHRocm91Z2giKi1EX0xJQkNQUF9FTkFCTEVfVEhSRUFEX1NBRkVUWV9BTk5PVEFUSU9OUyIVLVduby1nbnUtaW5jbHVkZS1uZXh0IhstZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iBi1tbGx2bSIZLWVuYWJsZS1zaHJpbmstd3JhcD1mYWxzZSIMLXN0ZD1nbnUrKzIwIgktZm5vLXJ0dGkiFS1Jc3lzdGVtL2NvcmUvaW5jbHVkZSIfLUlzeXN0ZW0vbG9nZ2luZy9saWJsb2cvaW5jbHVkZSIcLUlzeXN0ZW0vbWVkaWEvYXVkaW8vaW5jbHVkZSIeLUloYXJkd2FyZS9saWJoYXJkd2FyZS9pbmNsdWRlIiUtSWhhcmR3YXJlL2xpYmhhcmR3YXJlX2xlZ2FjeS9pbmNsdWRlIhYtSWhhcmR3YXJlL3JpbC9pbmNsdWRlIhstSWZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUiIi1JZnJhbWV3b3Jrcy9uYXRpdmUvb3BlbmdsL2luY2x1ZGUiFy1JZnJhbWV3b3Jrcy9hdi9pbmNsdWRlIhYtV2Vycm9yPWJvb2wtb3BlcmF0aW9uIiAtV2Vycm9yPWZvcm1hdC1pbnN1ZmZpY2llbnQtYXJncyIlLVdlcnJvcj1pbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiIbLVdlcnJvcj1pbnQtaW4tYm9vbC1jb250ZXh0IhstV2Vycm9yPWludC10by1wb2ludGVyLWNhc3QiGy1XZXJyb3I9cG9pbnRlci10by1pbnQtY2FzdCIXLVdlcnJvcj14b3ItdXNlZC1hcy1wb3ciHi1Xbm8tdm9pZC1wb2ludGVyLXRvLWVudW0tY2FzdCIdLVduby12b2lkLXBvaW50ZXItdG8taW50LWNhc3QiGC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCIWLVdlcnJvcj1mb3J0aWZ5LXNvdXJjZSIULVduby11bnVzZWQtdmFyaWFibGUiHy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMiEy1Xbm8tcGFja2VkLW5vbi1wb2QiHC1XZXJyb3I9YWRkcmVzcy1vZi10ZW1wb3JhcnkiKy1XZXJyb3I9aW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXMiGC1XZXJyb3I9bnVsbC1kZXJlZmVyZW5jZSITLVdlcnJvcj1yZXR1cm4tdHlwZSIiLVduby10YXV0b2xvZ2ljYWwtY29uc3RhbnQtY29tcGFyZSIkLVduby10YXV0b2xvZ2ljYWwtdHlwZS1saW1pdC1jb21wYXJlIiItV25vLWltcGxpY2l0LWludC1mbG9hdC1jb252ZXJzaW9uIiEtV25vLXRhdXRvbG9naWNhbC1vdmVybGFwLWNvbXBhcmUiFC1Xbm8tZGVwcmVjYXRlZC1jb3B5IhktV25vLXJhbmdlLWxvb3AtY29uc3RydWN0IiItV25vLXplcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50IiktV25vLWRlcHJlY2F0ZWQtYW5vbi1lbnVtLWVudW0tY29udmVyc2lvbiIkLVduby1kZXByZWNhdGVkLWVudW0tZW51bS1jb252ZXJzaW9uIhstV25vLWVycm9yPXBlc3NpbWl6aW5nLW1vdmUiHi1Xbm8tbm9uLWMtdHlwZWRlZi1mb3ItbGlua2FnZSITLVduby1hbGlnbi1taXNtYXRjaCIiLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZSIjLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC1wYXJhbWV0ZXIiHi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1idWlsdGlucyIVLVduby1lcnJvcj1kZXByZWNhdGVkIiYtV25vLWRlcHJlY2F0ZWQtZHluYW1pYy1leGNlcHRpb24tc3BlYyIkLVduby1lcnJvcj1lbnVtLWNvbnN0ZXhwci1jb252ZXJzaW9uIhstV25vLWVycm9yPWludmFsaWQtb2Zmc2V0b2YiKS1Xbm8tZXJyb3I9dGhyZWFkLXNhZmV0eS1yZWZlcmVuY2UtcmV0dXJuIhYtV25vLXZsYS1jeHgtZXh0ZW5zaW9uIjhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYzJFZ2VuZmlsZXNfZm9yX2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjOp9ACitFZ2VuZmlsZXNfZm9yX2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjKtU/CiC2AXNvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8vYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2Zvby5wYi5oEpk+Ly8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKIC8vIHNvdXJjZTogYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2Zvby5wcm90bwogCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvcmVnZW4uc2ggYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvcmVnZW4uc2gKaW5kZXggMmVkZmU1My4uMDRhMDI2NCAxMDA3NTUKLS0tIGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL3JlZ2VuLnNoCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9yZWdlbi5zaApAQCAtMjEsMTMgKzIxLDggQEAKICMgaWRlX3F1ZXJ5LnNoLiBUaGUgcHJvYmVyIGRvZXNuJ3QgY2hlY2stb3V0IHRoZSBmdWxsIHNvdXJjZSBjb2RlLCBzbyBpdAogIyBjYW4ndCBydW4gaWRlX3F1ZXJ5LnNoIGl0c2VsZi4KIAotY2QgJChkaXJuYW1lICRCQVNIX1NPVVJDRSkKLXNvdXJjZSAkKHB3ZCkvLi4vLi4vLi4vc2hlbGxfdXRpbHMuc2gKLXJlcXVpcmVfdG9wCi0KIGZpbGVzX3RvX2J1aWxkPSgKICAgYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MKICkKIAotY2QgJHtUT1B9CiBidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9pZGVfcXVlcnkuc2ggLS1sdW5jaF90YXJnZXQ9YW9zcF9hcm0tdHJ1bmtfc3RhZ2luZy1lbmcgJHtmaWxlc190b19idWlsZFtAXX0gPiBidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0CmRpZmYgLS1naXQgYS90b29scy9qYXZhLWV2ZW50LWxvZy10YWdzLnB5IGIvdG9vbHMvamF2YS1ldmVudC1sb2ctdGFncy5weQppbmRleCBiYmQ2NWZhLi5lM2RjMDdlIDEwMDc1NQotLS0gYS90b29scy9qYXZhLWV2ZW50LWxvZy10YWdzLnB5CisrKyBiL3Rvb2xzL2phdmEtZXZlbnQtbG9nLXRhZ3MucHkKQEAgLTE1LDE2ICsxNSwxMiBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogIiIiCi1Vc2FnZTogamF2YS1ldmVudC1sb2ctdGFncy5weSBbLW8gb3V0cHV0X2ZpbGVdIDxpbnB1dF9maWxlPiA8bWVyZ2VkX3RhZ3NfZmlsZT4KLQogR2VuZXJhdGUgYSBqYXZhIGNsYXNzIGNvbnRhaW5pbmcgY29uc3RhbnRzIGZvciBlYWNoIG9mIHRoZSBldmVudCBsb2cKIHRhZ3MgaW4gdGhlIGdpdmVuIGlucHV0IGZpbGUuCi0KLS1oIHRvIGRpc3BsYXkgdGhpcyB1c2FnZSBtZXNzYWdlIGFuZCBleGl0LgogIiIiCiAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgZ2V0b3B0CitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCByZQpAQCAtMzIsNTcgKzI4LDE0IEBACiAKIGltcG9ydCBldmVudF9sb2dfdGFncwogCi1vdXRwdXRfZmlsZSA9IE5vbmUKK3BhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPV9fZG9jX18pCitwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsIGRlc3Q9J291dHB1dF9maWxlJykKK3BhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGUnKQorYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKIAotdHJ5OgotICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJobzoiKQotZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciBhcyBlcnI6Ci0gIHByaW50KHN0cihlcnIpKQotICBwcmludChfX2RvY19fKQotICBzeXMuZXhpdCgyKQotCi1mb3IgbywgYSBpbiBvcHRzOgotICBpZiBvID09ICItaCI6Ci0gICAgcHJpbnQoX19kb2NfXykKLSAgICBzeXMuZXhpdCgyKQotICBlbGlmIG8gPT0gIi1vIjoKLSAgICBvdXRwdXRfZmlsZSA9IGEKLSAgZWxzZToKLSAgICBwcmludCgidW5oYW5kbGVkIG9wdGlvbiAlcyIgJSAobywpLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgc3lzLmV4aXQoMSkKLQotaWYgbGVuKGFyZ3MpICE9IDEgYW5kIGxlbihhcmdzKSAhPSAyOgotICBwcmludCgibmVlZCBvbmUgb3IgdHdvIGlucHV0IGZpbGVzLCBub3QgJWQiICUgKGxlbihhcmdzKSwpKQotICBwcmludChfX2RvY19fKQotICBzeXMuZXhpdCgxKQotCi1mbiA9IGFyZ3NbMF0KK2ZuID0gYXJncy5maWxlCiB0YWdmaWxlID0gZXZlbnRfbG9nX3RhZ3MuVGFnRmlsZShmbikKIAotaWYgbGVuKGFyZ3MpID4gMToKLSAgIyBMb2FkIHRoZSBtZXJnZWQgdGFnIGZpbGUgKHdoaWNoIHNob3VsZCBoYXZlIG51bWJlcnMgYXNzaWduZWQgZm9yIGFsbAotICAjIHRhZ3MuICBVc2UgdGhlIG51bWJlcnMgZnJvbSB0aGUgbWVyZ2VkIGZpbGUgdG8gZmlsbCBpbiBhbnkgbWlzc2luZwotICAjIG51bWJlcnMgZnJvbSB0aGUgaW5wdXQgZmlsZS4KLSAgbWVyZ2VkX2ZuID0gYXJnc1sxXQotICBtZXJnZWRfdGFnZmlsZSA9IGV2ZW50X2xvZ190YWdzLlRhZ0ZpbGUobWVyZ2VkX2ZuKQotICBtZXJnZWRfYnlfbmFtZSA9IGRpY3QoWyh0LnRhZ25hbWUsIHQpIGZvciB0IGluIG1lcmdlZF90YWdmaWxlLnRhZ3NdKQotICBmb3IgdCBpbiB0YWdmaWxlLnRhZ3M6Ci0gICAgaWYgdC50YWdudW0gaXMgTm9uZToKLSAgICAgIGlmIHQudGFnbmFtZSBpbiBtZXJnZWRfYnlfbmFtZToKLSAgICAgICAgdC50YWdudW0gPSBtZXJnZWRfYnlfbmFtZVt0LnRhZ25hbWVdLnRhZ251bQotICAgICAgZWxzZToKLSAgICAgICAgIyBXZSdyZSBidWlsZGluZyBzb21ldGhpbmcgdGhhdCdzIG5vdCBiZWluZyBpbmNsdWRlZCBpbiB0aGUKLSAgICAgICAgIyBwcm9kdWN0LCBzbyBpdHMgdGFncyBkb24ndCBhcHBlYXIgaW4gdGhlIG1lcmdlZCBmaWxlLiAgQXNzaWduCi0gICAgICAgICMgdGhlbSBhbGwgYW4gYXJiaXRyYXJ5IG51bWJlciBzbyB3ZSBjYW4gZW1pdCB0aGUgamF2YSBhbmQKLSAgICAgICAgIyBjb21waWxlIHRoZSAodW51c2VkKSBwYWNrYWdlLgotICAgICAgICB0LnRhZ251bSA9IDk5OTk5OQotZWxzZToKLSAgIyBOb3QgdXNpbmcgdGhlIG1lcmdlZCB0YWcgZmlsZSwgc28gYWxsIHRhZ3MgbXVzdCBoYXZlIG1hbnVhbGx5IGFzc2lnbmVkCi0gICMgbnVtYmVycwotICBmb3IgdCBpbiB0YWdmaWxlLnRhZ3M6Ci0gICAgaWYgdC50YWdudW0gaXMgTm9uZToKLSAgICAgIHRhZ2ZpbGVmLkFkZEVycm9yKCJ0YWcgXCIlc1wiIGhhcyBubyBudW1iZXIiICUgKHRhZ25hbWUsKSwgdGFnLmxpbmVudW0pCi0KIGlmICJqYXZhX3BhY2thZ2UiIG5vdCBpbiB0YWdmaWxlLm9wdGlvbnM6CiAgIHRhZ2ZpbGUuQWRkRXJyb3IoImphdmFfcGFja2FnZSBvcHRpb24gbm90IHNwZWNpZmllZCIsIGxpbmVudW09MCkKIApAQCAtMTQxLDExICs5NCwxMSBAQAogZm9yIHQgaW4gdGFnZmlsZS50YWdzOgogICBtZXRob2ROYW1lID0gamF2YU5hbWUoIndyaXRlXyIgKyB0LnRhZ25hbWUpCiAgIGlmIHQuZGVzY3JpcHRpb246Ci0gICAgYXJncyA9IFthcmcuc3RyaXAoIigpICIpLnNwbGl0KCJ8IikgZm9yIGFyZyBpbiB0LmRlc2NyaXB0aW9uLnNwbGl0KCIsIildCisgICAgZm5fYXJncyA9IFthcmcuc3RyaXAoIigpICIpLnNwbGl0KCJ8IikgZm9yIGFyZyBpbiB0LmRlc2NyaXB0aW9uLnNwbGl0KCIsIildCiAgIGVsc2U6Ci0gICAgYXJncyA9IFtdCi0gIGFyZ1R5cGVzTmFtZXMgPSAiLCAiLmpvaW4oW2phdmFUeXBlc1tpbnQoYXJnWzFdKV0gKyAiICIgKyBqYXZhTmFtZShhcmdbMF0pIGZvciBhcmcgaW4gYXJnc10pCi0gIGFyZ05hbWVzID0gIiIuam9pbihbIiwgIiArIGphdmFOYW1lKGFyZ1swXSkgZm9yIGFyZyBpbiBhcmdzXSkKKyAgICBmbl9hcmdzID0gW10KKyAgYXJnVHlwZXNOYW1lcyA9ICIsICIuam9pbihbamF2YVR5cGVzW2ludChhcmdbMV0pXSArICIgIiArIGphdmFOYW1lKGFyZ1swXSkgZm9yIGFyZyBpbiBmbl9hcmdzXSkKKyAgYXJnTmFtZXMgPSAiIi5qb2luKFsiLCAiICsgamF2YU5hbWUoYXJnWzBdKSBmb3IgYXJnIGluIGZuX2FyZ3NdKQogICBidWZmZXIud3JpdGUoIlxuICBwdWJsaWMgc3RhdGljIHZvaWQgJXMoJXMpIHsiICUgKG1ldGhvZE5hbWUsIGFyZ1R5cGVzTmFtZXMpKQogICBidWZmZXIud3JpdGUoIlxuICAgIGFuZHJvaWQudXRpbC5FdmVudExvZy53cml0ZUV2ZW50KCVzJXMpOyIgJSAodC50YWduYW1lLnVwcGVyKCksIGFyZ05hbWVzKSkKICAgYnVmZmVyLndyaXRlKCJcbiAgfVxuIikKQEAgLTE1Myw4ICsxMDYsOCBAQAogCiBidWZmZXIud3JpdGUoIn1cbiIpOwogCi1vdXRwdXRfZGlyID0gb3MucGF0aC5kaXJuYW1lKG91dHB1dF9maWxlKQorb3V0cHV0X2RpciA9IG9zLnBhdGguZGlybmFtZShhcmdzLm91dHB1dF9maWxlKQogaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dHB1dF9kaXIpOgogICBvcy5tYWtlZGlycyhvdXRwdXRfZGlyKQogCi1ldmVudF9sb2dfdGFncy5Xcml0ZU91dHB1dChvdXRwdXRfZmlsZSwgYnVmZmVyKQorZXZlbnRfbG9nX3RhZ3MuV3JpdGVPdXRwdXQoYXJncy5vdXRwdXRfZmlsZSwgYnVmZmVyKQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWVyZ2UtZXZlbnQtbG9nLXRhZ3MucHkgYi90b29scy9tZXJnZS1ldmVudC1sb2ctdGFncy5weQppbmRleCAyOTI2MDRjLi41NzMwYzExIDEwMDc1NQotLS0gYS90b29scy9tZXJnZS1ldmVudC1sb2ctdGFncy5weQorKysgYi90b29scy9tZXJnZS1ldmVudC1sb2ctdGFncy5weQpAQCAtMTUsMjIgKzE1LDEzIEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAiIiIKLVVzYWdlOiBtZXJnZS1ldmVudC1sb2ctdGFncy5weSBbLW8gb3V0cHV0X2ZpbGVdIFtpbnB1dF9maWxlcy4uLl0KLQogTWVyZ2UgdG9nZXRoZXIgemVybyBvciBtb3JlIGV2ZW50LWxvZ3MtdGFncyBmaWxlcyB0byBwcm9kdWNlIGEgc2luZ2xlCiBvdXRwdXQgZmlsZSwgc3RyaXBwZWQgb2YgY29tbWVudHMuICBDaGVja3MgdGhhdCBubyB0YWcgbnVtYmVycyBjb25mbGljdAogYW5kIGZhaWxzIGlmIHRoZXkgZG8uCi0KLS1oIHRvIGRpc3BsYXkgdGhpcyB1c2FnZSBtZXNzYWdlIGFuZCBleGl0LgogIiIiCiAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgZ2V0b3B0Ci10cnk6Ci0gIGltcG9ydCBoYXNobGliCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gIGltcG9ydCBtZDUgYXMgaGFzaGxpYgotaW1wb3J0IHN0cnVjdAoraW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgc3lzCiAKIGltcG9ydCBldmVudF9sb2dfdGFncwpAQCAtMzgsMzIgKzI5LDEwIEBACiBlcnJvcnMgPSBbXQogd2FybmluZ3MgPSBbXQogCi1vdXRwdXRfZmlsZSA9IE5vbmUKLXByZV9tZXJnZWRfZmlsZSA9IE5vbmUKLQotIyBUYWdzIHdpdGggYSB0YWcgbnVtYmVyIG9mID8gYXJlIGFzc2lnbmVkIGEgdGFnIGluIHRoZSByYW5nZQotIyBbQVNTSUdOX1NUQVJULCBBU1NJR05fTElNSVQpLgotQVNTSUdOX1NUQVJUID0gOTAwMDAwCi1BU1NJR05fTElNSVQgPSAxMDAwMDAwCi0KLXRyeToKLSAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiaG86bToiKQotZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciBhcyBlcnI6Ci0gIHByaW50KHN0cihlcnIpKQotICBwcmludChfX2RvY19fKQotICBzeXMuZXhpdCgyKQotCi1mb3IgbywgYSBpbiBvcHRzOgotICBpZiBvID09ICItaCI6Ci0gICAgcHJpbnQoX19kb2NfXykKLSAgICBzeXMuZXhpdCgyKQotICBlbGlmIG8gPT0gIi1vIjoKLSAgICBvdXRwdXRfZmlsZSA9IGEKLSAgZWxpZiBvID09ICItbSI6Ci0gICAgcHJlX21lcmdlZF9maWxlID0gYQotICBlbHNlOgotICAgIHByaW50KCJ1bmhhbmRsZWQgb3B0aW9uICVzIiAlIChvLCksIGZpbGU9c3lzLnN0ZGVycikKLSAgICBzeXMuZXhpdCgxKQorcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249X19kb2NfXykKK3BhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgZGVzdD0nb3V0cHV0X2ZpbGUnKQorcGFyc2VyLmFkZF9hcmd1bWVudCgnZmlsZXMnLCBuYXJncz0nKicpCithcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogCiAjIFJlc3RyaWN0aW9ucyBvbiB0YWdzOgogIwpAQCAtNzcsMTIgKzQ2LDcgQEAKIGJ5X3RhZ25hbWUgPSB7fQogYnlfdGFnbnVtID0ge30KIAotcHJlX21lcmdlZF90YWdzID0ge30KLWlmIHByZV9tZXJnZWRfZmlsZToKLSAgZm9yIHQgaW4gZXZlbnRfbG9nX3RhZ3MuVGFnRmlsZShwcmVfbWVyZ2VkX2ZpbGUpLnRhZ3M6Ci0gICAgcHJlX21lcmdlZF90YWdzW3QudGFnbmFtZV0gPSB0Ci0KLWZvciBmbiBpbiBhcmdzOgorZm9yIGZuIGluIGFyZ3MuZmlsZXM6CiAgIHRhZ2ZpbGUgPSBldmVudF9sb2dfdGFncy5UYWdGaWxlKGZuKQogCiAgIGZvciB0IGluIHRhZ2ZpbGUudGFnczoKQEAgLTkzLDEyICs1Nyw2IEBACiAgICAgaWYgdC50YWduYW1lIGluIGJ5X3RhZ25hbWU6CiAgICAgICBvcmlnID0gYnlfdGFnbmFtZVt0LnRhZ25hbWVdCiAKLSAgICAgICMgQWxsb3cgYW4gZXhwbGljaXQgdGFnIG51bWJlciB0byBkZWZpbmUgYW4gaW1wbGljaXQgdGFnIG51bWJlcgotICAgICAgaWYgb3JpZy50YWdudW0gaXMgTm9uZToKLSAgICAgICAgb3JpZy50YWdudW0gPSB0LnRhZ251bQotICAgICAgZWxpZiB0LnRhZ251bSBpcyBOb25lOgotICAgICAgICB0LnRhZ251bSA9IG9yaWcudGFnbnVtCi0KICAgICAgIGlmICh0LnRhZ251bSA9PSBvcmlnLnRhZ251bSBhbmQKICAgICAgICAgICB0LmRlc2NyaXB0aW9uID09IG9yaWcuZGVzY3JpcHRpb24pOgogICAgICAgICAjIGlmIHRoZSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBhcmUgaWRlbnRpY2FsLCBpc3N1ZSBhIHdhcm5pbmcKQEAgLTExNCw3ICs3Miw3IEBACiAgICAgICAgICAgICBsaW5lbnVtPXQubGluZW51bSkKICAgICAgIGNvbnRpbnVlCiAKLSAgICBpZiB0LnRhZ251bSBpcyBub3QgTm9uZSBhbmQgdC50YWdudW0gaW4gYnlfdGFnbnVtOgorICAgIGlmIHQudGFnbnVtIGluIGJ5X3RhZ251bToKICAgICAgIG9yaWcgPSBieV90YWdudW1bdC50YWdudW1dCiAKICAgICAgIGlmIHQudGFnbmFtZSAhPSBvcmlnLnRhZ25hbWU6CkBAIC0xMjUsOCArODMsNyBAQAogICAgICAgICBjb250aW51ZQogCiAgICAgYnlfdGFnbmFtZVt0LnRhZ25hbWVdID0gdAotICAgIGlmIHQudGFnbnVtIGlzIG5vdCBOb25lOgotICAgICAgYnlfdGFnbnVtW3QudGFnbnVtXSA9IHQKKyAgICBieV90YWdudW1bdC50YWdudW1dID0gdAogCiAgIGVycm9ycy5leHRlbmQodGFnZmlsZS5lcnJvcnMpCiAgIHdhcm5pbmdzLmV4dGVuZCh0YWdmaWxlLndhcm5pbmdzKQpAQCAtMTQwLDM4ICs5Nyw2IEBACiAgIGZvciBmbiwgbG4sIG1zZyBpbiB3YXJuaW5nczoKICAgICBwcmludCgiJXM6JWQ6IHdhcm5pbmc6ICVzIiAlIChmbiwgbG4sIG1zZyksIGZpbGU9c3lzLnN0ZGVycikKIAotIyBQeXRob24ncyBoYXNoIGZ1bmN0aW9uIChhKSBpc24ndCBncmVhdCBhbmQgKGIpIHZhcmllcyBiZXR3ZWVuCi0jIHZlcnNpb25zIG9mIHB5dGhvbi4gIFVzaW5nIG1kNSBpcyBvdmVya2lsbCBoZXJlIGJ1dCBpcyB0aGUgc2FtZSBmcm9tCi0jIHBsYXRmb3JtIHRvIHBsYXRmb3JtIGFuZCBzcGVlZCBzaG91bGRuJ3QgbWF0dGVyIGluIHByYWN0aWNlLgotZGVmIGhhc2huYW1lKHN0cik6Ci0gIGQgPSBoYXNobGliLm1kNShzdHIpLmRpZ2VzdCgpWzo0XQotICByZXR1cm4gc3RydWN0LnVucGFjaygiIUkiLCBkKVswXQotCi0jIEFzc2lnbiBhIHRhZyBudW1iZXIgdG8gYWxsIHRoZSBlbnRyaWVzIHRoYXQgc2F5IHRoZXkgd2FudCBvbmUKLSMgYXNzaWduZWQuICBXZSBkbyB0aGlzIGJhc2VkIG9uIGEgaGFzaCBvZiB0aGUgdGFnIG5hbWUgc28gdGhhdCB0aGUKLSMgbnVtYmVycyBzaG91bGQgc3RheSByZWxhdGl2ZWx5IHN0YWJsZSBhcyB0YWdzIGFyZSBhZGRlZC4KLQotIyBJZiB3ZSB3ZXJlIHByb3ZpZGVkIHByZS1tZXJnZWQgdGFncyAody8gdGhlIC1tIG9wdGlvbiksIHRoZW4gZG9uJ3QKLSMgZXZlciB0cnkgdG8gYWxsb2NhdGUgb25lLCBqdXN0IGZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBhIG51bWJlcgotCi1mb3IgbmFtZSwgdCBpbiBzb3J0ZWQoYnlfdGFnbmFtZS5pdGVtcygpKToKLSAgaWYgdC50YWdudW0gaXMgTm9uZToKLSAgICBpZiBwcmVfbWVyZ2VkX3RhZ3M6Ci0gICAgICB0cnk6Ci0gICAgICAgIHQudGFnbnVtID0gcHJlX21lcmdlZF90YWdzW3QudGFnbmFtZV0KLSAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgcHJpbnQoIkVycm9yOiBUYWcgbnVtYmVyIG5vdCBkZWZpbmVkIGZvciB0YWcgYCVzJy4gSGF2ZSB5b3UgZG9uZSBhIGZ1bGwgYnVpbGQ/IiAlIHQudGFnbmFtZSwKLSAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICBzeXMuZXhpdCgxKQotICAgIGVsc2U6Ci0gICAgICB3aGlsZSBUcnVlOgotICAgICAgICB4ID0gKGhhc2huYW1lKG5hbWUpICUgKEFTU0lHTl9MSU1JVCAtIEFTU0lHTl9TVEFSVCAtIDEpKSArIEFTU0lHTl9TVEFSVAotICAgICAgICBpZiB4IG5vdCBpbiBieV90YWdudW06Ci0gICAgICAgICAgdC50YWdudW0gPSB4Ci0gICAgICAgICAgYnlfdGFnbnVtW3hdID0gdAotICAgICAgICAgIGJyZWFrCi0gICAgICAgIG5hbWUgPSAiXyIgKyBuYW1lCi0KICMgYnlfdGFnbnVtIHNob3VsZCBiZSBjb21wbGV0ZSBub3c7IHdlJ3ZlIGFzc2lnbmVkIG51bWJlcnMgdG8gYWxsIHRhZ3MuCiAKIGJ1ZmZlciA9IFN0cmluZ0lPKCkKQEAgLTE4MSw0ICsxMDYsNCBAQAogICBlbHNlOgogICAgIGJ1ZmZlci53cml0ZSgiJWQgJXNcbiIgJSAodC50YWdudW0sIHQudGFnbmFtZSkpCiAKLWV2ZW50X2xvZ190YWdzLldyaXRlT3V0cHV0KG91dHB1dF9maWxlLCBidWZmZXIpCitldmVudF9sb2dfdGFncy5Xcml0ZU91dHB1dChhcmdzLm91dHB1dF9maWxlLCBidWZmZXIpCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS9BbmRyb2lkLmJwIGIvdG9vbHMvbWV0YWRhdGEvQW5kcm9pZC5icApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdkMTA2ZC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS9BbmRyb2lkLmJwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotcGFja2FnZSB7Ci0gICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAotfQotCi1ibHVlcHJpbnRfZ29fYmluYXJ5IHsKLSAgICBuYW1lOiAibWV0YWRhdGEiLAotICAgIGRlcHM6IFsKLSAgICAgICAgICAgICJzb29uZy10ZXN0aW5nLXRlc3Rfc3BlY19wcm90byIsCi0gICAgICAgICAgICAic29vbmctdGVzdGluZy1jb2RlX21ldGFkYXRhX3Byb3RvIiwKLSAgICAgICAgICAgICJzb29uZy10ZXN0aW5nLWNvZGVfbWV0YWRhdGFfaW50ZXJuYWxfcHJvdG8iLAotICAgICAgICAgICAgImdvbGFuZy1wcm90b2J1Zi1wcm90byIsCi0gICAgICAgIF0sCi0gICAgc3JjczogWwotICAgICAgICAiZ2VuZXJhdG9yLmdvIiwKLSAgICBdCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvT1dORVJTIGIvdG9vbHMvbWV0YWRhdGEvT1dORVJTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2JjZGYxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL09XTkVSUworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotZGFyaW9mcmVuaUBnb29nbGUuY29tCi1qb2VvQGdvb2dsZS5jb20KLXJvbmlzaEBnb29nbGUuY29tCi1jYWRpdHlhQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL2dlbmVyYXRvci5nbyBiL3Rvb2xzL21ldGFkYXRhL2dlbmVyYXRvci5nbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc2NjhiZS4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS9nZW5lcmF0b3IuZ28KKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotcGFja2FnZSBtYWluCi0KLWltcG9ydCAoCi0JImZsYWciCi0JImZtdCIKLQkiaW8iCi0JImxvZyIKLQkib3MiCi0JInNvcnQiCi0JInN0cmluZ3MiCi0JInN5bmMiCi0KLQkiYW5kcm9pZC9zb29uZy90ZXN0aW5nL2NvZGVfbWV0YWRhdGFfaW50ZXJuYWxfcHJvdG8iCi0JImFuZHJvaWQvc29vbmcvdGVzdGluZy9jb2RlX21ldGFkYXRhX3Byb3RvIgotCSJhbmRyb2lkL3Nvb25nL3Rlc3RpbmcvdGVzdF9zcGVjX3Byb3RvIgotCSJnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1Zi9wcm90byIKLSkKLQotdHlwZSBrZXlUb0xvY2tzTWFwIHN0cnVjdCB7Ci0JbG9ja3Mgc3luYy5NYXAKLX0KLQotZnVuYyAoa2wgKmtleVRvTG9ja3NNYXApIEdldExvY2tGb3JLZXkoa2V5IHN0cmluZykgKnN5bmMuTXV0ZXggewotCW11dGV4LCBfIDo9IGtsLmxvY2tzLkxvYWRPclN0b3JlKGtleSwgJnN5bmMuTXV0ZXh7fSkKLQlyZXR1cm4gbXV0ZXguKCpzeW5jLk11dGV4KQotfQotCi0vLyBEZWZpbmUgYSBzdHJ1Y3QgdG8gaG9sZCB0aGUgY29tYmluYXRpb24gb2YgdGVhbSBJRCBhbmQgbXVsdGktb3duZXJzaGlwIGZsYWcgZm9yIHZhbGlkYXRpb24KLXR5cGUgc291cmNlRmlsZUF0dHJpYnV0ZXMgc3RydWN0IHsKLQlUZWFtSUQgICAgICAgICBzdHJpbmcKLQlNdWx0aU93bmVyc2hpcCBib29sCi0JUGF0aCAgICAgICAgICAgc3RyaW5nCi19Ci0KLWZ1bmMgZ2V0U29ydGVkS2V5cyhzeW5jTWFwICpzeW5jLk1hcCkgW11zdHJpbmcgewotCXZhciBhbGxLZXlzIFtdc3RyaW5nCi0Jc3luY01hcC5SYW5nZSgKLQkJZnVuYyhrZXksIF8gaW50ZXJmYWNle30pIGJvb2wgewotCQkJYWxsS2V5cyA9IGFwcGVuZChhbGxLZXlzLCBrZXkuKHN0cmluZykpCi0JCQlyZXR1cm4gdHJ1ZQotCQl9LAotCSkKLQotCXNvcnQuU3RyaW5ncyhhbGxLZXlzKQotCXJldHVybiBhbGxLZXlzCi19Ci0KLS8vIHdyaXRlUHJvdG9Ub0ZpbGUgbWFyc2hhbHMgYSBwcm90b2J1ZiBtZXNzYWdlIGFuZCB3cml0ZXMgaXQgdG8gYSBmaWxlCi1mdW5jIHdyaXRlUHJvdG9Ub0ZpbGUob3V0cHV0RmlsZSBzdHJpbmcsIG1lc3NhZ2UgcHJvdG8uTWVzc2FnZSkgewotCWRhdGEsIGVyciA6PSBwcm90by5NYXJzaGFsKG1lc3NhZ2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbChlcnIpCi0JfQotCWZpbGUsIGVyciA6PSBvcy5DcmVhdGUob3V0cHV0RmlsZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nLkZhdGFsKGVycikKLQl9Ci0JZGVmZXIgZmlsZS5DbG9zZSgpCi0KLQlfLCBlcnIgPSBmaWxlLldyaXRlKGRhdGEpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbChlcnIpCi0JfQotfQotCi1mdW5jIHJlYWRGaWxlVG9TdHJpbmcoZmlsZVBhdGggc3RyaW5nKSBzdHJpbmcgewotCWZpbGUsIGVyciA6PSBvcy5PcGVuKGZpbGVQYXRoKQotCWlmIGVyciAhPSBuaWwgewotCQlsb2cuRmF0YWwoZXJyKQotCX0KLQlkZWZlciBmaWxlLkNsb3NlKCkKLQotCWRhdGEsIGVyciA6PSBpby5SZWFkQWxsKGZpbGUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbChlcnIpCi0JfQotCXJldHVybiBzdHJpbmcoZGF0YSkKLX0KLQotZnVuYyB3cml0ZUVtcHR5T3V0cHV0UHJvdG8ob3V0cHV0RmlsZSBzdHJpbmcsIG1ldGFkYXRhUnVsZSBzdHJpbmcpIHsKLQlmaWxlLCBlcnIgOj0gb3MuQ3JlYXRlKG91dHB1dEZpbGUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbChlcnIpCi0JfQotCXZhciBtZXNzYWdlIHByb3RvLk1lc3NhZ2UKLQlpZiBtZXRhZGF0YVJ1bGUgPT0gInRlc3Rfc3BlYyIgewotCQltZXNzYWdlID0gJnRlc3Rfc3BlY19wcm90by5UZXN0U3BlY3t9Ci0JfSBlbHNlIGlmIG1ldGFkYXRhUnVsZSA9PSAiY29kZV9tZXRhZGF0YSIgewotCQltZXNzYWdlID0gJmNvZGVfbWV0YWRhdGFfcHJvdG8uQ29kZU1ldGFkYXRhe30KLQl9Ci0JZGF0YSwgZXJyIDo9IHByb3RvLk1hcnNoYWwobWVzc2FnZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nLkZhdGFsKGVycikKLQl9Ci0JZGVmZXIgZmlsZS5DbG9zZSgpCi0KLQlfLCBlcnIgPSBmaWxlLldyaXRlKFtdYnl0ZShkYXRhKSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nLkZhdGFsKGVycikKLQl9Ci19Ci0KLWZ1bmMgcHJvY2Vzc1Rlc3RTcGVjUHJvdG9idWYoCi0JZmlsZVBhdGggc3RyaW5nLCBvd25lcnNoaXBNZXRhZGF0YU1hcCAqc3luYy5NYXAsIGtleUxvY2tzICprZXlUb0xvY2tzTWFwLAotCWVyckNoIGNoYW4gZXJyb3IsIHdnICpzeW5jLldhaXRHcm91cCwKLSkgewotCWRlZmVyIHdnLkRvbmUoKQotCi0JZmlsZUNvbnRlbnQgOj0gc3RyaW5ncy5UcmltUmlnaHQocmVhZEZpbGVUb1N0cmluZyhmaWxlUGF0aCksICJcbiIpCi0JdGVzdERhdGEgOj0gdGVzdF9zcGVjX3Byb3RvLlRlc3RTcGVje30KLQllcnIgOj0gcHJvdG8uVW5tYXJzaGFsKFtdYnl0ZShmaWxlQ29udGVudCksICZ0ZXN0RGF0YSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJZXJyQ2ggPC0gZXJyCi0JCXJldHVybgotCX0KLQotCW93bmVyc2hpcE1ldGFkYXRhIDo9IHRlc3REYXRhLkdldE93bmVyc2hpcE1ldGFkYXRhTGlzdCgpCi0JZm9yIF8sIG1ldGFkYXRhIDo9IHJhbmdlIG93bmVyc2hpcE1ldGFkYXRhIHsKLQkJa2V5IDo9IG1ldGFkYXRhLkdldFRhcmdldE5hbWUoKQotCQlsb2NrIDo9IGtleUxvY2tzLkdldExvY2tGb3JLZXkoa2V5KQotCQlsb2NrLkxvY2soKQotCi0JCXZhbHVlLCBsb2FkZWQgOj0gb3duZXJzaGlwTWV0YWRhdGFNYXAuTG9hZE9yU3RvcmUoCi0JCQlrZXksIFtdKnRlc3Rfc3BlY19wcm90by5UZXN0U3BlY19Pd25lcnNoaXBNZXRhZGF0YXttZXRhZGF0YX0sCi0JCSkKLQkJaWYgbG9hZGVkIHsKLQkJCWV4aXN0aW5nTWV0YWRhdGEgOj0gdmFsdWUuKFtdKnRlc3Rfc3BlY19wcm90by5UZXN0U3BlY19Pd25lcnNoaXBNZXRhZGF0YSkKLQkJCWlzRHVwbGljYXRlIDo9IGZhbHNlCi0JCQlmb3IgXywgZXhpc3RpbmcgOj0gcmFuZ2UgZXhpc3RpbmdNZXRhZGF0YSB7Ci0JCQkJaWYgbWV0YWRhdGEuR2V0VHJlbmR5VGVhbUlkKCkgIT0gZXhpc3RpbmcuR2V0VHJlbmR5VGVhbUlkKCkgewotCQkJCQllcnJDaCA8LSBmbXQuRXJyb3JmKAotCQkJCQkJIkNvbmZsaWN0aW5nIHRyZW5keSB0ZWFtIElEcyBmb3VuZCBmb3IgJXMgYXQ6XG4lcyB3aXRoIHRlYW1JZCIrCi0JCQkJCQkJIjogJXMsXG4lcyB3aXRoIHRlYW1JZDogJXMiLAotCQkJCQkJa2V5LAotCQkJCQkJbWV0YWRhdGEuR2V0UGF0aCgpLCBtZXRhZGF0YS5HZXRUcmVuZHlUZWFtSWQoKSwgZXhpc3RpbmcuR2V0UGF0aCgpLAotCQkJCQkJZXhpc3RpbmcuR2V0VHJlbmR5VGVhbUlkKCksCi0JCQkJCSkKLQotCQkJCQlsb2NrLlVubG9jaygpCi0JCQkJCXJldHVybgotCQkJCX0KLQkJCQlpZiBtZXRhZGF0YS5HZXRUcmVuZHlUZWFtSWQoKSA9PSBleGlzdGluZy5HZXRUcmVuZHlUZWFtSWQoKSAmJiBtZXRhZGF0YS5HZXRQYXRoKCkgPT0gZXhpc3RpbmcuR2V0UGF0aCgpIHsKLQkJCQkJaXNEdXBsaWNhdGUgPSB0cnVlCi0JCQkJCWJyZWFrCi0JCQkJfQotCQkJfQotCQkJaWYgIWlzRHVwbGljYXRlIHsKLQkJCQlleGlzdGluZ01ldGFkYXRhID0gYXBwZW5kKGV4aXN0aW5nTWV0YWRhdGEsIG1ldGFkYXRhKQotCQkJCW93bmVyc2hpcE1ldGFkYXRhTWFwLlN0b3JlKGtleSwgZXhpc3RpbmdNZXRhZGF0YSkKLQkJCX0KLQkJfQotCi0JCWxvY2suVW5sb2NrKCkKLQl9Ci19Ci0KLS8vIHByb2Nlc3NDb2RlTWV0YWRhdGFQcm90b2J1ZiBwcm9jZXNzZXMgQ29kZU1ldGFkYXRhIHByb3RvYnVmIGZpbGVzCi1mdW5jIHByb2Nlc3NDb2RlTWV0YWRhdGFQcm90b2J1ZigKLQlmaWxlUGF0aCBzdHJpbmcsIG93bmVyc2hpcE1ldGFkYXRhTWFwICpzeW5jLk1hcCwgc291cmNlRmlsZU1ldGFkYXRhTWFwICpzeW5jLk1hcCwga2V5TG9ja3MgKmtleVRvTG9ja3NNYXAsCi0JZXJyQ2ggY2hhbiBlcnJvciwgd2cgKnN5bmMuV2FpdEdyb3VwLAotKSB7Ci0JZGVmZXIgd2cuRG9uZSgpCi0KLQlmaWxlQ29udGVudCA6PSBzdHJpbmdzLlRyaW1SaWdodChyZWFkRmlsZVRvU3RyaW5nKGZpbGVQYXRoKSwgIlxuIikKLQlpbnRlcm5hbENvZGVEYXRhIDo9IGNvZGVfbWV0YWRhdGFfaW50ZXJuYWxfcHJvdG8uQ29kZU1ldGFkYXRhSW50ZXJuYWx7fQotCWVyciA6PSBwcm90by5Vbm1hcnNoYWwoW11ieXRlKGZpbGVDb250ZW50KSwgJmludGVybmFsQ29kZURhdGEpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWVyckNoIDwtIGVycgotCQlyZXR1cm4KLQl9Ci0KLQkvLyBQcm9jZXNzIGVhY2ggVGFyZ2V0T3duZXJzaGlwIGVudHJ5Ci0JZm9yIF8sIGludGVybmFsTWV0YWRhdGEgOj0gcmFuZ2UgaW50ZXJuYWxDb2RlRGF0YS5HZXRUYXJnZXRPd25lcnNoaXBMaXN0KCkgewotCQlrZXkgOj0gaW50ZXJuYWxNZXRhZGF0YS5HZXRUYXJnZXROYW1lKCkKLQkJbG9jayA6PSBrZXlMb2Nrcy5HZXRMb2NrRm9yS2V5KGtleSkKLQkJbG9jay5Mb2NrKCkKLQotCQlmb3IgXywgc3JjRmlsZSA6PSByYW5nZSBpbnRlcm5hbE1ldGFkYXRhLkdldFNvdXJjZUZpbGVzKCkgewotCQkJc3JjRmlsZUtleSA6PSBzcmNGaWxlCi0JCQlzcmNGaWxlTG9jayA6PSBrZXlMb2Nrcy5HZXRMb2NrRm9yS2V5KHNyY0ZpbGVLZXkpCi0JCQlzcmNGaWxlTG9jay5Mb2NrKCkKLQkJCWF0dHJpYnV0ZXMgOj0gc291cmNlRmlsZUF0dHJpYnV0ZXN7Ci0JCQkJVGVhbUlEOiAgICAgICAgIGludGVybmFsTWV0YWRhdGEuR2V0VHJlbmR5VGVhbUlkKCksCi0JCQkJTXVsdGlPd25lcnNoaXA6IGludGVybmFsTWV0YWRhdGEuR2V0TXVsdGlPd25lcnNoaXAoKSwKLQkJCQlQYXRoOiAgICAgICAgICAgaW50ZXJuYWxNZXRhZGF0YS5HZXRQYXRoKCksCi0JCQl9Ci0KLQkJCWV4aXN0aW5nQXR0cmlidXRlcywgZXhpc3RzIDo9IHNvdXJjZUZpbGVNZXRhZGF0YU1hcC5Mb2FkKHNyY0ZpbGVLZXkpCi0JCQlpZiBleGlzdHMgewotCQkJCWV4aXN0aW5nIDo9IGV4aXN0aW5nQXR0cmlidXRlcy4oc291cmNlRmlsZUF0dHJpYnV0ZXMpCi0JCQkJaWYgYXR0cmlidXRlcy5UZWFtSUQgIT0gZXhpc3RpbmcuVGVhbUlEICYmICghYXR0cmlidXRlcy5NdWx0aU93bmVyc2hpcCB8fCAhZXhpc3RpbmcuTXVsdGlPd25lcnNoaXApIHsKLQkJCQkJZXJyQ2ggPC0gZm10LkVycm9yZigKLQkJCQkJCSJDb25mbGljdCBmb3VuZCBmb3Igc291cmNlIGZpbGUgJXMgY292ZXJlZCBhdCAlcyB3aXRoIHRlYW0gSUQ6ICVzLiBFeGlzdGluZyB0ZWFtIElEOiAlcyBhbmQgcGF0aDogJXMuIisKLQkJCQkJCQkiIElmIG11bHRpLW93bmVyc2hpcCBpcyByZXF1aXJlZCwgbXVsdGlPd25lcnNoaXAgc2hvdWxkIGJlIHNldCB0byB0cnVlIGluIGFsbCB0ZXN0X3NwZWMgbW9kdWxlcyB1c2luZyB0aGlzIHRhcmdldC4gIisKLQkJCQkJCQkiTXVsdGlwbGUtb3duZXJzaGlwIGluIGdlbmVyYWwgaXMgZGlzY291cmFnZWQgdGhvdWdoIGFzIGl0IG1ha2UgaW5mcmFzdHJ1Y3R1cmUgYXJvdW5kIGFuZHJvaWQgcmVseWluZyBvbiB0aGlzIGluZm9ybWF0aW9uIHBpY2sgdXAgYSByYW5kb20gdmFsdWUgd2hlbiBpdCBuZWVkcyBvbmx5IG9uZS4iLAotCQkJCQkJc3JjRmlsZSwgaW50ZXJuYWxNZXRhZGF0YS5HZXRQYXRoKCksIGF0dHJpYnV0ZXMuVGVhbUlELCBleGlzdGluZy5UZWFtSUQsIGV4aXN0aW5nLlBhdGgsCi0JCQkJCSkKLQkJCQkJc3JjRmlsZUxvY2suVW5sb2NrKCkKLQkJCQkJbG9jay5VbmxvY2soKQotCQkJCQlyZXR1cm4KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8vIFN0b3JlIHRoZSBtZXRhZGF0YSBpZiBubyBjb25mbGljdAotCQkJCXNvdXJjZUZpbGVNZXRhZGF0YU1hcC5TdG9yZShzcmNGaWxlS2V5LCBhdHRyaWJ1dGVzKQotCQkJfQotCQkJc3JjRmlsZUxvY2suVW5sb2NrKCkKLQkJfQotCi0JCXZhbHVlLCBsb2FkZWQgOj0gb3duZXJzaGlwTWV0YWRhdGFNYXAuTG9hZE9yU3RvcmUoCi0JCQlrZXksIFtdKmNvZGVfbWV0YWRhdGFfaW50ZXJuYWxfcHJvdG8uQ29kZU1ldGFkYXRhSW50ZXJuYWxfVGFyZ2V0T3duZXJzaGlwe2ludGVybmFsTWV0YWRhdGF9LAotCQkpCi0JCWlmIGxvYWRlZCB7Ci0JCQlleGlzdGluZ01ldGFkYXRhIDo9IHZhbHVlLihbXSpjb2RlX21ldGFkYXRhX2ludGVybmFsX3Byb3RvLkNvZGVNZXRhZGF0YUludGVybmFsX1RhcmdldE93bmVyc2hpcCkKLQkJCWlzRHVwbGljYXRlIDo9IGZhbHNlCi0JCQlmb3IgXywgZXhpc3RpbmcgOj0gcmFuZ2UgZXhpc3RpbmdNZXRhZGF0YSB7Ci0JCQkJaWYgaW50ZXJuYWxNZXRhZGF0YS5HZXRUcmVuZHlUZWFtSWQoKSA9PSBleGlzdGluZy5HZXRUcmVuZHlUZWFtSWQoKSAmJiBpbnRlcm5hbE1ldGFkYXRhLkdldFBhdGgoKSA9PSBleGlzdGluZy5HZXRQYXRoKCkgewotCQkJCQlpc0R1cGxpY2F0ZSA9IHRydWUKLQkJCQkJYnJlYWsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAhaXNEdXBsaWNhdGUgewotCQkJCWV4aXN0aW5nTWV0YWRhdGEgPSBhcHBlbmQoZXhpc3RpbmdNZXRhZGF0YSwgaW50ZXJuYWxNZXRhZGF0YSkKLQkJCQlvd25lcnNoaXBNZXRhZGF0YU1hcC5TdG9yZShrZXksIGV4aXN0aW5nTWV0YWRhdGEpCi0JCQl9Ci0JCX0KLQotCQlsb2NrLlVubG9jaygpCi0JfQotfQotCi1mdW5jIG1haW4oKSB7Ci0JaW5wdXRGaWxlIDo9IGZsYWcuU3RyaW5nKCJpbnB1dEZpbGUiLCAiIiwgIklucHV0IGZpbGUgcGF0aCIpCi0Jb3V0cHV0RmlsZSA6PSBmbGFnLlN0cmluZygib3V0cHV0RmlsZSIsICIiLCAiT3V0cHV0IGZpbGUgcGF0aCIpCi0JcnVsZSA6PSBmbGFnLlN0cmluZygKLQkJInJ1bGUiLCAiIiwgIk1ldGFkYXRhIHJ1bGUgKEhpbnQ6IHRlc3Rfc3BlYyBvciBjb2RlX21ldGFkYXRhKSIsCi0JKQotCWZsYWcuUGFyc2UoKQotCi0JaWYgKmlucHV0RmlsZSA9PSAiIiB8fCAqb3V0cHV0RmlsZSA9PSAiIiB8fCAqcnVsZSA9PSAiIiB7Ci0JCWZtdC5QcmludGxuKCJVc2FnZTogbWV0YWRhdGEgLXJ1bGUgPHJ1bGU+IC1pbnB1dEZpbGUgPGlucHV0IGZpbGUgcGF0aD4gLW91dHB1dEZpbGUgPG91dHB1dCBmaWxlIHBhdGg+IikKLQkJb3MuRXhpdCgxKQotCX0KLQotCWlucHV0RmlsZURhdGEgOj0gc3RyaW5ncy5UcmltUmlnaHQocmVhZEZpbGVUb1N0cmluZygqaW5wdXRGaWxlKSwgIlxuIikKLQlmaWxlUGF0aHMgOj0gc3RyaW5ncy5TcGxpdChpbnB1dEZpbGVEYXRhLCAiICIpCi0JaWYgbGVuKGZpbGVQYXRocykgPT0gMSAmJiBmaWxlUGF0aHNbMF0gPT0gIiIgewotCQl3cml0ZUVtcHR5T3V0cHV0UHJvdG8oKm91dHB1dEZpbGUsICpydWxlKQotCQlyZXR1cm4KLQl9Ci0Jb3duZXJzaGlwTWV0YWRhdGFNYXAgOj0gJnN5bmMuTWFwe30KLQlrZXlMb2NrcyA6PSAma2V5VG9Mb2Nrc01hcHt9Ci0JZXJyQ2ggOj0gbWFrZShjaGFuIGVycm9yLCBsZW4oZmlsZVBhdGhzKSkKLQl2YXIgd2cgc3luYy5XYWl0R3JvdXAKLQotCXN3aXRjaCAqcnVsZSB7Ci0JY2FzZSAidGVzdF9zcGVjIjoKLQkJZm9yIF8sIGZpbGVQYXRoIDo9IHJhbmdlIGZpbGVQYXRocyB7Ci0JCQl3Zy5BZGQoMSkKLQkJCWdvIHByb2Nlc3NUZXN0U3BlY1Byb3RvYnVmKAotCQkJCWZpbGVQYXRoLCBvd25lcnNoaXBNZXRhZGF0YU1hcCwga2V5TG9ja3MsIGVyckNoLCAmd2csCi0JCQkpCi0JCX0KLQotCQl3Zy5XYWl0KCkKLQkJY2xvc2UoZXJyQ2gpCi0KLQkJZm9yIGVyciA6PSByYW5nZSBlcnJDaCB7Ci0JCQlsb2cuRmF0YWwoZXJyKQotCQl9Ci0KLQkJYWxsS2V5cyA6PSBnZXRTb3J0ZWRLZXlzKG93bmVyc2hpcE1ldGFkYXRhTWFwKQotCQl2YXIgYWxsTWV0YWRhdGEgW10qdGVzdF9zcGVjX3Byb3RvLlRlc3RTcGVjX093bmVyc2hpcE1ldGFkYXRhCi0KLQkJZm9yIF8sIGtleSA6PSByYW5nZSBhbGxLZXlzIHsKLQkJCXZhbHVlLCBfIDo9IG93bmVyc2hpcE1ldGFkYXRhTWFwLkxvYWQoa2V5KQotCQkJbWV0YWRhdGFMaXN0IDo9IHZhbHVlLihbXSp0ZXN0X3NwZWNfcHJvdG8uVGVzdFNwZWNfT3duZXJzaGlwTWV0YWRhdGEpCi0JCQlhbGxNZXRhZGF0YSA9IGFwcGVuZChhbGxNZXRhZGF0YSwgbWV0YWRhdGFMaXN0Li4uKQotCQl9Ci0KLQkJdGVzdFNwZWMgOj0gJnRlc3Rfc3BlY19wcm90by5UZXN0U3BlY3sKLQkJCU93bmVyc2hpcE1ldGFkYXRhTGlzdDogYWxsTWV0YWRhdGEsCi0JCX0KLQkJd3JpdGVQcm90b1RvRmlsZSgqb3V0cHV0RmlsZSwgdGVzdFNwZWMpCi0JCWJyZWFrCi0JY2FzZSAiY29kZV9tZXRhZGF0YSI6Ci0JCXNvdXJjZUZpbGVNZXRhZGF0YU1hcCA6PSAmc3luYy5NYXB7fQotCQlmb3IgXywgZmlsZVBhdGggOj0gcmFuZ2UgZmlsZVBhdGhzIHsKLQkJCXdnLkFkZCgxKQotCQkJZ28gcHJvY2Vzc0NvZGVNZXRhZGF0YVByb3RvYnVmKAotCQkJCWZpbGVQYXRoLCBvd25lcnNoaXBNZXRhZGF0YU1hcCwgc291cmNlRmlsZU1ldGFkYXRhTWFwLCBrZXlMb2NrcywgZXJyQ2gsICZ3ZywKLQkJCSkKLQkJfQotCi0JCXdnLldhaXQoKQotCQljbG9zZShlcnJDaCkKLQotCQlmb3IgZXJyIDo9IHJhbmdlIGVyckNoIHsKLQkJCWxvZy5GYXRhbChlcnIpCi0JCX0KLQotCQlzb3J0ZWRLZXlzIDo9IGdldFNvcnRlZEtleXMob3duZXJzaGlwTWV0YWRhdGFNYXApCi0JCWFsbE1ldGFkYXRhIDo9IG1ha2UoW10qY29kZV9tZXRhZGF0YV9wcm90by5Db2RlTWV0YWRhdGFfVGFyZ2V0T3duZXJzaGlwLCAwKQotCQlmb3IgXywga2V5IDo9IHJhbmdlIHNvcnRlZEtleXMgewotCQkJdmFsdWUsIF8gOj0gb3duZXJzaGlwTWV0YWRhdGFNYXAuTG9hZChrZXkpCi0JCQltZXRhZGF0YSA6PSB2YWx1ZS4oW10qY29kZV9tZXRhZGF0YV9pbnRlcm5hbF9wcm90by5Db2RlTWV0YWRhdGFJbnRlcm5hbF9UYXJnZXRPd25lcnNoaXApCi0JCQlmb3IgXywgbSA6PSByYW5nZSBtZXRhZGF0YSB7Ci0JCQkJdGFyZ2V0TmFtZSA6PSBtLkdldFRhcmdldE5hbWUoKQotCQkJCXBhdGggOj0gbS5HZXRQYXRoKCkKLQkJCQl0cmVuZHlUZWFtSWQgOj0gbS5HZXRUcmVuZHlUZWFtSWQoKQotCi0JCQkJYWxsTWV0YWRhdGEgPSBhcHBlbmQoYWxsTWV0YWRhdGEsICZjb2RlX21ldGFkYXRhX3Byb3RvLkNvZGVNZXRhZGF0YV9UYXJnZXRPd25lcnNoaXB7Ci0JCQkJCVRhcmdldE5hbWU6ICAgJnRhcmdldE5hbWUsCi0JCQkJCVBhdGg6ICAgICAgICAgJnBhdGgsCi0JCQkJCVRyZW5keVRlYW1JZDogJnRyZW5keVRlYW1JZCwKLQkJCQkJU291cmNlRmlsZXM6ICBtLkdldFNvdXJjZUZpbGVzKCksCi0JCQkJfSkKLQkJCX0KLQkJfQotCi0JCWZpbmFsTWV0YWRhdGEgOj0gJmNvZGVfbWV0YWRhdGFfcHJvdG8uQ29kZU1ldGFkYXRhewotCQkJVGFyZ2V0T3duZXJzaGlwTGlzdDogYWxsTWV0YWRhdGEsCi0JCX0KLQkJd3JpdGVQcm90b1RvRmlsZSgqb3V0cHV0RmlsZSwgZmluYWxNZXRhZGF0YSkKLQkJYnJlYWsKLQlkZWZhdWx0OgotCQlsb2cuRmF0YWxmKCJObyBzcGVjaWZpYyBwcm9jZXNzaW5nIGltcGxlbWVudGVkIGZvciBydWxlICclcycuXG4iLCAqcnVsZSkKLQl9Ci19CmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS9nby5tb2QgYi90b29scy9tZXRhZGF0YS9nby5tb2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDA0YjEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvZ28ubW9kCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1tb2R1bGUgYW5kcm9pZC9zb29uZy90b29scy9tZXRhZGF0YQotCi1yZXF1aXJlIGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmIHYwLjAuMAotCi1yZXBsYWNlIGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmIHYwLjAuMCA9PiAuLi8uLi8uLi9leHRlcm5hbC9nb2xhbmctcHJvdG9idWYKLQotZ28gMS4xOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL2dvLndvcmsgYi90b29scy9tZXRhZGF0YS9nby53b3JrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmNkZjhlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL2dvLndvcmsKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1nbyAxLjE4Ci0KLXVzZSAoCi0JLgotCS4uLy4uLy4uLy4uL2V4dGVybmFsL2dvbGFuZy1wcm90b2J1ZgotCS4uLy4uLy4uL3Nvb25nL3Rlc3RpbmcvdGVzdF9zcGVjX3Byb3RvCi0JLi4vLi4vLi4vc29vbmcvdGVzdGluZy9jb2RlX21ldGFkYXRhX3Byb3RvCi0JLi4vLi4vLi4vc29vbmcvdGVzdGluZy9jb2RlX21ldGFkYXRhX3Byb3RvX2ludGVybmFsCi0pCi0KLXJlcGxhY2UgZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYgdjAuMC4wID0+IC4uLy4uLy4uLy4uL2V4dGVybmFsL2dvbGFuZy1wcm90b2J1ZgpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZW1wdHlJbnB1dEZpbGUudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZW1wdHlJbnB1dEZpbGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjEzNzg5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2VtcHR5SW5wdXRGaWxlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZXhwZWN0ZWRDb2RlTWV0YWRhdGFPdXRwdXQudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZXhwZWN0ZWRDb2RlTWV0YWRhdGFPdXRwdXQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTVjZjQwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2V4cGVjdGVkQ29kZU1ldGFkYXRhT3V0cHV0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotCi0gCi0DYmFyEgotQW5kcm9pZC5icBoFMTIzNDYiBmIuamF2YQotIAotA2ZvbxIKLUFuZHJvaWQuYnAaBTEyMzQ1IgZhLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9leHBlY3RlZE91dHB1dEZpbGUudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZXhwZWN0ZWRPdXRwdXRGaWxlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBkMzgyZi4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9leHBlY3RlZE91dHB1dEZpbGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotCi0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLW9uZRIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFuZHJvaWQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFxd2VydHkuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFzZGZnaGouYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUF6eGN2Ym4uYnAaBTEyMzQ1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTEudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWJlZWQwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGUxLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1vbmUSCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1Bc2RmZ2hqLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BenhjdmJuLmJwGgUxMjM0NQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTIudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmE3NTNmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGUyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1vbmUSCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BbmRyb2lkLmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1vbmUSCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcXdlcnR5LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTMudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWJlZWQwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGUzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1vbmUSCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1Bc2RmZ2hqLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BenhjdmJuLmJwGgUxMjM0NQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTQudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTc1OTAwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1vbmUSCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BbmRyb2lkLmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1vbmUSCi1BbmRyb2lkLmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcXdlcnR5LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTUudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGRlMDY0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU1LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi0gCi0DZm9vEgotQW5kcm9pZC5icBoFMTIzNDUiBmEuamF2YQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTYudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTYudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzdjZGNkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU2LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi0gCi0DYmFyEgotQW5kcm9pZC5icBoFMTIzNDYiBmIuamF2YQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTcudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGRlMDY0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU3LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi0gCi0DZm9vEgotQW5kcm9pZC5icBoFMTIzNDUiBmEuamF2YQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTgudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTgudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTMxNjkwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU4LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi0gCi0DZm9vEgotQW5kcm9pZC5ncBoFMTIzNDYiBmEuamF2YQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkQ29kZU1ldGFkYXRhT3V0cHV0LnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZENvZGVNZXRhZGF0YU91dHB1dC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWNmNDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkQ29kZU1ldGFkYXRhT3V0cHV0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotCi0gCi0DYmFyEgotQW5kcm9pZC5icBoFMTIzNDYiBmIuamF2YQotIAotA2ZvbxIKLUFuZHJvaWQuYnAaBTEyMzQ1IgZhLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRDb2RlTWV0YWRhdGFPdXRwdXRGaWxlLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZENvZGVNZXRhZGF0YU91dHB1dEZpbGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTVjZjQwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZENvZGVNZXRhZGF0YU91dHB1dEZpbGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLSAKLQNiYXISCi1BbmRyb2lkLmJwGgUxMjM0NiIGYi5qYXZhCi0gCi0DZm9vEgotQW5kcm9pZC5icBoFMTIzNDUiBmEuamF2YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZEVtcHR5T3V0cHV0RmlsZS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRFbXB0eU91dHB1dEZpbGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZEVtcHR5T3V0cHV0RmlsZS50eHQKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkT3V0cHV0RmlsZS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRPdXRwdXRGaWxlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBkMzgyZi4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRPdXRwdXRGaWxlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1vbmUSCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BbmRyb2lkLmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcXdlcnR5LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1Bc2RmZ2hqLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BenhjdmJuLmJwGgUxMjM0NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0Q29kZU1ldGFkYXRhLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0Q29kZU1ldGFkYXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E4MWI3ZC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dENvZGVNZXRhZGF0YS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1maWxlNS50eHQgZmlsZTYudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRDb2RlTWV0YWRhdGFOZWdhdGl2ZS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dENvZGVNZXRhZGF0YU5lZ2F0aXZlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY2NjhlNC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dENvZGVNZXRhZGF0YU5lZ2F0aXZlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWZpbGU3LnR4dCBmaWxlOC50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dEZpbGVzLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0RmlsZXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDRiYzk0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0RmlsZXMudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZmlsZTEudHh0IGZpbGUyLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0RmlsZXNOZWdhdGl2ZUNhc2UudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRGaWxlc05lZ2F0aXZlQ2FzZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzN2FhM2YuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRGaWxlc05lZ2F0aXZlQ2FzZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1maWxlMy50eHQgZmlsZTQudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvbWV0YWRhdGFfdGVzdC5nbyBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL21ldGFkYXRhX3Rlc3QuZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNGFkZDMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvbWV0YWRhdGFfdGVzdC5nbworKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi1wYWNrYWdlIG1haW4KLQotaW1wb3J0ICgKLQkiZm10IgotCSJpby9pb3V0aWwiCi0JIm9zL2V4ZWMiCi0JInN0cmluZ3MiCi0JInRlc3RpbmciCi0pCi0KLWZ1bmMgVGVzdE1ldGFkYXRhKHQgKnRlc3RpbmcuVCkgewotCWNtZCA6PSBleGVjLkNvbW1hbmQoCi0JCSJtZXRhZGF0YSIsICItcnVsZSIsICJ0ZXN0X3NwZWMiLCAiLWlucHV0RmlsZSIsICIuL2lucHV0RmlsZXMudHh0IiwgIi1vdXRwdXRGaWxlIiwKLQkJIi4vZ2VuZXJhdGVkT3V0cHV0RmlsZS50eHQiLAotCSkKLQlzdGRlcnIsIGVyciA6PSBjbWQuQ29tYmluZWRPdXRwdXQoKQotCWlmIGVyciAhPSBuaWwgewotCQl0LkZhdGFsZigiRXJyb3IgcnVubmluZyBtZXRhZGF0YSBjb21tYW5kOiAlcy4gRXJyb3I6ICV2Iiwgc3RkZXJyLCBlcnIpCi0JfQotCi0JLy8gUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGV4cGVjdGVkIG91dHB1dCBmaWxlCi0JZXhwZWN0ZWRPdXRwdXQsIGVyciA6PSBpb3V0aWwuUmVhZEZpbGUoIi4vZXhwZWN0ZWRPdXRwdXRGaWxlLnR4dCIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXQuRmF0YWxmKCJFcnJvciByZWFkaW5nIGV4cGVjdGVkIG91dHB1dCBmaWxlOiAlcyIsIGVycikKLQl9Ci0KLQkvLyBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZ2VuZXJhdGVkIG91dHB1dCBmaWxlCi0JZ2VuZXJhdGVkT3V0cHV0LCBlcnIgOj0gaW91dGlsLlJlYWRGaWxlKCIuL2dlbmVyYXRlZE91dHB1dEZpbGUudHh0IikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJdC5GYXRhbGYoIkVycm9yIHJlYWRpbmcgZ2VuZXJhdGVkIG91dHB1dCBmaWxlOiAlcyIsIGVycikKLQl9Ci0KLQlmbXQuUHJpbnRsbigpCi0KLQkvLyBDb21wYXJlIHRoZSBjb250ZW50cwotCWlmIHN0cmluZyhleHBlY3RlZE91dHB1dCkgIT0gc3RyaW5nKGdlbmVyYXRlZE91dHB1dCkgewotCQl0LkVycm9yZigiR2VuZXJhdGVkIGZpbGUgY29udGVudHMgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBvdXRwdXQiKQotCX0KLX0KLQotZnVuYyBUZXN0TWV0YWRhdGFOZWdhdGl2ZUNhc2UodCAqdGVzdGluZy5UKSB7Ci0JY21kIDo9IGV4ZWMuQ29tbWFuZCgKLQkJIm1ldGFkYXRhIiwgIi1ydWxlIiwgInRlc3Rfc3BlYyIsICItaW5wdXRGaWxlIiwgIi4vaW5wdXRGaWxlc05lZ2F0aXZlQ2FzZS50eHQiLCAiLW91dHB1dEZpbGUiLAotCQkiLi9nZW5lcmF0ZWRPdXRwdXRGaWxlTmVnYXRpdmVDYXNlLnR4dCIsCi0JKQotCXN0ZGVyciwgZXJyIDo9IGNtZC5Db21iaW5lZE91dHB1dCgpCi0JaWYgZXJyID09IG5pbCB7Ci0JCXQuRmF0YWxmKAotCQkJIkV4cGVjdGVkIGFuIGVycm9yLCBidXQgdGhlIG1ldGFkYXRhIGNvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LiBPdXRwdXQ6ICVzIiwKLQkJCXN0ZGVyciwKLQkJKQotCX0KLQotCWV4cGVjdGVkRXJyb3IgOj0gIkNvbmZsaWN0aW5nIHRyZW5keSB0ZWFtIElEcyBmb3VuZCBmb3IgamF2YS10ZXN0LW1vZHVsZSIgKwotCQkiLW5hbWUtb25lIGF0OlxuQW5kcm9pZC5icCB3aXRoIHRlYW1JZDogMTIzNDYsIiArCi0JCSJcbkFuZHJvaWQuYnAgd2l0aCB0ZWFtSWQ6IDEyMzQ1IgotCWlmICFzdHJpbmdzLkNvbnRhaW5zKAotCQlzdHJpbmdzLlRyaW1TcGFjZShzdHJpbmcoc3RkZXJyKSksIHN0cmluZ3MuVHJpbVNwYWNlKGV4cGVjdGVkRXJyb3IpLAotCSkgewotCQl0LkVycm9yZigKLQkJCSJVbmV4cGVjdGVkIGVycm9yIG1lc3NhZ2UuIEV4cGVjdGVkIHRvIGNvbnRhaW46ICVzLCBHb3Q6ICVzIiwKLQkJCWV4cGVjdGVkRXJyb3IsIHN0ZGVyciwKLQkJKQotCX0KLX0KLQotZnVuYyBUZXN0RW1wdHlJbnB1dEZpbGUodCAqdGVzdGluZy5UKSB7Ci0JY21kIDo9IGV4ZWMuQ29tbWFuZCgKLQkJIm1ldGFkYXRhIiwgIi1ydWxlIiwgInRlc3Rfc3BlYyIsICItaW5wdXRGaWxlIiwgIi4vZW1wdHlJbnB1dEZpbGUudHh0IiwgIi1vdXRwdXRGaWxlIiwKLQkJIi4vZ2VuZXJhdGVkRW1wdHlPdXRwdXRGaWxlLnR4dCIsCi0JKQotCXN0ZGVyciwgZXJyIDo9IGNtZC5Db21iaW5lZE91dHB1dCgpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXQuRmF0YWxmKCJFcnJvciBydW5uaW5nIG1ldGFkYXRhIGNvbW1hbmQ6ICVzLiBFcnJvcjogJXYiLCBzdGRlcnIsIGVycikKLQl9Ci0KLQkvLyBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZ2VuZXJhdGVkIG91dHB1dCBmaWxlCi0JZ2VuZXJhdGVkT3V0cHV0LCBlcnIgOj0gaW91dGlsLlJlYWRGaWxlKCIuL2dlbmVyYXRlZEVtcHR5T3V0cHV0RmlsZS50eHQiKQotCWlmIGVyciAhPSBuaWwgewotCQl0LkZhdGFsZigiRXJyb3IgcmVhZGluZyBnZW5lcmF0ZWQgb3V0cHV0IGZpbGU6ICVzIiwgZXJyKQotCX0KLQotCWZtdC5QcmludGxuKCkKLQotCS8vIENvbXBhcmUgdGhlIGNvbnRlbnRzCi0JaWYgc3RyaW5nKGdlbmVyYXRlZE91dHB1dCkgIT0gIlxuIiB7Ci0JCXQuRXJyb3JmKCJHZW5lcmF0ZWQgZmlsZSBjb250ZW50cyBkbyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIG91dHB1dCIpCi0JfQotfQotCi1mdW5jIFRlc3RDb2RlTWV0YWRhdGEodCAqdGVzdGluZy5UKSB7Ci0JY21kIDo9IGV4ZWMuQ29tbWFuZCgKLQkJIm1ldGFkYXRhIiwgIi1ydWxlIiwgImNvZGVfbWV0YWRhdGEiLCAiLWlucHV0RmlsZSIsICIuL2lucHV0Q29kZU1ldGFkYXRhLnR4dCIsICItb3V0cHV0RmlsZSIsCi0JCSIuL2dlbmVyYXRlZENvZGVNZXRhZGF0YU91dHB1dEZpbGUudHh0IiwKLQkpCi0Jc3RkZXJyLCBlcnIgOj0gY21kLkNvbWJpbmVkT3V0cHV0KCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJdC5GYXRhbGYoIkVycm9yIHJ1bm5pbmcgbWV0YWRhdGEgY29tbWFuZDogJXMuIEVycm9yOiAldiIsIHN0ZGVyciwgZXJyKQotCX0KLQotCS8vIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBleHBlY3RlZCBvdXRwdXQgZmlsZQotCWV4cGVjdGVkT3V0cHV0LCBlcnIgOj0gaW91dGlsLlJlYWRGaWxlKCIuL2V4cGVjdGVkQ29kZU1ldGFkYXRhT3V0cHV0LnR4dCIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXQuRmF0YWxmKCJFcnJvciByZWFkaW5nIGV4cGVjdGVkIG91dHB1dCBmaWxlOiAlcyIsIGVycikKLQl9Ci0KLQkvLyBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZ2VuZXJhdGVkIG91dHB1dCBmaWxlCi0JZ2VuZXJhdGVkT3V0cHV0LCBlcnIgOj0gaW91dGlsLlJlYWRGaWxlKCIuL2dlbmVyYXRlZENvZGVNZXRhZGF0YU91dHB1dEZpbGUudHh0IikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJdC5GYXRhbGYoIkVycm9yIHJlYWRpbmcgZ2VuZXJhdGVkIG91dHB1dCBmaWxlOiAlcyIsIGVycikKLQl9Ci0KLQlmbXQuUHJpbnRsbigpCi0KLQkvLyBDb21wYXJlIHRoZSBjb250ZW50cwotCWlmIHN0cmluZyhleHBlY3RlZE91dHB1dCkgIT0gc3RyaW5nKGdlbmVyYXRlZE91dHB1dCkgewotCQl0LkVycm9yZigiR2VuZXJhdGVkIGZpbGUgY29udGVudHMgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBvdXRwdXQiKQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL291dHB1dEZpbGUudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvb3V0cHV0RmlsZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZDM4MmYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvb3V0cHV0RmlsZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0KLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtb25lEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQW5kcm9pZC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXF3ZXJ0eS5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXNkZmdoai5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXp4Y3Zibi5icBoFMTIzNDUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvQW5kcm9pZC5icCBiL3Rvb2xzL3JlbGVhc2V0b29scy9BbmRyb2lkLmJwCmluZGV4IDhjNzEwNDQuLmUzNzFiMjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9BbmRyb2lkLmJwCkBAIC02MzcsNiArNjM3LDggQEAKICAgICBdLAogICAgIGRhdGE6IFsKICAgICAgICAgInRlc3RkYXRhLyoqLyoiLAorICAgIF0sCisgICAgZGV2aWNlX2NvbW1vbl9kYXRhOiBbCiAgICAgICAgICI6Y29tLmFuZHJvaWQuYXBleC5jb21wcmVzc2VkLnYxIiwKICAgICAgICAgIjpjb20uYW5kcm9pZC5hcGV4LnZlbmRvci5mb28ud2l0aF92aW50ZiIsCiAgICAgXSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9hZGRfaW1nX3RvX3RhcmdldF9maWxlcy5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy9hZGRfaW1nX3RvX3RhcmdldF9maWxlcy5weQppbmRleCBjMjVmZjI3Li4zMGE2YWNjIDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvYWRkX2ltZ190b190YXJnZXRfZmlsZXMucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL2FkZF9pbWdfdG9fdGFyZ2V0X2ZpbGVzLnB5CkBAIC0xMTAwLDcgKzExMDAsNyBAQAogICAgIHZibWV0YV9wYXJ0aXRpb25zID0gY29tbW9uLkFWQl9QQVJUSVRJT05TWzpdICsgdHVwbGUoYXZiX2N1c3RvbV9wYXJ0aXRpb25zKQogCiAgICAgdmJtZXRhX3N5c3RlbSA9IE9QVElPTlMuaW5mb19kaWN0LmdldCgiYXZiX3ZibWV0YV9zeXN0ZW0iLCAiIikuc3RyaXAoKQotICAgIGlmIHZibWV0YV9zeXN0ZW06CisgICAgaWYgdmJtZXRhX3N5c3RlbSBhbmQgc2V0KHZibWV0YV9zeXN0ZW0uc3BsaXQoKSkuaW50ZXJzZWN0aW9uKHBhcnRpdGlvbnMpOgogICAgICAgYmFubmVyKCJ2Ym1ldGFfc3lzdGVtIikKICAgICAgIHBhcnRpdGlvbnNbInZibWV0YV9zeXN0ZW0iXSA9IEFkZFZCTWV0YSgKICAgICAgICAgICBvdXRwdXRfemlwLCBwYXJ0aXRpb25zLCAidmJtZXRhX3N5c3RlbSIsIHZibWV0YV9zeXN0ZW0uc3BsaXQoKSkKQEAgLTExMTAsNyArMTExMCw3IEBACiAgICAgICB2Ym1ldGFfcGFydGl0aW9ucy5hcHBlbmQoInZibWV0YV9zeXN0ZW0iKQogCiAgICAgdmJtZXRhX3ZlbmRvciA9IE9QVElPTlMuaW5mb19kaWN0LmdldCgiYXZiX3ZibWV0YV92ZW5kb3IiLCAiIikuc3RyaXAoKQotICAgIGlmIHZibWV0YV92ZW5kb3I6CisgICAgaWYgdmJtZXRhX3ZlbmRvciBhbmQgc2V0KHZibWV0YV92ZW5kb3Iuc3BsaXQoKSkuaW50ZXJzZWN0aW9uKHBhcnRpdGlvbnMpOgogICAgICAgYmFubmVyKCJ2Ym1ldGFfdmVuZG9yIikKICAgICAgIHBhcnRpdGlvbnNbInZibWV0YV92ZW5kb3IiXSA9IEFkZFZCTWV0YSgKICAgICAgICAgICBvdXRwdXRfemlwLCBwYXJ0aXRpb25zLCAidmJtZXRhX3ZlbmRvciIsIHZibWV0YV92ZW5kb3Iuc3BsaXQoKSkKQEAgLTExMzcsNyArMTEzNyw3IEBACiAgICAgICAgICAgICBpZiBpdGVtIG5vdCBpbiBpbmNsdWRlZF9wYXJ0aXRpb25zXQogICAgICAgICB2Ym1ldGFfcGFydGl0aW9ucy5hcHBlbmQocGFydGl0aW9uX25hbWUpCiAKLSAgICBpZiBPUFRJT05TLmluZm9fZGljdC5nZXQoImF2Yl9idWlsZGluZ192Ym1ldGFfaW1hZ2UiKSA9PSAidHJ1ZSI6CisgICAgaWYgT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJhdmJfYnVpbGRpbmdfdmJtZXRhX2ltYWdlIikgPT0gInRydWUiIGFuZCBzZXQodmJtZXRhX3BhcnRpdGlvbnMpLmludGVyc2VjdGlvbihwYXJ0aXRpb25zKToKICAgICAgIGJhbm5lcigidmJtZXRhIikKICAgICAgIEFkZFZCTWV0YShvdXRwdXRfemlwLCBwYXJ0aXRpb25zLCAidmJtZXRhIiwgdmJtZXRhX3BhcnRpdGlvbnMpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9hcGV4X3V0aWxzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL2FwZXhfdXRpbHMucHkKaW5kZXggNTRkZjk1NS4uMDhmMmI4MyAxMDA2NDQKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL2FwZXhfdXRpbHMucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL2FwZXhfdXRpbHMucHkKQEAgLTc5LDE1ICs3OSwxMCBAQAogICAgIFJldHVybnM6CiAgICAgICBUaGUgcmVwYWNrZWQgYXBleCBmaWxlIGNvbnRhaW5pbmcgdGhlIHNpZ25lZCBhcGsgZmlsZXMuCiAgICAgIiIiCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZGVidWdmc19wYXRoKToKLSAgICAgIHJhaXNlIEFwZXhTaWduaW5nRXJyb3IoCi0gICAgICAgICAgIkNvdWxkbid0IGZpbmQgbG9jYXRpb24gb2YgZGVidWdmc19zdGF0aWM6ICIgKwotICAgICAgICAgICJQYXRoIHt9IGRvZXMgbm90IGV4aXN0LiAiLmZvcm1hdChzZWxmLmRlYnVnZnNfcGF0aCkgKwotICAgICAgICAgICJNYWtlIHN1cmUgYmluL2RlYnVnZnNfc3RhdGljIGNhbiBiZSBmb3VuZCBpbiAtcCA8cGF0aD4iKQotICAgIGxpc3RfY21kID0gWydkZWFwZXhlcicsICctLWRlYnVnZnNfcGF0aCcsIHNlbGYuZGVidWdmc19wYXRoLAotICAgICAgICAgICAgICAgICdsaXN0Jywgc2VsZi5hcGV4X3BhdGhdCi0gICAgZW50cmllc19uYW1lcyA9IGNvbW1vbi5SdW5BbmRDaGVja091dHB1dChsaXN0X2NtZCkuc3BsaXQoKQotICAgIGFwa19lbnRyaWVzID0gW25hbWUgZm9yIG5hbWUgaW4gZW50cmllc19uYW1lcyBpZiBuYW1lLmVuZHN3aXRoKCcuYXBrJyldCisgICAgcGF5bG9hZF9kaXIgPSBzZWxmLkV4dHJhY3RBcGV4UGF5bG9hZChzZWxmLmFwZXhfcGF0aCkKKyAgICBhcGtfZW50cmllcyA9IFtdCisgICAgZm9yIGJhc2VfZGlyLCBfLCBmaWxlcyBpbiBvcy53YWxrKHBheWxvYWRfZGlyKToKKyAgICAgIGFwa19lbnRyaWVzLmV4dGVuZChvcy5wYXRoLmpvaW4oYmFzZV9kaXIsIGZpbGUpIGZvciBmaWxlIGluIGZpbGVzIGlmIGZpbGUuZW5kc3dpdGgoJy5hcGsnKSkKIAogICAgICMgTm8gbmVlZCB0byBzaWduIGFuZCByZXBhY2ssIHJldHVybiB0aGUgb3JpZ2luYWwgYXBleCBwYXRoLgogICAgIGlmIG5vdCBhcGtfZW50cmllcyBhbmQgc2VsZi5zaWduX3Rvb2wgaXMgTm9uZToKQEAgLTEwNSwxNiArMTAwLDE2IEBACiAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdBcGsgcGF0aCBkb2VzIG5vdCBjb250YWluIHRoZSBpbnRlbmRlZCBkaXJlY3RvcnkgbmFtZTonCiAgICAgICAgICAgICAgICAgICAgICAgICcgJXMnLCBlbnRyeSkKIAotICAgIHBheWxvYWRfZGlyLCBoYXNfc2lnbmVkX2NvbnRlbnQgPSBzZWxmLkV4dHJhY3RBcGV4UGF5bG9hZEFuZFNpZ25Db250ZW50cygKLSAgICAgICAgYXBrX2VudHJpZXMsIGFwa19rZXlzLCBwYXlsb2FkX2tleSwgc2lnbmluZ19hcmdzKQorICAgIGhhc19zaWduZWRfY29udGVudCA9IHNlbGYuU2lnbkNvbnRlbnRzSW5QYXlsb2FkKAorICAgICAgICBwYXlsb2FkX2RpciwgYXBrX2VudHJpZXMsIGFwa19rZXlzLCBwYXlsb2FkX2tleSwgc2lnbmluZ19hcmdzKQogICAgIGlmIG5vdCBoYXNfc2lnbmVkX2NvbnRlbnQ6CiAgICAgICBsb2dnZXIuaW5mbygnTm8gY29udGVudHMgaGFzIGJlZW4gc2lnbmVkIGluICVzJywgc2VsZi5hcGV4X3BhdGgpCiAgICAgICByZXR1cm4gc2VsZi5hcGV4X3BhdGgKIAogICAgIHJldHVybiBzZWxmLlJlcGFja0FwZXhQYXlsb2FkKHBheWxvYWRfZGlyLCBwYXlsb2FkX2tleSwgc2lnbmluZ19hcmdzKQogCi0gIGRlZiBFeHRyYWN0QXBleFBheWxvYWRBbmRTaWduQ29udGVudHMoc2VsZiwgYXBrX2VudHJpZXMsIGFwa19rZXlzLCBwYXlsb2FkX2tleSwgc2lnbmluZ19hcmdzKToKLSAgICAiIiJFeHRyYWN0cyB0aGUgcGF5bG9hZCBpbWFnZSBhbmQgc2lnbnMgdGhlIGNvbnRhaW5pbmcgYXBrIGZpbGVzLiIiIgorICBkZWYgRXh0cmFjdEFwZXhQYXlsb2FkKHNlbGYsIGFwZXhfcGF0aCk6CisgICAgIiIiRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIGFuIEFQRVggYW5kIHJldHVybnMgdGhlIGRpcmVjdG9yeSBvZiB0aGUgY29udGVudHMiIiIKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kZWJ1Z2ZzX3BhdGgpOgogICAgICAgcmFpc2UgQXBleFNpZ25pbmdFcnJvcigKICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBsb2NhdGlvbiBvZiBkZWJ1Z2ZzX3N0YXRpYzogIiArCkBAIC0xMjksOSArMTI0LDEyIEBACiAgICAgZXh0cmFjdF9jbWQgPSBbJ2RlYXBleGVyJywgJy0tZGVidWdmc19wYXRoJywgc2VsZi5kZWJ1Z2ZzX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgJy0tZnNja2Vyb2ZzX3BhdGgnLCBzZWxmLmZzY2tlcm9mc19wYXRoLAogICAgICAgICAgICAgICAgICAgICdleHRyYWN0JywKLSAgICAgICAgICAgICAgICAgICBzZWxmLmFwZXhfcGF0aCwgcGF5bG9hZF9kaXJdCisgICAgICAgICAgICAgICAgICAgYXBleF9wYXRoLCBwYXlsb2FkX2Rpcl0KICAgICBjb21tb24uUnVuQW5kQ2hlY2tPdXRwdXQoZXh0cmFjdF9jbWQpCisgICAgcmV0dXJuIHBheWxvYWRfZGlyCiAKKyAgZGVmIFNpZ25Db250ZW50c0luUGF5bG9hZChzZWxmLCBwYXlsb2FkX2RpciwgYXBrX2VudHJpZXMsIGFwa19rZXlzLCBwYXlsb2FkX2tleSwgc2lnbmluZ19hcmdzKToKKyAgICAiIiJTaWducyB0aGUgY29udGVudHMgaW4gcGF5bG9hZC4iIiIKICAgICBoYXNfc2lnbmVkX2NvbnRlbnQgPSBGYWxzZQogICAgIGZvciBlbnRyeSBpbiBhcGtfZW50cmllczoKICAgICAgIGFwa19wYXRoID0gb3MucGF0aC5qb2luKHBheWxvYWRfZGlyLCBlbnRyeSkKQEAgLTE2Myw3ICsxNjEsNyBAQAogICAgICAgY29tbW9uLlJ1bkFuZENoZWNrT3V0cHV0KGNtZCkKICAgICAgIGhhc19zaWduZWRfY29udGVudCA9IFRydWUKIAotICAgIHJldHVybiBwYXlsb2FkX2RpciwgaGFzX3NpZ25lZF9jb250ZW50CisgICAgcmV0dXJuIGhhc19zaWduZWRfY29udGVudAogCiAgIGRlZiBSZXBhY2tBcGV4UGF5bG9hZChzZWxmLCBwYXlsb2FkX2RpciwgcGF5bG9hZF9rZXksIHNpZ25pbmdfYXJncz1Ob25lKToKICAgICAiIiJSZWJ1aWxkcyB0aGUgYXBleCBmaWxlIHdpdGggdGhlIHVwZGF0ZWQgcGF5bG9hZCBkaXJlY3RvcnkuIiIiCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL290YV9mcm9tX3RhcmdldF9maWxlcy5weQppbmRleCA2NDQ2ZTFmLi43NmQxNjhjIDEwMDc1NQotLS0gYS90b29scy9yZWxlYXNldG9vbHMvb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfZnJvbV90YXJnZXRfZmlsZXMucHkKQEAgLTEwMzksNiArMTAzOSw5IEBACiAKICAgIyBQcmVwYXJlIGN1c3RvbSBpbWFnZXMuCiAgIGlmIE9QVElPTlMuY3VzdG9tX2ltYWdlczoKKyAgICBpZiBzb3VyY2VfZmlsZSBpcyBub3QgTm9uZToKKyAgICAgIHNvdXJjZV9maWxlID0gR2V0VGFyZ2V0RmlsZXNaaXBGb3JDdXN0b21JbWFnZXNVcGRhdGVzKAorICAgICAgICAgICBzb3VyY2VfZmlsZSwgT1BUSU9OUy5jdXN0b21faW1hZ2VzKQogICAgIHRhcmdldF9maWxlID0gR2V0VGFyZ2V0RmlsZXNaaXBGb3JDdXN0b21JbWFnZXNVcGRhdGVzKAogICAgICAgICB0YXJnZXRfZmlsZSwgT1BUSU9OUy5jdXN0b21faW1hZ2VzKQogCkBAIC0xMTIxLDE3ICsxMTI0LDE4IEBACiAgIGFkZGl0aW9uYWxfYXJncyArPSBbIi0tZW5hYmxlX2x6NGRpZmY9IiArCiAgICAgICAgICAgICAgICAgICAgICAgc3RyKE9QVElPTlMuZW5hYmxlX2x6NGRpZmYpLmxvd2VyKCldCiAKKyAgZW52X292ZXJyaWRlID0ge30KICAgaWYgc291cmNlX2ZpbGUgYW5kIE9QVElPTlMuZW5hYmxlX2x6NGRpZmY6Ci0gICAgaW5wdXRfdG1wID0gY29tbW9uLlVuemlwVGVtcChzb3VyY2VfZmlsZSwgWyJNRVRBL2xpYmx6NC5zbyJdKQotICAgIGxpYmx6NF9wYXRoID0gb3MucGF0aC5qb2luKGlucHV0X3RtcCwgIk1FVEEiLCAibGlibHo0LnNvIikKKyAgICBsaWJsejRfcGF0aCA9IG9zLnBhdGguam9pbihzb3VyY2VfZmlsZSwgIk1FVEEiLCAibGlibHo0LnNvIikKICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoCiAgICAgICAgIGxpYmx6NF9wYXRoKSwgImxpYmx6NC5zbyBub3QgZm91bmQgaW4gTUVUQS8gZGlyIG9mIHRhcmdldCBmaWxlIHt9Ii5mb3JtYXQobGlibHo0X3BhdGgpCiAgICAgbG9nZ2VyLmluZm8oIkVuYWJsaW5nIGx6NGRpZmYgJXMiLCBsaWJsejRfcGF0aCkKLSAgICBhZGRpdGlvbmFsX2FyZ3MgKz0gWyItLWxpYmx6NF9wYXRoIiwgbGlibHo0X3BhdGhdCiAgICAgZXJvZnNfY29tcHJlc3Npb25fcGFyYW0gPSBPUFRJT05TLnRhcmdldF9pbmZvX2RpY3QuZ2V0KAogICAgICAgICAiZXJvZnNfZGVmYXVsdF9jb21wcmVzc29yIikKICAgICBhc3NlcnQgZXJvZnNfY29tcHJlc3Npb25fcGFyYW0gaXMgbm90IE5vbmUsICInZXJvZnNfZGVmYXVsdF9jb21wcmVzc29yJyBub3QgZm91bmQgaW4gTUVUQS9taXNjX2luZm8udHh0IG9mIHRhcmdldCBidWlsZC4gVGhpcyBpcyByZXF1aXJlZCB0byBlbmFibGUgbHo0ZGlmZi4iCiAgICAgYWRkaXRpb25hbF9hcmdzICs9IFsiLS1lcm9mc19jb21wcmVzc2lvbl9wYXJhbSIsIGVyb2ZzX2NvbXByZXNzaW9uX3BhcmFtXQorICAgIGVudl9vdmVycmlkZVsiTERfUFJFTE9BRCJdID0gbGlibHo0X3BhdGggKyBcCisgICAgICAgICI6IiArIG9zLmVudmlyb24uZ2V0KCJMRF9QUkVMT0FEIiwgIiIpCiAKICAgaWYgT1BUSU9OUy5kaXNhYmxlX3ZhYmM6CiAgICAgYWRkaXRpb25hbF9hcmdzICs9IFsiLS1kaXNhYmxlX3ZhYmM9dHJ1ZSJdCkBAIC0xMTQxLDEwICsxMTQ1LDE1IEBACiAgICAgYWRkaXRpb25hbF9hcmdzICs9IFsiLS1jb21wcmVzc29yX3R5cGVzIiwgT1BUSU9OUy5jb21wcmVzc29yX3R5cGVzXQogICBhZGRpdGlvbmFsX2FyZ3MgKz0gWyItLW1heF90aW1lc3RhbXAiLCBtYXhfdGltZXN0YW1wXQogCisgIGVudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgaWYgZW52X292ZXJyaWRlOgorICAgIGxvZ2dlci5pbmZvKCJVc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJXMiLCBlbnZfb3ZlcnJpZGUpCisgICAgZW52LnVwZGF0ZShlbnZfb3ZlcnJpZGUpCiAgIHBheWxvYWQuR2VuZXJhdGUoCiAgICAgICB0YXJnZXRfZmlsZSwKICAgICAgIHNvdXJjZV9maWxlLAotICAgICAgYWRkaXRpb25hbF9hcmdzICsgcGFydGl0aW9uX3RpbWVzdGFtcHNfZmxhZ3MKKyAgICAgIGFkZGl0aW9uYWxfYXJncyArIHBhcnRpdGlvbl90aW1lc3RhbXBzX2ZsYWdzLAorICAgICAgZW52PWVudgogICApCiAKICAgIyBTaWduIHRoZSBwYXlsb2FkLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL290YV91dGlscy5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfdXRpbHMucHkKaW5kZXggODFiNTNkYy4uODUyZDYyYiAxMDA2NDQKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL290YV91dGlscy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvb3RhX3V0aWxzLnB5CkBAIC04NDUsMTYgKzg0NSwxNiBAQAogICAgIHNlbGYuaXNfcGFydGlhbF91cGRhdGUgPSBpc19wYXJ0aWFsX3VwZGF0ZQogICAgIHNlbGYuc3BsX2Rvd25ncmFkZSA9IHNwbF9kb3duZ3JhZGUKIAotICBkZWYgX1J1bihzZWxmLCBjbWQpOiAgIyBweWxpbnQ6IGRpc2FibGU9bm8tc2VsZi11c2UKKyAgZGVmIF9SdW4oc2VsZiwgY21kLCAqKmt3YXJncyk6ICAjIHB5bGludDogZGlzYWJsZT1uby1zZWxmLXVzZQogICAgICMgRG9uJ3QgcGlwZSAoYnVmZmVyKSB0aGUgb3V0cHV0IGlmIHZlcmJvc2UgaXMgc2V0LiBMZXQKICAgICAjIGJyaWxsb191cGRhdGVfcGF5bG9hZCB3cml0ZSB0byBzdGRvdXQvc3RkZXJyIGRpcmVjdGx5LCBzbyBpdHMgcHJvZ3Jlc3MgY2FuCiAgICAgIyBiZSBtb25pdG9yZWQuCiAgICAgaWYgT1BUSU9OUy52ZXJib3NlOgotICAgICAgY29tbW9uLlJ1bkFuZENoZWNrT3V0cHV0KGNtZCwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgY29tbW9uLlJ1bkFuZENoZWNrT3V0cHV0KGNtZCwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCAqKmt3YXJncykKICAgICBlbHNlOgotICAgICAgY29tbW9uLlJ1bkFuZENoZWNrT3V0cHV0KGNtZCkKKyAgICAgIGNvbW1vbi5SdW5BbmRDaGVja091dHB1dChjbWQsICoqa3dhcmdzKQogCi0gIGRlZiBHZW5lcmF0ZShzZWxmLCB0YXJnZXRfZmlsZSwgc291cmNlX2ZpbGU9Tm9uZSwgYWRkaXRpb25hbF9hcmdzPU5vbmUpOgorICBkZWYgR2VuZXJhdGUoc2VsZiwgdGFyZ2V0X2ZpbGUsIHNvdXJjZV9maWxlPU5vbmUsIGFkZGl0aW9uYWxfYXJncz1Ob25lLCAqKmt3YXJncyk6CiAgICAgIiIiR2VuZXJhdGVzIGEgcGF5bG9hZCBmcm9tIHRoZSBnaXZlbiB0YXJnZXQtZmlsZXMgemlwKHMpLgogCiAgICAgQXJnczoKQEAgLTg2Myw2ICs4NjMsNyBAQAogICAgICAgICAgIGdlbmVyYXRpbmcgYSBmdWxsIE9UQS4KICAgICAgIGFkZGl0aW9uYWxfYXJnczogQSBsaXN0IG9mIGFkZGl0aW9uYWwgYXJncyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8KICAgICAgICAgICBkZWx0YV9nZW5lcmF0b3IgYmluYXJ5OyBvciBOb25lLgorICAgICAga3dhcmdzOiBBbnkgYWRkaXRpb25hbCBhcmdzIHRvIHBhc3MgdG8gc3VicHJvY2Vzcy5Qb3BlbgogICAgICIiIgogICAgIGlmIGFkZGl0aW9uYWxfYXJncyBpcyBOb25lOgogICAgICAgYWRkaXRpb25hbF9hcmdzID0gW10KQEAgLTkxOCw3ICs5MTksNyBAQAogICAgIGlmIHNlbGYuaXNfcGFydGlhbF91cGRhdGU6CiAgICAgICBjbWQuZXh0ZW5kKFsiLS1pc19wYXJ0aWFsX3VwZGF0ZT10cnVlIl0pCiAgICAgY21kLmV4dGVuZChhZGRpdGlvbmFsX2FyZ3MpCi0gICAgc2VsZi5fUnVuKGNtZCkKKyAgICBzZWxmLl9SdW4oY21kLCAqKmt3YXJncykKIAogICAgIHNlbGYucGF5bG9hZF9maWxlID0gcGF5bG9hZF9maWxlCiAgICAgc2VsZi5wYXlsb2FkX3Byb3BlcnRpZXMgPSBOb25lCmRpZmYgLS1naXQgYS90b29scy9zaWduYXBrL3NyYy9jb20vYW5kcm9pZC9zaWduYXBrL1NpZ25BcGsuamF2YSBiL3Rvb2xzL3NpZ25hcGsvc3JjL2NvbS9hbmRyb2lkL3NpZ25hcGsvU2lnbkFway5qYXZhCmluZGV4IDZiMjM0MWIuLjY1NGUxOTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NpZ25hcGsvc3JjL2NvbS9hbmRyb2lkL3NpZ25hcGsvU2lnbkFway5qYXZhCisrKyBiL3Rvb2xzL3NpZ25hcGsvc3JjL2NvbS9hbmRyb2lkL3NpZ25hcGsvU2lnbkFway5qYXZhCkBAIC0zMDIsNyArMzAyLDYgQEAKICAgICAgICAgICAgIGZpbmFsIEtleVN0b3JlIGtleVN0b3JlLCBmaW5hbCBTdHJpbmcga2V5TmFtZSkKICAgICAgICAgICAgIHRocm93cyBDZXJ0aWZpY2F0ZUV4Y2VwdGlvbiwgS2V5U3RvcmVFeGNlcHRpb24sIE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgVW5yZWNvdmVyYWJsZUtleUV4Y2VwdGlvbiwgVW5yZWNvdmVyYWJsZUVudHJ5RXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgS2V5IGtleSA9IGtleVN0b3JlLmdldEtleShrZXlOYW1lLCByZWFkUGFzc3dvcmQoa2V5TmFtZSkpOwogICAgICAgICBmaW5hbCBQcml2YXRlS2V5RW50cnkgcHJpdmF0ZUtleUVudHJ5ID0gKFByaXZhdGVLZXlFbnRyeSkga2V5U3RvcmUuZ2V0RW50cnkoa2V5TmFtZSwgbnVsbCk7CiAgICAgICAgIGlmIChwcml2YXRlS2V5RW50cnkgPT0gbnVsbCkgewogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCg==