ZGlmZiAtLWdpdCBhL2NpL3Rlc3RfZGlzY292ZXJ5X2FnZW50LnB5IGIvY2kvdGVzdF9kaXNjb3ZlcnlfYWdlbnQucHkKaW5kZXggODlkMzVkNy4uNGVlZDI4ZCAxMDA2NDQKLS0tIGEvY2kvdGVzdF9kaXNjb3ZlcnlfYWdlbnQucHkKKysrIGIvY2kvdGVzdF9kaXNjb3ZlcnlfYWdlbnQucHkKQEAgLTExLDE4ICsxMSwzMyBAQAogIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyIiIlRlc3QgZGlzY292ZXJ5IGFnZW50IHRoYXQgdXNlcyBUcmFkZUZlZCB0byBkaXNjb3ZlciB0ZXN0IGFydGlmYWN0cy4iIiIKK2ltcG9ydCBnbG9iCitpbXBvcnQganNvbgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBidWlsZGJvdAorCisKIGNsYXNzIFRlc3REaXNjb3ZlcnlBZ2VudDoKICAgIiIiVGVzdCBkaXNjb3ZlcnkgYWdlbnQuIiIiCiAKLSAgX0FPU1BfVFJBREVGRURfUFJFQlVJTFRfSkFSX1JFTEFUSVZFX1BBVEggPSAoCi0gICAgICAidG9vbHMvdHJhZGVmZWRlcmF0aW9uL3ByZWJ1aWx0cy9maWxlZ3JvdXBzL3RyYWRlZmVkLyIKKyAgX1RSQURFRkVEX1BSRUJVSUxUX0pBUl9SRUxBVElWRV9QQVRIID0gKAorICAgICAgInZlbmRvci9nb29nbGVfdHJhZGVmZWRlcmF0aW9uL3ByZWJ1aWx0cy9maWxlZ3JvdXBzL2dvb2dsZS10cmFkZWZlZC8iCiAgICkKIAorICBfVFJBREVGRURfTk9fUE9TU0lCTEVfVEVTVF9ESVNDT1ZFUllfS0VZID0gIk5vUG9zc2libGVUZXN0RGlzY292ZXJ5IgorCisgIF9UUkFERUZFRF9URVNUX1pJUF9SRUdFWEVTX0xJU1RfS0VZID0gIlRlc3RaaXBSZWdleGVzIgorCisgIF9UUkFERUZFRF9ESVNDT1ZFUllfT1VUUFVUX0ZJTEVfTkFNRSA9ICJ0ZXN0X2Rpc2NvdmVyeV9hZ2VudC50eHQiCisKICAgZGVmIF9faW5pdF9fKAogICAgICAgc2VsZiwKICAgICAgIHRyYWRlZmVkX2FyZ3M6IGxpc3Rbc3RyXSwKLSAgICAgIHRlc3RfbWFwcGluZ196aXBfcGF0aDogc3RyLAotICAgICAgdHJhZGVmZWRfamFyX3JldmVsYW50X2ZpbGVzX3BhdGg6IHN0ciA9IF9BT1NQX1RSQURFRkVEX1BSRUJVSUxUX0pBUl9SRUxBVElWRV9QQVRILAorICAgICAgdGVzdF9tYXBwaW5nX3ppcF9wYXRoOiBzdHIgPSAiIiwKKyAgICAgIHRyYWRlZmVkX2phcl9yZXZlbGFudF9maWxlc19wYXRoOiBzdHIgPSBfVFJBREVGRURfUFJFQlVJTFRfSkFSX1JFTEFUSVZFX1BBVEgsCiAgICk6CiAgICAgc2VsZi50cmFkZWZlZF9hcmdzID0gdHJhZGVmZWRfYXJncwogICAgIHNlbGYudGVzdF9tYXBwaW5nX3ppcF9wYXRoID0gdGVzdF9tYXBwaW5nX3ppcF9wYXRoCkBAIC0zNCw3ICs0OSw0NiBAQAogICAgIFJldHVybnM6CiAgICAgICBBIGxpc3Qgb2YgdGVzdCB6aXAgcmVnZXhlcyB0aGF0IFRGIGlzIGdvaW5nIHRvIHRyeSB0byBwdWxsIGZpbGVzIGZyb20uCiAgICAgIiIiCi0gICAgcmV0dXJuIFtdCisgICAgdGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgYnVpbGRib3QuT3V0RGlyKCksIHNlbGYuX1RSQURFRkVEX0RJU0NPVkVSWV9PVVRQVVRfRklMRV9OQU1FCisgICAgKQorICAgIHdpdGggb3BlbigKKyAgICAgICAgdGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGVfbmFtZSwgbW9kZT0idyt0IgorICAgICkgYXMgdGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGU6CisgICAgICBqYXZhX2FyZ3MgPSBbXQorICAgICAgamF2YV9hcmdzLmFwcGVuZCgicHJlYnVpbHRzL2pkay9qZGsyMS9saW51eC14ODYvYmluL2phdmEiKQorICAgICAgamF2YV9hcmdzLmFwcGVuZCgiLWNwIikKKyAgICAgIGphdmFfYXJncy5hcHBlbmQoCisgICAgICAgICAgc2VsZi5jcmVhdGVfY2xhc3NwYXRoKHNlbGYudHJhZGVmZWRfamFyX3JlbGV2YW50X2ZpbGVzX3BhdGgpCisgICAgICApCisgICAgICBqYXZhX2FyZ3MuYXBwZW5kKAorICAgICAgICAgICJjb20uYW5kcm9pZC50cmFkZWZlZC5vYnNlcnZhdG9yeS5UZXN0WmlwRGlzY292ZXJ5RXhlY3V0b3IiCisgICAgICApCisgICAgICBqYXZhX2FyZ3MuZXh0ZW5kKHNlbGYudHJhZGVmZWRfYXJncykKKyAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICBlbnYudXBkYXRlKHsiRElTQ09WRVJZX09VVFBVVF9GSUxFIjogdGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGUubmFtZX0pCisgICAgICBsb2dnaW5nLmluZm8oZiJDYWxsaW5nIHRlc3QgZGlzY292ZXJ5IHdpdGggYXJnczoge2phdmFfYXJnc30iKQorICAgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihhcmdzPWphdmFfYXJncywgZW52PWVudiwgdGV4dD1UcnVlLCBjaGVjaz1UcnVlKQorICAgICAgICBsb2dnaW5nLmluZm8oZiJUZXN0IHppcCBkaXNjb3Zlcnkgb3V0cHV0OiB7cmVzdWx0LnN0ZG91dH0iKQorICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIHJhaXNlIFRlc3REaXNjb3ZlcnlFcnJvcigKKyAgICAgICAgICAgIGYiRmFpbGVkIHRvIHJ1biB0ZXN0IGRpc2NvdmVyeSwgc3Ryb3V0OiB7ZS5zdGRvdXR9LCBzdHJlcnI6IgorICAgICAgICAgICAgZiIge2Uuc3RkZXJyfSwgcmV0dXJuY29kZToge2UucmV0dXJuY29kZX0iCisgICAgICAgICkKKyAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHRlc3RfZGlzY292ZXJ5X291dHB1dF9maWxlLnJlYWQoKSkKKyAgICAgIGxvZ2dpbmcuaW5mbyhmIlRlc3QgZGlzY292ZXJ5IHJlc3VsdCBmaWxlIGNvbnRlbnQ6IHtkYXRhfSIpCisgICAgICBpZiAoCisgICAgICAgICAgc2VsZi5fVFJBREVGRURfTk9fUE9TU0lCTEVfVEVTVF9ESVNDT1ZFUllfS0VZIGluIGRhdGEKKyAgICAgICAgICBhbmQgZGF0YVtzZWxmLl9UUkFERUZFRF9OT19QT1NTSUJMRV9URVNUX0RJU0NPVkVSWV9LRVldCisgICAgICApOgorICAgICAgICByYWlzZSBUZXN0RGlzY292ZXJ5RXJyb3IoIk5vIHBvc3NpYmxlIHRlc3QgZGlzY292ZXJ5IikKKyAgICAgIGlmICgKKyAgICAgICAgICBkYXRhW3NlbGYuX1RSQURFRkVEX1RFU1RfWklQX1JFR0VYRVNfTElTVF9LRVldIGlzIE5vbmUKKyAgICAgICAgICBvciBkYXRhW3NlbGYuX1RSQURFRkVEX1RFU1RfWklQX1JFR0VYRVNfTElTVF9LRVldIGlzIFtdCisgICAgICApOgorICAgICAgICByYWlzZSBUZXN0RGlzY292ZXJ5RXJyb3IoIk5vIHRlc3QgemlwIHJlZ2V4ZXMgcmV0dXJuZWQiKQorICAgICAgcmV0dXJuIGRhdGFbc2VsZi5fVFJBREVGRURfVEVTVF9aSVBfUkVHRVhFU19MSVNUX0tFWV0KIAogICBkZWYgZGlzY292ZXJfdGVzdF9tb2R1bGVzKHNlbGYpIC0+IGxpc3Rbc3RyXToKICAgICAiIiJEaXNjb3ZlciB0ZXN0IG1vZHVsZXMgZnJvbSBUcmFkZUZlZC4KQEAgLTQ0LDMgKzk4LDI0IEBACiAgICAgICBUcmFkZUZlZCB0ZXN0IGFyZ3MuCiAgICAgIiIiCiAgICAgcmV0dXJuIFtdCisKKyAgZGVmIGNyZWF0ZV9jbGFzc3BhdGgoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAiIiJDcmVhdGVzIGEgY2xhc3NwYXRoIHN0cmluZyBmcm9tIGFsbCAuamFyIGZpbGVzIGluIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisKKyAgICBBcmdzOgorICAgICAgZGlyZWN0b3J5OiBUaGUgZGlyZWN0b3J5IHRvIHNlYXJjaCBmb3IgLmphciBmaWxlcy4KKworICAgIFJldHVybnM6CisgICAgICBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNsYXNzcGF0aCwgd2l0aCBqYXIgZmlsZXMgc2VwYXJhdGVkIGJ5IHRoZQorICAgICAgT1Mtc3BlY2lmaWMgcGF0aCBzZXBhcmF0b3IgKGUuZy4sICc6JyBvbiBMaW51eC9tYWNPUywgJzsnIG9uIFdpbmRvd3MpLgorICAgICIiIgorICAgIGphcl9maWxlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAiKi5qYXIiKSkKKyAgICByZXR1cm4gb3MucGF0aHNlcC5qb2luKGphcl9maWxlcykKKworCitjbGFzcyBUZXN0RGlzY292ZXJ5RXJyb3IoRXhjZXB0aW9uKToKKyAgIiIiQSBUZXN0RGlzY292ZXJ5RXJyb3JjbGFzcy4iIiIKKworICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSk6CisgICAgc3VwZXIoKS5fX2luaXRfXyhtZXNzYWdlKQorICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKZGlmZiAtLWdpdCBhL2NvcmUvTWFrZWZpbGUgYi9jb3JlL01ha2VmaWxlCmluZGV4IDgxYWU2ZjcuLjQzNjE4ZTMgMTAwNjQ0Ci0tLSBhL2NvcmUvTWFrZWZpbGUKKysrIGIvY29yZS9NYWtlZmlsZQpAQCAtNjkyLDcgKzY5Miw3IEBACiAKIEJPQVJEX0tFUk5FTF9NT0RVTEVfRElSUyArPSB0b3AKIAotIyBEZWZhdWx0IHRvIG5vdCBnZW5lcmF0aW5nIG1vZHVsZXMuZGVwIGZvciBrZXJuZWwgbW9kdWxlcyBvbiBzeXN0ZW0KKyMgRGVmYXVsdCB0byBub3QgZ2VuZXJhdGluZyBtb2R1bGVzLmxvYWQgZm9yIGtlcm5lbCBtb2R1bGVzIG9uIHN5c3RlbQogIyBzaWRlLiBXZSBzaG91bGQgb25seSBsb2FkIHRoZXNlIG1vZHVsZXMgaWYgdGhleSBhcmUgZGVwZW5kZWQgYnkgdmVuZG9yCiAjIHNpZGUgbW9kdWxlcy4KIGlmZXEgKCQoQk9BUkRfU1lTVEVNX0tFUk5FTF9NT0RVTEVTX0xPQUQpLCkKQEAgLTE2NzYsMTIgKzE2NzYsMTMgQEAKICAgSU5URVJOQUxfVkVORE9SX0JPT1RJTUFHRV9BUkdTICs9IC0tdmVuZG9yX2NtZGxpbmUgIiQoSU5URVJOQUxfS0VSTkVMX0NNRExJTkUpIgogZW5kaWYKIAotaWZkZWYgSU5URVJOQUxfQk9PVENPTkZJRworaWZuZXEgKCwgJChJTlRFUk5BTF9CT09UQ09ORklHKSQoSU5URVJOQUxfQk9PVENPTkZJR19GSUxFKSkKICAgSU5URVJOQUxfVkVORE9SX0JPT1RDT05GSUdfVEFSR0VUIDo9ICQoUFJPRFVDVF9PVVQpL3ZlbmRvci1ib290Y29uZmlnLmltZwogICAkKElOVEVSTkFMX1ZFTkRPUl9CT09UQ09ORklHX1RBUkdFVCk6CiAJcm0gLWYgJEAKIAkkKGZvcmVhY2ggcGFyYW0sJChJTlRFUk5BTF9CT09UQ09ORklHKSwgXAogCSBwcmludGYgIiVzXG4iICQocGFyYW0pID4+ICRAOykKKwljYXQgJChJTlRFUk5BTF9CT09UQ09ORklHX0ZJTEUpID4+ICRACiAgIElOVEVSTkFMX1ZFTkRPUl9CT09USU1BR0VfQVJHUyArPSAtLXZlbmRvcl9ib290Y29uZmlnICQoSU5URVJOQUxfVkVORE9SX0JPT1RDT05GSUdfVEFSR0VUKQogZW5kaWYKIApAQCAtMzQ4OCwxMiArMzQ4OSwxNCBAQAogIyAgICQoMik6IFRoZSBwYXJ0aXRpb24ncyBzdGFnaW5nIGRpcmVjdG9yeQogIyAgICQoMyk6IEZpbGVzIHRvIGluY2x1ZGUgaW4gdGhlIHBhcnRpdGlvbgogZGVmaW5lIHdyaXRlLXBhcnRpdGlvbi1maWxlLWxpc3QKKyQoMSk6IFBSSVZBVEVfRklMRVMgOj0gJChzdWJzdCAkKDIpLywsJChmaWx0ZXIgJCgyKS8lLCQoMykpKQorJCgxKTogUFJJVkFURV9FWFRSQV9JTlNUQUxMX1pJUFMgOj0gJChjYWxsIHJlbGV2YW50LWV4dHJhLWluc3RhbGwtemlwcywkKGZpbHRlciAkKDIpLyUsJCgzKSkpCiAkKDEpOiAkJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZXh0cmFfaW5zdGFsbF96aXBzX2ZpbGVfbGlzdCAkKGZvcmVhY2ggcCwkKGNhbGwgcmVsZXZhbnQtZXh0cmEtaW5zdGFsbC16aXBzLCQoZmlsdGVyICQoMikvJSwkKDMpKSksJChjYWxsIHdvcmQtY29sb24sMywkKHApKSkKIAlAZWNobyBXcml0aW5nICQkQAogCXJtIC1mICQkQAogCWVjaG8gLW4gPiAkJEAKLQkkJChmb3JlYWNoIGYsJChzdWJzdCAkKDIpLywsJChmaWx0ZXIgJCgyKS8lLCQoMykpKSxlY2hvICIkJChmKSIgPj4gJCRAJCQobmV3bGluZSkpCi0JJCQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2V4dHJhX2luc3RhbGxfemlwc19maWxlX2xpc3QgJCgyKSAkKGNhbGwgcmVsZXZhbnQtZXh0cmEtaW5zdGFsbC16aXBzLCQoZmlsdGVyICQoMikvJSwkKDMpKSkgPj4gJCRACisJJCQoZm9yZWFjaCBmLCQkKFBSSVZBVEVfRklMRVMpLGVjaG8gIiQkKGYpIiA+PiAkJEAkJChuZXdsaW5lKSkKKwkkJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZXh0cmFfaW5zdGFsbF96aXBzX2ZpbGVfbGlzdCAkKDIpICQkKFBSSVZBVEVfRVhUUkFfSU5TVEFMTF9aSVBTKSA+PiAkJEAKIGVuZGVmCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUyOTUsNyArNTI5OCw3IEBACiAJICAtLWRpcm1hcCAvc3lzdGVtX2V4dDokKFRBUkdFVF9PVVRfU1lTVEVNX0VYVCkgXAogCSAgLS1kaXJtYXAgL3Byb2R1Y3Q6JChUQVJHRVRfT1VUX1BST0RVQ1QpIFwKIAkgIC0tZGlybWFwIC9hcGV4OiQoQVBFWF9PVVQpIFwKLQkgICQoVklOVEZfRlJBTUVXT1JLX01BTklGRVNUX0ZST1pFTl9ESVIpID4gJEAgMj4mMSApIHx8ICggY2F0ICRAICYmIGV4aXQgMSApCisJICBzeXN0ZW0vbGliaGlkbC92aW50ZmRhdGEvZnJvemVuID4gJEAgMj4mMSApIHx8ICggY2F0ICRAICYmIGV4aXQgMSApCiAKICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKHZpbnRmZm1fbG9nKSkKIApAQCAtNjM4MCw2ICs2MzgzLDEwIEBACiAgIGVuZGlmCiBlbmRpZgogCitpZmRlZiBCVUlMRElOR19WRU5ET1JfS0VSTkVMX0JPT1RfSU1BR0UKKyAgJChCVUlMVF9UQVJHRVRfRklMRVNfRElSKTogJChJTlRFUk5BTF9WRU5ET1JfS0VSTkVMX1JBTURJU0tfRklMRVMpCitlbmRpZgorCiBpZmRlZiBCVUlMRElOR19SRUNPVkVSWV9JTUFHRQogICAjIFRPRE8oYi8zMDQxNDQyOCk6IENhbid0IGRlcGVuZCBvbiBJTlRFUk5BTF9SRUNPVkVSWUlNQUdFX0ZJTEVTIGFsb25lIGxpa2Ugb3RoZXIKICAgIyBCVUlMVF9UQVJHRVRfRklMRVNfUEFDS0FHRSBkZXBlbmRlbmNpZXMgYmVjYXVzZSBjdXJyZW50bHkgdGhlcmUncmUgY3AvcnN5bmMvcm0KQEAgLTc5NzMsNyArNzk4MCw3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRGVza3RvcCBwYWNrIHJlY292ZXJ5IGltYWdlIGhvb2suCi1pZm5lcSAoLCQoc3RyaXAgJChQQUNLX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UpKSkKK2lmZXEgKCQoQk9BUkRfVVNFU19ERVNLVE9QX1JFQ09WRVJZX0lNQUdFKSx0cnVlKQogUEFDS19SRUNPVkVSWV9JTUFHRV9UQVJHRVQgOj0gJChQUk9EVUNUX09VVCkvYW5kcm9pZC1kZXNrdG9wX3JlY292ZXJ5X2ltYWdlLmJpbgogUEFDS19SRUNPVkVSWV9JTUFHRV9BUkdTIDo9IC0tbm9hcmNoaXZlIC0tcmVjb3ZlcnkKIApAQCAtNzk5NCwxMSArODAwMSwxMSBAQAogLlBIT05ZOiBwYWNrLXJlY292ZXJ5LWltYWdlCiBwYWNrLXJlY292ZXJ5LWltYWdlOiAkKFBBQ0tfUkVDT1ZFUllfSU1BR0VfVEFSR0VUKQogCi1lbmRpZiAjIFBBQ0tfREVTS1RPUF9SRUNPVkVSWV9JTUFHRQorZW5kaWYgIyBCT0FSRF9VU0VTX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBEZXNrdG9wIHBhY2sgdXBkYXRlIGltYWdlIGhvb2suCi1pZm5lcSAoLCQoc3RyaXAgJChQQUNLX0RFU0tUT1BfVVBEQVRFX0lNQUdFKSkpCitpZmVxICgkKEJPQVJEX1VTRVNfREVTS1RPUF9VUERBVEVfSU1BR0UpLHRydWUpCiBQQUNLX1VQREFURV9JTUFHRV9UQVJHRVQgOj0gJChQUk9EVUNUX09VVCkvYW5kcm9pZC1kZXNrdG9wX3VwZGF0ZV9pbWFnZS5iaW4KIFBBQ0tfVVBEQVRFX0lNQUdFX0FSR1MgOj0gLS1ub2FyY2hpdmUgLS11cGRhdGUKIApAQCAtODAxOSw3ICs4MDI2LDcgQEAKIC5QSE9OWTogcGFjay11cGRhdGUtaW1hZ2UKIHBhY2stdXBkYXRlLWltYWdlOiAkKFBBQ0tfVVBEQVRFX0lNQUdFX1RBUkdFVCkKIAotZW5kaWYgIyBQQUNLX0RFU0tUT1BfVVBEQVRFX0lNQUdFCitlbmRpZiAjIEJPQVJEX1VTRVNfREVTS1RPUF9VUERBVEVfSU1BR0UKIAogUEFDS19NSUdSQVRJT05fSU1BR0VfU0NSSVBUIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3BhY2tfbWlncmF0aW9uX2ltYWdlCiAKZGlmZiAtLWdpdCBhL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tayBiL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tawppbmRleCBlNWE4ZTQ0Li4yNmZlMWRhIDEwMDY0NAotLS0gYS9jb3JlL2FuZHJvaWRfc29vbmdfY29uZmlnX3ZhcnMubWsKKysrIGIvY29yZS9hbmRyb2lkX3Nvb25nX2NvbmZpZ192YXJzLm1rCkBAIC00Miw2ICs0MiwxMiBAQAogCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxBRERJVElPTkFMX000REVGUywkKGlmICQoQk9BUkRfU0VQT0xJQ1lfTTRERUZTKSwkKGFkZHByZWZpeCAtRCwkKEJPQVJEX1NFUE9MSUNZX000REVGUykpKSkKIAorIyBGb3IgYm9vdGFibGUvcmVjb3ZlcnkKK1JFQ09WRVJZX0FQSV9WRVJTSU9OIDo9IDMKK1JFQ09WRVJZX0ZTVEFCX1ZFUlNJT04gOj0gMgorJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsIHJlY292ZXJ5LCByZWNvdmVyeV9hcGlfdmVyc2lvbiwgJChSRUNPVkVSWV9BUElfVkVSU0lPTikpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCwgcmVjb3ZlcnksIHJlY292ZXJ5X2ZzdGFiX3ZlcnNpb24sICQoUkVDT1ZFUllfRlNUQUJfVkVSU0lPTikpCisKICMgRm9yIFNhbml0aXplcnMKICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsQU5EUk9JRCxBU0FOX0VOQUJMRUQsJChpZiAkKGZpbHRlciBhZGRyZXNzLCQoU0FOSVRJWkVfVEFSR0VUKSksdHJ1ZSxmYWxzZSkpCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLEFORFJPSUQsSFdBU0FOX0VOQUJMRUQsJChpZiAkKGZpbHRlciBod2FkZHJlc3MsJChTQU5JVElaRV9UQVJHRVQpKSx0cnVlLGZhbHNlKSkKQEAgLTY1LDYgKzcxLDExIEBACiAjIFRoZSBkZWZhdWx0IHZhbHVlIG9mIEFSVF9CVUlMRF9IT1NUX0RFQlVHIGlzIHRydWUKICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsYXJ0X21vZHVsZSxhcnRfYnVpbGRfaG9zdF9kZWJ1ZywkKGlmICQoZmlsdGVyIGZhbHNlLCQoQVJUX0JVSUxEX0hPU1RfREVCVUcpKSxmYWxzZSx0cnVlKSkKIAorIyBGb3IgY2hyZQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxjaHJlLGNocmVfZGFlbW9uX2xhbWFfZW5hYmxlZCwkKGlmICQoZmlsdGVyIHRydWUsJChDSFJFX0RBRU1PTl9MUE1BX0VOQUJMRUQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsY2hyZSxjaHJlX2RlZGljYXRlZF90cmFuc3BvcnRfY2hhbm5lbF9lbmFibGVkLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKENIUkVfREVESUNBVEVEX1RSQU5TUE9SVF9DSEFOTkVMX0VOQUJMRUQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsY2hyZSxjaHJlX2xvZ19hdG9tX2V4dGVuc2lvbl9lbmFibGVkLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKENIUkVfTE9HX0FUT01fRVhURU5TSU9OX0VOQUJMRUQpKSx0cnVlLGZhbHNlKSkKKwogaWZkZWYgVEFSR0VUX0JPQVJEX0FVVE8KICAgJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLCBBTkRST0lELCB0YXJnZXRfYm9hcmRfYXV0bywgJChUQVJHRVRfQk9BUkRfQVVUTykpCiBlbmRpZgpAQCAtOTYsNiArMTA3LDEwIEBACiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXJfdmFsdWUsQU5EUk9JRCxhdmZfbWljcm9kcm9pZF9ndWVzdF9na2lfdmVyc2lvbiwkKFBST0RVQ1RfQVZGX01JQ1JPRFJPSURfR1VFU1RfR0tJX1ZFUlNJT04pKQogZW5kaWYKIAoraWZkZWYgVEFSR0VUX0JPT1RTXzE2SworJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELHRhcmdldF9ib290c18xNmssJChmaWx0ZXIgdHJ1ZSwkKFRBUkdFVF9CT09UU18xNkspKSkKK2VuZGlmCisKIGlmZGVmIFBST0RVQ1RfTUVNQ0dfVjJfRk9SQ0VfRU5BQkxFRAogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLEFORFJPSUQsbWVtY2dfdjJfZm9yY2VfZW5hYmxlZCwkKFBST0RVQ1RfTUVNQ0dfVjJfRk9SQ0VfRU5BQkxFRCkpCiBlbmRpZgpAQCAtMjE5LDUgKzIzNCw0NSBAQAogJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCx2aWRlb19jb2RlYyxib2FyZF91c2VfY29kZWMyX2hpZGxfMV8yLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRV9DT0RFQzJfSElETF8xXzIpKSx0cnVlLGZhbHNlKSkKICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsdmlkZW9fY29kZWMsYm9hcmRfc3VwcG9ydF9tZmNfZW5jX2J0MjAyMCwkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9TVVBQT1JUX01GQ19FTkNfQlQyMDIwKSksdHJ1ZSxmYWxzZSkpCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHZpZGVvX2NvZGVjLGJvYXJkX3N1cHBvcnRfZmxleGlibGVfcDAxMCwkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9TVVBQT1JUX0ZMRVhJQkxFX1AwMTApKSx0cnVlLGZhbHNlKSkKLSQoY2FsbCBzb29uZ19jb25maWdfc2V0LHZpZGVvX2NvZGVjLGJvYXJkX3N1cHBvcnRfbWZjX3ZlcnNpb24sJChCT0FSRF9TVVBQT1JUX01GQ19WRVJTSU9OKSkKICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsdmlkZW9fY29kZWMsYm9hcmRfdXNlX2NvZGVjMl9haWRsLCQoaWYgJChCT0FSRF9VU0VfQ09ERUMyX0FJREwpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsdmlkZW9fY29kZWMsYm9hcmRfZ3B1X3R5cGUsJChCT0FSRF9HUFVfVFlQRSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHZpZGVvX2NvZGVjLGJvYXJkX3VzZV9zbWFsbF9zZWN1cmVfbWVtb3J5LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRV9TTUFMTF9TRUNVUkVfTUVNT1JZKSksdHJ1ZSxmYWxzZSkpCitpZmRlZiBCT0FSRF9TVVBQT1JUX01GQ19WRVJTSU9OCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0LHZpZGVvX2NvZGVjLGJvYXJkX3N1cHBvcnRfbWZjX3ZlcnNpb24sJChCT0FSRF9TVVBQT1JUX01GQ19WRVJTSU9OKSkKK2VuZGlmCitpZmRlZiBCT0FSRF9VU0VfTUFYX1NFQ1VSRV9SRVNPVVJDRQorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCx2aWRlb19jb2RlYyxib2FyZF91c2VfbWF4X3NlY3VyZV9yZXNvdXJjZSwkKEJPQVJEX1VTRV9NQVhfU0VDVVJFX1JFU09VUkNFKSkKK2VuZGlmCisKKyMgRXhwb3J0IHJlbGF0ZWQgdmFyaWFibGVzIHRvIHNvb25nIGZvciBoYXJkd2FyZS9nb29nbGUvZ3JhcGhpY3MvY29tbW9uL2xpYmFjcnlsOmxpYmFjcnlsCitpZmRlZiBCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX0NPTVBPU0lUT1IKKyAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsYWNyeWwsbGliYWNyeWxfZGVmYXVsdF9jb21wb3NpdG9yLCQoQk9BUkRfTElCQUNSWUxfREVGQVVMVF9DT01QT1NJVE9SKSkKK2VuZGlmCitpZmRlZiBCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX1NDQUxFUgorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxhY3J5bCxsaWJhY3J5bF9kZWZhdWx0X3NjYWxlciwkKEJPQVJEX0xJQkFDUllMX0RFRkFVTFRfU0NBTEVSKSkKK2VuZGlmCitpZmRlZiBCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX0JMVEVSCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0LGFjcnlsLGxpYmFjcnlsX2RlZmF1bHRfYmx0ZXIsJChCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX0JMVEVSKSkKK2VuZGlmCitpZmRlZiBCT0FSRF9MSUJBQ1JZTF9HMkRfSERSX1BMVUdJTgorICAjQk9BUkRfTElCQUNSWUxfRzJEX0hEUl9QTFVHSU4gaXMgc2V0IGluIGVhY2ggYm9hcmQgY29uZmlnCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsYWNyeWwsbGliYWNyeWxfdXNlX2cyZF9oZHJfcGx1Z2luLHRydWUpCitlbmRpZgorCisjIEV4cG9ydCByZWxhdGVkIHZhcmlhYmxlcyB0byBzb29uZyBmb3IgaGFyZHdhcmUvZ29vZ2xlL2dyYXBoaWNzL2NvbW1vbi9Cb2FyZENvbmZpZ0NGbGFncy5taworJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsaHdjX25vX3N1cHBvcnRfc2tpcF92YWxpZGF0ZSwkKGlmICQoZmlsdGVyIHRydWUsJChIV0NfTk9fU1VQUE9SVF9TS0lQX1ZBTElEQVRFKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxod2Nfc3VwcG9ydF9jb2xvcl90cmFuc2Zvcm0sJChpZiAkKGZpbHRlciB0cnVlLCQoSFdDX1NVUFBPUlRfQ09MT1JfVFJBTlNGT1JNKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxod2Nfc3VwcG9ydF9yZW5kZXJfaW50ZW50LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEhXQ19TVVBQT1JUX1JFTkRFUl9JTlRFTlQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfdmlydHVhbF9kaXNwbGF5LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfVklSVFVBTF9ESVNQTEFZKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxib2FyZF91c2VzX2R0LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfRFQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfZGVjb25fNjRiaXRfYWRkcmVzcywkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX0RFQ09OXzY0QklUX0FERFJFU1MpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfaGRydWlfZ2xlc19jb252ZXJzaW9uLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfSERSVUlfR0xFU19DT05WRVJTSU9OKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyx1c2VzX2lkaXNwbGF5X2ludGZfc2VjLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKFVTRVNfSURJU1BMQVlfSU5URl9TRUMpKSx0cnVlLGZhbHNlKSkKKworIyBWYXJpYWJsZXMgZm9yIGZzX2NvbmZpZworJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxmc19jb25maWcsdmVuZG9yLCQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUklNQUdFKSQoQk9BUkRfVkVORE9SSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGZzX2NvbmZpZyxvZW0sJChpZiAkKEJPQVJEX1VTRVNfT0VNSU1BR0UpJChCT0FSRF9PRU1JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZnNfY29uZmlnLG9kbSwkKGlmICQoQk9BUkRfVVNFU19PRE1JTUFHRSkkKEJPQVJEX09ETUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxmc19jb25maWcsdmVuZG9yX2Rsa20sJChpZiAkKEJPQVJEX1VTRVNfVkVORE9SX0RMS01JTUFHRSkkKEJPQVJEX1ZFTkRPUl9ETEtNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGZzX2NvbmZpZyxvZG1fZGxrbSwkKGlmICQoQk9BUkRfVVNFU19PRE1fRExLTUlNQUdFKSQoQk9BUkRfT0RNX0RMS01JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZnNfY29uZmlnLHN5c3RlbV9kbGttLCQoaWYgJChCT0FSRF9VU0VTX1NZU1RFTV9ETEtNSU1BR0UpJChCT0FSRF9TWVNURU1fRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHRydWUsZmFsc2UpKQpkaWZmIC0tZ2l0IGEvY29yZS9iaW5hcnkubWsgYi9jb3JlL2JpbmFyeS5tawppbmRleCAzNDgxMTQ0Li5lYTg2MmJlIDEwMDY0NAotLS0gYS9jb3JlL2JpbmFyeS5taworKysgYi9jb3JlL2JpbmFyeS5tawpAQCAtMTc0LDcgKzE3NCw3IEBACiBlbmRpZgogZW5kaWYKIAotbXlfbmRrX3N5c3Jvb3RfaW5jbHVkZSA6PQorbXlfbmRrX3N5c3Jvb3QgOj0KIG15X25ka19zeXNyb290X2xpYiA6PQogbXlfYXBpX2xldmVsIDo9IDEwMDAwCiAKQEAgLTIwNywxMSArMjA3LDkgQEAKIAogICBteV9idWlsdF9uZGsgOj0gJChTT09OR19PVVRfRElSKS9uZGsKICAgbXlfbmRrX3RyaXBsZSA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfTkRLX1RSSVBMRSkKLSAgbXlfbmRrX3N5c3Jvb3RfaW5jbHVkZSA6PSBcCi0gICAgICAkKG15X2J1aWx0X25kaykvc3lzcm9vdC91c3IvaW5jbHVkZSBcCi0gICAgICAkKG15X2J1aWx0X25kaykvc3lzcm9vdC91c3IvaW5jbHVkZS8kKG15X25ka190cmlwbGUpIFwKKyAgbXlfbmRrX3N5c3Jvb3QgOj0gJChteV9idWlsdF9uZGspL3N5c3Jvb3QKIAotICBteV9uZGtfc3lzcm9vdF9saWIgOj0gJChteV9idWlsdF9uZGspL3N5c3Jvb3QvdXNyL2xpYi8kKG15X25ka190cmlwbGUpLyQobXlfbmRrX2FwaSkKKyAgbXlfbmRrX3N5c3Jvb3RfbGliIDo9ICQobXlfbmRrX3N5c3Jvb3QpL3Vzci9saWIvJChteV9uZGtfdHJpcGxlKS8kKG15X25ka19hcGkpCiAKICAgIyBUaGUgYmlvbmljIGxpbmtlciBub3cgaGFzIHN1cHBvcnQgZm9yIHBhY2tlZCByZWxvY2F0aW9ucyBhbmQgZ251IHN0eWxlCiAgICMgaGFzaGVzICh3aGljaCBhcmUgbXVjaCBmYXN0ZXIhKSwgYnV0IHNoaXBwaW5nIHRvIG9sZGVyIGRldmljZXMgcmVxdWlyZXMKQEAgLTE2MjgsMTkgKzE2MjYsNiBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGlmbmRlZiBMT0NBTF9JU19IT1NUX01PRFVMRQogCi1pZmVxICgkKGNhbGwgbW9kdWxlLWluLXZlbmRvci1vci1wcm9kdWN0KSx0cnVlKQotICBteV90YXJnZXRfZ2xvYmFsX2NfaW5jbHVkZXMgOj0KLSAgbXlfdGFyZ2V0X2dsb2JhbF9jX3N5c3RlbV9pbmNsdWRlcyA6PSAkKFRBUkdFVF9PVVRfSEVBREVSUykKLWVsc2UgaWZkZWYgTE9DQUxfU0RLX1ZFUlNJT04KLSAgbXlfdGFyZ2V0X2dsb2JhbF9jX2luY2x1ZGVzIDo9Ci0gIG15X3RhcmdldF9nbG9iYWxfY19zeXN0ZW1faW5jbHVkZXMgOj0gJChteV9uZGtfc3RsX2luY2x1ZGVfcGF0aCkgJChteV9uZGtfc3lzcm9vdF9pbmNsdWRlKQotZWxzZQotICBteV90YXJnZXRfZ2xvYmFsX2NfaW5jbHVkZXMgOj0gJChTUkNfSEVBREVSUykgXAotICAgICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKSQobXlfcHJlZml4KUNfSU5DTFVERVMpCi0gIG15X3RhcmdldF9nbG9iYWxfY19zeXN0ZW1faW5jbHVkZXMgOj0gJChTUkNfU1lTVEVNX0hFQURFUlMpIFwKLSAgICAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWCkkKG15X3ByZWZpeClDX1NZU1RFTV9JTkNMVURFUykKLWVuZGlmCi0KIG15X3RhcmdldF9nbG9iYWxfY2ZsYWdzIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKUNMQU5HXyQobXlfcHJlZml4KUdMT0JBTF9DRkxBR1MpCiBteV90YXJnZXRfZ2xvYmFsX2Nvbmx5ZmxhZ3MgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQ0xBTkdfJChteV9wcmVmaXgpR0xPQkFMX0NPTkxZRkxBR1MpICQobXlfY19zdGRfY29ubHlmbGFncykKIG15X3RhcmdldF9nbG9iYWxfY3BwZmxhZ3MgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQ0xBTkdfJChteV9wcmVmaXgpR0xPQkFMX0NQUEZMQUdTKSAkKG15X2NwcF9zdGRfY3BwZmxhZ3MpCkBAIC0xNjU2LDYgKzE2NDEsMjIgQEAKICAgbXlfdGFyZ2V0X2dsb2JhbF9sZGZsYWdzIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKUNMQU5HXyQobXlfcHJlZml4KUdMT0JBTF9MREZMQUdTKQogZW5kaWYgIyBteV91c2VfY2xhbmdfbGxkCiAKK2lmZXEgKCQoY2FsbCBtb2R1bGUtaW4tdmVuZG9yLW9yLXByb2R1Y3QpLHRydWUpCisgIG15X3RhcmdldF9nbG9iYWxfY19pbmNsdWRlcyA6PQorICBteV90YXJnZXRfZ2xvYmFsX2Nfc3lzdGVtX2luY2x1ZGVzIDo9ICQoVEFSR0VUX09VVF9IRUFERVJTKQorICBteV90YXJnZXRfZ2xvYmFsX2NmbGFncyArPSAtbm9zdGRsaWJpbmMKK2Vsc2UgaWZkZWYgTE9DQUxfU0RLX1ZFUlNJT04KKyAgbXlfdGFyZ2V0X2dsb2JhbF9jX2luY2x1ZGVzIDo9CisgIG15X3RhcmdldF9nbG9iYWxfY19zeXN0ZW1faW5jbHVkZXMgOj0gJChteV9uZGtfc3RsX2luY2x1ZGVfcGF0aCkKKyAgbXlfdGFyZ2V0X2dsb2JhbF9jZmxhZ3MgKz0gLS1zeXNyb290ICQobXlfbmRrX3N5c3Jvb3QpCitlbHNlCisgIG15X3RhcmdldF9nbG9iYWxfY19pbmNsdWRlcyA6PSAkKFNSQ19IRUFERVJTKSBcCisgICAgJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpJChteV9wcmVmaXgpQ19JTkNMVURFUykKKyAgbXlfdGFyZ2V0X2dsb2JhbF9jX3N5c3RlbV9pbmNsdWRlcyA6PSAkKFNSQ19TWVNURU1fSEVBREVSUykgXAorICAgICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKSQobXlfcHJlZml4KUNfU1lTVEVNX0lOQ0xVREVTKQorICBteV90YXJnZXRfZ2xvYmFsX2NmbGFncyArPSAtbm9zdGRsaWJpbmMKK2VuZGlmCisKIG15X3RhcmdldF90cmlwbGUgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQ0xBTkdfJChteV9wcmVmaXgpVFJJUExFKQogaWZuZGVmIExPQ0FMX0lTX0hPU1RfTU9EVUxFCiAgIG15X3RhcmdldF90cmlwbGVfZmxhZyA6PSAtdGFyZ2V0ICQobXlfdGFyZ2V0X3RyaXBsZSkkKG15X2FwaV9sZXZlbCkKZGlmZiAtLWdpdCBhL2NvcmUvYm9hcmRfY29uZmlnLm1rIGIvY29yZS9ib2FyZF9jb25maWcubWsKaW5kZXggNTYwNjk2NC4uZWEwZDAyMiAxMDA2NDQKLS0tIGEvY29yZS9ib2FyZF9jb25maWcubWsKKysrIGIvY29yZS9ib2FyZF9jb25maWcubWsKQEAgLTI3LDYgKzI3LDcgQEAKIF9ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX0tFUk5FTF9DTURMSU5FCiBfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCArPSBCT0FSRF9CT09UX0hFQURFUl9WRVJTSU9OCiBfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCArPSBCT0FSRF9CT09UQ09ORklHCitfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCArPSBCT0FSRF9CT09UQ09ORklHX0ZJTEUKIF9ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX0tFUk5FTF9CQVNFCiBfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCArPSBCT0FSRF9VU0VTX0dFTkVSSUNfQVVESU8KIF9ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVApAQCAtMzExLDkgKzMxMiwxMCBAQAogLktBVElfUkVBRE9OTFkgOj0gJChfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCkKIAogSU5URVJOQUxfS0VSTkVMX0NNRExJTkUgOj0gJChCT0FSRF9LRVJORUxfQ01ETElORSkKLWlmbmVxICgsJChCT0FSRF9CT09UQ09ORklHKSkKK2lmbmVxICgsJChCT0FSRF9CT09UQ09ORklHKSQoQk9BUkRfQk9PVENPTkZJR19GSUxFKSkKICAgSU5URVJOQUxfS0VSTkVMX0NNRExJTkUgKz0gYm9vdGNvbmZpZwogICBJTlRFUk5BTF9CT09UQ09ORklHIDo9ICQoQk9BUkRfQk9PVENPTkZJRykKKyAgSU5URVJOQUxfQk9PVENPTkZJR19GSUxFIDo9ICQoQk9BUkRfQk9PVENPTkZJR19GSUxFKQogZW5kaWYKIAogaWZuZXEgKCQoZmlsdGVyICU2NCwkKFRBUkdFVF9BUkNIKSksKQpAQCAtOTIyLDYgKzkyNCwxOCBAQAogZW5kaWYKIC5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX1VTRVNfUFZNRldJTUFHRQogCitCT0FSRF9VU0VTX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UgOj0KK2lmZXEgKCQoUFJPRFVDVF9CVUlMRF9ERVNLVE9QX1JFQ09WRVJZX0lNQUdFKSx0cnVlKQorICBCT0FSRF9VU0VTX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UgOj0gdHJ1ZQorZW5kaWYKKy5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX1VTRVNfREVTS1RPUF9SRUNPVkVSWV9JTUFHRQorCitCT0FSRF9VU0VTX0RFU0tUT1BfVVBEQVRFX0lNQUdFIDo9CitpZmVxICgkKFBST0RVQ1RfQlVJTERfREVTS1RPUF9VUERBVEVfSU1BR0UpLHRydWUpCisgIEJPQVJEX1VTRVNfREVTS1RPUF9VUERBVEVfSU1BR0UgOj0gdHJ1ZQorZW5kaWYKKy5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX1VTRVNfREVTS1RPUF9VUERBVEVfSU1BR0UKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBFbnN1cmUgY29uc2lzdGVuY3kgYW1vbmcgVEFSR0VUX1JFQ09WRVJZX1VQREFURVJfTElCUywgQUJfT1RBX1VQREFURVIsIGFuZCBQUk9EVUNUX09UQV9GT1JDRV9OT05fQUJfUEFDS0FHRS4KIFRBUkdFVF9SRUNPVkVSWV9VUERBVEVSX0xJQlMgPz0KZGlmZiAtLWdpdCBhL2NvcmUvY29uZmlnLm1rIGIvY29yZS9jb25maWcubWsKaW5kZXggMTkyYzhiMi4uZjliYTM4YyAxMDA2NDQKLS0tIGEvY29yZS9jb25maWcubWsKKysrIGIvY29yZS9jb25maWcubWsKQEAgLTQzMiwxMyArNDMyLDYgQEAKIGVuZGlmCiAuS0FUSV9SRUFET05MWSA6PSBUQVJHRVRfTUFYX1BBR0VfU0laRV9TVVBQT1JURUQKIAotaWZkZWYgUFJPRFVDVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFCi0gIFRBUkdFVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFIDo9ICQoUFJPRFVDVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFKQotZWxzZQotICBUQVJHRVRfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRSA6PSBmYWxzZQotZW5kaWYKLS5LQVRJX1JFQURPTkxZIDo9IFRBUkdFVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFCi0KICMgQm9vbGVhbiB2YXJpYWJsZSBkZXRlcm1pbmluZyBpZiBBT1NQIHJlbGllcyBvbiBiaW9uaWMncyBQQUdFX1NJWkUgbWFjcm8uCiBpZmRlZiBQUk9EVUNUX05PX0JJT05JQ19QQUdFX1NJWkVfTUFDUk8KICAgVEFSR0VUX05PX0JJT05JQ19QQUdFX1NJWkVfTUFDUk8gOj0gJChQUk9EVUNUX05PX0JJT05JQ19QQUdFX1NJWkVfTUFDUk8pCkBAIC04MTcsNiArODEwLDE4IEBACiAgIGVuZGlmCiBlbmRpZgogCitpZmRlZiBQUk9EVUNUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUKKyAgVEFSR0VUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUgOj0gJChQUk9EVUNUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUpCitlbHNlIGlmZXEgKHRydWUsJChUQVJHRVRfQlVJTERfVU5CVU5ETEVEKSkKKyAgIyB1bmJ1bmRsZWQgYnVpbGRzIG1heSBub3QgaGF2ZSB1cGRhdGVkIGJ1aWxkIHNvdXJjZXMKKyAgVEFSR0VUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUgOj0gZmFsc2UKK2Vsc2UgaWZuZXEgKCQoY2FsbCBtYXRoX2d0X29yX2VxLCQoUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwpLDM2KSwpCisgIFRBUkdFVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFIDo9IHRydWUKK2Vsc2UKKyAgVEFSR0VUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUgOj0gZmFsc2UKK2VuZGlmCisuS0FUSV9SRUFET05MWSA6PSBUQVJHRVRfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRQorCiAjIFNldCBCT0FSRF9TWVNURU1TREtfVkVSU0lPTlMgdG8gdGhlIGxhdGVzdCBTeXN0ZW1TREsgdmVyc2lvbiBzdGFydGluZyBmcm9tIFAtbGF1bmNoaW5nCiAjIGRldmljZXMgaWYgdW5zZXQuCiBpZm5kZWYgQk9BUkRfU1lTVEVNU0RLX1ZFUlNJT05TCkBAIC04MzksMTIgKzg0NCw2IEBACiAuS0FUSV9SRUFET05MWSA6PSBCT0FSRF9DVVJSRU5UX0FQSV9MRVZFTF9GT1JfVkVORE9SX01PRFVMRVMKIAogaWZkZWYgUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwKLSAgYm9hcmRfYXBpX2xldmVsIDo9ICQoZmlyc3R3b3JkICQoQk9BUkRfQVBJX0xFVkVMKSAkKEJPQVJEX1NISVBQSU5HX0FQSV9MRVZFTCkpCi0gIGlmbmVxICgsJChib2FyZF9hcGlfbGV2ZWwpKQotICAgIG1pbl9zeXN0ZW1zZGtfdmVyc2lvbiA6PSAkKGNhbGwgbWF0aF9taW4sJChib2FyZF9hcGlfbGV2ZWwpLCQoUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwpKQotICBlbHNlCi0gICAgbWluX3N5c3RlbXNka192ZXJzaW9uIDo9ICQoUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwpCi0gIGVuZGlmCiAgIGlmbmVxICgkKGNhbGwgbWF0aF9ndF9vcl9lcSwkKFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMKSwyOSksKQogICAgIGlmbmVxICgkKEJPQVJEX09UQV9GUkFNRVdPUktfVkJNRVRBX1ZFUlNJT05fT1ZFUlJJREUpLCkKICAgICAgICQoZXJyb3IgV2hlbiBQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCA+PSAyOSwgQk9BUkRfT1RBX0ZSQU1FV09SS19WQk1FVEFfVkVSU0lPTl9PVkVSUklERSBjYW5ub3QgYmUgc2V0KQpkaWZmIC0tZ2l0IGEvY29yZS9tYWluLm1rIGIvY29yZS9tYWluLm1rCmluZGV4IDYwOTU1ODcuLjUxNDJhZGMgMTAwNjQ0Ci0tLSBhL2NvcmUvbWFpbi5taworKysgYi9jb3JlL21haW4ubWsKQEAgLTgzLDYgKzgzLDggQEAKIC1pbmNsdWRlIHRlc3QvY3RzLXJvb3QvdG9vbHMvYnVpbGQvY29uZmlnLm1rCiAjIFdWVFMtc3BlY2lmaWMgY29uZmlnLgogLWluY2x1ZGUgdGVzdC93dnRzL3Rvb2xzL2J1aWxkL2NvbmZpZy5taworIyBEVFMtc3BlY2lmaWMgY29uZmlnLgorLWluY2x1ZGUgdGVzdC9kdHMvdG9vbHMvYnVpbGQvY29uZmlnLm1rCiAKIAogIyBDbGVhbiBydWxlcwpAQCAtMjkwLDcgKzI5Miw3IEBACiAkKGZvcmVhY2ggbWssJChzdWJkaXJfbWFrZWZpbGVzKSwkKGluZm8gWyQoY2FsbCBpbmNfYW5kX3ByaW50LHN1YmRpcl9tYWtlZmlsZXNfaW5jKS8kKHN1YmRpcl9tYWtlZmlsZXNfdG90YWwpXSBpbmNsdWRpbmcgJChtaykgLi4uKSQoZXZhbCBpbmNsdWRlICQobWspKSkKIAogIyBCdWlsZCBib290bG9hZGVyLmltZy9yYWRpby5pbWcsIGFuZCB1bnBhY2sgdGhlIHBhcnRpdGlvbnMuCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5taworLWluY2x1ZGUgdmVuZG9yL2dvb2dsZS9idWlsZC90YXNrcy90b29scy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5tawogCiAjIEZvciBhbiB1bmJ1bmRsZWQgaW1hZ2UsIHdlIGNhbiBza2lwIGJsdWVwcmludF90b29scyBiZWNhdXNlIHVuYnVuZGxlZCBpbWFnZQogIyBhaW1zIHRvIHJlbW92ZSBhIGxhcmdlIG51bWJlciBmcmFtZXdvcmsgcHJvamVjdHMgZnJvbSB0aGUgbWFuaWZlc3QsIHRoZQpAQCAtOTgyLDkgKzk4NCw3IEBACiAjIHZhcmlhYmxlcyBiZWluZyBzZXQuCiBkZWZpbmUgYXV0by1pbmNsdWRlZC1tb2R1bGVzCiAgICQoZm9yZWFjaCB2bmRrX3ZlciwkKFBST0RVQ1RfRVhUUkFfVk5ES19WRVJTSU9OUyksY29tLmFuZHJvaWQudm5kay52JCh2bmRrX3ZlcikpIFwKLSAgJChmaWx0ZXItb3V0ICQoTExOREtfTU9WRURfVE9fQVBFWF9MSUJSQVJJRVMpLCQoTExOREtfTElCUkFSSUVTKSkgXAogICBsbG5kay5saWJyYXJpZXMudHh0IFwKLSAgJChpZiAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSx2ZW5kb3JfbWFuaWZlc3QueG1sKSBcCiAgICQoaWYgJChERVZJQ0VfTUFOSUZFU1RfU0tVUyksJChmb3JlYWNoIHNrdSwgJChERVZJQ0VfTUFOSUZFU1RfU0tVUyksdmVuZG9yX21hbmlmZXN0XyQoc2t1KS54bWwpKSBcCiAgICQoaWYgJChPRE1fTUFOSUZFU1RfRklMRVMpLG9kbV9tYW5pZmVzdC54bWwpIFwKICAgJChpZiAkKE9ETV9NQU5JRkVTVF9TS1VTKSwkKGZvcmVhY2ggc2t1LCAkKE9ETV9NQU5JRkVTVF9TS1VTKSxvZG1fbWFuaWZlc3RfJChza3UpLnhtbCkpIFwKZGlmZiAtLWdpdCBhL2NvcmUvcHJvZHVjdC5tayBiL2NvcmUvcHJvZHVjdC5tawppbmRleCA4ZmM0MGY4Li43Y2Y0ZWMyIDEwMDY0NAotLS0gYS9jb3JlL3Byb2R1Y3QubWsKKysrIGIvY29yZS9wcm9kdWN0Lm1rCkBAIC0zNjYsNiArMzY2LDggQEAKIF9wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfQlVJTERfVkJNRVRBX0lNQUdFCiBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0JVSUxEX1NVUEVSX0VNUFRZX0lNQUdFCiBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0JVSUxEX1BWTUZXX0lNQUdFCitfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0JVSUxEX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UKK19wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfQlVJTERfREVTS1RPUF9VUERBVEVfSU1BR0UKIAogIyBMaXN0IG9mIGJvb3QgamFycyBkZWxpdmVyZWQgdmlhIHVwZGF0YWJsZSBBUEVYZXMsIGZvbGxvd2luZyB0aGUgc2FtZSBmb3JtYXQgYXMKICMgUFJPRFVDVF9CT09UX0pBUlMuCmRpZmYgLS1naXQgYS9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rIGIvY29yZS9wcm9kdWN0X2NvbmZpZy5tawppbmRleCA3MzhkNGNmLi5hYmU2ZTM4IDEwMDY0NAotLS0gYS9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rCisrKyBiL2NvcmUvcHJvZHVjdF9jb25maWcubWsKQEAgLTQyNCwxMCArNDI0LDEyIEBACiAgIGVuZGlmCiBlbmRpZgogCi0kKGZvcmVhY2ggcGFpciwkKFBST0RVQ1RfQVBFWF9CT09UX0pBUlMpLCBcCi0gICQoZXZhbCBqYXIgOj0gJChjYWxsIHdvcmQtY29sb24sMiwkKHBhaXIpKSkgXAotICAkKGlmICQoZmluZHN0cmluZyAkKGphciksICQoUFJPRFVDVF9CT09UX0pBUlMpKSwgXAotICAgICQoZXJyb3IgQSBqYXIgaW4gUFJPRFVDVF9BUEVYX0JPT1RfSkFSUyBtdXN0IG5vdCBiZSBpbiBQUk9EVUNUX0JPT1RfSkFSUywgYnV0ICQoamFyKSBpcykpKQorJChmb3JlYWNoIGFwZXhwYWlyLCQoUFJPRFVDVF9BUEVYX0JPT1RfSkFSUyksIFwKKyAgJChmb3JlYWNoIHBsYXRmb3JtcGFpciwkKFBST0RVQ1RfQk9PVF9KQVJTKSwgXAorICAgICQoZXZhbCBhcGV4amFyIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDIsJChhcGV4cGFpcikpKSBcCisgICAgJChldmFsIHBsYXRmb3JtamFyIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDIsJChwbGF0Zm9ybXBhaXIpKSkgXAorICAgICQoaWYgJChmaWx0ZXIgJChhcGV4amFyKSwgJChwbGF0Zm9ybWphcikpLCBcCisgICAgICAkKGVycm9yIEEgamFyIGluIFBST0RVQ1RfQVBFWF9CT09UX0pBUlMgbXVzdCBub3QgYmUgaW4gUFJPRFVDVF9CT09UX0pBUlMsIGJ1dCAkKGFwZXhqYXIpIGlzKSkpKQogCiBFTkZPUkNFX1NZU1RFTV9DRVJUSUZJQ0FURSA6PSAkKFBST0RVQ1RfRU5GT1JDRV9BUlRJRkFDVF9TWVNURU1fQ0VSVElGSUNBVEVfUkVRVUlSRU1FTlQpCiBFTkZPUkNFX1NZU1RFTV9DRVJUSUZJQ0FURV9BTExPV19MSVNUIDo9ICQoUFJPRFVDVF9BUlRJRkFDVF9TWVNURU1fQ0VSVElGSUNBVEVfUkVRVUlSRU1FTlRfQUxMT1dfTElTVCkKQEAgLTYwMiw3ICs2MDQsMTIgQEAKICAgICAjIFZlbmRvcnMgd2l0aCBHUkYgbXVzdCBkZWZpbmUgQk9BUkRfU0hJUFBJTkdfQVBJX0xFVkVMIGZvciB0aGUgdmVuZG9yIEFQSSBsZXZlbC4KICAgICAjIEluIHRoaXMgY2FzZSwgdGhlIFZTUiBBUEkgbGV2ZWwgaXMgdGhlIG1pbmltdW0gb2YgdGhlIFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMCiAgICAgIyBhbmQgUkVMRUFTRV9CT0FSRF9BUElfTEVWRUwKLSAgICBWU1JfVkVORE9SX0FQSV9MRVZFTCA6PSAkKGNhbGwgbWF0aF9taW4sJChWU1JfVkVORE9SX0FQSV9MRVZFTCksJChSRUxFQVNFX0JPQVJEX0FQSV9MRVZFTCkpCisgICAgYm9hcmRfYXBpX2xldmVsIDo9ICQoUkVMRUFTRV9CT0FSRF9BUElfTEVWRUwpCisgICAgaWZkZWYgQk9BUkRfQVBJX0xFVkVMX1BST1BfT1ZFUlJJREUKKyAgICAgIGJvYXJkX2FwaV9sZXZlbCA6PSAkKEJPQVJEX0FQSV9MRVZFTF9QUk9QX09WRVJSSURFKQorICAgIGVuZGlmCisgICAgVlNSX1ZFTkRPUl9BUElfTEVWRUwgOj0gJChjYWxsIG1hdGhfbWluLCQoVlNSX1ZFTkRPUl9BUElfTEVWRUwpLCQoYm9hcmRfYXBpX2xldmVsKSkKKyAgICBib2FyZF9hcGlfbGV2ZWwgOj0KICAgZW5kaWYKIGVuZGlmCiAuS0FUSV9SRUFET05MWSA6PSBWU1JfVkVORE9SX0FQSV9MRVZFTApkaWZmIC0tZ2l0IGEvY29yZS9yYXZlbndvb2RfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sIGIvY29yZS9yYXZlbndvb2RfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sCmluZGV4IDJmMjFiYWUuLjllOWRkNzYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmF2ZW53b29kX3Rlc3RfY29uZmlnX3RlbXBsYXRlLnhtbAorKysgYi9jb3JlL3JhdmVud29vZF90ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwKQEAgLTIyLDYgKzIyLDcgQEAKICAgICA8b3B0aW9uIG5hbWU9InVzZS1yYXZlbndvb2QtcmVzb3VyY2VzIiB2YWx1ZT0idHJ1ZSIgLz4KICAgICA8b3B0aW9uIG5hbWU9ImV4Y2x1ZGUtcGF0aHMiIHZhbHVlPSJqYXZhIiAvPgogICAgIDxvcHRpb24gbmFtZT0ibnVsbC1kZXZpY2UiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iZG8tbm90LXN3YWxsb3ctcnVubmVyLWVycm9ycyIgdmFsdWU9InRydWUiIC8+CiAKICAgICB7RVhUUkFfQ09ORklHU30KIApkaWZmIC0tZ2l0IGEvY29yZS9zb29uZ19jb25maWcubWsgYi9jb3JlL3Nvb25nX2NvbmZpZy5tawppbmRleCBhOTliZjBlLi44MmJlMWY0IDEwMDY0NAotLS0gYS9jb3JlL3Nvb25nX2NvbmZpZy5taworKysgYi9jb3JlL3Nvb25nX2NvbmZpZy5tawpAQCAtMTUwLDYgKzE1MCw3IEBACiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgQnRDb25maWdJbmNsdWRlRGlyLCAgICAgICAgICAgICAgICAkKEJPQVJEX0JMVUVUT09USF9CRFJPSURfQlVJTERDRkdfSU5DTFVERV9ESVIpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIERldmljZUtlcm5lbEhlYWRlcnMsICAgICAgICAgICAgICAgJChUQVJHRVRfREVWSUNFX0tFUk5FTF9IRUFERVJTKSAkKFRBUkdFVF9CT0FSRF9LRVJORUxfSEVBREVSUykgJChUQVJHRVRfUFJPRFVDVF9LRVJORUxfSEVBREVSUykpCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgVmVuZG9yQXBpTGV2ZWwsICAgICAgICAgICAgICAgICAgICAkKEJPQVJEX0FQSV9MRVZFTCkpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgVmVuZG9yQXBpTGV2ZWxQcm9wT3ZlcnJpZGUsICAgICAgICAkKEJPQVJEX0FQSV9MRVZFTF9QUk9QX09WRVJSSURFKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBFeHRyYVZuZGtWZXJzaW9ucywgICAgICAgICAgICAgICAgICQoUFJPRFVDVF9FWFRSQV9WTkRLX1ZFUlNJT05TKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBEZXZpY2VTeXN0ZW1TZGtWZXJzaW9ucywgICAgICAgICAgICQoQk9BUkRfU1lTVEVNU0RLX1ZFUlNJT05TKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBQbGF0Zm9ybV9zeXN0ZW1zZGtfdmVyc2lvbnMsICAgICAgICQoUExBVEZPUk1fU1lTVEVNU0RLX1ZFUlNJT05TKSkKQEAgLTE4Miw5ICsxODMsMTYgQEAKIAogJChjYWxsIGFkZF9qc29uX2Jvb2wsIFVtbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChmaWx0ZXIgdHJ1ZSwkKFRBUkdFVF9VU0VSX01PREVfTElOVVgpKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBWZW5kb3JQYXRoLCAgICAgICAgICAgICAgICAgICAgICAgICQoVEFSR0VUX0NPUFlfT1VUX1ZFTkRPUikpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgVmVuZG9yRGxrbVBhdGgsICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9WRU5ET1JfRExLTSkpCiskKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdWZW5kb3JJbWFnZSwgICAgICAgICAgICAgICAkKEJVSUxESU5HX1ZFTkRPUl9JTUFHRSkpCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgT2RtUGF0aCwgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9PRE0pKQorJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nT2RtSW1hZ2UsICAgICAgICAgICAgICAgICAgJChCVUlMRElOR19PRE1fSU1BR0UpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIE9kbURsa21QYXRoLCAgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfT0RNX0RMS00pKQogJChjYWxsIGFkZF9qc29uX3N0ciwgIFByb2R1Y3RQYXRoLCAgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVCkpCiskKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdQcm9kdWN0SW1hZ2UsICAgICAgICAgICAgICAkKEJVSUxESU5HX1BST0RVQ1RfSU1BR0UpKQogJChjYWxsIGFkZF9qc29uX3N0ciwgIFN5c3RlbUV4dFBhdGgsICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfU1lTVEVNX0VYVCkpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgU3lzdGVtRGxrbVBhdGgsICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9TWVNURU1fRExLTSkpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgT2VtUGF0aCwgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9PRU0pKQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIE1pbmltaXplSmF2YURlYnVnSW5mbywgICAgICAgICAgICAgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfTUlOSU1JWkVfSkFWQV9ERUJVR19JTkZPKSkpCiAKICQoY2FsbCBhZGRfanNvbl9ib29sLCBVc2VHb21hLCAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZmlsdGVyLW91dCBmYWxzZSwkKFVTRV9HT01BKSkpCkBAIC0zNDUsNiArMzUzLDcgQEAKICQoY2FsbCBhZGRfanNvbl9saXN0LCBTeXN0ZW1FeHRQcm9wRmlsZXMsICQoVEFSR0VUX1NZU1RFTV9FWFRfUFJPUCkpCiAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUHJvZHVjdFByb3BGaWxlcywgJChUQVJHRVRfUFJPRFVDVF9QUk9QKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBPZG1Qcm9wRmlsZXMsICQoVEFSR0VUX09ETV9QUk9QKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBWZW5kb3JQcm9wRmlsZXMsICQoVEFSR0VUX1ZFTkRPUl9QUk9QKSkKIAogJChjYWxsIGFkZF9qc29uX3N0ciwgRXh0cmFBbGxvd2VkRGVwc1R4dCwgJChFWFRSQV9BTExPV0VEX0RFUFNfVFhUKSkKIApAQCAtNDEyLDYgKzQyMSwyMSBAQAogICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEV4dDRTaGFyZUR1cEJsb2NrcywgJChCT0FSRF9FWFQ0X1NIQVJFX0RVUF9CTE9DS1MpKQogICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEZsYXNoTG9naWNhbEJsb2NrU2l6ZSwgJChCT0FSRF9GTEFTSF9MT0dJQ0FMX0JMT0NLX1NJWkUpKQogICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEZsYXNoRXJhc2VCbG9ja1NpemUsICQoQk9BUkRfRkxBU0hfRVJBU0VfQkxPQ0tfU0laRSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ1ZibWV0YUltYWdlLCAkKEJVSUxESU5HX1ZCTUVUQV9JTUFHRSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCb2FyZEF2YkVuYWJsZSwgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX0FWQl9FTkFCTEUpKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRBdmJBbGdvcml0aG0sICQoQk9BUkRfQVZCX0FMR09SSVRITSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiS2V5UGF0aCwgJChCT0FSRF9BVkJfS0VZX1BBVEgpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YlJvbGxiYWNrSW5kZXgsICQoQk9BUkRfQVZCX1JPTExCQUNLX0lOREVYKSkKKyAgJChjYWxsIGFkZF9qc29uX21hcCwgQ2hhaW5lZFZibWV0YVBhcnRpdGlvbnMpCisgICQoZm9yZWFjaCBwYXJ0aXRpb24sc3lzdGVtIHZlbmRvciAkKEJPQVJEX0FWQl9WQk1FVEFfQ1VTVE9NX1BBUlRJVElPTlMpLFwKKyAgICAkKGNhbGwgYWRkX2pzb25fbWFwLCAkKHBhcnRpdGlvbikpIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9saXN0LFBhcnRpdGlvbnMsJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpKSkgXAorICAgICAgJChjYWxsIGFkZF9qc29uX3N0cixLZXksJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpX0tFWV9QQVRIKSkgXAorICAgICAgJChjYWxsIGFkZF9qc29uX3N0cixBbGdvcml0aG0sJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpX0FMR09SSVRITSkpIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9zdHIsUm9sbGJhY2tJbmRleCwkKEJPQVJEX0FWQl9WQk1FVEFfJChjYWxsIHRvLXVwcGVyLCQocGFydGl0aW9uKSlfUk9MTEJBQ0tfSU5ERVgpKSBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLFJvbGxiYWNrSW5kZXhMb2NhdGlvbiwkKEJPQVJEX0FWQl9WQk1FVEFfJChjYWxsIHRvLXVwcGVyLCQocGFydGl0aW9uKSlfUk9MTEJBQ0tfSU5ERVhfTE9DQVRJT04pKSBcCisgICAgJChjYWxsIGVuZF9qc29uX21hcCkpCisgICQoY2FsbCBlbmRfanNvbl9tYXApCiAKICAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkVXNlc1JlY292ZXJ5QXNCb290LCAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UKSkpCiAgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0VXNlRHluYW1pY1BhcnRpdGlvblNpemUsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1VTRV9EWU5BTUlDX1BBUlRJVElPTl9TSVpFKSkpCkBAIC00MjAsOCArNDQ0LDQ3IEBACiAgICQoY2FsbCBhZGRfanNvbl9saXN0LCBQcm9kdWN0UGFja2FnZXMsICQoUFJPRFVDVF9QQUNLQUdFUykpCiAgICQoY2FsbCBhZGRfanNvbl9saXN0LCBQcm9kdWN0UGFja2FnZXNEZWJ1ZywgJChQUk9EVUNUX1BBQ0tBR0VTX0RFQlVHKSkKIAorICAjIFVzZWQgdG8gZ2VuZXJhdGUgL3ZlbmRvci9saW5rZXIuY29uZmlnLnBiCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBWZW5kb3JMaW5rZXJDb25maWdTcmNzLCAkKFBST0RVQ1RfVkVORE9SX0xJTktFUl9DT05GSUdfRlJBR01FTlRTKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFByb2R1Y3RMaW5rZXJDb25maWdTcmNzLCAkKFBST0RVQ1RfUFJPRFVDVF9MSU5LRVJfQ09ORklHX0ZSQUdNRU5UUykpCisKKyAgIyBVc2VkIHRvIGdlbmVyYXRlIF9kbGttIHBhcnRpdGlvbnMKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nU3lzdGVtRGxrbUltYWdlLCAgICAgICAgICAgICAgICQoQlVJTERJTkdfU1lTVEVNX0RMS01fSU1BR0UpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgU3lzdGVtS2VybmVsTW9kdWxlcywgJChCT0FSRF9TWVNURU1fS0VSTkVMX01PRFVMRVMpKQorCisgICMgVXNlZCB0byBnZW5lcmF0ZSAvdmVuZG9yL2J1aWxkLnByb3AKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIEJvYXJkSW5mb0ZpbGVzLCAkKGlmICQoVEFSR0VUX0JPQVJEX0lORk9fRklMRVMpLCQoVEFSR0VUX0JPQVJEX0lORk9fRklMRVMpLCQoZmlyc3R3b3JkICQoVEFSR0VUX0JPQVJEX0lORk9fRklMRSkgJCh3aWxkY2FyZCAkKFRBUkdFVF9ERVZJQ0VfRElSKS9ib2FyZC1pbmZvLnR4dCkpKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9vdExvYWRlckJvYXJkTmFtZSwgJChUQVJHRVRfQk9PVExPQURFUl9CT0FSRF9OQU1FKSkKKworICAkKGNhbGwgYWRkX2pzb25fbWFwLCBQcm9kdWN0Q29weUZpbGVzKQorICAkKGZvcmVhY2ggcGFpciwkKFBST0RVQ1RfQ09QWV9GSUxFUyksXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsJCh3b3JkIDEsJChzdWJzdCA6LCAsJChwYWlyKSkpLCQod29yZCAyLCQoc3Vic3QgOiwgLCQocGFpcikpKSkpCisgICQoY2FsbCBlbmRfanNvbl9tYXApCisKICQoY2FsbCBlbmRfanNvbl9tYXApCiAKKyMgRm9yIGNvbnZlcnRpbmcgdmludGZfZGF0YQorJChjYWxsIGFkZF9qc29uX2xpc3QsIERldmljZU1hdHJpeEZpbGUsICQoREVWSUNFX01BVFJJWF9GSUxFKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBQcm9kdWN0TWFuaWZlc3RGaWxlcywgJChQUk9EVUNUX01BTklGRVNUX0ZJTEVTKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBTeXN0ZW1NYW5pZmVzdEZpbGUsICQoREVWSUNFX0ZSQU1FV09SS19NQU5JRkVTVF9GSUxFKSkKK1NZU1RFTV9FWFRfSFdTRVJWSUNFX0ZJTEVTIDo9CitpZmVxICgkKFBST0RVQ1RfSElETF9FTkFCTEVEKSx0cnVlKQorICBpZm5lcSAoJChmaWx0ZXIgaHdzZXJ2aWNlbWFuYWdlciwkKFBST0RVQ1RfUEFDS0FHRVMpKSwpCisgICAgU1lTVEVNX0VYVF9IV1NFUlZJQ0VfRklMRVMgKz0gc3lzdGVtL2h3c2VydmljZW1hbmFnZXIvaHdzZXJ2aWNlbWFuYWdlcl9ub19tYXgueG1sCisgIGVsc2UKKyAgICAkKGVycm9yIElmIFBST0RVQ1RfSElETF9FTkFCTEVEIGlzIHNldCwgaHdzZXJ2aWNlbWFuYWdlciBtdXN0IGJlIGFkZGVkIHRvIFBST0RVQ1RfUEFDS0FHRVMgZXhwbGljaXRseSkKKyAgZW5kaWYKK2Vsc2UKKyAgaWZuZXEgKCQoZmlsdGVyIGh3c2VydmljZW1hbmFnZXIsJChQUk9EVUNUX1BBQ0tBR0VTKSksKQorICAgIFNZU1RFTV9FWFRfSFdTRVJWSUNFX0ZJTEVTICs9IHN5c3RlbS9od3NlcnZpY2VtYW5hZ2VyL2h3c2VydmljZW1hbmFnZXIueG1sCisgIGVsc2UgaWZuZXEgKCQoZmlsdGVyIGh3c2VydmljZW1hbmFnZXIsJChQUk9EVUNUX1BBQ0tBR0VTX1NISVBQSU5HX0FQSV9MRVZFTF8zNCkpLCkKKyAgICBTWVNURU1fRVhUX0hXU0VSVklDRV9GSUxFUyArPSBzeXN0ZW0vaHdzZXJ2aWNlbWFuYWdlci9od3NlcnZpY2VtYW5hZ2VyLnhtbAorICBlbmRpZgorZW5kaWYKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBTeXN0ZW1FeHRNYW5pZmVzdEZpbGVzLCAkKFNZU1RFTV9FWFRfTUFOSUZFU1RfRklMRVMpICQoU1lTVEVNX0VYVF9IV1NFUlZJQ0VfRklMRVMpKQorJChjYWxsIGFkZF9qc29uX2xpc3QsIERldmljZU1hbmlmZXN0RmlsZXMsICQoREVWSUNFX01BTklGRVNUX0ZJTEUpKQorJChjYWxsIGFkZF9qc29uX2xpc3QsIE9kbU1hbmlmZXN0RmlsZXMsICQoT0RNX01BTklGRVNUX0ZJTEVTKSkKKwogJChjYWxsIGpzb25fZW5kKQogCiAkKGZpbGUgPiQoU09PTkdfVkFSSUFCTEVTKS50bXAsJChqc29uX2NvbnRlbnRzKSkKZGlmZiAtLWdpdCBhL2NvcmUvc29vbmdfZXh0cmFfY29uZmlnLm1rIGIvY29yZS9zb29uZ19leHRyYV9jb25maWcubWsKaW5kZXggMDBiNWMwZi4uMmZmODNhMSAxMDA2NDQKLS0tIGEvY29yZS9zb29uZ19leHRyYV9jb25maWcubWsKKysrIGIvY29yZS9zb29uZ19leHRyYV9jb25maWcubWsKQEAgLTQzLDYgKzQzLDcgQEAKICQoY2FsbCBhZGRfanNvbl9saXN0LCBQUk9EVUNUX1BST0RVQ1RfUFJPUEVSVElFUywgICAgICAgICQoY2FsbCBjb2xsYXBzZS1wcm9wLXBhaXJzLFBST0RVQ1RfUFJPRFVDVF9QUk9QRVJUSUVTKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBQUk9EVUNUX09ETV9QUk9QRVJUSUVTLCAgICAgICAgICAgICQoY2FsbCBjb2xsYXBzZS1wcm9wLXBhaXJzLFBST0RVQ1RfT0RNX1BST1BFUlRJRVMpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTLCAgICAgICAgJChjYWxsIGNvbGxhcHNlLXByb3AtcGFpcnMsUFJPRFVDVF9QUk9QRVJUWV9PVkVSUklERVMpKQorJChjYWxsIGFkZF9qc29uX2xpc3QsIFBST0RVQ1RfREVGQVVMVF9QUk9QRVJUWV9PVkVSUklERVMsICAgICAgICAkKGNhbGwgY29sbGFwc2UtcHJvcC1wYWlycyxQUk9EVUNUX0RFRkFVTFRfUFJPUEVSVFlfT1ZFUlJJREVTKSkKIAogJChjYWxsIGFkZF9qc29uX3N0ciwgQm9vdGxvYWRlckJvYXJkTmFtZSwgJChUQVJHRVRfQk9PVExPQURFUl9CT0FSRF9OQU1FKSkKIApkaWZmIC0tZ2l0IGEvY29yZS9zeXNwcm9wLm1rIGIvY29yZS9zeXNwcm9wLm1rCmluZGV4IGRjNmYyYzQuLjliNzBkMWMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3lzcHJvcC5taworKysgYi9jb3JlL3N5c3Byb3AubWsKQEAgLTI4MSw1MSArMjgxLDE3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyB2ZW5kb3JfZGxrbS9ldGMvYnVpbGQucHJvcAotIworIyBvZG1fZGxrbS9ldGMvYnVpbGQucHJvcAorIyBzeXN0ZW1fZGxrbS9idWlsZC5wcm9wCisjIFRoZXNlIGFyZSBidWlsdCBieSBTb29uZy4gU2VlIGJ1aWxkL3Nvb25nL0FuZHJvaWQuYnAKIAogSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX09VVF9WRU5ET1JfRExLTSkvZXRjL2J1aWxkLnByb3AKLSQoZXZhbCAkKGNhbGwgYnVpbGQtcHJvcGVydGllcyxcCi0gICAgdmVuZG9yX2Rsa20sXAotICAgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpKSkKLQotJChldmFsICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKElOU1RBTExFRF9WRU5ET1JfRExLTV9CVUlMRF9QUk9QX1RBUkdFVCkpKQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgb2RtX2Rsa20vZXRjL2J1aWxkLnByb3AKLSMKLQogSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX09VVF9PRE1fRExLTSkvZXRjL2J1aWxkLnByb3AKLSQoZXZhbCAkKGNhbGwgYnVpbGQtcHJvcGVydGllcyxcCi0gICAgb2RtX2Rsa20sXAotICAgICQoSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpKSkKLQotJChldmFsICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKElOU1RBTExFRF9PRE1fRExLTV9CVUlMRF9QUk9QX1RBUkdFVCkpKQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc3lzdGVtX2Rsa20vYnVpbGQucHJvcAotIwotCiBJTlNUQUxMRURfU1lTVEVNX0RMS01fQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfT1VUX1NZU1RFTV9ETEtNKS9ldGMvYnVpbGQucHJvcAotJChldmFsICQoY2FsbCBidWlsZC1wcm9wZXJ0aWVzLFwKLSAgICBzeXN0ZW1fZGxrbSxcCi0gICAgJChJTlNUQUxMRURfU1lTVEVNX0RMS01fQlVJTERfUFJPUF9UQVJHRVQpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSkpKQotCi0kKGV2YWwgJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSkpCitBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUyArPSBcCisgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCisgICQoSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCisgICQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgc3lzdGVtX2V4dC9ldGMvYnVpbGQucHJvcApkaWZmIC0tZ2l0IGEvY29yZS9zeXNwcm9wX2NvbmZpZy5tayBiL2NvcmUvc3lzcHJvcF9jb25maWcubWsKaW5kZXggNjkwNjYxMS4uMTk5MTUwMyAxMDA2NDQKLS0tIGEvY29yZS9zeXNwcm9wX2NvbmZpZy5taworKysgYi9jb3JlL3N5c3Byb3BfY29uZmlnLm1rCkBAIC05MSw4ICs5MSwxMiBAQAogIyBCdWlsZCBzeXN0ZW0gc2V0IEJPQVJEX0FQSV9MRVZFTCB0byBzaG93IHRoZSBhcGkgbGV2ZWwgb2YgdGhlIHZlbmRvciBBUEkgc3VyZmFjZS4KICMgVGhpcyBtdXN0IG5vdCBiZSBhbHRlcmVkIG91dHNpZGUgb2YgYnVpbGQgc3lzdGVtLgogaWZkZWYgQk9BUkRfQVBJX0xFVkVMCi1BRERJVElPTkFMX1ZFTkRPUl9QUk9QRVJUSUVTICs9IFwKLSAgICByby5ib2FyZC5hcGlfbGV2ZWw9JChCT0FSRF9BUElfTEVWRUwpCisgIEFERElUSU9OQUxfVkVORE9SX1BST1BFUlRJRVMgKz0gXAorICAgIHJvLmJvYXJkLmFwaV9sZXZlbD89JChCT0FSRF9BUElfTEVWRUwpCisgIGlmZGVmIEJPQVJEX0FQSV9MRVZFTF9QUk9QX09WRVJSSURFCisgICAgQURESVRJT05BTF9WRU5ET1JfUFJPUEVSVElFUyArPSBcCisgICAgICByby5ib2FyZC5hcGlfbGV2ZWw9JChCT0FSRF9BUElfTEVWRUxfUFJPUF9PVkVSUklERSkKKyAgZW5kaWYKIGVuZGlmCiAjIFJFTEVBU0VfQk9BUkRfQVBJX0xFVkVMX0ZST1pFTiBpcyB0cnVlIHdoZW4gdGhlIHZlbmRvciBBUEkgc3VyZmFjZSBpcyBmcm96ZW4uCiBpZmRlZiBSRUxFQVNFX0JPQVJEX0FQSV9MRVZFTF9GUk9aRU4KZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvYXV0b3JlcHJvLm1rIGIvY29yZS90YXNrcy9hdXRvcmVwcm8ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4MWY5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGFza3MvYXV0b3JlcHJvLm1rCkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2lmbmVxICgkKHdpbGRjYXJkIHRlc3Qvc3RzL1JFQURNRS1hdXRvcmVwcm8ubWQpLCkKK3Rlc3Rfc3VpdGVfbmFtZSA6PSBhdXRvcmVwcm8KK3Rlc3Rfc3VpdGVfdHJhZGVmZWQgOj0gc3RzLXRyYWRlZmVkCit0ZXN0X3N1aXRlX3JlYWRtZSA6PSB0ZXN0L3N0cy9SRUFETUUtYXV0b3JlcHJvLm1kCithdXRvcmVwcm9femlwIDo9ICQoSE9TVF9PVVQpLyQodGVzdF9zdWl0ZV9uYW1lKS9hdXRvcmVwcm8uemlwCisKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL3Rhc2tzL3Rvb2xzL2NvbXBhdGliaWxpdHkubWsKKworYXV0b3JlcHJvX3BsdWdpbl9za2VsIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsRVRDLGF1dG9yZXByby1wbHVnaW4tc2tlbC56aXApL2F1dG9yZXByby1wbHVnaW4tc2tlbC56aXAKKworJChhdXRvcmVwcm9femlwKTogQVVUT1JFUFJPX1pJUCA6PSAkKGNvbXBhdGliaWxpdHlfemlwKQorJChhdXRvcmVwcm9femlwKTogQVVUT1JFUFJPX1BMVUdJTl9TS0VMIDo9ICQoYXV0b3JlcHJvX3BsdWdpbl9za2VsKQorJChhdXRvcmVwcm9femlwKTogJChNRVJHRV9aSVBTKSAkKFpJUDJaSVApICQoY29tcGF0aWJpbGl0eV96aXApICQoYXV0b3JlcHJvX3BsdWdpbl9za2VsKQorCXJtIC1mICRAICQoQVVUT1JFUFJPX1pJUClfZmlsdGVyZWQKKwkkKFpJUDJaSVApIC1pICQoQVVUT1JFUFJPX1pJUCkgLW8gJChBVVRPUkVQUk9fWklQKV9maWx0ZXJlZCBcCisJCS14IGFuZHJvaWQtYXV0b3JlcHJvL3Rvb2xzL3N0cy10cmFkZWZlZC10ZXN0cy5qYXIgXAorCQknYW5kcm9pZC1hdXRvcmVwcm8vdG9vbHMvKjphdXRvcmVwcm8vc3JjL21haW4vcmVzb3VyY2VzL3N0cy10cmFkZWZlZC10b29scy8nCisJJChNRVJHRV9aSVBTKSAkQCAkKEFVVE9SRVBST19aSVApX2ZpbHRlcmVkICQoQVVUT1JFUFJPX1BMVUdJTl9TS0VMKQorCXJtIC1mICQoQVVUT1JFUFJPX1pJUClfZmlsdGVyZWQKKworLlBIT05ZOiBhdXRvcmVwcm8KK2F1dG9yZXBybzogJChhdXRvcmVwcm9femlwKQorJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBhdXRvcmVwcm8sICQoYXV0b3JlcHJvX3ppcCkpCisKK2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL2R0cy5tayBiL2NvcmUvdGFza3MvZHRzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMDkwODIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rhc2tzL2R0cy5tawpAQCAtMCwwICsxLDI4IEBACisjIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIERlc2t0b3AgdGVzdCBzdWl0ZQoraWZuZXEgKCQod2lsZGNhcmQgdGVzdC9kdHMvdG9vbHMvZHRzLXRyYWRlZmVkL1JFQURNRSksKQordGVzdF9zdWl0ZV9uYW1lIDo9IGR0cwordGVzdF9zdWl0ZV90cmFkZWZlZCA6PSBkdHMtdHJhZGVmZWQKK3Rlc3Rfc3VpdGVfcmVhZG1lIDo9IHRlc3QvZHRzL3Rvb2xzL2R0cy10cmFkZWZlZC9SRUFETUUKK3Rlc3Rfc3VpdGVfdG9vbHMgOj0gJChIT1NUX09VVF9KQVZBX0xJQlJBUklFUykvYXRzX2NvbnNvbGVfZGVwbG95LmphciBcCisgICQoSE9TVF9PVVRfSkFWQV9MSUJSQVJJRVMpL2F0c19vbGNfc2VydmVyX2xvY2FsX21vZGVfZGVwbG95LmphcgorCitpbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy9jb21wYXRpYmlsaXR5Lm1rCisKKy5QSE9OWTogZHRzCitkdHM6ICQoY29tcGF0aWJpbGl0eV96aXApICQoY29tcGF0aWJpbGl0eV90ZXN0c19saXN0X3ppcCkKKyQoY2FsbCBkaXN0LWZvci1nb2FscywgZHRzLCAkKGNvbXBhdGliaWxpdHlfemlwKSAkKGNvbXBhdGliaWxpdHlfdGVzdHNfbGlzdF96aXApKQorZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3Mvc3RzLXNkay5tayBiL2NvcmUvdGFza3Mvc3RzLXNkay5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiYmMyOS4uMDAwMDAwMAotLS0gYS9jb3JlL3Rhc2tzL3N0cy1zZGsubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAyMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1pZm5lcSAoJCh3aWxkY2FyZCB0ZXN0L3N0cy9SRUFETUUtc3RzLXNkay5tZCksKQotdGVzdF9zdWl0ZV9uYW1lIDo9IHN0cy1zZGsKLXRlc3Rfc3VpdGVfdHJhZGVmZWQgOj0gc3RzLXRyYWRlZmVkCi10ZXN0X3N1aXRlX3JlYWRtZSA6PSB0ZXN0L3N0cy9SRUFETUUtc3RzLXNkay5tZAotc3RzX3Nka196aXAgOj0gJChIT1NUX09VVCkvJCh0ZXN0X3N1aXRlX25hbWUpL3N0cy1zZGsuemlwCi0KLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL3Rhc2tzL3Rvb2xzL2NvbXBhdGliaWxpdHkubWsKLQotc3RzX3Nka19wbHVnaW5fc2tlbCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEVUQyxzdHMtc2RrLXBsdWdpbi1za2VsLnppcCkvc3RzLXNkay1wbHVnaW4tc2tlbC56aXAKLQotJChzdHNfc2RrX3ppcCk6IFNUU19TREtfWklQIDo9ICQoY29tcGF0aWJpbGl0eV96aXApCi0kKHN0c19zZGtfemlwKTogU1RTX1NES19QTFVHSU5fU0tFTCA6PSAkKHN0c19zZGtfcGx1Z2luX3NrZWwpCi0kKHN0c19zZGtfemlwKTogJChNRVJHRV9aSVBTKSAkKFpJUDJaSVApICQoY29tcGF0aWJpbGl0eV96aXApICQoc3RzX3Nka19wbHVnaW5fc2tlbCkKLQlybSAtZiAkQCAkKFNUU19TREtfWklQKV9maWx0ZXJlZAotCSQoWklQMlpJUCkgLWkgJChTVFNfU0RLX1pJUCkgLW8gJChTVFNfU0RLX1pJUClfZmlsdGVyZWQgXAotCQkteCBhbmRyb2lkLXN0cy1zZGsvdG9vbHMvc3RzLXRyYWRlZmVkLXRlc3RzLmphciBcCi0JCSdhbmRyb2lkLXN0cy1zZGsvdG9vbHMvKjpzdHMtc2RrL3NyYy9tYWluL3Jlc291cmNlcy9zdHMtdHJhZGVmZWQtdG9vbHMvJwotCSQoTUVSR0VfWklQUykgJEAgJChTVFNfU0RLX1pJUClfZmlsdGVyZWQgJChTVFNfU0RLX1BMVUdJTl9TS0VMKQotCXJtIC1mICQoU1RTX1NES19aSVApX2ZpbHRlcmVkCi0KLS5QSE9OWTogc3RzLXNkawotc3RzLXNkazogJChzdHNfc2RrX3ppcCkKLSQoY2FsbCBkaXN0LWZvci1nb2Fscywgc3RzLXNkaywgJChzdHNfc2RrX3ppcCkpCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Rvb2xzL3VwZGF0ZV9ib290bG9hZGVyX3JhZGlvX2ltYWdlLm1rIGIvY29yZS90YXNrcy90b29scy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRiODZlYS4uMDAwMDAwMAotLS0gYS9jb3JlL3Rhc2tzL3Rvb2xzL3VwZGF0ZV9ib290bG9hZGVyX3JhZGlvX2ltYWdlLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOiN3d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1pZmVxICgkKFVTRVNfREVWSUNFX0dPT0dMRV9aVU1BKSx0cnVlKQotICAgIC1pbmNsdWRlIHZlbmRvci9nb29nbGVfZGV2aWNlcy96dW1hL3ByZWJ1aWx0cy9taXNjX2JpbnMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKLWVuZGlmCi1pZmVxICgkKFVTRVNfREVWSUNFX0dPT0dMRV9aVU1BUFJPKSx0cnVlKQotICAgIC1pbmNsdWRlIHZlbmRvci9nb29nbGVfZGV2aWNlcy96dW1hcHJvL3ByZWJ1aWx0cy9taXNjX2JpbnMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKLWVuZGlmCi1pZmVxICgkKFVTRVNfREVWSUNFX0dPT0dMRV9MQUdVTkEpLHRydWUpCi0gICAgLWluY2x1ZGUgdmVuZG9yL2dvb2dsZV9kZXZpY2VzL2xhZ3VuYS9wcmVidWlsdHMvbWlzY19iaW5zL3VwZGF0ZV9ib290bG9hZGVyX3JhZGlvX2ltYWdlLm1rCi1lbmRpZgotaWZlcSAoJChVU0VTX0RFVklDRV9HT09HTEVfTUFMSUJVKSx0cnVlKQotICAgIC1pbmNsdWRlIHZlbmRvci9nb29nbGVfZGV2aWNlcy9tYWxpYnUvcHJlYnVpbHRzL21pc2NfYmlucy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5tawotZW5kaWYKZGlmZiAtLWdpdCBhL2VudnNldHVwLnNoIGIvZW52c2V0dXAuc2gKaW5kZXggM2ZlZDVhZS4uNTU0YTIyMCAxMDA2NDQKLS0tIGEvZW52c2V0dXAuc2gKKysrIGIvZW52c2V0dXAuc2gKQEAgLTM2Miw3ICszNjIsNiBAQAogICAgICAgcGFja2FnZXMvbW9kdWxlcy9hZGIvYWRiLmJhc2gKICAgICAgIHN5c3RlbS9jb3JlL2Zhc3Rib290L2Zhc3Rib290LmJhc2gKICAgICAgIHRvb2xzL2FzdWl0ZS9hc3VpdGUuc2gKLSAgICAgIHByZWJ1aWx0cy9iYXplbC9jb21tb24vYmF6ZWwtY29tcGxldGUuYmFzaAogICAgICkKICAgICAjIENvbXBsZXRpb24gY2FuIGJlIGRpc2FibGVkIHNlbGVjdGl2ZWx5IHRvIGFsbG93IHVzZXJzIHRvIHVzZSBub24tc3RhbmRhcmQgY29tcGxldGlvbi4KICAgICAjIGUuZy4KZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9BbmRyb2lkLm1rIGIvdGFyZ2V0L2JvYXJkL0FuZHJvaWQubWsKaW5kZXggODEzM2FmOS4uMzZiZTAwMiAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL0FuZHJvaWQubWsKKysrIGIvdGFyZ2V0L2JvYXJkL0FuZHJvaWQubWsKQEAgLTUxLDI5ICs1MSw2IEBACiAKICMgQ29weSBjb21wYXRpYmlsaXR5IG1ldGFkYXRhIHRvIHRoZSBkZXZpY2UuCiAKLSMgRGV2aWNlIE1hbmlmZXN0Ci1pZmRlZiBERVZJQ0VfTUFOSUZFU1RfRklMRQotIyAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSBjYW4gYmUgYSBsaXN0IG9mIGZpbGVzCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSAgICAgICAgOj0gdmVuZG9yX21hbmlmZXN0LnhtbAotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wIGxlZ2FjeV9ub3RfYV9jb250cmlidXRpb24KLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBieV9leGNlcHRpb25fb25seSBub3RfYWxsb3dlZCBub3RpY2UKLUxPQ0FMX01PRFVMRV9TVEVNICAgOj0gbWFuaWZlc3QueG1sCi1MT0NBTF9NT0RVTEVfQ0xBU1MgIDo9IEVUQwotTE9DQUxfTU9EVUxFX1BBVEggICA6PSAkKFRBUkdFVF9PVVRfVkVORE9SKS9ldGMvdmludGYKLQotR0VOIDo9ICQobG9jYWwtZ2VuZXJhdGVkLXNvdXJjZXMtZGlyKS9tYW5pZmVzdC54bWwKLSQoR0VOKTogUFJJVkFURV9ERVZJQ0VfTUFOSUZFU1RfRklMRSA6PSAkKERFVklDRV9NQU5JRkVTVF9GSUxFKQotJChHRU4pOiAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZgotCUJPQVJEX1NFUE9MSUNZX1ZFUlM9JChCT0FSRF9TRVBPTElDWV9WRVJTKSBcCi0JUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUPSQoUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUKSBcCi0JJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXNzZW1ibGVfdmludGYgLW8gJEAgXAotCQktaSAkKGNhbGwgbm9ybWFsaXplLXBhdGgtbGlzdCwkKFBSSVZBVEVfREVWSUNFX01BTklGRVNUX0ZJTEUpKQotCi1MT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRSA6PSAkKEdFTikKLWluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLWVuZGlmCi0KICMgREVWSUNFX01BTklGRVNUX1NLVVM6IGEgbGlzdCBvZiBTS1VTIHdoZXJlIERFVklDRV9NQU5JRkVTVF88c2t1Pl9GSUxFUyBpcyBkZWZpbmVkLgogaWZkZWYgREVWSUNFX01BTklGRVNUX1NLVVMKIApAQCAtMTEyLDMwICs4OSw2IEBACiAKIGVuZGlmICMgREVWSUNFX01BTklGRVNUX1NLVVMKIAotIyBPRE0gbWFuaWZlc3QKLWlmZGVmIE9ETV9NQU5JRkVTVF9GSUxFUwotIyBPRE1fTUFOSUZFU1RfRklMRVMgaXMgYSBsaXN0IG9mIGZpbGVzIHRoYXQgaXMgY29tYmluZWQgYW5kIGluc3RhbGxlZCBhcyB0aGUgZGVmYXVsdCBPRE0gbWFuaWZlc3QuCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBvZG1fbWFuaWZlc3QueG1sCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAgbGVnYWN5X25vdF9hX2NvbnRyaWJ1dGlvbgotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IGJ5X2V4Y2VwdGlvbl9vbmx5IG5vdF9hbGxvd2VkIG5vdGljZQotTE9DQUxfTU9EVUxFX1NURU0gOj0gbWFuaWZlc3QueG1sCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSB2aW50ZgotTE9DQUxfT0RNX01PRFVMRSA6PSB0cnVlCi0KLUdFTiA6PSAkKGxvY2FsLWdlbmVyYXRlZC1zb3VyY2VzLWRpcikvbWFuaWZlc3QueG1sCi0kKEdFTik6IFBSSVZBVEVfU1JDX0ZJTEVTIDo9ICQoT0RNX01BTklGRVNUX0ZJTEVTKQotJChHRU4pOiAkKE9ETV9NQU5JRkVTVF9GSUxFUykgJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXNzZW1ibGVfdmludGYKLQkjIFNldCBWSU5URl9JR05PUkVfVEFSR0VUX0ZDTV9WRVJTSU9OIHRvIHRydWUgYmVjYXVzZSBpdCBzaG91bGQgb25seSBiZSBpbiBkZXZpY2UgbWFuaWZlc3QuCi0JVklOVEZfSUdOT1JFX1RBUkdFVF9GQ01fVkVSU0lPTj10cnVlIFwKLQkkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZiAtbyAkQCBcCi0JCS1pICQoY2FsbCBub3JtYWxpemUtcGF0aC1saXN0LCQoUFJJVkFURV9TUkNfRklMRVMpKQotCi1MT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRSA6PSAkKEdFTikKLWluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLWVuZGlmICMgT0RNX01BTklGRVNUX0ZJTEVTCi0KICMgT0RNX01BTklGRVNUX1NLVVM6IGEgbGlzdCBvZiBTS1VTIHdoZXJlIE9ETV9NQU5JRkVTVF88c2t1Pl9GSUxFUyBhcmUgZGVmaW5lZC4KIGlmZGVmIE9ETV9NQU5JRkVTVF9TS1VTCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsKaW5kZXggNzRlZDgyZC4uOWQ2NDAyZSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsKQEAgLTk2LDYgKzk2LDcgQEAKICAgICBlbmhhbmNlZC1jb25maXJtYXRpb24ueG1sIFwKICAgICBFeHRTaGFyZWQgXAogICAgIGZsYWdzX2hlYWx0aF9jaGVjayBcCisgICAgZnJhbWV3b3JrLWNvbm5lY3Rpdml0eS1iIFwKICAgICBmcmFtZXdvcmstZ3JhcGhpY3MgXAogICAgIGZyYW1ld29yay1sb2NhdGlvbiBcCiAgICAgZnJhbWV3b3JrLW1pbnVzLWFwZXggXApAQCAtMjExLDYgKzIxMiw3IEBACiAgICAgbGlid2lsaGVsbSBcCiAgICAgbGlua2VyIFwKICAgICBsbGtkIFwKKyAgICBsbG5ka19saWJzIFwKICAgICBsbWtkIFwKICAgICBMb2NhbFRyYW5zcG9ydCBcCiAgICAgbG9ja3NldHRpbmdzIFwKQEAgLTI3NCw3ICsyNzYsNiBAQAogICAgIFNoZWxsIFwKICAgICBzaGVsbF9hbmRfdXRpbGl0aWVzX3N5c3RlbSBcCiAgICAgc20gXAotICAgIHNuYXBzaG90Y3RsIFwKICAgICBzbmFwdXNlcmQgXAogICAgIHN0b3JhZ2VkIFwKICAgICBzdXJmYWNlZmxpbmdlciBcCkBAIC0yODcsNiArMjg4LDcgQEAKICAgICB0b21ic3RvbmVkIFwKICAgICB0cmFjZWQgXAogICAgIHRyYWNlZF9wcm9iZXMgXAorICAgIHRyYWRlaW5tb2RlIFwKICAgICB0dW5lMmZzIFwKICAgICB1aWF1dG9tYXRvciBcCiAgICAgdWlucHV0IFwKQEAgLTM1MCw2ICszNTIsMTEgQEAKICAgICAgICAgY29tLmFuZHJvaWQucmFuZ2luZwogZW5kaWYKIAoraWZlcSAoJChSRUxFQVNFX01FTU9SWV9NQU5BR0VNRU5UX0RBRU1PTiksdHJ1ZSkKKyAgUFJPRFVDVF9QQUNLQUdFUyArPSBcCisgICAgICAgIG1tX2RhZW1vbgorZW5kaWYKKwogIyBWSU5URiBkYXRhIGZvciBzeXN0ZW0gaW1hZ2UKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIHN5c3RlbV9tYW5pZmVzdC54bWwgXApAQCAtNDI0LDYgKzQzMSw3IEBACiAgICAgbHBkdW1wIFwKICAgICBta2UyZnMgXAogICAgIG1rZnMuZXJvZnMgXAorICAgIHBidG9tYnN0b25lIFwKICAgICByZXNpemUyZnMgXAogICAgIHNnZGlzayBcCiAgICAgc3FsaXRlMyBcCkBAIC00OTEsNiArNDk5LDcgQEAKICAgICByZWNvcmRfYmluZGVyIFwKICAgICBzZXJ2aWNlZGlzcGF0Y2hlciBcCiAgICAgc2hvd21hcCBcCisgICAgc25hcHNob3RjdGwgXAogICAgIHNxbGl0ZTMgXAogICAgIHNzIFwKICAgICBzdGFydF93aXRoX2xvY2thZ2VudCBcCkBAIC01MDQsMTAgKzUxMyw2IEBACiAgICAgdW53aW5kX3JlZ19pbmZvIFwKICAgICB1bndpbmRfc3ltYm9scyBcCiAKLSMgRm9yIFJlbW90ZWx5IFByb3Zpc2lvbmVkIENlcnRpZmljYXRlIFByb2Nlc3NvcgotUFJPRFVDVF9TWVNURU1fUFJPUEVSVElFUyArPSBcCi0gICAgcmVtb3RlX3Byb3Zpc2lvbmluZy51c2VfY2VydF9wcm9jZXNzb3I9ZmFsc2UKLQogIyBUaGUgc2V0IG9mIHBhY2thZ2VzIHdob3NlIGNvZGUgY2FuIGJlIGxvYWRlZCBieSB0aGUgc3lzdGVtIHNlcnZlci4KIFBST0RVQ1RfU1lTVEVNX1NFUlZFUl9BUFBTICs9IFwKICAgICBTZXR0aW5nc1Byb3ZpZGVyIFwKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2Jhc2VfdmVuZG9yLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV92ZW5kb3IubWsKaW5kZXggM2Y4NTk0MS4uMTZmYzdmZCAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZV92ZW5kb3IubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV92ZW5kb3IubWsKQEAgLTcxLDYgKzcxLDggQEAKICAgICBwYXNzd2Rfb2RtIFwKICAgICBwYXNzd2RfdmVuZG9yIFwKICAgICBzZWxpbnV4X3BvbGljeV9ub25zeXN0ZW0gXAorICAgIHNlbGludXhfcG9saWN5X3ZlbmRvciBcCisgICAgc2VsaW51eF9wb2xpY3lfb2RtIFwKICAgICBzaGVsbF9hbmRfdXRpbGl0aWVzX3ZlbmRvciBcCiAgICAgb2RtLWJ1aWxkLnByb3AgXAogCkBAIC0xMDQsNiArMTA2LDcgQEAKICMgVklOVEYgZGF0YSBmb3IgdmVuZG9yIGltYWdlCiBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKICAgICB2ZW5kb3JfY29tcGF0aWJpbGl0eV9tYXRyaXgueG1sIFwKKyAgICB2ZW5kb3JfbWFuaWZlc3QueG1sIFwKIAogIyBCYXNlIG1vZHVsZXMgYW5kIHNldHRpbmdzIGZvciB0aGUgZGVidWcgcmFtZGlzaywgd2hpY2ggaXMgdGhlbiBwYWNrZWQKICMgaW50byBhIGJvb3QtZGVidWcuaW1nIGFuZCBhIHZlbmRvcl9ib290LWRlYnVnLmltZy4KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2J1aWxkX3ZhcmlhYmxlcy5tayBiL3RhcmdldC9wcm9kdWN0L2J1aWxkX3ZhcmlhYmxlcy5tawppbmRleCA5ZmM5ZmY5Li43NjYxZTA2IDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9idWlsZF92YXJpYWJsZXMubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYnVpbGRfdmFyaWFibGVzLm1rCkBAIC0yMiwzICsyMiw2IEBACiAKICMgVXNlIHRoZSBjb25maWd1cmVkIHJlbGVhc2Ugb2Ygc3FsaXRlCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldCwgbGlic3FsaXRlMywgcmVsZWFzZV9wYWNrYWdlX2xpYnNxbGl0ZTMsICQoUkVMRUFTRV9QQUNLQUdFX0xJQlNRTElURTMpKQorCisjIFVzZSB0aGUgY29uZmlndXJlZCBNZXNzYWdlUXVldWUgaW1wbGVtZW50YXRpb24KKyQoY2FsbCBzb29uZ19jb25maWdfc2V0LCBtZXNzYWdlcXVldWUsIHJlbGVhc2VfcGFja2FnZV9tZXNzYWdlcXVldWVfaW1wbGVtZW50YXRpb24sICQoUkVMRUFTRV9QQUNLQUdFX01FU1NBR0VRVUVVRV9JTVBMRU1FTlRBVElPTikpCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9kZWZhdWx0X2FydF9jb25maWcubWsgYi90YXJnZXQvcHJvZHVjdC9kZWZhdWx0X2FydF9jb25maWcubWsKaW5kZXggNjY4ZjA1NC4uODNkOTIxNSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZGVmYXVsdF9hcnRfY29uZmlnLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2RlZmF1bHRfYXJ0X2NvbmZpZy5tawpAQCAtNTEsNiArNTEsNyBAQAogICAgIGZyYW1ld29yay1taW51cy1hcGV4IFwKICAgICBmcmFtZXdvcmstZ3JhcGhpY3MgXAogICAgIGZyYW1ld29yay1sb2NhdGlvbiBcCisgICAgZnJhbWV3b3JrLWNvbm5lY3Rpdml0eS1iIFwKICAgICBleHQgXAogICAgIHRlbGVwaG9ueS1jb21tb24gXAogICAgIHZvaXAtY29tbW9uIFwKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvQW5kcm9pZC5icCBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvQW5kcm9pZC5icAppbmRleCBmODY3NzRiLi5jODFlNjZjIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9nZW5lcmljL0FuZHJvaWQuYnAKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwCkBAIC0zODUsNyArMzg1LDYgQEAKICAgICAgICAgImFuZHJvaWQuc29mdHdhcmUud2Vidmlldy5wcmVidWlsdC54bWwiLCAvLyBtZWRpYV9zeXN0ZW0KICAgICAgICAgImFuZHJvaWQuc29mdHdhcmUud2luZG93X21hZ25pZmljYXRpb24ucHJlYnVpbHQueG1sIiwgLy8gaGFuZGhlbGRfc3lzdGVtCiAgICAgICAgICJhbmRyb2lkLnN5c3RlbS5zdXNwZW5kLXNlcnZpY2UiLAotICAgICAgICAicHJlYnVpbHRfdmludGZfbWFuaWZlc3QiLAogICAgICAgICAiYXBleGQiLAogICAgICAgICAiYXBwb3BzIiwKICAgICAgICAgImFwcHJvdmVkLW9na2ktYnVpbGRzLnhtbCIsIC8vIGJhc2Vfc3lzdGVtCkBAIC01MzAsMTIgKzUyOSwxNCBAQAogICAgICAgICAic3RvcmFnZWQiLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAic3VyZmFjZWZsaW5nZXIiLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAic3ZjIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInN5c3RlbV9tYW5pZmVzdC54bWwiLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAidGFza19wcm9maWxlcy5qc29uIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgInRjIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgInRlbGVjb20iLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAidG9tYnN0b25lZCIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICJ0cmFjZWQiLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAidHJhY2VkX3Byb2JlcyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ0cmFkZWlubW9kZSIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICJ0dW5lMmZzIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgInVpYXV0b21hdG9yIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgInVpbnB1dCIsIC8vIGJhc2Vfc3lzdGVtCkBAIC01NjIsNiArNTYzLDExIEBACiAgICAgICAgICAgICAidHJhY2VfcmVkYWN0b3IiLCAvLyBiYXNlX3N5c3RlbSAoUkVMRUFTRV9QQUNLQUdFX1BST0ZJTElOR19NT0RVTEUpCiAgICAgICAgIF0sCiAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgIH0pICsgc2VsZWN0KHJlbGVhc2VfZmxhZygiUkVMRUFTRV9NRU1PUllfTUFOQUdFTUVOVF9EQUVNT04iKSwgeworICAgICAgICB0cnVlOiBbCisgICAgICAgICAgICAibW1fZGFlbW9uIiwgLy8gYmFzZV9zeXN0ZW0gKFJFTEVBU0VfTUVNT1JZX01BTkFHRU1FTlRfREFFTU9OKQorICAgICAgICBdLAorICAgICAgICBkZWZhdWx0OiBbXSwKICAgICB9KSArIHNlbGVjdChwcm9kdWN0X3ZhcmlhYmxlKCJkZWJ1Z2dhYmxlIiksIHsKICAgICAgICAgdHJ1ZTogWwogICAgICAgICAgICAgImFkZXZpY2VfZmluZ2VycHJpbnQiLApAQCAtNjk1LDYgKzcwMSw3IEBACiAgICAgICAgICAgICAgICAgImZyYW1ld29yay1ncmFwaGljcyIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICAgICAgICAgImZyYW1ld29yay1sb2NhdGlvbiIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICAgICAgICAgImZyYW1ld29yay1taW51cy1hcGV4LWluc3RhbGwtZGVwZW5kZW5jaWVzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiZnJhbWV3b3JrLWNvbm5lY3Rpdml0eS1iIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgICAgICAgICAiZnJhbWV3b3JrX2NvbXBhdGliaWxpdHlfbWF0cml4LmRldmljZS54bWwiLAogICAgICAgICAgICAgICAgICJnZW5lcmljX3N5c3RlbV9mb250cyIsIC8vIG9rCiAgICAgICAgICAgICAgICAgImh3c2VydmljZW1hbmFnZXJfY29tcGF0X3N5bWxpbmtfbW9kdWxlIiwgLy8gYmFzZV9zeXN0ZW0KQEAgLTc4NSw2ICs3OTIsNyBAQAogICAgICAgICAgICAgICAgICJsaWJiaW5kZXJfbmRrIiwKICAgICAgICAgICAgICAgICAibGliYmluZGVyX3JwY191bnN0YWJsZSIsCiAgICAgICAgICAgICAgICAgImxpYmNhbWVyYTJuZGsiLAorICAgICAgICAgICAgICAgICJsaWJjZ3JvdXByYyIsIC8vIGxsbmRrIGxpYnJhcnkKICAgICAgICAgICAgICAgICAibGliY2xhbmdfcnQuYXNhbiIsCiAgICAgICAgICAgICAgICAgImxpYmNvbXBpbGVyX3J0IiwKICAgICAgICAgICAgICAgICAibGliY3V0aWxzIiwgLy8gdXNlZCBieSBtYW55IGxpYnMKQEAgLTg2MSwxMSArODY5LDMgQEAKICAgICAgICAgfSwKICAgICB9LAogfQotCi1wcmVidWlsdF9ldGMgewotICAgIG5hbWU6ICJwcmVidWlsdF92aW50Zl9tYW5pZmVzdCIsCi0gICAgc3JjOiAibWFuaWZlc3QueG1sIiwKLSAgICBmaWxlbmFtZTogIm1hbmlmZXN0LnhtbCIsCi0gICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAidmludGYiLAotICAgIG5vX2Z1bGxfaW5zdGFsbDogdHJ1ZSwKLX0KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvbWFuaWZlc3QueG1sIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9tYW5pZmVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZjJjMGQuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9tYW5pZmVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08IS0tCi0gICAgSW5wdXQ6Ci0gICAgICAgIHN5c3RlbS9saWJoaWRsL3ZpbnRmZGF0YS9tYW5pZmVzdC54bWwKLS0tPgotPG1hbmlmZXN0IHZlcnNpb249IjguMCIgdHlwZT0iZnJhbWV3b3JrIj4KLSAgICA8aGFsIGZvcm1hdD0iaGlkbCIgbWF4LWxldmVsPSI2Ij4KLSAgICAgICAgPG5hbWU+YW5kcm9pZC5mcmFtZXdvcmtzLmRpc3BsYXlzZXJ2aWNlPC9uYW1lPgotICAgICAgICA8dHJhbnNwb3J0Pmh3YmluZGVyPC90cmFuc3BvcnQ+Ci0gICAgICAgIDxmcW5hbWU+QDEuMDo6SURpc3BsYXlTZXJ2aWNlL2RlZmF1bHQ8L2ZxbmFtZT4KLSAgICA8L2hhbD4KLSAgICA8aGFsIGZvcm1hdD0iaGlkbCIgbWF4LWxldmVsPSI1Ij4KLSAgICAgICAgPG5hbWU+YW5kcm9pZC5mcmFtZXdvcmtzLnNjaGVkdWxlcnNlcnZpY2U8L25hbWU+Ci0gICAgICAgIDx0cmFuc3BvcnQ+aHdiaW5kZXI8L3RyYW5zcG9ydD4KLSAgICAgICAgPGZxbmFtZT5AMS4wOjpJU2NoZWR1bGluZ1BvbGljeVNlcnZpY2UvZGVmYXVsdDwvZnFuYW1lPgotICAgIDwvaGFsPgotICAgIDxoYWwgZm9ybWF0PSJhaWRsIj4KLSAgICAgICAgPG5hbWU+YW5kcm9pZC5mcmFtZXdvcmtzLnNlbnNvcnNlcnZpY2U8L25hbWU+Ci0gICAgICAgIDxmcW5hbWU+SVNlbnNvck1hbmFnZXIvZGVmYXVsdDwvZnFuYW1lPgotICAgIDwvaGFsPgotICAgIDxoYWwgZm9ybWF0PSJoaWRsIiBtYXgtbGV2ZWw9IjgiPgotICAgICAgICA8bmFtZT5hbmRyb2lkLmZyYW1ld29ya3Muc2Vuc29yc2VydmljZTwvbmFtZT4KLSAgICAgICAgPHRyYW5zcG9ydD5od2JpbmRlcjwvdHJhbnNwb3J0PgotICAgICAgICA8ZnFuYW1lPkAxLjA6OklTZW5zb3JNYW5hZ2VyL2RlZmF1bHQ8L2ZxbmFtZT4KLSAgICA8L2hhbD4KLSAgICA8aGFsIGZvcm1hdD0iaGlkbCIgbWF4LWxldmVsPSI4Ij4KLSAgICAgICAgPG5hbWU+YW5kcm9pZC5oaWRsLm1lbW9yeTwvbmFtZT4KLSAgICAgICAgPHRyYW5zcG9ydCBhcmNoPSIzMis2NCI+cGFzc3Rocm91Z2g8L3RyYW5zcG9ydD4KLSAgICAgICAgPGZxbmFtZT5AMS4wOjpJTWFwcGVyL2FzaG1lbTwvZnFuYW1lPgotICAgIDwvaGFsPgotICAgIDxoYWwgZm9ybWF0PSJoaWRsIiBtYXgtbGV2ZWw9IjciPgotICAgICAgICA8bmFtZT5hbmRyb2lkLnN5c3RlbS5uZXQubmV0ZDwvbmFtZT4KLSAgICAgICAgPHRyYW5zcG9ydD5od2JpbmRlcjwvdHJhbnNwb3J0PgotICAgICAgICA8ZnFuYW1lPkAxLjE6OklOZXRkL2RlZmF1bHQ8L2ZxbmFtZT4KLSAgICA8L2hhbD4KLSAgICA8aGFsIGZvcm1hdD0iaGlkbCIgbWF4LWxldmVsPSI3Ij4KLSAgICAgICAgPG5hbWU+YW5kcm9pZC5zeXN0ZW0ud2lmaS5rZXlzdG9yZTwvbmFtZT4KLSAgICAgICAgPHRyYW5zcG9ydD5od2JpbmRlcjwvdHJhbnNwb3J0PgotICAgICAgICA8ZnFuYW1lPkAxLjA6OklLZXlzdG9yZS9kZWZhdWx0PC9mcW5hbWU+Ci0gICAgPC9oYWw+Ci0gICAgPGhhbCBmb3JtYXQ9Im5hdGl2ZSI+Ci0gICAgICAgIDxuYW1lPm5ldHV0aWxzLXdyYXBwZXI8L25hbWU+Ci0gICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KLSAgICA8L2hhbD4KLSAgICA8c3lzdGVtLXNkaz4KLSAgICAgICAgPHZlcnNpb24+Mjk8L3ZlcnNpb24+Ci0gICAgICAgIDx2ZXJzaW9uPjMwPC92ZXJzaW9uPgotICAgICAgICA8dmVyc2lvbj4zMTwvdmVyc2lvbj4KLSAgICAgICAgPHZlcnNpb24+MzI8L3ZlcnNpb24+Ci0gICAgICAgIDx2ZXJzaW9uPjMzPC92ZXJzaW9uPgotICAgICAgICA8dmVyc2lvbj4zNDwvdmVyc2lvbj4KLSAgICAgICAgPHZlcnNpb24+MzU8L3ZlcnNpb24+Ci0gICAgICAgIDx2ZXJzaW9uPlZhbmlsbGFJY2VDcmVhbTwvdmVyc2lvbj4KLSAgICA8L3N5c3RlbS1zZGs+Ci08L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpY19yYW1kaXNrLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpY19yYW1kaXNrLm1rCmluZGV4IGViYWM2MmYuLjM4OGIxODAgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWNfcmFtZGlzay5taworKysgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljX3JhbWRpc2subWsKQEAgLTM1LDggKzM1LDYgQEAKIF9teV9wYXRocyA6PSBcCiAgICAgJChUQVJHRVRfQ09QWV9PVVRfUkFNRElTSykvIFwKICAgICAkKFRBUkdFVF9DT1BZX09VVF9ERUJVR19SQU1ESVNLKS8gXAotICAgIHN5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8vdHpfdmVyc2lvbiBcCi0gICAgc3lzdGVtL3Vzci9zaGFyZS96b25laW5mby90emRhdGEgXAogICAgICQoVEFSR0VUX0NPUFlfT1VUX1JFQ09WRVJZKS9yb290L2ZpcnN0X3N0YWdlX3JhbWRpc2svc3lzdGVtIFwKIAogCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9BbmRyb2lkLmJwIGIvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQW5kcm9pZC5icAppbmRleCA2OWQxOWEzLi5mZmJlYzA2IDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9BbmRyb2lkLmJwCisrKyBiL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L0FuZHJvaWQuYnAKQEAgLTQwLDQgKzQwLDUgQEAKIAogYWRiX2tleXMgewogICAgIG5hbWU6ICJhZGJfa2V5cyIsCisgICAgcHJvZHVjdF9zcGVjaWZpYzogdHJ1ZSwKIH0KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL2NvbXByZXNzaW9uLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvdmlydHVhbF9hYl9vdGEvY29tcHJlc3Npb24ubWsKaW5kZXggZGMxZWUzZS4uZTc3YzM2ZiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvdmlydHVhbF9hYl9vdGEvY29tcHJlc3Npb24ubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvdmlydHVhbF9hYl9vdGEvY29tcHJlc3Npb24ubWsKQEAgLTE4LDkgKzE4LDEyIEBACiAKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5jb21wcmVzc2lvbi5lbmFibGVkPXRydWUKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi51c2Vyc3BhY2Uuc25hcHNob3RzLmVuYWJsZWQ9dHJ1ZQotUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmlvX3VyaW5nLmVuYWJsZWQ9dHJ1ZQogUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmJhdGNoX3dyaXRlcz10cnVlCiAKKyMgT3B0aW9uYWwgYXNzaWdubWVudC4gT24gbG93IG1lbW9yeSBkZXZpY2VzLCBkaXNhYmxpbmcgaW9fdXJpbmcgY2FuIHJlbGlldmUgY3B1IGFuZCBtZW1vcnkKKyMgcHJlc3N1cmUgZHVyaW5nIGFuIE9UQS4KK1BST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5pb191cmluZy5lbmFibGVkPz10cnVlCisKICMgRW5hYmxpbmcgdGhpcyBwcm9wZXJ0eSwgd2lsbCBpbXByb3ZlIE9UQSBpbnN0YWxsIHRpbWUKICMgYnV0IHdpbGwgdXNlIGFuIGFkZGl0aW9uYWwgQ1BVIGNvcmUKICMgUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmNvbXByZXNzaW9uLnRocmVhZHM9dHJ1ZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvdmlydHVhbF9hYl9vdGEvdmFiY19mZWF0dXJlcy5tayBiL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL3ZhYmNfZmVhdHVyZXMubWsKaW5kZXggZTI3NDVhMS4uZDA5MjY5OSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvdmlydHVhbF9hYl9vdGEvdmFiY19mZWF0dXJlcy5taworKysgYi90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS92YWJjX2ZlYXR1cmVzLm1rCkBAIC0zMSwxNCArMzEsMTUgQEAKIAogUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmNvbXByZXNzaW9uLmVuYWJsZWQ9dHJ1ZQogUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLnVzZXJzcGFjZS5zbmFwc2hvdHMuZW5hYmxlZD10cnVlCi1QUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuaW9fdXJpbmcuZW5hYmxlZD10cnVlCi1QUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuY29tcHJlc3Npb24ueG9yLmVuYWJsZWQ9dHJ1ZQogUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmJhdGNoX3dyaXRlcz10cnVlCisKKyMgT3B0aW9uYWwgYXNzaWdubWVudHMsIGxvdyBtZW1vcnkgZGV2aWNlcyBtYXkgYmVuZWZpdCBmcm9tIG92ZXJyaWRpbmcgdGhlc2UuCitQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuaW9fdXJpbmcuZW5hYmxlZD89dHJ1ZQorUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmNvbXByZXNzaW9uLnhvci5lbmFibGVkPz10cnVlCisKICMgTG93IG1lbW9yeSBkZXZpY2UgY29uZmlndXJhdGlvbnMuIElmIG1lbW9yeSB1c2FnZSBhbmQgY3B1IHV0aWxpemF0aW9uIGlzCiAjIGEgYm90dGxlbmVjayBkdXJpbmcgT1RBLCB0aGUgYmVsb3cgY29uZmlndXJhdGlvbnMgY2FuIGJlIGFkZGVkIHRvIGEKLSMgZGV2aWNlJ3MgLm1rIGZpbGUgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IgbG93IG1lbSBkZXZpY2VzLiBEaXNhYmxpbmcKLSMgcm8udmlydHVhbF9hYi5jb21wcmVzc2lvbi54b3IuZW5hYmxlZCBhbmQgcm8udmlydHVhbF9hYi5pb191cmluZy5lbmFibGVkCi0jIGlzIGFsc28gcmVjb21tZW5kZWQKKyMgZGV2aWNlJ3MgLm1rIGZpbGUgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IgbG93IG1lbSBkZXZpY2VzLgogIwogIyBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIucmVhZF9haGVhZF9zaXplPTE2CiAjIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5vX2RpcmVjdC5lbmFibGVkPXRydWUKZGlmZiAtLWdpdCBhL3RlYW1zL0FuZHJvaWQuYnAgYi90ZWFtcy9BbmRyb2lkLmJwCmluZGV4IDRjNDAyODcuLjIxZjUyMjIgMTAwNjQ0Ci0tLSBhL3RlYW1zL0FuZHJvaWQuYnAKKysrIGIvdGVhbXMvQW5kcm9pZC5icApAQCAtMTMsNiArMTMsOSBAQAogLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKKy8vIERPTidUIEFERCBORVcgUlVMRVMgSEVSRS4gRm9yIG1vcmUgZGV0YWlscyByZWZlciB0bworLy8gZ28vbmV3LWFuZHJvaWQtb3duZXJzaGlwLW1vZGVsCisKIHBhY2thZ2UgewogICAgIGRlZmF1bHRfYXBwbGljYWJsZV9saWNlbnNlczogWyJBbmRyb2lkLUFwYWNoZS0yLjAiXSwKIH0KQEAgLTQ0NzUsMyArNDQ3OCwxMyBAQAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzYzMDMyOTg3MDM5NDk4MjQKICAgICB0cmVuZHlfdGVhbV9pZDogIjYzMDMyOTg3MDM5NDk4MjQiLAogfQorCit0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fZGVza3RvcF9zdGF0cyIsCisKKyAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81NDQwNzY0MTE0MjA2NzIwCisgICAgdHJlbmR5X3RlYW1faWQ6ICI1NDQwNzY0MTE0MjA2NzIwIiwKK30KKworLy8gRE9OJ1QgQUREIE5FVyBSVUxFUyBIRVJFLiBGb3IgbW9yZSBkZXRhaWxzIHJlZmVyIHRvCisvLyBnby9uZXctYW5kcm9pZC1vd25lcnNoaXAtbW9kZWwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAKaW5kZXggZjRkZDEwMy4uNWUzZWIxMiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAKQEAgLTY4LDYgKzY4LDE0IEBACiAgICAgXSwKIH0KIAorYWNvbmZpZ192YWx1ZXMgeworICAgIG5hbWU6ICJhY29uZmlnLnRlc3QuZmxhZy5zZWNvbmRfdmFsdWVzIiwKKyAgICBwYWNrYWdlOiAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IiwKKyAgICBzcmNzOiBbCisgICAgICAgICJ0ZXN0cy90aGlyZC52YWx1ZXMiLAorICAgIF0sCit9CisKIGFjb25maWdfdmFsdWVfc2V0IHsKICAgICBuYW1lOiAiYWNvbmZpZy50ZXN0LmZsYWcudmFsdWVfc2V0IiwKICAgICB2YWx1ZXM6IFsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMKaW5kZXggNDdkNDA0Mi4uYmZkZjFhNyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMKQEAgLTUwMSw3ICs1MDEsNyBAQAogICAgICAgICAgICAgbW9kaWZpZWRfcGFyc2VkX2ZsYWdzLmludG9faXRlcigpLAogICAgICAgICAgICAgbW9kZSwKICAgICAgICAgICAgIGZsYWdfaWRzLAotICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICB0cnVlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKICAgICAgICAgbGV0IGV4cGVjdF9mbGFnc19jb250ZW50ID0gRVhQRUNURURfRkxBR19DT01NT05fQ09OVEVOVC50b19zdHJpbmcoKQpAQCAtNTEzLDYgKzUxMyw3IEBACiAgICAgICAgIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0OwogICAgICAgICAvLyBUT0RPKGIvMzAzNzczMDU1KTogUmVtb3ZlIHRoZSBhbm5vdGF0aW9uIGFmdGVyIGFjY2VzcyBpc3N1ZSBpcyByZXNvbHZlZC4KICAgICAgICAgaW1wb3J0IGFuZHJvaWQuY29tcGF0LmFubm90YXRpb24uVW5zdXBwb3J0ZWRBcHBVc2FnZTsKKyAgICAgICAgaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogICAgICAgICBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWc7CiAgICAgICAgIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRldmljZUNvbmZpZy5Qcm9wZXJ0aWVzOwogICAgICAgICBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUludGVybmFsUmVhZGVyOwpAQCAtNTQ0LDYgKzU0NSw3IEBACiAgICAgICAgICAgICAgICAgaXNDYWNoZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gRGV2aWNlQ29uZmlnLmdldFByb3BlcnRpZXMoImFjb25maWdfdGVzdCIpOwogICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3ID0KQEAgLTU2MSwxMSArNTYzLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBlCiAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBmb3IgaXNvbGF0ZWQgcHJvY2VzcyBjYXNlLCBza2lwIGxvYWRpbmcgZmxhZyB2YWx1ZSBmcm9tIHRoZSBzdG9yYWdlLCB1c2UgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFjb25maWdfdGVzdF9pc19jYWNoZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwcml2YXRlIHZvaWQgbG9hZF9vdmVycmlkZXNfb3RoZXJfbmFtZXNwYWNlKCkgeworICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygib3RoZXJfbmFtZXNwYWNlIik7CiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0KQEAgLTU3OSw2ICs1ODYsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgImZsYWcgZGVjbGFyYXRpb24uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGUKICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZvciBpc29sYXRlZCBwcm9jZXNzIGNhc2UsIHNraXAgbG9hZGluZyBmbGFnIHZhbHVlIGZyb20gdGhlIHN0b3JhZ2UsIHVzZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgb3RoZXJfbmFtZXNwYWNlX2lzX2NhY2hlZCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC03NjAsNiArNzcxLDcgQEAKIAogICAgICAgICBsZXQgZXhwZWN0X2ZlYXR1cmVfZmxhZ3NfaW1wbF9jb250ZW50ID0gciMiCiAgICAgICAgIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0OworICAgICAgICBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiAgICAgICAgIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRldmljZUNvbmZpZzsKICAgICAgICAgaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnLlByb3BlcnRpZXM7CiAgICAgICAgIC8qKiBAaGlkZSAqLwpAQCAtNzcwLDYgKzc4Miw3IEBACiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGVuYWJsZWRSb0V4cG9ydGVkID0gZmFsc2U7CiAKICAgICAgICAgICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKSB7CisgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IERldmljZUNvbmZpZy5nZXRQcm9wZXJ0aWVzKCJhY29uZmlnX3Rlc3QiKTsKICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSd0V4cG9ydGVkID0KQEAgLTc4Nyw2ICs4MDAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgImZsYWcgZGVjbGFyYXRpb24uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGUKICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZvciBpc29sYXRlZCBwcm9jZXNzIGNhc2UsIHNraXAgbG9hZGluZyBmbGFnIHZhbHVlIGZyb20gdGhlIHN0b3JhZ2UsIHVzZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCA9IHRydWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vcnVzdC5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9ydXN0LnJzCmluZGV4IGQzMThiOTYuLjU2OWEzNGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9ydXN0LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9ydXN0LnJzCkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9rKGZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoZm9ybWF0ISgiZmFpbGVkIHRvIGZsYWcgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pCkBAIC0zMDksNyArMzA5LDcgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBFcnIoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IHtlcnJ9Iik7Ci0gICAgICAgICAgICAgICAgcGFuaWMhKCJmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiB7ZXJyfSIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0zNDQsNyArMzQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9rKGZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoZm9ybWF0ISgiZmFpbGVkIHRvIGZsYWcgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pCkBAIC0zNTYsNyArMzU2LDcgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBFcnIoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IHtlcnJ9Iik7Ci0gICAgICAgICAgICAgICAgcGFuaWMhKCJmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiB7ZXJyfSIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0zOTEsNyArMzkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9rKGZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoZm9ybWF0ISgiZmFpbGVkIHRvIGZsYWcgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pCkBAIC00MDMsNyArNDAzLDcgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBFcnIoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IHtlcnJ9Iik7Ci0gICAgICAgICAgICAgICAgcGFuaWMhKCJmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiB7ZXJyfSIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC00MzksNyArNDM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9rKHRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihmb3JtYXQhKCJmYWlsZWQgdG8gZmxhZyBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSkKQEAgLTQ1MSw3ICs0NTEsNyBAQAogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIEVycihlcnIpID0+IHsKICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgImFjb25maWdfcnVzdF9jb2RlZ2VuOiBlcnJvcjoge2Vycn0iKTsKLSAgICAgICAgICAgICAgICBwYW5pYyEoImZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWU6IHtlcnJ9Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb21tYW5kcy5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29tbWFuZHMucnMKaW5kZXggNDk2ODc2ZS4uMGFkM2Q5NyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb21tYW5kcy5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvbW1hbmRzLnJzCkBAIC0xNyw3ICsxNyw3IEBACiB1c2UgYW55aG93Ojp7YmFpbCwgZW5zdXJlLCBDb250ZXh0LCBSZXN1bHR9OwogdXNlIGl0ZXJ0b29sczo6SXRlcnRvb2xzOwogdXNlIHByb3RvYnVmOjpNZXNzYWdlOwotdXNlIHN0ZDo6Y29sbGVjdGlvbnM6OntCVHJlZU1hcCwgSGFzaE1hcH07Cit1c2Ugc3RkOjpjb2xsZWN0aW9uczo6SGFzaE1hcDsKIHVzZSBzdGQ6Omhhc2g6Okhhc2hlcjsKIHVzZSBzdGQ6OmlvOjpSZWFkOwogdXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsKQEAgLTQyNSwyMyArNDI1LDM0IEBACiAKICNbYWxsb3coZGVhZF9jb2RlKV0gLy8gVE9ETzogYi8zMTYzNTc2ODYgLSBVc2UgZmluZ2VycHJpbnQgaW4gY29kZWdlbiB0bwogICAgICAgICAgICAgICAgICAgICAvLyBwcm90ZWN0IGhhcmRjb2RlZCBvZmZzZXQgcmVhZHMuCi1wdWIgZm4gY29tcHV0ZV9mbGFnX29mZnNldHNfZmluZ2VycHJpbnQoZmxhZ3NfbWFwOiAmSGFzaE1hcDxTdHJpbmcsIHUxNj4pIC0+IFJlc3VsdDx1NjQ+IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlcyBhIGZpbmdlcnByaW50IG9mIHRoZSBmbGFnIG5hbWVzICh3aGljaCByZXF1aXJlcyBzb3J0aW5nIHRoZSB2ZWN0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyBGaW5nZXJwcmludCBpcyB1c2VkIGJ5IGJvdGggY29kZWdlbiBhbmQgc3RvcmFnZSBmaWxlcy4KK3B1YiBmbiBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KGZsYWdfbmFtZXM6ICZtdXQgVmVjPFN0cmluZz4pIC0+IFJlc3VsdDx1NjQ+IHsKKyAgICBmbGFnX25hbWVzLnNvcnQoKTsKKwogICAgIGxldCBtdXQgaGFzaGVyID0gU2lwSGFzaGVyMTM6Om5ldygpOwotCi0gICAgLy8gTmVlZCB0byBzb3J0IHRvIGVuc3VyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgaGFzaGVyIGluIHRoZSBzYW1lIG9yZGVyCi0gICAgLy8gZWFjaCBydW4uCi0gICAgbGV0IHNvcnRlZF9tYXA6IEJUcmVlTWFwPCZTdHJpbmcsICZ1MTY+ID0gZmxhZ3NfbWFwLml0ZXIoKS5jb2xsZWN0KCk7Ci0KLSAgICBmb3IgKGZsYWcsIG9mZnNldCkgaW4gc29ydGVkX21hcCB7Ci0gICAgICAgIC8vIFNlZSBodHRwczovL2RvY3MucnMvc2lwaGFzaGVyL2xhdGVzdC9zaXBoYXNoZXIvI25vdGUgZm9yIHVzZSBvZiB3cml0ZQotICAgICAgICAvLyBvdmVyIHdyaXRlX2kxNi4gU2ltaWxhcmx5LCB1c2UgdG9fYmVfYnl0ZXMgcmF0aGVyIHRoYW4gdG9fbmVfYnl0ZXMgdG8KLSAgICAgICAgLy8gZW5zdXJlIGNvbnNpc3RlbmN5LgorICAgIGZvciBmbGFnIGluIGZsYWdfbmFtZXMgewogICAgICAgICBoYXNoZXIud3JpdGUoZmxhZy5hc19ieXRlcygpKTsKLSAgICAgICAgaGFzaGVyLndyaXRlKCZvZmZzZXQudG9fYmVfYnl0ZXMoKSk7CiAgICAgfQogICAgIE9rKGhhc2hlci5maW5pc2goKSkKIH0KIAorI1thbGxvdyhkZWFkX2NvZGUpXSAvLyBUT0RPOiBiLzMxNjM1NzY4NiAtIFVzZSBmaW5nZXJwcmludCBpbiBjb2RlZ2VuIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIHByb3RlY3QgaGFyZGNvZGVkIG9mZnNldCByZWFkcy4KKyAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydHMgUHJvdG9QYXJzZWRGbGFncyBpbnRvIGEgdmVjdG9yIG9mIHN0cmluZ3MgY29udGFpbmluZyBhbGwgb2YgdGhlIGZsYWcKKyAgICAgICAgICAgICAgICAgICAgLy8gbmFtZXMuIEhlbHBlciBmbiBmb3IgY3JlYXRpbmcgZmluZ2VycHJpbnQgZm9yIGNvZGVnZW4gZmlsZXMuIEZsYWdzIG11c3QgYWxsCisgICAgICAgICAgICAgICAgICAgIC8vIGJlbG9uZyB0byB0aGUgc2FtZSBwYWNrYWdlLgorZm4gZXh0cmFjdF9mbGFnX25hbWVzKGZsYWdzOiBQcm90b1BhcnNlZEZsYWdzKSAtPiBSZXN1bHQ8VmVjPFN0cmluZz4+IHsKKyAgICBsZXQgc2VwYXJhdGVkX2ZsYWdzOiBWZWM8UHJvdG9QYXJzZWRGbGFnPiA9IGZsYWdzLnBhcnNlZF9mbGFnLmludG9faXRlcigpLmNvbGxlY3Q6OjxWZWM8Xz4+KCk7CisKKyAgICAvLyBBbGwgZmxhZ3MgbXVzdCBiZWxvbmcgdG8gdGhlIHNhbWUgcGFja2FnZSBhcyB0aGUgZmluZ2VycHJpbnQgaXMgcGVyLXBhY2thZ2UuCisgICAgbGV0IFNvbWUoX3BhY2thZ2UpID0gZmluZF91bmlxdWVfcGFja2FnZSgmc2VwYXJhdGVkX2ZsYWdzKSBlbHNlIHsKKyAgICAgICAgYmFpbCEoIk5vIHBhcnNlZCBmbGFncywgb3IgdGhlIHBhcnNlZCBmbGFncyB1c2UgZGlmZmVyZW50IHBhY2thZ2VzLiIpOworICAgIH07CisKKyAgICBPayhzZXBhcmF0ZWRfZmxhZ3MuaW50b19pdGVyKCkubWFwKHxmbGFnfCBmbGFnLm5hbWUudW53cmFwKCkpLmNvbGxlY3Q6OjxWZWM8Xz4+KCkpCit9CisKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7CkBAIC00NTAsMTYgKzQ2MSw1MSBAQAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X29mZnNldF9maW5nZXJwcmludCgpIHsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFncyA9IGNyYXRlOjp0ZXN0OjpwYXJzZV90ZXN0X2ZsYWdzKCk7Ci0gICAgICAgIGxldCBwYWNrYWdlID0gZmluZF91bmlxdWVfcGFja2FnZSgmcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnKS51bndyYXAoKS50b19zdHJpbmcoKTsKLSAgICAgICAgbGV0IGZsYWdfaWRzID0gYXNzaWduX2ZsYWdfaWRzKCZwYWNrYWdlLCBwYXJzZWRfZmxhZ3MucGFyc2VkX2ZsYWcuaXRlcigpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX2ZpbmdlcnByaW50ID0gMTA3MDk4OTI0ODEwMDIyNTIxMzJ1NjQ7CisgICAgICAgIGxldCBleHBlY3RlZF9maW5nZXJwcmludDogdTY0ID0gNTgwMTE0NDc4NDYxODIyMTY2ODsKIAotICAgICAgICBsZXQgaGFzaF9yZXN1bHQgPSBjb21wdXRlX2ZsYWdfb2Zmc2V0c19maW5nZXJwcmludCgmZmxhZ19pZHMpOworICAgICAgICBsZXQgbXV0IGV4dHJhY3RlZF9mbGFncyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhwYXJzZWRfZmxhZ3MpLnVud3JhcCgpOworICAgICAgICBsZXQgaGFzaF9yZXN1bHQgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZXh0cmFjdGVkX2ZsYWdzKTsKIAogICAgICAgICBhc3NlcnRfZXEhKGhhc2hfcmVzdWx0LnVud3JhcCgpLCBleHBlY3RlZF9maW5nZXJwcmludCk7CiAgICAgfQogCiAgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfb2Zmc2V0X2ZpbmdlcnByaW50X21hdGNoZXNfZnJvbV9wYWNrYWdlKCkgeworICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzOiBQcm90b1BhcnNlZEZsYWdzID0gY3JhdGU6OnRlc3Q6OnBhcnNlX3Rlc3RfZmxhZ3MoKTsKKworICAgICAgICAvLyBBbGwgdGVzdCBmbGFncyBhcmUgaW4gdGhlIHNhbWUgcGFja2FnZSwgc28gZmluZ2VycHJpbnQgZnJvbSBhbGwgb2YgdGhlbS4KKyAgICAgICAgbGV0IG11dCBleHRyYWN0ZWRfZmxhZ3MgPSBleHRyYWN0X2ZsYWdfbmFtZXMocGFyc2VkX2ZsYWdzLmNsb25lKCkpLnVud3JhcCgpOworICAgICAgICBsZXQgcmVzdWx0X2Zyb21fcGFyc2VkX2ZsYWdzID0gY29tcHV0ZV9mbGFnc19maW5nZXJwcmludCgmbXV0IGV4dHJhY3RlZF9mbGFncyk7CisKKyAgICAgICAgbGV0IG11dCBmbGFnX25hbWVzX3ZlYyA9IHBhcnNlZF9mbGFncworICAgICAgICAgICAgLnBhcnNlZF9mbGFnCisgICAgICAgICAgICAuY2xvbmUoKQorICAgICAgICAgICAgLmludG9faXRlcigpCisgICAgICAgICAgICAubWFwKHxmbGFnfCBmbGFnLm5hbWUudW53cmFwKCkpCisgICAgICAgICAgICAubWFwKFN0cmluZzo6ZnJvbSkKKyAgICAgICAgICAgIC5jb2xsZWN0Ojo8VmVjPF8+PigpOworICAgICAgICBsZXQgcmVzdWx0X2Zyb21fbmFtZXMgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZmxhZ19uYW1lc192ZWMpOworCisgICAgICAgIC8vIEFzc2VydCB0aGUgc2FtZSBoYXNoIGlzIGdlbmVyYXRlZCBmb3IgZWFjaCBjYXNlLgorICAgICAgICBhc3NlcnRfZXEhKHJlc3VsdF9mcm9tX3BhcnNlZF9mbGFncy51bndyYXAoKSwgcmVzdWx0X2Zyb21fbmFtZXMudW53cmFwKCkpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X29mZnNldF9maW5nZXJwcmludF9kaWZmZXJlbnRfcGFja2FnZXNfZG9lc19ub3RfbWF0Y2goKSB7CisgICAgICAgIC8vIFBhcnNlIGZsYWdzIGZyb20gdHdvIHBhY2thZ2VzLgorICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzOiBQcm90b1BhcnNlZEZsYWdzID0gY3JhdGU6OnRlc3Q6OnBhcnNlX3Rlc3RfZmxhZ3MoKTsKKyAgICAgICAgbGV0IHNlY29uZF9wYXJzZWRfZmxhZ3MgPSBjcmF0ZTo6dGVzdDo6cGFyc2Vfc2Vjb25kX3BhY2thZ2VfZmxhZ3MoKTsKKworICAgICAgICBsZXQgbXV0IGV4dHJhY3RlZF9mbGFncyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhwYXJzZWRfZmxhZ3MpLnVud3JhcCgpOworICAgICAgICBsZXQgcmVzdWx0X2Zyb21fcGFyc2VkX2ZsYWdzID0gY29tcHV0ZV9mbGFnc19maW5nZXJwcmludCgmbXV0IGV4dHJhY3RlZF9mbGFncykudW53cmFwKCk7CisgICAgICAgIGxldCBtdXQgc2Vjb25kX2V4dHJhY3RlZF9mbGFncyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhzZWNvbmRfcGFyc2VkX2ZsYWdzKS51bndyYXAoKTsKKyAgICAgICAgbGV0IHNlY29uZF9yZXN1bHQgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgc2Vjb25kX2V4dHJhY3RlZF9mbGFncykudW53cmFwKCk7CisKKyAgICAgICAgLy8gRGlmZmVyZW50IGZsYWdzIHNob3VsZCBoYXZlIGEgZGlmZmVyZW50IGZpbmdlcnByaW50LgorICAgICAgICBhc3NlcnRfbmUhKHJlc3VsdF9mcm9tX3BhcnNlZF9mbGFncywgc2Vjb25kX3Jlc3VsdCk7CisgICAgfQorCisgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfcGFyc2VfZmxhZ3MoKSB7CiAgICAgICAgIGxldCBwYXJzZWRfZmxhZ3MgPSBjcmF0ZTo6dGVzdDo6cGFyc2VfdGVzdF9mbGFncygpOyAvLyBjYWxscyBwYXJzZV9mbGFncwogICAgICAgICBhY29uZmlnX3Byb3Rvczo6cGFyc2VkX2ZsYWdzOjp2ZXJpZnlfZmllbGRzKCZwYXJzZWRfZmxhZ3MpLnVud3JhcCgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9tYWluLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9tYWluLnJzCmluZGV4IGVkYjRmZDMuLmUxODRlZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvbWFpbi5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL21haW4ucnMKQEAgLTUxLDggKzUxLDcgQEAKICAgICAgICAgLnN1YmNvbW1hbmQoCiAgICAgICAgICAgICBDb21tYW5kOjpuZXcoImNyZWF0ZS1jYWNoZSIpCiAgICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygicGFja2FnZSIpLmxvbmcoInBhY2thZ2UiKS5yZXF1aXJlZCh0cnVlKSkKLSAgICAgICAgICAgICAgICAvLyBUT0RPKGIvMzEyNzY5NzEwKTogTWFrZSB0aGlzIGFyZ3VtZW50IHJlcXVpcmVkLgotICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImNvbnRhaW5lciIpLmxvbmcoImNvbnRhaW5lciIpKQorICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImNvbnRhaW5lciIpLmxvbmcoImNvbnRhaW5lciIpLnJlcXVpcmVkKHRydWUpKQogICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImRlY2xhcmF0aW9ucyIpLmxvbmcoImRlY2xhcmF0aW9ucyIpLmFjdGlvbihBcmdBY3Rpb246OkFwcGVuZCkpCiAgICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygidmFsdWVzIikubG9uZygidmFsdWVzIikuYWN0aW9uKEFyZ0FjdGlvbjo6QXBwZW5kKSkKICAgICAgICAgICAgICAgICAuYXJnKApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfaW5mby5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX2luZm8ucnMKaW5kZXggMjUzMjYwOS4uNWQ1NjVlOCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfaW5mby5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ19pbmZvLnJzCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0X2Zyb21fc291cmNlKCk7CiAgICAgICAgIGFzc2VydCEoZmxhZ19pbmZvX2xpc3QuaXNfb2soKSk7CiAgICAgICAgIGxldCBleHBlY3RlZF9mbGFnX2luZm9fbGlzdCA9Ci0gICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKKyAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGFzc2VydF9lcSEoZmxhZ19pbmZvX2xpc3QudW53cmFwKCksIGV4cGVjdGVkX2ZsYWdfaW5mb19saXN0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ190YWJsZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3RhYmxlLnJzCmluZGV4IDYwNDZkN2UuLjg4NTZlYjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3RhYmxlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3RhYmxlLnJzCkBAIC0xNTcsNyArMTU3LDggQEAKICAgICBmbiB0ZXN0X3RhYmxlX2NvbnRlbnRzKCkgewogICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGVfZnJvbV9zb3VyY2UoKTsKICAgICAgICAgYXNzZXJ0IShmbGFnX3RhYmxlLmlzX29rKCkpOwotICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ190YWJsZSA9IGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7CisgICAgICAgIGxldCBleHBlY3RlZF9mbGFnX3RhYmxlID0KKyAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgYXNzZXJ0X2VxIShmbGFnX3RhYmxlLnVud3JhcCgpLCBleHBlY3RlZF9mbGFnX3RhYmxlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ192YWx1ZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3ZhbHVlLnJzCmluZGV4IDZhNjU1YjkuLjBkZDVhOWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3ZhbHVlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3ZhbHVlLnJzCkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3RfZnJvbV9zb3VyY2UoKTsKICAgICAgICAgYXNzZXJ0IShmbGFnX3ZhbHVlX2xpc3QuaXNfb2soKSk7CiAgICAgICAgIGxldCBleHBlY3RlZF9mbGFnX3ZhbHVlX2xpc3QgPQotICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGFzc2VydF9lcSEoZmxhZ192YWx1ZV9saXN0LnVud3JhcCgpLCBleHBlY3RlZF9mbGFnX3ZhbHVlX2xpc3QpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9tb2QucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvbW9kLnJzCmluZGV4IDllNWRhZDUuLmM3ZmQ1NWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9tb2QucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL21vZC5ycwpAQCAtMzIsNiArMzIsNyBAQAogcHViIHN0cnVjdCBGbGFnUGFja2FnZTwnYT4gewogICAgIHB1YiBwYWNrYWdlX25hbWU6ICYnYSBzdHIsCiAgICAgcHViIHBhY2thZ2VfaWQ6IHUzMiwKKyAgICBwdWIgZmluZ2VycHJpbnQ6IHU2NCwKICAgICBwdWIgZmxhZ19uYW1lczogSGFzaFNldDwmJ2Egc3RyPiwKICAgICBwdWIgYm9vbGVhbl9mbGFnczogVmVjPCYnYSBQcm90b1BhcnNlZEZsYWc+LAogICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYm9vbGVhbiBmbGFnIGluIHRoaXMgYWNvbmZpZyBwYWNrYWdlIGFtb25nIGFsbCBib29sZWFuCkBAIC00NCw2ICs0NSw3IEBACiAgICAgICAgIEZsYWdQYWNrYWdlIHsKICAgICAgICAgICAgIHBhY2thZ2VfbmFtZSwKICAgICAgICAgICAgIHBhY2thZ2VfaWQsCisgICAgICAgICAgICBmaW5nZXJwcmludDogMCwKICAgICAgICAgICAgIGZsYWdfbmFtZXM6IEhhc2hTZXQ6Om5ldygpLAogICAgICAgICAgICAgYm9vbGVhbl9mbGFnczogdmVjIVtdLAogICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogMCwKQEAgLTc5LDYgKzgxLDggQEAKICAgICBmb3IgcCBpbiBwYWNrYWdlcy5pdGVyX211dCgpIHsKICAgICAgICAgcC5ib29sZWFuX3N0YXJ0X2luZGV4ID0gYm9vbGVhbl9zdGFydF9pbmRleDsKICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleCArPSBwLmJvb2xlYW5fZmxhZ3MubGVuKCkgYXMgdTMyOworCisgICAgICAgIC8vIFRPRE86IGIvMzE2MzU3Njg2IC0gQ2FsY3VsYXRlIGZpbmdlcnByaW50IGFuZCBhZGQgdG8gcGFja2FnZS4KICAgICB9CiAKICAgICBwYWNrYWdlcwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL3BhY2thZ2VfdGFibGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvcGFja2FnZV90YWJsZS5ycwppbmRleCA1NjU1OWY4Li5lNDY2MDdiIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvcGFja2FnZV90YWJsZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvcGFja2FnZV90YWJsZS5ycwpAQCAtNDcsNiArNDcsNyBAQAogICAgICAgICBsZXQgbm9kZSA9IFBhY2thZ2VUYWJsZU5vZGUgewogICAgICAgICAgICAgcGFja2FnZV9uYW1lOiBTdHJpbmc6OmZyb20ocGFja2FnZS5wYWNrYWdlX25hbWUpLAogICAgICAgICAgICAgcGFja2FnZV9pZDogcGFja2FnZS5wYWNrYWdlX2lkLAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IHBhY2thZ2UuZmluZ2VycHJpbnQsCiAgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiBwYWNrYWdlLmJvb2xlYW5fc3RhcnRfaW5kZXgsCiAgICAgICAgICAgICBuZXh0X29mZnNldDogTm9uZSwKICAgICAgICAgfTsKQEAgLTEyNyw3ICsxMjgsOCBAQAogICAgIGZuIHRlc3RfdGFibGVfY29udGVudHMoKSB7CiAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZV9mcm9tX3NvdXJjZSgpOwogICAgICAgICBhc3NlcnQhKHBhY2thZ2VfdGFibGUuaXNfb2soKSk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX3RhYmxlID0gYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfdGFibGUgPQorICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfdGFibGUudW53cmFwKCksIGV4cGVjdGVkX3BhY2thZ2VfdGFibGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvdGVzdC5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvdGVzdC5ycwppbmRleCA3NDA5Y2RhLi5hMTliMzcyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3Rlc3QucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy90ZXN0LnJzCkBAIC0yOTUsNiArMjk1LDI0IEBACiAgICAgICAgIGFjb25maWdfcHJvdG9zOjpwYXJzZWRfZmxhZ3M6OnRyeV9mcm9tX2JpbmFyeV9wcm90bygmYnl0ZXMpLnVud3JhcCgpCiAgICAgfQogCisgICAgcHViIGZuIHBhcnNlX3NlY29uZF9wYWNrYWdlX2ZsYWdzKCkgLT4gUHJvdG9QYXJzZWRGbGFncyB7CisgICAgICAgIGxldCBieXRlcyA9IGNyYXRlOjpjb21tYW5kczo6cGFyc2VfZmxhZ3MoCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy5zZWNvbmRfdGVzdCIsCisgICAgICAgICAgICBTb21lKCJzeXN0ZW0iKSwKKyAgICAgICAgICAgIHZlYyFbSW5wdXQgeworICAgICAgICAgICAgICAgIHNvdXJjZTogInRlc3RzL3Rlc3Rfc2Vjb25kX3BhY2thZ2UuYWNvbmZpZyIudG9fc3RyaW5nKCksCisgICAgICAgICAgICAgICAgcmVhZGVyOiBCb3g6Om5ldyhpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvdGVzdF9zZWNvbmRfcGFja2FnZS5hY29uZmlnIikuYXNfc2xpY2UoKSksCisgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIHZlYyFbSW5wdXQgeworICAgICAgICAgICAgICAgIHNvdXJjZTogInRlc3RzL3RoaXJkLnZhbHVlcyIudG9fc3RyaW5nKCksCisgICAgICAgICAgICAgICAgcmVhZGVyOiBCb3g6Om5ldyhpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvdGhpcmQudmFsdWVzIikuYXNfc2xpY2UoKSksCisgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIGNyYXRlOjpjb21tYW5kczo6REVGQVVMVF9GTEFHX1BFUk1JU1NJT04sCisgICAgICAgICkKKyAgICAgICAgLnVud3JhcCgpOworICAgICAgICBhY29uZmlnX3Byb3Rvczo6cGFyc2VkX2ZsYWdzOjp0cnlfZnJvbV9iaW5hcnlfcHJvdG8oJmJ5dGVzKS51bndyYXAoKQorICAgIH0KKwogICAgIHB1YiBmbiBmaXJzdF9zaWduaWZpY2FudF9jb2RlX2RpZmYoYTogJnN0ciwgYjogJnN0cikgLT4gT3B0aW9uPFN0cmluZz4gewogICAgICAgICBsZXQgYSA9IGEubGluZXMoKS5tYXAofGxpbmV8IGxpbmUudHJpbV9zdGFydCgpKS5maWx0ZXIofGxpbmV8ICFsaW5lLmlzX2VtcHR5KCkpOwogICAgICAgICBsZXQgYiA9IGIubGluZXMoKS5tYXAofGxpbmV8IGxpbmUudHJpbV9zdGFydCgpKS5maWx0ZXIofGxpbmV8ICFsaW5lLmlzX2VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3NJbXBsLmphdmEudGVtcGxhdGUgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQppbmRleCAyNmQzMDY5Li5jYjUyMTUwIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQpAQCAtMSwxMSArMSwxMyBAQAogcGFja2FnZSB7cGFja2FnZV9uYW1lfTsKIHt7IC1pZiBub3QgaXNfdGVzdF9tb2RlIH19Cit7eyAtaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIH19CiB7eyBpZiBub3QgbGlicmFyeV9leHBvcnRlZC0gfX0KIC8vIFRPRE8oYi8zMDM3NzMwNTUpOiBSZW1vdmUgdGhlIGFubm90YXRpb24gYWZ0ZXIgYWNjZXNzIGlzc3VlIGlzIHJlc29sdmVkLgogaW1wb3J0IGFuZHJvaWQuY29tcGF0LmFubm90YXRpb24uVW5zdXBwb3J0ZWRBcHBVc2FnZTsKIHt7IC1lbmRpZiB9fQogCiB7eyAtaWYgcnVudGltZV9sb29rdXBfcmVxdWlyZWQgfX0KK2ltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRldmljZUNvbmZpZzsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRldmljZUNvbmZpZy5Qcm9wZXJ0aWVzOwogCkBAIC01Niw2ICs1OCw3IEBACiAKIHt7IGZvciBuYW1lc3BhY2Vfd2l0aF9mbGFncyBpbiBuYW1lc3BhY2VfZmxhZ3MgfX0KICAgICBwcml2YXRlIHZvaWQgbG9hZF9vdmVycmlkZXNfe25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0oKSBceworICAgICAgICBmaW5hbCBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSBcewogICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gRGV2aWNlQ29uZmlnLmdldFByb3BlcnRpZXMoIntuYW1lc3BhY2Vfd2l0aF9mbGFncy5uYW1lc3BhY2V9Iik7CiB7eyAtZm9yIGZsYWcgaW4gbmFtZXNwYWNlX3dpdGhfZmxhZ3MuZmxhZ3MgfX0KQEAgLTczLDYgKzc2LDEwIEBACiAgICAgICAgICAgICAgICAgKyAiZmxhZyBkZWNsYXJhdGlvbi4iLAogICAgICAgICAgICAgICAgIGUKICAgICAgICAgICAgICk7CisgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIFx7CisgICAgICAgICAgICAvLyBmb3IgaXNvbGF0ZWQgcHJvY2VzcyBjYXNlLCBza2lwIGxvYWRpbmcgZmxhZyB2YWx1ZSBmcm9tIHRoZSBzdG9yYWdlLCB1c2UgdGhlIGRlZmF1bHQKKyAgICAgICAgfSBmaW5hbGx5IFx7CisgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgIH0KICAgICAgICAge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gdHJ1ZTsKICAgICB9CkBAIC0xMTAsNiArMTE3LDc2IEBACiAgICAgfQoge3sgZW5kZm9yIH19CiB9CisKK3t7IGVsc2UgfX0geyMtIGVsc2UgZm9yIGFsbG93X2luc3RydW1lbnRhdGlvbiBpcyBub3QgZW5hYmxlZCAjfQore3sgaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQtIH19CisvLyBUT0RPKGIvMzAzNzczMDU1KTogUmVtb3ZlIHRoZSBhbm5vdGF0aW9uIGFmdGVyIGFjY2VzcyBpc3N1ZSBpcyByZXNvbHZlZC4KK2ltcG9ydCBhbmRyb2lkLmNvbXBhdC5hbm5vdGF0aW9uLlVuc3VwcG9ydGVkQXBwVXNhZ2U7Cit7eyAtZW5kaWYgfX0KKwore3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWc7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWcuUHJvcGVydGllczsKK3t7IC1lbmRpZiB9fQorLyoqIEBoaWRlICovCitwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBcewore3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19Cit7eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4ge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gZmFsc2U7Cit7eyAtZW5kZm9yLSB9fQorCit7eyBmb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19Cit7ey0gaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0gPSB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKK3t7IC1lbmRpZiB9fQore3sgLWVuZGZvciB9fQore3sgZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc197bmFtZXNwYWNlX3dpdGhfZmxhZ3MubmFtZXNwYWNlfSgpIFx7CisgICAgICAgIGZpbmFsIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgdHJ5IFx7CisgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygie25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0iKTsKK3t7IC1mb3IgZmxhZyBpbiBuYW1lc3BhY2Vfd2l0aF9mbGFncy5mbGFncyB9fQore3sgLWlmIGZsYWcuaXNfcmVhZF93cml0ZSB9fQorICAgICAgICAgICAge2ZsYWcubWV0aG9kX25hbWV9ID0KKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR197ZmxhZy5mbGFnX25hbWVfY29uc3RhbnRfc3VmZml4fSwge2ZsYWcuZGVmYXVsdF92YWx1ZX0pOwore3sgLWVuZGlmIH19Cit7eyAtZW5kZm9yIH19CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIFx7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgdmFsdWUgZnJvbSBuYW1lc3BhY2Uge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0gIgorICAgICAgICAgICAgICAgICsgImZyb20gRGV2aWNlQ29uZmlnLiBJdCBjb3VsZCBiZSB0aGF0IHRoZSBjb2RlIHVzaW5nIGZsYWcgIgorICAgICAgICAgICAgICAgICsgImV4ZWN1dGVkIGJlZm9yZSBTZXR0aW5nc1Byb3ZpZGVyIGluaXRpYWxpemF0aW9uLiBQbGVhc2UgdXNlICIKKyAgICAgICAgICAgICAgICArICJmaXhlZCByZWFkLW9ubHkgZmxhZyBieSBhZGRpbmcgaXNfZml4ZWRfcmVhZF9vbmx5OiB0cnVlIGluICIKKyAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCisgICAgICAgICAgICAgICAgZQorICAgICAgICAgICAgKTsKKyAgICAgICAgfSBmaW5hbGx5IFx7CisgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CisgICAgICAgIH0KKyAgICAgICAge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gdHJ1ZTsKK30KK3t7IGVuZGZvci0gfX0KK3t7IC1lbmRpZiB9fXsjLSBlbmQgb2YgcnVudGltZV9sb29rdXBfcmVxdWlyZWQgI30KK3t7IC1mb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CisgICAgQE92ZXJyaWRlCit7eyAtaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQgfX0KKyAgICBAY29tLmFuZHJvaWQuYWNvbmZpZy5hbm5vdGF0aW9ucy5BY29uZmlnRmxhZ0FjY2Vzc29yCisgICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKK3t7IC1lbmRpZiB9fQorICAgIHB1YmxpYyBib29sZWFuIHtmbGFnLm1ldGhvZF9uYW1lfSgpIFx7Cit7eyAtaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CisgICAgICAgIGlmICghe2ZsYWcuZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9X2lzX2NhY2hlZCkgXHsKKyAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX3tmbGFnLmRldmljZV9jb25maWdfbmFtZXNwYWNlfSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7ZmxhZy5tZXRob2RfbmFtZX07Cit7eyAtZWxzZSB9fQorICAgICAgICByZXR1cm4ge2ZsYWcuZGVmYXVsdF92YWx1ZX07Cit7eyAtZW5kaWYgfX0KKyAgICB9Cit7eyBlbmRmb3IgfX0KK30KK3t7IGVuZGlmfX0geyMtIGVuZGlmIGZvciBhbGxvd19pbnN0cnVtZW50YXRpb24gI30KIHt7IGVsc2UgfX0geyMtIEdlbmVyYXRlIG9ubHkgc3R1YiBpZiBpbiB0ZXN0IG1vZGUgI30KIC8qKiBAaGlkZSAqLwogcHVibGljIGZpbmFsIGNsYXNzIEZlYXR1cmVGbGFnc0ltcGwgaW1wbGVtZW50cyBGZWF0dXJlRmxhZ3MgXHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvY3BwX3NvdXJjZV9maWxlLnRlbXBsYXRlIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9jcHBfc291cmNlX2ZpbGUudGVtcGxhdGUKaW5kZXggZWFhZjg2Zi4uZGYzYjEwZCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9jcHBfc291cmNlX2ZpbGUudGVtcGxhdGUKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9jcHBfc291cmNlX2ZpbGUudGVtcGxhdGUKQEAgLTkyLDE3ICs5MiwyMSBAQAogICAgICAgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2U6OlN0b3JhZ2VGaWxlVHlwZTo6cGFja2FnZV9tYXApOwogICAgICAgICAgICAgaWYgKCFwYWNrYWdlX21hcF9maWxlLm9rKCkpIFx7CiAgICAgICAgICAgICAgICAgQUxPR0UoImVycm9yOiBmYWlsZWQgdG8gZ2V0IHBhY2thZ2UgbWFwIGZpbGU6ICVzIiwgcGFja2FnZV9tYXBfZmlsZS5lcnJvcigpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIGNvbnRleHQgPSBhY29uZmlnX3N0b3JhZ2U6OmdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgKICAgICAgICAgICAgICAgICAqKnBhY2thZ2VfbWFwX2ZpbGUsICJ7cGFja2FnZX0iKTsKICAgICAgICAgICAgIGlmICghY29udGV4dC5vaygpKSBcewogICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvcjogZmFpbGVkIHRvIGdldCBwYWNrYWdlIHJlYWQgY29udGV4dDogJXMiLCBjb250ZXh0LmVycm9yKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghKGNvbnRleHQtPnBhY2thZ2VfZXhpc3RzKSkgXHsKLSAgICAgICAgICAgICAgIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfID0gZmFsc2U7Ci0gICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIGNhY2hlIHBhY2thZ2UgYm9vbGVhbiBmbGFnIHN0YXJ0IGluZGV4CkBAIC0xMTYsNiArMTIwLDggQEAKICAgICAgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2U6OlN0b3JhZ2VGaWxlVHlwZTo6ZmxhZ192YWwpOwogICAgICAgICAgICAgaWYgKCFmbGFnX3ZhbHVlX2ZpbGUub2soKSkgXHsKICAgICAgICAgICAgICAgICBBTE9HRSgiZXJyb3I6IGZhaWxlZCB0byBnZXQgZmxhZyB2YWx1ZSBmaWxlOiAlcyIsIGZsYWdfdmFsdWVfZmlsZS5lcnJvcigpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBjYWNoZSBmbGFnIHZhbHVlIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvcnVzdC50ZW1wbGF0ZSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvcnVzdC50ZW1wbGF0ZQppbmRleCA2NDU2MzYwLi5kMDA3OWQ0IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL3J1c3QudGVtcGxhdGUKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9ydXN0LnRlbXBsYXRlCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IFx7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2Uge3BhY2thZ2V9Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPayh7ZmxhZy5kZWZhdWx0X3ZhbHVlfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihmb3JtYXQhKCJmYWlsZWQgdG8gZmxhZyBwYWNrYWdlIHtwYWNrYWdlfSIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSkKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBFcnIoZXJyKSA9PiBcewogICAgICAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAiYWNvbmZpZ19ydXN0X2NvZGVnZW46IGVycm9yOiBce2Vycn0iKTsKLSAgICAgICAgICAgICAgICBwYW5pYyEoImZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWU6IFx7ZXJyfSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBcewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3Rlc3RzL3Rlc3Rfc2Vjb25kX3BhY2thZ2UuYWNvbmZpZyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZXN0cy90ZXN0X3NlY29uZF9wYWNrYWdlLmFjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4YmM5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZXN0cy90ZXN0X3NlY29uZF9wYWNrYWdlLmFjb25maWcKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZTogImNvbS5hbmRyb2lkLmFjb25maWcuc2Vjb25kX3Rlc3QiCitjb250YWluZXI6ICJzeXN0ZW0iCisKK2ZsYWcgeworICAgIG5hbWU6ICJ0ZXN0aW5nX2ZsYWciCisgICAgbmFtZXNwYWNlOiAiYW5vdGhlcl9uYW1lc3BhY2UiCisgICAgZGVzY3JpcHRpb246ICJUaGlzIGlzIGEgZmxhZyBmb3IgdGVzdGluZy4iCisgICAgYnVnOiAiMTIzIgorfQorCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVzdHMvdGhpcmQudmFsdWVzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3Rlc3RzL3RoaXJkLnZhbHVlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU4MzJhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3Rlc3RzL3RoaXJkLnZhbHVlcwpAQCAtMCwwICsxLDYgQEAKK2ZsYWdfdmFsdWUgeworICAgIHBhY2thZ2U6ICJjb20uYW5kcm9pZC5hY29uZmlnLnNlY29uZF90ZXN0IgorICAgIG5hbWU6ICJ0ZXN0aW5nX2ZsYWciCisgICAgc3RhdGU6IERJU0FCTEVECisgICAgcGVybWlzc2lvbjogUkVBRF9XUklURQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL2ZsYWdzLmFjb25maWcgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvZmxhZ3MuYWNvbmZpZwppbmRleCAwYTAwNGNhLi5iNjZkMjgyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvZmxhZ3MuYWNvbmZpZworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvZmxhZ3MuYWNvbmZpZwpAQCAtMTQsMyArMTQsMTEgQEAKICAgYnVnOiAiMzY5ODA4ODA1IgogICBkZXNjcmlwdGlvbjogIldoZW4gZW5hYmxlZCwgbGF1bmNoIGFjb25maWdkIGZyb20gY29uZmlnIGluZnJhIG1vZHVsZS4iCiB9CisKK2ZsYWcgeworICBuYW1lOiAiZW5hYmxlX3N5c3RlbV9hY29uZmlnZF9ydXN0IgorICBuYW1lc3BhY2U6ICJjb3JlX2V4cGVyaW1lbnRzX3RlYW1faW50ZXJuYWwiCisgIGJ1ZzogIjM3ODA3OTUzOSIKKyAgZGVzY3JpcHRpb246ICJXaGVuIGVuYWJsZWQsIHRoZSBhY29uZmlnZCBjY19iaW5hcnkgdGFyZ2V0IGJlY29tZXMgYSBuby1vcCwgYW5kIHRoZSBydXN0X2JpbmFyeSBhY29uZmlnZC1zeXN0ZW0gdGFyZ2V0IHN0YXJ0cyB1cC4iCisgIGlzX2ZpeGVkX3JlYWRfb25seTogdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL3NyYy9saWIucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycwppbmRleCAyZTg5MTI3Li5iNDEzYzYyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycwpAQCAtMzksNiArMzksMTEgQEAKICAgICBwdWIgZm4gZW5hYmxlX2Fjb25maWdkX2Zyb21fbWFpbmxpbmUoKSAtPiBib29sIHsKICAgICAgICAgYWNvbmZpZ19mbGFnc19ydXN0OjplbmFibGVfb25seV9uZXdfc3RvcmFnZSgpCiAgICAgfQorCisgICAgLy8vIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgZW5hYmxlX3N5c3RlbV9hY29uZmlnZF9ydXN0IGZsYWcuCisgICAgcHViIGZuIGVuYWJsZV9zeXN0ZW1fYWNvbmZpZ2RfcnVzdCgpIC0+IGJvb2wgeworICAgICAgICBhY29uZmlnX2ZsYWdzX3J1c3Q6OmVuYWJsZV9zeXN0ZW1fYWNvbmZpZ2RfcnVzdCgpCisgICAgfQogfQogCiAvLy8gTW9kdWxlIHVzZWQgd2hlbiBidWlsZGluZyB3aXRoIGNhcmdvCkBAIC01NSw0ICs2MCwxMCBAQAogICAgICAgICAvLyBVc2VkIG9ubHkgdG8gZW5hYmxlIHR5cGVjaGVja2luZyBhbmQgdGVzdGluZyB3aXRoIGNhcmdvCiAgICAgICAgIHRydWUKICAgICB9CisKKyAgICAvLy8gUmV0dXJucyBhIHBsYWNlaG9sZGVyIHZhbHVlIGZvciB0aGUgZW5hYmxlX3N5c3RlbV9hY29uZmlnZF9ydXN0IGZsYWcuCisgICAgcHViIGZuIGVuYWJsZV9zeXN0ZW1fYWNvbmZpZ2RfcnVzdCgpIC0+IGJvb2wgeworICAgICAgICAvLyBVc2VkIG9ubHkgdG8gZW5hYmxlIHR5cGVjaGVja2luZyBhbmQgdGVzdGluZyB3aXRoIGNhcmdvCisgICAgICAgIHRydWUKKyAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX2luZm8ucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX2luZm8ucnMKaW5kZXggZjA5MDM5Ni4uY2YxNjgzNCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ19pbmZvLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfaW5mby5ycwpAQCAtMTk0LDEyICsxOTQsMTUgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdDsKKyAgICB1c2UgY3JhdGU6OnsKKyAgICAgICAgdGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QsIERFRkFVTFRfRklMRV9WRVJTSU9OLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiwKKyAgICB9OwogCi0gICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSB2YWx1ZSBsaXN0IHNlcmlhbGl6YXRpb24KLSAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb24oKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgLy8gVE9ETzogYi8zNzYxMDgyNjggLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKIAogICAgICAgICBsZXQgaGVhZGVyOiAmRmxhZ0luZm9IZWFkZXIgPSAmZmxhZ19pbmZvX2xpc3QuaGVhZGVyOwogICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnSW5mb0hlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CkBAIC0yMjAsMjAgKzIyMyw0MiBAQAogICAgIH0KIAogICAgICNbdGVzdF0KLSAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGF0IHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBhdCB0aGUgdG9wIG9mIHNlcmlhbGl6ZWQKLSAgICAvLyBieXRlcwotICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7Ci0gICAgICAgIGxldCBieXRlcyA9ICZmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCk7Ci0gICAgICAgIGxldCBtdXQgaGVhZCA9IDA7Ci0gICAgICAgIGxldCB2ZXJzaW9uID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKLSAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uLCAxKTsKKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fbWF4KCkgeworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdJbmZvSGVhZGVyID0gJmZsYWdfaW5mb19saXN0LmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ0luZm9IZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfaGVhZGVyLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKGhlYWRlciwgJnJlaW50ZXJwcmV0ZWRfaGVhZGVyLnVud3JhcCgpKTsKKworICAgICAgICBsZXQgbm9kZXM6ICZWZWM8RmxhZ0luZm9Ob2RlPiA9ICZmbGFnX2luZm9fbGlzdC5ub2RlczsKKyAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXMuaXRlcigpIHsKKyAgICAgICAgICAgIGxldCByZWludGVycHJldGVkX25vZGUgPSBGbGFnSW5mb05vZGU6OmZyb21fYnl0ZXMoJm5vZGUuaW50b19ieXRlcygpKS51bndyYXAoKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZSwgJnJlaW50ZXJwcmV0ZWRfbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBsZXQgZmxhZ19pbmZvX2J5dGVzID0gZmxhZ19pbmZvX2xpc3QuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9pbmZvX2xpc3QgPSBGbGFnSW5mb0xpc3Q6OmZyb21fYnl0ZXMoJmZsYWdfaW5mb19ieXRlcyk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF9pbmZvX2xpc3QuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoJmZsYWdfaW5mb19saXN0LCAmcmVpbnRlcnByZXRlZF9pbmZvX2xpc3QudW53cmFwKCkpOworICAgICAgICBhc3NlcnRfZXEhKGZsYWdfaW5mb19ieXRlcy5sZW4oKSBhcyB1MzIsIGhlYWRlci5maWxlX3NpemUpOwogICAgIH0KIAorICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAorICAgIC8vIGJ5dGVzCiAgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IGJ5dGVzID0gJmZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKKyAgICAgICAgbGV0IHZlcnNpb25fZnJvbV9maWxlID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uX2Zyb21fZmlsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgIH0KKwogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjaworICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ZpbGVfdHlwZV9jaGVjaygpIHsKLSAgICAgICAgbGV0IG11dCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgICAgIGxldCBtdXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGZsYWdfaW5mb19saXN0LmhlYWRlci5maWxlX3R5cGUgPSAxMjN1ODsKICAgICAgICAgbGV0IGVycm9yID0gRmxhZ0luZm9MaXN0Ojpmcm9tX2J5dGVzKCZmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdGFibGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3RhYmxlLnJzCmluZGV4IDA1ODhmZTUuLjZmYmVlMDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdGFibGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ190YWJsZS5ycwpAQCAtMjIwLDEyICsyMjAsMTUgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlOworICAgIHVzZSBjcmF0ZTo6eworICAgICAgICB0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTiwgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04sCisgICAgfTsKIAotICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdGFibGUgc2VyaWFsaXphdGlvbgotICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbigpIHsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7CisgICAgLy8gVE9ETzogYi8zNzYxMDgyNjggLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAKICAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdUYWJsZUhlYWRlciA9ICZmbGFnX3RhYmxlLmhlYWRlcjsKICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1RhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKQEAgLTI0NiwyMCArMjQ5LDQyIEBACiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAotICAgIC8vIGJ5dGVzCi0gICAgZm4gdGVzdF92ZXJzaW9uX251bWJlcigpIHsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7Ci0gICAgICAgIGxldCBieXRlcyA9ICZmbGFnX3RhYmxlLmludG9fYnl0ZXMoKTsKLSAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKLSAgICAgICAgbGV0IHZlcnNpb24gPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOwotICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb24sIDEpOworICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9tYXgoKSB7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdUYWJsZUhlYWRlciA9ICZmbGFnX3RhYmxlLmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1RhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShoZWFkZXIsICZyZWludGVycHJldGVkX2hlYWRlci51bndyYXAoKSk7CisKKyAgICAgICAgbGV0IG5vZGVzOiAmVmVjPEZsYWdUYWJsZU5vZGU+ID0gJmZsYWdfdGFibGUubm9kZXM7CisgICAgICAgIGZvciBub2RlIGluIG5vZGVzLml0ZXIoKSB7CisgICAgICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9ub2RlID0gRmxhZ1RhYmxlTm9kZTo6ZnJvbV9ieXRlcygmbm9kZS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLCAmcmVpbnRlcnByZXRlZF9ub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBmbGFnX3RhYmxlX2J5dGVzID0gZmxhZ190YWJsZS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gRmxhZ1RhYmxlOjpmcm9tX2J5dGVzKCZmbGFnX3RhYmxlX2J5dGVzKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX3RhYmxlLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKCZmbGFnX3RhYmxlLCAmcmVpbnRlcnByZXRlZF90YWJsZS51bndyYXAoKSk7CisgICAgICAgIGFzc2VydF9lcSEoZmxhZ190YWJsZV9ieXRlcy5sZW4oKSBhcyB1MzIsIGhlYWRlci5maWxlX3NpemUpOwogICAgIH0KIAorICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAorICAgIC8vIGJ5dGVzCiAgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCBieXRlcyA9ICZmbGFnX3RhYmxlLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKKyAgICAgICAgbGV0IHZlcnNpb25fZnJvbV9maWxlID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uX2Zyb21fZmlsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgIH0KKwogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjaworICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ZpbGVfdHlwZV9jaGVjaygpIHsKLSAgICAgICAgbGV0IG11dCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpOworICAgICAgICBsZXQgbXV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgZmxhZ190YWJsZS5oZWFkZXIuZmlsZV90eXBlID0gMTIzdTg7CiAgICAgICAgIGxldCBlcnJvciA9IEZsYWdUYWJsZTo6ZnJvbV9ieXRlcygmZmxhZ190YWJsZS5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdmFsdWUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3ZhbHVlLnJzCmluZGV4IGI2NGMxMGUuLjlhMTRiZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdmFsdWUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ192YWx1ZS5ycwpAQCAtMTMyLDEyICsxMzIsMzIgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3Q7CisgICAgdXNlIGNyYXRlOjp7CisgICAgICAgIHRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT04sIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OLAorICAgIH07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHZhbHVlIGxpc3Qgc2VyaWFsaXphdGlvbgotICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbigpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgIC8vIFRPRE86IGIvMzc2MTA4MjY4IC0gVXNlIHBhcmFtZXRlcml6ZWQgdGVzdHMuCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworCisgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnVmFsdWVIZWFkZXIgPSAmZmxhZ192YWx1ZV9saXN0LmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1ZhbHVlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShoZWFkZXIsICZyZWludGVycHJldGVkX2hlYWRlci51bndyYXAoKSk7CisKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfYnl0ZXMgPSBmbGFnX3ZhbHVlX2xpc3QuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF92YWx1ZV9saXN0ID0gRmxhZ1ZhbHVlTGlzdDo6ZnJvbV9ieXRlcygmZmxhZ192YWx1ZV9ieXRlcyk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF92YWx1ZV9saXN0LmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKCZmbGFnX3ZhbHVlX2xpc3QsICZyZWludGVycHJldGVkX3ZhbHVlX2xpc3QudW53cmFwKCkpOworICAgICAgICBhc3NlcnRfZXEhKGZsYWdfdmFsdWVfYnl0ZXMubGVuKCkgYXMgdTMyLCBoZWFkZXIuZmlsZV9zaXplKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHZhbHVlIGxpc3Qgc2VyaWFsaXphdGlvbgorICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9tYXgoKSB7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOwogCiAgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnVmFsdWVIZWFkZXIgPSAmZmxhZ192YWx1ZV9saXN0LmhlYWRlcjsKICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1ZhbHVlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKQEAgLTE1NSwxNyArMTc1LDE3IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhhdCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgYXQgdGhlIHRvcCBvZiBzZXJpYWxpemVkCiAgICAgLy8gYnl0ZXMKICAgICBmbiB0ZXN0X3ZlcnNpb25fbnVtYmVyKCkgewotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgYnl0ZXMgPSAmZmxhZ192YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKLSAgICAgICAgbGV0IHZlcnNpb24gPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOwotICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb24sIDEpOworICAgICAgICBsZXQgdmVyc2lvbl9mcm9tX2ZpbGUgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb25fZnJvbV9maWxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgfQogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjawogICAgIGZuIHRlc3RfZmlsZV90eXBlX2NoZWNrKCkgewotICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGZsYWdfdmFsdWVfbGlzdC5oZWFkZXIuZmlsZV90eXBlID0gMTIzdTg7CiAgICAgICAgIGxldCBlcnJvciA9IEZsYWdWYWx1ZUxpc3Q6OmZyb21fYnl0ZXMoJmZsYWdfdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2xpYi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2xpYi5ycwppbmRleCAxZDkyYmE0Li4xZTViMDAxIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9saWIucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvbGliLnJzCkBAIC0yMjgsMTAgKzIyOCwxNCBAQAogCiAvLy8gUmVhZCBhbmQgcGFyc2UgYnl0ZXMgYXMgdTgKIHB1YiBmbiByZWFkX3U4X2Zyb21fYnl0ZXMoYnVmOiAmW3U4XSwgaGVhZDogJm11dCB1c2l6ZSkgLT4gUmVzdWx0PHU4LCBBY29uZmlnU3RvcmFnZUVycm9yPiB7Ci0gICAgbGV0IHZhbCA9Ci0gICAgICAgIHU4Ojpmcm9tX2xlX2J5dGVzKGJ1ZlsqaGVhZC4uKmhlYWQgKyAxXS50cnlfaW50bygpLm1hcF9lcnIofGVycm1zZ3wgewotICAgICAgICAgICAgQnl0ZXNQYXJzZUZhaWwoYW55aG93ISgiZmFpbCB0byBwYXJzZSB1OCBmcm9tIGJ5dGVzOiB7fSIsIGVycm1zZykpCi0gICAgICAgIH0pPyk7CisgICAgbGV0IHZhbCA9IHU4Ojpmcm9tX2xlX2J5dGVzKAorICAgICAgICBidWYuZ2V0KCpoZWFkLi4qaGVhZCArIDEpCisgICAgICAgICAgICAub2tfb3IoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6Qnl0ZXNQYXJzZUZhaWwoYW55aG93ISgKKyAgICAgICAgICAgICAgICAiZmFpbCB0byBwYXJzZSB1OCBmcm9tIGJ5dGVzOiBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyIKKyAgICAgICAgICAgICkpKT8KKyAgICAgICAgICAgIC50cnlfaW50bygpCisgICAgICAgICAgICAubWFwX2Vycih8ZXJybXNnfCBCeXRlc1BhcnNlRmFpbChhbnlob3chKCJmYWlsIHRvIHBhcnNlIHU4IGZyb20gYnl0ZXM6IHt9IiwgZXJybXNnKSkpPywKKyAgICApOwogICAgICpoZWFkICs9IDE7CiAgICAgT2sodmFsKQogfQpAQCAtMjQxLDEwICsyNDUsMTYgQEAKICAgICBidWY6ICZbdThdLAogICAgIGhlYWQ6ICZtdXQgdXNpemUsCiApIC0+IFJlc3VsdDx1MTYsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKLSAgICBsZXQgdmFsID0KLSAgICAgICAgdTE2Ojpmcm9tX2xlX2J5dGVzKGJ1ZlsqaGVhZC4uKmhlYWQgKyAyXS50cnlfaW50bygpLm1hcF9lcnIofGVycm1zZ3wgewotICAgICAgICAgICAgQnl0ZXNQYXJzZUZhaWwoYW55aG93ISgiZmFpbCB0byBwYXJzZSB1MTYgZnJvbSBieXRlczoge30iLCBlcnJtc2cpKQotICAgICAgICB9KT8pOworICAgIGxldCB2YWwgPSB1MTY6OmZyb21fbGVfYnl0ZXMoCisgICAgICAgIGJ1Zi5nZXQoKmhlYWQuLipoZWFkICsgMikKKyAgICAgICAgICAgIC5va19vcihBY29uZmlnU3RvcmFnZUVycm9yOjpCeXRlc1BhcnNlRmFpbChhbnlob3chKAorICAgICAgICAgICAgICAgICJmYWlsIHRvIHBhcnNlIHUxNiBmcm9tIGJ5dGVzOiBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyIKKyAgICAgICAgICAgICkpKT8KKyAgICAgICAgICAgIC50cnlfaW50bygpCisgICAgICAgICAgICAubWFwX2Vycih8ZXJybXNnfCB7CisgICAgICAgICAgICAgICAgQnl0ZXNQYXJzZUZhaWwoYW55aG93ISgiZmFpbCB0byBwYXJzZSB1MTYgZnJvbSBieXRlczoge30iLCBlcnJtc2cpKQorICAgICAgICAgICAgfSk/LAorICAgICk7CiAgICAgKmhlYWQgKz0gMjsKICAgICBPayh2YWwpCiB9CkBAIC0yNTYsMjAgKzI2NiwzMiBAQAogCiAvLy8gUmVhZCBhbmQgcGFyc2UgYnl0ZXMgYXMgdTMyCiBwdWIgZm4gcmVhZF91MzJfZnJvbV9ieXRlcyhidWY6ICZbdThdLCBoZWFkOiAmbXV0IHVzaXplKSAtPiBSZXN1bHQ8dTMyLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7Ci0gICAgbGV0IHZhbCA9Ci0gICAgICAgIHUzMjo6ZnJvbV9sZV9ieXRlcyhidWZbKmhlYWQuLipoZWFkICsgNF0udHJ5X2ludG8oKS5tYXBfZXJyKHxlcnJtc2d8IHsKLSAgICAgICAgICAgIEJ5dGVzUGFyc2VGYWlsKGFueWhvdyEoImZhaWwgdG8gcGFyc2UgdTMyIGZyb20gYnl0ZXM6IHt9IiwgZXJybXNnKSkKLSAgICAgICAgfSk/KTsKKyAgICBsZXQgdmFsID0gdTMyOjpmcm9tX2xlX2J5dGVzKAorICAgICAgICBidWYuZ2V0KCpoZWFkLi4qaGVhZCArIDQpCisgICAgICAgICAgICAub2tfb3IoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6Qnl0ZXNQYXJzZUZhaWwoYW55aG93ISgKKyAgICAgICAgICAgICAgICAiZmFpbCB0byBwYXJzZSB1MzIgZnJvbSBieXRlczogYWNjZXNzIG91dCBvZiBib3VuZHMiCisgICAgICAgICAgICApKSk/CisgICAgICAgICAgICAudHJ5X2ludG8oKQorICAgICAgICAgICAgLm1hcF9lcnIofGVycm1zZ3wgeworICAgICAgICAgICAgICAgIEJ5dGVzUGFyc2VGYWlsKGFueWhvdyEoImZhaWwgdG8gcGFyc2UgdTMyIGZyb20gYnl0ZXM6IHt9IiwgZXJybXNnKSkKKyAgICAgICAgICAgIH0pPywKKyAgICApOwogICAgICpoZWFkICs9IDQ7CiAgICAgT2sodmFsKQogfQogCiAvLyBSZWFkIGFuZCBwYXJzZSBieXRlcyBhcyB1NjQKIHB1YiBmbiByZWFkX3U2NF9mcm9tX2J5dGVzKGJ1ZjogJlt1OF0sIGhlYWQ6ICZtdXQgdXNpemUpIC0+IFJlc3VsdDx1NjQsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKLSAgICBsZXQgdmFsID0KLSAgICAgICAgdTY0Ojpmcm9tX2xlX2J5dGVzKGJ1ZlsqaGVhZC4uKmhlYWQgKyA4XS50cnlfaW50bygpLm1hcF9lcnIofGVycm1zZ3wgewotICAgICAgICAgICAgQnl0ZXNQYXJzZUZhaWwoYW55aG93ISgiZmFpbCB0byBwYXJzZSB1NjQgZnJvbSBieXRlczoge30iLCBlcnJtc2cpKQotICAgICAgICB9KT8pOworICAgIGxldCB2YWwgPSB1NjQ6OmZyb21fbGVfYnl0ZXMoCisgICAgICAgIGJ1Zi5nZXQoKmhlYWQuLipoZWFkICsgOCkKKyAgICAgICAgICAgIC5va19vcihBY29uZmlnU3RvcmFnZUVycm9yOjpCeXRlc1BhcnNlRmFpbChhbnlob3chKAorICAgICAgICAgICAgICAgICJmYWlsIHRvIHBhcnNlIHU2NCBmcm9tIGJ5dGVzOiBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyIKKyAgICAgICAgICAgICkpKT8KKyAgICAgICAgICAgIC50cnlfaW50bygpCisgICAgICAgICAgICAubWFwX2Vycih8ZXJybXNnfCB7CisgICAgICAgICAgICAgICAgQnl0ZXNQYXJzZUZhaWwoYW55aG93ISgiZmFpbCB0byBwYXJzZSB1NjQgZnJvbSBieXRlczoge30iLCBlcnJtc2cpKQorICAgICAgICAgICAgfSk/LAorICAgICk7CiAgICAgKmhlYWQgKz0gODsKICAgICBPayh2YWwpCiB9CkBAIC0yODAsOCArMzAyLDIxIEBACiAgICAgaGVhZDogJm11dCB1c2l6ZSwKICkgLT4gUmVzdWx0PFN0cmluZywgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGxldCBudW1fYnl0ZXMgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ1ZiwgaGVhZCk/IGFzIHVzaXplOwotICAgIGxldCB2YWwgPSBTdHJpbmc6OmZyb21fdXRmOChidWZbKmhlYWQuLipoZWFkICsgbnVtX2J5dGVzXS50b192ZWMoKSkKLSAgICAgICAgLm1hcF9lcnIofGVycm1zZ3wgQnl0ZXNQYXJzZUZhaWwoYW55aG93ISgiZmFpbCB0byBwYXJzZSBzdHJpbmcgZnJvbSBieXRlczoge30iLCBlcnJtc2cpKSk/OworICAgIC8vIFRPRE8ob3BnKTogRG9jdW1lbnQgdGhpcyBsaW1pdGF0aW9uIGFuZCBjaGVjayBpdCB3aGVuIGNyZWF0aW5nIGZpbGVzLgorICAgIGlmIG51bV9ieXRlcyA+IDEwMjQgeworICAgICAgICByZXR1cm4gRXJyKEFjb25maWdTdG9yYWdlRXJyb3I6OkJ5dGVzUGFyc2VGYWlsKGFueWhvdyEoCisgICAgICAgICAgICAiZmFpbCB0byBwYXJzZSBzdHJpbmcgZnJvbSBieXRlcywgc3RyaW5nIGlzIHRvbyBsb25nIChmb3VuZCB7fSwgbWF4IGlzIDEwMjQpIiwKKyAgICAgICAgICAgIG51bV9ieXRlcworICAgICAgICApKSk7CisgICAgfQorICAgIGxldCB2YWwgPSBTdHJpbmc6OmZyb21fdXRmOCgKKyAgICAgICAgYnVmLmdldCgqaGVhZC4uKmhlYWQgKyBudW1fYnl0ZXMpCisgICAgICAgICAgICAub2tfb3IoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6Qnl0ZXNQYXJzZUZhaWwoYW55aG93ISgKKyAgICAgICAgICAgICAgICAiZmFpbCB0byBwYXJzZSBzdHJpbmcgZnJvbSBieXRlczogYWNjZXNzIG91dCBvZiBib3VuZHMiCisgICAgICAgICAgICApKSk/CisgICAgICAgICAgICAudG9fdmVjKCksCisgICAgKQorICAgIC5tYXBfZXJyKHxlcnJtc2d8IEJ5dGVzUGFyc2VGYWlsKGFueWhvdyEoImZhaWwgdG8gcGFyc2Ugc3RyaW5nIGZyb20gYnl0ZXM6IHt9IiwgZXJybXNnKSkpPzsKICAgICAqaGVhZCArPSBudW1fYnl0ZXM7CiAgICAgT2sodmFsKQogfQpAQCAtNTMzLDEzICs1NjgsNDYgQEAKICAgICB9OwogCiAgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfbGlzdF9mbGFnc193aXRoX21pc3NpbmdfZmlsZXNfZXJyb3IoKSB7CisgICAgICAgIGxldCBmbGFnX2xpc3RfZXJyb3IgPSBsaXN0X2ZsYWdzKCJkb2VzIiwgIm5vdCIsICJleGlzdCIpLnVud3JhcF9lcnIoKTsKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgIGZvcm1hdCEoIns6P30iLCBmbGFnX2xpc3RfZXJyb3IpLAorICAgICAgICAgICAgZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAiRmlsZVJlYWRGYWlsKEZhaWxlZCB0byBvcGVuIGZpbGUgZG9lczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSAob3MgZXJyb3IgMikpIgorICAgICAgICAgICAgKQorICAgICAgICApOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X2xpc3RfZmxhZ3Nfd2l0aF9pbnZhbGlkX2ZpbGVzX2Vycm9yKCkgeworICAgICAgICBsZXQgaW52YWxpZF9ieXRlczogW3U4OyAzXSA9IFswOyAzXTsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmludmFsaWRfYnl0ZXMpLnVud3JhcCgpOworICAgICAgICBsZXQgZmxhZ190YWJsZSA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmaW52YWxpZF9ieXRlcykudW53cmFwKCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmludmFsaWRfYnl0ZXMpLnVud3JhcCgpOworICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9wYXRoID0gcGFja2FnZV90YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOworICAgICAgICBsZXQgZmxhZ190YWJsZV9wYXRoID0gZmxhZ190YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOworICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0X3BhdGggPSBmbGFnX3ZhbHVlX2xpc3QucGF0aCgpLmRpc3BsYXkoKS50b19zdHJpbmcoKTsKKyAgICAgICAgbGV0IGZsYWdfbGlzdF9lcnJvciA9CisgICAgICAgICAgICBsaXN0X2ZsYWdzKCZwYWNrYWdlX3RhYmxlX3BhdGgsICZmbGFnX3RhYmxlX3BhdGgsICZmbGFnX3ZhbHVlX2xpc3RfcGF0aCkudW53cmFwX2VycigpOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGZsYWdfbGlzdF9lcnJvciksCisgICAgICAgICAgICBmb3JtYXQhKCJCeXRlc1BhcnNlRmFpbChmYWlsIHRvIHBhcnNlIHUzMiBmcm9tIGJ5dGVzOiBhY2Nlc3Mgb3V0IG9mIGJvdW5kcykiKQorICAgICAgICApOworICAgIH0KKworICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgZmxhZyBsaXN0IGFwaQogICAgIGZuIHRlc3RfbGlzdF9mbGFnKCkgewogICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPQotICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOworICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCkpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZmxhZ190YWJsZSA9CisgICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoCisgICAgICAgICAgICAmY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCksCisgICAgICAgICkKKyAgICAgICAgLnVud3JhcCgpOwogCiAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlX3BhdGggPSBwYWNrYWdlX3RhYmxlLnBhdGgoKS5kaXNwbGF5KCkudG9fc3RyaW5nKCk7CiAgICAgICAgIGxldCBmbGFnX3RhYmxlX3BhdGggPSBmbGFnX3RhYmxlLnBhdGgoKS5kaXNwbGF5KCkudG9fc3RyaW5nKCk7CkBAIC02MDQsMTIgKzY3MiwxOSBAQAogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSBmbGFnIGxpc3Qgd2l0aCBpbmZvIGFwaQogICAgIGZuIHRlc3RfbGlzdF9mbGFnX3dpdGhfaW5mbygpIHsKICAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPQotICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0KLSAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0KLSAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOworICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCkpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZmxhZ190YWJsZSA9CisgICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoCisgICAgICAgICAgICAmY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCksCisgICAgICAgICkKKyAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoCisgICAgICAgICAgICAmY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CiAKICAgICAgICAgbGV0IHBhY2thZ2VfdGFibGVfcGF0aCA9IHBhY2thZ2VfdGFibGUucGF0aCgpLmRpc3BsYXkoKS50b19zdHJpbmcoKTsKICAgICAgICAgbGV0IGZsYWdfdGFibGVfcGF0aCA9IGZsYWdfdGFibGUucGF0aCgpLmRpc3BsYXkoKS50b19zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3BhY2thZ2VfdGFibGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9wYWNrYWdlX3RhYmxlLnJzCmluZGV4IGFmMzlmYmMuLjIxMzU3YzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3BhY2thZ2VfdGFibGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvcGFja2FnZV90YWJsZS5ycwpAQCAtMTAwLDYgKzEwMCw3IEBACiBwdWIgc3RydWN0IFBhY2thZ2VUYWJsZU5vZGUgewogICAgIHB1YiBwYWNrYWdlX25hbWU6IFN0cmluZywKICAgICBwdWIgcGFja2FnZV9pZDogdTMyLAorICAgIHB1YiBmaW5nZXJwcmludDogdTY0LAogICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYm9vbGVhbiBmbGFnIGluIHRoaXMgYWNvbmZpZyBwYWNrYWdlIGFtb25nIGFsbCBib29sZWFuCiAgICAgLy8gZmxhZ3MgaW4gdGhpcyBjb250YWluZXIuCiAgICAgcHViIGJvb2xlYW5fc3RhcnRfaW5kZXg6IHUzMiwKQEAgLTExMSw4ICsxMTIsMTIgQEAKICAgICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgZm10OjpGb3JtYXR0ZXIpIC0+IGZtdDo6UmVzdWx0IHsKICAgICAgICAgd3JpdGVsbiEoCiAgICAgICAgICAgICBmLAotICAgICAgICAgICAgIlBhY2thZ2U6IHt9LCBJZDoge30sIEJvb2xlYW4gZmxhZyBzdGFydCBpbmRleDoge30sIE5leHQ6IHs6P30iLAotICAgICAgICAgICAgc2VsZi5wYWNrYWdlX25hbWUsIHNlbGYucGFja2FnZV9pZCwgc2VsZi5ib29sZWFuX3N0YXJ0X2luZGV4LCBzZWxmLm5leHRfb2Zmc2V0CisgICAgICAgICAgICAiUGFja2FnZToge30sIElkOiB7fSwgRmluZ2VycHJpbnQ6IHt9LCBCb29sZWFuIGZsYWcgc3RhcnQgaW5kZXg6IHt9LCBOZXh0OiB7Oj99IiwKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9uYW1lLAorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2lkLAorICAgICAgICAgICAgc2VsZi5maW5nZXJwcmludCwKKyAgICAgICAgICAgIHNlbGYuYm9vbGVhbl9zdGFydF9pbmRleCwKKyAgICAgICAgICAgIHNlbGYubmV4dF9vZmZzZXQKICAgICAgICAgKT87CiAgICAgICAgIE9rKCgpKQogICAgIH0KQEAgLTE0Niw5ICsxNTEsNyBAQAogICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJihuYW1lX2J5dGVzLmxlbigpIGFzIHUzMikudG9fbGVfYnl0ZXMoKSk7CiAgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZShuYW1lX2J5dGVzKTsKICAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCZzZWxmLnBhY2thZ2VfaWQudG9fbGVfYnl0ZXMoKSk7Ci0gICAgICAgIC8vIFYyIHN0b3JhZ2UgZmlsZXMgaGF2ZSBhIGZpbmdlcnByaW50LiBDdXJyZW50IHN0cnVjdCAodjEpIGRvZXMgbm90LCBzbwotICAgICAgICAvLyB3ZSB3cml0ZSAwLgotICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJjB1NjQudG9fbGVfYnl0ZXMoKSk7CisgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZSgmc2VsZi5maW5nZXJwcmludC50b19sZV9ieXRlcygpKTsKICAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCZzZWxmLmJvb2xlYW5fc3RhcnRfaW5kZXgudG9fbGVfYnl0ZXMoKSk7CiAgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZSgmc2VsZi5uZXh0X29mZnNldC51bndyYXBfb3IoMCkudG9fbGVfYnl0ZXMoKSk7CiAgICAgICAgIHJlc3VsdApAQCAtMTcyLDEzICsxNzUsMTUgQEAKICAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKICAgICAgICAgbGV0IHBhY2thZ2VfbmFtZSA9IHJlYWRfc3RyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OwogICAgICAgICBsZXQgcGFja2FnZV9pZCA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OworICAgICAgICAvLyB2MSBkb2VzIG5vdCBoYXZlIGZpbmdlcnByaW50LCBzbyBqdXN0IHNldCB0byAwLgorICAgICAgICBsZXQgZmluZ2VycHJpbnQ6IHU2NCA9IDA7CiAgICAgICAgIGxldCBib29sZWFuX3N0YXJ0X2luZGV4ID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CiAgICAgICAgIGxldCBuZXh0X29mZnNldCA9IG1hdGNoIHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/IHsKICAgICAgICAgICAgIDAgPT4gTm9uZSwKICAgICAgICAgICAgIHZhbCA9PiBTb21lKHZhbCksCiAgICAgICAgIH07CiAKLSAgICAgICAgbGV0IG5vZGUgPSBTZWxmIHsgcGFja2FnZV9uYW1lLCBwYWNrYWdlX2lkLCBib29sZWFuX3N0YXJ0X2luZGV4LCBuZXh0X29mZnNldCB9OworICAgICAgICBsZXQgbm9kZSA9IFNlbGYgeyBwYWNrYWdlX25hbWUsIHBhY2thZ2VfaWQsIGZpbmdlcnByaW50LCBib29sZWFuX3N0YXJ0X2luZGV4LCBuZXh0X29mZnNldCB9OwogICAgICAgICBPayhub2RlKQogICAgIH0KIApAQCAtMTg2LDE4ICsxOTEsMTQgQEAKICAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKICAgICAgICAgbGV0IHBhY2thZ2VfbmFtZSA9IHJlYWRfc3RyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OwogICAgICAgICBsZXQgcGFja2FnZV9pZCA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OwotCi0gICAgICAgIC8vIEZpbmdlcnByaW50IGlzIHVudXNlZCBpbiB0aGUgY3VycmVudCBzdHJ1Y3QgKHYxKSwgYnV0IHdlIG5lZWQgdG8gcmVhZAotICAgICAgICAvLyB0aGUgYnl0ZXMgaWYgdGhlIHN0b3JhZ2UgZmlsZSB0eXBlIGlzIHYyIG9yIGVsc2UgdGhlIHN1YnNlcXVlbnQKLSAgICAgICAgLy8gZmllbGRzIHdpbGwgYmUgaW5hY2N1cmF0ZS4KLSAgICAgICAgbGV0IF9maW5nZXJwcmludCA9IHJlYWRfdTY0X2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OworICAgICAgICBsZXQgZmluZ2VycHJpbnQgPSByZWFkX3U2NF9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKICAgICAgICAgbGV0IGJvb2xlYW5fc3RhcnRfaW5kZXggPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKICAgICAgICAgbGV0IG5leHRfb2Zmc2V0ID0gbWF0Y2ggcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT8gewogICAgICAgICAgICAgMCA9PiBOb25lLAogICAgICAgICAgICAgdmFsID0+IFNvbWUodmFsKSwKICAgICAgICAgfTsKIAotICAgICAgICBsZXQgbm9kZSA9IFNlbGYgeyBwYWNrYWdlX25hbWUsIHBhY2thZ2VfaWQsIGJvb2xlYW5fc3RhcnRfaW5kZXgsIG5leHRfb2Zmc2V0IH07CisgICAgICAgIGxldCBub2RlID0gU2VsZiB7IHBhY2thZ2VfbmFtZSwgcGFja2FnZV9pZCwgZmluZ2VycHJpbnQsIGJvb2xlYW5fc3RhcnRfaW5kZXgsIG5leHRfb2Zmc2V0IH07CiAgICAgICAgIE9rKG5vZGUpCiAgICAgfQogCkBAIC0yODEsMTMgKzI4MiwzNyBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgY3JhdGU6OnJlYWRfdTMyX2Zyb21fc3RhcnRfb2ZfYnl0ZXM7Ci0gICAgdXNlIGNyYXRlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT059OworICAgIHVzZSBjcmF0ZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZTsKKyAgICB1c2UgY3JhdGU6OntyZWFkX3UzMl9mcm9tX3N0YXJ0X29mX2J5dGVzLCBERUZBVUxUX0ZJTEVfVkVSU0lPTiwgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT059OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSB0YWJsZSBzZXJpYWxpemF0aW9uCi0gICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uKCkgewotICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKKyAgICAvLyBUT0RPOiBiLzM3NjEwODI2OCAtIFVzZSBwYXJhbWV0ZXJpemVkIHRlc3RzLgorICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9kZWZhdWx0KCkgeworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgICAgICBsZXQgaGVhZGVyOiAmUGFja2FnZVRhYmxlSGVhZGVyID0gJnBhY2thZ2VfdGFibGUuaGVhZGVyOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBQYWNrYWdlVGFibGVIZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfaGVhZGVyLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKGhlYWRlciwgJnJlaW50ZXJwcmV0ZWRfaGVhZGVyLnVud3JhcCgpKTsKKworICAgICAgICBsZXQgbm9kZXM6ICZWZWM8UGFja2FnZVRhYmxlTm9kZT4gPSAmcGFja2FnZV90YWJsZS5ub2RlczsKKyAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXMuaXRlcigpIHsKKyAgICAgICAgICAgIGxldCByZWludGVycHJldGVkX25vZGUgPQorICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZU5vZGU6OmZyb21fYnl0ZXMoJm5vZGUuaW50b19ieXRlcyhoZWFkZXIudmVyc2lvbiksIGhlYWRlci52ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUsICZyZWludGVycHJldGVkX25vZGUpOworICAgICAgICB9CisKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGVfYnl0ZXMgPSBwYWNrYWdlX3RhYmxlLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfdGFibGUgPSBQYWNrYWdlVGFibGU6OmZyb21fYnl0ZXMoJnBhY2thZ2VfdGFibGVfYnl0ZXMpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfdGFibGUuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoJnBhY2thZ2VfdGFibGUsICZyZWludGVycHJldGVkX3RhYmxlLnVud3JhcCgpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX3RhYmxlX2J5dGVzLmxlbigpIGFzIHUzMiwgaGVhZGVyLmZpbGVfc2l6ZSk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9tYXgoKSB7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGxldCBoZWFkZXI6ICZQYWNrYWdlVGFibGVIZWFkZXIgPSAmcGFja2FnZV90YWJsZS5oZWFkZXI7CiAgICAgICAgIGxldCByZWludGVycHJldGVkX2hlYWRlciA9IFBhY2thZ2VUYWJsZUhlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CiAgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF9oZWFkZXIuaXNfb2soKSk7CkBAIC0zMTIsNDQgKzMzNywzNiBAQAogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAogICAgIC8vIGJ5dGVzCiAgICAgZm4gdGVzdF92ZXJzaW9uX251bWJlcigpIHsKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCk7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGxldCBieXRlcyA9ICZwYWNrYWdlX3RhYmxlLmludG9fYnl0ZXMoKTsKLSAgICAgICAgbGV0IHZlcnNpb24gPSByZWFkX3UzMl9mcm9tX3N0YXJ0X29mX2J5dGVzKGJ5dGVzKS51bndyYXAoKTsKLSAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCB1bnBhY2tlZF92ZXJzaW9uID0gcmVhZF91MzJfZnJvbV9zdGFydF9vZl9ieXRlcyhieXRlcykudW53cmFwKCk7CisgICAgICAgIGFzc2VydF9lcSEodW5wYWNrZWRfdmVyc2lvbiwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgIH0KIAogICAgICNbdGVzdF0KLSAgICBmbiB0ZXN0X3JvdW5kX3RyaXBfdjEoKSB7Ci0gICAgICAgIGxldCB0YWJsZV92MTogUGFja2FnZVRhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOwotICAgICAgICBsZXQgdGFibGVfYnl0ZXNfdjEgPSB0YWJsZV92MS5pbnRvX2J5dGVzKCk7CisgICAgZm4gdGVzdF9yb3VuZF90cmlwX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCB0YWJsZTogUGFja2FnZVRhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCB0YWJsZV9ieXRlcyA9IHRhYmxlLmludG9fYnl0ZXMoKTsKIAotICAgICAgICAvLyBXaWxsIGF1dG9tYXRpY2FsbHkgcmVhZCBmcm9tIHZlcnNpb24gMiBhcyB0aGUgdmVyc2lvbiBjb2RlIGlzIGVuY29kZWQKLSAgICAgICAgLy8gaW50byB0aGUgYnl0ZXMuCi0gICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gUGFja2FnZVRhYmxlOjpmcm9tX2J5dGVzKCZ0YWJsZV9ieXRlc192MSkudW53cmFwKCk7CisgICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gUGFja2FnZVRhYmxlOjpmcm9tX2J5dGVzKCZ0YWJsZV9ieXRlcykudW53cmFwKCk7CiAKLSAgICAgICAgYXNzZXJ0X2VxISh0YWJsZV92MSwgcmVpbnRlcnByZXRlZF90YWJsZSk7CisgICAgICAgIGFzc2VydF9lcSEodGFibGUsIHJlaW50ZXJwcmV0ZWRfdGFibGUpOwogICAgIH0KIAogICAgICNbdGVzdF0KLSAgICBmbiB0ZXN0X3JvdW5kX3RyaXBfdjIoKSB7Ci0gICAgICAgIC8vIEhhdmUgdG8gZmFrZSB2MiBiZWNhdXNlIHRob3VnaCB3ZSB3aWxsIHNldCB0aGUgdmVyc2lvbiB0byB2MgotICAgICAgICAvLyBhbmQgd3JpdGUgdGhlIGJ5dGVzIGFzIHYyLCB3ZSBkb24ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIGFjdHVhbGx5IHNldAotICAgICAgICAvLyB0aGUgZmluZ2VycHJpbnQgeWV0LgotICAgICAgICBsZXQgbXV0IGZha2VfdGFibGVfdjIgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCk7Ci0gICAgICAgIGZha2VfdGFibGVfdjIuaGVhZGVyLnZlcnNpb24gPSAyOwotICAgICAgICBsZXQgdGFibGVfYnl0ZXNfdjIgPSBmYWtlX3RhYmxlX3YyLmludG9fYnl0ZXMoKTsKKyAgICBmbiB0ZXN0X3JvdW5kX3RyaXBfbWF4KCkgeworICAgICAgICBsZXQgdGFibGU6IFBhY2thZ2VUYWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOworICAgICAgICBsZXQgdGFibGVfYnl0ZXMgPSB0YWJsZS5pbnRvX2J5dGVzKCk7CiAKLSAgICAgICAgLy8gV2lsbCBhdXRvbWF0aWNhbGx5IHJlYWQgZnJvbSB2ZXJzaW9uIDIgYXMgdGhlIHZlcnNpb24gY29kZSBpcyBlbmNvZGVkCi0gICAgICAgIC8vIGludG8gdGhlIGJ5dGVzLgotICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF90YWJsZSA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmdGFibGVfYnl0ZXNfdjIpLnVud3JhcCgpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF90YWJsZSA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmdGFibGVfYnl0ZXMpLnVud3JhcCgpOwogCi0gICAgICAgIGFzc2VydF9lcSEoZmFrZV90YWJsZV92MiwgcmVpbnRlcnByZXRlZF90YWJsZSk7CisgICAgICAgIGFzc2VydF9lcSEodGFibGUsIHJlaW50ZXJwcmV0ZWRfdGFibGUpOwogICAgIH0KIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBmaWxlIHR5cGUgY2hlY2sKICAgICBmbiB0ZXN0X2ZpbGVfdHlwZV9jaGVjaygpIHsKLSAgICAgICAgbGV0IG11dCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOworICAgICAgICBsZXQgbXV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgcGFja2FnZV90YWJsZS5oZWFkZXIuZmlsZV90eXBlID0gMTIzdTg7CiAgICAgICAgIGxldCBlcnJvciA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmcGFja2FnZV90YWJsZS5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3Rlc3RfdXRpbHMucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy90ZXN0X3V0aWxzLnJzCmluZGV4IDVjMzY0ZjYuLjU1NzgwZWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3Rlc3RfdXRpbHMucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvdGVzdF91dGlscy5ycwpAQCAtMTgsMzggKzE4LDUzIEBACiB1c2UgY3JhdGU6OmZsYWdfdGFibGU6OntGbGFnVGFibGUsIEZsYWdUYWJsZUhlYWRlciwgRmxhZ1RhYmxlTm9kZX07CiB1c2UgY3JhdGU6OmZsYWdfdmFsdWU6OntGbGFnVmFsdWVIZWFkZXIsIEZsYWdWYWx1ZUxpc3R9OwogdXNlIGNyYXRlOjpwYWNrYWdlX3RhYmxlOjp7UGFja2FnZVRhYmxlLCBQYWNrYWdlVGFibGVIZWFkZXIsIFBhY2thZ2VUYWJsZU5vZGV9OwotdXNlIGNyYXRlOjp7QWNvbmZpZ1N0b3JhZ2VFcnJvciwgU3RvcmFnZUZpbGVUeXBlLCBTdG9yZWRGbGFnVHlwZSwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwordXNlIGNyYXRlOjp7QWNvbmZpZ1N0b3JhZ2VFcnJvciwgU3RvcmFnZUZpbGVUeXBlLCBTdG9yZWRGbGFnVHlwZX07CiAKIHVzZSBhbnlob3c6OmFueWhvdzsKIHVzZSBzdGQ6OmlvOjpXcml0ZTsKIHVzZSB0ZW1wZmlsZTo6TmFtZWRUZW1wRmlsZTsKIAotcHViIGZuIGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKSAtPiBQYWNrYWdlVGFibGUgeworcHViIGZuIGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUodmVyc2lvbjogdTMyKSAtPiBQYWNrYWdlVGFibGUgewogICAgIGxldCBoZWFkZXIgPSBQYWNrYWdlVGFibGVIZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiBERUZBVUxUX0ZJTEVfVkVSU0lPTiwKKyAgICAgICAgdmVyc2lvbjogdmVyc2lvbiwKICAgICAgICAgY29udGFpbmVyOiBTdHJpbmc6OmZyb20oIm1vY2t1cCIpLAogICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCBhcyB1OCwKLSAgICAgICAgZmlsZV9zaXplOiAyMDksCisgICAgICAgIGZpbGVfc2l6ZTogbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgICAgICAxID0+IDIwOSwKKyAgICAgICAgICAgIDIgPT4gMjMzLAorICAgICAgICAgICAgXyA9PiBwYW5pYyEoIlVuc3VwcG9ydGVkIHZlcnNpb24uIiksCisgICAgICAgIH0sCiAgICAgICAgIG51bV9wYWNrYWdlczogMywKICAgICAgICAgYnVja2V0X29mZnNldDogMzEsCiAgICAgICAgIG5vZGVfb2Zmc2V0OiA1OSwKICAgICB9OwotICAgIGxldCBidWNrZXRzOiBWZWM8T3B0aW9uPHUzMj4+ID0gdmVjIVtTb21lKDU5KSwgTm9uZSwgTm9uZSwgU29tZSgxMDkpLCBOb25lLCBOb25lLCBOb25lXTsKKyAgICBsZXQgYnVja2V0czogVmVjPE9wdGlvbjx1MzI+PiA9IG1hdGNoIHZlcnNpb24geworICAgICAgICAxID0+IHZlYyFbU29tZSg1OSksIE5vbmUsIE5vbmUsIFNvbWUoMTA5KSwgTm9uZSwgTm9uZSwgTm9uZV0sCisgICAgICAgIDIgPT4gdmVjIVtTb21lKDU5KSwgTm9uZSwgTm9uZSwgU29tZSgxMTcpLCBOb25lLCBOb25lLCBOb25lXSwKKyAgICAgICAgXyA9PiBwYW5pYyEoIlVuc3VwcG9ydGVkIHZlcnNpb24uIiksCisgICAgfTsKICAgICBsZXQgZmlyc3Rfbm9kZSA9IFBhY2thZ2VUYWJsZU5vZGUgewogICAgICAgICBwYWNrYWdlX25hbWU6IFN0cmluZzo6ZnJvbSgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpLAogICAgICAgICBwYWNrYWdlX2lkOiAxLAorICAgICAgICBmaW5nZXJwcmludDogMCwKICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogMywKICAgICAgICAgbmV4dF9vZmZzZXQ6IE5vbmUsCiAgICAgfTsKICAgICBsZXQgc2Vjb25kX25vZGUgPSBQYWNrYWdlVGFibGVOb2RlIHsKICAgICAgICAgcGFja2FnZV9uYW1lOiBTdHJpbmc6OmZyb20oImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKSwKICAgICAgICAgcGFja2FnZV9pZDogMCwKKyAgICAgICAgZmluZ2VycHJpbnQ6IDAsCiAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAsCi0gICAgICAgIG5leHRfb2Zmc2V0OiBTb21lKDE1OSksCisgICAgICAgIG5leHRfb2Zmc2V0OiBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgICAgIDEgPT4gU29tZSgxNTkpLAorICAgICAgICAgICAgMiA9PiBTb21lKDE3NSksCisgICAgICAgICAgICBfID0+IHBhbmljISgiVW5zdXBwb3J0ZWQgdmVyc2lvbi4iKSwKKyAgICAgICAgfSwKICAgICB9OwogICAgIGxldCB0aGlyZF9ub2RlID0gUGFja2FnZVRhYmxlTm9kZSB7CiAgICAgICAgIHBhY2thZ2VfbmFtZTogU3RyaW5nOjpmcm9tKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiksCiAgICAgICAgIHBhY2thZ2VfaWQ6IDIsCisgICAgICAgIGZpbmdlcnByaW50OiAwLAogICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiA2LAogICAgICAgICBuZXh0X29mZnNldDogTm9uZSwKICAgICB9OwpAQCAtNzYsOSArOTEsOSBAQAogICAgIH0KIH0KIAotcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKSAtPiBGbGFnVGFibGUgeworcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUodmVyc2lvbjogdTMyKSAtPiBGbGFnVGFibGUgewogICAgIGxldCBoZWFkZXIgPSBGbGFnVGFibGVIZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiBERUZBVUxUX0ZJTEVfVkVSU0lPTiwKKyAgICAgICAgdmVyc2lvbjogdmVyc2lvbiwKICAgICAgICAgY29udGFpbmVyOiBTdHJpbmc6OmZyb20oIm1vY2t1cCIpLAogICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ01hcCBhcyB1OCwKICAgICAgICAgZmlsZV9zaXplOiAzMjEsCkBAIC0xMTgsOSArMTMzLDkgQEAKICAgICBGbGFnVGFibGUgeyBoZWFkZXIsIGJ1Y2tldHMsIG5vZGVzIH0KIH0KIAotcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpIC0+IEZsYWdWYWx1ZUxpc3QgeworcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCh2ZXJzaW9uOiB1MzIpIC0+IEZsYWdWYWx1ZUxpc3QgewogICAgIGxldCBoZWFkZXIgPSBGbGFnVmFsdWVIZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiBERUZBVUxUX0ZJTEVfVkVSU0lPTiwKKyAgICAgICAgdmVyc2lvbjogdmVyc2lvbiwKICAgICAgICAgY29udGFpbmVyOiBTdHJpbmc6OmZyb20oIm1vY2t1cCIpLAogICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ1ZhbCBhcyB1OCwKICAgICAgICAgZmlsZV9zaXplOiAzNSwKQEAgLTEzMSw5ICsxNDYsOSBAQAogICAgIEZsYWdWYWx1ZUxpc3QgeyBoZWFkZXIsIGJvb2xlYW5zIH0KIH0KIAotcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkgLT4gRmxhZ0luZm9MaXN0IHsKK3B1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCh2ZXJzaW9uOiB1MzIpIC0+IEZsYWdJbmZvTGlzdCB7CiAgICAgbGV0IGhlYWRlciA9IEZsYWdJbmZvSGVhZGVyIHsKLSAgICAgICAgdmVyc2lvbjogREVGQVVMVF9GSUxFX1ZFUlNJT04sCisgICAgICAgIHZlcnNpb246IHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKCJtb2NrdXAiKSwKICAgICAgICAgZmlsZV90eXBlOiBTdG9yYWdlRmlsZVR5cGU6OkZsYWdJbmZvIGFzIHU4LAogICAgICAgICBmaWxlX3NpemU6IDM1LApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0Fjb25maWdTdG9yYWdlRXhjZXB0aW9uLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uamF2YQppbmRleCA4NmE3NWYyLi5iMWM3ZWU3IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uamF2YQpAQCAtMTYsMTIgKzE2LDExOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlOwogCisvKioKKyAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgYWNjZXNzaW5nIEFjb25maWcgU3RvcmFnZS4KKyAqCisgKiA8cD5UaGlzIGV4Y2VwdGlvbiBpbmRpY2F0ZXMgYSBnZW5lcmFsIHByb2JsZW0gd2l0aCBBY29uZmlnIFN0b3JhZ2UsIHN1Y2ggYXMgYW4gaW5hYmlsaXR5IHRvIHJlYWQKKyAqIG9yIHdyaXRlIGRhdGEuCisgKi8KIHB1YmxpYyBjbGFzcyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geworCisgICAgLyoqIEdlbmVyaWMgZXJyb3IgY29kZSBpbmRpY2F0aW5nIGFuIHVuc3BlY2lmaWVkIEFjb25maWcgU3RvcmFnZSBlcnJvci4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9HRU5FUklDID0gMDsKKworICAgIC8qKiBFcnJvciBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgQWNvbmZpZyBTdG9yYWdlIHN5c3RlbSBpcyBub3QgZm91bmQgb24gdGhlIGRldmljZS4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9TVE9SQUdFX1NZU1RFTV9OT1RfRk9VTkQgPSAxOworCisgICAgLyoqIEVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbiBwYWNrYWdlIGlzIG5vdCBmb3VuZC4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9QQUNLQUdFX05PVF9GT1VORCA9IDI7CisKKyAgICAvKiogRXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHNwZWNpZmllZCBjb250YWluZXIgaXMgbm90IGZvdW5kLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0NPTlRBSU5FUl9OT1RfRk9VTkQgPSAzOworCisgICAgLyoqIEVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBBY29uZmlnIFN0b3JhZ2UgZmlsZS4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUgPSA0OworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUVycm9yQ29kZTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0Bjb2RlIEFjb25maWdTdG9yYWdlRXhjZXB0aW9ufSB3aXRoIGEgZ2VuZXJpYyBlcnJvciBjb2RlIGFuZCB0aGUgc3BlY2lmaWVkCisgICAgICogZGV0YWlsIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbXNnIFRoZSBkZXRhaWwgbWVzc2FnZSBmb3IgdGhpcyBleGNlcHRpb24uCisgICAgICovCiAgICAgcHVibGljIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKFN0cmluZyBtc2cpIHsKICAgICAgICAgc3VwZXIobXNnKTsKKyAgICAgICAgbUVycm9yQ29kZSA9IEVSUk9SX0dFTkVSSUM7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb259IHdpdGggYSBnZW5lcmljIGVycm9yIGNvZGUsIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBkZXRhaWwgbWVzc2FnZSwgYW5kIGNhdXNlLgorICAgICAqCisgICAgICogQHBhcmFtIG1zZyBUaGUgZGV0YWlsIG1lc3NhZ2UgZm9yIHRoaXMgZXhjZXB0aW9uLgorICAgICAqIEBwYXJhbSBjYXVzZSBUaGUgY2F1c2Ugb2YgdGhpcyBleGNlcHRpb24uCisgICAgICovCiAgICAgcHVibGljIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSBjYXVzZSkgewogICAgICAgICBzdXBlcihtc2csIGNhdXNlKTsKKyAgICAgICAgbUVycm9yQ29kZSA9IEVSUk9SX0dFTkVSSUM7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb259IHdpdGggdGhlIHNwZWNpZmllZCBlcnJvciBjb2RlIGFuZCBkZXRhaWwKKyAgICAgKiBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBUaGUgZXJyb3IgY29kZSBmb3IgdGhpcyBleGNlcHRpb24uCisgICAgICogQHBhcmFtIG1zZyBUaGUgZGV0YWlsIG1lc3NhZ2UgZm9yIHRoaXMgZXhjZXB0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbihpbnQgZXJyb3JDb2RlLCBTdHJpbmcgbXNnKSB7CisgICAgICAgIHN1cGVyKG1zZyk7CisgICAgICAgIG1FcnJvckNvZGUgPSBlcnJvckNvZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb259IHdpdGggdGhlIHNwZWNpZmllZCBlcnJvciBjb2RlLCBkZXRhaWwKKyAgICAgKiBtZXNzYWdlLCBhbmQgY2F1c2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIFRoZSBlcnJvciBjb2RlIGZvciB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKiBAcGFyYW0gbXNnIFRoZSBkZXRhaWwgbWVzc2FnZSBmb3IgdGhpcyBleGNlcHRpb24uCisgICAgICogQHBhcmFtIGNhdXNlIFRoZSBjYXVzZSBvZiB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oaW50IGVycm9yQ29kZSwgU3RyaW5nIG1zZywgVGhyb3dhYmxlIGNhdXNlKSB7CisgICAgICAgIHN1cGVyKG1zZywgY2F1c2UpOworICAgICAgICBtRXJyb3JDb2RlID0gZXJyb3JDb2RlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGVycm9yIGNvZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXhjZXB0aW9uLgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgZXJyb3IgY29kZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEVycm9yQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIG1FcnJvckNvZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhpcyBleGNlcHRpb24sIGluY2x1ZGluZyB0aGUgZXJyb3IgY29kZSBhbmQgdGhlIG9yaWdpbmFsCisgICAgICogbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGVycm9yIG1lc3NhZ2UuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICByZXR1cm4gZXJyb3JTdHJpbmcoKSArICI6ICIgKyBzdXBlci5nZXRNZXNzYWdlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgY29kZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGVycm9yIGNvZGUgc3RyaW5nLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGVycm9yU3RyaW5nKCkgeworICAgICAgICBzd2l0Y2ggKG1FcnJvckNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfR0VORVJJQzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SX0dFTkVSSUMiOworICAgICAgICAgICAgY2FzZSBFUlJPUl9TVE9SQUdFX1NZU1RFTV9OT1RfRk9VTkQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFUlJPUl9TVE9SQUdFX1NZU1RFTV9OT1RfRk9VTkQiOworICAgICAgICAgICAgY2FzZSBFUlJPUl9QQUNLQUdFX05PVF9GT1VORDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5EIjsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfQ09OVEFJTkVSX05PVF9GT1VORDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SX0NPTlRBSU5FUl9OT1RfRk9VTkQiOworICAgICAgICAgICAgY2FzZSBFUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEU6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUiOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIjxVbmtub3duIGVycm9yIGNvZGUgIiArIG1FcnJvckNvZGUgKyAiPiI7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQnl0ZUJ1ZmZlclJlYWRlci5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0J5dGVCdWZmZXJSZWFkZXIuamF2YQppbmRleCA0YmVhMDgzLi45NTcxNTY4IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQnl0ZUJ1ZmZlclJlYWRlci5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9CeXRlQnVmZmVyUmVhZGVyLmphdmEKQEAgLTQxLDggKzQxLDE2IEBACiAgICAgICAgIHJldHVybiB0aGlzLm1CeXRlQnVmZmVyLmdldEludCgpOwogICAgIH0KIAorICAgIHB1YmxpYyBsb25nIHJlYWRMb25nKCkgeworICAgICAgICByZXR1cm4gdGhpcy5tQnl0ZUJ1ZmZlci5nZXRMb25nKCk7CisgICAgfQorCiAgICAgcHVibGljIFN0cmluZyByZWFkU3RyaW5nKCkgewogICAgICAgICBpbnQgbGVuZ3RoID0gcmVhZEludCgpOworICAgICAgICBpZiAobGVuZ3RoID4gMTAyNCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIGxlbmd0aCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplICgxMDI0IGJ5dGVzKTogIiArIGxlbmd0aCk7CisgICAgICAgIH0KICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbbGVuZ3RoXTsKICAgICAgICAgbUJ5dGVCdWZmZXIuZ2V0KGJ5dGVzLCAwLCBsZW5ndGgpOwogICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhieXRlcywgU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvUGFja2FnZVRhYmxlLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvUGFja2FnZVRhYmxlLmphdmEKaW5kZXggMzliN2U1OS4uYTQ1ZDEyYSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1BhY2thZ2VUYWJsZS5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9QYWNrYWdlVGFibGUuamF2YQpAQCAtMTI0LDggKzEyNCwxMCBAQAogCiAgICAgICAgIHByaXZhdGUgU3RyaW5nIG1QYWNrYWdlTmFtZTsKICAgICAgICAgcHJpdmF0ZSBpbnQgbVBhY2thZ2VJZDsKKyAgICAgICAgcHJpdmF0ZSBsb25nIG1QYWNrYWdlRmluZ2VycHJpbnQ7CiAgICAgICAgIHByaXZhdGUgaW50IG1Cb29sZWFuU3RhcnRJbmRleDsKICAgICAgICAgcHJpdmF0ZSBpbnQgbU5leHRPZmZzZXQ7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzUGFja2FnZUZpbmdlcnByaW50OwogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIE5vZGUgZnJvbUJ5dGVzKEJ5dGVCdWZmZXJSZWFkZXIgcmVhZGVyLCBpbnQgdmVyc2lvbikgewogICAgICAgICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7CkBAIC0xNTMsOSArMTU1LDExIEBACiAgICAgICAgICAgICBOb2RlIG5vZGUgPSBuZXcgTm9kZSgpOwogICAgICAgICAgICAgbm9kZS5tUGFja2FnZU5hbWUgPSByZWFkZXIucmVhZFN0cmluZygpOwogICAgICAgICAgICAgbm9kZS5tUGFja2FnZUlkID0gcmVhZGVyLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG5vZGUubVBhY2thZ2VGaW5nZXJwcmludCA9IHJlYWRlci5yZWFkTG9uZygpOwogICAgICAgICAgICAgbm9kZS5tQm9vbGVhblN0YXJ0SW5kZXggPSByZWFkZXIucmVhZEludCgpOwogICAgICAgICAgICAgbm9kZS5tTmV4dE9mZnNldCA9IHJlYWRlci5yZWFkSW50KCk7CiAgICAgICAgICAgICBub2RlLm1OZXh0T2Zmc2V0ID0gbm9kZS5tTmV4dE9mZnNldCA9PSAwID8gLTEgOiBub2RlLm1OZXh0T2Zmc2V0OworICAgICAgICAgICAgbm9kZS5tSGFzUGFja2FnZUZpbmdlcnByaW50ID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAKQEAgLTE4OSw2ICsxOTMsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBtUGFja2FnZUlkOwogICAgICAgICB9CiAKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0UGFja2FnZUZpbmdlcnByaW50KCkgeworICAgICAgICAgICAgcmV0dXJuIG1QYWNrYWdlRmluZ2VycHJpbnQ7CisgICAgICAgIH0KKwogICAgICAgICBwdWJsaWMgaW50IGdldEJvb2xlYW5TdGFydEluZGV4KCkgewogICAgICAgICAgICAgcmV0dXJuIG1Cb29sZWFuU3RhcnRJbmRleDsKICAgICAgICAgfQpAQCAtMTk2LDUgKzIwNCw5IEBACiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0TmV4dE9mZnNldCgpIHsKICAgICAgICAgICAgIHJldHVybiBtTmV4dE9mZnNldDsKICAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc1BhY2thZ2VGaW5nZXJwcmludCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSGFzUGFja2FnZUZpbmdlcnByaW50OworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IDEzZDMyMTQuLmJkNDZkNWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTEwLDEwICsxMCwxNCBAQAogICAgICAgICAibGliYmFzZSIsCiAgICAgXSwKICAgICBkYXRhOiBbCi0gICAgICAgICJkYXRhL3YxL3BhY2thZ2UubWFwIiwKLSAgICAgICAgImRhdGEvdjEvZmxhZy5tYXAiLAotICAgICAgICAiZGF0YS92MS9mbGFnLnZhbCIsCi0gICAgICAgICJkYXRhL3YxL2ZsYWcuaW5mbyIsCisgICAgICAgICJkYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLnZhbCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEuaW5mbyIsCisgICAgICAgICJkYXRhL3YyL3BhY2thZ2VfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLnZhbCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIuaW5mbyIsCiAgICAgXSwKICAgICB0ZXN0X3N1aXRlczogWwogICAgICAgICAiZGV2aWNlLXRlc3RzIiwKQEAgLTM1LDEwICszOSwxNCBAQAogICAgIHRlc3RfY29uZmlnOiAiQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwiLAogICAgIHNka192ZXJzaW9uOiAidGVzdF9jdXJyZW50IiwKICAgICBkYXRhOiBbCi0gICAgICAgICJkYXRhL3YxL3BhY2thZ2UubWFwIiwKLSAgICAgICAgImRhdGEvdjEvZmxhZy5tYXAiLAotICAgICAgICAiZGF0YS92MS9mbGFnLnZhbCIsCi0gICAgICAgICJkYXRhL3YxL2ZsYWcuaW5mbyIsCisgICAgICAgICJkYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLnZhbCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEuaW5mbyIsCisgICAgICAgICJkYXRhL3YyL3BhY2thZ2VfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLnZhbCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIuaW5mbyIsCiAgICAgXSwKICAgICB0ZXN0X3N1aXRlczogWwogICAgICAgICAiZ2VuZXJhbC10ZXN0cyIsCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbAppbmRleCAyZDUyZDQ0Li4yMGZiZmRiIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwKQEAgLTIxLDEzICsyMSwxNyBAQAogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLmNvbXBhdGliaWxpdHkuY29tbW9uLnRyYWRlZmVkLnRhcmdldHByZXAuRmlsZVB1c2hlciI+CiAgICAgICAgIDxvcHRpb24gbmFtZT0iY2xlYW51cCIgdmFsdWU9InRydWUiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9InBhY2thZ2UubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL3BhY2thZ2UubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnLm1hcCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZy52YWwtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvZmxhZy52YWwiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWcuaW5mby0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnLmluZm8iIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9InBhY2thZ2VfdjEubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL3BhY2thZ2VfdjEubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YxLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnX3YxLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192MS52YWwtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvZmxhZ192MS52YWwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjEuaW5mby0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnX3YxLmluZm8iIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9InBhY2thZ2VfdjIubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL3BhY2thZ2VfdjIubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnX3YyLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192Mi52YWwtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvZmxhZ192Mi52YWwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjIuaW5mby0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnX3YyLmluZm8iIC8+CiAgICAgPC90YXJnZXRfcHJlcGFyZXI+CiAgICAgPHRlc3QgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRlc3R0eXBlLkFuZHJvaWRKVW5pdFRlc3QiID4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJwYWNrYWdlIiB2YWx1ZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCIgLz4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJydW50aW1lLWhpbnQiIHZhbHVlPSIxbSIgLz4KICAgICA8L3Rlc3Q+Ci08L2NvbmZpZ3VyYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWcuaW5mbyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnLmluZm8KcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWcubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZy5tYXAKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnLnZhbApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9wYWNrYWdlLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL3BhY2thZ2UubWFwCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIuaW5mbyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiN2ZkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDY4NWMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDQ3NTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi52YWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjQwNTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdUYWJsZVRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVGFibGVUZXN0LmphdmEKaW5kZXggZmQ0MGQ0Yy4uZGM0NjViNiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdUYWJsZVRlc3QuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1RhYmxlVGVzdC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RGbGFnVGFibGVfcmlnaHRIZWFkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoKSk7CisgICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKDEpKTsKICAgICAgICAgRmxhZ1RhYmxlLkhlYWRlciBoZWFkZXIgPSBmbGFnVGFibGUuZ2V0SGVhZGVyKCk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBoZWFkZXIuZ2V0VmVyc2lvbigpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtb2NrdXAiLCBoZWFkZXIuZ2V0Q29udGFpbmVyKCkpOwpAQCAtNDQsNyArNDQsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1RhYmxlX3JpZ2h0Tm9kZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIEZsYWdUYWJsZS5Ob2RlIG5vZGUxID0gZmxhZ1RhYmxlLmdldCgwLCAiZW5hYmxlZF9ybyIpOwogICAgICAgICBGbGFnVGFibGUuTm9kZSBub2RlMiA9IGZsYWdUYWJsZS5nZXQoMCwgImVuYWJsZWRfcnciKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdWYWx1ZUxpc3RUZXN0LmphdmEKaW5kZXggMWIwZGU2My4uMzA2ZGY3ZCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdWYWx1ZUxpc3RUZXN0LmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdWYWx1ZUxpc3RUZXN0LmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RGbGFnVmFsdWVMaXN0X3JpZ2h0SGVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIEZsYWdWYWx1ZUxpc3QgZmxhZ1ZhbHVlTGlzdCA9Ci0gICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoKSk7CisgICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoMSkpOwogICAgICAgICBGbGFnVmFsdWVMaXN0LkhlYWRlciBoZWFkZXIgPSBmbGFnVmFsdWVMaXN0LmdldEhlYWRlcigpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgaGVhZGVyLmdldFZlcnNpb24oKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygibW9ja3VwIiwgaGVhZGVyLmdldENvbnRhaW5lcigpKTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RGbGFnVmFsdWVMaXN0X3JpZ2h0Tm9kZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBGbGFnVmFsdWVMaXN0IGZsYWdWYWx1ZUxpc3QgPQotICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKDEpKTsKIAogICAgICAgICBib29sZWFuW10gZXhwZWN0ZWQgPSBuZXcgYm9vbGVhbltdIHtmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWV9OwogICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQubGVuZ3RoLCBmbGFnVmFsdWVMaXN0LnNpemUoKSk7CkBAIC02MCwxMSArNjAsMTEgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RGbGFnVmFsdWVMaXN0X2dldFZhbHVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPQotICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoKSk7Ci0gICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMSkpOworICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigxKSk7CiAKICAgICAgICAgRmxhZ1ZhbHVlTGlzdCBmbGFnVmFsdWVMaXN0ID0KLSAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigxKSk7CiAKICAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIik7CiAgICAgICAgIEZsYWdUYWJsZS5Ob2RlIGZOb2RlID0gZmxhZ1RhYmxlLmdldChwTm9kZS5nZXRQYWNrYWdlSWQoKSwgImVuYWJsZWRfcnciKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9QYWNrYWdlVGFibGVUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvUGFja2FnZVRhYmxlVGVzdC5qYXZhCmluZGV4IGU3ZTE5ZDguLjRkN2FiMmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9QYWNrYWdlVGFibGVUZXN0LmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1BhY2thZ2VUYWJsZVRlc3QuamF2YQpAQCAtMTcsNiArMTcsOCBAQAogcGFja2FnZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0OwogCiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GaWxlVHlwZTsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGU7CkBAIC0zMSw3ICszMyw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZVRhYmxlX3JpZ2h0SGVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPQotICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoKSk7CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigxKSk7CiAgICAgICAgIFBhY2thZ2VUYWJsZS5IZWFkZXIgaGVhZGVyID0gcGFja2FnZVRhYmxlLmdldEhlYWRlcigpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgaGVhZGVyLmdldFZlcnNpb24oKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygibW9ja3VwIiwgaGVhZGVyLmdldENvbnRhaW5lcigpKTsKQEAgLTQzLDkgKzQ1LDIzIEBACiAgICAgfQogCiAgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZVRhYmxlX3JpZ2h0SGVhZGVyX3YyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPQorICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMikpOworICAgICAgICBQYWNrYWdlVGFibGUuSGVhZGVyIGhlYWRlciA9IHBhY2thZ2VUYWJsZS5nZXRIZWFkZXIoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGhlYWRlci5nZXRWZXJzaW9uKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2t1cCIsIGhlYWRlci5nZXRDb250YWluZXIoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhGaWxlVHlwZS5QQUNLQUdFX01BUCwgaGVhZGVyLmdldEZpbGVUeXBlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMjMzLCBoZWFkZXIuZ2V0RmlsZVNpemUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygzLCBoZWFkZXIuZ2V0TnVtUGFja2FnZXMoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygzMSwgaGVhZGVyLmdldEJ1Y2tldE9mZnNldCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDU5LCBoZWFkZXIuZ2V0Tm9kZU9mZnNldCgpKTsKKyAgICB9CisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlVGFibGVfcmlnaHROb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPQotICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoKSk7CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigxKSk7CiAKICAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgbm9kZTEgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIik7CiAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUyID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpOwpAQCAtNjYsNSArODIsMzkgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKDE1OSwgbm9kZTEuZ2V0TmV4dE9mZnNldCgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKC0xLCBub2RlMi5nZXROZXh0T2Zmc2V0KCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoLTEsIG5vZGU0LmdldE5leHRPZmZzZXQoKSk7CisKKyAgICAgICAgYXNzZXJ0RmFsc2Uobm9kZTEuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOworICAgICAgICBhc3NlcnRGYWxzZShub2RlMi5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisgICAgICAgIGFzc2VydEZhbHNlKG5vZGU0Lmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RQYWNrYWdlVGFibGVfcmlnaHROb2RlX3YyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPQorICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMikpOworCisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOworICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMiA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKTsKKyAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgbm9kZTQgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80Iik7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgbm9kZTEuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsIG5vZGUyLmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLCBub2RlNC5nZXRQYWNrYWdlTmFtZSgpKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbm9kZTEuZ2V0UGFja2FnZUlkKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZTIuZ2V0UGFja2FnZUlkKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbm9kZTQuZ2V0UGFja2FnZUlkKCkpOworCisgICAgICAgIGFzc2VydEVxdWFscygwLCBub2RlMS5nZXRCb29sZWFuU3RhcnRJbmRleCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIG5vZGUyLmdldEJvb2xlYW5TdGFydEluZGV4KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoNiwgbm9kZTQuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDE3NSwgbm9kZTEuZ2V0TmV4dE9mZnNldCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKC0xLCBub2RlMi5nZXROZXh0T2Zmc2V0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoLTEsIG5vZGU0LmdldE5leHRPZmZzZXQoKSk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZShub2RlMS5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisgICAgICAgIGFzc2VydFRydWUobm9kZTIuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOworICAgICAgICBhc3NlcnRUcnVlKG5vZGU0Lmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvVGVzdERhdGFVdGlscy5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1Rlc3REYXRhVXRpbHMuamF2YQppbmRleCBmMzU5NTJkLi4wNjQzMTU0IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvVGVzdERhdGFVdGlscy5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9UZXN0RGF0YVV0aWxzLmphdmEKQEAgLTIxLDI4ICsyMSwyOCBAQAogaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CiAKIHB1YmxpYyBmaW5hbCBjbGFzcyBUZXN0RGF0YVV0aWxzIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QQUNLQUdFX01BUF9QQVRIID0gInBhY2thZ2UubWFwIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX01BUF9QQVRIID0gImZsYWcubWFwIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX1ZBTF9QQVRIID0gImZsYWcudmFsIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX0lORk9fUEFUSCA9ICJmbGFnLmluZm8iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BBQ0tBR0VfTUFQX1BBVEggPSAicGFja2FnZV92JWQubWFwIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX01BUF9QQVRIID0gImZsYWdfdiVkLm1hcCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19WQUxfUEFUSCA9ICJmbGFnX3YlZC52YWwiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfSU5GT19QQVRIID0gImZsYWdfdiVkLmluZm8iOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1REQVRBX1BBVEggPQogICAgICAgICAgICAgIi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvIjsKIAotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBURVNUX1BBQ0tBR0VfTUFQX1BBVEgpOworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoaW50IHZlcnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFN0cmluZy5mb3JtYXQoVEVTVF9QQUNLQUdFX01BUF9QQVRILCB2ZXJzaW9uKSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFRFU1RfRkxBR19NQVBfUEFUSCk7CisgICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcihpbnQgdmVyc2lvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgU3RyaW5nLmZvcm1hdChURVNUX0ZMQUdfTUFQX1BBVEgsIHZlcnNpb24pKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9GTEFHX1ZBTF9QQVRIKTsKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKGludCB2ZXJzaW9uKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBTdHJpbmcuZm9ybWF0KFRFU1RfRkxBR19WQUxfUEFUSCwgdmVyc2lvbikpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0RmxhZ0luZm9CeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9GTEFHX0lORk9fUEFUSCk7CisgICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnSW5mb0J5dGVCdWZmZXIoaW50IHZlcnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFN0cmluZy5mb3JtYXQoVEVTVF9GTEFHX0lORk9fUEFUSCwgdmVyc2lvbikpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIEJ5dGVCdWZmZXIgcmVhZEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3RvcmFnZV9maWxlX3Rlc3QuY3BwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAKaW5kZXggMzYyNmY3Mi4uNWMwMDhhZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAKQEAgLTI0LDEwICsyNCw4IEBACiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6YmFzZTsKIHVzaW5nIG5hbWVzcGFjZSBhY29uZmlnX3N0b3JhZ2U7CiAKLXZvaWQgdmVyaWZ5X3ZhbHVlKGNvbnN0IEZsYWdWYWx1ZVN1bW1hcnkmIGZsYWcsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGFja2FnZV9uYW1lLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWdfbmFtZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX3ZhbCwKK3ZvaWQgdmVyaWZ5X3ZhbHVlKGNvbnN0IEZsYWdWYWx1ZVN1bW1hcnkmIGZsYWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYWNrYWdlX25hbWUsCisgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ19uYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ192YWwsCiAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWVfdHlwZSkgewogICBBU1NFUlRfRVEoZmxhZy5wYWNrYWdlX25hbWUsIHBhY2thZ2VfbmFtZSk7CiAgIEFTU0VSVF9FUShmbGFnLmZsYWdfbmFtZSwgZmxhZ19uYW1lKTsKQEAgLTM5LDEwICszNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYWNrYWdlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcmVhZHdyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc19zZXJ2ZXJfb3ZlcnJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzX2xvY2FsX292ZXJyaWRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZV90eXBlLCBib29sIGlzX3JlYWR3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNfc2VydmVyX292ZXJyaWRlLCBib29sIGhhc19sb2NhbF9vdmVycmlkZSkgewogICBBU1NFUlRfRVEoZmxhZy5wYWNrYWdlX25hbWUsIHBhY2thZ2VfbmFtZSk7CiAgIEFTU0VSVF9FUShmbGFnLmZsYWdfbmFtZSwgZmxhZ19uYW1lKTsKICAgQVNTRVJUX0VRKGZsYWcuZmxhZ192YWx1ZSwgZmxhZ192YWwpOwpAQCAtNTIsNjMgKzQ4LDEzNyBAQAogICBBU1NFUlRfRVEoZmxhZy5oYXNfbG9jYWxfb3ZlcnJpZGUsIGhhc19sb2NhbF9vdmVycmlkZSk7CiB9CiAKLVRFU1QoQWNvbmZpZ1N0b3JhZ2VGaWxlVGVzdCwgdGVzdF9saXN0X2ZsYWcpIHsKK1Jlc3VsdDxzdGQ6OnZlY3RvcjxGbGFnVmFsdWVTdW1tYXJ5Pj4gZ2V0X2ZsYWdfbGlzdF9yZXN1bHQoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgdmVyc2lvbikgewogICBhdXRvIGNvbnN0IHRlc3RfYmFzZV9kaXIgPSBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5KCk7Ci0gIGF1dG8gY29uc3QgdGVzdF9kaXIgPSB0ZXN0X2Jhc2VfZGlyICsgIi9kYXRhL3YxIjsKLSAgYXV0byBjb25zdCBwYWNrYWdlX21hcCA9IHRlc3RfZGlyICsgIi9wYWNrYWdlLm1hcCI7Ci0gIGF1dG8gY29uc3QgZmxhZ19tYXAgPSB0ZXN0X2RpciArICIvZmxhZy5tYXAiOwotICBhdXRvIGNvbnN0IGZsYWdfdmFsID0gdGVzdF9kaXIgKyAiL2ZsYWcudmFsIjsKLSAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gYWNvbmZpZ19zdG9yYWdlOjpsaXN0X2ZsYWdzKAotICAgICAgcGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCk7CisgIGF1dG8gY29uc3QgdGVzdF9kaXIgPSB0ZXN0X2Jhc2VfZGlyICsgIi9kYXRhL3YiICsgdmVyc2lvbjsKKyAgYXV0byBjb25zdCBwYWNrYWdlX21hcCA9IHRlc3RfZGlyICsgIi9wYWNrYWdlX3YiICsgdmVyc2lvbiArICIubWFwIjsKKyAgYXV0byBjb25zdCBmbGFnX21hcCA9IHRlc3RfZGlyICsgIi9mbGFnX3YiICsgdmVyc2lvbiArICIubWFwIjsKKyAgYXV0byBjb25zdCBmbGFnX3ZhbCA9IHRlc3RfZGlyICsgIi9mbGFnX3YiICsgdmVyc2lvbiArICIudmFsIjsKKyAgcmV0dXJuIGFjb25maWdfc3RvcmFnZTo6bGlzdF9mbGFncyhwYWNrYWdlX21hcCwgZmxhZ19tYXAsIGZsYWdfdmFsKTsKK30KKworUmVzdWx0PHN0ZDo6dmVjdG9yPEZsYWdWYWx1ZUFuZEluZm9TdW1tYXJ5Pj4gZ2V0X2ZsYWdfbGlzdF9yZXN1bHRfd2l0aF9pbmZvKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHZlcnNpb24pIHsKKyAgYXV0byBjb25zdCB0ZXN0X2Jhc2VfZGlyID0gR2V0RXhlY3V0YWJsZURpcmVjdG9yeSgpOworICBhdXRvIGNvbnN0IHRlc3RfZGlyID0gdGVzdF9iYXNlX2RpciArICIvZGF0YS92IiArIHZlcnNpb247CisgIGF1dG8gY29uc3QgcGFja2FnZV9tYXAgPSB0ZXN0X2RpciArICIvcGFja2FnZV92IiArIHZlcnNpb24gKyAiLm1hcCI7CisgIGF1dG8gY29uc3QgZmxhZ19tYXAgPSB0ZXN0X2RpciArICIvZmxhZ192IiArIHZlcnNpb24gKyAiLm1hcCI7CisgIGF1dG8gY29uc3QgZmxhZ192YWwgPSB0ZXN0X2RpciArICIvZmxhZ192IiArIHZlcnNpb24gKyAiLnZhbCI7CisgIGF1dG8gY29uc3QgZmxhZ19pbmZvID0gdGVzdF9kaXIgKyAiL2ZsYWdfdiIgKyB2ZXJzaW9uICsgIi5pbmZvIjsKKyAgcmV0dXJuIGFjb25maWdfc3RvcmFnZTo6bGlzdF9mbGFnc193aXRoX2luZm8ocGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19pbmZvKTsKK30KKworVEVTVChBY29uZmlnU3RvcmFnZUZpbGVUZXN0LCB0ZXN0X2xpc3RfZmxhZykgeworICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBnZXRfZmxhZ19saXN0X3Jlc3VsdCgiMSIpOwogICBBU1NFUlRfVFJVRShmbGFnX2xpc3RfcmVzdWx0Lm9rKCkpOwogCiAgIGF1dG8gY29uc3QmIGZsYWdfbGlzdCA9ICpmbGFnX2xpc3RfcmVzdWx0OwogICBBU1NFUlRfRVEoZmxhZ19saXN0LnNpemUoKSwgOCk7Ci0gIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImRpc2FibGVkX3J3IiwKLSAgICAgICAgICAgICAgICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CiAgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcm8iLAogICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIik7CiAgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcnciLAogICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOwotICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJkaXNhYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOwotICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJlbmFibGVkX2ZpeGVkX3JvIiwKLSAgICAgICAgICAgICAgICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKICAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs1XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCAiZW5hYmxlZF9ybyIsCiAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iKTsKLSAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLCAiZW5hYmxlZF9maXhlZF9ybyIsCi0gICAgICAgICAgICAgICAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsCisgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbN10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwgImVuYWJsZWRfcnciLAorICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOworfQorCisvLyBUT0RPOiBiLzM3NjI1NjQ3MiAtIFVzZSBwYXJhbWV0ZXJpemVkIHRlc3RzLgorVEVTVChBY29uZmlnU3RvcmFnZUZpbGVUZXN0LCB0ZXN0X2xpc3RfZmxhZ192MikgeworICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBnZXRfZmxhZ19saXN0X3Jlc3VsdCgiMiIpOworICBBU1NFUlRfVFJVRShmbGFnX2xpc3RfcmVzdWx0Lm9rKCkpOworCisgIGF1dG8gY29uc3QmIGZsYWdfbGlzdCA9ICpmbGFnX2xpc3RfcmVzdWx0OworICBBU1NFUlRfRVEoZmxhZ19saXN0LnNpemUoKSwgOCk7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcm8iLAorICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcnciLAorICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfcm8iLAorICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKICAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs3XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLCAiZW5hYmxlZF9ydyIsCiAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CiB9CiAKIFRFU1QoQWNvbmZpZ1N0b3JhZ2VGaWxlVGVzdCwgdGVzdF9saXN0X2ZsYWdfd2l0aF9pbmZvKSB7Ci0gIGF1dG8gY29uc3QgYmFzZV90ZXN0X2RpciA9IEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKTsKLSAgYXV0byBjb25zdCB0ZXN0X2RpciA9IGJhc2VfdGVzdF9kaXIgKyAiL2RhdGEvdjEiOwotICBhdXRvIGNvbnN0IHBhY2thZ2VfbWFwID0gdGVzdF9kaXIgKyAiL3BhY2thZ2UubWFwIjsKLSAgYXV0byBjb25zdCBmbGFnX21hcCA9IHRlc3RfZGlyICsgIi9mbGFnLm1hcCI7Ci0gIGF1dG8gY29uc3QgZmxhZ192YWwgPSB0ZXN0X2RpciArICIvZmxhZy52YWwiOwotICBhdXRvIGNvbnN0IGZsYWdfaW5mbyA9IHRlc3RfZGlyICsgIi9mbGFnLmluZm8iOwotICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBhY29uZmlnX3N0b3JhZ2U6Omxpc3RfZmxhZ3Nfd2l0aF9pbmZvKAotICAgICAgcGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCwgZmxhZ19pbmZvKTsKKyAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gZ2V0X2ZsYWdfbGlzdF9yZXN1bHRfd2l0aF9pbmZvKCIxIik7CiAgIEFTU0VSVF9UUlVFKGZsYWdfbGlzdF9yZXN1bHQub2soKSk7CiAKICAgYXV0byBjb25zdCYgZmxhZ19saXN0ID0gKmZsYWdfbGlzdF9yZXN1bHQ7CiAgIEFTU0VSVF9FUShmbGFnX2xpc3Quc2l6ZSgpLCA4KTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzBdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJkaXNhYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAgICAgICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzFdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJlbmFibGVkX3JvIiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsyXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImRpc2FibGVkX3J3IiwKLSAgICAgICAgICAgICAgICAgICAgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfZml4ZWRfcm8iLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfcm8iLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX2ZpeGVkX3JvIiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzddLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX3J3IiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsxXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ybyIsICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcnciLCAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzVdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3JvIiwgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs3XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ydyIsICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworfQorCitURVNUKEFjb25maWdTdG9yYWdlRmlsZVRlc3QsIHRlc3RfbGlzdF9mbGFnX3dpdGhfaW5mb192MikgeworICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBnZXRfZmxhZ19saXN0X3Jlc3VsdF93aXRoX2luZm8oIjIiKTsKKyAgQVNTRVJUX1RSVUUoZmxhZ19saXN0X3Jlc3VsdC5vaygpKTsKKworICBhdXRvIGNvbnN0JiBmbGFnX2xpc3QgPSAqZmxhZ19saXN0X3Jlc3VsdDsKKyAgQVNTRVJUX0VRKGZsYWdfbGlzdC5zaXplKCksIDgpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcm8iLCAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzJdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3J3IiwgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFszXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs0XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs1XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ybyIsICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbN10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcnciLCAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9BbmRyb2lkLmJwCmluZGV4IDgwYjhlY2UuLjdmN2RkNWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvQW5kcm9pZC5icApAQCAtMzYsMTAgKzM2LDEwIEBACiAgICAgICAgICJsaWJyYW5kIiwKICAgICBdLAogICAgIGRhdGE6IFsKLSAgICAgICAgInRlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAiLAotICAgICAgICAidGVzdHMvZGF0YS92MS9mbGFnLm1hcCIsCi0gICAgICAgICJ0ZXN0cy9kYXRhL3YxL2ZsYWcudmFsIiwKLSAgICAgICAgInRlc3RzL2RhdGEvdjEvZmxhZy5pbmZvIiwKKyAgICAgICAgInRlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiLAorICAgICAgICAidGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcCIsCisgICAgICAgICJ0ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsIiwKKyAgICAgICAgInRlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvIiwKICAgICBdLAogfQogCkBAIC0xNTQsNiArMTU0LDggQEAKIGphdmFfbGlicmFyeSB7CiAgICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9yZWFkZXJfamF2YSIsCiAgICAgc3JjczogWworICAgICAgICAic3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9BY29uZmlnUGFja2FnZUltcGwuamF2YSIsCisgICAgICAgICJzcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YSIsCiAgICAgICAgICJzcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VJbnRlcm5hbFJlYWRlci5qYXZhIiwKICAgICBdLAogICAgIGxpYnM6IFsKQEAgLTE3NSw2ICsxNzcsOCBAQAogamF2YV9saWJyYXJ5IHsKICAgICBuYW1lOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRlcl9qYXZhX25vbmUiLAogICAgIHNyY3M6IFsKKyAgICAgICAgInNyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1BhY2thZ2VJbXBsLmphdmEiLAorICAgICAgICAic3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlRmlsZVByb3ZpZGVyLmphdmEiLAogICAgICAgICAic3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlSW50ZXJuYWxSZWFkZXIuamF2YSIsCiAgICAgXSwKICAgICBsaWJzOiBbCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ19pbmZvX3F1ZXJ5LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfaW5mb19xdWVyeS5ycwppbmRleCBmZTU3YTZkLi42OGI2MTkzIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ19pbmZvX3F1ZXJ5LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX2luZm9fcXVlcnkucnMKQEAgLTU1LDEyICs1NSwxNCBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCwgRmxhZ0luZm9CaXR9OworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6eworICAgICAgICB0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCwgRmxhZ0luZm9CaXQsIERFRkFVTFRfRklMRV9WRVJTSU9OLAorICAgIH07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgaWYgZmxhZyBoYXMgc2VydmVyIG92ZXJyaWRlCiAgICAgZm4gdGVzdF9pc19mbGFnX3N0aWNreSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGZvciBvZmZzZXQgaW4gMC4uOCB7CiAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0KICAgICAgICAgICAgICAgICBmaW5kX2ZsYWdfYXR0cmlidXRlKCZmbGFnX2luZm9fbGlzdFsuLl0sIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIG9mZnNldCkudW53cmFwKCk7CkBAIC03MSw3ICs3Myw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGlmIGZsYWcgaXMgcmVhZHdyaXRlCiAgICAgZm4gdGVzdF9pc19mbGFnX3JlYWR3cml0ZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBiYXNlbGluZTogVmVjPGJvb2w+ID0gdmVjIVt0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV07CiAgICAgICAgIGZvciBvZmZzZXQgaW4gMC4uOCB7CiAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0KQEAgLTg2LDcgKzg4LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgaWYgZmxhZyBoYXMgbG9jYWwgb3ZlcnJpZGUKICAgICBmbiB0ZXN0X2ZsYWdfaGFzX292ZXJyaWRlKCkgewotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgZm9yIG9mZnNldCBpbiAwLi44IHsKICAgICAgICAgICAgIGxldCBhdHRyaWJ1dGUgPQogICAgICAgICAgICAgICAgIGZpbmRfZmxhZ19hdHRyaWJ1dGUoJmZsYWdfaW5mb19saXN0Wy4uXSwgRmxhZ1ZhbHVlVHlwZTo6Qm9vbGVhbiwgb2Zmc2V0KS51bndyYXAoKTsKQEAgLTk3LDcgKzk5LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgYmV5b25kIHRoZSBlbmQgb2YgYm9vbGVhbiBzZWN0aW9uCiAgICAgZm4gdGVzdF9ib29sZWFuX291dF9vZl9yYW5nZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9CiAgICAgICAgICAgICBmaW5kX2ZsYWdfYXR0cmlidXRlKCZmbGFnX2luZm9fbGlzdFsuLl0sIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIDgpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKQEAgLTEwOSw3ICsxMTEsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBlcnJvciB3aGVuIGZpbGUgaGFzIGEgaGlnaGVyIHZlcnNpb24KICAgICBmbiB0ZXN0X2hpZ2hlcl92ZXJzaW9uX3N0b3JhZ2VfZmlsZSgpIHsKLSAgICAgICAgbGV0IG11dCBpbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpOworICAgICAgICBsZXQgbXV0IGluZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgaW5mb19saXN0LmhlYWRlci52ZXJzaW9uID0gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxOwogICAgICAgICBsZXQgZmxhZ19pbmZvID0gaW5mb19saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gZmluZF9mbGFnX2F0dHJpYnV0ZSgmZmxhZ19pbmZvWy4uXSwgRmxhZ1ZhbHVlVHlwZTo6Qm9vbGVhbiwgNCkudW53cmFwX2VycigpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdGFibGVfcXVlcnkucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ190YWJsZV9xdWVyeS5ycwppbmRleCBlOWJjNjA0Li4zZTg3YWNjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ190YWJsZV9xdWVyeS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ190YWJsZV9xdWVyeS5ycwpAQCAtNzQsMTIgKzc0LDEyIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZTsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGFibGUgcXVlcnkKICAgICBmbiB0ZXN0X2ZsYWdfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBiYXNlbGluZSA9IHZlYyFbCiAgICAgICAgICAgICAoMCwgImVuYWJsZWRfcm8iLCBTdG9yZWRGbGFnVHlwZTo6UmVhZE9ubHlCb29sZWFuLCAxdTE2KSwKICAgICAgICAgICAgICgwLCAiZW5hYmxlZF9ydyIsIFN0b3JlZEZsYWdUeXBlOjpSZWFkV3JpdGVCb29sZWFuLCAydTE2KSwKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0YWJsZSBxdWVyeSBvZiBhIG5vbiBleGlzdCBmbGFnCiAgICAgZm4gdGVzdF9ub3RfZXhpc3RlZF9mbGFnX3F1ZXJ5KCkgewotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZmxhZ19jb250ZXh0ID0gZmluZF9mbGFnX3JlYWRfY29udGV4dCgmZmxhZ190YWJsZVsuLl0sIDEsICJkaXNhYmxlZF9maXhlZF9ybyIpLnVud3JhcCgpOwogICAgICAgICBhc3NlcnRfZXEhKGZsYWdfY29udGV4dCwgTm9uZSk7CiAgICAgICAgIGxldCBmbGFnX2NvbnRleHQgPSBmaW5kX2ZsYWdfcmVhZF9jb250ZXh0KCZmbGFnX3RhYmxlWy4uXSwgMiwgImRpc2FibGVkX3J3IikudW53cmFwKCk7CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7CisgICAgICAgIGxldCBtdXQgdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgdGFibGUuaGVhZGVyLnZlcnNpb24gPSBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDE7CiAgICAgICAgIGxldCBmbGFnX3RhYmxlID0gdGFibGUuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSBmaW5kX2ZsYWdfcmVhZF9jb250ZXh0KCZmbGFnX3RhYmxlWy4uXSwgMCwgImVuYWJsZWRfcm8iKS51bndyYXBfZXJyKCk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ192YWx1ZV9xdWVyeS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3ZhbHVlX3F1ZXJ5LnJzCmluZGV4IDEyYzFlODMuLjM1ZjU2OTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3ZhbHVlX3F1ZXJ5LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3ZhbHVlX3F1ZXJ5LnJzCkBAIC00OCwxMiArNDgsMTIgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3Q7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0LCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmxhZyB2YWx1ZSBxdWVyeQogICAgIGZuIHRlc3RfZmxhZ192YWx1ZV9xdWVyeSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgYmFzZWxpbmU6IFZlYzxib29sPiA9IHZlYyFbZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXTsKICAgICAgICAgZm9yIChvZmZzZXQsIGV4cGVjdGVkX3ZhbHVlKSBpbiBiYXNlbGluZS5pbnRvX2l0ZXIoKS5lbnVtZXJhdGUoKSB7CiAgICAgICAgICAgICBsZXQgZmxhZ192YWx1ZSA9IGZpbmRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbHVlX2xpc3RbLi5dLCBvZmZzZXQgYXMgdTMyKS51bndyYXAoKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgYmV5b25kIHRoZSBlbmQgb2YgYm9vbGVhbiBzZWN0aW9uCiAgICAgZm4gdGVzdF9ib29sZWFuX291dF9vZl9yYW5nZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSBmaW5kX2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWx1ZV9saXN0Wy4uXSwgOCkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKAogICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGVycm9yKSwKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgICAgICBsZXQgbXV0IHZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICB2YWx1ZV9saXN0LmhlYWRlci52ZXJzaW9uID0gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxOwogICAgICAgICBsZXQgZmxhZ192YWx1ZSA9IHZhbHVlX2xpc3QuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSBmaW5kX2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWx1ZVsuLl0sIDQpLnVud3JhcF9lcnIoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9saWIucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbGliLnJzCmluZGV4IDg4NGYxNDguLjZlOThmZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9saWIucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2xpYi5ycwpAQCAtNDQsNiArNDQsNyBAQAogCiBwdWIgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7QWNvbmZpZ1N0b3JhZ2VFcnJvciwgRmxhZ1ZhbHVlVHlwZSwgU3RvcmFnZUZpbGVUeXBlfTsKIHB1YiB1c2UgZmxhZ190YWJsZV9xdWVyeTo6RmxhZ1JlYWRDb250ZXh0OworcHViIHVzZSBtYXBwZWRfZmlsZTo6bWFwX2ZpbGU7CiBwdWIgdXNlIHBhY2thZ2VfdGFibGVfcXVlcnk6OlBhY2thZ2VSZWFkQ29udGV4dDsKIAogdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjpyZWFkX3UzMl9mcm9tX2J5dGVzOwpAQCAtMTE0LDEzICsxMTUsMTMgQEAKIAogLy8vIEdldCB0aGUgYm9vbGVhbiBmbGFnIHZhbHVlLgogLy8vCi0vLy8gXGlucHV0IGZpbGU6IG1hcHBlZCBmbGFnIGZpbGUKKy8vLyBcaW5wdXQgZmlsZTogYSBieXRlIHNsaWNlLCBjYW4gYmUgZWl0aGVyICZNbWFwIG9yICZNYXBNdXQKIC8vLyBcaW5wdXQgaW5kZXg6IGJvb2xlYW4gZmxhZyBvZmZzZXQKIC8vLwogLy8vIFxyZXR1cm4KIC8vLyBJZiB0aGUgcHJvdmlkZSBvZmZzZXQgaXMgdmFsaWQsIGl0IHJldHVybnMgdGhlIGJvb2xlYW4gZmxhZyB2YWx1ZSwgb3RoZXJ3aXNlIGl0CiAvLy8gcmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZS4KLXB1YiBmbiBnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKGZpbGU6ICZNbWFwLCBpbmRleDogdTMyKSAtPiBSZXN1bHQ8Ym9vbCwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4geworcHViIGZuIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoZmlsZTogJlt1OF0sIGluZGV4OiB1MzIpIC0+IFJlc3VsdDxib29sLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CiAgICAgZmluZF9ib29sZWFuX2ZsYWdfdmFsdWUoZmlsZSwgaW5kZXgpCiB9CiAKQEAgLTE0OCw3ICsxNDksNyBAQAogCiAvLy8gR2V0IHRoZSBmbGFnIGF0dHJpYnV0ZS4KIC8vLwotLy8vIFxpbnB1dCBmaWxlOiBtYXBwZWQgZmxhZyBpbmZvIGZpbGUKKy8vLyBcaW5wdXQgZmlsZTogYSBieXRlIHNsaWNlLCBjYW4gYmUgZWl0aGVyICZNbWFwIG9yICZNYXBNdXQKIC8vLyBcaW5wdXQgZmxhZ190eXBlOiBmbGFnIHZhbHVlIHR5cGUKIC8vLyBcaW5wdXQgZmxhZ19pbmRleDogZmxhZyBpbmRleAogLy8vCkBAIC0xNTYsNyArMTU3LDcgQEAKIC8vLyBJZiB0aGUgcHJvdmlkZSBvZmZzZXQgaXMgdmFsaWQsIGl0IHJldHVybnMgdGhlIGZsYWcgYXR0cmlidXRlIGJpdGZpbGVkLCBvdGhlcndpc2UgaXQKIC8vLyByZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlLgogcHViIGZuIGdldF9mbGFnX2F0dHJpYnV0ZSgKLSAgICBmaWxlOiAmTW1hcCwKKyAgICBmaWxlOiAmW3U4XSwKICAgICBmbGFnX3R5cGU6IEZsYWdWYWx1ZVR5cGUsCiAgICAgZmxhZ19pbmRleDogdTMyLAogKSAtPiBSZXN1bHQ8dTgsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKQEAgLTQxMiwxMCArNDEzLDEwIEBACiAgICAgICAgIGxldCBmbGFnX21hcCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL21hcHMvbW9ja3VwLmZsYWcubWFwIjsKICAgICAgICAgbGV0IGZsYWdfdmFsID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAudmFsIjsKICAgICAgICAgbGV0IGZsYWdfaW5mbyA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLmluZm8iOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2UubWFwIiwgJnBhY2thZ2VfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnLm1hcCIsICZmbGFnX21hcCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwiLCAmZmxhZ192YWwpLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWcuaW5mbyIsICZmbGFnX2luZm8pLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwgJnBhY2thZ2VfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcCIsICZmbGFnX21hcCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwiLCAmZmxhZ192YWwpLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIsICZmbGFnX2luZm8pLnVud3JhcCgpOwogCiAgICAgICAgIHJldHVybiBzdG9yYWdlX2RpcjsKICAgICB9CkBAIC01MDcsOSArNTA4LDkgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmxhZyBzdG9yYWdlIGZpbGUgdmVyc2lvbiBudW1iZXIgcXVlcnkgYXBpCiAgICAgZm4gdGVzdF9zdG9yYWdlX3ZlcnNpb25fcXVlcnkoKSB7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2RhdGEvdjEvZmxhZy5tYXAiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2RhdGEvdjEvZmxhZy5pbmZvIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIpLnVud3JhcCgpLCAxKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbWFwcGVkX2ZpbGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbWFwcGVkX2ZpbGUucnMKaW5kZXggMzJkYmVkOC4uZjRlMjY5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL21hcHBlZF9maWxlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9tYXBwZWRfZmlsZS5ycwpAQCAtMjgsNyArMjgsNyBAQAogLy8vIFRoZSBtZW1vcnkgbWFwcGVkIGZpbGUgbWF5IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHRoZXJlIGFyZSB3cml0ZXMgdG8gdGhpcwogLy8vIGZpbGUgYWZ0ZXIgYmVpbmcgbWFwcGVkLiBFbnN1cmUgbm8gd3JpdGVzIGNhbiBoYXBwZW4gdG8gdGhpcyBmaWxlIHdoaWxlIHRoaXMKIC8vLyBtYXBwaW5nIHN0YXlzIGFsaXZlLgotdW5zYWZlIGZuIG1hcF9maWxlKGZpbGVfcGF0aDogJnN0cikgLT4gUmVzdWx0PE1tYXAsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKK3B1YiB1bnNhZmUgZm4gbWFwX2ZpbGUoZmlsZV9wYXRoOiAmc3RyKSAtPiBSZXN1bHQ8TW1hcCwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGxldCBmaWxlID0gRmlsZTo6b3BlbihmaWxlX3BhdGgpCiAgICAgICAgIC5tYXBfZXJyKHxlcnJtc2d8IEZpbGVSZWFkRmFpbChhbnlob3chKCJGYWlsZWQgdG8gb3BlbiBmaWxlIHt9OiB7fSIsIGZpbGVfcGF0aCwgZXJybXNnKSkpPzsKICAgICB1bnNhZmUgewpAQCAtOTcsMTAgKzk3LDEwIEBACiAgICAgICAgIGxldCBmbGFnX21hcCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL21hcHMvbW9ja3VwLmZsYWcubWFwIjsKICAgICAgICAgbGV0IGZsYWdfdmFsID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAudmFsIjsKICAgICAgICAgbGV0IGZsYWdfaW5mbyA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLmluZm8iOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2UubWFwIiwgJnBhY2thZ2VfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnLm1hcCIsICZmbGFnX21hcCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwiLCAmZmxhZ192YWwpLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWcuaW5mbyIsICZmbGFnX2luZm8pLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwgJnBhY2thZ2VfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcCIsICZmbGFnX21hcCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwiLCAmZmxhZ192YWwpLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIsICZmbGFnX2luZm8pLnVud3JhcCgpOwogCiAgICAgICAgIHJldHVybiBzdG9yYWdlX2RpcjsKICAgICB9CkBAIC0xMDgsOSArMTA4LDkgQEAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9tYXBwZWRfZmlsZV9jb250ZW50cygpIHsKICAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOwotICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCwgIi4vdGVzdHMvZGF0YS92MS9wYWNrYWdlLm1hcCIpOwotICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ01hcCwgIi4vdGVzdHMvZGF0YS92MS9mbGFnLm1hcCIpOwotICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ1ZhbCwgIi4vdGVzdHMvZGF0YS92MS9mbGFnLnZhbCIpOwotICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ0luZm8sICIuL3Rlc3RzL2RhdGEvdjEvZmxhZy5pbmZvIik7CisgICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwLCAiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIik7CisgICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnTWFwLCAiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIik7CisgICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnVmFsLCAiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsIik7CisgICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnSW5mbywgIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8iKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvcGFja2FnZV90YWJsZV9xdWVyeS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9wYWNrYWdlX3RhYmxlX3F1ZXJ5LnJzCmluZGV4IGFjYjYwZjYuLmE0YjYzYWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9wYWNrYWdlX3RhYmxlX3F1ZXJ5LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9wYWNrYWdlX3RhYmxlX3F1ZXJ5LnJzCkBAIC03NCwxMiArNzQsMTIgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlOworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUsIERFRkFVTFRfRklMRV9WRVJTSU9OfTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0YWJsZSBxdWVyeQogICAgIGZuIHRlc3RfcGFja2FnZV9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGFibGUgcXVlcnkgb2YgYSBub24gZXhpc3QgcGFja2FnZQogICAgIGZuIHRlc3Rfbm90X2V4aXN0ZWRfcGFja2FnZV9xdWVyeSgpIHsKICAgICAgICAgLy8gdGhpcyB3aWxsIGxhbmQgYXQgYW4gZW1wdHkgYnVja2V0Ci0gICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZmluZF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV90YWJsZVsuLl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8zIikKICAgICAgICAgICAgICAgICAudW53cmFwKCk7CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCk7CisgICAgICAgIGxldCBtdXQgdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgdGFibGUuaGVhZGVyLnZlcnNpb24gPSBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDE7CiAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gdGFibGUuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9BY29uZmlnUGFja2FnZUltcGwuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiZWYzMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlOworCitpbXBvcnQgYW5kcm9pZC5vcy5TdHJpY3RNb2RlOworCitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworCisvKiogQGhpZGUgKi8KK3B1YmxpYyBjbGFzcyBBY29uZmlnUGFja2FnZUltcGwgeworICAgIHByaXZhdGUgRmxhZ1RhYmxlIG1GbGFnVGFibGU7CisgICAgcHJpdmF0ZSBGbGFnVmFsdWVMaXN0IG1GbGFnVmFsdWVMaXN0OworICAgIHByaXZhdGUgUGFja2FnZVRhYmxlLk5vZGUgbVBOb2RlOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHJpdmF0ZSBBY29uZmlnUGFja2FnZUltcGwoKSB7fQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBBY29uZmlnUGFja2FnZUltcGwgbG9hZChTdHJpbmcgcGFja2FnZU5hbWUsIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZmlsZVByb3ZpZGVyKSB7CisgICAgICAgIEFjb25maWdQYWNrYWdlSW1wbCBpbXBsID0gbmV3IEFjb25maWdQYWNrYWdlSW1wbCgpOworICAgICAgICBpbXBsLmluaXQobnVsbCwgcGFja2FnZU5hbWUsIGZpbGVQcm92aWRlcik7CisgICAgICAgIHJldHVybiBpbXBsOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgQWNvbmZpZ1BhY2thZ2VJbXBsIGxvYWQoCisgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyLCBTdHJpbmcgcGFja2FnZU5hbWUsIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZmlsZVByb3ZpZGVyKSB7CisgICAgICAgIGlmIChjb250YWluZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DT05UQUlORVJfTk9UX0ZPVU5ELAorICAgICAgICAgICAgICAgICAgICAiY29udGFpbmVyIG51bGwgY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBkZXZpY2UiKTsKKyAgICAgICAgfQorICAgICAgICBBY29uZmlnUGFja2FnZUltcGwgaW1wbCA9IG5ldyBBY29uZmlnUGFja2FnZUltcGwoKTsKKyAgICAgICAgaW1wbC5pbml0KGNvbnRhaW5lciwgcGFja2FnZU5hbWUsIGZpbGVQcm92aWRlcik7CisgICAgICAgIHJldHVybiBpbXBsOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBib29sZWFuIGdldEJvb2xlYW5GbGFnVmFsdWUoU3RyaW5nIGZsYWdOYW1lLCBib29sZWFuIGRlZmF1bHRWYWx1ZSkgeworICAgICAgICBGbGFnVGFibGUuTm9kZSBmTm9kZSA9IG1GbGFnVGFibGUuZ2V0KG1QTm9kZS5nZXRQYWNrYWdlSWQoKSwgZmxhZ05hbWUpOworICAgICAgICAvLyBubyBzdWNoIGZsYWcgaW4gdGhpcyBwYWNrYWdlCisgICAgICAgIGlmIChmTm9kZSA9PSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgICAgICBpbnQgaW5kZXggPSBmTm9kZS5nZXRGbGFnSW5kZXgoKSArIG1QTm9kZS5nZXRCb29sZWFuU3RhcnRJbmRleCgpOworICAgICAgICByZXR1cm4gbUZsYWdWYWx1ZUxpc3QuZ2V0Qm9vbGVhbihpbmRleCk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIG1GbGFnVmFsdWVMaXN0LmdldEJvb2xlYW4oaW5kZXggKyBtUE5vZGUuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIGxvbmcgZ2V0UGFja2FnZUZpbmdlcnByaW50KCkgeworICAgICAgICByZXR1cm4gbVBOb2RlLmdldFBhY2thZ2VGaW5nZXJwcmludCgpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBib29sZWFuIGhhc1BhY2thZ2VGaW5nZXJwcmludCgpIHsKKyAgICAgICAgcmV0dXJuIG1QTm9kZS5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaW5pdChTdHJpbmcgY29udGFpbmVyTmFtZSwgU3RyaW5nIHBhY2thZ2VOYW1lLCBTdG9yYWdlRmlsZVByb3ZpZGVyIGZpbGVQcm92aWRlcikgeworICAgICAgICBTdHJpY3RNb2RlLlRocmVhZFBvbGljeSBvbGRQb2xpY3kgPSBTdHJpY3RNb2RlLmFsbG93VGhyZWFkRGlza1JlYWRzKCk7CisgICAgICAgIFN0cmluZyBjb250YWluZXIgPSBjb250YWluZXJOYW1lOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gZm9yIGRldmljZXMgZG9uJ3QgaGF2ZSBuZXcgc3RvcmFnZSBkaXJlY3RseSByZXR1cm4KKyAgICAgICAgICAgIGlmICghZmlsZVByb3ZpZGVyLmNvbnRhaW5lckZpbGVFeGlzdHMobnVsbCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9TVE9SQUdFX1NZU1RFTV9OT1RfRk9VTkQsCisgICAgICAgICAgICAgICAgICAgICAgICAiYWNvbmZpZyBzdG9yYWdlIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgZGV2aWNlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBwTm9kZSA9IG51bGw7CisKKyAgICAgICAgICAgIGlmIChjb250YWluZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBkZXZpY2UgaGFzIGZsYWcgZmlsZXMgb24gdGhlIHN5c3RlbSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRldmljZSBkb2VzLCBzZWFyY2ggdGhlIHN5c3RlbSBwYXJ0aXRpb24gZmlyc3QuCisgICAgICAgICAgICAgICAgY29udGFpbmVyID0gInN5c3RlbSI7CisgICAgICAgICAgICAgICAgaWYgKGZpbGVQcm92aWRlci5jb250YWluZXJGaWxlRXhpc3RzKGNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgICAgICAgICAgcE5vZGUgPSBmaWxlUHJvdmlkZXIuZ2V0UGFja2FnZVRhYmxlKGNvbnRhaW5lcikuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocE5vZGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBTZWFyY2ggYWxsIHBhY2thZ2UgbWFwIGZpbGVzIGlmIG5vdCBmb3VuZCBpbiB0aGUgc3lzdGVtIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChQYXRoIHAgOiBmaWxlUHJvdmlkZXIubGlzdFBhY2thZ2VNYXBGaWxlcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUgcFRhYmxlID0gU3RvcmFnZUZpbGVQcm92aWRlci5nZXRQYWNrYWdlVGFibGUocCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZSA9IHBUYWJsZS5nZXQocGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBOb2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSBwVGFibGUuZ2V0SGVhZGVyKCkuZ2V0Q29udGFpbmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghZmlsZVByb3ZpZGVyLmNvbnRhaW5lckZpbGVFeGlzdHMoY29udGFpbmVyKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfQ09OVEFJTkVSX05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGFpbmVyICIgKyBjb250YWluZXIgKyAiIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgZGV2aWNlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBOb2RlID0gZmlsZVByb3ZpZGVyLmdldFBhY2thZ2VUYWJsZShjb250YWluZXIpLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwTm9kZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBjYXNlIHBhY2thZ2UgaXMgbm90IGZvdW5kIGluIGFsbCBjb250YWluZXIsIHJldHVybiBpbnN0ZWFkIG9mIHRocm93aW5nCisgICAgICAgICAgICAgICAgLy8gZXJyb3IKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9QQUNLQUdFX05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwYWNrYWdlTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgaW4gY29udGFpbmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250YWluZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgZGV2aWNlIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1GbGFnVGFibGUgPSBmaWxlUHJvdmlkZXIuZ2V0RmxhZ1RhYmxlKGNvbnRhaW5lcik7CisgICAgICAgICAgICBtRmxhZ1ZhbHVlTGlzdCA9IGZpbGVQcm92aWRlci5nZXRGbGFnVmFsdWVMaXN0KGNvbnRhaW5lcik7CisgICAgICAgICAgICBtUE5vZGUgPSBwTm9kZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBTdHJpY3RNb2RlLnNldFRocmVhZFBvbGljeShvbGRQb2xpY3kpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlRmlsZVByb3ZpZGVyLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjgzNDFlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlRmlsZVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlOworCitpbXBvcnQgamF2YS5pby5DbG9zZWFibGU7CitpbXBvcnQgamF2YS5uaW8uTWFwcGVkQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkRpcmVjdG9yeVN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOworaW1wb3J0IGphdmEubmlvLmZpbGUuU3RhbmRhcmRPcGVuT3B0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKiBAaGlkZSAqLworcHVibGljIGNsYXNzIFN0b3JhZ2VGaWxlUHJvdmlkZXIgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTUFQX1BBVEggPSAiL21ldGFkYXRhL2Fjb25maWcvbWFwcy8iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0JPT1RfUEFUSCA9ICIvbWV0YWRhdGEvYWNvbmZpZy9ib290LyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBNQVBfRklMRV9FWFQgPSAiLnBhY2thZ2UubWFwIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk1BUF9GSUxFX0VYVCA9ICIuZmxhZy5tYXAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxfRklMRV9FWFQgPSAiLnZhbCI7CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtTWFwUGF0aDsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQm9vdFBhdGg7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZ2V0RGVmYXVsdFByb3ZpZGVyKCkgeworICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoREVGQVVMVF9NQVBfUEFUSCwgREVGQVVMVF9CT09UX1BBVEgpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBTdG9yYWdlRmlsZVByb3ZpZGVyKFN0cmluZyBtYXBQYXRoLCBTdHJpbmcgYm9vdFBhdGgpIHsKKyAgICAgICAgbU1hcFBhdGggPSBtYXBQYXRoOworICAgICAgICBtQm9vdFBhdGggPSBib290UGF0aDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluZXJGaWxlRXhpc3RzKFN0cmluZyBjb250YWluZXIpIHsKKyAgICAgICAgaWYgKGNvbnRhaW5lciA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gRmlsZXMuZXhpc3RzKFBhdGhzLmdldChtTWFwUGF0aCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGaWxlcy5leGlzdHMoUGF0aHMuZ2V0KG1NYXBQYXRoLCBjb250YWluZXIgKyBQTUFQX0ZJTEVfRVhUKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIExpc3Q8UGF0aD4gbGlzdFBhY2thZ2VNYXBGaWxlcygpIHsKKyAgICAgICAgTGlzdDxQYXRoPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIERpcmVjdG9yeVN0cmVhbTxQYXRoPiBzdHJlYW0gPQorICAgICAgICAgICAgICAgICAgICBGaWxlcy5uZXdEaXJlY3RvcnlTdHJlYW0oUGF0aHMuZ2V0KG1NYXBQYXRoKSwgIioiICsgUE1BUF9GSUxFX0VYVCk7CisgICAgICAgICAgICBmb3IgKFBhdGggZW50cnkgOiBzdHJlYW0pIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGVudHJ5KTsKKyAgICAgICAgICAgICAgICAvLyBzYi5hcHBlbmQoZW50cnkuIHRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJGYWlsIHRvIGxpc3QgbWFwIGZpbGVzIGluIHBhdGggJXMiLCBtTWFwUGF0aCksIGUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgUGFja2FnZVRhYmxlIGdldFBhY2thZ2VUYWJsZShTdHJpbmcgY29udGFpbmVyKSB7CisgICAgICAgIHJldHVybiBnZXRQYWNrYWdlVGFibGUoUGF0aHMuZ2V0KG1NYXBQYXRoLCBjb250YWluZXIgKyBQTUFQX0ZJTEVfRVhUKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIEZsYWdUYWJsZSBnZXRGbGFnVGFibGUoU3RyaW5nIGNvbnRhaW5lcikgeworICAgICAgICByZXR1cm4gRmxhZ1RhYmxlLmZyb21CeXRlcyhtYXBTdG9yYWdlRmlsZShQYXRocy5nZXQobU1hcFBhdGgsIGNvbnRhaW5lciArIEZNQVBfRklMRV9FWFQpKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIEZsYWdWYWx1ZUxpc3QgZ2V0RmxhZ1ZhbHVlTGlzdChTdHJpbmcgY29udGFpbmVyKSB7CisgICAgICAgIHJldHVybiBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcygKKyAgICAgICAgICAgICAgICBtYXBTdG9yYWdlRmlsZShQYXRocy5nZXQobUJvb3RQYXRoLCBjb250YWluZXIgKyBWQUxfRklMRV9FWFQpKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBQYWNrYWdlVGFibGUgZ2V0UGFja2FnZVRhYmxlKFBhdGggcGF0aCkgeworICAgICAgICByZXR1cm4gUGFja2FnZVRhYmxlLmZyb21CeXRlcyhtYXBTdG9yYWdlRmlsZShwYXRoKSk7CisgICAgfQorCisgICAgLy8gTWFwIGEgc3RvcmFnZSBmaWxlIGdpdmVuIGZpbGUgcGF0aAorICAgIHByaXZhdGUgc3RhdGljIE1hcHBlZEJ5dGVCdWZmZXIgbWFwU3RvcmFnZUZpbGUoUGF0aCBmaWxlKSB7CisgICAgICAgIEZpbGVDaGFubmVsIGNoYW5uZWwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2hhbm5lbCA9IEZpbGVDaGFubmVsLm9wZW4oZmlsZSwgU3RhbmRhcmRPcGVuT3B0aW9uLlJFQUQpOworICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWwubWFwKEZpbGVDaGFubmVsLk1hcE1vZGUuUkVBRF9PTkxZLCAwLCBjaGFubmVsLnNpemUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiRmFpbCB0byBtbWFwIHN0b3JhZ2UgZmlsZSAlcyIsIGZpbGUpLAorICAgICAgICAgICAgICAgICAgICBlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHF1aWV0bHlEaXNwb3NlKGNoYW5uZWwpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBxdWlldGx5RGlzcG9zZShDbG9zZWFibGUgY2xvc2FibGUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChjbG9zYWJsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY2xvc2FibGUuY2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gY2FyZSwgYXQgbGVhc3QgYXMgb2Ygbm93CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZC5icAppbmRleCBiOGU1MTBkLi42Yjg5NDJiIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTEsMTAgKzEsMTQgQEAKIGZpbGVncm91cCB7CiAgICAgbmFtZTogInJlYWRfYXBpX3Rlc3Rfc3RvcmFnZV9maWxlcyIsCiAgICAgc3JjczogWwotICAgICAgICAiZGF0YS92MS9wYWNrYWdlLm1hcCIsCi0gICAgICAgICJkYXRhL3YxL2ZsYWcubWFwIiwKLSAgICAgICAgImRhdGEvdjEvZmxhZy52YWwiLAotICAgICAgICAiZGF0YS92MS9mbGFnLmluZm8iLAorICAgICAgICAiZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS52YWwiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLmluZm8iLAorICAgICAgICAiZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi52YWwiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLmluZm8iLAogICAgIF0sCiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZy5pbmZvIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZy5pbmZvCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWcubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnLm1hcApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWcudmFsIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnLnZhbApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL3BhY2thZ2UubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9wYWNrYWdlLm1hcApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIuaW5mbyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjdmZGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ2ODVjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Q0NzUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY0MDU0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0Fjb25maWdQYWNrYWdlSW1wbFRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQWNvbmZpZ1BhY2thZ2VJbXBsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZjcwZTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0Fjb25maWdQYWNrYWdlSW1wbFRlc3QuamF2YQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRocm93czsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuQWNvbmZpZ1BhY2thZ2VJbXBsOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdTdG9yYWdlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlN0b3JhZ2VGaWxlUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVycy5KVW5pdDQ7CisKK0BSdW5XaXRoKEpVbml0NC5jbGFzcykKK3B1YmxpYyBjbGFzcyBBY29uZmlnUGFja2FnZUltcGxUZXN0IHsKKworICAgIHByaXZhdGUgU3RvcmFnZUZpbGVQcm92aWRlciBwcjsKKworICAgIEBCZWZvcmUKKyAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHsKKyAgICAgICAgcHIgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgsIFRlc3REYXRhVXRpbHMuVEVTVERBVEFfUEFUSCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TG9hZF9vbmx5UGFja2FnZU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsIHAgPSBBY29uZmlnUGFja2FnZUltcGwubG9hZCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsIHByKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChwKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkX2dyb3VwTmFtZUZpbmdlcnByaW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEFjb25maWdQYWNrYWdlSW1wbCBwID0KKyAgICAgICAgICAgICAgICBBY29uZmlnUGFja2FnZUltcGwubG9hZCgibW9ja3VwIiwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCBwcik7CisgICAgICAgIGFzc2VydE5vdE51bGwocCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TG9hZF9lcnJvcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBBY29uZmlnUGFja2FnZUltcGwgcDsKKyAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24gZSA9CisgICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAorICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnUGFja2FnZUltcGwubG9hZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEwIiwgcHIpKTsKKyAgICAgICAgLy8gY2Fubm90IGZpbmQgcGFja2FnZQorICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQsIGUuZ2V0RXJyb3JDb2RlKCkpOworICAgICAgICAvLyBjYW5ub3QgZmluZCBwYWNrYWdlCisgICAgICAgIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4gQWNvbmZpZ1BhY2thZ2VJbXBsLmxvYWQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEwIiwgcHIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5ELCBlLmdldEVycm9yQ29kZSgpKTsKKyAgICAgICAgLy8gY2Fubm90IGZpbmQgY29udGFpbmVyCisgICAgICAgIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCBwcikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfQ09OVEFJTkVSX05PVF9GT1VORCwgZS5nZXRFcnJvckNvZGUoKSk7CisgICAgICAgIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QiLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsIHByKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DT05UQUlORVJfTk9UX0ZPVU5ELCBlLmdldEVycm9yQ29kZSgpKTsKKworICAgICAgICAvLyBuZXcgc3RvcmFnZSBkb2Vzbid0IGV4aXN0CisgICAgICAgIHByID0gbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoImZha2UvcGF0aC8iLCAiZmFrZS9wYXRoLyIpOworICAgICAgICBlID0KKyAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+IEFjb25maWdQYWNrYWdlSW1wbC5sb2FkKCJmYWtlX3BhY2thZ2UiLCBwcikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfU1RPUkFHRV9TWVNURU1fTk9UX0ZPVU5ELCBlLmdldEVycm9yQ29kZSgpKTsKKworICAgICAgICAvLyBmaWxlIHJlYWQgaXNzdWUKKyAgICAgICAgcHIgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgsICJmYWtlL3BhdGgvIik7CisgICAgICAgIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vY2t1cCIsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgcHIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwgZS5nZXRFcnJvckNvZGUoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0Qm9vbGVhbkZsYWdWYWx1ZV9mbGFnTmFtZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBBY29uZmlnUGFja2FnZUltcGwgcCA9CisgICAgICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsLmxvYWQoIm1vY2t1cCIsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgcHIpOworICAgICAgICBhc3NlcnRGYWxzZShwLmdldEJvb2xlYW5GbGFnVmFsdWUoImRpc2FibGVkX3J3IiwgdHJ1ZSkpOworICAgICAgICBhc3NlcnRUcnVlKHAuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgiZW5hYmxlZF9ybyIsIGZhbHNlKSk7CisgICAgICAgIGFzc2VydFRydWUocC5nZXRCb29sZWFuRmxhZ1ZhbHVlKCJlbmFibGVkX3J3IiwgZmFsc2UpKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UocC5nZXRCb29sZWFuRmxhZ1ZhbHVlKCJmYWtlIiwgZmFsc2UpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRCb29sZWFuRmxhZ1ZhbHVlX2luZGV4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEFjb25maWdQYWNrYWdlSW1wbCBwID0KKyAgICAgICAgICAgICAgICBBY29uZmlnUGFja2FnZUltcGwubG9hZCgibW9ja3VwIiwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCBwcik7CisgICAgICAgIGFzc2VydEZhbHNlKHAuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgwKSk7CisgICAgICAgIGFzc2VydFRydWUocC5nZXRCb29sZWFuRmxhZ1ZhbHVlKDEpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShwLmdldEJvb2xlYW5GbGFnVmFsdWUoMikpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEhhc1BhY2thZ2VGaW5nZXJwcmludCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBBY29uZmlnUGFja2FnZUltcGwgcCA9CisgICAgICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbXBsLmxvYWQoIm1vY2t1cCIsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgcHIpOworICAgICAgICBhc3NlcnRGYWxzZShwLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWQuYnAKaW5kZXggM2Q0ZTlhZC4uOWM4ODEyMiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZC5icApAQCAtMjIsMyArMjIsMjggQEAKICAgICBdLAogICAgIHRlYW06ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX2NvcmVfZXhwZXJpbWVudHMiLAogfQorCithbmRyb2lkX3Rlc3QgeworICAgIG5hbWU6ICJhY29uZmlnX3N0b3JhZ2VfcGFja2FnZSIsCisgICAgdGVhbTogInRyZW5keV90ZWFtX2FuZHJvaWRfY29yZV9leHBlcmltZW50cyIsCisgICAgc3JjczogWworICAgICAgICAiQWNvbmZpZ1BhY2thZ2VJbXBsVGVzdC5qYXZhIiwKKyAgICAgICAgIlN0b3JhZ2VGaWxlUHJvdmlkZXJUZXN0LmphdmEiLAorICAgICAgICAiVGVzdERhdGFVdGlscy5qYXZhIiwKKyAgICBdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJhbmRyb2lkeC50ZXN0LnJ1bm5lciIsCisgICAgICAgICJqdW5pdCIsCisgICAgICAgICJhY29uZmlnX3N0b3JhZ2VfcmVhZGVyX2phdmEiLAorICAgIF0sCisgICAgdGVzdF9jb25maWc6ICJBbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbCIsCisgICAgbWFuaWZlc3Q6ICJBbmRyb2lkUGFja2FnZVRlc3RNYW5pZmVzdC54bWwiLAorICAgIHNka192ZXJzaW9uOiAidGVzdF9jdXJyZW50IiwKKyAgICBkYXRhOiBbCisgICAgICAgICI6cmVhZF9hcGlfdGVzdF9zdG9yYWdlX2ZpbGVzIiwKKyAgICBdLAorICAgIHRlc3Rfc3VpdGVzOiBbCisgICAgICAgICJnZW5lcmFsLXRlc3RzIiwKKyAgICBdLAorICAgIGphcmphcl9ydWxlczogImphcmphci50eHQiLAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkUGFja2FnZVRlc3RNYW5pZmVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRQYWNrYWdlVGVzdE1hbmlmZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTAxODc5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkUGFja2FnZVRlc3RNYW5pZmVzdC54bWwKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgfiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICB+CisgIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgcGFja2FnZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCI+CisgICAgPGFwcGxpY2F0aW9uPgorICAgICAgICA8dXNlcy1saWJyYXJ5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0LnJ1bm5lciIgLz4KKyAgICA8L2FwcGxpY2F0aW9uPgorCisgICAgPGluc3RydW1lbnRhdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWR4LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lciIKKyAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCIgLz4KKworPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MWI5YjUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisgIH4gQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAgfgorICB+IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorPGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRpb249IlRlc3QgYWNvbmZpZyBzdG9yYWdlIGphdmEgdGVzdHMiPgorICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRhcmdldHByZXAuc3VpdGUuU3VpdGVBcGtJbnN0YWxsZXIiPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAtYXBrcyIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0idGVzdC1maWxlLW5hbWUiIHZhbHVlPSJhY29uZmlnX3N0b3JhZ2VfcGFja2FnZS5hcGsiIC8+CisgICAgPC90YXJnZXRfcHJlcGFyZXI+CisgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQuY29tcGF0aWJpbGl0eS5jb21tb24udHJhZGVmZWQudGFyZ2V0cHJlcC5GaWxlUHVzaGVyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJjbGVhbnVwIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0icGFja2FnZV92MS5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcGFja2FnZS90ZXN0ZGF0YS9tb2NrdXAucGFja2FnZS5tYXAiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjEubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3BhY2thZ2UvdGVzdGRhdGEvbW9ja3VwLmZsYWcubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YxLnZhbC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9wYWNrYWdlL3Rlc3RkYXRhL21vY2t1cC52YWwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjEuaW5mby0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9wYWNrYWdlL3Rlc3RkYXRhL21vY2t1cC5pbmZvIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InBvc3QtcHVzaCIgdmFsdWU9ImNobW9kICtyIC9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcGFja2FnZS90ZXN0ZGF0YS8iIC8+CisgICAgPC90YXJnZXRfcHJlcGFyZXI+CisgICAgPHRlc3QgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRlc3R0eXBlLkFuZHJvaWRKVW5pdFRlc3QiID4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwYWNrYWdlIiB2YWx1ZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJydW50aW1lLWhpbnQiIHZhbHVlPSIxbSIgLz4KKyAgICA8L3Rlc3Q+Cis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRUZXN0LnhtbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZFRlc3QueG1sCmluZGV4IDk5YzllMjUuLjdmZmExOGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZFRlc3QueG1sCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZFRlc3QueG1sCkBAIC0zNSwxMSArMzUsMTEgQEAKICAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50YXJnZXRwcmVwLlB1c2hGaWxlUHJlcGFyZXIiPgogICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAiIHZhbHVlPSJ0cnVlIiAvPgogICAgICAgICA8b3B0aW9uIG5hbWU9ImFib3J0LW9uLXB1c2gtZmFpbHVyZSIgdmFsdWU9InRydWUiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9InBhY2thZ2UubWFwIgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJwYWNrYWdlX3YxLm1hcCIKICAgICAgICAgICAgICAgICB2YWx1ZT0iL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfamF2YV9hcGlfdGVzdC9tYXBzL21vY2t1cC5wYWNrYWdlLm1hcCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0iZmxhZy5tYXAiCisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9ImZsYWdfdjEubWFwIgogICAgICAgICAgICAgICAgIHZhbHVlPSIvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19qYXZhX2FwaV90ZXN0L21hcHMvbW9ja3VwLmZsYWcubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJmbGFnLnZhbCIKKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0iZmxhZ192MS52YWwiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX2phdmFfYXBpX3Rlc3QvYm9vdC9tb2NrdXAudmFsIiAvPgogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL1N0b3JhZ2VGaWxlUHJvdmlkZXJUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL1N0b3JhZ2VGaWxlUHJvdmlkZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYWU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvU3RvcmFnZUZpbGVQcm92aWRlclRlc3QuamF2YQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0OworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLkpVbml0NDsKKworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitAUnVuV2l0aChKVW5pdDQuY2xhc3MpCitwdWJsaWMgY2xhc3MgU3RvcmFnZUZpbGVQcm92aWRlclRlc3QgeworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29udGFpbmVyRmlsZUV4aXN0cygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIHAgPQorICAgICAgICAgICAgICAgIG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKFRlc3REYXRhVXRpbHMuVEVTVERBVEFfUEFUSCwgVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRIKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShwLmNvbnRhaW5lckZpbGVFeGlzdHMobnVsbCkpOworICAgICAgICBhc3NlcnRUcnVlKHAuY29udGFpbmVyRmlsZUV4aXN0cygibW9ja3VwIikpOworICAgICAgICBhc3NlcnRGYWxzZShwLmNvbnRhaW5lckZpbGVFeGlzdHMoImZha2UiKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TGlzdHBhY2thZ2VNYXBGaWxlcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIHAgPQorICAgICAgICAgICAgICAgIG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKFRlc3REYXRhVXRpbHMuVEVTVERBVEFfUEFUSCwgVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRIKTsKKyAgICAgICAgLy8gdGhyb3cgbmV3IEV4Y2VwdGlvbihFbnZpcm9ubWVudC5nZXRFeHRlcm5hbFN0b3JhZ2VEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgIExpc3Q8UGF0aD4gZmlsZSA9IHAubGlzdFBhY2thZ2VNYXBGaWxlcygpOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZmlsZS5zaXplKCkpOworICAgICAgICBhc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgIGZpbGUuZ2V0KDApCisgICAgICAgICAgICAgICAgICAgICAgICAuZXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRocy5nZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3REYXRhVXRpbHMuVEVTVF9QQUNLQUdFX01BUF9QQVRIKSkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdExvYWRGaWxlcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIHAgPQorICAgICAgICAgICAgICAgIG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKFRlc3REYXRhVXRpbHMuVEVTVERBVEFfUEFUSCwgVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRIKTsKKyAgICAgICAgUGFja2FnZVRhYmxlIHB0ID0gcC5nZXRQYWNrYWdlVGFibGUoIm1vY2t1cCIpOworICAgICAgICBhc3NlcnROb3ROdWxsKHB0KTsKKyAgICAgICAgcHQgPQorICAgICAgICAgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIuZ2V0UGFja2FnZVRhYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgUGF0aHMuZ2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgsIFRlc3REYXRhVXRpbHMuVEVTVF9QQUNLQUdFX01BUF9QQVRIKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwocHQpOworICAgICAgICBGbGFnVGFibGUgZiA9IHAuZ2V0RmxhZ1RhYmxlKCJtb2NrdXAiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChmKTsKKyAgICAgICAgRmxhZ1ZhbHVlTGlzdCB2ID0gcC5nZXRGbGFnVmFsdWVMaXN0KCJtb2NrdXAiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCh2KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL1Rlc3REYXRhVXRpbHMuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvVGVzdERhdGFVdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2RkYzcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL1Rlc3REYXRhVXRpbHMuamF2YQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0OworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworCitwdWJsaWMgZmluYWwgY2xhc3MgVGVzdERhdGFVdGlscyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QQUNLQUdFX01BUF9QQVRIID0gIm1vY2t1cC5wYWNrYWdlLm1hcCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX01BUF9QQVRIID0gIm1vY2t1cC5mbGFnLm1hcCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GTEFHX1ZBTF9QQVRIID0gIm1vY2t1cC52YWwiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19JTkZPX1BBVEggPSAibW9ja3VwLmluZm8iOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVERBVEFfUEFUSCA9CisgICAgICAgICAgICAiL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9wYWNrYWdlL3Rlc3RkYXRhLyI7CisKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9QQUNLQUdFX01BUF9QQVRIKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9GTEFHX01BUF9QQVRIKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9GTEFHX1ZBTF9QQVRIKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdJbmZvQnl0ZUJ1ZmZlcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFRFU1RfRkxBR19JTkZPX1BBVEgpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIEJ5dGVCdWZmZXIgcmVhZEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGVOYW1lKTsKKyAgICAgICAgcmV0dXJuIEJ5dGVCdWZmZXIud3JhcChpbnB1dC5yZWFkQWxsQnl0ZXMoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9qYXJqYXIudHh0IGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9qYXJqYXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTUyZWMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL2phcmphci50eHQKQEAgLTAsMCArMSwxNyBAQAorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbiBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkFjb25maWdTdG9yYWdlRXhjZXB0aW9uCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUYWJsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZsYWdUYWJsZQorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5QYWNrYWdlVGFibGUKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuQnl0ZUJ1ZmZlclJlYWRlciBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkJ5dGVCdWZmZXJSZWFkZXIKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1R5cGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVHlwZQorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TaXBIYXNoZXIxMyBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlNpcEhhc2hlcjEzCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZpbGVUeXBlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmlsZVR5cGUKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1ZhbHVlTGlzdCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZsYWdWYWx1ZUxpc3QKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuVGFibGVVdGlscyBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlRhYmxlVXRpbHMKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuQWNvbmZpZ1BhY2thZ2VJbXBsIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuQWNvbmZpZ1BhY2thZ2VJbXBsCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlN0b3JhZ2VGaWxlUHJvdmlkZXIgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5TdG9yYWdlRmlsZVByb3ZpZGVyCisKKworcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGUkKiBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZsYWdUYWJsZSRAMQorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGUkKiBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlBhY2thZ2VUYWJsZSRAMQorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0JCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVmFsdWVMaXN0QDEKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU2lwSGFzaGVyMTMkKiBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlNpcEhhc2hlcjEzQDEKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5jcHAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QuY3BwCmluZGV4IDc1Mzc2NDMuLjUyODlmYWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5jcHAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LmNwcApAQCAtNTYsMTAgKzU2LDEwIEBACiAgICAgZmxhZ19tYXAgPSBzdGQ6OnN0cmluZyhtYXBzX2RpcikgKyAiL21vY2t1cC5mbGFnLm1hcCI7CiAgICAgZmxhZ192YWwgPSBzdGQ6OnN0cmluZyhib290X2RpcikgKyAiL21vY2t1cC52YWwiOwogICAgIGZsYWdfaW5mbyA9IHN0ZDo6c3RyaW5nKGJvb3RfZGlyKSArICIvbW9ja3VwLmluZm8iOwotICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvcGFja2FnZS5tYXAiLCBwYWNrYWdlX21hcCk7Ci0gICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnLm1hcCIsIGZsYWdfbWFwKTsKLSAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWcudmFsIiwgZmxhZ192YWwpOwotICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZy5pbmZvIiwgZmxhZ19pbmZvKTsKKyAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL3BhY2thZ2VfdjEubWFwIiwgcGFja2FnZV9tYXApOworICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZ192MS5tYXAiLCBmbGFnX21hcCk7CisgICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnX3YxLnZhbCIsIGZsYWdfdmFsKTsKKyAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWdfdjEuaW5mbyIsIGZsYWdfaW5mbyk7CiAgIH0KIAogICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LnJzCmluZGV4IDBkOTQzZjguLjU2MDVhNDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QucnMKQEAgLTksNyArOSw3IEBACiAgICAgdXNlIHJhbmQ6OlJuZzsKICAgICB1c2Ugc3RkOjpmczsKIAotICAgIGZuIGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKSAtPiBTdHJpbmcgeworICAgIGZuIGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXModmVyc2lvbjogdTMyKSAtPiBTdHJpbmcgewogICAgICAgICBsZXQgbXV0IHJuZyA9IHJhbmQ6OnRocmVhZF9ybmcoKTsKICAgICAgICAgbGV0IG51bWJlcjogdTMyID0gcm5nLmdlbigpOwogICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBTdHJpbmc6OmZyb20oIi90bXAvIikgKyAmbnVtYmVyLnRvX3N0cmluZygpOwpAQCAtMjYsMTcgKzI2LDE3IEBACiAgICAgICAgIGxldCBmbGFnX21hcCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL21hcHMvbW9ja3VwLmZsYWcubWFwIjsKICAgICAgICAgbGV0IGZsYWdfdmFsID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAudmFsIjsKICAgICAgICAgbGV0IGZsYWdfaW5mbyA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLmluZm8iOwotICAgICAgICBmczo6Y29weSgiLi9kYXRhL3YxL3BhY2thZ2UubWFwIiwgcGFja2FnZV9tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi9kYXRhL3YxL2ZsYWcubWFwIiwgZmxhZ19tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi9kYXRhL3YxL2ZsYWcudmFsIiwgZmxhZ192YWwpLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi9kYXRhL3YxL2ZsYWcuaW5mbyIsIGZsYWdfaW5mbykudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KGZvcm1hdCEoIi4vZGF0YS92ezB9L3BhY2thZ2VfdnswfS5tYXAiLCB2ZXJzaW9uKSwgcGFja2FnZV9tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weShmb3JtYXQhKCIuL2RhdGEvdnswfS9mbGFnX3Z7MH0ubWFwIiwgdmVyc2lvbiksIGZsYWdfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoZm9ybWF0ISgiLi9kYXRhL3Z7fS9mbGFnX3Z7MH0udmFsIiwgdmVyc2lvbiksIGZsYWdfdmFsKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoZm9ybWF0ISgiLi9kYXRhL3Z7fS9mbGFnX3Z7MH0uaW5mbyIsIHZlcnNpb24pLCBmbGFnX2luZm8pLnVud3JhcCgpOwogCiAgICAgICAgIHN0b3JhZ2VfZGlyCiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIGZuIHRlc3RfdW5hdmFpbGFibGVfc3RvYXJnZSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgIGZuIHRlc3RfdW5hdmFpbGFibGVfc3RvcmFnZSgpIHsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBlcnIgPSB1bnNhZmUgewpAQCAtNTMsNyArNTMsNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfcGFja2FnZV9jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgcGFja2FnZV9tYXBwZWRfZmlsZSA9IHVuc2FmZSB7CkBAIC04NCw3ICs4NCw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9ub25lX2V4aXN0X3BhY2thZ2VfY29udGV4dF9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IHBhY2thZ2VfbWFwcGVkX2ZpbGUgPSB1bnNhZmUgewpAQCAtOTksNyArOTksNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfZmxhZ19jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19tYXBwZWRfZmlsZSA9CkBAIC0xMjUsNyArMTI1LDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X25vbmVfZXhpc3RfZmxhZ19jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19tYXBwZWRfZmlsZSA9CkBAIC0xNDEsNyArMTQxLDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2Jvb2xlYW5fZmxhZ192YWx1ZV9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IGZsYWdfdmFsdWVfZmlsZSA9CkBAIC0xNTUsNyArMTU1LDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ludmFsaWRfYm9vbGVhbl9mbGFnX3ZhbHVlX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ192YWx1ZV9maWxlID0KQEAgLTE2OSw3ICsxNjksNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfZmxhZ19pbmZvX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19pbmZvX2ZpbGUgPQpAQCAtMTg2LDcgKzE4Niw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9pbnZhbGlkX2Jvb2xlYW5fZmxhZ19pbmZvX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19pbmZvX2ZpbGUgPQpAQCAtMTk5LDEwICsxOTksMTggQEAKICAgICB9CiAKICAgICAjW3Rlc3RdCi0gICAgZm4gdGVzdF9zdG9yYWdlX3ZlcnNpb25fcXVlcnkoKSB7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvcGFja2FnZS5tYXAiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZy5tYXAiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZy52YWwiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZy5pbmZvIikudW53cmFwKCksIDEpOworICAgIGZuIHRlc3Rfc3RvcmFnZV92ZXJzaW9uX3F1ZXJ5X3YxKCkgeworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YxL2ZsYWdfdjEubWFwIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YxL2ZsYWdfdjEudmFsIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIpLnVud3JhcCgpLCAxKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zdG9yYWdlX3ZlcnNpb25fcXVlcnlfdjIoKSB7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAiKS51bndyYXAoKSwgMik7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjIvZmxhZ192Mi5tYXAiKS51bndyYXAoKSwgMik7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjIvZmxhZ192Mi52YWwiKS51bndyYXAoKSwgMik7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjIvZmxhZ192Mi5pbmZvIikudW53cmFwKCksIDIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL0FuZHJvaWQuYnAKaW5kZXggMGYxOTYyYy4uNGM4ODJiNCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL0FuZHJvaWQuYnAKQEAgLTE2LDYgKzE2LDExIEBACiAgICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfZmlsZSIsCiAgICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkiLAogICAgIF0sCisgICAgbWluX3Nka192ZXJzaW9uOiAiMzQiLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOmFueWFwZXgiLAorICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgXSwKIH0KIAogcnVzdF9saWJyYXJ5IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ19pbmZvX3VwZGF0ZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ19pbmZvX3VwZGF0ZS5ycwppbmRleCA1NjQwOTIyLi41NzIxMTA1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfaW5mb191cGRhdGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX2luZm9fdXBkYXRlLnJzCkBAIC05NCwxMyArOTQsMTMgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdDsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGk6OmZsYWdfaW5mb19xdWVyeTo6ZmluZF9mbGFnX2F0dHJpYnV0ZTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBoYXMgc2VydmVyIG92ZXJyaWRlIHVwZGF0ZQogICAgIGZuIHRlc3RfdXBkYXRlX2ZsYWdfaGFzX3NlcnZlcl9vdmVycmlkZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgbXV0IGJ1ZiA9IGZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgZm9yIGkgaW4gMC4uZmxhZ19pbmZvX2xpc3QuaGVhZGVyLm51bV9mbGFncyB7CiAgICAgICAgICAgICB1cGRhdGVfZmxhZ19oYXNfc2VydmVyX292ZXJyaWRlKCZtdXQgYnVmLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCBpLCB0cnVlKS51bndyYXAoKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBoYXMgbG9jYWwgb3ZlcnJpZGUgdXBkYXRlCiAgICAgZm4gdGVzdF91cGRhdGVfZmxhZ19oYXNfbG9jYWxfb3ZlcnJpZGUoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IG11dCBidWYgPSBmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGZvciBpIGluIDAuLmZsYWdfaW5mb19saXN0LmhlYWRlci5udW1fZmxhZ3MgewogICAgICAgICAgICAgdXBkYXRlX2ZsYWdfaGFzX2xvY2FsX292ZXJyaWRlKCZtdXQgYnVmLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCBpLCB0cnVlKS51bndyYXAoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ192YWx1ZV91cGRhdGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfdmFsdWVfdXBkYXRlLnJzCmluZGV4IDA2YTliMTUuLjk3NzJkYjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ192YWx1ZV91cGRhdGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX3ZhbHVlX3VwZGF0ZS5ycwpAQCAtNDksMTIgKzQ5LDEyIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0OworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZsYWcgdmFsdWUgdXBkYXRlCiAgICAgZm4gdGVzdF9ib29sZWFuX2ZsYWdfdmFsdWVfdXBkYXRlKCkgewotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgdmFsdWVfb2Zmc2V0ID0gZmxhZ192YWx1ZV9saXN0LmhlYWRlci5ib29sZWFuX3ZhbHVlX29mZnNldDsKICAgICAgICAgbGV0IG11dCBjb250ZW50ID0gZmxhZ192YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IHRydWVfYnl0ZSA9IHU4Ojpmcm9tKHRydWUpLnRvX2xlX2J5dGVzKClbMF07CkBAIC03Miw3ICs3Miw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHVwZGF0ZSBiZXlvbmQgdGhlIGVuZCBvZiBib29sZWFuIHNlY3Rpb24KICAgICBmbiB0ZXN0X2Jvb2xlYW5fb3V0X29mX3JhbmdlKCkgewotICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IG11dCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gdXBkYXRlX2Jvb2xlYW5fZmxhZ192YWx1ZSgmbXV0IGZsYWdfdmFsdWVfbGlzdFsuLl0sIDgsIHRydWUpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKICAgICAgICAgICAgIGZvcm1hdCEoIns6P30iLCBlcnJvciksCkBAIC04Myw3ICs4Myw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGVycm9yIHdoZW4gZmlsZSBoYXMgYSBoaWdoZXIgdmVyc2lvbgogICAgIGZuIHRlc3RfaGlnaGVyX3ZlcnNpb25fc3RvcmFnZV9maWxlKCkgewotICAgICAgICBsZXQgbXV0IHZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAgICAgbGV0IG11dCB2YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgdmFsdWVfbGlzdC5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IG11dCBmbGFnX3ZhbHVlID0gdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9IHVwZGF0ZV9ib29sZWFuX2ZsYWdfdmFsdWUoJm11dCBmbGFnX3ZhbHVlWy4uXSwgNCwgdHJ1ZSkudW53cmFwX2VycigpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL2Fjb25maWdfc3RvcmFnZV9zb3VyY2UucnMgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycwppbmRleCA2OGVkZjdkLi4zZjU5M2ZlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycworKysgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycwpAQCAtOTMsNyArOTMsMTIgQEAKICAgICAgICAgc3BlY2lhbF9maWVsZHM6IFNwZWNpYWxGaWVsZHM6Om5ldygpLAogICAgIH07CiAKLSAgICBsZXQgbXV0IHNvY2tldCA9IFVuaXhTdHJlYW06OmNvbm5lY3QoIi9kZXYvc29ja2V0L2Fjb25maWdkIik/OworICAgIGxldCBzb2NrZXRfbmFtZSA9IGlmIGFjb25maWdfZmxhZ3M6OmF1dG9fZ2VuZXJhdGVkOjplbmFibGVfc3lzdGVtX2Fjb25maWdkX3J1c3QoKSB7CisgICAgICAgICIvZGV2L3NvY2tldC9hY29uZmlnZF9zeXN0ZW0iCisgICAgfSBlbHNlIHsKKyAgICAgICAgIi9kZXYvc29ja2V0L2Fjb25maWdkIgorICAgIH07CisgICAgbGV0IG11dCBzb2NrZXQgPSBVbml4U3RyZWFtOjpjb25uZWN0KHNvY2tldF9uYW1lKT87CiAKICAgICBsZXQgbWVzc2FnZV9idWZmZXIgPSBtZXNzYWdlcy53cml0ZV90b19ieXRlcygpPzsKICAgICBsZXQgbXV0IG1lc3NhZ2VfbGVuZ3RoX2J1ZmZlcjogW3U4OyA0XSA9IFswOyA0XTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9sb2FkX3Byb3Rvcy5ycyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9sb2FkX3Byb3Rvcy5ycwppbmRleCA5MGQ4NTk5Li5jNWFjOGZmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbG9hZF9wcm90b3MucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL2xvYWRfcHJvdG9zLnJzCkBAIC01MSw3ICs1MSwxMCBAQAogCiAgICAgbGV0IHBhdGhzID0gYWNvbmZpZ19kZXZpY2VfcGF0aHM6OnBhcnNlZF9mbGFnc19wcm90b19wYXRocygpPzsKICAgICBmb3IgcGF0aCBpbiBwYXRocyB7Ci0gICAgICAgIGxldCBieXRlcyA9IGZzOjpyZWFkKHBhdGguY2xvbmUoKSk/OworICAgICAgICBsZXQgT2soYnl0ZXMpID0gZnM6OnJlYWQoJnBhdGgpIGVsc2UgeworICAgICAgICAgICAgZXByaW50bG4hKCJ3YXJuaW5nOiBmYWlsZWQgdG8gcmVhZCB7Oj99IiwgcGF0aCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfTsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFnczogUHJvdG9QYXJzZWRGbGFncyA9IHByb3RvYnVmOjpNZXNzYWdlOjpwYXJzZV9mcm9tX2J5dGVzKCZieXRlcyk/OwogICAgICAgICBmb3IgZmxhZyBpbiBwYXJzZWRfZmxhZ3MucGFyc2VkX2ZsYWcgewogICAgICAgICAgICAgLy8gVE9ETyhiLzMzNDk1NDc0OCk6IGVuZm9yY2Ugb25lLWNvbnRhaW5lci1wZXItZmxhZyBpbnZhcmlhbnQuCkBAIC02MCwzICs2MywxMCBAQAogICAgIH0KICAgICBPayhyZXN1bHQpCiB9CisKK3B1YihjcmF0ZSkgZm4gbGlzdF9jb250YWluZXJzKCkgLT4gUmVzdWx0PFZlYzxTdHJpbmc+PiB7CisgICAgT2soYWNvbmZpZ19kZXZpY2VfcGF0aHM6OnBhcnNlZF9mbGFnc19wcm90b19wYXRocygpPworICAgICAgICAuaW50b19pdGVyKCkKKyAgICAgICAgLm1hcCh8cHwgaW5mZXJfY29udGFpbmVyKCZwKSkKKyAgICAgICAgLmNvbGxlY3QoKSkKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9tYWluLnJzIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL21haW4ucnMKaW5kZXggMDdiNzI0My4uODE3M2JjMiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL21haW4ucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL21haW4ucnMKQEAgLTI1Myw2ICsyNTMsMTQgQEAKICAgICAgICAgRmxhZ1NvdXJjZVR5cGU6OkRldmljZUNvbmZpZyA9PiBEZXZpY2VDb25maWdTb3VyY2U6Omxpc3RfZmxhZ3MoKT8sCiAgICAgICAgIEZsYWdTb3VyY2VUeXBlOjpBY29uZmlnU3RvcmFnZSA9PiBBY29uZmlnU3RvcmFnZVNvdXJjZTo6bGlzdF9mbGFncygpPywKICAgICB9OworCisgICAgaWYgbGV0IFNvbWUocmVmIGMpID0gY29udGFpbmVyIHsKKyAgICAgICAgZW5zdXJlISgKKyAgICAgICAgICAgIGxvYWRfcHJvdG9zOjpsaXN0X2NvbnRhaW5lcnMoKT8uY29udGFpbnMoYyksCisgICAgICAgICAgICBmb3JtYXQhKCJjb250YWluZXIgJ3t9JyBub3QgZm91bmQiLCAmYykKKyAgICAgICAgKTsKKyAgICB9CisKICAgICBsZXQgZmxhZ3MgPSAoRmlsdGVyIHsgY29udGFpbmVyIH0pLmFwcGx5KCZmbGFnc191bmZpbHRlcmVkKTsKICAgICBsZXQgcGFkZGluZ19pbmZvID0gUGFkZGluZ0luZm8gewogICAgICAgICBsb25nZXN0X2ZsYWdfY29sOiBmbGFncy5pdGVyKCkubWFwKHxmfCBmLnF1YWxpZmllZF9uYW1lKCkubGVuKCkpLm1heCgpLnVud3JhcF9vcigwKSwKQEAgLTI5OCw3ICszMDYsNyBAQAogICAgICAgICBDb21tYW5kOjpMaXN0IHsgY29udGFpbmVyIH0gPT4gewogICAgICAgICAgICAgaWYgYWNvbmZpZ19mbGFnczo6YXV0b19nZW5lcmF0ZWQ6OmVuYWJsZV9vbmx5X25ld19zdG9yYWdlKCkgewogICAgICAgICAgICAgICAgIGxpc3QoRmxhZ1NvdXJjZVR5cGU6OkFjb25maWdTdG9yYWdlLCBjb250YWluZXIpCi0gICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGFueWhvdyEoInN0b3JhZ2UgbWF5IG5vdCBiZSBlbmFibGVkOiB7ZXJyfSIpKQorICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBhbnlob3chKCJjb3VsZCBub3QgbGlzdCBmbGFnczoge2Vycn0iKSkKICAgICAgICAgICAgICAgICAgICAgLm1hcChTb21lKQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBsaXN0KEZsYWdTb3VyY2VUeXBlOjpEZXZpY2VDb25maWcsIGNvbnRhaW5lcikubWFwKFNvbWUpCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9CaW5kZXIuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL0JpbmRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjMxM2QKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9CaW5kZXIuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm9zOworCitwdWJsaWMgY2xhc3MgQmluZGVyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgY2xlYXJDYWxsaW5nSWRlbnRpdHkoKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkobG9uZyB0b2tlbikgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL0FuZHJvaWQuYnAgYi90b29scy9lZGl0X21vbml0b3IvQW5kcm9pZC5icAppbmRleCAzNDk3ODIxLi5iOGFjNWJmIDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvQW5kcm9pZC5icAorKysgYi90b29scy9lZGl0X21vbml0b3IvQW5kcm9pZC5icApAQCAtMzUsNiArMzUsMTMgQEAKICAgICBwa2dfcGF0aDogImVkaXRfbW9uaXRvciIsCiAgICAgc3JjczogWwogICAgICAgICAiZGFlbW9uX21hbmFnZXIucHkiLAorICAgICAgICAiZWRpdF9tb25pdG9yLnB5IiwKKyAgICAgICAgInV0aWxzLnB5IiwKKyAgICBdLAorICAgIGxpYnM6IFsKKyAgICAgICAgImFzdWl0ZV9jY19jbGllbnQiLAorICAgICAgICAiZWRpdF9ldmVudF9wcm90byIsCisgICAgICAgICJ3YXRjaGRvZyIsCiAgICAgXSwKIH0KIApAQCAtNTMsNiArNjAsNTEgQEAKICAgICB9LAogfQogCitweXRob25fdGVzdF9ob3N0IHsKKyAgICBuYW1lOiAiZWRpdF9tb25pdG9yX3Rlc3QiLAorICAgIG1haW46ICJlZGl0X21vbml0b3JfdGVzdC5weSIsCisgICAgcGtnX3BhdGg6ICJlZGl0X21vbml0b3IiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImVkaXRfbW9uaXRvcl90ZXN0LnB5IiwKKyAgICBdLAorICAgIGxpYnM6IFsKKyAgICAgICAgImVkaXRfbW9uaXRvcl9saWIiLAorICAgIF0sCisgICAgdGVzdF9vcHRpb25zOiB7CisgICAgICAgIHVuaXRfdGVzdDogdHJ1ZSwKKyAgICB9LAorfQorCitweXRob25fdGVzdF9ob3N0IHsKKyAgICBuYW1lOiAiZWRpdF9tb25pdG9yX3V0aWxzX3Rlc3QiLAorICAgIG1haW46ICJ1dGlsc190ZXN0LnB5IiwKKyAgICBwa2dfcGF0aDogImVkaXRfbW9uaXRvciIsCisgICAgc3JjczogWworICAgICAgICAidXRpbHNfdGVzdC5weSIsCisgICAgXSwKKyAgICBsaWJzOiBbCisgICAgICAgICJlZGl0X21vbml0b3JfbGliIiwKKyAgICBdLAorICAgIHRlc3Rfb3B0aW9uczogeworICAgICAgICB1bml0X3Rlc3Q6IHRydWUsCisgICAgfSwKK30KKworcHl0aG9uX3Rlc3RfaG9zdCB7CisgICAgbmFtZTogImVkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0IiwKKyAgICBtYWluOiAiZWRpdF9tb25pdG9yX2ludGVncmF0aW9uX3Rlc3QucHkiLAorICAgIHBrZ19wYXRoOiAidGVzdGRhdGEiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImVkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0LnB5IiwKKyAgICBdLAorICAgIHRlc3Rfb3B0aW9uczogeworICAgICAgICB1bml0X3Rlc3Q6IHRydWUsCisgICAgfSwKKyAgICBkYXRhOiBbCisgICAgICAgICI6ZWRpdF9tb25pdG9yIiwKKyAgICBdLAorfQorCiBweXRob25fYmluYXJ5X2hvc3QgewogICAgIG5hbWU6ICJlZGl0X21vbml0b3IiLAogICAgIHBrZ19wYXRoOiAiZWRpdF9tb25pdG9yIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlci5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlci5weQppbmRleCA4OTJjMjkyLi5hZmRlZmM1IDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXIucHkKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyLnB5CkBAIC0xMywyNCArMTMsMzMgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKIAoraW1wb3J0IGdldHBhc3MKIGltcG9ydCBoYXNobGliCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogCitmcm9tIGF0ZXN0Lm1ldHJpY3MgaW1wb3J0IGNsZWFyY3V0X2NsaWVudAorZnJvbSBhdGVzdC5wcm90byBpbXBvcnQgY2xpZW50YW5hbHl0aWNzX3BiMgorZnJvbSBlZGl0X21vbml0b3IgaW1wb3J0IHV0aWxzCitmcm9tIHByb3RvIGltcG9ydCBlZGl0X2V2ZW50X3BiMgogCi1ERUZBVUxUX1BST0NFU1NfVEVSTUlOQVRJT05fVElNRU9VVF9TRUNPTkRTID0gMQorREVGQVVMVF9QUk9DRVNTX1RFUk1JTkFUSU9OX1RJTUVPVVRfU0VDT05EUyA9IDUKIERFRkFVTFRfTU9OSVRPUl9JTlRFUlZBTF9TRUNPTkRTID0gNQotREVGQVVMVF9NRU1PUllfVVNBR0VfVEhSRVNIT0xEID0gMjAwMAorREVGQVVMVF9NRU1PUllfVVNBR0VfVEhSRVNIT0xEID0gMiAqIDEwMjQgICMgMkdCCiBERUZBVUxUX0NQVV9VU0FHRV9USFJFU0hPTEQgPSAyMDAKIERFRkFVTFRfUkVCT09UX1RJTUVPVVRfU0VDT05EUyA9IDYwICogNjAgKiAyNAogQkxPQ0tfU0lHTl9GSUxFID0gImVkaXRfbW9uaXRvcl9ibG9ja19zaWduIgorIyBFbnVtIG9mIHRoZSBDbGVhcmN1dCBsb2cgc291cmNlIGRlZmluZWQgdW5kZXIKKyMgL2dvb2dsZTMvd2lyZWxlc3MvYW5kcm9pZC9wbGF5L3BsYXlsb2cvcHJvdG8vbG9nX3NvdXJjZV9lbnVtLnByb3RvCitMT0dfU09VUkNFID0gMjUyNAogCiAKIGRlZiBkZWZhdWx0X2RhZW1vbl90YXJnZXQoKToKQEAgLTQ2LDExICs1NSwxNiBAQAogICAgICAgYmluYXJ5X3BhdGg6IHN0ciwKICAgICAgIGRhZW1vbl90YXJnZXQ6IGNhbGxhYmxlID0gZGVmYXVsdF9kYWVtb25fdGFyZ2V0LAogICAgICAgZGFlbW9uX2FyZ3M6IHR1cGxlID0gKCksCisgICAgICBjY2xpZW50OiBjbGVhcmN1dF9jbGllbnQuQ2xlYXJjdXQgfCBOb25lID0gTm9uZSwKICAgKToKICAgICBzZWxmLmJpbmFyeV9wYXRoID0gYmluYXJ5X3BhdGgKICAgICBzZWxmLmRhZW1vbl90YXJnZXQgPSBkYWVtb25fdGFyZ2V0CiAgICAgc2VsZi5kYWVtb25fYXJncyA9IGRhZW1vbl9hcmdzCisgICAgc2VsZi5jY2xpZW50ID0gY2NsaWVudCBvciBjbGVhcmN1dF9jbGllbnQuQ2xlYXJjdXQoTE9HX1NPVVJDRSkKIAorICAgIHNlbGYudXNlcl9uYW1lID0gZ2V0cGFzcy5nZXR1c2VyKCkKKyAgICBzZWxmLmhvc3RfbmFtZSA9IHBsYXRmb3JtLm5vZGUoKQorICAgIHNlbGYuc291cmNlX3Jvb3QgPSBvcy5lbnZpcm9uLmdldCgiQU5EUk9JRF9CVUlMRF9UT1AiLCAiIikKICAgICBzZWxmLnBpZCA9IG9zLmdldHBpZCgpCiAgICAgc2VsZi5kYWVtb25fcHJvY2VzcyA9IE5vbmUKIApAQCAtNjYsMTcgKzgwLDMzIEBACiAKICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICIiIldyaXRlcyB0aGUgcGlkZmlsZSBhbmQgc3RhcnRzIHRoZSBkYWVtb24gcHJvY2VzLiIiIgorICAgIGlmIG5vdCB1dGlscy5pc19mZWF0dXJlX2VuYWJsZWQoCisgICAgICAgICJlZGl0X21vbml0b3IiLAorICAgICAgICBzZWxmLnVzZXJfbmFtZSwKKyAgICAgICAgIkVOQUJMRV9BTkRST0lEX0VESVRfTU9OSVRPUiIsCisgICAgICAgIDEwLAorICAgICk6CisgICAgICBsb2dnaW5nLndhcm5pbmcoIkVkaXQgbW9uaXRvciBpcyBkaXNhYmxlZCwgZXhpdGluZy4uLiIpCisgICAgICByZXR1cm4KKwogICAgIGlmIHNlbGYuYmxvY2tfc2lnbi5leGlzdHMoKToKICAgICAgIGxvZ2dpbmcud2FybmluZygiQmxvY2sgc2lnbiBmb3VuZCwgZXhpdGluZy4uLiIpCiAgICAgICByZXR1cm4KIAotICAgIGlmIHNlbGYuYmluYXJ5X3BhdGguc3RhcnRzd2l0aCgnL2dvb2dsZS9jb2cvJyk6CisgICAgaWYgc2VsZi5iaW5hcnlfcGF0aC5zdGFydHN3aXRoKCIvZ29vZ2xlL2NvZy8iKToKICAgICAgIGxvZ2dpbmcud2FybmluZygiRWRpdCBtb25pdG9yIGZvciBjb2cgaXMgbm90IHN1cHBvcnRlZCwgZXhpdGluZy4uLiIpCiAgICAgICByZXR1cm4KIAotICAgIHNlbGYuX3N0b3BfYW55X2V4aXN0aW5nX2luc3RhbmNlKCkKLSAgICBzZWxmLl93cml0ZV9waWRfdG9fcGlkZmlsZSgpCi0gICAgc2VsZi5fc3RhcnRfZGFlbW9uX3Byb2Nlc3MoKQorICAgIHRyeToKKyAgICAgIHNlbGYuX3N0b3BfYW55X2V4aXN0aW5nX2luc3RhbmNlKCkKKyAgICAgIHNlbGYuX3dyaXRlX3BpZF90b19waWRmaWxlKCkKKyAgICAgIHNlbGYuX3N0YXJ0X2RhZW1vbl9wcm9jZXNzKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigiRmFpbGVkIHRvIHN0YXJ0IGRhZW1vbiBtYW5hZ2VyIHdpdGggZXJyb3IgJXMiLCBlKQorICAgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dCgKKyAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUQVJUX0VESVRfTU9OSVRPUgorICAgICAgKQorICAgICAgcmFpc2UgZQogCiAgIGRlZiBtb25pdG9yX2RhZW1vbigKICAgICAgIHNlbGYsCkBAIC0xMTgsNiArMTQ4LDkgQEAKICAgICAgICAgbG9nZ2luZy5lcnJvcigKICAgICAgICAgICAgICJEYWVtb24gcHJvY2VzcyBpcyBjb25zdW1pbmcgdG9vIG11Y2ggcmVzb3VyY2UsIGtpbGxpbmcuLi4iCiAgICAgICAgICksCisgICAgICAgIHNlbGYuX3NlbmRfZXJyb3JfZXZlbnRfdG9fY2xlYXJjdXQoCisgICAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuS0lMTEVEX0RVRV9UT19FWENFRURFRF9SRVNPVVJDRV9VU0FHRQorICAgICAgICApCiAgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZV9wcm9jZXNzKHNlbGYuZGFlbW9uX3Byb2Nlc3MucGlkKQogCiAgICAgbG9nZ2luZy5pbmZvKApAQCAtMTMxLDE0ICsxNjQsMjQgQEAKICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgIiIiU3RvcHMgdGhlIGRhZW1vbiBwcm9jZXNzIGFuZCByZW1vdmVzIHRoZSBwaWRmaWxlLiIiIgogCi0gICAgbG9nZ2luZy5kZWJ1ZygiaW4gZGFlbW9uIG1hbmFnZXIgY2xlYW51cC4iKQorICAgIGxvZ2dpbmcuaW5mbygiaW4gZGFlbW9uIG1hbmFnZXIgY2xlYW51cC4iKQogICAgIHRyeToKLSAgICAgIGlmIHNlbGYuZGFlbW9uX3Byb2Nlc3MgYW5kIHNlbGYuZGFlbW9uX3Byb2Nlc3MuaXNfYWxpdmUoKToKLSAgICAgICAgc2VsZi5fdGVybWluYXRlX3Byb2Nlc3Moc2VsZi5kYWVtb25fcHJvY2Vzcy5waWQpCisgICAgICBpZiBzZWxmLmRhZW1vbl9wcm9jZXNzOgorICAgICAgICAjIFRoZSBkYWVtb24gcHJvY2VzcyBtaWdodCBhbHJlYWR5IGluIHRlcm1pbmF0aW9uIHByb2Nlc3MsCisgICAgICAgICMgd2FpdCBzb21lIHRpbWUgYmVmb3JlIGtpbGwgaXQgZXhwbGljaXRseS4KKyAgICAgICAgc2VsZi5fd2FpdF9mb3JfcHJvY2Vzc190ZXJtaW5hdGUoc2VsZi5kYWVtb25fcHJvY2Vzcy5waWQsIDEpCisgICAgICAgIGlmIHNlbGYuZGFlbW9uX3Byb2Nlc3MuaXNfYWxpdmUoKToKKyAgICAgICAgICBzZWxmLl90ZXJtaW5hdGVfcHJvY2VzcyhzZWxmLmRhZW1vbl9wcm9jZXNzLnBpZCkKICAgICAgIHNlbGYuX3JlbW92ZV9waWRmaWxlKCkKLSAgICAgIGxvZ2dpbmcuZGVidWcoIlN1Y2Nlc3NmdWxseSBzdG9wcGVkIGRhZW1vbiBtYW5hZ2VyLiIpCisgICAgICBsb2dnaW5nLmluZm8oIlN1Y2Nlc3NmdWxseSBzdG9wcGVkIGRhZW1vbiBtYW5hZ2VyLiIpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgbG9nZ2luZy5leGNlcHRpb24oIkZhaWxlZCB0byBzdG9wIGRhZW1vbiBtYW5hZ2VyIHdpdGggZXJyb3IgJXMiLCBlKQorICAgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dCgKKyAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUT1BfRURJVF9NT05JVE9SCisgICAgICApCisgICAgICBzeXMuZXhpdCgxKQorICAgIGZpbmFsbHk6CisgICAgICBzZWxmLmNjbGllbnQuZmx1c2hfZXZlbnRzKCkKIAogICBkZWYgcmVib290KHNlbGYpOgogICAgICIiIlJlYm9vdHMgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KQEAgLTE0Niw3ICsxODksNyBAQAogICAgIFN0b3BzIHRoZSBjdXJyZW50IGRhZW1vbiBtYW5hZ2VyIGFuZCByZWJvb3RzIHRoZSBlbnRpcmUgcHJvY2VzcyBiYXNlZCBvbgogICAgIHRoZSBiaW5hcnkgZmlsZS4gRXhpdHMgZGlyZWN0bHkgSWYgdGhlIGJpbmFyeSBmaWxlIG5vIGxvbmdlciBleGlzdHMuCiAgICAgIiIiCi0gICAgbG9nZ2luZy5kZWJ1ZygiUmVib290aW5nIHByb2Nlc3MgYmFzZWQgb24gYmluYXJ5ICVzLiIsIHNlbGYuYmluYXJ5X3BhdGgpCisgICAgbG9nZ2luZy5pbmZvKCJSZWJvb3RpbmcgcHJvY2VzcyBiYXNlZCBvbiBiaW5hcnkgJXMuIiwgc2VsZi5iaW5hcnlfcGF0aCkKIAogICAgICMgU3RvcCB0aGUgY3VycmVudCBkYWVtb24gbWFuYWdlciBmaXJzdC4KICAgICBzZWxmLnN0b3AoKQpAQCAtMTYwLDYgKzIwMyw5IEBACiAgICAgICBvcy5leGVjdihzZWxmLmJpbmFyeV9wYXRoLCBzeXMuYXJndikKICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgbG9nZ2luZy5leGNlcHRpb24oIkZhaWxlZCB0byByZWJvb3QgcHJvY2VzcyB3aXRoIGVycm9yOiAlcy4iLCBlKQorICAgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dCgKKyAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1JFQk9PVF9FRElUX01PTklUT1IKKyAgICAgICkKICAgICAgIHN5cy5leGl0KDEpICAjIEluZGljYXRlIGFuIGVycm9yIG9jY3VycmVkCiAKICAgZGVmIGNsZWFudXAoc2VsZik6CkBAIC0xNzEsNiArMjE3LDcgQEAKICAgICB0aGF0IHJlcXVpcmVzIGltbWVkaWF0ZSBjbGVhbnVwIHRvIHByZXZlbnQgZGFtYW5nZXIgdG8gdGhlIHN5c3RlbS4KICAgICAiIiIKICAgICBsb2dnaW5nLmRlYnVnKCJTdGFydCBjbGVhbmluZyB1cCBhbGwgZXhpc3RpbmcgaW5zdGFuY2VzLiIpCisgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dChlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRk9SQ0VfQ0xFQU5VUCkKIAogICAgIHRyeToKICAgICAgICMgRmlyc3QgcGxhY2VzIGEgYmxvY2sgc2lnbiB0byBwcmV2ZW50IGFueSBlZGl0IG1vbml0b3IgcHJvY2VzcyB0byBzdGFydC4KQEAgLTIyNyw2ICsyNzQsNyBAQAogICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcygKICAgICAgICAgdGFyZ2V0PXNlbGYuZGFlbW9uX3RhcmdldCwgYXJncz1zZWxmLmRhZW1vbl9hcmdzCiAgICAgKQorICAgIHAuZGFlbW9uID0gVHJ1ZQogICAgIHAuc3RhcnQoKQogCiAgICAgbG9nZ2luZy5pbmZvKCJTdGFydCBzdWJwcm9jZXNzIHdpdGggUElEICVkIiwgcC5waWQpCkBAIC0yOTksMzYgKzM0NywyOCBAQAogICAgIHJldHVybiBwaWRfZmlsZV9wYXRoCiAKICAgZGVmIF9nZXRfcHJvY2Vzc19tZW1vcnlfcGVyY2VudChzZWxmLCBwaWQ6IGludCkgLT4gZmxvYXQ6Ci0gICAgdHJ5OgotICAgICAgd2l0aCBvcGVuKGYiL3Byb2Mve3BpZH0vc3RhdCIsICJyIikgYXMgZjoKLSAgICAgICAgc3RhdF9kYXRhID0gZi5yZWFkbGluZSgpLnNwbGl0KCkKLSAgICAgICAgIyBSU1MgaXMgdGhlIDI0dGggZmllbGQgaW4gL3Byb2MvW3BpZF0vc3RhdAotICAgICAgICByc3NfcGFnZXMgPSBpbnQoc3RhdF9kYXRhWzIzXSkKLSAgICAgICAgcmV0dXJuIHJzc19wYWdlcyAqIDQgLyAxMDI0ICAjIENvdmVydCB0byBNQgotICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIEluZGV4RXJyb3IsIFZhbHVlRXJyb3IsIElPRXJyb3IpIGFzIGU6Ci0gICAgICBsb2dnaW5nLmV4Y2VwdGlvbigiRmFpbGVkIHRvIGdldCBtZW1vcnkgdXNhZ2UuIikKLSAgICAgIHJhaXNlIGUKKyAgICB3aXRoIG9wZW4oZiIvcHJvYy97cGlkfS9zdGF0IiwgInIiKSBhcyBmOgorICAgICAgc3RhdF9kYXRhID0gZi5yZWFkbGluZSgpLnNwbGl0KCkKKyAgICAgICMgUlNTIGlzIHRoZSAyNHRoIGZpZWxkIGluIC9wcm9jL1twaWRdL3N0YXQKKyAgICAgIHJzc19wYWdlcyA9IGludChzdGF0X2RhdGFbMjNdKQorICAgICAgcmV0dXJuIHJzc19wYWdlcyAqIDQgLyAxMDI0ICAjIENvdmVydCB0byBNQgogCiAgIGRlZiBfZ2V0X3Byb2Nlc3NfY3B1X3BlcmNlbnQoc2VsZiwgcGlkOiBpbnQsIGludGVydmFsOiBpbnQgPSAxKSAtPiBmbG9hdDoKLSAgICB0cnk6Ci0gICAgICB0b3RhbF9zdGFydF90aW1lID0gc2VsZi5fZ2V0X3RvdGFsX2NwdV90aW1lKHBpZCkKLSAgICAgIHdpdGggb3BlbigiL3Byb2MvdXB0aW1lIiwgInIiKSBhcyBmOgotICAgICAgICB1cHRpbWVfc3RhcnQgPSBmbG9hdChmLnJlYWRsaW5lKCkuc3BsaXQoKVswXSkKKyAgICB0b3RhbF9zdGFydF90aW1lID0gc2VsZi5fZ2V0X3RvdGFsX2NwdV90aW1lKHBpZCkKKyAgICB3aXRoIG9wZW4oIi9wcm9jL3VwdGltZSIsICJyIikgYXMgZjoKKyAgICAgIHVwdGltZV9zdGFydCA9IGZsb2F0KGYucmVhZGxpbmUoKS5zcGxpdCgpWzBdKQogCi0gICAgICB0aW1lLnNsZWVwKGludGVydmFsKQorICAgIHRpbWUuc2xlZXAoaW50ZXJ2YWwpCiAKLSAgICAgIHRvdGFsX2VuZF90aW1lID0gc2VsZi5fZ2V0X3RvdGFsX2NwdV90aW1lKHBpZCkKLSAgICAgIHdpdGggb3BlbigiL3Byb2MvdXB0aW1lIiwgInIiKSBhcyBmOgotICAgICAgICB1cHRpbWVfZW5kID0gZmxvYXQoZi5yZWFkbGluZSgpLnNwbGl0KClbMF0pCisgICAgdG90YWxfZW5kX3RpbWUgPSBzZWxmLl9nZXRfdG90YWxfY3B1X3RpbWUocGlkKQorICAgIHdpdGggb3BlbigiL3Byb2MvdXB0aW1lIiwgInIiKSBhcyBmOgorICAgICAgdXB0aW1lX2VuZCA9IGZsb2F0KGYucmVhZGxpbmUoKS5zcGxpdCgpWzBdKQogCi0gICAgICByZXR1cm4gKAotICAgICAgICAgICh0b3RhbF9lbmRfdGltZSAtIHRvdGFsX3N0YXJ0X3RpbWUpCi0gICAgICAgICAgLyAodXB0aW1lX2VuZCAtIHVwdGltZV9zdGFydCkKLSAgICAgICAgICAqIDEwMAotICAgICAgKQotICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIEluZGV4RXJyb3IsIFZhbHVlRXJyb3IsIElPRXJyb3IpIGFzIGU6Ci0gICAgICBsb2dnaW5nLmV4Y2VwdGlvbigiRmFpbGVkIHRvIGdldCBDUFUgdXNhZ2UuIikKLSAgICAgIHJhaXNlIGUKKyAgICByZXR1cm4gKAorICAgICAgICAodG90YWxfZW5kX3RpbWUgLSB0b3RhbF9zdGFydF90aW1lKQorICAgICAgICAvICh1cHRpbWVfZW5kIC0gdXB0aW1lX3N0YXJ0KQorICAgICAgICAqIDEwMAorICAgICkKIAogICBkZWYgX2dldF90b3RhbF9jcHVfdGltZShzZWxmLCBwaWQ6IGludCkgLT4gZmxvYXQ6CiAgICAgd2l0aCBvcGVuKGYiL3Byb2Mve3N0cihwaWQpfS9zdGF0IiwgInIiKSBhcyBmOgpAQCAtMzUwLDQgKzM5MCwxOSBAQAogICAgICAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBJT0Vycm9yLCBWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJGYWlsZWQgdG8gZ2V0IHBpZCBmcm9tIGZpbGUgcGF0aDogJXMiLCBmaWxlKQogCi0gICAgcmV0dXJuIHBpZHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisgICAgcmV0dXJuIHBpZHMKKworICBkZWYgX3NlbmRfZXJyb3JfZXZlbnRfdG9fY2xlYXJjdXQoc2VsZiwgZXJyb3JfdHlwZSk6CisgICAgZWRpdF9tb25pdG9yX2Vycm9yX2V2ZW50X3Byb3RvID0gZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50KAorICAgICAgICB1c2VyX25hbWU9c2VsZi51c2VyX25hbWUsCisgICAgICAgIGhvc3RfbmFtZT1zZWxmLmhvc3RfbmFtZSwKKyAgICAgICAgc291cmNlX3Jvb3Q9c2VsZi5zb3VyY2Vfcm9vdCwKKyAgICApCisgICAgZWRpdF9tb25pdG9yX2Vycm9yX2V2ZW50X3Byb3RvLmVkaXRfbW9uaXRvcl9lcnJvcl9ldmVudC5Db3B5RnJvbSgKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkVkaXRNb25pdG9yRXJyb3JFdmVudChlcnJvcl90eXBlPWVycm9yX3R5cGUpCisgICAgKQorICAgIGxvZ19ldmVudCA9IGNsaWVudGFuYWx5dGljc19wYjIuTG9nRXZlbnQoCisgICAgICAgIGV2ZW50X3RpbWVfbXM9aW50KHRpbWUudGltZSgpICogMTAwMCksCisgICAgICAgIHNvdXJjZV9leHRlbnNpb249ZWRpdF9tb25pdG9yX2Vycm9yX2V2ZW50X3Byb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCksCisgICAgKQorICAgIHNlbGYuY2NsaWVudC5sb2cobG9nX2V2ZW50KQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyX3Rlc3QucHkgYi90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXJfdGVzdC5weQppbmRleCA3MjQ0MmM2Li44ZDE4Mzg4IDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXJfdGVzdC5weQorKysgYi90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXJfdGVzdC5weQpAQCAtMjYsNiArMjYsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiBmcm9tIGVkaXRfbW9uaXRvciBpbXBvcnQgZGFlbW9uX21hbmFnZXIKK2Zyb20gcHJvdG8gaW1wb3J0IGVkaXRfZXZlbnRfcGIyCiAKIAogVEVTVF9CSU5BUllfRklMRSA9ICcvcGF0aC90by90ZXN0X2JpbmFyeScKQEAgLTgwLDYgKzgxLDkgQEAKICAgICAjIFNldHMgdGhlIHRlbXBkaXIgdW5kZXIgdGhlIHdvcmtpbmcgZGlyIHNvIGFueSB0ZW1wIGZpbGVzIGNyZWF0ZWQgZHVyaW5nCiAgICAgIyB0ZXN0cyB3aWxsIGJlIGNsZWFuZWQuCiAgICAgdGVtcGZpbGUudGVtcGRpciA9IHNlbGYud29ya2luZ19kaXIubmFtZQorICAgIHNlbGYucGF0Y2ggPSBtb2NrLnBhdGNoLmRpY3QoCisgICAgICAgIG9zLmVudmlyb24sIHsnRU5BQkxFX0FORFJPSURfRURJVF9NT05JVE9SJzogJ3RydWUnfSkKKyAgICBzZWxmLnBhdGNoLnN0YXJ0KCkKIAogICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgIyBDbGVhbnMgdXAgYW55IGNoaWxkIHByb2Nlc3NlcyBsZWZ0IGJ5IHRoZSB0ZXN0cy4KQEAgLTg3LDYgKzkxLDcgQEAKICAgICBzZWxmLndvcmtpbmdfZGlyLmNsZWFudXAoKQogICAgICMgUmVzdG9yZXMgdGVtcGRpci4KICAgICB0ZW1wZmlsZS50ZW1wZGlyID0gc2VsZi5vcmlnaW5hbF90ZW1wZGlyCisgICAgc2VsZi5wYXRjaC5zdG9wKCkKICAgICBzdXBlcigpLnRlYXJEb3duKCkKIAogICBkZWYgdGVzdF9zdGFydF9zdWNjZXNzX3dpdGhfbm9fZXhpc3RpbmdfaW5zdGFuY2Uoc2VsZik6CkBAIC0xMjgsMTMgKzEzMywyNCBAQAogCiAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKFRFU1RfQklOQVJZX0ZJTEUpCiAgICAgZG0uc3RhcnQoKQorCisgICAgIyBWZXJpZnkgbm8gZGFlbW9uIHByb2Nlc3MgaXMgc3RhcnRlZC4KKyAgICBzZWxmLmFzc2VydElzTm9uZShkbS5kYWVtb25fcHJvY2VzcykKKworICBAbW9jay5wYXRjaC5kaWN0KG9zLmVudmlyb24sIHsnRU5BQkxFX0FORFJPSURfRURJVF9NT05JVE9SJzogJ2ZhbHNlJ30sIGNsZWFyPVRydWUpCisgIGRlZiB0ZXN0X3N0YXJ0X3JldHVybl9kaXJlY3RseV9pZl9kaXNhYmxlZChzZWxmKToKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSkKKyAgICBkbS5zdGFydCgpCisKICAgICAjIFZlcmlmeSBubyBkYWVtb24gcHJvY2VzcyBpcyBzdGFydGVkLgogICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRtLmRhZW1vbl9wcm9jZXNzKQogCiAgIGRlZiB0ZXN0X3N0YXJ0X3JldHVybl9kaXJlY3RseV9pZl9pbl9jb2dfZW52KHNlbGYpOgogICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKLSAgICAgICAgJy9nb29nbGUvY29nL2Nsb3VkL3VzZXIvd29ya3NwYWNlL2VkaXRfbW9uaXRvcicpCisgICAgICAgICcvZ29vZ2xlL2NvZy9jbG91ZC91c2VyL3dvcmtzcGFjZS9lZGl0X21vbml0b3InCisgICAgKQogICAgIGRtLnN0YXJ0KCkKKwogICAgICMgVmVyaWZ5IG5vIGRhZW1vbiBwcm9jZXNzIGlzIHN0YXJ0ZWQuCiAgICAgc2VsZi5hc3NlcnRJc05vbmUoZG0uZGFlbW9uX3Byb2Nlc3MpCiAKQEAgLTE0OCw5ICsxNjQsMTMgQEAKICAgICB3aXRoIG9wZW4ocGlkX2ZpbGVfcGF0aF9kaXIuam9pbnBhdGgoVEVTVF9QSURfRklMRV9QQVRIKSwgJ3cnKSBhcyBmOgogICAgICAgZi53cml0ZSgnMTIzNDU2JykKIAotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgZXJyb3I6Ci0gICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSkKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoKQorICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSwgY2NsaWVudD1mYWtlX2NjbGllbnQpCiAgICAgICBkbS5zdGFydCgpCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUQVJUX0VESVRfTU9OSVRPUgorICAgICkKIAogICBkZWYgdGVzdF9zdGFydF9mYWlsZWRfdG9fd3JpdGVfcGlkZmlsZShzZWxmKToKICAgICBwaWRfZmlsZV9wYXRoX2RpciA9IHBhdGhsaWIuUGF0aChzZWxmLndvcmtpbmdfZGlyLm5hbWUpLmpvaW5wYXRoKApAQCAtMTYwLDQwICsxODAsNjMgQEAKICAgICAjIE1ha2VzIHRoZSBkaXJlY3RvcnkgcmVhZC1vbmx5IHNvIHdyaXRlIHBpZGZpbGUgd2lsbCBmYWlsLgogICAgIG9zLmNobW9kKHBpZF9maWxlX3BhdGhfZGlyLCAwbzU1NSkKIAotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yKSBhcyBlcnJvcjoKLSAgICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcihURVNUX0JJTkFSWV9GSUxFKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IpOgorICAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKFRFU1RfQklOQVJZX0ZJTEUsIGNjbGllbnQ9ZmFrZV9jY2xpZW50KQogICAgICAgZG0uc3RhcnQoKQorICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCisgICAgICAgIGZha2VfY2NsaWVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19TVEFSVF9FRElUX01PTklUT1IKKyAgICApCiAKICAgZGVmIHRlc3Rfc3RhcnRfZmFpbGVkX3RvX3N0YXJ0X2RhZW1vbl9wcm9jZXNzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBlcnJvcjoKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoKQorICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKLSAgICAgICAgICBURVNUX0JJTkFSWV9GSUxFLCBkYWVtb25fdGFyZ2V0PSd3cm9uZ190YXJnZXQnLCBkYWVtb25fYXJncz0oMSkKKyAgICAgICAgICBURVNUX0JJTkFSWV9GSUxFLAorICAgICAgICAgIGRhZW1vbl90YXJnZXQ9J3dyb25nX3RhcmdldCcsCisgICAgICAgICAgZGFlbW9uX2FyZ3M9KDEpLAorICAgICAgICAgIGNjbGllbnQ9ZmFrZV9jY2xpZW50LAogICAgICAgKQogICAgICAgZG0uc3RhcnQoKQorICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCisgICAgICAgIGZha2VfY2NsaWVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19TVEFSVF9FRElUX01PTklUT1IKKyAgICApCiAKICAgZGVmIHRlc3RfbW9uaXRvcl9kYWVtb25fc3VicHJvY2Vzc19raWxsZWRfaGlnaF9tZW1vcnlfdXNhZ2Uoc2VsZik6CisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KCkKICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCiAgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCiAgICAgICAgIGRhZW1vbl90YXJnZXQ9bWVtb3J5X2NvbnN1bWVfZGFlbW9uX3RhcmdldCwKICAgICAgICAgZGFlbW9uX2FyZ3M9KDIsKSwKKyAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCiAgICAgKQogICAgIGRtLnN0YXJ0KCkKICAgICBkbS5tb25pdG9yX2RhZW1vbihpbnRlcnZhbD0xLCBtZW1vcnlfdGhyZXNob2xkPTIpCiAKICAgICBzZWxmLmFzc2VydFRydWUoZG0ubWF4X21lbW9yeV91c2FnZSA+PSAyKQogICAgIHNlbGYuYXNzZXJ0X25vX3N1YnByb2Nlc3NfcnVubmluZygpCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuS0lMTEVEX0RVRV9UT19FWENFRURFRF9SRVNPVVJDRV9VU0FHRSwKKyAgICApCiAKICAgZGVmIHRlc3RfbW9uaXRvcl9kYWVtb25fc3VicHJvY2Vzc19raWxsZWRfaGlnaF9jcHVfdXNhZ2Uoc2VsZik6CisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KCkKICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCiAgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCiAgICAgICAgIGRhZW1vbl90YXJnZXQ9Y3B1X2NvbnN1bWVfZGFlbW9uX3RhcmdldCwKICAgICAgICAgZGFlbW9uX2FyZ3M9KDIwLCksCisgICAgICAgIGNjbGllbnQ9ZmFrZV9jY2xpZW50LAogICAgICkKICAgICBkbS5zdGFydCgpCiAgICAgZG0ubW9uaXRvcl9kYWVtb24oaW50ZXJ2YWw9MSwgY3B1X3RocmVzaG9sZD0yMCkKIAogICAgIHNlbGYuYXNzZXJ0VHJ1ZShkbS5tYXhfY3B1X3VzYWdlID49IDIwKQogICAgIHNlbGYuYXNzZXJ0X25vX3N1YnByb2Nlc3NfcnVubmluZygpCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuS0lMTEVEX0RVRV9UT19FWENFRURFRF9SRVNPVVJDRV9VU0FHRSwKKyAgICApCiAKICAgQG1vY2sucGF0Y2goJ3N1YnByb2Nlc3MuY2hlY2tfb3V0cHV0JykKICAgZGVmIHRlc3RfbW9uaXRvcl9kYWVtb25fZmFpbGVkX2RvZXNfbm90X21hdHRlcihzZWxmLCBtb2NrX291dHB1dCk6CkBAIC0yMDcsNyArMjUwLDggQEAKICAgICApCiAKICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCi0gICAgICAgIGJpbmFyeV9maWxlLm5hbWUsIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbgorICAgICAgICBiaW5hcnlfZmlsZS5uYW1lLAorICAgICAgICBkYWVtb25fdGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24sCiAgICAgKQogICAgIGRtLnN0YXJ0KCkKICAgICBkbS5tb25pdG9yX2RhZW1vbihyZWJvb3RfdGltZW91dD0wLjUpCkBAIC0yMjYsMjcgKzI3MCw0MiBAQAogICBAbW9jay5wYXRjaCgnb3Mua2lsbCcpCiAgIGRlZiB0ZXN0X3N0b3BfZmFpbGVkX3RvX2tpbGxfZGFlbW9uX3Byb2Nlc3Moc2VsZiwgbW9ja19raWxsKToKICAgICBtb2NrX2tpbGwuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdVbmtub3duIE9TRXJyb3InKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCiAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAotICAgICAgICBURVNUX0JJTkFSWV9GSUxFLCBkYWVtb25fdGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24KKyAgICAgICAgVEVTVF9CSU5BUllfRklMRSwKKyAgICAgICAgZGFlbW9uX3RhcmdldD1sb25nX3J1bm5pbmdfZGFlbW9uLAorICAgICAgICBjY2xpZW50PWZha2VfY2NsaWVudCwKICAgICApCi0gICAgZG0uc3RhcnQoKQotICAgIGRtLnN0b3AoKQogCi0gICAgc2VsZi5hc3NlcnRUcnVlKGRtLmRhZW1vbl9wcm9jZXNzLmlzX2FsaXZlKCkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGRtLnBpZF9maWxlX3BhdGguZXhpc3RzKCkpCisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgIGRtLnN0YXJ0KCkKKyAgICAgIGRtLnN0b3AoKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKGRtLmRhZW1vbl9wcm9jZXNzLmlzX2FsaXZlKCkpCisgICAgICBzZWxmLmFzc2VydFRydWUoZG0ucGlkX2ZpbGVfcGF0aC5leGlzdHMoKSkKKyAgICBzZWxmLl9hc3NlcnRfZXJyb3JfZXZlbnRfbG9nZ2VkKAorICAgICAgICBmYWtlX2NjbGllbnQsIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5GQUlMRURfVE9fU1RPUF9FRElUX01PTklUT1IKKyAgICApCiAKICAgQG1vY2sucGF0Y2goJ29zLnJlbW92ZScpCiAgIGRlZiB0ZXN0X3N0b3BfZmFpbGVkX3RvX3JlbW92ZV9waWRmaWxlKHNlbGYsIG1vY2tfcmVtb3ZlKToKICAgICBtb2NrX3JlbW92ZS5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoJ1Vua25vd24gT1NFcnJvcicpCiAKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoKQogICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKLSAgICAgICAgVEVTVF9CSU5BUllfRklMRSwgZGFlbW9uX3RhcmdldD1sb25nX3J1bm5pbmdfZGFlbW9uCisgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCisgICAgICAgIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbiwKKyAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCiAgICAgKQotICAgIGRtLnN0YXJ0KCkKLSAgICBkbS5zdG9wKCkKIAotICAgIHNlbGYuYXNzZXJ0X25vX3N1YnByb2Nlc3NfcnVubmluZygpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGRtLnBpZF9maWxlX3BhdGguZXhpc3RzKCkpCisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgIGRtLnN0YXJ0KCkKKyAgICAgIGRtLnN0b3AoKQorICAgICAgc2VsZi5hc3NlcnRfbm9fc3VicHJvY2Vzc19ydW5uaW5nKCkKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkbS5waWRfZmlsZV9wYXRoLmV4aXN0cygpKQorCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUT1BfRURJVF9NT05JVE9SCisgICAgKQogCiAgIEBtb2NrLnBhdGNoKCdvcy5leGVjdicpCiAgIGRlZiB0ZXN0X3JlYm9vdF9zdWNjZXNzKHNlbGYsIG1vY2tfZXhlY3YpOgpAQCAtMjczLDcgKzMzMiw3IEBACiAgICAgKQogICAgIGRtLnN0YXJ0KCkKIAotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKICAgICAgIGRtLnJlYm9vdCgpCiAgICAgICBtb2NrX2V4ZWN2LmFzc2VydF9ub3RfY2FsbGVkKCkKICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmNvZGUsIDApCkBAIC0yODEsMTggKzM0MCwyNCBAQAogICBAbW9jay5wYXRjaCgnb3MuZXhlY3YnKQogICBkZWYgdGVzdF9yZWJvb3RfZmFpbGVkKHNlbGYsIG1vY2tfZXhlY3YpOgogICAgIG1vY2tfZXhlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdVbmtub3duIE9TRXJyb3InKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCiAgICAgYmluYXJ5X2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoCiAgICAgICAgIGRpcj1zZWxmLndvcmtpbmdfZGlyLm5hbWUsIGRlbGV0ZT1GYWxzZQogICAgICkKIAogICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKLSAgICAgICAgYmluYXJ5X2ZpbGUubmFtZSwgZGFlbW9uX3RhcmdldD1sb25nX3J1bm5pbmdfZGFlbW9uCisgICAgICAgIGJpbmFyeV9maWxlLm5hbWUsCisgICAgICAgIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbiwKKyAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCiAgICAgKQogICAgIGRtLnN0YXJ0KCkKIAotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKICAgICAgIGRtLnJlYm9vdCgpCiAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5jb2RlLCAxKQorICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCisgICAgICAgIGZha2VfY2NsaWVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19SRUJPT1RfRURJVF9NT05JVE9SCisgICAgKQogCiAgIGRlZiBhc3NlcnRfcnVuX3NpbXBsZV9kYWVtb25fc3VjY2VzcyhzZWxmKToKICAgICBkYW1vbmVfb3V0cHV0X2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoCkBAIC0zNzQsNiArNDM5LDMzIEBACiAgICAgICBmLndyaXRlKHN0cihwLnBpZCkpCiAgICAgcmV0dXJuIHAKIAorICBkZWYgX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoc2VsZiwgZmFrZV9jY2xpZW50LCBlcnJvcl90eXBlKToKKyAgICBlcnJvcl9ldmVudHMgPSBmYWtlX2NjbGllbnQuZ2V0X3NlbnRfZXZlbnRzKCkKKyAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oZXJyb3JfZXZlbnRzKSwgMSkKKyAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZyb21TdHJpbmcoCisgICAgICAgICAgICBlcnJvcl9ldmVudHNbMF0uc291cmNlX2V4dGVuc2lvbgorICAgICAgICApLmVkaXRfbW9uaXRvcl9lcnJvcl9ldmVudC5lcnJvcl90eXBlLAorICAgICAgICBlcnJvcl90eXBlLAorICAgICkKKworCitjbGFzcyBGYWtlQ2xlYXJjdXRDbGllbnQ6CisKKyAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHNlbGYucGVuZGluZ19sb2dfZXZlbnRzID0gW10KKyAgICBzZWxmLnNlbnRfbG9nX2V2ZW50ID0gW10KKworICBkZWYgbG9nKHNlbGYsIGxvZ19ldmVudCk6CisgICAgc2VsZi5wZW5kaW5nX2xvZ19ldmVudHMuYXBwZW5kKGxvZ19ldmVudCkKKworICBkZWYgZmx1c2hfZXZlbnRzKHNlbGYpOgorICAgIHNlbGYuc2VudF9sb2dfZXZlbnQuZXh0ZW5kKHNlbGYucGVuZGluZ19sb2dfZXZlbnRzKQorICAgIHNlbGYucGVuZGluZ19sb2dfZXZlbnRzLmNsZWFyKCkKKworICBkZWYgZ2V0X3NlbnRfZXZlbnRzKHNlbGYpOgorICAgIHJldHVybiBzZWxmLnNlbnRfbG9nX2V2ZW50ICsgc2VsZi5wZW5kaW5nX2xvZ19ldmVudHMKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3IucHkgYi90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNTI4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yLnB5CkBAIC0wLDAgKzEsMjIwIEBACisjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworaW1wb3J0IGdldHBhc3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KK2ltcG9ydCBvcworaW1wb3J0IHBhdGhsaWIKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKKworZnJvbSBhdGVzdC5tZXRyaWNzIGltcG9ydCBjbGVhcmN1dF9jbGllbnQKK2Zyb20gYXRlc3QucHJvdG8gaW1wb3J0IGNsaWVudGFuYWx5dGljc19wYjIKK2Zyb20gcHJvdG8gaW1wb3J0IGVkaXRfZXZlbnRfcGIyCitmcm9tIHdhdGNoZG9nLmV2ZW50cyBpbXBvcnQgRmlsZVN5c3RlbUV2ZW50Citmcm9tIHdhdGNoZG9nLmV2ZW50cyBpbXBvcnQgUGF0dGVybk1hdGNoaW5nRXZlbnRIYW5kbGVyCitmcm9tIHdhdGNoZG9nLm9ic2VydmVycyBpbXBvcnQgT2JzZXJ2ZXIKKworIyBFbnVtIG9mIHRoZSBDbGVhcmN1dCBsb2cgc291cmNlIGRlZmluZWQgdW5kZXIKKyMgL2dvb2dsZTMvd2lyZWxlc3MvYW5kcm9pZC9wbGF5L3BsYXlsb2cvcHJvdG8vbG9nX3NvdXJjZV9lbnVtLnByb3RvCitMT0dfU09VUkNFID0gMjUyNAorREVGQVVMVF9GTFVTSF9JTlRFUlZBTF9TRUNPTkRTID0gNQorREVGQVVMVF9TSU5HTEVfRVZFTlRTX1NJWkVfVEhSRVNIT0xEID0gMTAwCisKKworY2xhc3MgQ2xlYXJjdXRFdmVudEhhbmRsZXIoUGF0dGVybk1hdGNoaW5nRXZlbnRIYW5kbGVyKToKKworICBkZWYgX19pbml0X18oCisgICAgICBzZWxmLAorICAgICAgcGF0aDogc3RyLAorICAgICAgZmx1c2hfaW50ZXJ2YWxfc2VjOiBpbnQsCisgICAgICBzaW5nbGVfZXZlbnRzX3NpemVfdGhyZXNob2xkOiBpbnQsCisgICAgICBpc19kcnlfcnVuOiBib29sID0gRmFsc2UsCisgICAgICBjY2xpZW50OiBjbGVhcmN1dF9jbGllbnQuQ2xlYXJjdXQgfCBOb25lID0gTm9uZSwKKyAgKToKKworICAgIHN1cGVyKCkuX19pbml0X18ocGF0dGVybnM9WyIqIl0sIGlnbm9yZV9kaXJlY3Rvcmllcz1UcnVlKQorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGggPSBwYXRoCisgICAgc2VsZi5mbHVzaF9pbnRlcnZhbF9zZWMgPSBmbHVzaF9pbnRlcnZhbF9zZWMKKyAgICBzZWxmLnNpbmdsZV9ldmVudHNfc2l6ZV90aHJlc2hvbGQgPSBzaW5nbGVfZXZlbnRzX3NpemVfdGhyZXNob2xkCisgICAgc2VsZi5pc19kcnlfcnVuID0gaXNfZHJ5X3J1bgorICAgIHNlbGYuY2NsaWVudCA9IGNjbGllbnQgb3IgY2xlYXJjdXRfY2xpZW50LkNsZWFyY3V0KExPR19TT1VSQ0UpCisKKyAgICBzZWxmLnVzZXJfbmFtZSA9IGdldHBhc3MuZ2V0dXNlcigpCisgICAgc2VsZi5ob3N0X25hbWUgPSBwbGF0Zm9ybS5ub2RlKCkKKyAgICBzZWxmLnNvdXJjZV9yb290ID0gb3MuZW52aXJvbi5nZXQoIkFORFJPSURfQlVJTERfVE9QIiwgIiIpCisKKyAgICBzZWxmLnBlbmRpbmdfZXZlbnRzID0gW10KKyAgICBzZWxmLl9zY2hlZHVsZWRfbG9nX3RocmVhZCA9IE5vbmUKKyAgICBzZWxmLl9wZW5kaW5nX2V2ZW50c19sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisgIGRlZiBvbl9tb3ZlZChzZWxmLCBldmVudDogRmlsZVN5c3RlbUV2ZW50KToKKyAgICBzZWxmLl9sb2dfZWRpdF9ldmVudChldmVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50Lk1PVkUpCisKKyAgZGVmIG9uX2NyZWF0ZWQoc2VsZiwgZXZlbnQ6IEZpbGVTeXN0ZW1FdmVudCk6CisgICAgc2VsZi5fbG9nX2VkaXRfZXZlbnQoZXZlbnQsIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5DUkVBVEUpCisKKyAgZGVmIG9uX2RlbGV0ZWQoc2VsZiwgZXZlbnQ6IEZpbGVTeXN0ZW1FdmVudCk6CisgICAgc2VsZi5fbG9nX2VkaXRfZXZlbnQoZXZlbnQsIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5ERUxFVEUpCisKKyAgZGVmIG9uX21vZGlmaWVkKHNlbGYsIGV2ZW50OiBGaWxlU3lzdGVtRXZlbnQpOgorICAgIHNlbGYuX2xvZ19lZGl0X2V2ZW50KGV2ZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuTU9ESUZZKQorCisgIGRlZiBmbHVzaGFsbChzZWxmKToKKyAgICBsb2dnaW5nLmluZm8oImZsdXNoaW5nIGFsbCBwZW5kaW5nIGV2ZW50cy4iKQorICAgIGlmIHNlbGYuX3NjaGVkdWxlZF9sb2dfdGhyZWFkOgorICAgICAgbG9nZ2luZy5pbmZvKCJjYW5jZWxpbmcgbG9nIHRocmVhZCIpCisgICAgICBzZWxmLl9zY2hlZHVsZWRfbG9nX3RocmVhZC5jYW5jZWwoKQorICAgICAgc2VsZi5fc2NoZWR1bGVkX2xvZ190aHJlYWQgPSBOb25lCisKKyAgICBzZWxmLl9sb2dfY2xlYXJjdXRfZXZlbnRzKCkKKyAgICBzZWxmLmNjbGllbnQuZmx1c2hfZXZlbnRzKCkKKworICBkZWYgX2xvZ19lZGl0X2V2ZW50KAorICAgICAgc2VsZiwgZXZlbnQ6IEZpbGVTeXN0ZW1FdmVudCwgZWRpdF90eXBlOiBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRWRpdFR5cGUKKyAgKToKKyAgICB0cnk6CisgICAgICBldmVudF90aW1lID0gdGltZS50aW1lKCkKKworICAgICAgaWYgc2VsZi5faXNfaGlkZGVuX2ZpbGUocGF0aGxpYi5QYXRoKGV2ZW50LnNyY19wYXRoKSk6CisgICAgICAgIGxvZ2dpbmcuZGVidWcoImlnbm9yZSBoaWRkZW4gZmlsZTogJXMuIiwgZXZlbnQuc3JjX3BhdGgpCisgICAgICAgIHJldHVybgorCisgICAgICBpZiBub3Qgc2VsZi5faXNfdW5kZXJfZ2l0X3Byb2plY3QocGF0aGxpYi5QYXRoKGV2ZW50LnNyY19wYXRoKSk6CisgICAgICAgIGxvZ2dpbmcuZGVidWcoCisgICAgICAgICAgICAiaWdub3JlIGZpbGUgJXMgd2hpY2ggZG9lcyBub3QgYmVsb25nIHRvIGEgZ2l0IHByb2plY3QiLAorICAgICAgICAgICAgZXZlbnQuc3JjX3BhdGgsCisgICAgICAgICkKKyAgICAgICAgcmV0dXJuCisKKyAgICAgIGxvZ2dpbmcuaW5mbygiJXM6ICVzIiwgZXZlbnQuZXZlbnRfdHlwZSwgZXZlbnQuc3JjX3BhdGgpCisKKyAgICAgIGV2ZW50X3Byb3RvID0gZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50KAorICAgICAgICAgIHVzZXJfbmFtZT1zZWxmLnVzZXJfbmFtZSwKKyAgICAgICAgICBob3N0X25hbWU9c2VsZi5ob3N0X25hbWUsCisgICAgICAgICAgc291cmNlX3Jvb3Q9c2VsZi5zb3VyY2Vfcm9vdCwKKyAgICAgICkKKyAgICAgIGV2ZW50X3Byb3RvLnNpbmdsZV9lZGl0X2V2ZW50LkNvcHlGcm9tKAorICAgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5TaW5nbGVFZGl0RXZlbnQoCisgICAgICAgICAgICAgIGZpbGVfcGF0aD1ldmVudC5zcmNfcGF0aCwgZWRpdF90eXBlPWVkaXRfdHlwZQorICAgICAgICAgICkKKyAgICAgICkKKyAgICAgIHdpdGggc2VsZi5fcGVuZGluZ19ldmVudHNfbG9jazoKKyAgICAgICAgc2VsZi5wZW5kaW5nX2V2ZW50cy5hcHBlbmQoKGV2ZW50X3Byb3RvLCBldmVudF90aW1lKSkKKyAgICAgICAgaWYgbm90IHNlbGYuX3NjaGVkdWxlZF9sb2dfdGhyZWFkOgorICAgICAgICAgIGxvZ2dpbmcuZGVidWcoCisgICAgICAgICAgICAgICJTY2hlZHVsaW5nIHRocmVhZCB0byBydW4gaW4gJWQgc2Vjb25kcyIsIHNlbGYuZmx1c2hfaW50ZXJ2YWxfc2VjCisgICAgICAgICAgKQorICAgICAgICAgIHNlbGYuX3NjaGVkdWxlZF9sb2dfdGhyZWFkID0gdGhyZWFkaW5nLlRpbWVyKAorICAgICAgICAgICAgICBzZWxmLmZsdXNoX2ludGVydmFsX3NlYywgc2VsZi5fbG9nX2NsZWFyY3V0X2V2ZW50cworICAgICAgICAgICkKKyAgICAgICAgICBzZWxmLl9zY2hlZHVsZWRfbG9nX3RocmVhZC5zdGFydCgpCisKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgbG9nZ2luZy5leGNlcHRpb24oIkZhaWxlZCB0byBsb2cgZWRpdCBldmVudC4iKQorCisgIGRlZiBfaXNfaGlkZGVuX2ZpbGUoc2VsZiwgZmlsZV9wYXRoOiBwYXRobGliLlBhdGgpIC0+IGJvb2w6CisgICAgcmV0dXJuIGFueSgKKyAgICAgICAgcGFydC5zdGFydHN3aXRoKCIuIikKKyAgICAgICAgZm9yIHBhcnQgaW4gZmlsZV9wYXRoLnJlbGF0aXZlX3RvKHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGgpLnBhcnRzCisgICAgKQorCisgIGRlZiBfaXNfdW5kZXJfZ2l0X3Byb2plY3Qoc2VsZiwgZmlsZV9wYXRoOiBwYXRobGliLlBhdGgpIC0+IGJvb2w6CisgICAgcm9vdF9wYXRoID0gcGF0aGxpYi5QYXRoKHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGgpLnJlc29sdmUoKQorICAgIHJldHVybiBhbnkoCisgICAgICAgIHJvb3RfcGF0aC5qb2lucGF0aChkaXIpLmpvaW5wYXRoKCcuZ2l0JykuZXhpc3RzKCkKKyAgICAgICAgZm9yIGRpciBpbiBmaWxlX3BhdGgucmVsYXRpdmVfdG8ocm9vdF9wYXRoKS5wYXJlbnRzCisgICAgKQorCisgIGRlZiBfbG9nX2NsZWFyY3V0X2V2ZW50cyhzZWxmKToKKyAgICB3aXRoIHNlbGYuX3BlbmRpbmdfZXZlbnRzX2xvY2s6CisgICAgICBzZWxmLl9zY2hlZHVsZWRfbG9nX3RocmVhZCA9IE5vbmUKKyAgICAgIGVkaXRfZXZlbnRzID0gc2VsZi5wZW5kaW5nX2V2ZW50cworICAgICAgc2VsZi5wZW5kaW5nX2V2ZW50cyA9IFtdCisKKyAgICBwZW5kaW5nX2V2ZW50c19zaXplID0gbGVuKGVkaXRfZXZlbnRzKQorICAgIGlmIHBlbmRpbmdfZXZlbnRzX3NpemUgPiBzZWxmLnNpbmdsZV9ldmVudHNfc2l6ZV90aHJlc2hvbGQ6CisgICAgICBsb2dnaW5nLmluZm8oCisgICAgICAgICAgImdvdCAlZCBldmVudHMgaW4gJWQgc2Vjb25kcywgc2VuZGluZyBhZ2dyZWdhdGVkIGV2ZW50cyBpbnN0ZWFkIiwKKyAgICAgICAgICBwZW5kaW5nX2V2ZW50c19zaXplLAorICAgICAgICAgIHNlbGYuZmx1c2hfaW50ZXJ2YWxfc2VjLAorICAgICAgKQorICAgICAgYWdncmVnYXRlZF9ldmVudF90aW1lID0gZWRpdF9ldmVudHNbMF1bMV0KKyAgICAgIGFnZ3JlZ2F0ZWRfZXZlbnRfcHJvdG8gPSBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQoCisgICAgICAgICAgdXNlcl9uYW1lPXNlbGYudXNlcl9uYW1lLAorICAgICAgICAgIGhvc3RfbmFtZT1zZWxmLmhvc3RfbmFtZSwKKyAgICAgICAgICBzb3VyY2Vfcm9vdD1zZWxmLnNvdXJjZV9yb290LAorICAgICAgKQorICAgICAgYWdncmVnYXRlZF9ldmVudF9wcm90by5hZ2dyZWdhdGVkX2VkaXRfZXZlbnQuQ29weUZyb20oCisgICAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkFnZ3JlZ2F0ZWRFZGl0RXZlbnQoCisgICAgICAgICAgICAgIG51bV9lZGl0cz1wZW5kaW5nX2V2ZW50c19zaXplCisgICAgICAgICAgKQorICAgICAgKQorICAgICAgZWRpdF9ldmVudHMgPSBbKGFnZ3JlZ2F0ZWRfZXZlbnRfcHJvdG8sIGFnZ3JlZ2F0ZWRfZXZlbnRfdGltZSldCisKKyAgICBpZiBzZWxmLmlzX2RyeV9ydW46CisgICAgICBsb2dnaW5nLmluZm8oIlNlbnQgJWQgZWRpdCBldmVudHMgaW4gZHJ5IHJ1bi4iLCBsZW4oZWRpdF9ldmVudHMpKQorICAgICAgcmV0dXJuCisKKyAgICBmb3IgZXZlbnRfcHJvdG8sIGV2ZW50X3RpbWUgaW4gZWRpdF9ldmVudHM6CisgICAgICBsb2dfZXZlbnQgPSBjbGllbnRhbmFseXRpY3NfcGIyLkxvZ0V2ZW50KAorICAgICAgICAgIGV2ZW50X3RpbWVfbXM9aW50KGV2ZW50X3RpbWUgKiAxMDAwKSwKKyAgICAgICAgICBzb3VyY2VfZXh0ZW5zaW9uPWV2ZW50X3Byb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCksCisgICAgICApCisgICAgICBzZWxmLmNjbGllbnQubG9nKGxvZ19ldmVudCkKKworICAgIGxvZ2dpbmcuaW5mbygic2VudCAlZCBlZGl0IGV2ZW50cyIsIGxlbihlZGl0X2V2ZW50cykpCisKKworZGVmIHN0YXJ0KAorICAgIHBhdGg6IHN0ciwKKyAgICBpc19kcnlfcnVuOiBib29sID0gRmFsc2UsCisgICAgZmx1c2hfaW50ZXJ2YWxfc2VjOiBpbnQgPSBERUZBVUxUX0ZMVVNIX0lOVEVSVkFMX1NFQ09ORFMsCisgICAgc2luZ2xlX2V2ZW50c19zaXplX3RocmVzaG9sZDogaW50ID0gREVGQVVMVF9TSU5HTEVfRVZFTlRTX1NJWkVfVEhSRVNIT0xELAorICAgIGNjbGllbnQ6IGNsZWFyY3V0X2NsaWVudC5DbGVhcmN1dCB8IE5vbmUgPSBOb25lLAorICAgIHBpcGVfc2VuZGVyOiBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uIHwgTm9uZSA9IE5vbmUsCispOgorICAiIiJNZXRob2QgdG8gc3RhcnQgdGhlIGVkaXQgbW9uaXRvci4KKworICBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0byBzdGFydCB0aGUgZWRpdCBtb25pdG9yIGFzIGEgc3VicHJvY2VzcyBvZgorICB0aGUgZGFlbW9uIG1hbmFnZXIuCisKKyAgcGFyYW1zOgorICAgIHBhdGg6IFRoZSByb290IHBhdGggdG8gbW9uaXRvcgorICAgIGNjbGllbnQ6IFRoZSBjbGVhcmN1dCBjbGllbnQgdG8gc2VuZCB0aGUgZWRpdCBsb2dzLgorICAgIGNvbm46IHRoZSBzZW5kZXIgb2YgdGhlIHBpcGUgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGVhbW9uIG1hbmFnZXIuCisgICIiIgorICBldmVudF9oYW5kbGVyID0gQ2xlYXJjdXRFdmVudEhhbmRsZXIoCisgICAgICBwYXRoLCBmbHVzaF9pbnRlcnZhbF9zZWMsIHNpbmdsZV9ldmVudHNfc2l6ZV90aHJlc2hvbGQsIGlzX2RyeV9ydW4sIGNjbGllbnQpCisgIG9ic2VydmVyID0gT2JzZXJ2ZXIoKQorCisgIGxvZ2dpbmcuaW5mbygiU3RhcnRpbmcgb2JzZXJ2ZXIgb24gcGF0aCAlcy4iLCBwYXRoKQorICBvYnNlcnZlci5zY2hlZHVsZShldmVudF9oYW5kbGVyLCBwYXRoLCByZWN1cnNpdmU9VHJ1ZSkKKyAgb2JzZXJ2ZXIuc3RhcnQoKQorICBsb2dnaW5nLmluZm8oIk9ic2VydmVyIHN0YXJ0ZWQuIikKKyAgaWYgcGlwZV9zZW5kZXI6CisgICAgcGlwZV9zZW5kZXIuc2VuZCgiT2JzZXJ2ZXIgc3RhcnRlZC4iKQorCisgIHRyeToKKyAgICB3aGlsZSBUcnVlOgorICAgICAgdGltZS5zbGVlcCgxKQorICBmaW5hbGx5OgorICAgIGV2ZW50X2hhbmRsZXIuZmx1c2hhbGwoKQorICAgIG9ic2VydmVyLnN0b3AoKQorICAgIG9ic2VydmVyLmpvaW4oKQorICAgIGlmIHBpcGVfc2VuZGVyOgorICAgICAgcGlwZV9zZW5kZXIuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0LnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMjgyNzQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yX2ludGVncmF0aW9uX3Rlc3QucHkKQEAgLTAsMCArMSwxNDEgQEAKKyMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiSW50ZWdyYXRpb24gdGVzdHMgZm9yIEVkaXQgTW9uaXRvci4iIiIKKworaW1wb3J0IGdsb2IKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRobGliCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gaW1wb3J0bGliIGltcG9ydCByZXNvdXJjZXMKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworCitjbGFzcyBFZGl0TW9uaXRvckludGVncmF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgQGNsYXNzbWV0aG9kCisgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgc3VwZXIoKS5zZXRVcENsYXNzKCkKKyAgICAjIENvbmZpZ3VyZSB0byBwcmludCBsb2dnaW5nIHRvIHN0ZG91dC4KKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPU5vbmUsIGxldmVsPWxvZ2dpbmcuREVCVUcpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCIiKS5hZGRIYW5kbGVyKGNvbnNvbGUpCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgIHN1cGVyKCkuc2V0VXAoKQorICAgIHNlbGYud29ya2luZ19kaXIgPSB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKQorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGggPSBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgKKyAgICAgICAgImZpbGVzIgorICAgICkKKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLm1rZGlyKCkKKyAgICBzZWxmLmVkaXRfbW9uaXRvcl9iaW5hcnlfcGF0aCA9IHNlbGYuX2ltcG9ydF9leGVjdXRhYmxlKCJlZGl0X21vbml0b3IiKQorICAgIHNlbGYucGF0Y2ggPSBtb2NrLnBhdGNoLmRpY3QoCisgICAgICAgIG9zLmVudmlyb24sIHsnRU5BQkxFX0FORFJPSURfRURJVF9NT05JVE9SJzogJ3RydWUnfSkKKyAgICBzZWxmLnBhdGNoLnN0YXJ0KCkKKworICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgc2VsZi5wYXRjaC5zdG9wKCkKKyAgICBzZWxmLndvcmtpbmdfZGlyLmNsZWFudXAoKQorICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgIGRlZiB0ZXN0X2xvZ19zaW5nbGVfZWRpdF9ldmVudF9zdWNjZXNzKHNlbGYpOgorICAgIHAgPSBzZWxmLl9zdGFydF9lZGl0X21vbml0b3JfcHJvY2VzcygpCisKKyAgICAjIENyZWF0ZSB0aGUgLmdpdCBmaWxlIHVuZGVyIHRoZSBtb25pdG9yaW5nIGRpci4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCIuZ2l0IikudG91Y2goKQorCisgICAgIyBDcmVhdGUgYW5kIG1vZGlmeSBhIGZpbGUuCisgICAgdGVzdF9maWxlID0gc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgidGVzdC50eHQiKQorICAgIHdpdGggb3Blbih0ZXN0X2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgIGYud3JpdGUoInNvbWV0aGluZyIpCisKKyAgICAjIE1vdmUgdGhlIGZpbGUuCisgICAgdGVzdF9maWxlX21vdmVkID0gc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgibmV3X3Rlc3QudHh0IikKKyAgICB0ZXN0X2ZpbGUucmVuYW1lKHRlc3RfZmlsZV9tb3ZlZCkKKworICAgICMgRGVsZXRlIHRoZSBmaWxlLgorICAgIHRlc3RfZmlsZV9tb3ZlZC51bmxpbmsoKQorCisgICAgIyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIGVkaXQgbW9uaXRvciB0byByZWNlaXZlIHRoZSBlZGl0IGV2ZW50LgorICAgIHRpbWUuc2xlZXAoMSkKKyAgICAjIFN0b3AgdGhlIGVkaXQgbW9uaXRvciBhbmQgZmx1c2ggYWxsIGV2ZW50cy4KKyAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgIHAuY29tbXVuaWNhdGUoKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9nZXRfbG9nZ2VkX2V2ZW50c19udW0oKSwgNCkKKworICBkZWYgX3N0YXJ0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKHNlbGYpOgorICAgIGNvbW1hbmQgPSBmIiIiCisgICAgZXhwb3J0IFRNUERJUj0ie3NlbGYud29ya2luZ19kaXIubmFtZX0iCisgICAge3NlbGYuZWRpdF9tb25pdG9yX2JpbmFyeV9wYXRofSAtLXBhdGg9e3NlbGYucm9vdF9tb25pdG9yaW5nX3BhdGh9IC0tZHJ5X3J1biIiIgorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICBjb21tYW5kLAorICAgICAgICBzaGVsbD1UcnVlLAorICAgICAgICB0ZXh0PVRydWUsCisgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUsCisgICAgICAgIGV4ZWN1dGFibGU9Ii9iaW4vYmFzaCIsCisgICAgKQorICAgIHNlbGYuX3dhaXRfZm9yX29ic2VydmVyX3N0YXJ0KHRpbWVfb3V0PTUpCisgICAgcmV0dXJuIHAKKworICBkZWYgX3dhaXRfZm9yX29ic2VydmVyX3N0YXJ0KHNlbGYsIHRpbWVfb3V0KToKKyAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKworICAgIHdoaWxlIHRpbWUudGltZSgpIDwgc3RhcnRfdGltZSArIHRpbWVfb3V0OgorICAgICAgbG9nX2ZpbGVzID0gZ2xvYi5nbG9iKHNlbGYud29ya2luZ19kaXIubmFtZSArICIvZWRpdF9tb25pdG9yXyovKi5sb2ciKQorICAgICAgaWYgbG9nX2ZpbGVzOgorICAgICAgICB3aXRoIG9wZW4obG9nX2ZpbGVzWzBdLCAiciIpIGFzIGY6CisgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoImluaXRpYWwgbG9nOiAlcyIsIGxpbmUpCisgICAgICAgICAgICBpZiBsaW5lLnJzdHJpcCgiXG4iKS5lbmRzd2l0aCgiT2JzZXJ2ZXIgc3RhcnRlZC4iKToKKyAgICAgICAgICAgICAgcmV0dXJuCisgICAgICBlbHNlOgorICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICBzZWxmLmZhaWwoZiJPYnNlcnZlciBub3Qgc3RhcnRlZCBpbiB7dGltZV9vdXR9IHNlY29uZHMuIikKKworICBkZWYgX2dldF9sb2dnZWRfZXZlbnRzX251bShzZWxmKToKKyAgICBsb2dfZmlsZXMgPSBnbG9iLmdsb2Ioc2VsZi53b3JraW5nX2Rpci5uYW1lICsgIi9lZGl0X21vbml0b3JfKi8qLmxvZyIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nX2ZpbGVzKSwgMSkKKworICAgIHdpdGggb3Blbihsb2dfZmlsZXNbMF0sICJyIikgYXMgZjoKKyAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgIGxvZ2dpbmcuZGVidWcoImNvbXBsZXRlIGxvZzogJXMiLCBsaW5lKQorICAgICAgICBpZiBsaW5lLnJzdHJpcCgiXG4iKS5lbmRzd2l0aCgiaW4gZHJ5IHJ1bi4iKToKKyAgICAgICAgICByZXR1cm4gaW50KGxpbmUuc3BsaXQoIjoiKVstMV0uc3BsaXQoIiAiKVsyXSkKKworICAgIHJldHVybiAwCisKKyAgZGVmIF9pbXBvcnRfZXhlY3V0YWJsZShzZWxmLCBleGVjdXRhYmxlX25hbWU6IHN0cikgLT4gcGF0aGxpYi5QYXRoOgorICAgIGJpbmFyeV9kaXIgPSBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgiYmluYXJ5IikKKyAgICBiaW5hcnlfZGlyLm1rZGlyKCkKKyAgICBleGVjdXRhYmxlX3BhdGggPSBiaW5hcnlfZGlyLmpvaW5wYXRoKGV4ZWN1dGFibGVfbmFtZSkKKyAgICB3aXRoIHJlc291cmNlcy5hc19maWxlKAorICAgICAgICByZXNvdXJjZXMuZmlsZXMoInRlc3RkYXRhIikuam9pbnBhdGgoZXhlY3V0YWJsZV9uYW1lKQorICAgICkgYXMgYmluYXJ5OgorICAgICAgc2h1dGlsLmNvcHkoYmluYXJ5LCBleGVjdXRhYmxlX3BhdGgpCisgICAgZXhlY3V0YWJsZV9wYXRoLmNobW9kKDBvNzU1KQorICAgIHJldHVybiBleGVjdXRhYmxlX3BhdGgKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfdGVzdC5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGEzODcxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvcl90ZXN0LnB5CkBAIC0wLDAgKzEsMzAxIEBACisjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIlVuaXR0ZXN0cyBmb3IgRWRpdCBNb25pdG9yLiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IG9zCitpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXRlc3QucHJvdG8gaW1wb3J0IGNsaWVudGFuYWx5dGljc19wYjIKK2Zyb20gZWRpdF9tb25pdG9yIGltcG9ydCBlZGl0X21vbml0b3IKK2Zyb20gcHJvdG8gaW1wb3J0IGVkaXRfZXZlbnRfcGIyCisKKworY2xhc3MgRWRpdE1vbml0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICBAY2xhc3NtZXRob2QKKyAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICBzdXBlcigpLnNldFVwQ2xhc3MoKQorICAgICMgQ29uZmlndXJlIHRvIHByaW50IGxvZ2dpbmcgdG8gc3Rkb3V0LgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9Tm9uZSwgbGV2ZWw9bG9nZ2luZy5ERUJVRykKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgbG9nZ2luZy5nZXRMb2dnZXIoJycpLmFkZEhhbmRsZXIoY29uc29sZSkKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgc2VsZi53b3JraW5nX2RpciA9IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aCA9IHBhdGhsaWIuUGF0aChzZWxmLndvcmtpbmdfZGlyLm5hbWUpLmpvaW5wYXRoKAorICAgICAgICAnZmlsZXMnCisgICAgKQorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGgubWtkaXIoKQorICAgIHNlbGYubG9nX2V2ZW50X2RpciA9IHBhdGhsaWIuUGF0aChzZWxmLndvcmtpbmdfZGlyLm5hbWUpLmpvaW5wYXRoKCdsb2dzJykKKyAgICBzZWxmLmxvZ19ldmVudF9kaXIubWtkaXIoKQorCisgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICBzZWxmLndvcmtpbmdfZGlyLmNsZWFudXAoKQorICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgIGRlZiB0ZXN0X2xvZ19zaW5nbGVfZWRpdF9ldmVudF9zdWNjZXNzKHNlbGYpOgorICAgICMgQ3JlYXRlIHRoZSAuZ2l0IGZpbGUgdW5kZXIgdGhlIG1vbml0b3JpbmcgZGlyLgorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJy5naXQnKS50b3VjaCgpCisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KAorICAgICAgICBsb2dfb3V0cHV0X2ZpbGU9c2VsZi5sb2dfZXZlbnRfZGlyLmpvaW5wYXRoKCdsb2dzLm91dHB1dCcpCisgICAgKQorICAgIHAgPSBzZWxmLl9zdGFydF90ZXN0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKGZha2VfY2NsaWVudCkKKworICAgICMgQ3JlYXRlIGFuZCBtb2RpZnkgYSBmaWxlLgorICAgIHRlc3RfZmlsZSA9IHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ3Rlc3QudHh0JykKKyAgICB3aXRoIG9wZW4odGVzdF9maWxlLCAndycpIGFzIGY6CisgICAgICBmLndyaXRlKCdzb21ldGhpbmcnKQorICAgICMgTW92ZSB0aGUgZmlsZS4KKyAgICB0ZXN0X2ZpbGVfbW92ZWQgPSBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCduZXdfdGVzdC50eHQnKQorICAgIHRlc3RfZmlsZS5yZW5hbWUodGVzdF9maWxlX21vdmVkKQorICAgICMgRGVsZXRlIHRoZSBmaWxlLgorICAgIHRlc3RfZmlsZV9tb3ZlZC51bmxpbmsoKQorICAgICMgR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBlZGl0IG1vbml0b3IgdG8gcmVjZWl2ZSB0aGUgZWRpdCBldmVudC4KKyAgICB0aW1lLnNsZWVwKDEpCisgICAgIyBTdG9wIHRoZSBlZGl0IG1vbml0b3IgYW5kIGZsdXNoIGFsbCBldmVudHMuCisgICAgb3Mua2lsbChwLnBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICBwLmpvaW4oKQorCisgICAgbG9nZ2VkX2V2ZW50cyA9IHNlbGYuX2dldF9sb2dnZWRfZXZlbnRzKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dnZWRfZXZlbnRzKSwgNCkKKyAgICBleHBlY3RlZF9jcmVhdGVfZXZlbnQgPSBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuU2luZ2xlRWRpdEV2ZW50KAorICAgICAgICBmaWxlX3BhdGg9c3RyKAorICAgICAgICAgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgndGVzdC50eHQnKS5yZXNvbHZlKCkKKyAgICAgICAgKSwKKyAgICAgICAgZWRpdF90eXBlPWVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5DUkVBVEUsCisgICAgKQorICAgIGV4cGVjdGVkX21vZGlmeV9ldmVudCA9IGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5TaW5nbGVFZGl0RXZlbnQoCisgICAgICAgIGZpbGVfcGF0aD1zdHIoCisgICAgICAgICAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCd0ZXN0LnR4dCcpLnJlc29sdmUoKQorICAgICAgICApLAorICAgICAgICBlZGl0X3R5cGU9ZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50Lk1PRElGWSwKKyAgICApCisgICAgZXhwZWN0ZWRfbW92ZV9ldmVudCA9IGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5TaW5nbGVFZGl0RXZlbnQoCisgICAgICAgIGZpbGVfcGF0aD1zdHIoCisgICAgICAgICAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCd0ZXN0LnR4dCcpLnJlc29sdmUoKQorICAgICAgICApLAorICAgICAgICBlZGl0X3R5cGU9ZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50Lk1PVkUsCisgICAgKQorICAgIGV4cGVjdGVkX2RlbGV0ZV9ldmVudCA9IGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5TaW5nbGVFZGl0RXZlbnQoCisgICAgICAgIGZpbGVfcGF0aD1zdHIoCisgICAgICAgICAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCduZXdfdGVzdC50eHQnKS5yZXNvbHZlKCkKKyAgICAgICAgKSwKKyAgICAgICAgZWRpdF90eXBlPWVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5ERUxFVEUsCisgICAgKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIGV4cGVjdGVkX2NyZWF0ZV9ldmVudCwKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZyb21TdHJpbmcoCisgICAgICAgICAgICBsb2dnZWRfZXZlbnRzWzBdLnNvdXJjZV9leHRlbnNpb24KKyAgICAgICAgKS5zaW5nbGVfZWRpdF9ldmVudCwKKyAgICApCisgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgZXhwZWN0ZWRfbW9kaWZ5X2V2ZW50LAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRnJvbVN0cmluZygKKyAgICAgICAgICAgIGxvZ2dlZF9ldmVudHNbMV0uc291cmNlX2V4dGVuc2lvbgorICAgICAgICApLnNpbmdsZV9lZGl0X2V2ZW50LAorICAgICkKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICBleHBlY3RlZF9tb3ZlX2V2ZW50LAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRnJvbVN0cmluZygKKyAgICAgICAgICAgIGxvZ2dlZF9ldmVudHNbMl0uc291cmNlX2V4dGVuc2lvbgorICAgICAgICApLnNpbmdsZV9lZGl0X2V2ZW50LAorICAgICkKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICBleHBlY3RlZF9kZWxldGVfZXZlbnQsCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5Gcm9tU3RyaW5nKAorICAgICAgICAgICAgbG9nZ2VkX2V2ZW50c1szXS5zb3VyY2VfZXh0ZW5zaW9uCisgICAgICAgICkuc2luZ2xlX2VkaXRfZXZlbnQsCisgICAgKQorCisKKyAgZGVmIHRlc3RfbG9nX2FnZ3JlZ2F0ZWRfZWRpdF9ldmVudF9zdWNjZXNzKHNlbGYpOgorICAgICMgQ3JlYXRlIHRoZSAuZ2l0IGZpbGUgdW5kZXIgdGhlIG1vbml0b3JpbmcgZGlyLgorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJy5naXQnKS50b3VjaCgpCisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KAorICAgICAgICBsb2dfb3V0cHV0X2ZpbGU9c2VsZi5sb2dfZXZlbnRfZGlyLmpvaW5wYXRoKCdsb2dzLm91dHB1dCcpCisgICAgKQorICAgIHAgPSBzZWxmLl9zdGFydF90ZXN0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKGZha2VfY2NsaWVudCkKKworICAgICMgQ3JlYXRlIDYgdGVzdCBmaWxlcworICAgIGZvciBpIGluIHJhbmdlKDYpOgorICAgICAgdGVzdF9maWxlID0gc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgndGVzdF8nICsgc3RyKGkpKQorICAgICAgdGVzdF9maWxlLnRvdWNoKCkKKworICAgICMgR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBlZGl0IG1vbml0b3IgdG8gcmVjZWl2ZSB0aGUgZWRpdCBldmVudC4KKyAgICB0aW1lLnNsZWVwKDEpCisgICAgIyBTdG9wIHRoZSBlZGl0IG1vbml0b3IgYW5kIGZsdXNoIGFsbCBldmVudHMuCisgICAgb3Mua2lsbChwLnBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICBwLmpvaW4oKQorCisgICAgbG9nZ2VkX2V2ZW50cyA9IHNlbGYuX2dldF9sb2dnZWRfZXZlbnRzKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dnZWRfZXZlbnRzKSwgMSkKKworICAgIGV4cGVjdGVkX2FnZ3JlZ2F0ZWRfZWRpdF9ldmVudCA9ICgKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkFnZ3JlZ2F0ZWRFZGl0RXZlbnQoCisgICAgICAgICAgICBudW1fZWRpdHM9NiwKKyAgICAgICAgKQorICAgICkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIGV4cGVjdGVkX2FnZ3JlZ2F0ZWRfZWRpdF9ldmVudCwKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZyb21TdHJpbmcoCisgICAgICAgICAgICBsb2dnZWRfZXZlbnRzWzBdLnNvdXJjZV9leHRlbnNpb24KKyAgICAgICAgKS5hZ2dyZWdhdGVkX2VkaXRfZXZlbnQsCisgICAgKQorCisgIGRlZiB0ZXN0X2RvX25vdF9sb2dfZWRpdF9ldmVudF9mb3JfZGlyZWN0b3J5X2NoYW5nZShzZWxmKToKKyAgICAjIENyZWF0ZSB0aGUgLmdpdCBmaWxlIHVuZGVyIHRoZSBtb25pdG9yaW5nIGRpci4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCcuZ2l0JykudG91Y2goKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgKKyAgICAgICAgbG9nX291dHB1dF9maWxlPXNlbGYubG9nX2V2ZW50X2Rpci5qb2lucGF0aCgnbG9ncy5vdXRwdXQnKQorICAgICkKKyAgICBwID0gc2VsZi5fc3RhcnRfdGVzdF9lZGl0X21vbml0b3JfcHJvY2VzcyhmYWtlX2NjbGllbnQpCisKKyAgICAjIENyZWF0ZSBhIHN1YiBkaXJlY3RvcnkKKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCd0ZXN0X2RpcicpLm1rZGlyKCkKKyAgICAjIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgZWRpdCBtb25pdG9yIHRvIHJlY2VpdmUgdGhlIGVkaXQgZXZlbnQuCisgICAgdGltZS5zbGVlcCgxKQorICAgICMgU3RvcCB0aGUgZWRpdCBtb25pdG9yIGFuZCBmbHVzaCBhbGwgZXZlbnRzLgorICAgIG9zLmtpbGwocC5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgcC5qb2luKCkKKworICAgIGxvZ2dlZF9ldmVudHMgPSBzZWxmLl9nZXRfbG9nZ2VkX2V2ZW50cygpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nZ2VkX2V2ZW50cyksIDApCisKKyAgZGVmIHRlc3RfZG9fbm90X2xvZ19lZGl0X2V2ZW50X2Zvcl9oaWRkZW5fZmlsZShzZWxmKToKKyAgICAjIENyZWF0ZSB0aGUgLmdpdCBmaWxlIHVuZGVyIHRoZSBtb25pdG9yaW5nIGRpci4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCcuZ2l0JykudG91Y2goKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgKKyAgICAgICAgbG9nX291dHB1dF9maWxlPXNlbGYubG9nX2V2ZW50X2Rpci5qb2lucGF0aCgnbG9ncy5vdXRwdXQnKQorICAgICkKKyAgICBwID0gc2VsZi5fc3RhcnRfdGVzdF9lZGl0X21vbml0b3JfcHJvY2VzcyhmYWtlX2NjbGllbnQpCisKKyAgICAjIENyZWF0ZSBhIGhpZGRlbiBmaWxlLgorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJy50ZXN0LnR4dCcpLnRvdWNoKCkKKyAgICAjIENyZWF0ZSBhIGhpZGRlbiBkaXIuCisgICAgaGlkZGVuX2RpciA9IHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJy50ZXN0JykKKyAgICBoaWRkZW5fZGlyLm1rZGlyKCkKKyAgICBoaWRkZW5fZGlyLmpvaW5wYXRoKCd0ZXN0LnR4dCcpLnRvdWNoKCkKKyAgICAjIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgZWRpdCBtb25pdG9yIHRvIHJlY2VpdmUgdGhlIGVkaXQgZXZlbnQuCisgICAgdGltZS5zbGVlcCgxKQorICAgICMgU3RvcCB0aGUgZWRpdCBtb25pdG9yIGFuZCBmbHVzaCBhbGwgZXZlbnRzLgorICAgIG9zLmtpbGwocC5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgcC5qb2luKCkKKworICAgIGxvZ2dlZF9ldmVudHMgPSBzZWxmLl9nZXRfbG9nZ2VkX2V2ZW50cygpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nZ2VkX2V2ZW50cyksIDApCisKKyAgZGVmIHRlc3RfZG9fbm90X2xvZ19lZGl0X2V2ZW50X2Zvcl9ub25fZ2l0X3Byb2plY3RfZmlsZShzZWxmKToKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoCisgICAgICAgIGxvZ19vdXRwdXRfZmlsZT1zZWxmLmxvZ19ldmVudF9kaXIuam9pbnBhdGgoJ2xvZ3Mub3V0cHV0JykKKyAgICApCisgICAgcCA9IHNlbGYuX3N0YXJ0X3Rlc3RfZWRpdF9tb25pdG9yX3Byb2Nlc3MoZmFrZV9jY2xpZW50KQorCisgICAgIyBDcmVhdGUgYSBmaWxlLgorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ3Rlc3QudHh0JykudG91Y2goKQorICAgICMgQ3JlYXRlIGEgZmlsZSB1bmRlciBhIHN1YiBkaXIuCisgICAgc3ViX2RpciA9IHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJy50ZXN0JykKKyAgICBzdWJfZGlyLm1rZGlyKCkKKyAgICBzdWJfZGlyLmpvaW5wYXRoKCd0ZXN0LnR4dCcpLnRvdWNoKCkKKyAgICAjIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgZWRpdCBtb25pdG9yIHRvIHJlY2VpdmUgdGhlIGVkaXQgZXZlbnQuCisgICAgdGltZS5zbGVlcCgxKQorICAgICMgU3RvcCB0aGUgZWRpdCBtb25pdG9yIGFuZCBmbHVzaCBhbGwgZXZlbnRzLgorICAgIG9zLmtpbGwocC5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgcC5qb2luKCkKKworICAgIGxvZ2dlZF9ldmVudHMgPSBzZWxmLl9nZXRfbG9nZ2VkX2V2ZW50cygpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nZ2VkX2V2ZW50cyksIDApCisKKyAgZGVmIHRlc3RfbG9nX2VkaXRfZXZlbnRfZmFpbChzZWxmKToKKyAgICAjIENyZWF0ZSB0aGUgLmdpdCBmaWxlIHVuZGVyIHRoZSBtb25pdG9yaW5nIGRpci4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCcuZ2l0JykudG91Y2goKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgKKyAgICAgICAgbG9nX291dHB1dF9maWxlPXNlbGYubG9nX2V2ZW50X2Rpci5qb2lucGF0aCgnbG9ncy5vdXRwdXQnKSwKKyAgICAgICAgcmFpc2VfbG9nX2V4Y2VwdGlvbj1UcnVlLAorICAgICkKKyAgICBwID0gc2VsZi5fc3RhcnRfdGVzdF9lZGl0X21vbml0b3JfcHJvY2VzcyhmYWtlX2NjbGllbnQpCisKKyAgICAjIENyZWF0ZSBhIGZpbGUuCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgndGVzdC50eHQnKS50b3VjaCgpCisgICAgIyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIGVkaXQgbW9uaXRvciB0byByZWNlaXZlIHRoZSBlZGl0IGV2ZW50LgorICAgIHRpbWUuc2xlZXAoMSkKKyAgICAjIFN0b3AgdGhlIGVkaXQgbW9uaXRvciBhbmQgZmx1c2ggYWxsIGV2ZW50cy4KKyAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgIHAuam9pbigpCisKKyAgICBsb2dnZWRfZXZlbnRzID0gc2VsZi5fZ2V0X2xvZ2dlZF9ldmVudHMoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ2dlZF9ldmVudHMpLCAwKQorCisgIGRlZiBfc3RhcnRfdGVzdF9lZGl0X21vbml0b3JfcHJvY2VzcygKKyAgICAgIHNlbGYsIGNjbGllbnQKKyAgKSAtPiBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzczoKKyAgICByZWNlaXZlciwgc2VuZGVyID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoKQorICAgICMgU3RhcnQgZWRpdCBtb25pdG9yIGluIGEgc3VicHJvY2Vzcy4KKyAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MoCisgICAgICAgIHRhcmdldD1lZGl0X21vbml0b3Iuc3RhcnQsCisgICAgICAgIGFyZ3M9KHN0cihzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLnJlc29sdmUoKSksIEZhbHNlLCAwLjUsIDUsIGNjbGllbnQsIHNlbmRlciksCisgICAgKQorICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgIHAuc3RhcnQoKQorCisgICAgIyBXYWl0IHVudGlsIG9ic2VydmVyIHN0YXJ0ZWQuCisgICAgcmVjZWl2ZWRfZGF0YSA9IHJlY2VpdmVyLnJlY3YoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlY2VpdmVkX2RhdGEsICdPYnNlcnZlciBzdGFydGVkLicpCisKKyAgICByZWNlaXZlci5jbG9zZSgpCisgICAgcmV0dXJuIHAKKworICBkZWYgX2dldF9sb2dnZWRfZXZlbnRzKHNlbGYpOgorICAgIHdpdGggb3BlbihzZWxmLmxvZ19ldmVudF9kaXIuam9pbnBhdGgoJ2xvZ3Mub3V0cHV0JyksICdyYicpIGFzIGY6CisgICAgICBkYXRhID0gZi5yZWFkKCkKKworICAgIHJldHVybiBbCisgICAgICAgIGNsaWVudGFuYWx5dGljc19wYjIuTG9nRXZlbnQuRnJvbVN0cmluZyhyZWNvcmQpCisgICAgICAgIGZvciByZWNvcmQgaW4gZGF0YS5zcGxpdChiJ1x4MDAnKQorICAgICAgICBpZiByZWNvcmQKKyAgICBdCisKKworY2xhc3MgRmFrZUNsZWFyY3V0Q2xpZW50OgorCisgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dfb3V0cHV0X2ZpbGUsIHJhaXNlX2xvZ19leGNlcHRpb249RmFsc2UpOgorICAgIHNlbGYucGVuZGluZ19sb2dfZXZlbnRzID0gW10KKyAgICBzZWxmLnJhaXNlX2xvZ19leGNlcHRpb24gPSByYWlzZV9sb2dfZXhjZXB0aW9uCisgICAgc2VsZi5sb2dfb3V0cHV0X2ZpbGUgPSBsb2dfb3V0cHV0X2ZpbGUKKworICBkZWYgbG9nKHNlbGYsIGxvZ19ldmVudCk6CisgICAgaWYgc2VsZi5yYWlzZV9sb2dfZXhjZXB0aW9uOgorICAgICAgcmFpc2UgRXhjZXB0aW9uKCd1bmtub3duIGV4Y2VwdGlvbicpCisgICAgc2VsZi5wZW5kaW5nX2xvZ19ldmVudHMuYXBwZW5kKGxvZ19ldmVudCkKKworICBkZWYgZmx1c2hfZXZlbnRzKHNlbGYpOgorICAgIGRlbGltaXRlciA9IGInXHgwMCcgICMgVXNlIGEgbnVsbCBieXRlIGFzIHRoZSBkZWxpbWl0ZXIKKyAgICB3aXRoIG9wZW4oc2VsZi5sb2dfb3V0cHV0X2ZpbGUsICd3YicpIGFzIGY6CisgICAgICBmb3IgbG9nX2V2ZW50IGluIHNlbGYucGVuZGluZ19sb2dfZXZlbnRzOgorICAgICAgICBmLndyaXRlKGxvZ19ldmVudC5TZXJpYWxpemVUb1N0cmluZygpICsgZGVsaW1pdGVyKQorCisgICAgc2VsZi5wZW5kaW5nX2xvZ19ldmVudHMuY2xlYXIoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL21haW4ucHkgYi90b29scy9lZGl0X21vbml0b3IvbWFpbi5weQppbmRleCBlNjlkZTI5Li40OTM4NWYxIDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvbWFpbi5weQorKysgYi90b29scy9lZGl0X21vbml0b3IvbWFpbi5weQpAQCAtMCwwICsxLDExOCBAQAorIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIGVkaXRfbW9uaXRvciBpbXBvcnQgZGFlbW9uX21hbmFnZXIKK2Zyb20gZWRpdF9tb25pdG9yIGltcG9ydCBlZGl0X21vbml0b3IKKworCitkZWYgY3JlYXRlX2FyZ19wYXJzZXIoKToKKyAgIiIiQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBhcmcgcGFyc2VyLiIiIgorCisgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgZGVzY3JpcHRpb249KAorICAgICAgICAgICdNb25pdG9ycyBlZGl0cyBpbiBBbmRyb2lkIHNvdXJjZSBjb2RlIGFuZCB1cGxvYWRzIHRoZSBlZGl0IGxvZ3MuJworICAgICAgKSwKKyAgICAgIGFkZF9oZWxwPVRydWUsCisgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAorICApCisKKyAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICctLXBhdGgnLAorICAgICAgdHlwZT1zdHIsCisgICAgICByZXF1aXJlZD1UcnVlLAorICAgICAgaGVscD0nUm9vdCBwYXRoIHRvIG1vbml0b3IgdGhlIGVkaXQgZXZlbnRzLicsCisgICkKKworICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgJy0tZHJ5X3J1bicsCisgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgaGVscD0nRHJ5IHJ1biB0aGUgZWRpdCBtb25pdG9yLiBUaGlzIHN0YXJ0cyB0aGUgZWRpdCBtb25pdG9yIHByb2Nlc3Mgd2l0aG91dCBhY3R1YWxseSBzZW5kIHRoZSBlZGl0IGxvZ3MgdG8gY2xlYXJjdXQuJywKKyAgKQorCisgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLS1mb3JjZV9jbGVhbnVwJywKKyAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICBoZWxwPSgKKyAgICAgICAgICAnSW5zdGVhZCBvZiBzdGFydCBhIG5ldyBlZGl0IG1vbml0b3IsIGZvcmNlIHN0b3AgYWxsIGV4aXN0aW5nIGVkaXQnCisgICAgICAgICAgJyBtb25pdG9ycyBpbiB0aGUgc3lzdGVtLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgaW4gZW1lcmdlbnQgY2FzZXMnCisgICAgICAgICAgJyB3aGVuIHdlIHdhbnQgdG8gcHJldmVudCB1c2VyIGRhbWFnZSBieSB0aGUgZWRpdCBtb25pdG9yLicKKyAgICAgICksCisgICkKKworICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgJy0tdmVyYm9zZScsCisgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgaGVscD0oCisgICAgICAgICAgJ0xvZyB2ZXJib3NlIGluZm8gaW4gdGhlIGxvZyBmaWxlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4nCisgICAgICApLAorICApCisKKyAgcmV0dXJuIHBhcnNlcgorCisKK2RlZiBjb25maWd1cmVfbG9nZ2luZyh2ZXJib3NlPUZhbHNlKToKKyAgcm9vdF9sb2dnaW5nX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdlZGl0X21vbml0b3JfJykKKyAgXywgbG9nX3BhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj1yb290X2xvZ2dpbmdfZGlyLCBzdWZmaXg9Jy5sb2cnKQorCisgIGxvZ19mbXQgPSAnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUobGluZW5vKXM6JShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnCisgIGRhdGVfZm10ID0gJyVZLSVtLSVkICVIOiVNOiVTJworICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHIGlmIHZlcmJvc2UgZWxzZSBsb2dnaW5nLklORk8KKworICBsb2dnaW5nLmJhc2ljQ29uZmlnKAorICAgICAgZmlsZW5hbWU9bG9nX3BhdGgsIGxldmVsPWxvZ19sZXZlbCwgZm9ybWF0PWxvZ19mbXQsIGRhdGVmbXQ9ZGF0ZV9mbXQKKyAgKQorICAjIEZpbHRlciBvdXQgbG9ncyBmcm9tIGlub3RpZnlfYnVmZiB0byBwcmV2ZW50IGxvZyBwb2xsdXRpb24uCisgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd3YXRjaGRvZy5vYnNlcnZlcnMuaW5vdGlmeV9idWZmZXInKS5hZGRGaWx0ZXIoCisgICAgICBsYW1iZGEgcmVjb3JkOiByZWNvcmQuZmlsZW5hbWUgIT0gJ2lub3RpZnlfYnVmZmVyLnB5JykKKyAgcHJpbnQoZidsb2dnaW5nIHRvIGZpbGUge2xvZ19wYXRofScpCisKKworZGVmIHRlcm1fc2lnbmFsX2hhbmRsZXIoX3NpZ25hbF9udW1iZXIsIF9mcmFtZSk6CisgIGxvZ2dpbmcuaW5mbygnUHJvY2VzcyAlZCByZWNlaXZlZCBTSUdURVJNLCBUZXJtaW5hdGluZy4uLicsIG9zLmdldHBpZCgpKQorICBzeXMuZXhpdCgwKQorCisKK2RlZiBtYWluKGFyZ3Y6IGxpc3Rbc3RyXSk6CisgIGFyZ3MgPSBjcmVhdGVfYXJnX3BhcnNlcigpLnBhcnNlX2FyZ3MoYXJndlsxOl0pCisgIGNvbmZpZ3VyZV9sb2dnaW5nKGFyZ3MudmVyYm9zZSkKKyAgaWYgYXJncy5kcnlfcnVuOgorICAgIGxvZ2dpbmcuaW5mbygnVGhpcyBpcyBhIGRyeSBydW4uJykKKyAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAorICAgICAgYmluYXJ5X3BhdGg9YXJndlswXSwKKyAgICAgIGRhZW1vbl90YXJnZXQ9ZWRpdF9tb25pdG9yLnN0YXJ0LAorICAgICAgZGFlbW9uX2FyZ3M9KGFyZ3MucGF0aCwgYXJncy5kcnlfcnVuKSwKKyAgKQorCisgIGlmIGFyZ3MuZm9yY2VfY2xlYW51cDoKKyAgICBkbS5jbGVhbnVwKCkKKworICB0cnk6CisgICAgZG0uc3RhcnQoKQorICAgIGRtLm1vbml0b3JfZGFlbW9uKCkKKyAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBsb2dnaW5nLmV4Y2VwdGlvbignVW5leHBlY3RlZCBleGNlcHRpb24gcmFpc2VkIHdoZW4gcnVuIGRhZW1vbi4nKQorICBmaW5hbGx5OgorICAgIGRtLnN0b3AoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHRlcm1fc2lnbmFsX2hhbmRsZXIpCisgIG1haW4oc3lzLmFyZ3YpCmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvcHJvdG8vZWRpdF9ldmVudC5wcm90byBiL3Rvb2xzL2VkaXRfbW9uaXRvci9wcm90by9lZGl0X2V2ZW50LnByb3RvCmluZGV4IGIzNjMwYmMuLmRjM2QzZjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VkaXRfbW9uaXRvci9wcm90by9lZGl0X2V2ZW50LnByb3RvCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci9wcm90by9lZGl0X2V2ZW50LnByb3RvCkBAIC0zNiw4ICszNiw2IEBACiAgIC8vIEV2ZW50IHRoYXQgbG9ncyBlcnJvcnMgaGFwcGVuZWQgaW4gdGhlIGVkaXQgbW9uaXRvci4KICAgbWVzc2FnZSBFZGl0TW9uaXRvckVycm9yRXZlbnQgewogICAgIEVycm9yVHlwZSBlcnJvcl90eXBlID0gMTsKLSAgICBzdHJpbmcgZXJyb3JfbXNnID0gMjsKLSAgICBzdHJpbmcgc3RhY2tfdHJhY2UgPSAzOwogICB9CiAKICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvdXRpbHMucHkgYi90b29scy9lZGl0X21vbml0b3IvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4OTQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlscy5weQpAQCAtMCwwICsxLDUzIEBACisjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCisKKworZGVmIGlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICBmZWF0dXJlX25hbWU6IHN0ciwKKyAgICB1c2VyX25hbWU6IHN0ciwKKyAgICBlbmFibGVfZmxhZzogc3RyID0gTm9uZSwKKyAgICByb2xsb3V0X3BlcmNlbnQ6IGludCA9IDEwMCwKKykgLT4gYm9vbDoKKyAgIiIiRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZC4KKworICBXaGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdCBkZXBlbmRzIG9uIHR3byBmbGFnczogMSkgdGhlCisgIGVuYWJsZV9mbGFnIHRoYXQgZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSB0aGUgZmVhdHVyZSBhbmQgMikgdGhlIHJvbGxvdXRfZmxhZworICB0aGF0IGNvbnRyb2xzIHRoZSByb2xsb3V0IHBlcmNlbnRhZ2UuCisKKyAgQXJnczoKKyAgICBmZWF0dXJlX25hbWU6IG5hbWUgb2YgdGhlIGZlYXR1cmUuCisgICAgdXNlcl9uYW1lOiBzeXN0ZW0gdXNlciBuYW1lLgorICAgIGVuYWJsZV9mbGFnOiBuYW1lIG9mIHRoZSBlbnYgdmFyIHRoYXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgZmVhdHVyZQorICAgICAgZXhwbGljaXRseS4KKyAgICByb2xsb3V0X2ZsZzogbmFtZSBvZiB0aGUgZW52IHZhciB0aGF0IGNvbnRyb2xzIHRoZSByb2xsb3V0IHBlcmNlbnRhZ2UsIHRoZQorICAgICAgdmFsdWUgc3RvcmVkIGluIHRoZSBlbnYgdmFyIHNob3VsZCBiZSBhbiBpbnQgYmV0d2VlbiAwIGFuZCAxMDAgc3RyaW5nCisgICIiIgorICBpZiBlbmFibGVfZmxhZzoKKyAgICBpZiBvcy5lbnZpcm9uLmdldChlbmFibGVfZmxhZywgIiIpID09ICJmYWxzZSI6CisgICAgICBsb2dnaW5nLmluZm8oImZlYXR1cmU6ICVzIGlzIGRpc2FibGVkIiwgZmVhdHVyZV9uYW1lKQorICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBvcy5lbnZpcm9uLmdldChlbmFibGVfZmxhZywgIiIpID09ICJ0cnVlIjoKKyAgICAgIGxvZ2dpbmcuaW5mbygiZmVhdHVyZTogJXMgaXMgZW5hYmxlZCIsIGZlYXR1cmVfbmFtZSkKKyAgICAgIHJldHVybiBUcnVlCisKKyAgaGFzaF9vYmplY3QgPSBoYXNobGliLnNoYTI1NigpCisgIGhhc2hfb2JqZWN0LnVwZGF0ZSgodXNlcl9uYW1lICsgZmVhdHVyZV9uYW1lKS5lbmNvZGUoInV0Zi04IikpCisgIGhhc2hfbnVtYmVyID0gaW50KGhhc2hfb2JqZWN0LmhleGRpZ2VzdCgpLCAxNikgJSAxMDAKKworICByZXR1cm4gaGFzaF9udW1iZXIgPCByb2xsb3V0X3BlcmNlbnQKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlsc190ZXN0LnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL3V0aWxzX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzMGFhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlsc190ZXN0LnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiVW5pdHRlc3RzIGZvciBlZGl0IG1vbml0b3IgdXRpbHMuIiIiCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitmcm9tIGVkaXRfbW9uaXRvciBpbXBvcnQgdXRpbHMKKworVEVTVF9VU0VSID0gJ3Rlc3RfdXNlcicKK1RFU1RfRkVBVFVSRSA9ICd0ZXN0X2ZlYXR1cmUnCitFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUcgPSAnRU5BQkxFX1RFU1RfRkVBVFVSRScKK1JPTExPVVRfVEVTVF9GRUFUVVJFX0ZMQUcgPSAnUk9MTE9VVF9URVNUX0ZFQVRVUkUnCisKKworY2xhc3MgRW5hYmxlRmVhdHVyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgIGRlZiB0ZXN0X2ZlYXR1cmVfZW5hYmxlZF93aXRob3V0X2ZsYWcoc2VsZik6CisgICAgc2VsZi5hc3NlcnRUcnVlKHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZChURVNUX0ZFQVRVUkUsIFRFU1RfVVNFUikpCisKKyAgQG1vY2sucGF0Y2guZGljdChvcy5lbnZpcm9uLCB7RU5BQkxFX1RFU1RfRkVBVFVSRV9GTEFHOiAnZmFsc2UnfSwgY2xlYXI9VHJ1ZSkKKyAgZGVmIHRlc3RfZmVhdHVyZV9kaXNhYmxlZF93aXRoX2ZsYWcoc2VsZik6CisgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgdXRpbHMuaXNfZmVhdHVyZV9lbmFibGVkKAorICAgICAgICAgICAgVEVTVF9GRUFUVVJFLCBURVNUX1VTRVIsIEVOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRworICAgICAgICApCisgICAgKQorCisgIEBtb2NrLnBhdGNoLmRpY3Qob3MuZW52aXJvbiwge0VOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRzogJ3RydWUnfSwgY2xlYXI9VHJ1ZSkKKyAgZGVmIHRlc3RfZmVhdHVyZV9lbmFibGVkX3dpdGhfZmxhZyhzZWxmKToKKyAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgIHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICAgICAgICAgIFRFU1RfRkVBVFVSRSwgVEVTVF9VU0VSLCBFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUcKKyAgICAgICAgKQorICAgICkKKworICBkZWYgdGVzdF9mZWF0dXJlX2VuYWJsZWRfd2l0aF9yb2xsb3V0X3BlcmNlbnRhZ2Uoc2VsZik6CisgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICB1dGlscy5pc19mZWF0dXJlX2VuYWJsZWQoCisgICAgICAgICAgICBURVNUX0ZFQVRVUkUsCisgICAgICAgICAgICBURVNUX1VTRVIsCisgICAgICAgICAgICBFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUcsCisgICAgICAgICAgICA5MCwKKyAgICAgICAgKQorICAgICkKKworICBkZWYgdGVzdF9mZWF0dXJlX2Rpc2FibGVkX3dpdGhfcm9sbG91dF9wZXJjZW50YWdlKHNlbGYpOgorICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgIHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICAgICAgICAgIFRFU1RfRkVBVFVSRSwKKyAgICAgICAgICAgIFRFU1RfVVNFUiwKKyAgICAgICAgICAgIEVOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRywKKyAgICAgICAgICAgIDEwLAorICAgICAgICApCisgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZmlsZWxpc3RkaWZmL2ZpbGVfbGlzdF9kaWZmLnB5IGIvdG9vbHMvZmlsZWxpc3RkaWZmL2ZpbGVfbGlzdF9kaWZmLnB5CmluZGV4IGZiYmZlZGYuLmE2NDA4ZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9maWxlX2xpc3RfZGlmZi5weQorKysgYi90b29scy9maWxlbGlzdGRpZmYvZmlsZV9saXN0X2RpZmYucHkKQEAgLTc2LDcgKzc2LDcgQEAKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdrYXRpX2luc3RhbGxlZF9maWxlX2xpc3QnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3Nvb25nX2luc3RhbGxlZF9maWxlX2xpc3QnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3N5c3RlbV9tb2R1bGVfbmFtZScpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hbGxvd2xpc3RzJywgbmFyZ3M9JysnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYWxsb3dsaXN0cycsIG5hcmdzPScqJywgZGVmYXVsdD1bXSkKICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogCiAgICAgZmluZF91bmlxdWVfaXRlbXMoYXJncy5rYXRpX2luc3RhbGxlZF9maWxlX2xpc3QsIGFyZ3Muc29vbmdfaW5zdGFsbGVkX2ZpbGVfbGlzdCwgYXJncy5zeXN0ZW1fbW9kdWxlX25hbWUsIGFyZ3MuYWxsb3dsaXN0cykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9mc19jb25maWcvQW5kcm9pZC5icCBiL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLmJwCmluZGV4IDZhYTUyODkuLmE1YjZmZDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLmJwCkBAIC0yNzcsNiArMjc3LDcgQEAKICAgICBvdXQ6IFsib3V0Il0sCiB9CiAKKy8vIHN5c3RlbQogZ2VucnVsZSB7CiAgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9nZW4iLAogICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLApAQCAtMzA3LDYgKzMwOCw3IEBACiAgICAgc3JjOiAiOmZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZ2VuIiwKIH0KIAorLy8gc3lzdGVtX2V4dAogZ2VucnVsZSB7CiAgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9leHRfZ2VuIiwKICAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKQEAgLTMzNyw2ICszMzksNyBAQAogICAgIHN5c3RlbV9leHRfc3BlY2lmaWM6IHRydWUsCiB9CiAKKy8vIHByb2R1Y3QKIGdlbnJ1bGUgewogICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19wcm9kdWN0X2dlbiIsCiAgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCkBAIC0zNjcsNiArMzcwLDcgQEAKICAgICBwcm9kdWN0X3NwZWNpZmljOiB0cnVlLAogfQogCisvLyB2ZW5kb3IKIGdlbnJ1bGUgewogICAgIG5hbWU6ICJmc19jb25maWdfZGlyc192ZW5kb3JfZ2VuIiwKICAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKQEAgLTM5Nyw2ICs0MDEsNyBAQAogICAgIHZlbmRvcjogdHJ1ZSwKIH0KIAorLy8gb2RtCiBnZW5ydWxlIHsKICAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfb2RtX2dlbiIsCiAgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCkBAIC00MjcsNCArNDMyLDIxNCBAQAogICAgIGRldmljZV9zcGVjaWZpYzogdHJ1ZSwKIH0KIAotLy8gVE9ETyhqaXlvbmcpOiBhZGQgZnNfY29uZmlnIGZvciBvZW0sIHN5c3RlbV9kbGttLCB2ZW5kb3JfZGxrbSwgb2RtX2Rsa20gcGFydGl0aW9ucworLy8gc3lzdGVtX2Rsa20KK2dlbnJ1bGUgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbV9nZW4iLAorICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLAorICAgIGNtZDogZnNfY29uZmlnX2NtZF9kaXJzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIHN5c3RlbV9kbGttICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9kbGttIiwKKyAgICBmaWxlbmFtZTogImZzX2NvbmZpZ19kaXJzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2RpcnNfc3lzdGVtX2Rsa21fZ2VuIiwKKyAgICBzeXN0ZW1fZGxrbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZGxrbV9nZW4iLAorICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLAorICAgIGNtZDogZnNfY29uZmlnX2NtZF9maWxlcyArCisgICAgICAgICItLXBhcnRpdGlvbiBzeXN0ZW1fZGxrbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfc3lzdGVtX2Rsa20iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2ZpbGVzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2ZpbGVzX3N5c3RlbV9kbGttX2dlbiIsCisgICAgc3lzdGVtX2Rsa21fc3BlY2lmaWM6IHRydWUsCit9CisKKy8vIHZlbmRvcl9kbGttCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfdmVuZG9yX2Rsa21fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZGlycyArCisgICAgICAgICItLXBhcnRpdGlvbiB2ZW5kb3JfZGxrbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc192ZW5kb3JfZGxrbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZGlycyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19kaXJzX3ZlbmRvcl9kbGttX2dlbiIsCisgICAgdmVuZG9yX2Rsa21fc3BlY2lmaWM6IHRydWUsCit9CisKK2dlbnJ1bGUgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfdmVuZG9yX2Rsa21fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZmlsZXMgKworICAgICAgICAiLS1wYXJ0aXRpb24gdmVuZG9yX2Rsa20gIiArCisgICAgICAgICIkKGxvY2F0aW9ucyA6dGFyZ2V0X2ZzX2NvbmZpZ19nZW4pIiwKK30KKworcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2ZpbGVzX3ZlbmRvcl9kbGttIiwKKyAgICBmaWxlbmFtZTogImZzX2NvbmZpZ19maWxlcyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19maWxlc192ZW5kb3JfZGxrbV9nZW4iLAorICAgIHZlbmRvcl9kbGttX3NwZWNpZmljOiB0cnVlLAorfQorCisvLyBvZG1fZGxrbQorZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX29kbV9kbGttX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2RpcnMgKworICAgICAgICAiLS1wYXJ0aXRpb24gb2RtX2Rsa20gIiArCisgICAgICAgICIkKGxvY2F0aW9ucyA6dGFyZ2V0X2ZzX2NvbmZpZ19nZW4pIiwKK30KKworcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfb2RtX2Rsa20iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2RpcnMiLAorICAgIHNyYzogIjpmc19jb25maWdfZGlyc19vZG1fZGxrbV9nZW4iLAorICAgIG9kbV9kbGttX3NwZWNpZmljOiB0cnVlLAorfQorCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2ZpbGVzX29kbV9kbGttX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2ZpbGVzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIG9kbV9kbGttICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZG1fZGxrbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZmlsZXMiLAorICAgIHNyYzogIjpmc19jb25maWdfZmlsZXNfb2RtX2Rsa21fZ2VuIiwKKyAgICBvZG1fZGxrbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworLy8gb2VtCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfb2VtX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2RpcnMgKworICAgICAgICAiLS1wYXJ0aXRpb24gb2VtICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX29lbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZGlycyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19kaXJzX29lbV9nZW4iLAorICAgIG9lbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZW1fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZmlsZXMgKworICAgICAgICAiLS1wYXJ0aXRpb24gb2VtICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZW0iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2ZpbGVzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2ZpbGVzX29lbV9nZW4iLAorICAgIG9lbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworLy8gR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGVzIGZvciBlYWNoIHBhcnRpdGlvbi4KKy8vIEFkZCBmc19jb25maWdfZGlycyB0byBQUk9EVUNUX1BBQ0tBR0VTIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZS4KK3Bob255IHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnMiLAorICAgIHJlcXVpcmVkOiBbCisgICAgICAgICJmc19jb25maWdfZGlyc19zeXN0ZW0iLAorICAgICAgICAiZnNfY29uZmlnX2RpcnNfc3lzdGVtX2V4dCIsCisgICAgICAgICJmc19jb25maWdfZGlyc19wcm9kdWN0IiwKKyAgICAgICAgImZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSIsCisgICAgXSwKK30KKworLy8gR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlcyBmb3IgZWFjaCBwYXJ0aXRpb24uCisvLyBBZGQgZnNfY29uZmlnX2ZpbGVzIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgorcGhvbnkgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXMiLAorICAgIHJlcXVpcmVkOiBbCisgICAgICAgICJmc19jb25maWdfZmlsZXNfc3lzdGVtIiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZXh0IiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19wcm9kdWN0IiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0iLAorICAgIF0sCit9CisKKy8vIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlcyBmb3IgYWxsIGVuYWJsZWQgcGFydGl0aW9ucworLy8gZXhjbHVkaW5nIC9zeXN0ZW0sIC9zeXN0ZW1fZXh0IGFuZCAvcHJvZHVjdC4gQWRkIGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSB0bworLy8gUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCitwaG9ueSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSIsCisgICAgcmVxdWlyZWQ6IFtdICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgInZlbmRvciIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX3ZlbmRvciJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9lbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX29lbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9kbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX29kbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgInZlbmRvcl9kbGttIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2RpcnNfdmVuZG9yX2Rsa20iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJvZG1fZGxrbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX29kbV9kbGttIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAic3lzdGVtX2Rsa20iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pLAorfQorCisvLyBHZW5lcmF0ZSB0aGUgPHA+L2V0Yy9mc19jb25maWdfZmlsZXMgYmluYXJ5IGZpbGVzIGZvciBhbGwgZW5hYmxlZCBwYXJ0aXRpb25zCisvLyBleGNsdWRpbmcgL3N5c3RlbSwgL3N5c3RlbV9leHQgYW5kIC9wcm9kdWN0LiBBZGQgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0bworLy8gUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCitwaG9ueSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0iLAorICAgIHJlcXVpcmVkOiBbXSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJ2ZW5kb3IiKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZmlsZXNfdmVuZG9yIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAib2VtIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2ZpbGVzX29lbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9kbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19maWxlc19vZG0iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJ2ZW5kb3JfZGxrbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19maWxlc192ZW5kb3JfZGxrbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9kbV9kbGttIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2ZpbGVzX29kbV9kbGttIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAic3lzdGVtX2Rsa20iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZmlsZXNfc3lzdGVtX2Rsa20iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLm1rIGIvdG9vbHMvZnNfY29uZmlnL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YzM2MjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZnNfY29uZmlnL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQotCi0jIE9uZSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oIGZpbGUgYnkgdXNpbmcgVEFSR0VUX0ZTX0NPTkZJR19HRU4uCi0jICAgU2V0IFRBUkdFVF9GU19DT05GSUdfR0VOIHRvIGNvbnRhaW4gYSBsaXN0IG9mIGludGVybWVkaWF0ZSBmb3JtYXQgZmlsZXMKLSMgICBmb3IgZ2VuZXJhdGluZyB0aGUgYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oIGZpbGUuCi0jCi0jIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBSRUFETUUKLQotaWZuZXEgKCQod2lsZGNhcmQgJChUQVJHRVRfREVWSUNFX0RJUikvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oKSwpCi0kKGVycm9yIFVzaW5nICQoVEFSR0VUX0RFVklDRV9ESVIpL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIFRBUkdFVF9GU19DT05GSUdfR0VOIGluc3RlYWQpCi1lbmRpZgotCi1hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnIDo9IHN5c3RlbS9jb3JlL2xpYmN1dGlscy9pbmNsdWRlL3ByaXZhdGUvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oCi1jYXBhYmlsaXR5X2hlYWRlciA6PSBiaW9uaWMvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYXBhYmlsaXR5LmgKLQotIyBMaXN0IG9mIHN1cHBvcnRlZCB2ZW5kb3IsIG9lbSwgb2RtLCB2ZW5kb3JfZGxrbSwgb2RtX2Rsa20sIGFuZCBzeXN0ZW1fZGxrbSBQYXJ0aXRpb25zCi1mc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QgOj0gJChzdHJpcCBcCi0gICQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUklNQUdFKSQoQk9BUkRfVkVORE9SSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdmVuZG9yKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX09FTUlNQUdFKSQoQk9BUkRfT0VNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksb2VtKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX09ETUlNQUdFKSQoQk9BUkRfT0RNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksb2RtKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUl9ETEtNSU1BR0UpJChCT0FSRF9WRU5ET1JfRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHZlbmRvcl9kbGttKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX09ETV9ETEtNSU1BR0UpJChCT0FSRF9PRE1fRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLG9kbV9kbGttKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX1NZU1RFTV9ETEtNSU1BR0UpJChCT0FSRF9TWVNURU1fRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHN5c3RlbV9kbGttKSBcCi0pCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGVzIGZvciBlYWNoIHBhcnRpdGlvbi4KLSMgQWRkIGZzX2NvbmZpZ19kaXJzIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZGlycwotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9IFwKLSAgZnNfY29uZmlnX2RpcnNfc3lzdGVtIFwKLSAgZnNfY29uZmlnX2RpcnNfc3lzdGVtX2V4dCBcCi0gIGZzX2NvbmZpZ19kaXJzX3Byb2R1Y3QgXAotICBmc19jb25maWdfZGlyc19ub25zeXN0ZW0KLWluY2x1ZGUgJChCVUlMRF9QSE9OWV9QQUNLQUdFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZXMgZm9yIGVhY2ggcGFydGl0aW9uLgotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZmlsZXMKLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSBcCi0gIGZzX2NvbmZpZ19maWxlc19zeXN0ZW0gXAotICBmc19jb25maWdfZmlsZXNfc3lzdGVtX2V4dCBcCi0gIGZzX2NvbmZpZ19maWxlc19wcm9kdWN0IFwKLSAgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbQotaW5jbHVkZSAkKEJVSUxEX1BIT05ZX1BBQ0tBR0UpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGVzIGZvciBhbGwgZW5hYmxlZCBwYXJ0aXRpb25zCi0jIGV4Y2x1ZGluZyAvc3lzdGVtLCAvc3lzdGVtX2V4dCBhbmQgL3Byb2R1Y3QuIEFkZCBmc19jb25maWdfZGlyc19ub25zeXN0ZW0gdG8KLSMgUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9ICQoZm9yZWFjaCB0LCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSxmc19jb25maWdfZGlyc18kKHQpKQotaW5jbHVkZSAkKEJVSUxEX1BIT05ZX1BBQ0tBR0UpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlcyBmb3IgYWxsIGVuYWJsZWQgcGFydGl0aW9ucwotIyBleGNsdWRpbmcgL3N5c3RlbSwgL3N5c3RlbV9leHQgYW5kIC9wcm9kdWN0LiBBZGQgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0bwotIyBQUk9EVUNUX1BBQ0tBR0VTIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZS4KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9ICQoZm9yZWFjaCB0LCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSxmc19jb25maWdfZmlsZXNfJCh0KSkKLWluY2x1ZGUgJChCVUlMRF9QSE9OWV9QQUNLQUdFKQotCi1pZm5lcSAoJChmaWx0ZXIgb2VtLCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSksKQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgb2VtL2V0Yy9mc19jb25maWdfZGlycyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2RpcnMgb3IgZnNfY29uZmlnX2RpcnNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMKLSMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX29lbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2RpcnMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9PRU0pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIG9lbSBcCi0JICAgLS1kaXJzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSBvZW0vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIG9yIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX29lbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2ZpbGVzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0VNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiBvZW0gXAotCSAgIC0tZmlsZXMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLWVuZGlmCi0KLWlmbmVxICgkKGZpbHRlciB2ZW5kb3JfZGxrbSwkKGZzX2NvbmZpZ19nZW5lcmF0ZV9leHRyYV9wYXJ0aXRpb25fbGlzdCkpLCkKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIHZlbmRvcl9kbGttL2V0Yy9mc19jb25maWdfZGlycyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2RpcnMgb3IgZnNfY29uZmlnX2RpcnNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4KLSMgdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX3ZlbmRvcl9kbGttCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSBmc19jb25maWdfZGlycwotTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX1ZFTkRPUl9ETEtNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiB2ZW5kb3JfZGxrbSBcCi0JICAgLS1kaXJzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSB2ZW5kb3JfZGxrbS9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlIGZvciB0aGUgdGFyZ2V0Ci0jIEFkZCBmc19jb25maWdfZmlsZXMgb3IgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0byBQUk9EVUNUX1BBQ0tBR0VTIGluCi0jIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZmlsZXNfdmVuZG9yX2Rsa20KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19maWxlcwotTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX1ZFTkRPUl9ETEtNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiB2ZW5kb3JfZGxrbSBcCi0JICAgLS1maWxlcyBcCi0JICAgLS1vdXRfZmlsZSAkQCBcCi0JICAgJChvciAkKFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4pLC9kZXYvbnVsbCkKLQotZW5kaWYKLQotaWZuZXEgKCQoZmlsdGVyIG9kbV9kbGttLCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSksKQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgb2RtX2Rsa20vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlIGZvciB0aGUgdGFyZ2V0Ci0jIEFkZCBmc19jb25maWdfZGlycyBvciBmc19jb25maWdfZGlyc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2RpcnNfb2RtX2Rsa20KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19kaXJzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0RNX0RMS00pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIG9kbV9kbGttIFwKLQkgICAtLWRpcnMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIG9kbV9kbGttL2V0Yy9mc19jb25maWdfZmlsZXMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19maWxlcyBvciBmc19jb25maWdfZmlsZXNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMKLSMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19maWxlc19vZG1fZGxrbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2ZpbGVzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0RNX0RMS00pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIG9kbV9kbGttIFwKLQkgICAtLWZpbGVzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi1lbmRpZgotCi1pZm5lcSAoJChmaWx0ZXIgc3lzdGVtX2Rsa20sJChmc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QpKSwpCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSBzeXN0ZW1fZGxrbS9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19kaXJzIG9yIGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSB0byBQUk9EVUNUX1BBQ0tBR0VTCi0jIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2RpcnMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9TWVNURU1fRExLTSkvZXRjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9GU19IRFIgOj0gJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfQ0FQX0hEUiA6PSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOIDo9ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvZnNfY29uZmlnX2dlbmVyYXRvci5weSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQ8IGZzY29uZmlnIFwKLQkgICAtLWFpZC1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfRlNfSERSKSBcCi0JICAgLS1jYXBhYmlsaXR5LWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSKSBcCi0JICAgLS1wYXJ0aXRpb24gc3lzdGVtX2Rsa20gXAotCSAgIC0tZGlycyBcCi0JICAgLS1vdXRfZmlsZSAkQCBcCi0JICAgJChvciAkKFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4pLC9kZXYvbnVsbCkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgc3lzdGVtX2Rsa20vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIG9yIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX3N5c3RlbV9kbGttCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSBmc19jb25maWdfZmlsZXMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9TWVNURU1fRExLTSkvZXRjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9GU19IRFIgOj0gJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfQ0FQX0hEUiA6PSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOIDo9ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvZnNfY29uZmlnX2dlbmVyYXRvci5weSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQ8IGZzY29uZmlnIFwKLQkgICAtLWFpZC1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfRlNfSERSKSBcCi0JICAgLS1jYXBhYmlsaXR5LWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSKSBcCi0JICAgLS1wYXJ0aXRpb24gc3lzdGVtX2Rsa20gXAotCSAgIC0tZmlsZXMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLWVuZGlmCi0KLWFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcgOj0KLWNhcGFiaWxpdHlfaGVhZGVyIDo9Ci1mc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QgOj0KZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9pZGVfcXVlcnkuZ28gYi90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LmdvCmluZGV4IGVjOTM3ZmUuLmM3Y2Y1ZWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2lkZV9xdWVyeS9pZGVfcXVlcnkuZ28KKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L2lkZV9xdWVyeS5nbwpAQCAtMjkzLDExICsyOTMsMTkgQEAKIC8vIElmIGEgZmlsZSBpcyBjb3ZlcmVkIGJ5IG11bHRpcGxlIG1vZHVsZXMsIHRoZSBmaXJzdCBtb2R1bGUgaXMgcmV0dXJuZWQuCiBmdW5jIGZpbmRKYXZhTW9kdWxlcyhwYXRocyBbXXN0cmluZywgbW9kdWxlcyBtYXBbc3RyaW5nXSpqYXZhTW9kdWxlKSBtYXBbc3RyaW5nXXN0cmluZyB7CiAJcmV0IDo9IG1ha2UobWFwW3N0cmluZ11zdHJpbmcpCi0JZm9yIG5hbWUsIG1vZHVsZSA6PSByYW5nZSBtb2R1bGVzIHsKKwkvLyBBIGZpbGUgbWF5IGJlIHBhcnQgb2YgbXVsdGlwbGUgbW9kdWxlcy4gVG8gbWFrZSB0aGUgcmVzdWx0IGRldGVybWluaXN0aWMsCisJLy8gY2hlY2sgdGhlIG1vZHVsZXMgaW4gc29ydGVkIG9yZGVyLgorCWtleXMgOj0gbWFrZShbXXN0cmluZywgMCwgbGVuKG1vZHVsZXMpKQorCWZvciBuYW1lIDo9IHJhbmdlIG1vZHVsZXMgeworCQlrZXlzID0gYXBwZW5kKGtleXMsIG5hbWUpCisJfQorCXNsaWNlcy5Tb3J0KGtleXMpCisJZm9yIF8sIG5hbWUgOj0gcmFuZ2Uga2V5cyB7CiAJCWlmIHN0cmluZ3MuSGFzU3VmZml4KG5hbWUsICIuaW1wbCIpIHsKIAkJCWNvbnRpbnVlCiAJCX0KIAorCQltb2R1bGUgOj0gbW9kdWxlc1tuYW1lXQogCQlmb3IgaSwgcCA6PSByYW5nZSBwYXRocyB7CiAJCQlpZiBzbGljZXMuQ29udGFpbnMobW9kdWxlLlNyY3MsIHApIHsKIAkJCQlyZXRbcF0gPSBuYW1lCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvaWRlX3F1ZXJ5Lm91dCBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0CmluZGV4IGNkN2NlNmQuLmJlNDhkYTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0CisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0CkBAIC0xLDcgKzEsOSBAQAogCi0Db3V0EpZhCi04YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MaOHByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTIyODE3L2Jpbi9jbGFuZysrGgctbXRodW1iGgMtT3MaFC1mb21pdC1mcmFtZS1wb2ludGVyGgYtbWxsdm0aGS1lbmFibGUtc2hyaW5rLXdyYXA9ZmFsc2UaAy1PMhoFLVdhbGwaBy1XZXh0cmEaCy1XaW5pdC1zZWxmGg8tV3BvaW50ZXItYXJpdGgaGC1XdW5ndWFyZGVkLWF2YWlsYWJpbGl0eRoRLVdlcnJvcj1kYXRlLXRpbWUaFi1XZXJyb3I9aW50LWNvbnZlcnNpb24aEy1XZXJyb3I9cHJhZ21hLXBhY2saJi1XZXJyb3I9cHJhZ21hLXBhY2stc3VzcGljaW91cy1pbmNsdWRlGhgtV2Vycm9yPXNpemVvZi1hcnJheS1kaXYaFy1XZXJyb3I9c3RyaW5nLXBsdXMtaW50GictV2Vycm9yPXVucmVhY2hhYmxlLWNvZGUtbG9vcC1pbmNyZW1lbnQaIi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMaEy1Xbm8tYzk5LWRlc2lnbmF0b3IaGS1Xbm8tZ251LWZvbGRpbmctY29uc3RhbnQaIi1Xbm8taW5jb25zaXN0ZW50LW1pc3Npbmctb3ZlcnJpZGUaHC1Xbm8tZXJyb3I9cmVvcmRlci1pbml0LWxpc3QaFi1Xbm8tcmVvcmRlci1pbml0LWxpc3QaES1Xbm8tc2lnbi1jb21wYXJlGgstV25vLXVudXNlZBoJLURBTkRST0lEGggtRE5ERUJVRxoHLVVERUJVRxooLURfX2NvbXBpbGVyX29mZnNldG9mPV9fYnVpbHRpbl9vZmZzZXRvZhoqLURfX0FORFJPSURfVU5BVkFJTEFCTEVfU1lNQk9MU19BUkVfV0VBS19fGgktZmFkZHJzaWcaGS1mZGVidWctZGVmYXVsdC12ZXJzaW9uPTUaEy1mY29sb3ItZGlhZ25vc3RpY3MaES1mZnAtY29udHJhY3Q9b2ZmGg8tZm5vLWV4Y2VwdGlvbnMaFC1mbm8tc3RyaWN0LWFsaWFzaW5nGhItZm1lc3NhZ2UtbGVuZ3RoPTAaIy1mbm8tcmVsYXhlZC10ZW1wbGF0ZS10ZW1wbGF0ZS1hcmdzGhctZ3NpbXBsZS10ZW1wbGF0ZS1uYW1lcxoILWd6PXpzdGQaFi1uby1jYW5vbmljYWwtcHJlZml4ZXMaES1Xbm8tZXJyb3I9Zm9ybWF0GiItZmRlYnVnLXByZWZpeC1tYXA9L3Byb2Mvc2VsZi9jd2Q9GhwtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvGgItZxoTLWZmdW5jdGlvbi1zZWN0aW9ucxoPLWZkYXRhLXNlY3Rpb25zGhAtZm5vLXNob3J0LWVudW1zGg8tZnVud2luZC10YWJsZXMaGC1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZxoRLVdhLC0tbm9leGVjc3RhY2saEy1EX0ZPUlRJRllfU09VUkNFPTIaEy1Xc3RyaWN0LWFsaWFzaW5nPTIaEy1XZXJyb3I9cmV0dXJuLXR5cGUaGC1XZXJyb3I9bm9uLXZpcnR1YWwtZHRvchoPLVdlcnJvcj1hZGRyZXNzGhYtV2Vycm9yPXNlcXVlbmNlLXBvaW50GhctV2Vycm9yPWZvcm1hdC1zZWN1cml0eRoMLW5vc3RkbGliaW5jGhotZmRlYnVnLWluZm8tZm9yLXByb2ZpbGluZxoMLW1zb2Z0LWZsb2F0Gg4tbWFyY2g9YXJtdjctYRoSLW1mbG9hdC1hYmk9c29mdGZwGgotLW1mcHU9bmVvbhovLUlidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAaswEtSW91dC9zb29uZy8uaW50ZXJtZWRpYXRlcy9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9jYy9hbmRyb2lkX2FybV9hcm12Ny1hLW5lb24vZ2VuL3Byb3RvL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcBqFAS1Jb3V0L3Nvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8aFC1EX19MSUJDX0FQSV9fPTEwMDAwGhQtRF9fTElCTV9BUElfXz0xMDAwMBoVLURfX0xJQkRMX0FQSV9fPTEwMDAwGhctSWV4dGVybmFsL3Byb3RvYnVmL3NyYxpZLUlwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUyMjgxNy9hbmRyb2lkX2xpYmMrKy9wbGF0Zm9ybS9hcm0vaW5jbHVkZS9jKysvdjEaPS1JcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MjI4MTcvaW5jbHVkZS9jKysvdjEaIC1JYmlvbmljL2xpYmMvYXN5bmNfc2FmZS9pbmNsdWRlGh8tSXN5c3RlbS9sb2dnaW5nL2xpYmxvZy9pbmNsdWRlGictSWJpb25pYy9saWJjL3N5c3RlbV9wcm9wZXJ0aWVzL2luY2x1ZGUaPC1Jc3lzdGVtL2NvcmUvcHJvcGVydHlfc2VydmljZS9saWJwcm9wZXJ0eWluZm9wYXJzZXIvaW5jbHVkZRoILWlzeXN0ZW0aE2Jpb25pYy9saWJjL2luY2x1ZGUaCC1pc3lzdGVtGh9iaW9uaWMvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtGggtaXN5c3RlbRoXYmlvbmljL2xpYmMva2VybmVsL3VhcGkaCC1pc3lzdGVtGh9iaW9uaWMvbGliYy9rZXJuZWwvYW5kcm9pZC9zY3NpGggtaXN5c3RlbRofYmlvbmljL2xpYmMva2VybmVsL2FuZHJvaWQvdWFwaRoHLXRhcmdldBodYXJtdjdhLWxpbnV4LWFuZHJvaWRlYWJpMTAwMDAaEC1EQU5EUk9JRF9TVFJJQ1QaBS1mUElFGgctV2Vycm9yGhUtV25vLXVudXNlZC1wYXJhbWV0ZXIaGS1ER09PR0xFX1BST1RPQlVGX05PX1JUVEkaFi1XaW1wbGljaXQtZmFsbHRocm91Z2gaKi1EX0xJQkNQUF9FTkFCTEVfVEhSRUFEX1NBRkVUWV9BTk5PVEFUSU9OUxoVLVduby1nbnUtaW5jbHVkZS1uZXh0GhstZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4aBi1tbGx2bRoZLWVuYWJsZS1zaHJpbmstd3JhcD1mYWxzZRoMLXN0ZD1nbnUrKzIwGgktZm5vLXJ0dGkaFS1Jc3lzdGVtL2NvcmUvaW5jbHVkZRofLUlzeXN0ZW0vbG9nZ2luZy9saWJsb2cvaW5jbHVkZRocLUlzeXN0ZW0vbWVkaWEvYXVkaW8vaW5jbHVkZRoeLUloYXJkd2FyZS9saWJoYXJkd2FyZS9pbmNsdWRlGiUtSWhhcmR3YXJlL2xpYmhhcmR3YXJlX2xlZ2FjeS9pbmNsdWRlGhYtSWhhcmR3YXJlL3JpbC9pbmNsdWRlGhstSWZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUaIi1JZnJhbWV3b3Jrcy9uYXRpdmUvb3BlbmdsL2luY2x1ZGUaFy1JZnJhbWV3b3Jrcy9hdi9pbmNsdWRlGhYtV2Vycm9yPWJvb2wtb3BlcmF0aW9uGiAtV2Vycm9yPWZvcm1hdC1pbnN1ZmZpY2llbnQtYXJncxolLVdlcnJvcj1pbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbhobLVdlcnJvcj1pbnQtaW4tYm9vbC1jb250ZXh0GhstV2Vycm9yPWludC10by1wb2ludGVyLWNhc3QaGy1XZXJyb3I9cG9pbnRlci10by1pbnQtY2FzdBoXLVdlcnJvcj14b3ItdXNlZC1hcy1wb3caHi1Xbm8tdm9pZC1wb2ludGVyLXRvLWVudW0tY2FzdBodLVduby12b2lkLXBvaW50ZXItdG8taW50LWNhc3QaGC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdBoWLVdlcnJvcj1mb3J0aWZ5LXNvdXJjZRoULVduby11bnVzZWQtdmFyaWFibGUaHy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMaEy1Xbm8tcGFja2VkLW5vbi1wb2QaHC1XZXJyb3I9YWRkcmVzcy1vZi10ZW1wb3JhcnkaKy1XZXJyb3I9aW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXMaGC1XZXJyb3I9bnVsbC1kZXJlZmVyZW5jZRoTLVdlcnJvcj1yZXR1cm4tdHlwZRoiLVduby10YXV0b2xvZ2ljYWwtY29uc3RhbnQtY29tcGFyZRokLVduby10YXV0b2xvZ2ljYWwtdHlwZS1saW1pdC1jb21wYXJlGiItV25vLWltcGxpY2l0LWludC1mbG9hdC1jb252ZXJzaW9uGiEtV25vLXRhdXRvbG9naWNhbC1vdmVybGFwLWNvbXBhcmUaFC1Xbm8tZGVwcmVjYXRlZC1jb3B5GhktV25vLXJhbmdlLWxvb3AtY29uc3RydWN0GiItV25vLXplcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50GiktV25vLWRlcHJlY2F0ZWQtYW5vbi1lbnVtLWVudW0tY29udmVyc2lvbhokLVduby1kZXByZWNhdGVkLWVudW0tZW51bS1jb252ZXJzaW9uGhUtV25vLXBlc3NpbWl6aW5nLW1vdmUaHi1Xbm8tbm9uLWMtdHlwZWRlZi1mb3ItbGlua2FnZRoTLVduby1hbGlnbi1taXNtYXRjaBoiLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZRojLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC1wYXJhbWV0ZXIaHi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1idWlsdGlucxoVLVduby1lcnJvcj1kZXByZWNhdGVkGjItV25vLWVycm9yPXNpbmdsZS1iaXQtYml0ZmllbGQtY29uc3RhbnQtY29udmVyc2lvbhokLVduby1lcnJvcj1lbnVtLWNvbnN0ZXhwci1jb252ZXJzaW9uGhstV25vLWVycm9yPWludmFsaWQtb2Zmc2V0b2YaJi1Xbm8tZGVwcmVjYXRlZC1keW5hbWljLWV4Y2VwdGlvbi1zcGVjGjhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYyLVPworA291dDJ4Cis4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MSAggBGjhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYzqXIgorOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjEAIaOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjIjhwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUzMDU2Ny9iaW4vY2xhbmcrKyIMLW5vc3RkbGliaW5jIgctbXRodW1iIgMtT3MiFC1mb21pdC1mcmFtZS1wb2ludGVyIgYtbWxsdm0iGS1lbmFibGUtc2hyaW5rLXdyYXA9ZmFsc2UiAy1PMiIFLVdhbGwiBy1XZXh0cmEiCy1XaW5pdC1zZWxmIg8tV3BvaW50ZXItYXJpdGgiGC1XdW5ndWFyZGVkLWF2YWlsYWJpbGl0eSIRLVdlcnJvcj1kYXRlLXRpbWUiFi1XZXJyb3I9aW50LWNvbnZlcnNpb24iEy1XZXJyb3I9cHJhZ21hLXBhY2siJi1XZXJyb3I9cHJhZ21hLXBhY2stc3VzcGljaW91cy1pbmNsdWRlIhgtV2Vycm9yPXNpemVvZi1hcnJheS1kaXYiFy1XZXJyb3I9c3RyaW5nLXBsdXMtaW50IictV2Vycm9yPXVucmVhY2hhYmxlLWNvZGUtbG9vcC1pbmNyZW1lbnQiIi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiEy1Xbm8tYzIzLWV4dGVuc2lvbnMiEy1Xbm8tYzk5LWRlc2lnbmF0b3IiGS1Xbm8tZ251LWZvbGRpbmctY29uc3RhbnQiIi1Xbm8taW5jb25zaXN0ZW50LW1pc3Npbmctb3ZlcnJpZGUiHC1Xbm8tZXJyb3I9cmVvcmRlci1pbml0LWxpc3QiFi1Xbm8tcmVvcmRlci1pbml0LWxpc3QiES1Xbm8tc2lnbi1jb21wYXJlIgstV25vLXVudXNlZCIJLURBTkRST0lEIggtRE5ERUJVRyIHLVVERUJVRyIoLURfX2NvbXBpbGVyX29mZnNldG9mPV9fYnVpbHRpbl9vZmZzZXRvZiIqLURfX0FORFJPSURfVU5BVkFJTEFCTEVfU1lNQk9MU19BUkVfV0VBS19fIgktZmFkZHJzaWciGS1mZGVidWctZGVmYXVsdC12ZXJzaW9uPTUiEy1mY29sb3ItZGlhZ25vc3RpY3MiES1mZnAtY29udHJhY3Q9b2ZmIg8tZm5vLWV4Y2VwdGlvbnMiFC1mbm8tc3RyaWN0LWFsaWFzaW5nIhItZm1lc3NhZ2UtbGVuZ3RoPTAiFy1nc2ltcGxlLXRlbXBsYXRlLW5hbWVzIggtZ3o9enN0ZCIWLW5vLWNhbm9uaWNhbC1wcmVmaXhlcyIiLWZkZWJ1Zy1wcmVmaXgtbWFwPS9wcm9jL3NlbGYvY3dkPSIcLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyICLWciEy1mZnVuY3Rpb24tc2VjdGlvbnMiDy1mZGF0YS1zZWN0aW9ucyIQLWZuby1zaG9ydC1lbnVtcyIPLWZ1bndpbmQtdGFibGVzIhgtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmciES1XYSwtLW5vZXhlY3N0YWNrIhMtRF9GT1JUSUZZX1NPVVJDRT0yIhMtV3N0cmljdC1hbGlhc2luZz0yIhMtV2Vycm9yPXJldHVybi10eXBlIhgtV2Vycm9yPW5vbi12aXJ0dWFsLWR0b3IiDy1XZXJyb3I9YWRkcmVzcyIWLVdlcnJvcj1zZXF1ZW5jZS1wb2ludCIXLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkiDC1tc29mdC1mbG9hdCIOLW1hcmNoPWFybXY3LWEiEi1tZmxvYXQtYWJpPXNvZnRmcCIKKy1tZnB1PW5lb24iLy1JYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwIrMBLUlvdXQvc29vbmcvLmludGVybWVkaWF0ZXMvYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2lkZV9xdWVyeV9wcm9iZXJzY3JpcHRfY2MvYW5kcm9pZF9hcm1fYXJtdjctYS1uZW9uL2dlbi9wcm90by9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAihQEtSW91dC9zb29uZy8uaW50ZXJtZWRpYXRlcy9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9jYy9hbmRyb2lkX2FybV9hcm12Ny1hLW5lb24vZ2VuL3Byb3RvIhQtRF9fTElCQ19BUElfXz0xMDAwMCIULURfX0xJQk1fQVBJX189MTAwMDAiFS1EX19MSUJETF9BUElfXz0xMDAwMCIXLUlleHRlcm5hbC9wcm90b2J1Zi9zcmMiWS1JcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MzA1NjcvYW5kcm9pZF9saWJjKysvcGxhdGZvcm0vYXJtL2luY2x1ZGUvYysrL3YxIj0tSXByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTMwNTY3L2luY2x1ZGUvYysrL3YxIiAtSWJpb25pYy9saWJjL2FzeW5jX3NhZmUvaW5jbHVkZSIfLUlzeXN0ZW0vbG9nZ2luZy9saWJsb2cvaW5jbHVkZSInLUliaW9uaWMvbGliYy9zeXN0ZW1fcHJvcGVydGllcy9pbmNsdWRlIjwtSXN5c3RlbS9jb3JlL3Byb3BlcnR5X3NlcnZpY2UvbGlicHJvcGVydHlpbmZvcGFyc2VyL2luY2x1ZGUiCC1pc3lzdGVtIhNiaW9uaWMvbGliYy9pbmNsdWRlIggtaXN5c3RlbSIfYmlvbmljL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybSIILWlzeXN0ZW0iF2Jpb25pYy9saWJjL2tlcm5lbC91YXBpIggtaXN5c3RlbSIfYmlvbmljL2xpYmMva2VybmVsL2FuZHJvaWQvc2NzaSIILWlzeXN0ZW0iH2Jpb25pYy9saWJjL2tlcm5lbC9hbmRyb2lkL3VhcGkiBy10YXJnZXQiHWFybXY3YS1saW51eC1hbmRyb2lkZWFiaTEwMDAwIhAtREFORFJPSURfU1RSSUNUIgUtZlBJRSIHLVdlcnJvciIVLVduby11bnVzZWQtcGFyYW1ldGVyIhktREdPT0dMRV9QUk9UT0JVRl9OT19SVFRJIhYtV2ltcGxpY2l0LWZhbGx0aHJvdWdoIiotRF9MSUJDUFBfRU5BQkxFX1RIUkVBRF9TQUZFVFlfQU5OT1RBVElPTlMiFS1Xbm8tZ251LWluY2x1ZGUtbmV4dCIbLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIgYtbWxsdm0iGS1lbmFibGUtc2hyaW5rLXdyYXA9ZmFsc2UiDC1zdGQ9Z251KysyMCIJLWZuby1ydHRpIhUtSXN5c3RlbS9jb3JlL2luY2x1ZGUiHy1Jc3lzdGVtL2xvZ2dpbmcvbGlibG9nL2luY2x1ZGUiHC1Jc3lzdGVtL21lZGlhL2F1ZGlvL2luY2x1ZGUiHi1JaGFyZHdhcmUvbGliaGFyZHdhcmUvaW5jbHVkZSIlLUloYXJkd2FyZS9saWJoYXJkd2FyZV9sZWdhY3kvaW5jbHVkZSIWLUloYXJkd2FyZS9yaWwvaW5jbHVkZSIbLUlmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlIiItSWZyYW1ld29ya3MvbmF0aXZlL29wZW5nbC9pbmNsdWRlIhctSWZyYW1ld29ya3MvYXYvaW5jbHVkZSIWLVdlcnJvcj1ib29sLW9wZXJhdGlvbiIgLVdlcnJvcj1mb3JtYXQtaW5zdWZmaWNpZW50LWFyZ3MiJS1XZXJyb3I9aW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24iGy1XZXJyb3I9aW50LWluLWJvb2wtY29udGV4dCIbLVdlcnJvcj1pbnQtdG8tcG9pbnRlci1jYXN0IhstV2Vycm9yPXBvaW50ZXItdG8taW50LWNhc3QiFy1XZXJyb3I9eG9yLXVzZWQtYXMtcG93Ih4tV25vLXZvaWQtcG9pbnRlci10by1lbnVtLWNhc3QiHS1Xbm8tdm9pZC1wb2ludGVyLXRvLWludC1jYXN0IhgtV25vLXBvaW50ZXItdG8taW50LWNhc3QiFi1XZXJyb3I9Zm9ydGlmeS1zb3VyY2UiFC1Xbm8tdW51c2VkLXZhcmlhYmxlIh8tV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIhMtV25vLXBhY2tlZC1ub24tcG9kIhwtV2Vycm9yPWFkZHJlc3Mtb2YtdGVtcG9yYXJ5IistV2Vycm9yPWluY29tcGF0aWJsZS1mdW5jdGlvbi1wb2ludGVyLXR5cGVzIhgtV2Vycm9yPW51bGwtZGVyZWZlcmVuY2UiEy1XZXJyb3I9cmV0dXJuLXR5cGUiIi1Xbm8tdGF1dG9sb2dpY2FsLWNvbnN0YW50LWNvbXBhcmUiJC1Xbm8tdGF1dG9sb2dpY2FsLXR5cGUtbGltaXQtY29tcGFyZSIiLVduby1pbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiIhLVduby10YXV0b2xvZ2ljYWwtb3ZlcmxhcC1jb21wYXJlIhQtV25vLWRlcHJlY2F0ZWQtY29weSIZLVduby1yYW5nZS1sb29wLWNvbnN0cnVjdCIiLVduby16ZXJvLWFzLW51bGwtcG9pbnRlci1jb25zdGFudCIpLVduby1kZXByZWNhdGVkLWFub24tZW51bS1lbnVtLWNvbnZlcnNpb24iJC1Xbm8tZGVwcmVjYXRlZC1lbnVtLWVudW0tY29udmVyc2lvbiIbLVduby1lcnJvcj1wZXNzaW1pemluZy1tb3ZlIh4tV25vLW5vbi1jLXR5cGVkZWYtZm9yLWxpbmthZ2UiEy1Xbm8tYWxpZ24tbWlzbWF0Y2giIi1Xbm8tZXJyb3I9dW51c2VkLWJ1dC1zZXQtdmFyaWFibGUiIy1Xbm8tZXJyb3I9dW51c2VkLWJ1dC1zZXQtcGFyYW1ldGVyIh4tV25vLWVycm9yPWRlcHJlY2F0ZWQtYnVpbHRpbnMiFS1Xbm8tZXJyb3I9ZGVwcmVjYXRlZCImLVduby1kZXByZWNhdGVkLWR5bmFtaWMtZXhjZXB0aW9uLXNwZWMiJC1Xbm8tZXJyb3I9ZW51bS1jb25zdGV4cHItY29udmVyc2lvbiIbLVduby1lcnJvcj1pbnZhbGlkLW9mZnNldG9mIiktV25vLWVycm9yPXRocmVhZC1zYWZldHktcmVmZXJlbmNlLXJldHVybiIWLVduby12bGEtY3h4LWV4dGVuc2lvbiI4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MyRWdlbmZpbGVzX2Zvcl9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYzqfQAorRWdlbmZpbGVzX2Zvcl9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYyrVPwogtgFzb29uZy8uaW50ZXJtZWRpYXRlcy9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9jYy9hbmRyb2lkX2FybV9hcm12Ny1hLW5lb24vZ2VuL3Byb3RvL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9mb28ucGIuaBKZPi8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCiAvLyBzb3VyY2U6IGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9mb28ucHJvdG8KIApkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL3JlZ2VuLnNoIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL3JlZ2VuLnNoCmluZGV4IDJlZGZlNTMuLjA0YTAyNjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9yZWdlbi5zaAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvcmVnZW4uc2gKQEAgLTIxLDEzICsyMSw4IEBACiAjIGlkZV9xdWVyeS5zaC4gVGhlIHByb2JlciBkb2Vzbid0IGNoZWNrLW91dCB0aGUgZnVsbCBzb3VyY2UgY29kZSwgc28gaXQKICMgY2FuJ3QgcnVuIGlkZV9xdWVyeS5zaCBpdHNlbGYuCiAKLWNkICQoZGlybmFtZSAkQkFTSF9TT1VSQ0UpCi1zb3VyY2UgJChwd2QpLy4uLy4uLy4uL3NoZWxsX3V0aWxzLnNoCi1yZXF1aXJlX3RvcAotCiBmaWxlc190b19idWlsZD0oCiAgIGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjCiApCiAKLWNkICR7VE9QfQogYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LnNoIC0tbHVuY2hfdGFyZ2V0PWFvc3BfYXJtLXRydW5rX3N0YWdpbmctZW5nICR7ZmlsZXNfdG9fYnVpbGRbQF19ID4gYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvaWRlX3F1ZXJ5Lm91dApkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvQW5kcm9pZC5icCBiL3Rvb2xzL21ldGFkYXRhL0FuZHJvaWQuYnAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZDEwNmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvQW5kcm9pZC5icAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXBhY2thZ2UgewotICAgIGRlZmF1bHRfYXBwbGljYWJsZV9saWNlbnNlczogWyJBbmRyb2lkLUFwYWNoZS0yLjAiXSwKLX0KLQotYmx1ZXByaW50X2dvX2JpbmFyeSB7Ci0gICAgbmFtZTogIm1ldGFkYXRhIiwKLSAgICBkZXBzOiBbCi0gICAgICAgICAgICAic29vbmctdGVzdGluZy10ZXN0X3NwZWNfcHJvdG8iLAotICAgICAgICAgICAgInNvb25nLXRlc3RpbmctY29kZV9tZXRhZGF0YV9wcm90byIsCi0gICAgICAgICAgICAic29vbmctdGVzdGluZy1jb2RlX21ldGFkYXRhX2ludGVybmFsX3Byb3RvIiwKLSAgICAgICAgICAgICJnb2xhbmctcHJvdG9idWYtcHJvdG8iLAotICAgICAgICBdLAotICAgIHNyY3M6IFsKLSAgICAgICAgImdlbmVyYXRvci5nbyIsCi0gICAgXQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL09XTkVSUyBiL3Rvb2xzL21ldGFkYXRhL09XTkVSUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiY2RmMS4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS9PV05FUlMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWRhcmlvZnJlbmlAZ29vZ2xlLmNvbQotam9lb0Bnb29nbGUuY29tCi1yb25pc2hAZ29vZ2xlLmNvbQotY2FkaXR5YUBnb29nbGUuY29tCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS9nZW5lcmF0b3IuZ28gYi90b29scy9tZXRhZGF0YS9nZW5lcmF0b3IuZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NjY4YmUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvZ2VuZXJhdG9yLmdvCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLXBhY2thZ2UgbWFpbgotCi1pbXBvcnQgKAotCSJmbGFnIgotCSJmbXQiCi0JImlvIgotCSJsb2ciCi0JIm9zIgotCSJzb3J0IgotCSJzdHJpbmdzIgotCSJzeW5jIgotCi0JImFuZHJvaWQvc29vbmcvdGVzdGluZy9jb2RlX21ldGFkYXRhX2ludGVybmFsX3Byb3RvIgotCSJhbmRyb2lkL3Nvb25nL3Rlc3RpbmcvY29kZV9tZXRhZGF0YV9wcm90byIKLQkiYW5kcm9pZC9zb29uZy90ZXN0aW5nL3Rlc3Rfc3BlY19wcm90byIKLQkiZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvcHJvdG8iCi0pCi0KLXR5cGUga2V5VG9Mb2Nrc01hcCBzdHJ1Y3QgewotCWxvY2tzIHN5bmMuTWFwCi19Ci0KLWZ1bmMgKGtsICprZXlUb0xvY2tzTWFwKSBHZXRMb2NrRm9yS2V5KGtleSBzdHJpbmcpICpzeW5jLk11dGV4IHsKLQltdXRleCwgXyA6PSBrbC5sb2Nrcy5Mb2FkT3JTdG9yZShrZXksICZzeW5jLk11dGV4e30pCi0JcmV0dXJuIG11dGV4Ligqc3luYy5NdXRleCkKLX0KLQotLy8gRGVmaW5lIGEgc3RydWN0IHRvIGhvbGQgdGhlIGNvbWJpbmF0aW9uIG9mIHRlYW0gSUQgYW5kIG11bHRpLW93bmVyc2hpcCBmbGFnIGZvciB2YWxpZGF0aW9uCi10eXBlIHNvdXJjZUZpbGVBdHRyaWJ1dGVzIHN0cnVjdCB7Ci0JVGVhbUlEICAgICAgICAgc3RyaW5nCi0JTXVsdGlPd25lcnNoaXAgYm9vbAotCVBhdGggICAgICAgICAgIHN0cmluZwotfQotCi1mdW5jIGdldFNvcnRlZEtleXMoc3luY01hcCAqc3luYy5NYXApIFtdc3RyaW5nIHsKLQl2YXIgYWxsS2V5cyBbXXN0cmluZwotCXN5bmNNYXAuUmFuZ2UoCi0JCWZ1bmMoa2V5LCBfIGludGVyZmFjZXt9KSBib29sIHsKLQkJCWFsbEtleXMgPSBhcHBlbmQoYWxsS2V5cywga2V5LihzdHJpbmcpKQotCQkJcmV0dXJuIHRydWUKLQkJfSwKLQkpCi0KLQlzb3J0LlN0cmluZ3MoYWxsS2V5cykKLQlyZXR1cm4gYWxsS2V5cwotfQotCi0vLyB3cml0ZVByb3RvVG9GaWxlIG1hcnNoYWxzIGEgcHJvdG9idWYgbWVzc2FnZSBhbmQgd3JpdGVzIGl0IHRvIGEgZmlsZQotZnVuYyB3cml0ZVByb3RvVG9GaWxlKG91dHB1dEZpbGUgc3RyaW5nLCBtZXNzYWdlIHByb3RvLk1lc3NhZ2UpIHsKLQlkYXRhLCBlcnIgOj0gcHJvdG8uTWFyc2hhbChtZXNzYWdlKQotCWlmIGVyciAhPSBuaWwgewotCQlsb2cuRmF0YWwoZXJyKQotCX0KLQlmaWxlLCBlcnIgOj0gb3MuQ3JlYXRlKG91dHB1dEZpbGUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbChlcnIpCi0JfQotCWRlZmVyIGZpbGUuQ2xvc2UoKQotCi0JXywgZXJyID0gZmlsZS5Xcml0ZShkYXRhKQotCWlmIGVyciAhPSBuaWwgewotCQlsb2cuRmF0YWwoZXJyKQotCX0KLX0KLQotZnVuYyByZWFkRmlsZVRvU3RyaW5nKGZpbGVQYXRoIHN0cmluZykgc3RyaW5nIHsKLQlmaWxlLCBlcnIgOj0gb3MuT3BlbihmaWxlUGF0aCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nLkZhdGFsKGVycikKLQl9Ci0JZGVmZXIgZmlsZS5DbG9zZSgpCi0KLQlkYXRhLCBlcnIgOj0gaW8uUmVhZEFsbChmaWxlKQotCWlmIGVyciAhPSBuaWwgewotCQlsb2cuRmF0YWwoZXJyKQotCX0KLQlyZXR1cm4gc3RyaW5nKGRhdGEpCi19Ci0KLWZ1bmMgd3JpdGVFbXB0eU91dHB1dFByb3RvKG91dHB1dEZpbGUgc3RyaW5nLCBtZXRhZGF0YVJ1bGUgc3RyaW5nKSB7Ci0JZmlsZSwgZXJyIDo9IG9zLkNyZWF0ZShvdXRwdXRGaWxlKQotCWlmIGVyciAhPSBuaWwgewotCQlsb2cuRmF0YWwoZXJyKQotCX0KLQl2YXIgbWVzc2FnZSBwcm90by5NZXNzYWdlCi0JaWYgbWV0YWRhdGFSdWxlID09ICJ0ZXN0X3NwZWMiIHsKLQkJbWVzc2FnZSA9ICZ0ZXN0X3NwZWNfcHJvdG8uVGVzdFNwZWN7fQotCX0gZWxzZSBpZiBtZXRhZGF0YVJ1bGUgPT0gImNvZGVfbWV0YWRhdGEiIHsKLQkJbWVzc2FnZSA9ICZjb2RlX21ldGFkYXRhX3Byb3RvLkNvZGVNZXRhZGF0YXt9Ci0JfQotCWRhdGEsIGVyciA6PSBwcm90by5NYXJzaGFsKG1lc3NhZ2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbChlcnIpCi0JfQotCWRlZmVyIGZpbGUuQ2xvc2UoKQotCi0JXywgZXJyID0gZmlsZS5Xcml0ZShbXWJ5dGUoZGF0YSkpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbChlcnIpCi0JfQotfQotCi1mdW5jIHByb2Nlc3NUZXN0U3BlY1Byb3RvYnVmKAotCWZpbGVQYXRoIHN0cmluZywgb3duZXJzaGlwTWV0YWRhdGFNYXAgKnN5bmMuTWFwLCBrZXlMb2NrcyAqa2V5VG9Mb2Nrc01hcCwKLQllcnJDaCBjaGFuIGVycm9yLCB3ZyAqc3luYy5XYWl0R3JvdXAsCi0pIHsKLQlkZWZlciB3Zy5Eb25lKCkKLQotCWZpbGVDb250ZW50IDo9IHN0cmluZ3MuVHJpbVJpZ2h0KHJlYWRGaWxlVG9TdHJpbmcoZmlsZVBhdGgpLCAiXG4iKQotCXRlc3REYXRhIDo9IHRlc3Rfc3BlY19wcm90by5UZXN0U3BlY3t9Ci0JZXJyIDo9IHByb3RvLlVubWFyc2hhbChbXWJ5dGUoZmlsZUNvbnRlbnQpLCAmdGVzdERhdGEpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWVyckNoIDwtIGVycgotCQlyZXR1cm4KLQl9Ci0KLQlvd25lcnNoaXBNZXRhZGF0YSA6PSB0ZXN0RGF0YS5HZXRPd25lcnNoaXBNZXRhZGF0YUxpc3QoKQotCWZvciBfLCBtZXRhZGF0YSA6PSByYW5nZSBvd25lcnNoaXBNZXRhZGF0YSB7Ci0JCWtleSA6PSBtZXRhZGF0YS5HZXRUYXJnZXROYW1lKCkKLQkJbG9jayA6PSBrZXlMb2Nrcy5HZXRMb2NrRm9yS2V5KGtleSkKLQkJbG9jay5Mb2NrKCkKLQotCQl2YWx1ZSwgbG9hZGVkIDo9IG93bmVyc2hpcE1ldGFkYXRhTWFwLkxvYWRPclN0b3JlKAotCQkJa2V5LCBbXSp0ZXN0X3NwZWNfcHJvdG8uVGVzdFNwZWNfT3duZXJzaGlwTWV0YWRhdGF7bWV0YWRhdGF9LAotCQkpCi0JCWlmIGxvYWRlZCB7Ci0JCQlleGlzdGluZ01ldGFkYXRhIDo9IHZhbHVlLihbXSp0ZXN0X3NwZWNfcHJvdG8uVGVzdFNwZWNfT3duZXJzaGlwTWV0YWRhdGEpCi0JCQlpc0R1cGxpY2F0ZSA6PSBmYWxzZQotCQkJZm9yIF8sIGV4aXN0aW5nIDo9IHJhbmdlIGV4aXN0aW5nTWV0YWRhdGEgewotCQkJCWlmIG1ldGFkYXRhLkdldFRyZW5keVRlYW1JZCgpICE9IGV4aXN0aW5nLkdldFRyZW5keVRlYW1JZCgpIHsKLQkJCQkJZXJyQ2ggPC0gZm10LkVycm9yZigKLQkJCQkJCSJDb25mbGljdGluZyB0cmVuZHkgdGVhbSBJRHMgZm91bmQgZm9yICVzIGF0OlxuJXMgd2l0aCB0ZWFtSWQiKwotCQkJCQkJCSI6ICVzLFxuJXMgd2l0aCB0ZWFtSWQ6ICVzIiwKLQkJCQkJCWtleSwKLQkJCQkJCW1ldGFkYXRhLkdldFBhdGgoKSwgbWV0YWRhdGEuR2V0VHJlbmR5VGVhbUlkKCksIGV4aXN0aW5nLkdldFBhdGgoKSwKLQkJCQkJCWV4aXN0aW5nLkdldFRyZW5keVRlYW1JZCgpLAotCQkJCQkpCi0KLQkJCQkJbG9jay5VbmxvY2soKQotCQkJCQlyZXR1cm4KLQkJCQl9Ci0JCQkJaWYgbWV0YWRhdGEuR2V0VHJlbmR5VGVhbUlkKCkgPT0gZXhpc3RpbmcuR2V0VHJlbmR5VGVhbUlkKCkgJiYgbWV0YWRhdGEuR2V0UGF0aCgpID09IGV4aXN0aW5nLkdldFBhdGgoKSB7Ci0JCQkJCWlzRHVwbGljYXRlID0gdHJ1ZQotCQkJCQlicmVhawotCQkJCX0KLQkJCX0KLQkJCWlmICFpc0R1cGxpY2F0ZSB7Ci0JCQkJZXhpc3RpbmdNZXRhZGF0YSA9IGFwcGVuZChleGlzdGluZ01ldGFkYXRhLCBtZXRhZGF0YSkKLQkJCQlvd25lcnNoaXBNZXRhZGF0YU1hcC5TdG9yZShrZXksIGV4aXN0aW5nTWV0YWRhdGEpCi0JCQl9Ci0JCX0KLQotCQlsb2NrLlVubG9jaygpCi0JfQotfQotCi0vLyBwcm9jZXNzQ29kZU1ldGFkYXRhUHJvdG9idWYgcHJvY2Vzc2VzIENvZGVNZXRhZGF0YSBwcm90b2J1ZiBmaWxlcwotZnVuYyBwcm9jZXNzQ29kZU1ldGFkYXRhUHJvdG9idWYoCi0JZmlsZVBhdGggc3RyaW5nLCBvd25lcnNoaXBNZXRhZGF0YU1hcCAqc3luYy5NYXAsIHNvdXJjZUZpbGVNZXRhZGF0YU1hcCAqc3luYy5NYXAsIGtleUxvY2tzICprZXlUb0xvY2tzTWFwLAotCWVyckNoIGNoYW4gZXJyb3IsIHdnICpzeW5jLldhaXRHcm91cCwKLSkgewotCWRlZmVyIHdnLkRvbmUoKQotCi0JZmlsZUNvbnRlbnQgOj0gc3RyaW5ncy5UcmltUmlnaHQocmVhZEZpbGVUb1N0cmluZyhmaWxlUGF0aCksICJcbiIpCi0JaW50ZXJuYWxDb2RlRGF0YSA6PSBjb2RlX21ldGFkYXRhX2ludGVybmFsX3Byb3RvLkNvZGVNZXRhZGF0YUludGVybmFse30KLQllcnIgOj0gcHJvdG8uVW5tYXJzaGFsKFtdYnl0ZShmaWxlQ29udGVudCksICZpbnRlcm5hbENvZGVEYXRhKQotCWlmIGVyciAhPSBuaWwgewotCQllcnJDaCA8LSBlcnIKLQkJcmV0dXJuCi0JfQotCi0JLy8gUHJvY2VzcyBlYWNoIFRhcmdldE93bmVyc2hpcCBlbnRyeQotCWZvciBfLCBpbnRlcm5hbE1ldGFkYXRhIDo9IHJhbmdlIGludGVybmFsQ29kZURhdGEuR2V0VGFyZ2V0T3duZXJzaGlwTGlzdCgpIHsKLQkJa2V5IDo9IGludGVybmFsTWV0YWRhdGEuR2V0VGFyZ2V0TmFtZSgpCi0JCWxvY2sgOj0ga2V5TG9ja3MuR2V0TG9ja0ZvcktleShrZXkpCi0JCWxvY2suTG9jaygpCi0KLQkJZm9yIF8sIHNyY0ZpbGUgOj0gcmFuZ2UgaW50ZXJuYWxNZXRhZGF0YS5HZXRTb3VyY2VGaWxlcygpIHsKLQkJCXNyY0ZpbGVLZXkgOj0gc3JjRmlsZQotCQkJc3JjRmlsZUxvY2sgOj0ga2V5TG9ja3MuR2V0TG9ja0ZvcktleShzcmNGaWxlS2V5KQotCQkJc3JjRmlsZUxvY2suTG9jaygpCi0JCQlhdHRyaWJ1dGVzIDo9IHNvdXJjZUZpbGVBdHRyaWJ1dGVzewotCQkJCVRlYW1JRDogICAgICAgICBpbnRlcm5hbE1ldGFkYXRhLkdldFRyZW5keVRlYW1JZCgpLAotCQkJCU11bHRpT3duZXJzaGlwOiBpbnRlcm5hbE1ldGFkYXRhLkdldE11bHRpT3duZXJzaGlwKCksCi0JCQkJUGF0aDogICAgICAgICAgIGludGVybmFsTWV0YWRhdGEuR2V0UGF0aCgpLAotCQkJfQotCi0JCQlleGlzdGluZ0F0dHJpYnV0ZXMsIGV4aXN0cyA6PSBzb3VyY2VGaWxlTWV0YWRhdGFNYXAuTG9hZChzcmNGaWxlS2V5KQotCQkJaWYgZXhpc3RzIHsKLQkJCQlleGlzdGluZyA6PSBleGlzdGluZ0F0dHJpYnV0ZXMuKHNvdXJjZUZpbGVBdHRyaWJ1dGVzKQotCQkJCWlmIGF0dHJpYnV0ZXMuVGVhbUlEICE9IGV4aXN0aW5nLlRlYW1JRCAmJiAoIWF0dHJpYnV0ZXMuTXVsdGlPd25lcnNoaXAgfHwgIWV4aXN0aW5nLk11bHRpT3duZXJzaGlwKSB7Ci0JCQkJCWVyckNoIDwtIGZtdC5FcnJvcmYoCi0JCQkJCQkiQ29uZmxpY3QgZm91bmQgZm9yIHNvdXJjZSBmaWxlICVzIGNvdmVyZWQgYXQgJXMgd2l0aCB0ZWFtIElEOiAlcy4gRXhpc3RpbmcgdGVhbSBJRDogJXMgYW5kIHBhdGg6ICVzLiIrCi0JCQkJCQkJIiBJZiBtdWx0aS1vd25lcnNoaXAgaXMgcmVxdWlyZWQsIG11bHRpT3duZXJzaGlwIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBpbiBhbGwgdGVzdF9zcGVjIG1vZHVsZXMgdXNpbmcgdGhpcyB0YXJnZXQuICIrCi0JCQkJCQkJIk11bHRpcGxlLW93bmVyc2hpcCBpbiBnZW5lcmFsIGlzIGRpc2NvdXJhZ2VkIHRob3VnaCBhcyBpdCBtYWtlIGluZnJhc3RydWN0dXJlIGFyb3VuZCBhbmRyb2lkIHJlbHlpbmcgb24gdGhpcyBpbmZvcm1hdGlvbiBwaWNrIHVwIGEgcmFuZG9tIHZhbHVlIHdoZW4gaXQgbmVlZHMgb25seSBvbmUuIiwKLQkJCQkJCXNyY0ZpbGUsIGludGVybmFsTWV0YWRhdGEuR2V0UGF0aCgpLCBhdHRyaWJ1dGVzLlRlYW1JRCwgZXhpc3RpbmcuVGVhbUlELCBleGlzdGluZy5QYXRoLAotCQkJCQkpCi0JCQkJCXNyY0ZpbGVMb2NrLlVubG9jaygpCi0JCQkJCWxvY2suVW5sb2NrKCkKLQkJCQkJcmV0dXJuCi0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvLyBTdG9yZSB0aGUgbWV0YWRhdGEgaWYgbm8gY29uZmxpY3QKLQkJCQlzb3VyY2VGaWxlTWV0YWRhdGFNYXAuU3RvcmUoc3JjRmlsZUtleSwgYXR0cmlidXRlcykKLQkJCX0KLQkJCXNyY0ZpbGVMb2NrLlVubG9jaygpCi0JCX0KLQotCQl2YWx1ZSwgbG9hZGVkIDo9IG93bmVyc2hpcE1ldGFkYXRhTWFwLkxvYWRPclN0b3JlKAotCQkJa2V5LCBbXSpjb2RlX21ldGFkYXRhX2ludGVybmFsX3Byb3RvLkNvZGVNZXRhZGF0YUludGVybmFsX1RhcmdldE93bmVyc2hpcHtpbnRlcm5hbE1ldGFkYXRhfSwKLQkJKQotCQlpZiBsb2FkZWQgewotCQkJZXhpc3RpbmdNZXRhZGF0YSA6PSB2YWx1ZS4oW10qY29kZV9tZXRhZGF0YV9pbnRlcm5hbF9wcm90by5Db2RlTWV0YWRhdGFJbnRlcm5hbF9UYXJnZXRPd25lcnNoaXApCi0JCQlpc0R1cGxpY2F0ZSA6PSBmYWxzZQotCQkJZm9yIF8sIGV4aXN0aW5nIDo9IHJhbmdlIGV4aXN0aW5nTWV0YWRhdGEgewotCQkJCWlmIGludGVybmFsTWV0YWRhdGEuR2V0VHJlbmR5VGVhbUlkKCkgPT0gZXhpc3RpbmcuR2V0VHJlbmR5VGVhbUlkKCkgJiYgaW50ZXJuYWxNZXRhZGF0YS5HZXRQYXRoKCkgPT0gZXhpc3RpbmcuR2V0UGF0aCgpIHsKLQkJCQkJaXNEdXBsaWNhdGUgPSB0cnVlCi0JCQkJCWJyZWFrCi0JCQkJfQotCQkJfQotCQkJaWYgIWlzRHVwbGljYXRlIHsKLQkJCQlleGlzdGluZ01ldGFkYXRhID0gYXBwZW5kKGV4aXN0aW5nTWV0YWRhdGEsIGludGVybmFsTWV0YWRhdGEpCi0JCQkJb3duZXJzaGlwTWV0YWRhdGFNYXAuU3RvcmUoa2V5LCBleGlzdGluZ01ldGFkYXRhKQotCQkJfQotCQl9Ci0KLQkJbG9jay5VbmxvY2soKQotCX0KLX0KLQotZnVuYyBtYWluKCkgewotCWlucHV0RmlsZSA6PSBmbGFnLlN0cmluZygiaW5wdXRGaWxlIiwgIiIsICJJbnB1dCBmaWxlIHBhdGgiKQotCW91dHB1dEZpbGUgOj0gZmxhZy5TdHJpbmcoIm91dHB1dEZpbGUiLCAiIiwgIk91dHB1dCBmaWxlIHBhdGgiKQotCXJ1bGUgOj0gZmxhZy5TdHJpbmcoCi0JCSJydWxlIiwgIiIsICJNZXRhZGF0YSBydWxlIChIaW50OiB0ZXN0X3NwZWMgb3IgY29kZV9tZXRhZGF0YSkiLAotCSkKLQlmbGFnLlBhcnNlKCkKLQotCWlmICppbnB1dEZpbGUgPT0gIiIgfHwgKm91dHB1dEZpbGUgPT0gIiIgfHwgKnJ1bGUgPT0gIiIgewotCQlmbXQuUHJpbnRsbigiVXNhZ2U6IG1ldGFkYXRhIC1ydWxlIDxydWxlPiAtaW5wdXRGaWxlIDxpbnB1dCBmaWxlIHBhdGg+IC1vdXRwdXRGaWxlIDxvdXRwdXQgZmlsZSBwYXRoPiIpCi0JCW9zLkV4aXQoMSkKLQl9Ci0KLQlpbnB1dEZpbGVEYXRhIDo9IHN0cmluZ3MuVHJpbVJpZ2h0KHJlYWRGaWxlVG9TdHJpbmcoKmlucHV0RmlsZSksICJcbiIpCi0JZmlsZVBhdGhzIDo9IHN0cmluZ3MuU3BsaXQoaW5wdXRGaWxlRGF0YSwgIiAiKQotCWlmIGxlbihmaWxlUGF0aHMpID09IDEgJiYgZmlsZVBhdGhzWzBdID09ICIiIHsKLQkJd3JpdGVFbXB0eU91dHB1dFByb3RvKCpvdXRwdXRGaWxlLCAqcnVsZSkKLQkJcmV0dXJuCi0JfQotCW93bmVyc2hpcE1ldGFkYXRhTWFwIDo9ICZzeW5jLk1hcHt9Ci0Ja2V5TG9ja3MgOj0gJmtleVRvTG9ja3NNYXB7fQotCWVyckNoIDo9IG1ha2UoY2hhbiBlcnJvciwgbGVuKGZpbGVQYXRocykpCi0JdmFyIHdnIHN5bmMuV2FpdEdyb3VwCi0KLQlzd2l0Y2ggKnJ1bGUgewotCWNhc2UgInRlc3Rfc3BlYyI6Ci0JCWZvciBfLCBmaWxlUGF0aCA6PSByYW5nZSBmaWxlUGF0aHMgewotCQkJd2cuQWRkKDEpCi0JCQlnbyBwcm9jZXNzVGVzdFNwZWNQcm90b2J1ZigKLQkJCQlmaWxlUGF0aCwgb3duZXJzaGlwTWV0YWRhdGFNYXAsIGtleUxvY2tzLCBlcnJDaCwgJndnLAotCQkJKQotCQl9Ci0KLQkJd2cuV2FpdCgpCi0JCWNsb3NlKGVyckNoKQotCi0JCWZvciBlcnIgOj0gcmFuZ2UgZXJyQ2ggewotCQkJbG9nLkZhdGFsKGVycikKLQkJfQotCi0JCWFsbEtleXMgOj0gZ2V0U29ydGVkS2V5cyhvd25lcnNoaXBNZXRhZGF0YU1hcCkKLQkJdmFyIGFsbE1ldGFkYXRhIFtdKnRlc3Rfc3BlY19wcm90by5UZXN0U3BlY19Pd25lcnNoaXBNZXRhZGF0YQotCi0JCWZvciBfLCBrZXkgOj0gcmFuZ2UgYWxsS2V5cyB7Ci0JCQl2YWx1ZSwgXyA6PSBvd25lcnNoaXBNZXRhZGF0YU1hcC5Mb2FkKGtleSkKLQkJCW1ldGFkYXRhTGlzdCA6PSB2YWx1ZS4oW10qdGVzdF9zcGVjX3Byb3RvLlRlc3RTcGVjX093bmVyc2hpcE1ldGFkYXRhKQotCQkJYWxsTWV0YWRhdGEgPSBhcHBlbmQoYWxsTWV0YWRhdGEsIG1ldGFkYXRhTGlzdC4uLikKLQkJfQotCi0JCXRlc3RTcGVjIDo9ICZ0ZXN0X3NwZWNfcHJvdG8uVGVzdFNwZWN7Ci0JCQlPd25lcnNoaXBNZXRhZGF0YUxpc3Q6IGFsbE1ldGFkYXRhLAotCQl9Ci0JCXdyaXRlUHJvdG9Ub0ZpbGUoKm91dHB1dEZpbGUsIHRlc3RTcGVjKQotCQlicmVhawotCWNhc2UgImNvZGVfbWV0YWRhdGEiOgotCQlzb3VyY2VGaWxlTWV0YWRhdGFNYXAgOj0gJnN5bmMuTWFwe30KLQkJZm9yIF8sIGZpbGVQYXRoIDo9IHJhbmdlIGZpbGVQYXRocyB7Ci0JCQl3Zy5BZGQoMSkKLQkJCWdvIHByb2Nlc3NDb2RlTWV0YWRhdGFQcm90b2J1ZigKLQkJCQlmaWxlUGF0aCwgb3duZXJzaGlwTWV0YWRhdGFNYXAsIHNvdXJjZUZpbGVNZXRhZGF0YU1hcCwga2V5TG9ja3MsIGVyckNoLCAmd2csCi0JCQkpCi0JCX0KLQotCQl3Zy5XYWl0KCkKLQkJY2xvc2UoZXJyQ2gpCi0KLQkJZm9yIGVyciA6PSByYW5nZSBlcnJDaCB7Ci0JCQlsb2cuRmF0YWwoZXJyKQotCQl9Ci0KLQkJc29ydGVkS2V5cyA6PSBnZXRTb3J0ZWRLZXlzKG93bmVyc2hpcE1ldGFkYXRhTWFwKQotCQlhbGxNZXRhZGF0YSA6PSBtYWtlKFtdKmNvZGVfbWV0YWRhdGFfcHJvdG8uQ29kZU1ldGFkYXRhX1RhcmdldE93bmVyc2hpcCwgMCkKLQkJZm9yIF8sIGtleSA6PSByYW5nZSBzb3J0ZWRLZXlzIHsKLQkJCXZhbHVlLCBfIDo9IG93bmVyc2hpcE1ldGFkYXRhTWFwLkxvYWQoa2V5KQotCQkJbWV0YWRhdGEgOj0gdmFsdWUuKFtdKmNvZGVfbWV0YWRhdGFfaW50ZXJuYWxfcHJvdG8uQ29kZU1ldGFkYXRhSW50ZXJuYWxfVGFyZ2V0T3duZXJzaGlwKQotCQkJZm9yIF8sIG0gOj0gcmFuZ2UgbWV0YWRhdGEgewotCQkJCXRhcmdldE5hbWUgOj0gbS5HZXRUYXJnZXROYW1lKCkKLQkJCQlwYXRoIDo9IG0uR2V0UGF0aCgpCi0JCQkJdHJlbmR5VGVhbUlkIDo9IG0uR2V0VHJlbmR5VGVhbUlkKCkKLQotCQkJCWFsbE1ldGFkYXRhID0gYXBwZW5kKGFsbE1ldGFkYXRhLCAmY29kZV9tZXRhZGF0YV9wcm90by5Db2RlTWV0YWRhdGFfVGFyZ2V0T3duZXJzaGlwewotCQkJCQlUYXJnZXROYW1lOiAgICZ0YXJnZXROYW1lLAotCQkJCQlQYXRoOiAgICAgICAgICZwYXRoLAotCQkJCQlUcmVuZHlUZWFtSWQ6ICZ0cmVuZHlUZWFtSWQsCi0JCQkJCVNvdXJjZUZpbGVzOiAgbS5HZXRTb3VyY2VGaWxlcygpLAotCQkJCX0pCi0JCQl9Ci0JCX0KLQotCQlmaW5hbE1ldGFkYXRhIDo9ICZjb2RlX21ldGFkYXRhX3Byb3RvLkNvZGVNZXRhZGF0YXsKLQkJCVRhcmdldE93bmVyc2hpcExpc3Q6IGFsbE1ldGFkYXRhLAotCQl9Ci0JCXdyaXRlUHJvdG9Ub0ZpbGUoKm91dHB1dEZpbGUsIGZpbmFsTWV0YWRhdGEpCi0JCWJyZWFrCi0JZGVmYXVsdDoKLQkJbG9nLkZhdGFsZigiTm8gc3BlY2lmaWMgcHJvY2Vzc2luZyBpbXBsZW1lbnRlZCBmb3IgcnVsZSAnJXMnLlxuIiwgKnJ1bGUpCi0JfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvZ28ubW9kIGIvdG9vbHMvbWV0YWRhdGEvZ28ubW9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQwNGIxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL2dvLm1vZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotbW9kdWxlIGFuZHJvaWQvc29vbmcvdG9vbHMvbWV0YWRhdGEKLQotcmVxdWlyZSBnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1ZiB2MC4wLjAKLQotcmVwbGFjZSBnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1ZiB2MC4wLjAgPT4gLi4vLi4vLi4vZXh0ZXJuYWwvZ29sYW5nLXByb3RvYnVmCi0KLWdvIDEuMTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS9nby53b3JrIGIvdG9vbHMvbWV0YWRhdGEvZ28ud29yawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJjZGY4ZS4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS9nby53b3JrCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotZ28gMS4xOAotCi11c2UgKAotCS4KLQkuLi8uLi8uLi8uLi9leHRlcm5hbC9nb2xhbmctcHJvdG9idWYKLQkuLi8uLi8uLi9zb29uZy90ZXN0aW5nL3Rlc3Rfc3BlY19wcm90bwotCS4uLy4uLy4uL3Nvb25nL3Rlc3RpbmcvY29kZV9tZXRhZGF0YV9wcm90bwotCS4uLy4uLy4uL3Nvb25nL3Rlc3RpbmcvY29kZV9tZXRhZGF0YV9wcm90b19pbnRlcm5hbAotKQotCi1yZXBsYWNlIGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmIHYwLjAuMCA9PiAuLi8uLi8uLi8uLi9leHRlcm5hbC9nb2xhbmctcHJvdG9idWYKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2VtcHR5SW5wdXRGaWxlLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2VtcHR5SW5wdXRGaWxlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxMzc4OS4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9lbXB0eUlucHV0RmlsZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0KZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2V4cGVjdGVkQ29kZU1ldGFkYXRhT3V0cHV0LnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2V4cGVjdGVkQ29kZU1ldGFkYXRhT3V0cHV0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU1Y2Y0MC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9leHBlY3RlZENvZGVNZXRhZGF0YU91dHB1dC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotIAotA2JhchIKLUFuZHJvaWQuYnAaBTEyMzQ2IgZiLmphdmEKLSAKLQNmb28SCi1BbmRyb2lkLmJwGgUxMjM0NSIGYS5qYXZhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZXhwZWN0ZWRPdXRwdXRGaWxlLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2V4cGVjdGVkT3V0cHV0RmlsZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZDM4MmYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZXhwZWN0ZWRPdXRwdXRGaWxlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1vbmUSCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BbmRyb2lkLmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcXdlcnR5LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1Bc2RmZ2hqLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BenhjdmJuLmJwGgUxMjM0NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGUxLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGUxLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiZWVkMC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlMS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0KLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtb25lEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXNkZmdoai5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXp4Y3Zibi5icBoFMTIzNDUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGUyLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGUyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhNzUzZi4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlMi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0KLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtb25lEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQW5kcm9pZC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtb25lEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXF3ZXJ0eS5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGUzLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGUzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiZWVkMC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlMy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0KLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtb25lEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXNkZmdoai5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXp4Y3Zibi5icBoFMTIzNDUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU0LnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE3NTkwMC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0KLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtb25lEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQW5kcm9pZC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtb25lEgotQW5kcm9pZC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXF3ZXJ0eS5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU1LnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU1LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhkZTA2NC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotIAotA2ZvbxIKLUFuZHJvaWQuYnAaBTEyMzQ1IgZhLmphdmEKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU2LnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU2LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3Y2RjZC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotIAotA2JhchIKLUFuZHJvaWQuYnAaBTEyMzQ2IgZiLmphdmEKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU3LnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU3LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhkZTA2NC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotIAotA2ZvbxIKLUFuZHJvaWQuYnAaBTEyMzQ1IgZhLmphdmEKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU4LnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2ZpbGU4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkzMTY5MC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlOC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotIAotA2ZvbxIKLUFuZHJvaWQuZ3AaBTEyMzQ2IgZhLmphdmEKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZENvZGVNZXRhZGF0YU91dHB1dC50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRDb2RlTWV0YWRhdGFPdXRwdXQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTVjZjQwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZENvZGVNZXRhZGF0YU91dHB1dC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotIAotA2JhchIKLUFuZHJvaWQuYnAaBTEyMzQ2IgZiLmphdmEKLSAKLQNmb28SCi1BbmRyb2lkLmJwGgUxMjM0NSIGYS5qYXZhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkQ29kZU1ldGFkYXRhT3V0cHV0RmlsZS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRDb2RlTWV0YWRhdGFPdXRwdXRGaWxlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU1Y2Y0MC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRDb2RlTWV0YWRhdGFPdXRwdXRGaWxlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotCi0gCi0DYmFyEgotQW5kcm9pZC5icBoFMTIzNDYiBmIuamF2YQotIAotA2ZvbxIKLUFuZHJvaWQuYnAaBTEyMzQ1IgZhLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRFbXB0eU91dHB1dEZpbGUudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkRW1wdHlPdXRwdXRGaWxlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRFbXB0eU91dHB1dEZpbGUudHh0CisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZE91dHB1dEZpbGUudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkT3V0cHV0RmlsZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZDM4MmYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkT3V0cHV0RmlsZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0KLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtb25lEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQW5kcm9pZC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXF3ZXJ0eS5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXNkZmdoai5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXp4Y3Zibi5icBoFMTIzNDUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dENvZGVNZXRhZGF0YS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dENvZGVNZXRhZGF0YS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhODFiN2QuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRDb2RlTWV0YWRhdGEudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZmlsZTUudHh0IGZpbGU2LnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0Q29kZU1ldGFkYXRhTmVnYXRpdmUudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRDb2RlTWV0YWRhdGFOZWdhdGl2ZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NjY4ZTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRDb2RlTWV0YWRhdGFOZWdhdGl2ZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1maWxlNy50eHQgZmlsZTgudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRGaWxlcy50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dEZpbGVzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ0YmM5NC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dEZpbGVzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWZpbGUxLnR4dCBmaWxlMi50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dEZpbGVzTmVnYXRpdmVDYXNlLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0RmlsZXNOZWdhdGl2ZUNhc2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzdhYTNmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0RmlsZXNOZWdhdGl2ZUNhc2UudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZmlsZTMudHh0IGZpbGU0LnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL21ldGFkYXRhX3Rlc3QuZ28gYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9tZXRhZGF0YV90ZXN0LmdvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTRhZGQzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL21ldGFkYXRhX3Rlc3QuZ28KKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotcGFja2FnZSBtYWluCi0KLWltcG9ydCAoCi0JImZtdCIKLQkiaW8vaW91dGlsIgotCSJvcy9leGVjIgotCSJzdHJpbmdzIgotCSJ0ZXN0aW5nIgotKQotCi1mdW5jIFRlc3RNZXRhZGF0YSh0ICp0ZXN0aW5nLlQpIHsKLQljbWQgOj0gZXhlYy5Db21tYW5kKAotCQkibWV0YWRhdGEiLCAiLXJ1bGUiLCAidGVzdF9zcGVjIiwgIi1pbnB1dEZpbGUiLCAiLi9pbnB1dEZpbGVzLnR4dCIsICItb3V0cHV0RmlsZSIsCi0JCSIuL2dlbmVyYXRlZE91dHB1dEZpbGUudHh0IiwKLQkpCi0Jc3RkZXJyLCBlcnIgOj0gY21kLkNvbWJpbmVkT3V0cHV0KCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJdC5GYXRhbGYoIkVycm9yIHJ1bm5pbmcgbWV0YWRhdGEgY29tbWFuZDogJXMuIEVycm9yOiAldiIsIHN0ZGVyciwgZXJyKQotCX0KLQotCS8vIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBleHBlY3RlZCBvdXRwdXQgZmlsZQotCWV4cGVjdGVkT3V0cHV0LCBlcnIgOj0gaW91dGlsLlJlYWRGaWxlKCIuL2V4cGVjdGVkT3V0cHV0RmlsZS50eHQiKQotCWlmIGVyciAhPSBuaWwgewotCQl0LkZhdGFsZigiRXJyb3IgcmVhZGluZyBleHBlY3RlZCBvdXRwdXQgZmlsZTogJXMiLCBlcnIpCi0JfQotCi0JLy8gUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGdlbmVyYXRlZCBvdXRwdXQgZmlsZQotCWdlbmVyYXRlZE91dHB1dCwgZXJyIDo9IGlvdXRpbC5SZWFkRmlsZSgiLi9nZW5lcmF0ZWRPdXRwdXRGaWxlLnR4dCIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXQuRmF0YWxmKCJFcnJvciByZWFkaW5nIGdlbmVyYXRlZCBvdXRwdXQgZmlsZTogJXMiLCBlcnIpCi0JfQotCi0JZm10LlByaW50bG4oKQotCi0JLy8gQ29tcGFyZSB0aGUgY29udGVudHMKLQlpZiBzdHJpbmcoZXhwZWN0ZWRPdXRwdXQpICE9IHN0cmluZyhnZW5lcmF0ZWRPdXRwdXQpIHsKLQkJdC5FcnJvcmYoIkdlbmVyYXRlZCBmaWxlIGNvbnRlbnRzIGRvIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgb3V0cHV0IikKLQl9Ci19Ci0KLWZ1bmMgVGVzdE1ldGFkYXRhTmVnYXRpdmVDYXNlKHQgKnRlc3RpbmcuVCkgewotCWNtZCA6PSBleGVjLkNvbW1hbmQoCi0JCSJtZXRhZGF0YSIsICItcnVsZSIsICJ0ZXN0X3NwZWMiLCAiLWlucHV0RmlsZSIsICIuL2lucHV0RmlsZXNOZWdhdGl2ZUNhc2UudHh0IiwgIi1vdXRwdXRGaWxlIiwKLQkJIi4vZ2VuZXJhdGVkT3V0cHV0RmlsZU5lZ2F0aXZlQ2FzZS50eHQiLAotCSkKLQlzdGRlcnIsIGVyciA6PSBjbWQuQ29tYmluZWRPdXRwdXQoKQotCWlmIGVyciA9PSBuaWwgewotCQl0LkZhdGFsZigKLQkJCSJFeHBlY3RlZCBhbiBlcnJvciwgYnV0IHRoZSBtZXRhZGF0YSBjb21tYW5kIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4gT3V0cHV0OiAlcyIsCi0JCQlzdGRlcnIsCi0JCSkKLQl9Ci0KLQlleHBlY3RlZEVycm9yIDo9ICJDb25mbGljdGluZyB0cmVuZHkgdGVhbSBJRHMgZm91bmQgZm9yIGphdmEtdGVzdC1tb2R1bGUiICsKLQkJIi1uYW1lLW9uZSBhdDpcbkFuZHJvaWQuYnAgd2l0aCB0ZWFtSWQ6IDEyMzQ2LCIgKwotCQkiXG5BbmRyb2lkLmJwIHdpdGggdGVhbUlkOiAxMjM0NSIKLQlpZiAhc3RyaW5ncy5Db250YWlucygKLQkJc3RyaW5ncy5UcmltU3BhY2Uoc3RyaW5nKHN0ZGVycikpLCBzdHJpbmdzLlRyaW1TcGFjZShleHBlY3RlZEVycm9yKSwKLQkpIHsKLQkJdC5FcnJvcmYoCi0JCQkiVW5leHBlY3RlZCBlcnJvciBtZXNzYWdlLiBFeHBlY3RlZCB0byBjb250YWluOiAlcywgR290OiAlcyIsCi0JCQlleHBlY3RlZEVycm9yLCBzdGRlcnIsCi0JCSkKLQl9Ci19Ci0KLWZ1bmMgVGVzdEVtcHR5SW5wdXRGaWxlKHQgKnRlc3RpbmcuVCkgewotCWNtZCA6PSBleGVjLkNvbW1hbmQoCi0JCSJtZXRhZGF0YSIsICItcnVsZSIsICJ0ZXN0X3NwZWMiLCAiLWlucHV0RmlsZSIsICIuL2VtcHR5SW5wdXRGaWxlLnR4dCIsICItb3V0cHV0RmlsZSIsCi0JCSIuL2dlbmVyYXRlZEVtcHR5T3V0cHV0RmlsZS50eHQiLAotCSkKLQlzdGRlcnIsIGVyciA6PSBjbWQuQ29tYmluZWRPdXRwdXQoKQotCWlmIGVyciAhPSBuaWwgewotCQl0LkZhdGFsZigiRXJyb3IgcnVubmluZyBtZXRhZGF0YSBjb21tYW5kOiAlcy4gRXJyb3I6ICV2Iiwgc3RkZXJyLCBlcnIpCi0JfQotCi0JLy8gUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGdlbmVyYXRlZCBvdXRwdXQgZmlsZQotCWdlbmVyYXRlZE91dHB1dCwgZXJyIDo9IGlvdXRpbC5SZWFkRmlsZSgiLi9nZW5lcmF0ZWRFbXB0eU91dHB1dEZpbGUudHh0IikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJdC5GYXRhbGYoIkVycm9yIHJlYWRpbmcgZ2VuZXJhdGVkIG91dHB1dCBmaWxlOiAlcyIsIGVycikKLQl9Ci0KLQlmbXQuUHJpbnRsbigpCi0KLQkvLyBDb21wYXJlIHRoZSBjb250ZW50cwotCWlmIHN0cmluZyhnZW5lcmF0ZWRPdXRwdXQpICE9ICJcbiIgewotCQl0LkVycm9yZigiR2VuZXJhdGVkIGZpbGUgY29udGVudHMgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBvdXRwdXQiKQotCX0KLX0KLQotZnVuYyBUZXN0Q29kZU1ldGFkYXRhKHQgKnRlc3RpbmcuVCkgewotCWNtZCA6PSBleGVjLkNvbW1hbmQoCi0JCSJtZXRhZGF0YSIsICItcnVsZSIsICJjb2RlX21ldGFkYXRhIiwgIi1pbnB1dEZpbGUiLCAiLi9pbnB1dENvZGVNZXRhZGF0YS50eHQiLCAiLW91dHB1dEZpbGUiLAotCQkiLi9nZW5lcmF0ZWRDb2RlTWV0YWRhdGFPdXRwdXRGaWxlLnR4dCIsCi0JKQotCXN0ZGVyciwgZXJyIDo9IGNtZC5Db21iaW5lZE91dHB1dCgpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXQuRmF0YWxmKCJFcnJvciBydW5uaW5nIG1ldGFkYXRhIGNvbW1hbmQ6ICVzLiBFcnJvcjogJXYiLCBzdGRlcnIsIGVycikKLQl9Ci0KLQkvLyBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZpbGUKLQlleHBlY3RlZE91dHB1dCwgZXJyIDo9IGlvdXRpbC5SZWFkRmlsZSgiLi9leHBlY3RlZENvZGVNZXRhZGF0YU91dHB1dC50eHQiKQotCWlmIGVyciAhPSBuaWwgewotCQl0LkZhdGFsZigiRXJyb3IgcmVhZGluZyBleHBlY3RlZCBvdXRwdXQgZmlsZTogJXMiLCBlcnIpCi0JfQotCi0JLy8gUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGdlbmVyYXRlZCBvdXRwdXQgZmlsZQotCWdlbmVyYXRlZE91dHB1dCwgZXJyIDo9IGlvdXRpbC5SZWFkRmlsZSgiLi9nZW5lcmF0ZWRDb2RlTWV0YWRhdGFPdXRwdXRGaWxlLnR4dCIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXQuRmF0YWxmKCJFcnJvciByZWFkaW5nIGdlbmVyYXRlZCBvdXRwdXQgZmlsZTogJXMiLCBlcnIpCi0JfQotCi0JZm10LlByaW50bG4oKQotCi0JLy8gQ29tcGFyZSB0aGUgY29udGVudHMKLQlpZiBzdHJpbmcoZXhwZWN0ZWRPdXRwdXQpICE9IHN0cmluZyhnZW5lcmF0ZWRPdXRwdXQpIHsKLQkJdC5FcnJvcmYoIkdlbmVyYXRlZCBmaWxlIGNvbnRlbnRzIGRvIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgb3V0cHV0IikKLQl9Ci19CmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9vdXRwdXRGaWxlLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL291dHB1dEZpbGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQzODJmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL291dHB1dEZpbGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotCi0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLW9uZRIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFuZHJvaWQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFxd2VydHkuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFzZGZnaGouYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUF6eGN2Ym4uYnAaBTEyMzQ1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL0FuZHJvaWQuYnAgYi90b29scy9yZWxlYXNldG9vbHMvQW5kcm9pZC5icAppbmRleCA4YzcxMDQ0Li5lMzcxYjIzIDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvQW5kcm9pZC5icAorKysgYi90b29scy9yZWxlYXNldG9vbHMvQW5kcm9pZC5icApAQCAtNjM3LDYgKzYzNyw4IEBACiAgICAgXSwKICAgICBkYXRhOiBbCiAgICAgICAgICJ0ZXN0ZGF0YS8qKi8qIiwKKyAgICBdLAorICAgIGRldmljZV9jb21tb25fZGF0YTogWwogICAgICAgICAiOmNvbS5hbmRyb2lkLmFwZXguY29tcHJlc3NlZC52MSIsCiAgICAgICAgICI6Y29tLmFuZHJvaWQuYXBleC52ZW5kb3IuZm9vLndpdGhfdmludGYiLAogICAgIF0sCg==