ZGlmZiAtLWdpdCBhL0NoYW5nZXMubWQgYi9DaGFuZ2VzLm1kCmluZGV4IDA1ZjU0YjguLjM3YmJhZDAgMTAwNjQ0Ci0tLSBhL0NoYW5nZXMubWQKKysrIGIvQ2hhbmdlcy5tZApAQCAtMSw2ICsxLDYgQEAKICMgQnVpbGQgU3lzdGVtIENoYW5nZXMgZm9yIEFuZHJvaWQubWsgV3JpdGVycwogCi0jIyBEZXByZWNhdGluZyBlbnZzZXR1cC5zaCB2YXJpYWJsZXMgaW4gTWFrZWZpbGVzCisjIyBEZXByZWNhdGluZyAvIG9ic29sZXRpbmcgZW52c2V0dXAuc2ggdmFyaWFibGVzIGluIE1ha2VmaWxlcwogCiBJdCBpcyBub3QgcmVxdWlyZWQgdG8gc291cmNlIGVudnNldHVwLnNoIGJlZm9yZSBydW5uaW5nIGEgYnVpbGQuIE1hbnkgc2NyaXB0cywKIGluY2x1ZGluZyBhIG1ham9yaXR5IG9mIG91ciBhdXRvbWF0ZWQgYnVpbGQgc3lzdGVtcywgZG8gbm90IGRvIHNvLiBNYWtlIHdpbGwKQEAgLTE0LDggKzE0LDkgQEAKIAogVG8gZml4IHRoaXMsIHdlJ3JlIG1hcmtpbmcgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzZXQgaW4gZW52c2V0dXAuc2ggYXMKIGRlcHJlY2F0ZWQgaW4gdGhlIG1ha2VmaWxlcy4gVGhpcyB3aWxsIHRyaWdnZXIgYSB3YXJuaW5nIGV2ZXJ5IHRpbWUgb25lIGlzIHJlYWQKLShvciB3cml0dGVuKSBpbnNpZGUgS2F0aS4gT25jZSBhbGwgdGhlIHdhcm5pbmdzIGhhdmUgYmVlbiByZW1vdmVkLCB3ZSdsbCBzd2l0Y2gKLXRoaXMgdG8gb2Jzb2xldGUsIGFuZCBhbnkgcmVmZXJlbmNlcyB3aWxsIGJlY29tZSBlcnJvcnMuCisob3Igd3JpdHRlbikgaW5zaWRlIEthdGkuIE9uY2UgYWxsIHRoZSB3YXJuaW5ncyBoYXZlIGJlZW4gcmVtb3ZlZCBmb3IgYQorcGFydGljdWxhciB2YXJpYWJsZSwgd2UnbGwgc3dpdGNoIGl0IHRvIG9ic29sZXRlLCBhbmQgYW55IHJlZmVyZW5jZXMgd2lsbCBiZWNvbWUKK2Vycm9ycy4KIAogIyMjIGVudnNldHVwLnNoIHZhcmlhYmxlcyB3aXRoIG1ha2UgZXF1aXZhbGVudHMKIApAQCAtODUsNiArODYsMTYgQEAKICQoVEFSR0VUKTogbXlzY3JpcHQucHkgJChzb3J0ICQoc2hlbGwgZmluZCBteS9weXRob24vbGliIC1uYW1lICcqLnB5JykpCiAJUFlUSE9OUEFUSD1teS9weXRob24vbGliOiQkUFlUSE9OUEFUSCBteXNjcmlwdC5weSAtbyAkQAogYGBgCisjIyMgU3RvcCB1c2luZyBQUk9EVUNUX0NPTVBBVElCSUxJVFlfTUFUUklYX0xFVkVMX09WRVJSSURFIGRpcmVjdGx5IHsjUFJPRFVDVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTF9PVkVSUklERX0KKworU3BlY2lmeSBGcmFtZXdvcmsgQ29tcGF0aWJpbGl0eSBNYXRyaXggVmVyc2lvbiBpbiBkZXZpY2UgbWFuaWZlc3QgYnkgYWRkaW5nIGEgYHRhcmdldC1sZXZlbGAKK2F0dHJpYnV0ZSB0byB0aGUgcm9vdCBlbGVtZW50IGA8bWFuaWZlc3Q+YC4gSWYgYFBST0RVQ1RfQ09NUEFUSUJJTElUWV9NQVRSSVhfTEVWRUxfT1ZFUlJJREVgCitpcyAyNiBvciAyNywgeW91IGNhbiBhZGQgYCJ0YXJnZXQtbGV2ZWwiPSIxImAgdG8geW91ciBkZXZpY2UgbWFuaWZlc3QgaW5zdGVhZC4KKworIyMjIFN0b3AgdXNpbmcgVVNFX0NMQU5HX1BMQVRGT1JNX0JVSUxEIHsjVVNFX0NMQU5HX1BMQVRGT1JNX0JVSUxEfQorCitDbGFuZyBpcyB0aGUgZGVmYXVsdCBhbmQgb25seSBzdXBwb3J0ZWQgQW5kcm9pZCBjb21waWxlciwgc28gdGhlcmUgaXMgbm8gcmVhc29uCitmb3IgdGhpcyBvcHRpb24gdG8gZXhpc3QuCiAKICMjIyBPdGhlciBlbnZzZXR1cC5zaCB2YXJpYWJsZXMgIHsjb3RoZXJfZW52c2V0dXBfdmFyaWFibGVzfQogCmRpZmYgLS1naXQgYS9DbGVhblNwZWMubWsgYi9DbGVhblNwZWMubWsKaW5kZXggM2JhMWY0NS4uNWFiNjRiMyAxMDA2NDQKLS0tIGEvQ2xlYW5TcGVjLm1rCisrKyBiL0NsZWFuU3BlYy5tawpAQCAtNDQ0LDYgKzQ0NCwyNSBAQAogCiAkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKFBST0RVQ1RfT1VUKS9vYmovQVBQUy8qL2ZsYXQtcmVzKQogCisjIFJlbW92ZSBvbGQgVk5ESyBkaXJlY3RvcmllcyB3aXRob3V0IHZlcnNpb24KKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL3N5c3RlbS9saWIvdm5kaykKKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL3N5c3RlbS9saWIvdm5kay1zcCkKKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL3N5c3RlbS9saWI2NC92bmRrKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvc3lzdGVtL2xpYjY0L3ZuZGstc3ApCisKKyMgUmVtb3ZlIG9sZCBkZXggb3V0cHV0IGRpcmVjdG9yaWVzCiskKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKFRBUkdFVF9PVVRfQ09NTU9OX0lOVEVSTUVESUFURVMpLyovKl9pbnRlcm1lZGlhdGVzL3dpdGgtbG9jYWwvKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS8qLypfaW50ZXJtZWRpYXRlcy9uby1sb2NhbC8pCiskKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKEhPU1RfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS8qLypfaW50ZXJtZWRpYXRlcy93aXRoLWxvY2FsLykKKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoSE9TVF9PVVRfQ09NTU9OX0lOVEVSTUVESUFURVMpLyovKl9pbnRlcm1lZGlhdGVzL25vLWxvY2FsLykKKworIyBSZW1vdmUgbGVnYWN5IFZJTlRGIG1ldGFkYXRhIGZpbGVzCiskKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKFBST0RVQ1RfT1VUKS9zeXN0ZW0vbWFuaWZlc3QueG1sKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvc3lzdGVtL3ZlbmRvci9tYW5pZmVzdC54bWwpCiskKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKFBST0RVQ1RfT1VUKS92ZW5kb3IvbWFuaWZlc3QueG1sKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvc3lzdGVtL3ZlbmRvci9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwpCiskKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKFBST0RVQ1RfT1VUKS92ZW5kb3IvY29tcGF0aWJpbGl0eV9tYXRyaXgueG1sKQorCiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIyBORVdFUiBDTEVBTiBTVEVQUyBNVVNUIEJFIEFUIFRIRSBFTkQgT0YgVEhFIExJU1QKICMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9PV05FUlMgYi9PV05FUlMKaW5kZXggODliNDQ2YS4uN2E1OWY3MCAxMDA2NDQKLS0tIGEvT1dORVJTCisrKyBiL09XTkVSUwpAQCAtMSwyICsxLDMgQEAKIGNjcm9zc0BhbmRyb2lkLmNvbQogZHdpbGxlbXNlbkBnb29nbGUuY29tCituYW56aGFuZ0Bnb29nbGUuY29tCmRpZmYgLS1naXQgYS9jb3JlL01ha2VmaWxlIGIvY29yZS9NYWtlZmlsZQppbmRleCAyODM0ODI1Li45ZjE2NGQ4IDEwMDY0NAotLS0gYS9jb3JlL01ha2VmaWxlCisrKyBiL2NvcmUvTWFrZWZpbGUKQEAgLTQsMTUgKzQsNiBAQAogIyBpbnRlcm1lZGl0ZXMtZGlyLWZvcgogTE9DQUxfUEFUSCA6PSAkKEJVSUxEX1NZU1RFTSkKIAotIyBQaWNrIGEgcmVhc29uYWJsZSBzdHJpbmcgdG8gdXNlIHRvIGlkZW50aWZ5IGZpbGVzLgotaWZuZXEgKCwkKGZpbHRlciBlbmcuJSwkKEJVSUxEX05VTUJFUikpKQotICAjIEJVSUxEX05VTUJFUiBoYXMgYSB0aW1lc3RhbXAgaW4gaXQsIHdoaWNoIG1lYW5zIHRoYXQKLSAgIyBpdCB3aWxsIGNoYW5nZSBldmVyeSB0aW1lLiAgUGljayBhIHN0YWJsZSB2YWx1ZS4KLSAgRklMRV9OQU1FX1RBRyA6PSBlbmcuJChVU0VSKQotZWxzZQotICBGSUxFX05BTUVfVEFHIDo9ICQoQlVJTERfTlVNQkVSKQotZW5kaWYKLQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBEZWZpbmUgcnVsZXMgdG8gY29weSBQUk9EVUNUX0NPUFlfRklMRVMgZGVmaW5lZCBieSB0aGUgcHJvZHVjdC4KICMgUFJPRFVDVF9DT1BZX0ZJTEVTIGNvbnRhaW5zIHdvcmRzIGxpa2UgPHNvdXJjZSBmaWxlPjo8ZGVzdCBmaWxlPls6PG93bmVyPl0uCkBAIC0xMjMsOSArMTE0LDMwIEBACiBlbmRpZgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZJTkFMX1ZFTkRPUl9ERUZBVUxUX1BST1BFUlRJRVMgd2lsbCBiZSBpbnN0YWxsZWQgaW4gdmVuZG9yL2RlZmF1bHQucHJvcCBpZgorIyBwcm9wZXJ0eV9vdmVycmlkZXNfc3BsaXRfZW5hYmxlZCBpcyB0cnVlLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBpbnN0YWxsZWQgaW4KKyMgUk9PVC9kZWZhdWx0LnByb3AuCitpZmRlZiBCT0FSRF9WTkRLX1ZFUlNJT04KKyAgaWZlcSAoJChCT0FSRF9WTkRLX1ZFUlNJT04pLGN1cnJlbnQpCisgICAgRklOQUxfVkVORE9SX0RFRkFVTFRfUFJPUEVSVElFUyA6PSByby52bmRrLnZlcnNpb249JChQTEFURk9STV9WTkRLX1ZFUlNJT04pCisgIGVsc2UKKyAgICBGSU5BTF9WRU5ET1JfREVGQVVMVF9QUk9QRVJUSUVTIDo9IHJvLnZuZGsudmVyc2lvbj0kKEJPQVJEX1ZOREtfVkVSU0lPTikKKyAgZW5kaWYKK2Vsc2UKKyAgRklOQUxfVkVORE9SX0RFRkFVTFRfUFJPUEVSVElFUyA6PQorZW5kaWYKK0ZJTkFMX1ZFTkRPUl9ERUZBVUxUX1BST1BFUlRJRVMgKz0gXAorICAgICQoY2FsbCBjb2xsYXBzZS1wYWlycywgJChQUk9EVUNUX0RFRkFVTFRfUFJPUEVSVFlfT1ZFUlJJREVTKSkKK0ZJTkFMX1ZFTkRPUl9ERUZBVUxUX1BST1BFUlRJRVMgOj0gJChjYWxsIHVuaXEtcGFpcnMtYnktZmlyc3QtY29tcG9uZW50LCBcCisgICAgJChGSU5BTF9WRU5ET1JfREVGQVVMVF9QUk9QRVJUSUVTKSw9KQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIHByb3AuZGVmYXVsdAogaWZkZWYgcHJvcGVydHlfb3ZlcnJpZGVzX3NwbGl0X2VuYWJsZWQKIElOU1RBTExFRF9ERUZBVUxUX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX09VVCkvZXRjL3Byb3AuZGVmYXVsdAorSU5TVEFMTEVEX0RFRkFVTFRfUFJPUF9PTERfVEFSR0VUIDo9ICQoVEFSR0VUX1JPT1RfT1VUKS9kZWZhdWx0LnByb3AKK0FMTF9ERUZBVUxUX0lOU1RBTExFRF9NT0RVTEVTICs9ICQoSU5TVEFMTEVEX0RFRkFVTFRfUFJPUF9PTERfVEFSR0VUKQorJChJTlNUQUxMRURfREVGQVVMVF9QUk9QX09MRF9UQVJHRVQpOiAkKElOU1RBTExFRF9ERUZBVUxUX1BST1BfVEFSR0VUKQogZWxzZQogIyBsZWdhY3kgcGF0aAogSU5TVEFMTEVEX0RFRkFVTFRfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfUk9PVF9PVVQpL2RlZmF1bHQucHJvcApAQCAtMTM2LDcgKzE0OCw3IEBACiAgICAgJChjYWxsIGNvbGxhcHNlLXBhaXJzLCAkKFBST0RVQ1RfU1lTVEVNX0RFRkFVTFRfUFJPUEVSVElFUykpCiBpZm5kZWYgcHJvcGVydHlfb3ZlcnJpZGVzX3NwbGl0X2VuYWJsZWQKICAgRklOQUxfREVGQVVMVF9QUk9QRVJUSUVTICs9IFwKLSAgICAgICQoY2FsbCBjb2xsYXBzZS1wYWlycywgJChQUk9EVUNUX0RFRkFVTFRfUFJPUEVSVFlfT1ZFUlJJREVTKSkKKyAgICAgICQoY2FsbCBjb2xsYXBzZS1wYWlycywgJChGSU5BTF9WRU5ET1JfREVGQVVMVF9QUk9QRVJUSUVTKSkKIGVuZGlmCiBGSU5BTF9ERUZBVUxUX1BST1BFUlRJRVMgOj0gJChjYWxsIHVuaXEtcGFpcnMtYnktZmlyc3QtY29tcG9uZW50LCBcCiAgICAgJChGSU5BTF9ERUZBVUxUX1BST1BFUlRJRVMpLD0pCkBAIC0xNTgsMTAgKzE3MCwxMCBAQAogCSQoaGlkZSkgZWNobyByby5ib290aW1hZ2UuYnVpbGQuZGF0ZT1gJChEQVRFX0ZST01fRklMRSlgPj4kQAogCSQoaGlkZSkgZWNobyByby5ib290aW1hZ2UuYnVpbGQuZGF0ZS51dGM9YCQoREFURV9GUk9NX0ZJTEUpICslc2A+PiRACiAJJChoaWRlKSBlY2hvIHJvLmJvb3RpbWFnZS5idWlsZC5maW5nZXJwcmludD0iJChCVUlMRF9GSU5HRVJQUklOVF9GUk9NX0ZJTEUpIj4+JEAKLQkkKGhpZGUpIGJ1aWxkL3Rvb2xzL3Bvc3RfcHJvY2Vzc19wcm9wcy5weSAkQAorCSQoaGlkZSkgYnVpbGQvbWFrZS90b29scy9wb3N0X3Byb2Nlc3NfcHJvcHMucHkgJEAKIGlmZGVmIHByb3BlcnR5X292ZXJyaWRlc19zcGxpdF9lbmFibGVkCiAJJChoaWRlKSBta2RpciAtcCAkKFRBUkdFVF9ST09UX09VVCkKLQkkKGhpZGUpIGxuIC1zZiBzeXN0ZW0vZXRjL3Byb3AuZGVmYXVsdCAkKFRBUkdFVF9ST09UX09VVCkvZGVmYXVsdC5wcm9wCisJJChoaWRlKSBsbiAtc2Ygc3lzdGVtL2V0Yy9wcm9wLmRlZmF1bHQgJChJTlNUQUxMRURfREVGQVVMVF9QUk9QX09MRF9UQVJHRVQpCiBlbmRpZgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzEsMTYgKzE4Myw2IEBACiBJTlNUQUxMRURfVkVORE9SX0RFRkFVTFRfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfT1VUX1ZFTkRPUikvZGVmYXVsdC5wcm9wCiBBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUyArPSAkKElOU1RBTExFRF9WRU5ET1JfREVGQVVMVF9QUk9QX1RBUkdFVCkKIAotaWZkZWYgQk9BUkRfVk5ES19WRVJTSU9OCi1GSU5BTF9WRU5ET1JfREVGQVVMVF9QUk9QRVJUSUVTIDo9IHJvLnZuZGsudmVyc2lvbj0ke0JPQVJEX1ZOREtfVkVSU0lPTn0KLWVsc2UKLUZJTkFMX1ZFTkRPUl9ERUZBVUxUX1BST1BFUlRJRVMgOj0KLWVuZGlmCi1GSU5BTF9WRU5ET1JfREVGQVVMVF9QUk9QRVJUSUVTICs9IFwKLSAgICAkKGNhbGwgY29sbGFwc2UtcGFpcnMsICQoUFJPRFVDVF9ERUZBVUxUX1BST1BFUlRZX09WRVJSSURFUykpCi1GSU5BTF9WRU5ET1JfREVGQVVMVF9QUk9QRVJUSUVTIDo9ICQoY2FsbCB1bmlxLXBhaXJzLWJ5LWZpcnN0LWNvbXBvbmVudCwgXAotICAgICQoRklOQUxfVkVORE9SX0RFRkFVTFRfUFJPUEVSVElFUyksPSkKLQogJChJTlNUQUxMRURfVkVORE9SX0RFRkFVTFRfUFJPUF9UQVJHRVQpOiAkKElOU1RBTExFRF9ERUZBVUxUX1BST1BfVEFSR0VUKQogCUBlY2hvIFRhcmdldCBidWlsZGluZm86ICRACiAJQG1rZGlyIC1wICQoZGlyICRAKQpAQCAtMTg5LDcgKzE5MSw3IEBACiAJICAgICAgICBlY2hvICIjIiA+PiAkQDsKIAkkKGhpZGUpICQoZm9yZWFjaCBsaW5lLCQoRklOQUxfVkVORE9SX0RFRkFVTFRfUFJPUEVSVElFUyksIFwKIAkJZWNobyAiJChsaW5lKSIgPj4gJEA7KQotCSQoaGlkZSkgYnVpbGQvdG9vbHMvcG9zdF9wcm9jZXNzX3Byb3BzLnB5ICRACisJJChoaWRlKSBidWlsZC9tYWtlL3Rvb2xzL3Bvc3RfcHJvY2Vzc19wcm9wcy5weSAkQAogCiBlbmRpZiAgIyBwcm9wZXJ0eV9vdmVycmlkZXNfc3BsaXRfZW5hYmxlZAogCkBAIC0yMjcsMjggKzIyOSwzNyBAQAogCiAjIFRoZSBzdHJpbmcgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgY29tYmluZWQgYnVpbGQgYW5kIHByb2R1Y3Q7IHVzZWQgYnkgdGhlIE9UQSBzZXJ2ZXIuCiBpZmVxICgsJChzdHJpcCAkKEJVSUxEX0ZJTkdFUlBSSU5UKSkpCi0gIGlmbmVxICgkKGZpbHRlciBlbmcuJSwkKEJVSUxEX05VTUJFUikpLCkKLSAgICBCRl9CVUlMRF9OVU1CRVIgOj0gJChVU0VSKSQoc2hlbGwgJChEQVRFKSArJW0lZCVIJU0pCisgIGlmZXEgKCQoc3RyaXAgJChIQVNfQlVJTERfTlVNQkVSKSksZmFsc2UpCisgICAgQkZfQlVJTERfTlVNQkVSIDo9ICQoVVNFUikkJCgkKERBVEVfRlJPTV9GSUxFKSArJW0lZCVIJU0pCiAgIGVsc2UKLSAgICBCRl9CVUlMRF9OVU1CRVIgOj0gJChCVUlMRF9OVU1CRVIpCisgICAgQkZfQlVJTERfTlVNQkVSIDo9ICQoZmlsZSA8JChCVUlMRF9OVU1CRVJfRklMRSkpCiAgIGVuZGlmCiAgIEJVSUxEX0ZJTkdFUlBSSU5UIDo9ICQoUFJPRFVDVF9CUkFORCkvJChUQVJHRVRfUFJPRFVDVCkvJChUQVJHRVRfREVWSUNFKTokKFBMQVRGT1JNX1ZFUlNJT04pLyQoQlVJTERfSUQpLyQoQkZfQlVJTERfTlVNQkVSKTokKFRBUkdFVF9CVUlMRF9WQVJJQU5UKS8kKEJVSUxEX1ZFUlNJT05fVEFHUykKIGVuZGlmCi1pZm5lcSAoJCh3b3JkcyAkKEJVSUxEX0ZJTkdFUlBSSU5UKSksMSkKLSAgJChlcnJvciBCVUlMRF9GSU5HRVJQUklOVCBjYW5ub3QgY29udGFpbiBzcGFjZXM6ICIkKEJVSUxEX0ZJTkdFUlBSSU5UKSIpCi1lbmRpZgorIyB1bnNldCBpdCBmb3Igc2FmZXR5LgorQkZfQlVJTERfTlVNQkVSIDo9CiAKLSQoc2hlbGwgbWtkaXIgLXAgJChQUk9EVUNUX09VVCkgJiYgZWNobyAkKEJVSUxEX0ZJTkdFUlBSSU5UKSA+ICQoUFJPRFVDVF9PVVQpL2J1aWxkX2ZpbmdlcnByaW50LnR4dCkKLUJVSUxEX0ZJTkdFUlBSSU5UX0ZST01fRklMRSA6PSAkJChjYXQgJChQUk9EVUNUX09VVCkvYnVpbGRfZmluZ2VycHJpbnQudHh0KQorQlVJTERfRklOR0VSUFJJTlRfRklMRSA6PSAkKFBST0RVQ1RfT1VUKS9idWlsZF9maW5nZXJwcmludC50eHQKK2lmbmVxICgsJChzaGVsbCBta2RpciAtcCAkKFBST0RVQ1RfT1VUKSAmJiBlY2hvICQoQlVJTERfRklOR0VSUFJJTlQpID4kKEJVSUxEX0ZJTkdFUlBSSU5UX0ZJTEUpICYmIGdyZXAgIiAiICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkpKQorICAkKGVycm9yIEJVSUxEX0ZJTkdFUlBSSU5UIGNhbm5vdCBjb250YWluIHNwYWNlczogIiQoZmlsZSA8JChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkiKQorZW5kaWYKK0JVSUxEX0ZJTkdFUlBSSU5UX0ZST01fRklMRSA6PSAkJChjYXQgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkKKyMgdW5zZXQgaXQgZm9yIHNhZmV0eS4KK0JVSUxEX0ZJTkdFUlBSSU5UIDo9CiAKICMgVGhlIHN0cmluZyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBzeXN0ZW0gYnVpbGQ7IHVzZWQgYnkgdGhlIE9UQSBzZXJ2ZXIuCiAjIFRoaXMgcHVycG9zZWZ1bGx5IGV4Y2x1ZGVzIGFueSBwcm9kdWN0LXNwZWNpZmljIHZhcmlhYmxlcy4KIGlmZXEgKCwkKHN0cmlwICQoQlVJTERfVEhVTUJQUklOVCkpKQotICBCVUlMRF9USFVNQlBSSU5UIDo9ICQoUExBVEZPUk1fVkVSU0lPTikvJChCVUlMRF9JRCkvJChCVUlMRF9OVU1CRVIpOiQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpLyQoQlVJTERfVkVSU0lPTl9UQUdTKQorICBCVUlMRF9USFVNQlBSSU5UIDo9ICQoUExBVEZPUk1fVkVSU0lPTikvJChCVUlMRF9JRCkvJChCVUlMRF9OVU1CRVJfRlJPTV9GSUxFKTokKFRBUkdFVF9CVUlMRF9WQVJJQU5UKS8kKEJVSUxEX1ZFUlNJT05fVEFHUykKIGVuZGlmCi1pZm5lcSAoJCh3b3JkcyAkKEJVSUxEX1RIVU1CUFJJTlQpKSwxKQotICAkKGVycm9yIEJVSUxEX1RIVU1CUFJJTlQgY2Fubm90IGNvbnRhaW4gc3BhY2VzOiAiJChCVUlMRF9USFVNQlBSSU5UKSIpCisKK0JVSUxEX1RIVU1CUFJJTlRfRklMRSA6PSAkKFBST0RVQ1RfT1VUKS9idWlsZF90aHVtYnByaW50LnR4dAoraWZuZXEgKCwkKHNoZWxsIG1rZGlyIC1wICQoUFJPRFVDVF9PVVQpICYmIGVjaG8gJChCVUlMRF9USFVNQlBSSU5UKSA+JChCVUlMRF9USFVNQlBSSU5UX0ZJTEUpICYmIGdyZXAgIiAiICQoQlVJTERfVEhVTUJQUklOVF9GSUxFKSkpCisgICQoZXJyb3IgQlVJTERfVEhVTUJQUklOVCBjYW5ub3QgY29udGFpbiBzcGFjZXM6ICIkKGZpbGUgPCQoQlVJTERfVEhVTUJQUklOVF9GSUxFKSkiKQogZW5kaWYKK0JVSUxEX1RIVU1CUFJJTlRfRlJPTV9GSUxFIDo9ICQkKGNhdCAkKEJVSUxEX1RIVU1CUFJJTlRfRklMRSkpCisjIHVuc2V0IGl0IGZvciBzYWZldHkuCitCVUlMRF9USFVNQlBSSU5UIDo9CiAKIEtOT1dOX09FTV9USFVNQlBSSU5UX1BST1BFUlRJRVMgOj0gXAogICAgIHJvLnByb2R1Y3QuYnJhbmQgXApAQCAtMjgxLDggKzI5Miw4IEBACiAkKHN0cmlwICQoc3Vic3QgXywtLCAkKGZpcnN0d29yZCAkKDEpKSkpCiBlbmRlZgogCi1CVUlMRElORk9fU0ggOj0gYnVpbGQvdG9vbHMvYnVpbGRpbmZvLnNoCi1WRU5ET1JfQlVJTERJTkZPX1NIIDo9IGJ1aWxkL3Rvb2xzL3ZlbmRvcl9idWlsZGluZm8uc2gKK0JVSUxESU5GT19TSCA6PSBidWlsZC9tYWtlL3Rvb2xzL2J1aWxkaW5mby5zaAorVkVORE9SX0JVSUxESU5GT19TSCA6PSBidWlsZC9tYWtlL3Rvb2xzL3ZlbmRvcl9idWlsZGluZm8uc2gKIAogIyBUQVJHRVRfQlVJTERfRkxBVk9SIGFuZCByby5idWlsZC5mbGF2b3IgYXJlIHVzZWQgb25seSBieSB0aGUgdGVzdAogIyBoYXJuZXNzIHRvIGRpc3Rpbmd1aXNoIGJ1aWxkcy4gT25seSBhZGQgX2FzYW4gZm9yIGEgc2FuaXRpemVkIGJ1aWxkCkBAIC0zMzYsNyArMzQ3LDcgQEAKIAkJCVBMQVRGT1JNX1ZFUlNJT05fQUxMX0NPREVOQU1FUz0iJChQTEFURk9STV9WRVJTSU9OX0FMTF9DT0RFTkFNRVMpIiBcCiAJCQlCVUlMRF9WRVJTSU9OX1RBR1M9IiQoQlVJTERfVkVSU0lPTl9UQUdTKSIgXAogCQkJQlVJTERfRklOR0VSUFJJTlQ9IiQoQlVJTERfRklOR0VSUFJJTlRfRlJPTV9GSUxFKSIgXAotCQkJJChpZiAkKE9FTV9USFVNQlBSSU5UX1BST1BFUlRJRVMpLEJVSUxEX1RIVU1CUFJJTlQ9IiQoQlVJTERfVEhVTUJQUklOVCkiKSBcCisJCQkkKGlmICQoT0VNX1RIVU1CUFJJTlRfUFJPUEVSVElFUyksQlVJTERfVEhVTUJQUklOVD0iJChCVUlMRF9USFVNQlBSSU5UX0ZST01fRklMRSkiKSBcCiAJCQlUQVJHRVRfQ1BVX0FCSV9MSVNUPSIkKFRBUkdFVF9DUFVfQUJJX0xJU1QpIiBcCiAJCQlUQVJHRVRfQ1BVX0FCSV9MSVNUXzMyX0JJVD0iJChUQVJHRVRfQ1BVX0FCSV9MSVNUXzMyX0JJVCkiIFwKIAkJCVRBUkdFVF9DUFVfQUJJX0xJU1RfNjRfQklUPSIkKFRBUkdFVF9DUFVfQUJJX0xJU1RfNjRfQklUKSIgXApAQCAtMzYwLDcgKzM3MSw3IEBACiAJJChoaWRlKSAkKGZvcmVhY2ggbGluZSwkKEZJTkFMX0JVSUxEX1BST1BFUlRJRVMpLCBcCiAJCWVjaG8gIiQobGluZSkiID4+ICRAOykKIAkkKGhpZGUpIGNhdCAkKElOU1RBTExFRF9BTkRST0lEX0lORk9fVFhUX1RBUkdFVCkgfCBncmVwICdyZXF1aXJlIHZlcnNpb24tJyB8IHNlZCAtZSAncy9yZXF1aXJlIHZlcnNpb24tL3JvLmJ1aWxkLmV4cGVjdC4vZycgPj4gJEAKLQkkKGhpZGUpIGJ1aWxkL3Rvb2xzL3Bvc3RfcHJvY2Vzc19wcm9wcy5weSAkQCAkKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9TWVNURU1fUFJPUEVSVFlfQkxBQ0tMSVNUKQorCSQoaGlkZSkgYnVpbGQvbWFrZS90b29scy9wb3N0X3Byb2Nlc3NfcHJvcHMucHkgJEAgJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfU1lTVEVNX1BST1BFUlRZX0JMQUNLTElTVCkKIAogYnVpbGRfZGVzYyA6PQogCkBAIC0zOTksNiArNDEwLDkgQEAKIAkkKGhpZGUpIGVjaG8gcm8udmVuZG9yLmJ1aWxkLmRhdGU9YCQoREFURV9GUk9NX0ZJTEUpYD4+JEAKIAkkKGhpZGUpIGVjaG8gcm8udmVuZG9yLmJ1aWxkLmRhdGUudXRjPWAkKERBVEVfRlJPTV9GSUxFKSArJXNgPj4kQAogCSQoaGlkZSkgZWNobyByby52ZW5kb3IuYnVpbGQuZmluZ2VycHJpbnQ9IiQoQlVJTERfRklOR0VSUFJJTlRfRlJPTV9GSUxFKSI+PiRACisJJChoaWRlKSBlY2hvIHJvLnZlbmRvci5wcm9kdWN0LmNwdS5hYmlsaXN0PSIkKFRBUkdFVF9DUFVfQUJJX0xJU1QpIj4+JEAKKwkkKGhpZGUpIGVjaG8gcm8udmVuZG9yLnByb2R1Y3QuY3B1LmFiaWxpc3QzMj0iJChUQVJHRVRfQ1BVX0FCSV9MSVNUXzMyX0JJVCkiPj4kQAorCSQoaGlkZSkgZWNobyByby52ZW5kb3IucHJvZHVjdC5jcHUuYWJpbGlzdDY0PSIkKFRBUkdFVF9DUFVfQUJJX0xJU1RfNjRfQklUKSI+PiRACiAJJChoaWRlKSBUQVJHRVRfREVWSUNFPSIkKFRBUkdFVF9ERVZJQ0UpIiBcCiAJCQlQUk9EVUNUX05BTUU9IiQoVEFSR0VUX1BST0RVQ1QpIiBcCiAJCQlQUk9EVUNUX0JSQU5EPSIkKFBST0RVQ1RfQlJBTkQpIiBcCkBAIC00MTMsOSArNDI3LDM1IEBACiAJICAgICAgICBlY2hvICIjIiA+PiAkQDsKIAkkKGhpZGUpICQoZm9yZWFjaCBsaW5lLCQoRklOQUxfVkVORE9SX0JVSUxEX1BST1BFUlRJRVMpLCBcCiAJCWVjaG8gIiQobGluZSkiID4+ICRAOykKLQkkKGhpZGUpIGJ1aWxkL3Rvb2xzL3Bvc3RfcHJvY2Vzc19wcm9wcy5weSAkQAorCSQoaGlkZSkgYnVpbGQvbWFrZS90b29scy9wb3N0X3Byb2Nlc3NfcHJvcHMucHkgJEAKIGVuZGlmICAjIHByb3BlcnR5X292ZXJyaWRlc19zcGxpdF9lbmFibGVkCiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcHJvZHVjdCBidWlsZC5wcm9wCitJTlNUQUxMRURfUFJPRFVDVF9CVUlMRF9QUk9QX1RBUkdFVCA6PSAkKFRBUkdFVF9PVVRfUFJPRFVDVCkvYnVpbGQucHJvcAorQUxMX0RFRkFVTFRfSU5TVEFMTEVEX01PRFVMRVMgKz0gJChJTlNUQUxMRURfUFJPRFVDVF9CVUlMRF9QUk9QX1RBUkdFVCkKKworRklOQUxfUFJPRFVDVF9QUk9QRVJUSUVTICs9IFwKKyAgICAkKGNhbGwgY29sbGFwc2UtcGFpcnMsICQoUFJPRFVDVF9QUk9EVUNUX1BST1BFUlRJRVMpKQorRklOQUxfUFJPRFVDVF9QUk9QRVJUSUVTIDo9ICQoY2FsbCB1bmlxLXBhaXJzLWJ5LWZpcnN0LWNvbXBvbmVudCwgXAorICAgICQoRklOQUxfUFJPRFVDVF9QUk9QRVJUSUVTKSw9KQorCiskKElOU1RBTExFRF9QUk9EVUNUX0JVSUxEX1BST1BfVEFSR0VUKToKKwlAZWNobyBUYXJnZXQgcHJvZHVjdCBidWlsZGluZm86ICRACisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgZWNobyA+ICRACitpZmRlZiBCT0FSRF9VU0VTX1BST0RVQ1RJTUFHRQorCSQoaGlkZSkgZWNobyByby5wcm9kdWN0LmJ1aWxkLmRhdGU9YCQoREFURV9GUk9NX0ZJTEUpYD4+JEAKKwkkKGhpZGUpIGVjaG8gcm8ucHJvZHVjdC5idWlsZC5kYXRlLnV0Yz1gJChEQVRFX0ZST01fRklMRSkgKyVzYD4+JEAKKwkkKGhpZGUpIGVjaG8gcm8ucHJvZHVjdC5idWlsZC5maW5nZXJwcmludD0iJChCVUlMRF9GSU5HRVJQUklOVF9GUk9NX0ZJTEUpIj4+JEAKK2VuZGlmICAjIEJPQVJEX1VTRVNfUFJPRFVDVElNQUdFCisJJChoaWRlKSBlY2hvICIjIiA+PiAkQDsgXAorCSAgICAgICAgZWNobyAiIyBBRERJVElPTkFMIFBST0RVQ1QgUFJPUEVSVElFUyIgPj4gJEA7IFwKKwkgICAgICAgIGVjaG8gIiMiID4+ICRAOworCSQoaGlkZSkgJChmb3JlYWNoIGxpbmUsJChGSU5BTF9QUk9EVUNUX1BST1BFUlRJRVMpLCBcCisJCWVjaG8gIiQobGluZSkiID4+ICRAOykKKwkkKGhpZGUpIGJ1aWxkL21ha2UvdG9vbHMvcG9zdF9wcm9jZXNzX3Byb3BzLnB5ICRACisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NTgsNyArNDk4LDcgQEAKICMgQ3JlYXRlIGVtcHR5IHBhY2thZ2Ugc3RhdHMgZmlsZSBpZiB0YXJnZXQgYnVpbGRzIG5vIGphcihzKSBvciBhcGsocykuCiAJJChoaWRlKSB0b3VjaCAkQAogZWxzZQotCSQoaGlkZSkgYnVpbGQvdG9vbHMvZHVtcC1wYWNrYWdlLXN0YXRzICReID4gJEAKKwkkKGhpZGUpIGJ1aWxkL21ha2UvdG9vbHMvZHVtcC1wYWNrYWdlLXN0YXRzICReID4gJEAKIGVuZGlmCiAKIC5QSE9OWTogcGFja2FnZS1zdGF0cwpAQCAtNDY3LDggKzUwNywxMCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDZXJ0LXRvLXBhY2thZ2UgbWFwcGluZy4gIFVzZWQgYnkgdGhlIHBvc3QtYnVpbGQgc2lnbmluZyB0b29scy4KICMgVXNlIGEgbWFjcm8gdG8gYWRkIG5ld2xpbmUgdG8gZWFjaCBlY2hvIGNvbW1hbmQKLWRlZmluZSBfYXBrY2VydHNfZWNob193aXRoX25ld2xpbmUKLSQoaGlkZSkgZWNobyAkKDEpCitkZWZpbmUgX2Fwa2NlcnRzX3dyaXRlX2xpbmUKKyQoaGlkZSkgZWNobyAtbiAnbmFtZT0iJCgxKS5hcGsiIGNlcnRpZmljYXRlPSIkMiIgcHJpdmF0ZV9rZXk9IiQzIicgPj4gJDUKKyQoaWYgJCg0KSwgJChoaWRlKSBlY2hvIC1uICcgY29tcHJlc3NlZD0iJDQiJyA+PiAkNSkKKyQoaGlkZSkgZWNobyAnJyA+PiAkNQogCiBlbmRlZgogCkBAIC00ODgsMTIgKzUzMCw4IEBACiAJQHJtIC1mICRACiAJJChmb3JlYWNoIHAsJChQQUNLQUdFUyksXAogCSAgJChpZiAkKFBBQ0tBR0VTLiQocCkuRVhURVJOQUxfS0VZKSxcCi0JICAgICQoY2FsbCBfYXBrY2VydHNfZWNob193aXRoX25ld2xpbmUsXAotCSAgICAgICduYW1lPSIkKHApLmFwayIgY2VydGlmaWNhdGU9IkVYVEVSTkFMIiBcCi0JICAgICAgcHJpdmF0ZV9rZXk9IiInID4+ICRAKSxcCi0JICAgICQoY2FsbCBfYXBrY2VydHNfZWNob193aXRoX25ld2xpbmUsXAotCSAgICAgICduYW1lPSIkKHApLmFwayIgY2VydGlmaWNhdGU9IiQoUEFDS0FHRVMuJChwKS5DRVJUSUZJQ0FURSkiIFwKLQkgICAgICBwcml2YXRlX2tleT0iJChQQUNLQUdFUy4kKHApLlBSSVZBVEVfS0VZKSInID4+ICRAKSkpCisJICAgICQoY2FsbCBfYXBrY2VydHNfd3JpdGVfbGluZSwkKHApLCJFWFRFUk5BTCIsIiIsJChQQUNLQUdFUy4kKHApLkNPTVBSRVNTRUQpLCRAKSxcCisJICAgICQoY2FsbCBfYXBrY2VydHNfd3JpdGVfbGluZSwkKHApLCQoUEFDS0FHRVMuJChwKS5DRVJUSUZJQ0FURSksJChQQUNLQUdFUy4kKHApLlBSSVZBVEVfS0VZKSwkKFBBQ0tBR0VTLiQocCkuQ09NUFJFU1NFRCksJEApKSkKIAkjIEluIGNhc2UgdmFsdWUgb2YgUEFDS0FHRVMgaXMgZW1wdHkuCiAJJChoaWRlKSB0b3VjaCAkQAogCkBAIC01MjAsOSArNTU4LDkgQEAKIFNPT05HX0NPTlZfREFUQSA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyxzb29uZ19jb252ZXJzaW9uKS9zb29uZ19jb252X2RhdGEKICQoU09PTkdfQ09OVl9EQVRBKToKIAlAcm0gLWYgJEAKLQlAJChmb3JlYWNoIHMsJChTT09OR19DT05WKSxlY2hvICIkKHMpLCQoc29ydCAkKFNPT05HX0NPTlYuJChzKS5QUk9CTEVNUykpLCQoc29ydCAkKGZpbHRlci1vdXQgJChTT09OR19BTFJFQURZX0NPTlYpLCQoU09PTkdfQ09OVi4kKHMpLkRFUFMpKSkiID4+JEA7KQorCUAkKGZvcmVhY2ggcywkKFNPT05HX0NPTlYpLGVjaG8gIiQocyksJChTT09OR19DT05WLiQocykuVFlQRSksJChzb3J0ICQoU09PTkdfQ09OVi4kKHMpLlBST0JMRU1TKSksJChzb3J0ICQoZmlsdGVyLW91dCAkKFNPT05HX0FMUkVBRFlfQ09OViksJChTT09OR19DT05WLiQocykuREVQUykpKSIgPj4kQDspCiAKLVNPT05HX1RPX0NPTlZFUlRfU0NSSVBUIDo9IGJ1aWxkL3Rvb2xzL3Nvb25nX3RvX2NvbnZlcnQucHkKK1NPT05HX1RPX0NPTlZFUlRfU0NSSVBUIDo9IGJ1aWxkL21ha2UvdG9vbHMvc29vbmdfdG9fY29udmVydC5weQogU09PTkdfVE9fQ09OVkVSVCA6PSAkKFBST0RVQ1RfT1VUKS9zb29uZ190b19jb252ZXJ0LnR4dAogJChTT09OR19UT19DT05WRVJUKTogJChTT09OR19DT05WX0RBVEEpICQoU09PTkdfVE9fQ09OVkVSVF9TQ1JJUFQpCiAJQHJtIC1mICRACkBAIC01MzYsMTQgKzU3NCwyMiBAQAogCUBybSAtZiAkQAogCWVjaG8gIiMgTW9kdWxlcyB1c2luZyAtV25vLWVycm9yIiA+PiAkQAogCWZvciBtIGluICQoc29ydCAkKFNPT05HX01PRFVMRVNfVVNJTkdfV05PX0VSUk9SKSAkKE1PRFVMRVNfVVNJTkdfV05PX0VSUk9SKSk7IGRvIGVjaG8gJCRtID4+ICRAOyBkb25lCi0JZWNobyAiIyBNb2R1bGVzIGFkZGVkIGRlZmF1bHQgLVdhbGwgLVdlcnJvciIgPj4gJEAKLQlmb3IgbSBpbiAkKHNvcnQgJChTT09OR19NT0RVTEVTX0FEREVEX1dFUlJPUikgJChNT0RVTEVTX0FEREVEX1dFUlJPUikpOyBkbyBlY2hvICQkbSA+PiAkQDsgZG9uZQogCWVjaG8gIiMgTW9kdWxlcyBhZGRlZCBkZWZhdWx0IC1XYWxsIiA+PiAkQAogCWZvciBtIGluICQoc29ydCAkKFNPT05HX01PRFVMRVNfQURERURfV0FMTCkgJChNT0RVTEVTX0FEREVEX1dBTEwpKTsgZG8gZWNobyAkJG0gPj4gJEA7IGRvbmUKIAogJChjYWxsIGRpc3QtZm9yLWdvYWxzLGRyb2lkY29yZSwkKFdBTExfV0VSUk9SKSkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNb2R1bGVzIG1pc3NpbmcgcHJvZmlsZSBmaWxlcworUEdPX1BST0ZJTEVfTUlTU0lORyA6PSAkKFBST0RVQ1RfT1VUKS9wZ29fcHJvZmlsZV9maWxlX21pc3NpbmcudHh0CiskKFBHT19QUk9GSUxFX01JU1NJTkcpOgorCUBybSAtZiAkQAorCWVjaG8gIiMgTW9kdWxlcyBtaXNzaW5nIFBHTyBwcm9maWxlIGZpbGVzIiA+PiAkQAorCWZvciBtIGluICQoU09PTkdfTU9EVUxFU19NSVNTSU5HX1BHT19QUk9GSUxFX0ZJTEUpOyBkbyBlY2hvICQkbSA+PiAkQDsgZG9uZQorCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsZHJvaWRjb3JlLCQoUEdPX1BST0ZJTEVfTUlTU0lORykpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVGhlIGRldiBrZXkgaXMgdXNlZCB0byBzaWduIHRoaXMgcGFja2FnZSwgYW5kIGFzIHRoZSBrZXkgcmVxdWlyZWQKICMgZm9yIGZ1dHVyZSBPVEEgcGFja2FnZXMgaW5zdGFsbGVkIGJ5IHRoaXMgc3lzdGVtLiAgQWN0dWFsIHByb2R1Y3QKICMgZGVsaXZlcmFibGVzIHdpbGwgYmUgcmUtc2lnbmVkIGJ5IGhhbmQuICBXZSBleHBlY3QgdGhpcyBmaWxlIHRvCkBAIC01NzcsNyArNjIzLDcgQEAKIHBka19mdXNpb25fbG9nX3RhZ3NfZmlsZSA6PSAkKHBhdHN1YnN0ICQoUFJPRFVDVF9PVVQpLyUsJChfcGRrX2Z1c2lvbl9pbnRlcm1lZGlhdGVzKS8lLCQoZmlsdGVyICQoZXZlbnRfbG9nX3RhZ3NfZmlsZSksJChBTExfUERLX0ZVU0lPTl9GSUxFUykpKQogCiAkKGFsbF9ldmVudF9sb2dfdGFnc19maWxlKTogUFJJVkFURV9TUkNfRklMRVMgOj0gJChhbGxfZXZlbnRfbG9nX3RhZ3Nfc3JjKSAkKHBka19mdXNpb25fbG9nX3RhZ3NfZmlsZSkKLSQoYWxsX2V2ZW50X2xvZ190YWdzX2ZpbGUpOiAkKGFsbF9ldmVudF9sb2dfdGFnc19zcmMpICQocGRrX2Z1c2lvbl9sb2dfdGFnc19maWxlKSAkKE1FUkdFVEFHUykgYnVpbGQvdG9vbHMvZXZlbnRfbG9nX3RhZ3MucHkKKyQoYWxsX2V2ZW50X2xvZ190YWdzX2ZpbGUpOiAkKGFsbF9ldmVudF9sb2dfdGFnc19zcmMpICQocGRrX2Z1c2lvbl9sb2dfdGFnc19maWxlKSAkKE1FUkdFVEFHUykgYnVpbGQvbWFrZS90b29scy9ldmVudF9sb2dfdGFncy5weQogCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApCiAJJChoaWRlKSAkKE1FUkdFVEFHUykgLW8gJEAgJChQUklWQVRFX1NSQ19GSUxFUykKIApAQCAtNTkzLDcgKzYzOSw3IEBACiAKICQoZXZlbnRfbG9nX3RhZ3NfZmlsZSk6IFBSSVZBVEVfU1JDX0ZJTEVTIDo9ICQoZXZlbnRfbG9nX3RhZ3Nfc3JjKSAkKHBka19mdXNpb25fbG9nX3RhZ3NfZmlsZSkKICQoZXZlbnRfbG9nX3RhZ3NfZmlsZSk6IFBSSVZBVEVfTUVSR0VEX0ZJTEUgOj0gJChhbGxfZXZlbnRfbG9nX3RhZ3NfZmlsZSkKLSQoZXZlbnRfbG9nX3RhZ3NfZmlsZSk6ICQoZXZlbnRfbG9nX3RhZ3Nfc3JjKSAkKGFsbF9ldmVudF9sb2dfdGFnc19maWxlKSAkKHBka19mdXNpb25fbG9nX3RhZ3NfZmlsZSkgJChNRVJHRVRBR1MpIGJ1aWxkL3Rvb2xzL2V2ZW50X2xvZ190YWdzLnB5CiskKGV2ZW50X2xvZ190YWdzX2ZpbGUpOiAkKGV2ZW50X2xvZ190YWdzX3NyYykgJChhbGxfZXZlbnRfbG9nX3RhZ3NfZmlsZSkgJChwZGtfZnVzaW9uX2xvZ190YWdzX2ZpbGUpICQoTUVSR0VUQUdTKSBidWlsZC9tYWtlL3Rvb2xzL2V2ZW50X2xvZ190YWdzLnB5CiAJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkKIAkkKGhpZGUpICQoTUVSR0VUQUdTKSAtbyAkQCAtbSAkKFBSSVZBVEVfTUVSR0VEX0ZJTEUpICQoUFJJVkFURV9TUkNfRklMRVMpCiAKQEAgLTgxOCw4ICs4NjQsOCBAQAogJCgyKSAkKDMpOiBQUklWQVRFX01FU1NBR0UgOj0gJCg0KQogJCgyKSAkKDMpOiBQUklWQVRFX0RJUiA6PSAkKDUpCiAkKDIpIDogJCgzKQotJCgzKSA6ICQoNikgJChCVUlMRF9TWVNURU0pL01ha2VmaWxlIGJ1aWxkL3Rvb2xzL2dlbmVyYXRlLW5vdGljZS1maWxlcy5weQotCWJ1aWxkL3Rvb2xzL2dlbmVyYXRlLW5vdGljZS1maWxlcy5weSAtLXRleHQtb3V0cHV0ICQoMikgXAorJCgzKSA6ICQoNikgJChCVUlMRF9TWVNURU0pL01ha2VmaWxlIGJ1aWxkL21ha2UvdG9vbHMvZ2VuZXJhdGUtbm90aWNlLWZpbGVzLnB5CisJYnVpbGQvbWFrZS90b29scy9nZW5lcmF0ZS1ub3RpY2UtZmlsZXMucHkgLS10ZXh0LW91dHB1dCAkKDIpIFwKIAkJJChpZiAkKGZpbHRlciAkKDEpLHhtbF9leGNsdWRlZF92ZW5kb3IpLC1lIHZlbmRvciAtLXhtbC1vdXRwdXQsIFwKIAkJICAkKGlmICQoZmlsdGVyICQoMSkseG1sX3ZlbmRvciksLWkgdmVuZG9yIC0teG1sLW91dHB1dCwgXAogCQkgICAgLS1odG1sLW91dHB1dCkpICQoMykgXApAQCAtODM4LDcgKzg4NCw4IEBACiB0b29sc19ub3RpY2VfZmlsZV90eHQgOj0gJChIT1NUX09VVF9JTlRFUk1FRElBVEVTKS9OT1RJQ0UudHh0CiB0b29sc19ub3RpY2VfZmlsZV9odG1sIDo9ICQoSE9TVF9PVVRfSU5URVJNRURJQVRFUykvTk9USUNFLmh0bWwKIAotaWZlcSAoJChQUk9EVUNUX0ZVTExfVFJFQkxFKSx0cnVlKQorIyBUT0RPKGIvNjk4NjUwMzIpOiBNYWtlIFBST0RVQ1RfTk9USUNFX1NQTElUIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgoraWZlcSAoJChQUk9EVUNUX05PVElDRV9TUExJVCksdHJ1ZSkKIHRhcmdldF9ub3RpY2VfZmlsZV9odG1sX29yX3htbCA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFUykvTk9USUNFLnhtbAogdGFyZ2V0X25vdGljZV9maWxlX2h0bWxfb3JfeG1sX2d6IDo9ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVTKS9OT1RJQ0UueG1sLmd6CiBpbnN0YWxsZWRfbm90aWNlX2h0bWxfb3JfeG1sX2d6IDo9ICQoVEFSR0VUX09VVCkvZXRjL05PVElDRS54bWwuZ3oKQEAgLTEwMDksNyArMTA1Niw3IEBACiBpZm5lcSAodHJ1ZSwkKFRBUkdFVF9VU0VSSU1BR0VTX1NQQVJTRV9TUVVBU0hGU19ESVNBQkxFRCkpCiAgIElOVEVSTkFMX1VTRVJJTUFHRVNfU1BBUlNFX1NRVUFTSEZTX0ZMQUcgOj0gLXMKIGVuZGlmCi1pZm5lcSAoJChmaWx0ZXIgJChCT0FSRF9WRU5ET1JJTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSAkKEJPQVJEX1NZU1RFTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHNxdWFzaGZzKSwpCitpZm5lcSAoJChmaWx0ZXIgJChCT0FSRF9QUk9EVUNUSU1BR0VfRklMRV9TWVNURU1fVFlQRSkgJChCT0FSRF9WRU5ET1JJTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSAkKEJPQVJEX1NZU1RFTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHNxdWFzaGZzKSwpCiBJTlRFUk5BTF9VU0VSSU1BR0VTX0RFUFMgKz0gJChNQUtFX1NRVUFTSEZTKSAkKE1LU1FVQVNIRlNVU0VSSU1HKSAkKElNRzJTSU1HKQogZW5kaWYKIApAQCAtMTA0MCw3ICsxMDg3LDcgQEAKICQoaWYgJChCT0FSRF9TWVNURU1JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSwkKGhpZGUpIGVjaG8gInN5c3RlbV9mc190eXBlPSQoQk9BUkRfU1lTVEVNSU1BR0VfRklMRV9TWVNURU1fVFlQRSkiID4+ICQoMSkpCiAkKGlmICQoQk9BUkRfU1lTVEVNSU1BR0VfRVhURlNfSU5PREVfQ09VTlQpLCQoaGlkZSkgZWNobyAic3lzdGVtX2V4dGZzX2lub2RlX2NvdW50PSQoQk9BUkRfU1lTVEVNSU1BR0VfRVhURlNfSU5PREVfQ09VTlQpIiA+PiAkKDEpKQogJChpZiAkKEJPQVJEX1NZU1RFTUlNQUdFX0pPVVJOQUxfU0laRSksJChoaWRlKSBlY2hvICJzeXN0ZW1fam91cm5hbF9zaXplPSQoQk9BUkRfU1lTVEVNSU1BR0VfSk9VUk5BTF9TSVpFKSIgPj4gJCgxKSkKLSQoaWYgJChCT0FSRF9IQVNfRVhUNF9SRVNFUlZFRF9CTE9DS1MpLCQoaGlkZSkgZWNobyAiaGFzX2V4dDRfcmVzZXJ2ZWRfYmxvY2tzPSQoQk9BUkRfSEFTX0VYVDRfUkVTRVJWRURfQkxPQ0tTKSIgPj4gJCgxKSkKKyQoaWYgJChCT0FSRF9FWFQ0X1NIQVJFX0RVUF9CTE9DS1MpLCQoaGlkZSkgZWNobyAiZXh0NF9zaGFyZV9kdXBfYmxvY2tzPSQoQk9BUkRfRVhUNF9TSEFSRV9EVVBfQkxPQ0tTKSIgPj4gJCgxKSkKICQoaWYgJChCT0FSRF9TWVNURU1JTUFHRV9TUVVBU0hGU19DT01QUkVTU09SKSwkKGhpZGUpIGVjaG8gInN5c3RlbV9zcXVhc2hmc19jb21wcmVzc29yPSQoQk9BUkRfU1lTVEVNSU1BR0VfU1FVQVNIRlNfQ09NUFJFU1NPUikiID4+ICQoMSkpCiAkKGlmICQoQk9BUkRfU1lTVEVNSU1BR0VfU1FVQVNIRlNfQ09NUFJFU1NPUl9PUFQpLCQoaGlkZSkgZWNobyAic3lzdGVtX3NxdWFzaGZzX2NvbXByZXNzb3Jfb3B0PSQoQk9BUkRfU1lTVEVNSU1BR0VfU1FVQVNIRlNfQ09NUFJFU1NPUl9PUFQpIiA+PiAkKDEpKQogJChpZiAkKEJPQVJEX1NZU1RFTUlNQUdFX1NRVUFTSEZTX0JMT0NLX1NJWkUpLCQoaGlkZSkgZWNobyAic3lzdGVtX3NxdWFzaGZzX2Jsb2NrX3NpemU9JChCT0FSRF9TWVNURU1JTUFHRV9TUVVBU0hGU19CTE9DS19TSVpFKSIgPj4gJCgxKSkKQEAgLTEwNjIsNiArMTEwOSwxNSBAQAogJChpZiAkKEJPQVJEX1ZFTkRPUklNQUdFX1NRVUFTSEZTX0JMT0NLX1NJWkUpLCQoaGlkZSkgZWNobyAidmVuZG9yX3NxdWFzaGZzX2Jsb2NrX3NpemU9JChCT0FSRF9WRU5ET1JJTUFHRV9TUVVBU0hGU19CTE9DS19TSVpFKSIgPj4gJCgxKSkKICQoaWYgJChCT0FSRF9WRU5ET1JJTUFHRV9TUVVBU0hGU19ESVNBQkxFXzRLX0FMSUdOKSwkKGhpZGUpIGVjaG8gInZlbmRvcl9zcXVhc2hmc19kaXNhYmxlXzRrX2FsaWduPSQoQk9BUkRfVkVORE9SSU1BR0VfU1FVQVNIRlNfRElTQUJMRV80S19BTElHTikiID4+ICQoMSkpCiAkKGlmICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1ZFTkRPUl9CQVNFX0ZTX1BBVEgpLCQoaGlkZSkgZWNobyAidmVuZG9yX2Jhc2VfZnNfZmlsZT0kKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9WRU5ET1JfQkFTRV9GU19QQVRIKSIgPj4gJCgxKSkKKyQoaWYgJChCT0FSRF9QUk9EVUNUSU1BR0VfRklMRV9TWVNURU1fVFlQRSksJChoaWRlKSBlY2hvICJwcm9kdWN0X2ZzX3R5cGU9JChCT0FSRF9QUk9EVUNUSU1BR0VfRklMRV9TWVNURU1fVFlQRSkiID4+ICQoMSkpCiskKGlmICQoQk9BUkRfUFJPRFVDVElNQUdFX0VYVEZTX0lOT0RFX0NPVU5UKSwkKGhpZGUpIGVjaG8gInByb2R1Y3RfZXh0ZnNfaW5vZGVfY291bnQ9JChCT0FSRF9QUk9EVUNUSU1BR0VfRVhURlNfSU5PREVfQ09VTlQpIiA+PiAkKDEpKQorJChpZiAkKEJPQVJEX1BST0RVQ1RJTUFHRV9QQVJUSVRJT05fU0laRSksJChoaWRlKSBlY2hvICJwcm9kdWN0X3NpemU9JChCT0FSRF9QUk9EVUNUSU1BR0VfUEFSVElUSU9OX1NJWkUpIiA+PiAkKDEpKQorJChpZiAkKEJPQVJEX1BST0RVQ1RJTUFHRV9KT1VSTkFMX1NJWkUpLCQoaGlkZSkgZWNobyAicHJvZHVjdF9qb3VybmFsX3NpemU9JChCT0FSRF9QUk9EVUNUSU1BR0VfSk9VUk5BTF9TSVpFKSIgPj4gJCgxKSkKKyQoaWYgJChCT0FSRF9QUk9EVUNUSU1BR0VfU1FVQVNIRlNfQ09NUFJFU1NPUiksJChoaWRlKSBlY2hvICJwcm9kdWN0X3NxdWFzaGZzX2NvbXByZXNzb3I9JChCT0FSRF9QUk9EVUNUSU1BR0VfU1FVQVNIRlNfQ09NUFJFU1NPUikiID4+ICQoMSkpCiskKGlmICQoQk9BUkRfUFJPRFVDVElNQUdFX1NRVUFTSEZTX0NPTVBSRVNTT1JfT1BUKSwkKGhpZGUpIGVjaG8gInByb2R1Y3Rfc3F1YXNoZnNfY29tcHJlc3Nvcl9vcHQ9JChCT0FSRF9QUk9EVUNUSU1BR0VfU1FVQVNIRlNfQ09NUFJFU1NPUl9PUFQpIiA+PiAkKDEpKQorJChpZiAkKEJPQVJEX1BST0RVQ1RJTUFHRV9TUVVBU0hGU19CTE9DS19TSVpFKSwkKGhpZGUpIGVjaG8gInByb2R1Y3Rfc3F1YXNoZnNfYmxvY2tfc2l6ZT0kKEJPQVJEX1BST0RVQ1RJTUFHRV9TUVVBU0hGU19CTE9DS19TSVpFKSIgPj4gJCgxKSkKKyQoaWYgJChCT0FSRF9QUk9EVUNUSU1BR0VfU1FVQVNIRlNfRElTQUJMRV80S19BTElHTiksJChoaWRlKSBlY2hvICJwcm9kdWN0X3NxdWFzaGZzX2Rpc2FibGVfNGtfYWxpZ249JChCT0FSRF9QUk9EVUNUSU1BR0VfU1FVQVNIRlNfRElTQUJMRV80S19BTElHTikiID4+ICQoMSkpCiskKGlmICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1BST0RVQ1RfQkFTRV9GU19QQVRIKSwkKGhpZGUpIGVjaG8gInByb2R1Y3RfYmFzZV9mc19maWxlPSQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1BST0RVQ1RfQkFTRV9GU19QQVRIKSIgPj4gJCgxKSkKICQoaWYgJChCT0FSRF9PRU1JTUFHRV9QQVJUSVRJT05fU0laRSksJChoaWRlKSBlY2hvICJvZW1fc2l6ZT0kKEJPQVJEX09FTUlNQUdFX1BBUlRJVElPTl9TSVpFKSIgPj4gJCgxKSkKICQoaWYgJChCT0FSRF9PRU1JTUFHRV9KT1VSTkFMX1NJWkUpLCQoaGlkZSkgZWNobyAib2VtX2pvdXJuYWxfc2l6ZT0kKEJPQVJEX09FTUlNQUdFX0pPVVJOQUxfU0laRSkiID4+ICQoMSkpCiAkKGlmICQoQk9BUkRfT0VNSU1BR0VfRVhURlNfSU5PREVfQ09VTlQpLCQoaGlkZSkgZWNobyAib2VtX2V4dGZzX2lub2RlX2NvdW50PSQoQk9BUkRfT0VNSU1BR0VfRVhURlNfSU5PREVfQ09VTlQpIiA+PiAkKDEpKQpAQCAtMTA3Niw2ICsxMTMyLDcgQEAKICQoaWYgJChmaWx0ZXIgZW5nLCAkKFRBUkdFVF9CVUlMRF9WQVJJQU5UKSksJChoaWRlKSBlY2hvICJ2ZXJpdHlfZGlzYWJsZT10cnVlIiA+PiAkKDEpKQogJChpZiAkKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9TWVNURU1fVkVSSVRZX1BBUlRJVElPTiksJChoaWRlKSBlY2hvICJzeXN0ZW1fdmVyaXR5X2Jsb2NrX2RldmljZT0kKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9TWVNURU1fVkVSSVRZX1BBUlRJVElPTikiID4+ICQoMSkpCiAkKGlmICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1ZFTkRPUl9WRVJJVFlfUEFSVElUSU9OKSwkKGhpZGUpIGVjaG8gInZlbmRvcl92ZXJpdHlfYmxvY2tfZGV2aWNlPSQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1ZFTkRPUl9WRVJJVFlfUEFSVElUSU9OKSIgPj4gJCgxKSkKKyQoaWYgJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfUFJPRFVDVF9WRVJJVFlfUEFSVElUSU9OKSwkKGhpZGUpIGVjaG8gInByb2R1Y3RfdmVyaXR5X2Jsb2NrX2RldmljZT0kKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9QUk9EVUNUX1ZFUklUWV9QQVJUSVRJT04pIiA+PiAkKDEpKQogJChpZiAkKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9TVVBQT1JUU19WQk9PVCksJChoaWRlKSBlY2hvICJ2Ym9vdD0kKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9TVVBQT1JUU19WQk9PVCkiID4+ICQoMSkpCiAkKGlmICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1NVUFBPUlRTX1ZCT09UKSwkKGhpZGUpIGVjaG8gInZib290X2tleT0kKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9WQk9PVF9TSUdOSU5HX0tFWSkiID4+ICQoMSkpCiAkKGlmICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1NVUFBPUlRTX1ZCT09UKSwkKGhpZGUpIGVjaG8gInZib290X3N1YmtleT0kKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9WQk9PVF9TSUdOSU5HX1NVQktFWSkiID4+ICQoMSkpCkBAIC0xMDk2LDYgKzExNTMsMTMgQEAKICAgICAgICAgJChoaWRlKSBlY2hvICJhdmJfdmVuZG9yX2tleV9wYXRoPSQoQk9BUkRfQVZCX1ZFTkRPUl9LRVlfUEFUSCkiID4+ICQoMSkKICAgICAgICAgJChoaWRlKSBlY2hvICJhdmJfdmVuZG9yX2FsZ29yaXRobT0kKEJPQVJEX0FWQl9WRU5ET1JfQUxHT1JJVEhNKSIgPj4gJCgxKQogICAgICAgICAkKGhpZGUpIGVjaG8gImF2Yl92ZW5kb3Jfcm9sbGJhY2tfaW5kZXhfbG9jYXRpb249JChCT0FSRF9BVkJfVkVORE9SX1JPTExCQUNLX0lOREVYX0xPQ0FUSU9OKSIgPj4gJCgxKSkpCiskKGlmICQoQk9BUkRfQVZCX0VOQUJMRSksJChoaWRlKSBlY2hvICJhdmJfcHJvZHVjdF9oYXNodHJlZV9lbmFibGU9JChCT0FSRF9BVkJfRU5BQkxFKSIgPj4gJCgxKSkKKyQoaWYgJChCT0FSRF9BVkJfRU5BQkxFKSwkKGhpZGUpIGVjaG8gImF2Yl9wcm9kdWN0X2FkZF9oYXNodHJlZV9mb290ZXJfYXJncz0kKEJPQVJEX0FWQl9QUk9EVUNUX0FERF9IQVNIVFJFRV9GT09URVJfQVJHUykiID4+ICQoMSkpCiskKGlmICQoQk9BUkRfQVZCX0VOQUJMRSksXAorICAgICQoaWYgJChCT0FSRF9BVkJfUFJPRFVDVF9LRVlfUEFUSCksXAorICAgICAgICAkKGhpZGUpIGVjaG8gImF2Yl9wcm9kdWN0X2tleV9wYXRoPSQoQk9BUkRfQVZCX1BST0RVQ1RfS0VZX1BBVEgpIiA+PiAkKDEpCisgICAgICAgICQoaGlkZSkgZWNobyAiYXZiX3Byb2R1Y3RfYWxnb3JpdGhtPSQoQk9BUkRfQVZCX1BST0RVQ1RfQUxHT1JJVEhNKSIgPj4gJCgxKQorICAgICAgICAkKGhpZGUpIGVjaG8gImF2Yl9wcm9kdWN0X3JvbGxiYWNrX2luZGV4X2xvY2F0aW9uPSQoQk9BUkRfQVZCX1BST0RVQ1RfUk9MTEJBQ0tfSU5ERVhfTE9DQVRJT04pIiA+PiAkKDEpKSkKICQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVCkpLFwKICAgICAkKGhpZGUpIGVjaG8gInJlY292ZXJ5X2FzX2Jvb3Q9dHJ1ZSIgPj4gJCgxKSkKICQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX0JVSUxEX1NZU1RFTV9ST09UX0lNQUdFKSksXApAQCAtMTE1NCw2ICsxMjE4LDkgQEAKIGlmZGVmIHByb3BlcnR5X292ZXJyaWRlc19zcGxpdF9lbmFibGVkCiByZWNvdmVyeV9idWlsZF9wcm9wcyArPSAkKElOU1RBTExFRF9WRU5ET1JfQlVJTERfUFJPUF9UQVJHRVQpCiBlbmRpZgoraWZkZWYgQk9BUkRfVVNFU19QUk9EVUNUSU1BR0UKK3JlY292ZXJ5X2J1aWxkX3Byb3BzICs9ICQoSU5TVEFMTEVEX1BST0RVQ1RfQlVJTERfUFJPUF9UQVJHRVQpCitlbmRpZgogcmVjb3ZlcnlfcmVzb3VyY2VzX2NvbW1vbiA6PSAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgcmVjb3ZlcnkpL3JlcwogCiAjIFNldCByZWNvdmVyeV9kZW5zaXR5IHRvIHRoZSBkZW5zaXR5IGJ1Y2tldCBvZiB0aGUgZGV2aWNlLgpAQCAtMTE5OSwxOSArMTI2NiwyMyBAQAogcmVjb3Zlcnlfd2lwZSA6PQogZW5kaWYKIAotIyBQcmlvciB0byBBL0IgdXBkYXRlLCB3ZSB1c2VkIHRvIGhhdmU6CisjIFRyYWRpdGlvbmFsbHkgd2l0aCBub24tQS9CIE9UQSB3ZSBoYXZlOgogIyAgIGJvb3QuaW1nICsgcmVjb3ZlcnktZnJvbS1ib290LnAgKyByZWNvdmVyeS1yZXNvdXJjZS5kYXQgPSByZWNvdmVyeS5pbWcuCi0jIHJlY292ZXJ5LXJlc291cmNlLmRhdCBpcyBuZWVkZWQgb25seSBpZiB3ZSBjYXJyeSBhIHBhdGNoIG9mIHRoZSBib290IGFuZAotIyByZWNvdmVyeSBpbWFnZXMgYW5kIGludm9rZSBpbnN0YWxsLXJlY292ZXJ5LnNoIG9uIHRoZSBmaXJzdCBib290IHBvc3QgYW4KLSMgT1RBIHVwZGF0ZS4KKyMgcmVjb3ZlcnktcmVzb3VyY2UuZGF0IGlzIG5lZWRlZCBvbmx5IGlmIHdlIGNhcnJ5IGFuIGltZ2RpZmYgcGF0Y2ggb2YgdGhlIGJvb3QgYW5kIHJlY292ZXJ5IGltYWdlcworIyBhbmQgaW52b2tlIGluc3RhbGwtcmVjb3Zlcnkuc2ggb24gdGhlIGZpcnN0IGJvb3QgcG9zdCBhbiBPVEEgdXBkYXRlLgogIwogIyBXZSBubyBsb25nZXIgbmVlZCB0aGF0IGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZHM6Ci0jICAgYSkgV2UgY2FycnkgYSBmdWxsIGNvcHkgb2YgdGhlIHJlY292ZXJ5IGltYWdlCisjICAgYSkgV2UgY2FycnkgYSBmdWxsIGNvcHkgb2YgdGhlIHJlY292ZXJ5IGltYWdlIC0gbm8gcGF0Y2hpbmcgbmVlZGVkCiAjICAgICAgKEJPQVJEX1VTRVNfRlVMTF9SRUNPVkVSWV9JTUFHRSA9IHRydWUpOwotIyAgIGIpIFdlIGJ1aWxkIGEgc2luZ2xlIGltYWdlIHRoYXQgY29udGFpbnMgYm9vdCBhbmQgcmVjb3ZlcnkgYm90aAotIyAgICAgIChCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QgPSB0cnVlKS4KKyMgICBiKSBXZSBidWlsZCBhIHNpbmdsZSBpbWFnZSB0aGF0IGNvbnRhaW5zIGJvb3QgYW5kIHJlY292ZXJ5IGJvdGggLSBubyByZWNvdmVyeSBpbWFnZSB0byBpbnN0YWxsCisjICAgICAgKEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVCA9IHRydWUpOworIyAgIGMpIFdlIGJ1aWxkIHRoZSByb290IGludG8gc3lzdGVtIGltYWdlIC0gbm90IG5lZWRpbmcgdGhlIHJlc291cmNlIGZpbGUgYXMgd2UgZG8gYnNkaWZmCisjICAgICAgKEJPQVJEX0JVSUxEX1NZU1RFTV9ST09UX0lNQUdFID0gdHJ1ZSkuCisjIE5vdGUgdGhhdCBjb25kaXRpb24gYikgaW1wbGllcyBjb25kaXRpb24gYyksIGJlY2F1c2Ugb2YgdGhlIGVhcmxpZXIgY2hlY2sgaW4gdGhpcyBmaWxlOgorIyAiQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UID0gdHJ1ZSBtdXN0IGhhdmUgQk9BUkRfQlVJTERfU1lTVEVNX1JPT1RfSU1BR0UgPSB0cnVlIiAobm90IHZpY2UKKyMgdmVyc2EgdGhvdWdoKS4KIAotaWZlcSAoLCQoZmlsdGVyIHRydWUsICQoQk9BUkRfVVNFU19GVUxMX1JFQ09WRVJZX0lNQUdFKSAkKEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVCkpKQoraWZlcSAoLCQoZmlsdGVyIHRydWUsICQoQk9BUkRfVVNFU19GVUxMX1JFQ09WRVJZX0lNQUdFKSAkKEJPQVJEX0JVSUxEX1NZU1RFTV9ST09UX0lNQUdFKSkpCiAjIE5hbWVkICcuZGF0JyBzbyB3ZSBkb24ndCBhdHRlbXB0IHRvIHVzZSBpbWdkaWZmIGZvciBwYXRjaGluZyBpdC4KIFJFQ09WRVJZX1JFU09VUkNFX1pJUCA6PSAkKFRBUkdFVF9PVVQpL2V0Yy9yZWNvdmVyeS1yZXNvdXJjZS5kYXQKIGVsc2UKQEAgLTEzMTAsMTIgKzEzODEsMTAgQEAKICAgJChpZiAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UKSksIFwKICAgICAkKGhpZGUpICQoY2FsbCBhc3NlcnQtbWF4LWltYWdlLXNpemUsJCgxKSwkKGNhbGwgZ2V0LWhhc2gtaW1hZ2UtbWF4LXNpemUsJChCT0FSRF9CT09USU1BR0VfUEFSVElUSU9OX1NJWkUpKSksIFwKICAgICAkKGhpZGUpICQoY2FsbCBhc3NlcnQtbWF4LWltYWdlLXNpemUsJCgxKSwkKGNhbGwgZ2V0LWhhc2gtaW1hZ2UtbWF4LXNpemUsJChCT0FSRF9SRUNPVkVSWUlNQUdFX1BBUlRJVElPTl9TSVpFKSkpKQotICAkKGlmICQoYW5kICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QpKSwkKGZpbHRlciB0cnVlLCQoQk9BUkRfQVZCX0VOQUJMRSkpKSwgXAotICAgICAgJChoaWRlKSAkKEFWQlRPT0wpIGFkZF9oYXNoX2Zvb3RlciBcCi0gICAgICAgIC0taW1hZ2UgJCgxKSBcCi0gICAgICAgIC0tcGFydGl0aW9uX3NpemUgJChCT0FSRF9CT09USU1BR0VfUEFSVElUSU9OX1NJWkUpIFwKLSAgICAgICAgLS1wYXJ0aXRpb25fbmFtZSBib290ICQoSU5URVJOQUxfQVZCX0JPT1RfU0lHTklOR19BUkdTKSBcCi0gICAgICAgICQoQk9BUkRfQVZCX0JPT1RfQUREX0hBU0hfRk9PVEVSX0FSR1MpKQorICAkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9BVkJfRU5BQkxFKSksIFwKKyAgICAkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QpKSwgXAorICAgICAgJChoaWRlKSAkKEFWQlRPT0wpIGFkZF9oYXNoX2Zvb3RlciAtLWltYWdlICQoMSkgLS1wYXJ0aXRpb25fc2l6ZSAkKEJPQVJEX0JPT1RJTUFHRV9QQVJUSVRJT05fU0laRSkgLS1wYXJ0aXRpb25fbmFtZSBib290ICQoSU5URVJOQUxfQVZCX0JPT1RfU0lHTklOR19BUkdTKSAkKEJPQVJEX0FWQl9CT09UX0FERF9IQVNIX0ZPT1RFUl9BUkdTKSxcCisgICAgICAkKGhpZGUpICQoQVZCVE9PTCkgYWRkX2hhc2hfZm9vdGVyIC0taW1hZ2UgJCgxKSAtLXBhcnRpdGlvbl9zaXplICQoQk9BUkRfUkVDT1ZFUllJTUFHRV9QQVJUSVRJT05fU0laRSkgLS1wYXJ0aXRpb25fbmFtZSByZWNvdmVyeSAkKElOVEVSTkFMX0FWQl9SRUNPVkVSWV9TSUdOSU5HX0FSR1MpICQoQk9BUkRfQVZCX1JFQ09WRVJZX0FERF9IQVNIX0ZPT1RFUl9BUkdTKSkpCiBlbmRlZgogCiBBREJEIDo9ICQoVEFSR0VUX09VVF9FWEVDVVRBQkxFUykvYWRiZApAQCAtMTM5OCw3ICsxNDY3LDggQEAKICAgICAkKEFMTF9HRU5FUkFURURfU09VUkNFUykgXAogICAgICQoQUxMX0RFRkFVTFRfSU5TVEFMTEVEX01PRFVMRVMpIFwKICAgICAkKFBES19GVVNJT05fU1lTSU1HX0ZJTEVTKSBcCi0gICAgJChSRUNPVkVSWV9SRVNPVVJDRV9aSVApKQorICAgICQoUkVDT1ZFUllfUkVTT1VSQ0VfWklQKSkgXAorICAgICQoUERLX0ZVU0lPTl9TWU1MSU5LX1NUQU1QKQogCiBGVUxMX1NZU1RFTUlNQUdFX0RFUFMgOj0gJChJTlRFUk5BTF9TWVNURU1JTUFHRV9GSUxFUykgJChJTlRFUk5BTF9VU0VSSU1BR0VTX0RFUFMpCiAKQEAgLTE0MjIsNyArMTQ5Miw3IEBACiAJQG1rZGlyIC1wICQoZGlyICRAKQogCUBybSAtZiAkQAogCSQoaGlkZSkgJChGSUxFU0xJU1QpICQoVEFSR0VUX09VVCkgPiAkKEA6LnR4dD0uanNvbikKLQkkKGhpZGUpIGJ1aWxkL3Rvb2xzL2ZpbGVzbGlzdF91dGlsLnB5IC1jICQoQDoudHh0PS5qc29uKSA+ICRACisJJChoaWRlKSBidWlsZC9tYWtlL3Rvb2xzL2ZpbGVzbGlzdF91dGlsLnB5IC1jICQoQDoudHh0PS5qc29uKSA+ICRACiAKIC5QSE9OWTogaW5zdGFsbGVkLWZpbGUtbGlzdAogaW5zdGFsbGVkLWZpbGUtbGlzdDogJChJTlNUQUxMRURfRklMRVNfRklMRSkKQEAgLTE0NDgsMjMgKzE1MTgsMzYgQEAKIGVuZGVmCiBlbmRpZgogCisjIENyZWF0ZSBzeW1saW5rIC9zeXN0ZW0vcHJvZHVjdCB0byAvcHJvZHVjdCBpZiBuZWNlc3NhcnkuCitpZmRlZiBCT0FSRF9VU0VTX1BST0RVQ1RJTUFHRQorZGVmaW5lIGNyZWF0ZS1zeXN0ZW0tcHJvZHVjdC1zeW1saW5rCiskKGhpZGUpIGlmIFsgLWQgJChUQVJHRVRfT1VUKS9wcm9kdWN0IF0gJiYgWyAhIC1oICQoVEFSR0VUX09VVCkvcHJvZHVjdCBdOyB0aGVuIFwKKyAgZWNobyAnTm9uLXN5bWxpbmsgJChUQVJHRVRfT1VUKS9wcm9kdWN0IGRldGVjdGVkIScgMT4mMjsgXAorICBlY2hvICdZb3UgY2Fubm90IGluc3RhbGwgZmlsZXMgdG8gJChUQVJHRVRfT1VUKS9wcm9kdWN0IHdoaWxlIGJ1aWxkaW5nIGEgc2VwYXJhdGUgcHJvZHVjdC5pbWchJyAxPiYyOyBcCisgIGV4aXQgMTsgXAorZmkKKyQoaGlkZSkgbG4gLXNmIC9wcm9kdWN0ICQoVEFSR0VUX09VVCkvcHJvZHVjdAorZW5kZWYKK2Vsc2UKK2RlZmluZSBjcmVhdGUtc3lzdGVtLXByb2R1Y3Qtc3ltbGluaworZW5kZWYKK2VuZGlmCisKICMgJCgxKTogb3V0cHV0IGZpbGUKIGRlZmluZSBidWlsZC1zeXN0ZW1pbWFnZS10YXJnZXQKICAgQGVjaG8gIlRhcmdldCBzeXN0ZW0gZnMgaW1hZ2U6ICQoMSkiCiAgICQoY2FsbCBjcmVhdGUtc3lzdGVtLXZlbmRvci1zeW1saW5rKQorICAkKGNhbGwgY3JlYXRlLXN5c3RlbS1wcm9kdWN0LXN5bWxpbmspCiAgIEBta2RpciAtcCAkKGRpciAkKDEpKSAkKHN5c3RlbWltYWdlX2ludGVybWVkaWF0ZXMpICYmIHJtIC1yZiAkKHN5c3RlbWltYWdlX2ludGVybWVkaWF0ZXMpL3N5c3RlbV9pbWFnZV9pbmZvLnR4dAogICAkKGNhbGwgZ2VuZXJhdGUtdXNlcmltYWdlLXByb3AtZGljdGlvbmFyeSwgJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9zeXN0ZW1faW1hZ2VfaW5mby50eHQsIFwKICAgICAgIHNraXBfZnNjaz10cnVlKQogICAkKGhpZGUpIFBBVEg9JChmb3JlYWNoIHAsJChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyksJChwKTopJCRQQVRIIFwKLSAgICAgIC4vYnVpbGQvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKKyAgICAgIGJ1aWxkL21ha2UvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKICAgICAgICQoVEFSR0VUX09VVCkgJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9zeXN0ZW1faW1hZ2VfaW5mby50eHQgJCgxKSAkKFRBUkdFVF9PVVQpIFwKICAgICAgIHx8ICggZWNobyAiT3V0IG9mIHNwYWNlPyB0aGUgdHJlZSBzaXplIG9mICQoVEFSR0VUX09VVCkgaXMgKE1CKTogIiAxPiYyIDtcCiAgICAgICAgICAgIGR1IC1zbSAkKFRBUkdFVF9PVVQpIDE+JjI7XAogICAgICAgICAgICBpZiBbICIkKElOVEVSTkFMX1VTRVJJTUFHRVNfRVhUX1ZBUklBTlQpIiA9PSAiZXh0NCIgXTsgdGhlbiBcCiAgICAgICAgICAgICAgICBtYXhzaXplPSQoQk9BUkRfU1lTVEVNSU1BR0VfUEFSVElUSU9OX1NJWkUpOyBcCi0gICAgICAgICAgICAgICBpZiBbICIkKEJPQVJEX0hBU19FWFQ0X1JFU0VSVkVEX0JMT0NLUykiID09ICJ0cnVlIiBdOyB0aGVuIFwKLSAgICAgICAgICAgICAgICAgICBtYXhzaXplPSQkKChtYXhzaXplIC0gNDA5NiAqIDQwOTYpKTsgXAotICAgICAgICAgICAgICAgZmk7IFwKICAgICAgICAgICAgICAgIGVjaG8gIlRoZSBtYXggaXMgJCQoKCBtYXhzaXplIC8gMTA0ODU3NiApKSBNQi4iIDE+JjIgO1wKICAgICAgICAgICAgZWxzZSBcCiAgICAgICAgICAgICAgICBlY2hvICJUaGUgbWF4IGlzICQkKCggJChCT0FSRF9TWVNURU1JTUFHRV9QQVJUSVRJT05fU0laRSkgLyAxMDQ4NTc2ICkpIE1CLiIgMT4mMiA7XApAQCAtMTQ4NiwxNSArMTU2OSwyMSBAQAogIyBpbWFnZSBzaXplIGNoZWNrIGNhbGN1bGF0aW9uLgogaWZuZXEgKCQoSU5TVEFMTEVEX1JFQ09WRVJZSU1BR0VfVEFSR0VUKSwpCiBpZm5lcSAoJChCT0FSRF9VU0VTX0ZVTExfUkVDT1ZFUllfSU1BR0UpLHRydWUpCitpZmVxICgkKEJPQVJEX0JVSUxEX1NZU1RFTV9ST09UX0lNQUdFKSx0cnVlKQorZGlmZl90b29sIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2JzZGlmZgorZWxzZQorZGlmZl90b29sIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2ltZ2RpZmYKK2VuZGlmCiBpbnRlcm1lZGlhdGVzIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHJlY292ZXJ5X3BhdGNoKQogUkVDT1ZFUllfRlJPTV9CT09UX1BBVENIIDo9ICQoaW50ZXJtZWRpYXRlcykvcmVjb3ZlcnlfZnJvbV9ib290LnAKLSQoUkVDT1ZFUllfRlJPTV9CT09UX1BBVENIKTogJChJTlNUQUxMRURfUkVDT1ZFUllJTUFHRV9UQVJHRVQpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChJTlNUQUxMRURfQk9PVElNQUdFX1RBUkdFVCkgXAotCQkJICAgICAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9pbWdkaWZmIFwKLQkgICAgICAgICAgICAgICAgICAgICAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9ic2RpZmYKKyQoUkVDT1ZFUllfRlJPTV9CT09UX1BBVENIKTogUFJJVkFURV9ESUZGX1RPT0wgOj0gJChkaWZmX3Rvb2wpCiskKFJFQ09WRVJZX0ZST01fQk9PVF9QQVRDSCk6IFwKKwkJJChJTlNUQUxMRURfUkVDT1ZFUllJTUFHRV9UQVJHRVQpIFwKKwkJJChJTlNUQUxMRURfQk9PVElNQUdFX1RBUkdFVCkgXAorCQkkKGRpZmZfdG9vbCkKIAlAZWNobyAiQ29uc3RydWN0IHJlY292ZXJ5IGZyb20gYm9vdCIKIAlta2RpciAtcCAkKGRpciAkQCkKLQlQQVRIPSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpOiQkUEFUSCAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9pbWdkaWZmICQoSU5TVEFMTEVEX0JPT1RJTUFHRV9UQVJHRVQpICQoSU5TVEFMTEVEX1JFQ09WRVJZSU1BR0VfVEFSR0VUKSAkQAorCSQoUFJJVkFURV9ESUZGX1RPT0wpICQoSU5TVEFMTEVEX0JPT1RJTUFHRV9UQVJHRVQpICQoSU5TVEFMTEVEX1JFQ09WRVJZSU1BR0VfVEFSR0VUKSAkQAogZWxzZSAjICQoQk9BUkRfVVNFU19GVUxMX1JFQ09WRVJZX0lNQUdFKSA9PSB0cnVlCiBSRUNPVkVSWV9GUk9NX0JPT1RfUEFUQ0ggOj0gJChJTlNUQUxMRURfUkVDT1ZFUllJTUFHRV9UQVJHRVQpCiBlbmRpZgpAQCAtMTUyOSw2ICsxNjE4LDcgQEAKIGRlZmluZSBidWlsZC1zeXN0ZW10YXJiYWxsLXRhcmdldAogICAkKGNhbGwgcHJldHR5LCJUYXJnZXQgc3lzdGVtIGZzIHRhcmJhbGw6ICQoSU5TVEFMTEVEX1NZU1RFTVRBUkJBTExfVEFSR0VUKSIpCiAgICQoY2FsbCBjcmVhdGUtc3lzdGVtLXZlbmRvci1zeW1saW5rKQorICAkKGNhbGwgY3JlYXRlLXN5c3RlbS1wcm9kdWN0LXN5bWxpbmspCiAgICQoTUtUQVJCQUxMKSAkKEZTX0dFVF9TVEFUUykgXAogICAgICQoUFJPRFVDVF9PVVQpIHN5c3RlbSAkKFBSSVZBVEVfU1lTVEVNX1RBUikgXAogICAgICQoSU5TVEFMTEVEX1NZU1RFTVRBUkJBTExfVEFSR0VUKSAkKFRBUkdFVF9PVVQpCkBAIC0xNjA5LDYgKzE2OTksMTAgQEAKIAkkKGhpZGUpIGNkICQoZGlyICRAKSAmJiB6aXAgLXFyeVggJChub3RkaXIgJEApIFwKIAkJJChUQVJHRVRfQ09QWV9PVVRfVkVORE9SKQogZW5kaWYKK2lmZGVmIEJPQVJEX1BST0RVQ1RJTUFHRV9GSUxFX1NZU1RFTV9UWVBFCisJJChoaWRlKSBjZCAkKGRpciAkQCkgJiYgemlwIC1xcnlYICQobm90ZGlyICRAKSBcCisJCSQoVEFSR0VUX0NPUFlfT1VUX1BST0RVQ1QpCitlbmRpZgogaWZuZXEgKCQoUERLX1BMQVRGT1JNX0pBVkFfWklQX0NPTlRFTlRTKSwpCiAJJChoaWRlKSBjZCAkKE9VVF9ESVIpICYmIHppcCAtcXJ5WCAkKHBhdHN1YnN0ICQoT1VUX0RJUikvJSwlLCRAKSAkKFBES19QTEFURk9STV9KQVZBX1pJUF9DT05URU5UUykKIGVuZGlmCkBAIC0xNjE3LDcgKzE3MTEsOCBAQAogZW5kaWYKIAlAIyBBZGQgZGV4LXByZW9wdCBmaWxlcyBhbmQgY29uZmlnLgogCSQoaWYgJChQUklWQVRFX0RFWF9GSUxFUyksJChoaWRlKSBjZCAkKE9VVF9ESVIpICYmIHppcCAtcXJ5WCAkKHBhdHN1YnN0ICQoT1VUX0RJUikvJSwlLCRAICQoUFJJVkFURV9ERVhfRklMRVMpKSkKLQkkKGhpZGUpIHppcCAtcXJ5WGogJEAgJChQUklWQVRFX09ERVhfQ09ORklHKQorCSQoaGlkZSkgdG91Y2ggJChQUk9EVUNUX09VVCkvcGRrLm1rCisJJChoaWRlKSB6aXAgLXFyeVhqICRAICQoUFJJVkFURV9PREVYX0NPTkZJRykgJChQUk9EVUNUX09VVCkvcGRrLm1rCiAKIC5QSE9OWTogcGxhdGZvcm0KIHBsYXRmb3JtOiAkKElOU1RBTExFRF9QTEFURk9STV9aSVApCkBAIC0xNjgyLDcgKzE3NzcsNyBAQAogICBAbWtkaXIgLXAgJCh1c2VyZGF0YWltYWdlX2ludGVybWVkaWF0ZXMpICYmIHJtIC1yZiAkKHVzZXJkYXRhaW1hZ2VfaW50ZXJtZWRpYXRlcykvdXNlcmRhdGFfaW1hZ2VfaW5mby50eHQKICAgJChjYWxsIGdlbmVyYXRlLXVzZXJpbWFnZS1wcm9wLWRpY3Rpb25hcnksICQodXNlcmRhdGFpbWFnZV9pbnRlcm1lZGlhdGVzKS91c2VyZGF0YV9pbWFnZV9pbmZvLnR4dCwgc2tpcF9mc2NrPXRydWUpCiAgICQoaGlkZSkgUEFUSD0kKGZvcmVhY2ggcCwkKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKSwkKHApOikkJFBBVEggXAotICAgICAgLi9idWlsZC90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkgXAorICAgICAgYnVpbGQvbWFrZS90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkgXAogICAgICAgJChUQVJHRVRfT1VUX0RBVEEpICQodXNlcmRhdGFpbWFnZV9pbnRlcm1lZGlhdGVzKS91c2VyZGF0YV9pbWFnZV9pbmZvLnR4dCAkKElOU1RBTExFRF9VU0VSREFUQUlNQUdFX1RBUkdFVCkgJChUQVJHRVRfT1VUKQogICAkKGhpZGUpICQoY2FsbCBhc3NlcnQtbWF4LWltYWdlLXNpemUsJChJTlNUQUxMRURfVVNFUkRBVEFJTUFHRV9UQVJHRVQpLCQoQk9BUkRfVVNFUkRBVEFJTUFHRV9QQVJUSVRJT05fU0laRSkpCiBlbmRlZgpAQCAtMTc4OSw3ICsxODg0LDcgQEAKICAgQG1rZGlyIC1wICQoY2FjaGVpbWFnZV9pbnRlcm1lZGlhdGVzKSAmJiBybSAtcmYgJChjYWNoZWltYWdlX2ludGVybWVkaWF0ZXMpL2NhY2hlX2ltYWdlX2luZm8udHh0CiAgICQoY2FsbCBnZW5lcmF0ZS11c2VyaW1hZ2UtcHJvcC1kaWN0aW9uYXJ5LCAkKGNhY2hlaW1hZ2VfaW50ZXJtZWRpYXRlcykvY2FjaGVfaW1hZ2VfaW5mby50eHQsIHNraXBfZnNjaz10cnVlKQogICAkKGhpZGUpIFBBVEg9JChmb3JlYWNoIHAsJChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyksJChwKTopJCRQQVRIIFwKLSAgICAgIC4vYnVpbGQvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKKyAgICAgIGJ1aWxkL21ha2UvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKICAgICAgICQoVEFSR0VUX09VVF9DQUNIRSkgJChjYWNoZWltYWdlX2ludGVybWVkaWF0ZXMpL2NhY2hlX2ltYWdlX2luZm8udHh0ICQoSU5TVEFMTEVEX0NBQ0hFSU1BR0VfVEFSR0VUKSAkKFRBUkdFVF9PVVQpCiAgICQoaGlkZSkgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9DQUNIRUlNQUdFX1RBUkdFVCksJChCT0FSRF9DQUNIRUlNQUdFX1BBUlRJVElPTl9TSVpFKSkKIGVuZGVmCkBAIC0xODI0LDcgKzE5MTksOCBAQAogSU5URVJOQUxfU1lTVEVNT1RIRVJJTUFHRV9GSUxFUyA6PSBcCiAgICAgJChmaWx0ZXIgJChUQVJHRVRfT1VUX1NZU1RFTV9PVEhFUikvJSxcCiAgICAgICAkKEFMTF9ERUZBVUxUX0lOU1RBTExFRF9NT0RVTEVTKVwKLSAgICAgICQoQUxMX1BES19GVVNJT05fRklMRVMpKQorICAgICAgJChBTExfUERLX0ZVU0lPTl9GSUxFUykpIFwKKyAgICAkKFBES19GVVNJT05fU1lNTElOS19TVEFNUCkKIAogSU5TVEFMTEVEX0ZJTEVTX0ZJTEVfU1lTVEVNT1RIRVIgOj0gJChQUk9EVUNUX09VVCkvaW5zdGFsbGVkLWZpbGVzLXN5c3RlbS1vdGhlci50eHQKICQoSU5TVEFMTEVEX0ZJTEVTX0ZJTEVfU1lTVEVNT1RIRVIpIDogJChJTlRFUk5BTF9TWVNURU1PVEhFUklNQUdFX0ZJTEVTKSAkKEZJTEVTTElTVCkKQEAgLTE4MzIsNyArMTkyOCw3IEBACiAJQG1rZGlyIC1wICQoZGlyICRAKQogCUBybSAtZiAkQAogCSQoaGlkZSkgJChGSUxFU0xJU1QpICQoVEFSR0VUX09VVF9TWVNURU1fT1RIRVIpID4gJChAOi50eHQ9Lmpzb24pCi0JJChoaWRlKSBidWlsZC90b29scy9maWxlc2xpc3RfdXRpbC5weSAtYyAkKEA6LnR4dD0uanNvbikgPiAkQAorCSQoaGlkZSkgYnVpbGQvbWFrZS90b29scy9maWxlc2xpc3RfdXRpbC5weSAtYyAkKEA6LnR4dD0uanNvbikgPiAkQAogCiBzeXN0ZW1vdGhlcmltYWdlX2ludGVybWVkaWF0ZXMgOj0gXAogICAgICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHN5c3RlbV9vdGhlcikKQEAgLTE4NDUsNyArMTk0MSw3IEBACiAgIEBta2RpciAtcCAkKHN5c3RlbW90aGVyaW1hZ2VfaW50ZXJtZWRpYXRlcykgJiYgcm0gLXJmICQoc3lzdGVtb3RoZXJpbWFnZV9pbnRlcm1lZGlhdGVzKS9zeXN0ZW1fb3RoZXJfaW1hZ2VfaW5mby50eHQKICAgJChjYWxsIGdlbmVyYXRlLXVzZXJpbWFnZS1wcm9wLWRpY3Rpb25hcnksICQoc3lzdGVtb3RoZXJpbWFnZV9pbnRlcm1lZGlhdGVzKS9zeXN0ZW1fb3RoZXJfaW1hZ2VfaW5mby50eHQsIHNraXBfZnNjaz10cnVlKQogICAkKGhpZGUpIFBBVEg9JChmb3JlYWNoIHAsJChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyksJChwKTopJCRQQVRIIFwKLSAgICAgIC4vYnVpbGQvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKKyAgICAgIGJ1aWxkL21ha2UvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKICAgICAgICQoVEFSR0VUX09VVF9TWVNURU1fT1RIRVIpICQoc3lzdGVtb3RoZXJpbWFnZV9pbnRlcm1lZGlhdGVzKS9zeXN0ZW1fb3RoZXJfaW1hZ2VfaW5mby50eHQgJChJTlNUQUxMRURfU1lTVEVNT1RIRVJJTUFHRV9UQVJHRVQpICQoVEFSR0VUX09VVCkKICAgJChoaWRlKSAkKGNhbGwgYXNzZXJ0LW1heC1pbWFnZS1zaXplLCQoSU5TVEFMTEVEX1NZU1RFTU9USEVSSU1BR0VfVEFSR0VUKSwkKEJPQVJEX1NZU1RFTUlNQUdFX1BBUlRJVElPTl9TSVpFKSkKIGVuZGVmCkBAIC0xODcxLDcgKzE5NjcsOCBAQAogSU5URVJOQUxfVkVORE9SSU1BR0VfRklMRVMgOj0gXAogICAgICQoZmlsdGVyICQoVEFSR0VUX09VVF9WRU5ET1IpLyUsXAogICAgICAgJChBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUylcCi0gICAgICAkKEFMTF9QREtfRlVTSU9OX0ZJTEVTKSkKKyAgICAgICQoQUxMX1BES19GVVNJT05fRklMRVMpKSBcCisgICAgJChQREtfRlVTSU9OX1NZTUxJTktfU1RBTVApCiAKICMgcGxhdGZvcm0uemlwIGRlcGVuZHMgb24gJChJTlRFUk5BTF9WRU5ET1JJTUFHRV9GSUxFUykuCiAkKElOU1RBTExFRF9QTEFURk9STV9aSVApIDogJChJTlRFUk5BTF9WRU5ET1JJTUFHRV9GSUxFUykKQEAgLTE4ODIsNyArMTk3OSw3IEBACiAJQG1rZGlyIC1wICQoZGlyICRAKQogCUBybSAtZiAkQAogCSQoaGlkZSkgJChGSUxFU0xJU1QpICQoVEFSR0VUX09VVF9WRU5ET1IpID4gJChAOi50eHQ9Lmpzb24pCi0JJChoaWRlKSBidWlsZC90b29scy9maWxlc2xpc3RfdXRpbC5weSAtYyAkKEA6LnR4dD0uanNvbikgPiAkQAorCSQoaGlkZSkgYnVpbGQvbWFrZS90b29scy9maWxlc2xpc3RfdXRpbC5weSAtYyAkKEA6LnR4dD0uanNvbikgPiAkQAogCiB2ZW5kb3JpbWFnZV9pbnRlcm1lZGlhdGVzIDo9IFwKICAgICAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyx2ZW5kb3IpCkBAIC0xODk1LDcgKzE5OTIsNyBAQAogICAkKGlmICQoQk9BUkRfVkVORE9SX0tFUk5FTF9NT0RVTEVTKSwgXAogICAgICQoY2FsbCBidWlsZC1pbWFnZS1rZXJuZWwtbW9kdWxlcywkKEJPQVJEX1ZFTkRPUl9LRVJORUxfTU9EVUxFUyksJChUQVJHRVRfT1VUX1ZFTkRPUiksdmVuZG9yLywkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyxkZXBtb2RfdmVuZG9yKSkpCiAgICQoaGlkZSkgUEFUSD0kKGZvcmVhY2ggcCwkKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKSwkKHApOikkJFBBVEggXAotICAgICAgLi9idWlsZC90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkgXAorICAgICAgYnVpbGQvbWFrZS90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkgXAogICAgICAgJChUQVJHRVRfT1VUX1ZFTkRPUikgJCh2ZW5kb3JpbWFnZV9pbnRlcm1lZGlhdGVzKS92ZW5kb3JfaW1hZ2VfaW5mby50eHQgJChJTlNUQUxMRURfVkVORE9SSU1BR0VfVEFSR0VUKSAkKFRBUkdFVF9PVVQpCiAgICQoaGlkZSkgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9WRU5ET1JJTUFHRV9UQVJHRVQpLCQoQk9BUkRfVkVORE9SSU1BR0VfUEFSVElUSU9OX1NJWkUpKQogZW5kZWYKQEAgLTE5MTcsNiArMjAxNCw1NiBAQAogZW5kaWYKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBwcm9kdWN0IHBhcnRpdGlvbiBpbWFnZQoraWZkZWYgQk9BUkRfUFJPRFVDVElNQUdFX0ZJTEVfU1lTVEVNX1RZUEUKK0lOVEVSTkFMX1BST0RVQ1RJTUFHRV9GSUxFUyA6PSBcCisgICAgJChmaWx0ZXIgJChUQVJHRVRfT1VUX1BST0RVQ1QpLyUsXAorICAgICAgJChBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUylcCisgICAgICAkKEFMTF9QREtfRlVTSU9OX0ZJTEVTKSkgXAorICAgICQoUERLX0ZVU0lPTl9TWU1MSU5LX1NUQU1QKQorCisjIHBsYXRmb3JtLnppcCBkZXBlbmRzIG9uICQoSU5URVJOQUxfUFJPRFVDVElNQUdFX0ZJTEVTKS4KKyQoSU5TVEFMTEVEX1BMQVRGT1JNX1pJUCkgOiAkKElOVEVSTkFMX1BST0RVQ1RJTUFHRV9GSUxFUykKKworSU5TVEFMTEVEX0ZJTEVTX0ZJTEVfUFJPRFVDVCA6PSAkKFBST0RVQ1RfT1VUKS9pbnN0YWxsZWQtZmlsZXMtcHJvZHVjdC50eHQKKyQoSU5TVEFMTEVEX0ZJTEVTX0ZJTEVfUFJPRFVDVCkgOiAkKElOVEVSTkFMX1BST0RVQ1RJTUFHRV9GSUxFUykgJChGSUxFU0xJU1QpCisJQGVjaG8gSW5zdGFsbGVkIGZpbGUgbGlzdDogJEAKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJQHJtIC1mICRACisJJChoaWRlKSAkKEZJTEVTTElTVCkgJChUQVJHRVRfT1VUX1BST0RVQ1QpID4gJChAOi50eHQ9Lmpzb24pCisJJChoaWRlKSBidWlsZC90b29scy9maWxlc2xpc3RfdXRpbC5weSAtYyAkKEA6LnR4dD0uanNvbikgPiAkQAorCitwcm9kdWN0aW1hZ2VfaW50ZXJtZWRpYXRlcyA6PSBcCisgICAgJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcscHJvZHVjdCkKK0JVSUxUX1BST0RVQ1RJTUFHRV9UQVJHRVQgOj0gJChQUk9EVUNUX09VVCkvcHJvZHVjdC5pbWcKK2RlZmluZSBidWlsZC1wcm9kdWN0aW1hZ2UtdGFyZ2V0CisgICQoY2FsbCBwcmV0dHksIlRhcmdldCBwcm9kdWN0IGZzIGltYWdlOiAkKElOU1RBTExFRF9QUk9EVUNUSU1BR0VfVEFSR0VUKSIpCisgIEBta2RpciAtcCAkKFRBUkdFVF9PVVRfUFJPRFVDVCkKKyAgQG1rZGlyIC1wICQocHJvZHVjdGltYWdlX2ludGVybWVkaWF0ZXMpICYmIHJtIC1yZiAkKHByb2R1Y3RpbWFnZV9pbnRlcm1lZGlhdGVzKS9wcm9kdWN0X2ltYWdlX2luZm8udHh0CisgICQoY2FsbCBnZW5lcmF0ZS11c2VyaW1hZ2UtcHJvcC1kaWN0aW9uYXJ5LCAkKHByb2R1Y3RpbWFnZV9pbnRlcm1lZGlhdGVzKS9wcm9kdWN0X2ltYWdlX2luZm8udHh0LCBza2lwX2ZzY2s9dHJ1ZSkKKyAgJChoaWRlKSBQQVRIPSQoZm9yZWFjaCBwLCQoSU5URVJOQUxfVVNFUklNQUdFU19CSU5BUllfUEFUSFMpLCQocCk6KSQkUEFUSCBcCisgICAgICAuL2J1aWxkL3Rvb2xzL3JlbGVhc2V0b29scy9idWlsZF9pbWFnZS5weSBcCisgICAgICAkKFRBUkdFVF9PVVRfUFJPRFVDVCkgJChwcm9kdWN0aW1hZ2VfaW50ZXJtZWRpYXRlcykvcHJvZHVjdF9pbWFnZV9pbmZvLnR4dCAkKElOU1RBTExFRF9QUk9EVUNUSU1BR0VfVEFSR0VUKSAkKFRBUkdFVF9PVVQpCisgICQoaGlkZSkgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9QUk9EVUNUSU1BR0VfVEFSR0VUKSwkKEJPQVJEX1BST0RVQ1RJTUFHRV9QQVJUSVRJT05fU0laRSkpCitlbmRlZgorCisjIFdlIGp1c3QgYnVpbGQgdGhpcyBkaXJlY3RseSB0byB0aGUgaW5zdGFsbCBsb2NhdGlvbi4KK0lOU1RBTExFRF9QUk9EVUNUSU1BR0VfVEFSR0VUIDo9ICQoQlVJTFRfUFJPRFVDVElNQUdFX1RBUkdFVCkKKyQoSU5TVEFMTEVEX1BST0RVQ1RJTUFHRV9UQVJHRVQpOiAkKElOVEVSTkFMX1VTRVJJTUFHRVNfREVQUykgJChJTlRFUk5BTF9QUk9EVUNUSU1BR0VfRklMRVMpICQoSU5TVEFMTEVEX0ZJTEVTX0ZJTEVfUFJPRFVDVCkgJChCVUlMRF9JTUFHRV9TUkNTKQorCSQoYnVpbGQtcHJvZHVjdGltYWdlLXRhcmdldCkKKworLlBIT05ZOiBwcm9kdWN0aW1hZ2Utbm9kZXBzIHBub2QKK3Byb2R1Y3RpbWFnZS1ub2RlcHMgcG5vZDogfCAkKElOVEVSTkFMX1VTRVJJTUFHRVNfREVQUykKKwkkKGJ1aWxkLXByb2R1Y3RpbWFnZS10YXJnZXQpCisKK3N5bmM6ICQoSU5URVJOQUxfUFJPRFVDVElNQUdFX0ZJTEVTKQorCitlbHNlIGlmZGVmIEJPQVJEX1BSRUJVSUxUX1BST0RVQ1RJTUFHRQorSU5TVEFMTEVEX1BST0RVQ1RJTUFHRV9UQVJHRVQgOj0gJChQUk9EVUNUX09VVCkvcHJvZHVjdC5pbWcKKyQoZXZhbCAkKGNhbGwgY29weS1vbmUtZmlsZSwkKEJPQVJEX1BSRUJVSUxUX1BST0RVQ1RJTUFHRSksJChJTlNUQUxMRURfUFJPRFVDVElNQUdFX1RBUkdFVCkpKQorZW5kaWYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBkdGJvIGltYWdlCiBpZmRlZiBCT0FSRF9QUkVCVUlMVF9EVEJPSU1BR0UKIElOU1RBTExFRF9EVEJPSU1BR0VfVEFSR0VUIDo9ICQoUFJPRFVDVF9PVVQpL2R0Ym8uaW1nCkBAIC0xOTM2LDE3ICsyMDgzLDYgQEAKIAogZW5kaWYKIAotIyBDb252ZXJ0IHRvIGxvd2VyIGNhc2Ugd2l0aG91dCByZXF1aXJpbmcgYSBzaGVsbCwgd2hpY2ggaXNuJ3QgY2FjaGVhYmxlLgotdG8tbG93ZXIgPSAkKHN1YnN0IEEsYSwkKHN1YnN0IEIsYiwkKHN1YnN0IEMsYywkKHN1YnN0IEQsZCwkKHN1YnN0IEUsZSwkKHN1YnN0IEYsZiwkKHN1YnN0IEcsZyxcCi0kKHN1YnN0IEgsaCwkKHN1YnN0IEksaSwkKHN1YnN0IEosaiwkKHN1YnN0IEssaywkKHN1YnN0IEwsbCwkKHN1YnN0IE0sbSwkKHN1YnN0IE4sbiwkKHN1YnN0IE8sbyxcCi0kKHN1YnN0IFAscCwkKHN1YnN0IFEscSwkKHN1YnN0IFIsciwkKHN1YnN0IFMscywkKHN1YnN0IFQsdCwkKHN1YnN0IFUsdSwkKHN1YnN0IFYsdiwkKHN1YnN0IFcsdyxcCi0kKHN1YnN0IFgseCwkKHN1YnN0IFkseSwkKHN1YnN0IFoseiwkMSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpCi0jIENvbnZlcnQgdG8gdXBwZXIgY2FzZSB3aXRob3V0IHJlcXVpcmluZyBhIHNoZWxsLCB3aGljaCBpc24ndCBjYWNoZWFibGUuCi10by11cHBlcj0kKHN1YnN0IGEsQSwkKHN1YnN0IGIsQiwkKHN1YnN0IGMsQywkKHN1YnN0IGQsRCwkKHN1YnN0IGUsRSwkKHN1YnN0IGYsRiwkKHN1YnN0IGcsRyxcCi0kKHN1YnN0IGgsSCwkKHN1YnN0IGksSSwkKHN1YnN0IGosSiwkKHN1YnN0IGssSywkKHN1YnN0IGwsTCwkKHN1YnN0IG0sTSwkKHN1YnN0IG4sTiwkKHN1YnN0IG8sTyxcCi0kKHN1YnN0IHAsUCwkKHN1YnN0IHEsUSwkKHN1YnN0IHIsUiwkKHN1YnN0IHMsUywkKHN1YnN0IHQsVCwkKHN1YnN0IHUsVSwkKHN1YnN0IHYsViwkKHN1YnN0IHcsVyxcCi0kKHN1YnN0IHgsWCwkKHN1YnN0IHksWSwkKHN1YnN0IHosWiwkMSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpCi0KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgdmJtZXRhIGltYWdlCiBpZmVxICgkKEJPQVJEX0FWQl9FTkFCTEUpLHRydWUpCkBAIC0xOTY5LDYgKzIxMDUsOCBAQAogRFRCT19GT09URVJfQVJHUyA6PSBCT0FSRF9BVkJfRFRCT19BRERfSEFTSF9GT09URVJfQVJHUwogU1lTVEVNX0ZPT1RFUl9BUkdTIDo9IEJPQVJEX0FWQl9TWVNURU1fQUREX0hBU0hUUkVFX0ZPT1RFUl9BUkdTCiBWRU5ET1JfRk9PVEVSX0FSR1MgOj0gQk9BUkRfQVZCX1ZFTkRPUl9BRERfSEFTSFRSRUVfRk9PVEVSX0FSR1MKK1JFQ09WRVJZX0ZPT1RFUl9BUkdTIDo9IEJPQVJEX0FWQl9SRUNPVkVSWV9BRERfSEFTSF9GT09URVJfQVJHUworUFJPRFVDVF9GT09URVJfQVJHUyA6PSBCT0FSRF9BVkJfUFJPRFVDVF9BRERfSEFTSFRSRUVfRk9PVEVSX0FSR1MKIAogIyBDaGVjayBhbmQgc2V0IHJlcXVpcmVkIGJ1aWxkIHZhcmlhYmxlcyBmb3IgYSBjaGFpbiBwYXJ0aXRpb24uCiAjICQoMSk6IHRoZSBwYXJ0aXRpb24gdG8gZW5hYmxlIEFWQiBjaGFpbiwgZS5nLiwgQk9PVCBvciBTWVNURU0uCkBAIC0yMDIxLDYgKzIxNTksMTUgQEAKIGVuZGlmCiBlbmRpZgogCitpZmRlZiBJTlNUQUxMRURfUFJPRFVDVElNQUdFX1RBUkdFVAoraWZkZWYgQk9BUkRfQVZCX1BST0RVQ1RfS0VZX1BBVEgKKyQoZXZhbCAkKGNhbGwgY2hlY2stYW5kLXNldC1hdmItY2hhaW4tYXJncyxQUk9EVUNUKSkKK2Vsc2UKK0lOVEVSTkFMX0FWQl9NQUtFX1ZCTUVUQV9JTUFHRV9BUkdTICs9IFwKKyAgICAtLWluY2x1ZGVfZGVzY3JpcHRvcnNfZnJvbV9pbWFnZSAkKElOU1RBTExFRF9QUk9EVUNUSU1BR0VfVEFSR0VUKQorZW5kaWYKK2VuZGlmCisKIGlmZGVmIElOU1RBTExFRF9EVEJPSU1BR0VfVEFSR0VUCiBpZmRlZiBCT0FSRF9BVkJfRFRCT19LRVlfUEFUSAogJChldmFsICQoY2FsbCBjaGVjay1hbmQtc2V0LWF2Yi1jaGFpbi1hcmdzLERUQk8pKQpAQCAtMjAzMCw2ICsyMTc3LDE1IEBACiBlbmRpZgogZW5kaWYKIAoraWZkZWYgSU5TVEFMTEVEX1JFQ09WRVJZSU1BR0VfVEFSR0VUCitpZmRlZiBCT0FSRF9BVkJfUkVDT1ZFUllfS0VZX1BBVEgKKyQoZXZhbCAkKGNhbGwgY2hlY2stYW5kLXNldC1hdmItY2hhaW4tYXJncyxSRUNPVkVSWSkpCitlbHNlCitJTlRFUk5BTF9BVkJfTUFLRV9WQk1FVEFfSU1BR0VfQVJHUyArPSBcCisgICAgLS1pbmNsdWRlX2Rlc2NyaXB0b3JzX2Zyb21faW1hZ2UgJChJTlNUQUxMRURfUkVDT1ZFUllJTUFHRV9UQVJHRVQpCitlbmRpZgorZW5kaWYKKwogQk9BUkRfQVZCX01BS0VfVkJNRVRBX0lNQUdFX0FSR1MgKz0gLS1wYWRkaW5nX3NpemUgNDA5NgogCiAjIEFkZCBrZXJuZWwgY21kbGluZSBkZXNjcmlwdG9yIGZvciBrZXJuZWwgdG8gbW91bnQgc3lzdGVtLmltZyBhcyByb290IHdpdGgKQEAgLTIwNjUsOSArMjIyMSwxNSBAQAogICAkKGlmICQoQk9BUkRfQVZCX1ZFTkRPUl9LRVlfUEFUSCksXAogICAgICQoaGlkZSkgJChBVkJUT09MKSBleHRyYWN0X3B1YmxpY19rZXkgLS1rZXkgJChCT0FSRF9BVkJfVkVORE9SX0tFWV9QQVRIKSBcCiAgICAgICAtLW91dHB1dCAkKDEpL3ZlbmRvci5hdmJwdWJrZXkpCisgICQoaWYgJChCT0FSRF9BVkJfUFJPRFVDVF9LRVlfUEFUSCksXAorICAgICQoaGlkZSkgJChBVkJUT09MKSBleHRyYWN0X3B1YmxpY19rZXkgLS1rZXkgJChCT0FSRF9BVkJfUFJPRFVDVF9LRVlfUEFUSCkgXAorICAgICAgLS1vdXRwdXQgJCgxKS9wcm9kdWN0LmF2YnB1YmtleSkKICAgJChpZiAkKEJPQVJEX0FWQl9EVEJPX0tFWV9QQVRIKSxcCiAgICAgJChoaWRlKSAkKEFWQlRPT0wpIGV4dHJhY3RfcHVibGljX2tleSAtLWtleSAkKEJPQVJEX0FWQl9EVEJPX0tFWV9QQVRIKSBcCiAgICAgICAtLW91dHB1dCAkKDEpL2R0Ym8uYXZicHVia2V5KQorICAkKGlmICQoQk9BUkRfQVZCX1JFQ09WRVJZX0tFWV9QQVRIKSxcCisgICAgJChoaWRlKSAkKEFWQlRPT0wpIGV4dHJhY3RfcHVibGljX2tleSAtLWtleSAkKEJPQVJEX0FWQl9SRUNPVkVSWV9LRVlfUEFUSCkgXAorICAgICAgLS1vdXRwdXQgJCgxKS9yZWNvdmVyeS5hdmJwdWJrZXkpCiBlbmRlZgogCiBkZWZpbmUgYnVpbGQtdmJtZXRhaW1hZ2UtdGFyZ2V0CkBAIC0yMDgzLDEzICsyMjQ1LDI5IEBACiBlbmRlZgogCiBJTlNUQUxMRURfVkJNRVRBSU1BR0VfVEFSR0VUIDo9ICQoQlVJTFRfVkJNRVRBSU1BR0VfVEFSR0VUKQotJChJTlNUQUxMRURfVkJNRVRBSU1BR0VfVEFSR0VUKTogJChBVkJUT09MKSAkKElOU1RBTExFRF9CT09USU1BR0VfVEFSR0VUKSAkKElOU1RBTExFRF9TWVNURU1JTUFHRSkgJChJTlNUQUxMRURfVkVORE9SSU1BR0VfVEFSR0VUKSAkKElOU1RBTExFRF9EVEJPSU1BR0VfVEFSR0VUKSAkKEJPQVJEX0FWQl9LRVlfUEFUSCkKKyQoSU5TVEFMTEVEX1ZCTUVUQUlNQUdFX1RBUkdFVCk6IFwKKwkJJChBVkJUT09MKSBcCisJCSQoSU5TVEFMTEVEX0JPT1RJTUFHRV9UQVJHRVQpIFwKKwkJJChJTlNUQUxMRURfU1lTVEVNSU1BR0UpIFwKKwkJJChJTlNUQUxMRURfVkVORE9SSU1BR0VfVEFSR0VUKSBcCisJCSQoSU5TVEFMTEVEX1BST0RVQ1RJTUFHRV9UQVJHRVQpIFwKKwkJJChJTlNUQUxMRURfRFRCT0lNQUdFX1RBUkdFVCkgXAorCQkkKElOU1RBTExFRF9SRUNPVkVSWUlNQUdFX1RBUkdFVCkgXAorCQkkKEJPQVJEX0FWQl9LRVlfUEFUSCkKIAkkKGJ1aWxkLXZibWV0YWltYWdlLXRhcmdldCkKIAogLlBIT05ZOiB2Ym1ldGFpbWFnZS1ub2RlcHMKIHZibWV0YWltYWdlLW5vZGVwczoKIAkkKGJ1aWxkLXZibWV0YWltYWdlLXRhcmdldCkKIAorZWxzZSBpZmVxICh0cnVlLCQoQk9BUkRfQlVJTERfRElTQUJMRURfVkJNRVRBSU1BR0UpKQorQlVJTFRfRElTQUJMRURfVkJNRVRBSU1BR0UgOj0gJChQUk9EVUNUX09VVCkvdmJtZXRhLmltZworCitJTlNUQUxMRURfVkJNRVRBSU1BR0VfVEFSR0VUIDo9ICQoQlVJTFRfRElTQUJMRURfVkJNRVRBSU1BR0UpCiskKElOU1RBTExFRF9WQk1FVEFJTUFHRV9UQVJHRVQpOiAkKEFWQlRPT0wpCisJJChoaWRlKSAkKEFWQlRPT0wpIG1ha2VfdmJtZXRhX2ltYWdlIFwKKwkgIC0tZmxhZyAyIC0tcGFkZGluZ19zaXplIDQwOTYgLS1vdXRwdXQgJEAKKwogZW5kaWYgIyBCT0FSRF9BVkJfRU5BQkxFCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxNDgsOSArMjMyNiwxMSBAQAogICAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9ta3NxdWFzaGZzIFwKICAgJChIT1NUX09VVF9FWEVDVVRBQkxFUykvbWtmMmZzdXNlcmltZy5zaCBcCiAgICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL21ha2VfZjJmcyBcCisgICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3Nsb2FkX2YyZnMgXAogICAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9zaW1nMmltZyBcCiAgICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2UyZnNjayBcCiAgICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2J1aWxkX3Zlcml0eV90cmVlIFwKKyAgJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZ2VuZXJhdGVfdmVyaXR5X2tleSBcCiAgICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3Zlcml0eV9zaWduZXIgXAogICAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS92ZXJpdHlfdmVyaWZpZXIgXAogICAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hcHBlbmQyc2ltZyBcCkBAIC0yMTc2LDYgKzIzNTYsNyBAQAogICAkKEhPU1RfTElCUkFSWV9QQVRIKS9saWJsb2ckKEhPU1RfU0hMSUJfU1VGRklYKSBcCiAgICQoSE9TVF9MSUJSQVJZX1BBVEgpL2xpYmN1dGlscyQoSE9TVF9TSExJQl9TVUZGSVgpIFwKICAgJChIT1NUX0xJQlJBUllfUEFUSCkvbGlic2VsaW51eCQoSE9TVF9TSExJQl9TVUZGSVgpIFwKKyAgJChIT1NUX0xJQlJBUllfUEFUSCkvbGliY3J5cHRvX3V0aWxzJChIT1NUX1NITElCX1NVRkZJWCkgXAogICAkKEhPU1RfTElCUkFSWV9QQVRIKS9saWJjcnlwdG8taG9zdCQoSE9TVF9TSExJQl9TVUZGSVgpIFwKICAgJChIT1NUX0xJQlJBUllfUEFUSCkvbGliZXh0MmZzLWhvc3QkKEhPU1RfU0hMSUJfU1VGRklYKSBcCiAgICQoSE9TVF9MSUJSQVJZX1BBVEgpL2xpYmV4dDJfYmxraWQtaG9zdCQoSE9TVF9TSExJQl9TVUZGSVgpIFwKQEAgLTIyMTAsMTggKzIzOTEsMTggQEAKICAgc3lzdGVtL2V4dHJhcy92ZXJpdHkvYnVpbGRfdmVyaXR5X21ldGFkYXRhLnB5IFwKICAgc3lzdGVtL2V4dHJhcy9leHQ0X3V0aWxzL21rZTJmcy5jb25mIFwKICAgZXh0ZXJuYWwvYXZiL3Rlc3QvZGF0YS90ZXN0a2V5X3JzYTQwOTYucGVtIFwKLSAgJChzaGVsbCBmaW5kIHN5c3RlbS91cGRhdGVfZW5naW5lL3NjcmlwdHMgLW5hbWUgXCoucHljIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludCB8IHNvcnQpIFwKLSAgJChzaGVsbCBmaW5kIGJ1aWxkL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5IC10eXBlIGYgLW5hbWUgXCoueDUwOS5wZW0gLW8gLW5hbWUgXCoucGs4IC1vIFwKLSAgICAgIC1uYW1lIHZlcml0eV9rZXkgfCBzb3J0KSBcCi0gICQoc2hlbGwgZmluZCBkZXZpY2UgJCh3aWxkY2FyZCB2ZW5kb3IpIC10eXBlIGYgLW5hbWUgXCoucGs4IC1vIC1uYW1lIHZlcmlmaWVkYm9vdFwqIC1vIFwKLSAgICAgIC1uYW1lIFwqLng1MDkucGVtIC1vIC1uYW1lIG9lbVwqLnByb3AgfCBzb3J0KQorICAkKHNvcnQgJChzaGVsbCBmaW5kIHN5c3RlbS91cGRhdGVfZW5naW5lL3NjcmlwdHMgLW5hbWUgXCoucHljIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludCkpIFwKKyAgJChzb3J0ICQoc2hlbGwgZmluZCBidWlsZC90YXJnZXQvcHJvZHVjdC9zZWN1cml0eSAtdHlwZSBmIC1uYW1lIFwqLng1MDkucGVtIC1vIC1uYW1lIFwqLnBrOCAtbyBcCisgICAgICAtbmFtZSB2ZXJpdHlfa2V5KSkgXAorICAkKHNvcnQgJChzaGVsbCBmaW5kIGRldmljZSAkKHdpbGRjYXJkIHZlbmRvcikgLXR5cGUgZiAtbmFtZSBcKi5wazggLW8gLW5hbWUgdmVyaWZpZWRib290XCogLW8gXAorICAgICAgLW5hbWUgXCoueDUwOS5wZW0gLW8gLW5hbWUgb2VtXCoucHJvcCkpCiAKIE9UQVRPT0xTX1JFTEVBU0VUT09MUyA6PSBcCi0gICQoc2hlbGwgZmluZCBidWlsZC90b29scy9yZWxlYXNldG9vbHMgLW5hbWUgXCoucHljIC1wcnVuZSAtbyAtdHlwZSBmIHwgc29ydCkKKyAgJChzb3J0ICQoc2hlbGwgZmluZCBidWlsZC9tYWtlL3Rvb2xzL3JlbGVhc2V0b29scyAtbmFtZSBcKi5weWMgLXBydW5lIC1vIC10eXBlIGYpKQogCiBpZmVxICh0cnVlLCQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1NVUFBPUlRTX1ZCT09UKSkKIE9UQVRPT0xTX0RFUFMgKz0gXAotICAkKHNoZWxsIGZpbmQgZXh0ZXJuYWwvdmJvb3RfcmVmZXJlbmNlL3Rlc3RzL2RldmtleXMgLXR5cGUgZiB8IHNvcnQpCisgICQoc29ydCAkKHNoZWxsIGZpbmQgZXh0ZXJuYWwvdmJvb3RfcmVmZXJlbmNlL3Rlc3RzL2RldmtleXMgLXR5cGUgZikpCiBlbmRpZgogCiAkKEJVSUxUX09UQVRPT0xTX1BBQ0tBR0UpOiAkKE9UQVRPT0xTKSAkKE9UQVRPT0xTX0RFUFMpICQoT1RBVE9PTFNfUkVMRUFTRVRPT0xTKSB8ICQoQUNQKQpAQCAtMjIyOSw3ICsyNDEwLDcgQEAKIAkkKGhpZGUpIHJtIC1yZiAkQCAkKHppcF9yb290KQogCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApICQoemlwX3Jvb3QpL2JpbiAkKHppcF9yb290KS9mcmFtZXdvcmsgJCh6aXBfcm9vdCkvcmVsZWFzZXRvb2xzCiAJJChjYWxsIGNvcHktZmlsZXMtd2l0aC1zdHJ1Y3R1cmUsJChPVEFUT09MUyksJChIT1NUX09VVCkvLCQoemlwX3Jvb3QpKQotCSQoaGlkZSkgJChBQ1ApIC1yIC1kIC1wIGJ1aWxkL3Rvb2xzL3JlbGVhc2V0b29scy8qICQoemlwX3Jvb3QpL3JlbGVhc2V0b29scworCSQoaGlkZSkgJChBQ1ApIC1yIC1kIC1wIGJ1aWxkL21ha2UvdG9vbHMvcmVsZWFzZXRvb2xzLyogJCh6aXBfcm9vdCkvcmVsZWFzZXRvb2xzCiAJJChoaWRlKSBybSAtcmYgJEAgJCh6aXBfcm9vdCkvcmVsZWFzZXRvb2xzLyoucHljCiAJJChoaWRlKSAoY2QgJCh6aXBfcm9vdCkgJiYgemlwIC1xcnlYICQoYWJzcGF0aCAkQCkgKikKIAkkKGhpZGUpIGVjaG8gJChPVEFUT09MU19ERVBTKSB8IHhhcmdzIHppcCAtcXJ5WCAkKGFic3BhdGggJEApPi9kZXYvbnVsbCB8fCB0cnVlCkBAIC0yMjkwLDkgKzI0NzEsNyBAQAogJChCVUlMVF9UQVJHRVRfRklMRVNfUEFDS0FHRSk6IFBSSVZBVEVfVE9PTF9FWFRFTlNJT04gOj0gJCh0b29sX2V4dGVuc2lvbikKIAogaWZlcSAoJChBQl9PVEFfVVBEQVRFUiksdHJ1ZSkKLSMgQnVpbGQgemxpYiBmaW5nZXJwcmludCBpZiB1c2luZyB0aGUgQUIgVXBkYXRlci4KLXVwZGF0ZXJfZGVwIDo9ICQoVEFSR0VUX09VVF9DT01NT05fR0VOKS96bGliX2ZpbmdlcnByaW50Ci11cGRhdGVyX2RlcCArPSBzeXN0ZW0vdXBkYXRlX2VuZ2luZS91cGRhdGVfZW5naW5lLmNvbmYKK3VwZGF0ZXJfZGVwIDo9IHN5c3RlbS91cGRhdGVfZW5naW5lL3VwZGF0ZV9lbmdpbmUuY29uZgogZWxzZQogIyBCdWlsZCBPVEEgdG9vbHMgaWYgbm90IHVzaW5nIHRoZSBBQiBVcGRhdGVyLgogdXBkYXRlcl9kZXAgOj0gJChidWlsdF9vdGFfdG9vbHMpCkBAIC0yMzIyLDcgKzI1MDEsNyBAQAogIyAkMTogcm9vdCBkaXJlY3RvcnkKICMgJDI6IGFkZCBwcmVmaXgKIGRlZmluZSBmc19jb25maWcKLShjZCAkKDEpOyBmaW5kIC4gLXR5cGUgZCB8IHNlZCAncywkJCwvLCc7IGZpbmQgLiBcISAtdHlwZSBkKSB8IGN1dCAtYyAzLSB8IHNvcnQgfCBzZWQgJ3MsXiwkKDIpLCcgfCAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9mc19jb25maWcgLUMgLUQgJChUQVJHRVRfT1VUKSAtUyAkKFNFTElOVVhfRkMpCisoY2QgJCgxKTsgZmluZCAuIC10eXBlIGQgfCBzZWQgJ3MsJCQsLywnOyBmaW5kIC4gXCEgLXR5cGUgZCkgfCBjdXQgLWMgMy0gfCBzb3J0IHwgc2VkICdzLF4sJCgyKSwnIHwgJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZnNfY29uZmlnIC1DIC1EICQoVEFSR0VUX09VVCkgLVMgJChTRUxJTlVYX0ZDKSAtUiAiJCgyKSIKIGVuZGVmCiAKICMgRGVwZW5kaW5nIG9uIHRoZSB2YXJpb3VzIGltYWdlcyBndWFyYW50ZWVzIHRoYXQgdGhlIHVuZGVybHlpbmcKQEAgLTIzMzUsNiArMjUxNCw3IEBACiAJCSQoSU5TVEFMTEVEX1VTRVJEQVRBSU1BR0VfVEFSR0VUKSBcCiAJCSQoSU5TVEFMTEVEX0NBQ0hFSU1BR0VfVEFSR0VUKSBcCiAJCSQoSU5TVEFMTEVEX1ZFTkRPUklNQUdFX1RBUkdFVCkgXAorCQkkKElOU1RBTExFRF9QUk9EVUNUSU1BR0VfVEFSR0VUKSBcCiAJCSQoSU5TVEFMTEVEX1ZCTUVUQUlNQUdFX1RBUkdFVCkgXAogCQkkKElOU1RBTExFRF9EVEJPSU1BR0VfVEFSR0VUKSBcCiAJCSQoSU5URVJOQUxfU1lTVEVNT1RIRVJJTUFHRV9GSUxFUykgXApAQCAtMjM0Myw2ICsyNTIzLDcgQEAKIAkJJChJTlNUQUxMRURfMk5EQk9PVExPQURFUl9UQVJHRVQpIFwKIAkJJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfU1lTVEVNX0JBU0VfRlNfUEFUSCkgXAogCQkkKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9WRU5ET1JfQkFTRV9GU19QQVRIKSBcCisJCSQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1BST0RVQ1RfQkFTRV9GU19QQVRIKSBcCiAJCSQoU0VMSU5VWF9GQykgXAogCQkkKEFQS0NFUlRTX0ZJTEUpIFwKIAkJJChTT09OR19aSVApIFwKQEAgLTIzNTAsMTEgKzI1MzEsMTIgQEAKIAkJJChIT1NUX09VVF9FWEVDVVRBQkxFUykvaW1nZGlmZiBcCiAJCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2JzZGlmZiBcCiAJCSQoQlVJTERfSU1BR0VfU1JDUykgXAotCQkkKElOU1RBTExFRF9WRU5ET1JfTUFOSUZFU1QpIFwKLQkJJChJTlNUQUxMRURfVkVORE9SX01BVFJJWCkgXAorCQkkKEJVSUxUX1ZFTkRPUl9NQU5JRkVTVCkgXAorCQkkKEJVSUxUX1ZFTkRPUl9NQVRSSVgpIFwKIAkJfCAkKEFDUCkKIAlAZWNobyAiUGFja2FnZSB0YXJnZXQgZmlsZXM6ICRAIgogCSQoY2FsbCBjcmVhdGUtc3lzdGVtLXZlbmRvci1zeW1saW5rKQorCSQoY2FsbCBjcmVhdGUtc3lzdGVtLXByb2R1Y3Qtc3ltbGluaykKIAkkKGhpZGUpIHJtIC1yZiAkQCAkQC5saXN0ICQoemlwX3Jvb3QpCiAJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkgJCh6aXBfcm9vdCkKIGlmbmVxICgsJChJTlNUQUxMRURfUkVDT1ZFUllJTUFHRV9UQVJHRVQpJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVCkpKQpAQCAtMjQyMCw2ICsyNjAyLDExIEBACiAJJChoaWRlKSAkKGNhbGwgcGFja2FnZV9maWxlcy1jb3B5LXJvb3QsIFwKIAkJJChUQVJHRVRfT1VUX1ZFTkRPUiksJCh6aXBfcm9vdCkvVkVORE9SKQogZW5kaWYKK2lmZGVmIEJPQVJEX1BST0RVQ1RJTUFHRV9GSUxFX1NZU1RFTV9UWVBFCisJQCMgQ29udGVudHMgb2YgdGhlIHByb2R1Y3QgaW1hZ2UKKwkkKGhpZGUpICQoY2FsbCBwYWNrYWdlX2ZpbGVzLWNvcHktcm9vdCwgXAorCQkkKFRBUkdFVF9PVVRfUFJPRFVDVCksJCh6aXBfcm9vdCkvUFJPRFVDVCkKK2VuZGlmCiBpZmRlZiBJTlNUQUxMRURfU1lTVEVNT1RIRVJJTUFHRV9UQVJHRVQKIAlAIyBDb250ZW50cyBvZiB0aGUgc3lzdGVtX290aGVyIGltYWdlCiAJJChoaWRlKSAkKGNhbGwgcGFja2FnZV9maWxlcy1jb3B5LXJvb3QsIFwKQEAgLTI0NTEsMTggKzI2MzgsMTIgQEAKIGlmZGVmIEJPQVJEX0JPT1RJTUFHRV9QQVJUSVRJT05fU0laRQogCSQoaGlkZSkgZWNobyAiYm9vdF9zaXplPSQoQk9BUkRfQk9PVElNQUdFX1BBUlRJVElPTl9TSVpFKSIgPj4gJCh6aXBfcm9vdCkvTUVUQS9taXNjX2luZm8udHh0CiBlbmRpZgotaWZlcSAoJChCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QpLCkKLQkkKGhpZGUpIGVjaG8gInJlY292ZXJ5X2FzX2Jvb3Q9JChCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QpIiA+PiAkKHppcF9yb290KS9NRVRBL21pc2NfaW5mby50eHQKLWVuZGlmCiBpZmVxICgkKElOU1RBTExFRF9SRUNPVkVSWUlNQUdFX1RBUkdFVCksKQogCSQoaGlkZSkgZWNobyAibm9fcmVjb3Zlcnk9dHJ1ZSIgPj4gJCh6aXBfcm9vdCkvTUVUQS9taXNjX2luZm8udHh0CiBlbmRpZgogaWZkZWYgQk9BUkRfUkVDT1ZFUllJTUFHRV9QQVJUSVRJT05fU0laRQogCSQoaGlkZSkgZWNobyAicmVjb3Zlcnlfc2l6ZT0kKEJPQVJEX1JFQ09WRVJZSU1BR0VfUEFSVElUSU9OX1NJWkUpIiA+PiAkKHppcF9yb290KS9NRVRBL21pc2NfaW5mby50eHQKIGVuZGlmCi1pZmRlZiBCT0FSRF9IQVNfRVhUNF9SRVNFUlZFRF9CTE9DS1MKLQkkKGhpZGUpIGVjaG8gImhhc19leHQ0X3Jlc2VydmVkX2Jsb2Nrcz0kKEJPQVJEX0hBU19FWFQ0X1JFU0VSVkVEX0JMT0NLUykiID4+ICQoemlwX3Jvb3QpL01FVEEvbWlzY19pbmZvLnR4dAotZW5kaWYKIGlmZGVmIFRBUkdFVF9SRUNPVkVSWV9GU1RZUEVfTU9VTlRfT1BUSU9OUwogCUAjIFRBUkdFVF9SRUNPVkVSWV9GU1RZUEVfTU9VTlRfT1BUSU9OUyBjYW4gYmUgZW1wdHkgdG8gaW5kaWNhdGUgdGhhdCBub3RoaW5nIGJ1dCBkZWZhdWx0cyBzaG91bGQgYmUgdXNlZC4KIAkkKGhpZGUpIGVjaG8gInJlY292ZXJ5X21vdW50X29wdGlvbnM9JChUQVJHRVRfUkVDT1ZFUllfRlNUWVBFX01PVU5UX09QVElPTlMpIiA+PiAkKHppcF9yb290KS9NRVRBL21pc2NfaW5mby50eHQKQEAgLTI0OTAsNiArMjY3MSwxMCBAQAogCSQoaGlkZSkgY3AgJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfVkVORE9SX0JBU0VfRlNfUEFUSCkgXAogCSAgJCh6aXBfcm9vdCkvTUVUQS8kKG5vdGRpciAkKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9WRU5ET1JfQkFTRV9GU19QQVRIKSkKIGVuZGlmCitpZm5lcSAoJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfUFJPRFVDVF9CQVNFX0ZTX1BBVEgpLCkKKwkkKGhpZGUpIGNwICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1BST0RVQ1RfQkFTRV9GU19QQVRIKSBcCisJICAkKHppcF9yb290KS9NRVRBLyQobm90ZGlyICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1BST0RVQ1RfQkFTRV9GU19QQVRIKSkKK2VuZGlmCiBpZm5lcSAoJChzdHJpcCAkKFNBTklUSVpFX1RBUkdFVCkpLCkKIAkjIFdlIG5lZWQgdG8gY3JlYXRlIHVzZXJkYXRhLmltZyB3aXRoIHJlYWwgZGF0YSBiZWNhdXNlIHRoZSBpbnN0cnVtZW50ZWQgbGlicmFyaWVzIGFyZSBpbiB1c2VyZGF0YS5pbWcuCiAJJChoaWRlKSBlY2hvICJ1c2VyZGF0YV9pbWdfd2l0aF9kYXRhPXRydWUiID4+ICQoemlwX3Jvb3QpL01FVEEvbWlzY19pbmZvLnR4dApAQCAtMjUwOCw2ICsyNjkzLDEyIEBACiAJJChoaWRlKSBlY2hvICJhdmJfYm9vdF9hbGdvcml0aG09JChCT0FSRF9BVkJfQk9PVF9BTEdPUklUSE0pIiA+PiAkKHppcF9yb290KS9NRVRBL21pc2NfaW5mby50eHQKIAkkKGhpZGUpIGVjaG8gImF2Yl9ib290X3JvbGxiYWNrX2luZGV4X2xvY2F0aW9uPSQoQk9BUkRfQVZCX0JPT1RfUk9MTEJBQ0tfSU5ERVhfTE9DQVRJT04pIiA+PiAkKHppcF9yb290KS9NRVRBL21pc2NfaW5mby50eHQKIGVuZGlmICMgQk9BUkRfQVZCX0JPT1RfS0VZX1BBVEgKKwkkKGhpZGUpIGVjaG8gImF2Yl9yZWNvdmVyeV9hZGRfaGFzaF9mb290ZXJfYXJncz0kKEJPQVJEX0FWQl9SRUNPVkVSWV9BRERfSEFTSF9GT09URVJfQVJHUykiID4+ICQoemlwX3Jvb3QpL01FVEEvbWlzY19pbmZvLnR4dAoraWZkZWYgQk9BUkRfQVZCX1JFQ09WRVJZX0tFWV9QQVRICisJJChoaWRlKSBlY2hvICJhdmJfcmVjb3Zlcnlfa2V5X3BhdGg9JChCT0FSRF9BVkJfUkVDT1ZFUllfS0VZX1BBVEgpIiA+PiAkKHppcF9yb290KS9NRVRBL21pc2NfaW5mby50eHQKKwkkKGhpZGUpIGVjaG8gImF2Yl9yZWNvdmVyeV9hbGdvcml0aG09JChCT0FSRF9BVkJfUkVDT1ZFUllfQUxHT1JJVEhNKSIgPj4gJCh6aXBfcm9vdCkvTUVUQS9taXNjX2luZm8udHh0CisJJChoaWRlKSBlY2hvICJhdmJfcmVjb3Zlcnlfcm9sbGJhY2tfaW5kZXhfbG9jYXRpb249JChCT0FSRF9BVkJfUkVDT1ZFUllfUk9MTEJBQ0tfSU5ERVhfTE9DQVRJT04pIiA+PiAkKHppcF9yb290KS9NRVRBL21pc2NfaW5mby50eHQKK2VuZGlmICMgQk9BUkRfQVZCX1JFQ09WRVJZX0tFWV9QQVRICiBlbmRpZiAjIEJPQVJEX0FWQl9FTkFCTEUKIGlmZGVmIEJPQVJEX0JQVF9JTlBVVF9GSUxFUwogCSQoaGlkZSkgZWNobyAiYm9hcmRfYnB0X2VuYWJsZT10cnVlIiA+PiAkKHppcF9yb290KS9NRVRBL21pc2NfaW5mby50eHQKQEAgLTI1MjAsMTIgKzI3MTEsMTEgQEAKIAkkKGNhbGwgZ2VuZXJhdGUtdXNlcmltYWdlLXByb3AtZGljdGlvbmFyeSwgJCh6aXBfcm9vdCkvTUVUQS9taXNjX2luZm8udHh0KQogaWZuZXEgKCQoSU5TVEFMTEVEX1JFQ09WRVJZSU1BR0VfVEFSR0VUKSwpCiAJJChoaWRlKSBQQVRIPSQoZm9yZWFjaCBwLCQoSU5URVJOQUxfVVNFUklNQUdFU19CSU5BUllfUEFUSFMpLCQocCk6KSQkUEFUSCBNS0JPT1RJTUc9JChNS0JPT1RJTUcpIFwKLQkgICAgLi9idWlsZC90b29scy9yZWxlYXNldG9vbHMvbWFrZV9yZWNvdmVyeV9wYXRjaCAkKHppcF9yb290KSAkKHppcF9yb290KQorCSAgICBidWlsZC9tYWtlL3Rvb2xzL3JlbGVhc2V0b29scy9tYWtlX3JlY292ZXJ5X3BhdGNoICQoemlwX3Jvb3QpICQoemlwX3Jvb3QpCiBlbmRpZgogaWZlcSAoJChBQl9PVEFfVVBEQVRFUiksdHJ1ZSkKIAlAIyBXaGVuIHVzaW5nIHRoZSBBL0IgdXBkYXRlciwgaW5jbHVkZSB0aGUgdXBkYXRlciBjb25maWcgZmlsZXMgaW4gdGhlIHppcC4KIAkkKGhpZGUpIGNwICQoVE9QRElSKXN5c3RlbS91cGRhdGVfZW5naW5lL3VwZGF0ZV9lbmdpbmUuY29uZiAkKHppcF9yb290KS9NRVRBL3VwZGF0ZV9lbmdpbmVfY29uZmlnLnR4dAotCSQoaGlkZSkgY3AgJChUQVJHRVRfT1VUX0NPTU1PTl9HRU4pL3psaWJfZmluZ2VycHJpbnQgJCh6aXBfcm9vdCkvTUVUQS96bGliX2ZpbmdlcnByaW50LnR4dAogCSQoaGlkZSkgZm9yIHBhcnQgaW4gJChBQl9PVEFfUEFSVElUSU9OUyk7IGRvIFwKIAkgIGVjaG8gIiQke3BhcnR9IiA+PiAkKHppcF9yb290KS9NRVRBL2FiX3BhcnRpdGlvbnMudHh0OyBcCiAJZG9uZQpAQCAtMjU2OCw2ICsyNzU4LDEwIEBACiAJJChoaWRlKSBta2RpciAtcCAkKHppcF9yb290KS9JTUFHRVMKIAkkKGhpZGUpIGNwICQoSU5TVEFMTEVEX1ZFTkRPUklNQUdFX1RBUkdFVCkgJCh6aXBfcm9vdCkvSU1BR0VTLwogZW5kaWYKK2lmZGVmIEJPQVJEX1BSRUJVSUxUX1BST0RVQ1RJTUFHRQorCSQoaGlkZSkgbWtkaXIgLXAgJCh6aXBfcm9vdCkvSU1BR0VTCisJJChoaWRlKSBjcCAkKElOU1RBTExFRF9QUk9EVUNUSU1BR0VfVEFSR0VUKSAkKHppcF9yb290KS9JTUFHRVMvCitlbmRpZgogaWZkZWYgQk9BUkRfUFJFQlVJTFRfQk9PVElNQUdFCiAJJChoaWRlKSBta2RpciAtcCAkKHppcF9yb290KS9JTUFHRVMKIAkkKGhpZGUpIGNwICQoSU5TVEFMTEVEX0JPT1RJTUFHRV9UQVJHRVQpICQoemlwX3Jvb3QpL0lNQUdFUy8KQEAgLTI1OTgsMTggKzI3OTIsMjUgQEAKIGlmZGVmIEJPQVJEX1ZFTkRPUklNQUdFX0ZJTEVfU1lTVEVNX1RZUEUKIAkkKGhpZGUpICQoY2FsbCBmc19jb25maWcsJCh6aXBfcm9vdCkvVkVORE9SLHZlbmRvci8pID4gJCh6aXBfcm9vdCkvTUVUQS92ZW5kb3JfZmlsZXN5c3RlbV9jb25maWcudHh0CiBlbmRpZgotaWZlcSAoJChCT0FSRF9CVUlMRF9TWVNURU1fUk9PVF9JTUFHRSksdHJ1ZSkKLQkkKGhpZGUpICQoY2FsbCBmc19jb25maWcsJCh6aXBfcm9vdCkvUk9PVCwpID4gJCh6aXBfcm9vdCkvTUVUQS9yb290X2ZpbGVzeXN0ZW1fY29uZmlnLnR4dAoraWZkZWYgQk9BUkRfUFJPRFVDVElNQUdFX0ZJTEVfU1lTVEVNX1RZUEUKKwkkKGhpZGUpICQoY2FsbCBmc19jb25maWcsJCh6aXBfcm9vdCkvUFJPRFVDVCxwcm9kdWN0LykgPiAkKHppcF9yb290KS9NRVRBL3Byb2R1Y3RfZmlsZXN5c3RlbV9jb25maWcudHh0CiBlbmRpZgoraWZlcSAoJChCT0FSRF9CVUlMRF9TWVNURU1fUk9PVF9JTUFHRSksdHJ1ZSkKKwlAIyBXaGVuIHVzaW5nIEJPQVJEX0JVSUxEX1NZU1RFTV9ST09UX0lNQUdFLCBST09UIGFsd2F5cyBjb250YWlucyB0aGUgZmlsZXMgZm9yIHRoZSByb290IHVuZGVyCisJQCMgbm9ybWFsIGJvb3QuIEJPT1QvUkFNRElTSyBleGlzdHMgb25seSBpZiBhZGRpdGlvbmFsbHkgdXNpbmcgQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09ULgorCSQoaGlkZSkgJChjYWxsIGZzX2NvbmZpZywkKHppcF9yb290KS9ST09ULCkgPiAkKHppcF9yb290KS9NRVRBL3Jvb3RfZmlsZXN5c3RlbV9jb25maWcudHh0CitpZmVxICgkKEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVCksdHJ1ZSkKIAkkKGhpZGUpICQoY2FsbCBmc19jb25maWcsJCh6aXBfcm9vdCkvQk9PVC9SQU1ESVNLLCkgPiAkKHppcF9yb290KS9NRVRBL2Jvb3RfZmlsZXN5c3RlbV9jb25maWcudHh0CitlbmRpZgorZWxzZSAjIEJPQVJEX0JVSUxEX1NZU1RFTV9ST09UX0lNQUdFICE9IHRydWUKKwkkKGhpZGUpICQoY2FsbCBmc19jb25maWcsJCh6aXBfcm9vdCkvQk9PVC9SQU1ESVNLLCkgPiAkKHppcF9yb290KS9NRVRBL2Jvb3RfZmlsZXN5c3RlbV9jb25maWcudHh0CitlbmRpZgogaWZuZXEgKCQoSU5TVEFMTEVEX1JFQ09WRVJZSU1BR0VfVEFSR0VUKSwpCiAJJChoaWRlKSAkKGNhbGwgZnNfY29uZmlnLCQoemlwX3Jvb3QpL1JFQ09WRVJZL1JBTURJU0ssKSA+ICQoemlwX3Jvb3QpL01FVEEvcmVjb3ZlcnlfZmlsZXN5c3RlbV9jb25maWcudHh0CiBlbmRpZgogaWZkZWYgSU5TVEFMTEVEX1NZU1RFTU9USEVSSU1BR0VfVEFSR0VUCiAJJChoaWRlKSAkKGNhbGwgZnNfY29uZmlnLCQoemlwX3Jvb3QpL1NZU1RFTV9PVEhFUixzeXN0ZW0vKSA+ICQoemlwX3Jvb3QpL01FVEEvc3lzdGVtX290aGVyX2ZpbGVzeXN0ZW1fY29uZmlnLnR4dAogZW5kaWYKLQotaWZlcSAoJChQUk9EVUNUX0ZVTExfVFJFQkxFKSx0cnVlKQogCUAjIE1ldGFkYXRhIGZvciBjb21wYXRpYmlsaXR5IHZlcmlmaWNhdGlvbi4KIAkkKGhpZGUpIGNwICQoQlVJTFRfU1lTVEVNX01BTklGRVNUKSAkKHppcF9yb290KS9NRVRBL3N5c3RlbV9tYW5pZmVzdC54bWwKIAkkKGhpZGUpIGNwICQoQlVJTFRfU1lTVEVNX0NPTVBBVElCSUxJVFlfTUFUUklYKSAkKHppcF9yb290KS9NRVRBL3N5c3RlbV9tYXRyaXgueG1sCkBAIC0yNjE5LDEwICsyODIwLDkgQEAKIGlmZGVmIEJVSUxUX1ZFTkRPUl9NQVRSSVgKIAkkKGhpZGUpIGNwICQoQlVJTFRfVkVORE9SX01BVFJJWCkgJCh6aXBfcm9vdCkvTUVUQS92ZW5kb3JfbWF0cml4LnhtbAogZW5kaWYKLWVuZGlmCiAKIAkkKGhpZGUpIFBBVEg9JChmb3JlYWNoIHAsJChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyksJChwKTopJCRQQVRIIE1LQk9PVElNRz0kKE1LQk9PVElNRykgXAotCSAgICAuL2J1aWxkL3Rvb2xzL3JlbGVhc2V0b29scy9hZGRfaW1nX3RvX3RhcmdldF9maWxlcyAtYSAtdiAtcCAkKEhPU1RfT1VUKSAkKHppcF9yb290KQorCSAgICBidWlsZC9tYWtlL3Rvb2xzL3JlbGVhc2V0b29scy9hZGRfaW1nX3RvX3RhcmdldF9maWxlcyAtYSAtdiAtcCAkKEhPU1RfT1VUKSAkKHppcF9yb290KQogCUAjIFppcCBldmVyeXRoaW5nIHVwLCBwcmVzZXJ2aW5nIHN5bWxpbmtzIGFuZCBwbGFjaW5nIE1FVEEvIGZpbGVzIGZpcnN0IHRvCiAJQCMgaGVscCBlYXJseSB2YWxpZGF0aW9uIG9mIHRoZSAuemlwIGZpbGUgd2hpbGUgdXBsb2FkaW5nIGl0LgogCSQoaGlkZSkgZmluZCAkKHppcF9yb290KS9NRVRBIHwgc29ydCA+JEAubGlzdApAQCAtMjY2NiwxMCArMjg2NiwxMCBAQAogZW5kaWYKIAogJChJTlRFUk5BTF9PVEFfUEFDS0FHRV9UQVJHRVQpOiAkKEJVSUxUX1RBUkdFVF9GSUxFU19QQUNLQUdFKSBcCi0JCWJ1aWxkL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfZnJvbV90YXJnZXRfZmlsZXMKKwkJYnVpbGQvbWFrZS90b29scy9yZWxlYXNldG9vbHMvb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzCiAJQGVjaG8gIlBhY2thZ2UgT1RBOiAkQCIKIAkkKGhpZGUpIFBBVEg9JChmb3JlYWNoIHAsJChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyksJChwKTopJCRQQVRIIE1LQk9PVElNRz0kKE1LQk9PVElNRykgXAotCSAgIC4vYnVpbGQvdG9vbHMvcmVsZWFzZXRvb2xzL290YV9mcm9tX3RhcmdldF9maWxlcyAtdiBcCisJICAgYnVpbGQvbWFrZS90b29scy9yZWxlYXNldG9vbHMvb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzIC12IFwKIAkgICAtLWJsb2NrIFwKIAkgICAtLWV4dHJhY3RlZF9pbnB1dF90YXJnZXRfZmlsZXMgJChwYXRzdWJzdCAlLnppcCwlLCQoQlVJTFRfVEFSR0VUX0ZJTEVTX1BBQ0tBR0UpKSBcCiAJICAgLXAgJChIT1NUX09VVCkgXApAQCAtMjcxOCw2ICsyOTE4LDcgQEAKIAkJJChJTlNUQUxMRURfQk9PVElNQUdFX1RBUkdFVCkgXAogCQkkKElOU1RBTExFRF9VU0VSREFUQUlNQUdFX1RBUkdFVCkgXAogCQkkKElOU1RBTExFRF9WRU5ET1JJTUFHRV9UQVJHRVQpIFwKKwkJJChJTlNUQUxMRURfUFJPRFVDVElNQUdFX1RBUkdFVCkgXAogCQkkKHVwZGF0ZXJfZGVwKQogZW5kaWYKICQoU1lNQk9MU19aSVApOiBQUklWQVRFX0xJU1RfRklMRSA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyxzeW1ib2xzKS9maWxlbGlzdApAQCAtMjc0MCw3ICsyOTQxLDggQEAKICQoQ09WRVJBR0VfWklQKTogJChJTlNUQUxMRURfU1lTVEVNSU1BR0UpIFwKIAkJJChJTlNUQUxMRURfQk9PVElNQUdFX1RBUkdFVCkgXAogCQkkKElOU1RBTExFRF9VU0VSREFUQUlNQUdFX1RBUkdFVCkgXAotCQkkKElOU1RBTExFRF9WRU5ET1JJTUFHRV9UQVJHRVQpCisJCSQoSU5TVEFMTEVEX1ZFTkRPUklNQUdFX1RBUkdFVCkgXAorCQkkKElOU1RBTExFRF9QUk9EVUNUSU1BR0VfVEFSR0VUKQogZW5kaWYKICQoQ09WRVJBR0VfWklQKTogUFJJVkFURV9MSVNUX0ZJTEUgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcsY292ZXJhZ2UpL2ZpbGVsaXN0CiAkKENPVkVSQUdFX1pJUCk6ICQoU09PTkdfWklQKQpAQCAtMjg0MCw2ICszMDQyLDE1IEBACiB2ZW5kb3JpbWFnZTogJChJTlNUQUxMRURfUUVNVV9WRU5ET1JJTUFHRSkKIGRyb2lkY29yZTogJChJTlNUQUxMRURfUUVNVV9WRU5ET1JJTUFHRSkKIGVuZGlmCitpZmVxICgkKEJPQVJEX1VTRVNfUFJPRFVDVElNQUdFKSx0cnVlKQorSU5TVEFMTEVEX1FFTVVfUFJPRFVDVElNQUdFIDo9ICQoUFJPRFVDVF9PVVQpL3Byb2R1Y3QtcWVtdS5pbWcKKyQoSU5TVEFMTEVEX1FFTVVfUFJPRFVDVElNQUdFKTogJChJTlNUQUxMRURfUFJPRFVDVElNQUdFX1RBUkdFVCkgJChNS19RRU1VX0lNQUdFX1NIKSAkKFNHRElTS19IT1NUKQorCUBlY2hvIENyZWF0ZSBwcm9kdWN0LXFlbXUuaW1nCisJKGV4cG9ydCBTR0RJU0s9JChTR0RJU0tfSE9TVCk7ICQoTUtfUUVNVV9JTUFHRV9TSCkgJHtQUk9EVUNUX09VVH0vcHJvZHVjdC5pbWcpCisKK3Byb2R1Y3RpbWFnZTogJChJTlNUQUxMRURfUUVNVV9QUk9EVUNUSU1BR0UpCitkcm9pZGNvcmU6ICQoSU5TVEFMTEVEX1FFTVVfUFJPRFVDVElNQUdFKQorZW5kaWYKIGVuZGlmCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBlbXVsYXRvciBwYWNrYWdlCkBAIC0zMDQ2LDMgKzMyNTcsOSBAQAogaWZuZXEgKCQoc2RrX3JlcG9fZ29hbCksKQogaW5jbHVkZSAkKFRPUERJUilkZXZlbG9wbWVudC9idWlsZC90b29scy9zZGtfcmVwby5tawogZW5kaWYKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIGxzZHVtcCBwYXRocworRklORF9MU0RVTVBTX0ZJTEUgOj0gJChQUk9EVUNUX09VVCkvbHNkdW1wX3BhdGhzLnR4dAorJChGSU5EX0xTRFVNUFNfRklMRSkgOiAkKExTRFVNUF9QQVRIUykKKwkkKGhpZGUpIHJtIC1yZiAkQCAmJiBlY2hvICIkXiIgPiAkQApkaWZmIC0tZ2l0IGEvY29yZS9hYXB0Mi5tayBiL2NvcmUvYWFwdDIubWsKaW5kZXggYzU4MmUzMC4uN2Q5ZDhjZSAxMDA2NDQKLS0tIGEvY29yZS9hYXB0Mi5taworKysgYi9jb3JlL2FhcHQyLm1rCkBAIC0xMiw2ICsxMiw3IEBACiAjIC0gcHJvZ3VhcmRfb3B0aW9uc19maWxlCiAjIC0gbXlfZ2VuZXJhdGVkX3Jlc19kaXJzOiBSZXNvdXJjZXMgZ2VuZXJhdGVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgd2UgaGF2ZSB0byBjb21waWxlIHRoZW0gaW4gYSBzaW5nbGUgcnVuIG9mIGFhcHQyLgogIyAtIG15X2dlbmVyYXRlZF9yZXNfZGlyc19kZXBzOiB0aGUgZGVwZW5kZW5jeSB0byB1c2UgZm9yIG15X2dlbmVyYXRlZF9yZXNfZGlycy4KKyMgLSBteV9nZW5lcmF0ZWRfcmVzX3ppcHM6IFppcCBmaWxlcyBjb250YWluaW5nIHJlc291cmNlcwogIyAtIG15X2Fwa19zcGxpdF9jb25maWdzOiBUaGUgY29uZmlndXJhdGlvbnMgZm9yIHdoaWNoIHRvIGdlbmVyYXRlIHNwbGl0cy4KICMgLSBidWlsdF9hcGtfc3BsaXRzOiBUaGUgcGF0aHMgd2hlcmUgQUFQVCBzaG91bGQgZ2VuZXJhdGUgdGhlIHNwbGl0cy4KICMKQEAgLTM1LDcgKzM2LDcgQEAKICAgICAkKGV2YWwgJChjYWxsIGFhcHQyLWNvbXBpbGUtb25lLXJlc291cmNlLWZpbGUtcnVsZSwkKHIpLCQobykpKVwKICAgICAkKG8pKQogCi1teV9nZW5lcmF0ZWRfcmVzb3VyY2VzX2ZsYXRhIDo9CitteV9yZXNvdXJjZXNfZmxhdGEgOj0KICMgQ29tcGlsZSBnZW5lcmF0ZWQgcmVzb3VyY2VzCiBpZm5lcSAoJChteV9nZW5lcmF0ZWRfcmVzX2RpcnMpLCkKIG15X2dlbmVyYXRlZF9yZXNvdXJjZXNfZmxhdGEgOj0gJChteV9jb21waWxlZF9yZXNfYmFzZV9kaXIpL2dlbl9yZXMuZmxhdGEKQEAgLTQ0LDEyICs0NSwyMyBAQAogCUBlY2hvICJBQVBUMiBjb21waWxlICRAIDwtICQoUFJJVkFURV9TT1VSQ0VfUkVTX0RJUlMpIgogCSQoY2FsbCBhYXB0Mi1jb21waWxlLXJlc291cmNlLWRpcnMpCiAKLW15X2dlbmVyYXRlZF9yZXNvdXJjZXNfZmxhdGEgKz0gJChteV9nZW5lcmF0ZWRfcmVzb3VyY2VzX2ZsYXRhKQorbXlfcmVzb3VyY2VzX2ZsYXRhICs9ICQobXlfZ2VuZXJhdGVkX3Jlc291cmNlc19mbGF0YSkKK2VuZGlmCisKKyMgQ29tcGlsZSB6aXBwZWQgcmVzb3VyY2VzCitpZm5lcSAoJChteV9nZW5lcmF0ZWRfcmVzX3ppcHMpLCkKK215X3ppcHBlZF9yZXNvdXJjZXNfZmxhdGEgOj0gJChteV9jb21waWxlZF9yZXNfYmFzZV9kaXIpL3ppcF9yZXMuZmxhdGEKKyQobXlfemlwcGVkX3Jlc291cmNlc19mbGF0YSk6IFBSSVZBVEVfU09VUkNFX1JFU19aSVBTIDo9ICQobXlfZ2VuZXJhdGVkX3Jlc196aXBzKQorJChteV96aXBwZWRfcmVzb3VyY2VzX2ZsYXRhKSA6ICQobXlfZ2VuZXJhdGVkX3Jlc19kZXBzKSAkKEFBUFQyKSAkKFpJUFNZTkMpCisJQGVjaG8gIkFBUFQyIGNvbXBpbGUgJEAgPC0gJChQUklWQVRFX1NPVVJDRV9SRVNfWklQUykiCisJJChjYWxsIGFhcHQyLWNvbXBpbGUtcmVzb3VyY2UtemlwcykKKworbXlfcmVzb3VyY2VzX2ZsYXRhICs9ICQobXlfemlwcGVkX3Jlc291cmNlc19mbGF0YSkKIGVuZGlmCiAKICMgQWx3YXlzIHNldCAtLXBzZXVkby1sb2NhbGl6ZSwgaXQgd2lsbCBiZSBzdHJpcHBlZCBvdXQgbGF0ZXIgZm9yIHJlbGVhc2UKICMgYnVpbGRzIHRoYXQgZG9uJ3Qgd2FudCBpdC4KLSQobXlfcmVzX3Jlc291cmNlc19mbGF0KSAkKG15X292ZXJsYXlfcmVzb3VyY2VzX2ZsYXQpICQobXlfZ2VuZXJhdGVkX3Jlc291cmNlc19mbGF0YSk6IFwKKyQobXlfcmVzX3Jlc291cmNlc19mbGF0KSAkKG15X292ZXJsYXlfcmVzb3VyY2VzX2ZsYXQpICQobXlfcmVzb3VyY2VzX2ZsYXRhKTogXAogICBQUklWQVRFX0FBUFQyX0NGTEFHUyA6PSAtLXBzZXVkby1sb2NhbGl6ZQogCiBteV9zdGF0aWNfbGlicmFyeV9yZXNvdXJjZXMgOj0gJChmb3JlYWNoIGwsICQoY2FsbCByZXZlcnNlLWxpc3QsJChMT0NBTF9TVEFUSUNfQU5EUk9JRF9MSUJSQVJJRVMpKSxcCkBAIC02Nyw3ICs3OSw3IEBACiBlbmRpZgogCiAkKG15X3Jlc19wYWNrYWdlKTogUFJJVkFURV9SRVNfRkxBVCA6PSAkKG15X3Jlc19yZXNvdXJjZXNfZmxhdCkKLSQobXlfcmVzX3BhY2thZ2UpOiBQUklWQVRFX09WRVJMQVlfRkxBVCA6PSAkKG15X3N0YXRpY19saWJyYXJ5X3Jlc291cmNlcykgJChteV9nZW5lcmF0ZWRfcmVzb3VyY2VzX2ZsYXRhKSAkKG15X292ZXJsYXlfcmVzb3VyY2VzX2ZsYXQpCiskKG15X3Jlc19wYWNrYWdlKTogUFJJVkFURV9PVkVSTEFZX0ZMQVQgOj0gJChteV9zdGF0aWNfbGlicmFyeV9yZXNvdXJjZXMpICQobXlfcmVzb3VyY2VzX2ZsYXRhKSAkKG15X292ZXJsYXlfcmVzb3VyY2VzX2ZsYXQpCiAkKG15X3Jlc19wYWNrYWdlKTogUFJJVkFURV9TSEFSRURfQU5EUk9JRF9MSUJSQVJJRVMgOj0gJChteV9zaGFyZWRfbGlicmFyeV9yZXNvdXJjZXMpCiAkKG15X3Jlc19wYWNrYWdlKTogUFJJVkFURV9QUk9HVUFSRF9PUFRJT05TX0ZJTEUgOj0gJChwcm9ndWFyZF9vcHRpb25zX2ZpbGUpCiAkKG15X3Jlc19wYWNrYWdlKTogUFJJVkFURV9BU1NFVF9ESVJTIDo9ICQobXlfYXNzZXRfZGlycykKQEAgLTk1LDcgKzEwNyw3IEBACiAkKG15X3Jlc19wYWNrYWdlKTogJChmdWxsX2FuZHJvaWRfbWFuaWZlc3QpICQobXlfc3RhdGljX2xpYnJhcnlfcmVzb3VyY2VzKSAkKG15X3NoYXJlZF9saWJyYXJ5X3Jlc291cmNlcykKICQobXlfcmVzX3BhY2thZ2UpOiAkKG15X2Z1bGxfYXNzZXRfcGF0aHMpCiAkKG15X3Jlc19wYWNrYWdlKTogJChteV9yZXNfcmVzb3VyY2VzX2ZsYXQpICQobXlfb3ZlcmxheV9yZXNvdXJjZXNfZmxhdCkgXAotICAkKG15X2dlbmVyYXRlZF9yZXNvdXJjZXNfZmxhdGEpICQobXlfc3RhdGljX2xpYnJhcnlfcmVzb3VyY2VzKSBcCisgICQobXlfcmVzb3VyY2VzX2ZsYXRhKSAkKG15X3N0YXRpY19saWJyYXJ5X3Jlc291cmNlcykgXAogICAkKEFBUFQyKQogCUBlY2hvICJBQVBUMiBsaW5rICRAIgogCSQoY2FsbCBhYXB0Mi1saW5rKQpAQCAtMTE4LDMgKzEzMCw0IEBACiBteV9hcGtfc3BsaXRfY29uZmlncyA6PQogbXlfZ2VuZXJhdGVkX3Jlc19kaXJzIDo9CiBteV9nZW5lcmF0ZWRfcmVzX2RpcnNfZGVwcyA6PQorbXlfZ2VuZXJhdGVkX3Jlc196aXBzIDo9CmRpZmYgLS1naXQgYS9jb3JlL2FhcHRfZmxhZ3MubWsgYi9jb3JlL2FhcHRfZmxhZ3MubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzNDkzYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvYWFwdF9mbGFncy5tawpAQCAtMCwwICsxLDIwIEBACisjIyBBQVBUIEZsYWdzCisjIGFhcHQgZG9lc24ndCBhY2NlcHQgbXVsdGlwbGUgLS1leHRyYS1wYWNrYWdlcyBmbGFncy4KKyMgV2UgaGF2ZSB0byBjb2xsYXBzZSB0aGVtIGludG8gYSBzaW5nbGUgLS1leHRyYS1wYWNrYWdlcyBmbGFnIGhlcmUuCitMT0NBTF9BQVBUX0ZMQUdTIDo9ICQoc3RyaXAgJChMT0NBTF9BQVBUX0ZMQUdTKSkKK2lmZGVmIExPQ0FMX0FBUFRfRkxBR1MKKyAgaWZlcSAoJChmaWx0ZXIgMCAxLCQod29yZHMgJChmaWx0ZXIgLS1leHRyYS1wYWNrYWdlcywkKExPQ0FMX0FBUFRfRkxBR1MpKSkpLCkKKyAgICBhYXB0X2ZsYWdzIDo9ICQoc3Vic3QgLS1leHRyYS1wYWNrYWdlcyQoc3BhY2UpLC0tZXh0cmEtcGFja2FnZXNALCQoTE9DQUxfQUFQVF9GTEFHUykpCisgICAgYWFwdF9mbGFnc19leHRyYV9wYWNrYWdlcyA6PSAkKHBhdHN1YnN0IC0tZXh0cmEtcGFja2FnZXNAJSwlLCQoZmlsdGVyIC0tZXh0cmEtcGFja2FnZXNAJSwkKGFhcHRfZmxhZ3MpKSkKKyAgICBhYXB0X2ZsYWdzX2V4dHJhX3BhY2thZ2VzIDo9ICQoc29ydCAkKHN1YnN0IDosJChzcGFjZSksJChhYXB0X2ZsYWdzX2V4dHJhX3BhY2thZ2VzKSkpCisgICAgTE9DQUxfQUFQVF9GTEFHUyA6PSAkKGZpbHRlci1vdXQgLS1leHRyYS1wYWNrYWdlc0AlLCQoYWFwdF9mbGFncykpIFwKKyAgICAgICAgLS1leHRyYS1wYWNrYWdlcyAkKHN1YnN0ICQoc3BhY2UpLDosJChhYXB0X2ZsYWdzX2V4dHJhX3BhY2thZ2VzKSkKKyAgICBhYXB0X2ZsYWdzX2V4dHJhX3BhY2thZ2VzIDo9CisgICAgYWFwdF9mbGFncyA6PQorICBlbmRpZgorZW5kaWYKKworJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfQUFQVF9GTEFHUyA6PSAkKExPQ0FMX0FBUFRfRkxBR1MpCiskKExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTKTogUFJJVkFURV9UQVJHRVRfQUFQVF9DSEFSQUNURVJJU1RJQ1MgOj0gJChUQVJHRVRfQUFQVF9DSEFSQUNURVJJU1RJQ1MpCiskKExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTKTogUFJJVkFURV9NQU5JRkVTVF9QQUNLQUdFX05BTUUgOj0gJChMT0NBTF9NQU5JRkVTVF9QQUNLQUdFX05BTUUpCiskKExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTKTogUFJJVkFURV9NQU5JRkVTVF9JTlNUUlVNRU5UQVRJT05fRk9SIDo9ICQoTE9DQUxfTUFOSUZFU1RfSU5TVFJVTUVOVEFUSU9OX0ZPUikKZGlmZiAtLWdpdCBhL2NvcmUvYWxsb3dlZF9uZGtfdHlwZXMubWsgYi9jb3JlL2FsbG93ZWRfbmRrX3R5cGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGI5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2FsbG93ZWRfbmRrX3R5cGVzLm1rCkBAIC0wLDAgKzEsODQgQEAKKyMgRGV0ZXJtaW5lcyB0aGUgdHlwZXMgb2YgTkRLIG1vZHVsZXMgdGhlIGN1cnJlbnQgbW9kdWxlIGlzIGFsbG93ZWQgdG8gbGluayB0by4KKyMgSW5wdXQgdmFyaWFibGVzOgorIyAgIExPQ0FMX01PRFVMRQorIyAgIExPQ0FMX01PRFVMRV9DTEFTUworIyAgIExPQ0FMX05ES19TVExfVkFSSUFOVAorIyAgIExPQ0FMX1NES19WRVJTSU9OCisjIE91dHB1dCB2YXJpYWJsZXM6CisjICAgbXlfbmRrX3N0bF9mYW1pbHk6IEZhbWlseSBvZiB0aGUgTkRLIFNUTC4KKyMgICBteV9uZGtfc3RsX2xpbmtfdHlwZTogU1RMIGxpbmsgdHlwZSwgc3RhdGljIG9yIHNoYXJlZC4KKyMgICBteV9hbGxvd2VkX25ka190eXBlczogVHlwZXMgb2YgTkRLIG1vZHVsZXMgdGhhdCBtYXkgYmUgbGlua2VkLgorIyAgIG15X3dhcm5fbmRrX3R5cGVzOiBUeXBlcyBvZiBOREsgbW9kdWxlcyB0aGF0IHNob3VsZG4ndCBiZSBsaW5rZWQsIGJ1dCBhcmUuCisKK215X2FsbG93ZWRfbmRrX3R5cGVzIDo9CitteV93YXJuX25ka190eXBlcyA6PQorbXlfbmRrX3N0bF9mYW1pbHkgOj0KK215X25ka19zdGxfbGlua190eXBlIDo9CisKK2lmZGVmIExPQ0FMX1NES19WRVJTSU9OCisgICAgaWZlcSAoJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpLCkKKyAgICAgICAgbXlfbmRrX3N0bF9mYW1pbHkgOj0gc3lzdGVtCisgICAgICAgIG15X25ka19zdGxfbGlua190eXBlIDo9IHNoYXJlZAorICAgIGVsc2UgaWZlcSAoJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpLHN5c3RlbSkKKyAgICAgICAgbXlfbmRrX3N0bF9mYW1pbHkgOj0gc3lzdGVtCisgICAgICAgIG15X25ka19zdGxfbGlua190eXBlIDo9IHNoYXJlZAorICAgIGVsc2UgaWZlcSAoJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpLGMrK19zaGFyZWQpCisgICAgICAgIG15X25ka19zdGxfZmFtaWx5IDo9IGxpYmMrKworICAgICAgICBteV9uZGtfc3RsX2xpbmtfdHlwZSA6PSBzaGFyZWQKKyAgICBlbHNlIGlmZXEgKCQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSxjKytfc3RhdGljKQorICAgICAgICBteV9uZGtfc3RsX2ZhbWlseSA6PSBsaWJjKysKKyAgICAgICAgbXlfbmRrX3N0bF9saW5rX3R5cGUgOj0gc3RhdGljCisgICAgZWxzZSBpZmVxICgkKExPQ0FMX05ES19TVExfVkFSSUFOVCksbm9uZSkKKyAgICAgICAgbXlfbmRrX3N0bF9mYW1pbHkgOj0gbm9uZQorICAgICAgICBteV9uZGtfc3RsX2xpbmtfdHlwZSA6PSBub25lCisgICAgZWxzZQorICAgICAgICAkKGNhbGwgcHJldHR5LWVycm9yLGludmFsaWQgTE9DQUxfTkRLX1NUTF9WQVJJQU5UOiAkKExPQ0FMX05ES19TVExfVkFSSUFOVCkpCisgICAgZW5kaWYKKworICAgIGlmZXEgKCQoTE9DQUxfTU9EVUxFX0NMQVNTKSxTVEFUSUNfTElCUkFSSUVTKQorICAgICAgICAjIFRoZSAibm9uZSIgbGluayB0eXBlIGluZGljYXRlcyB0aGF0IG5vdGhpbmcgaXMgYWN0dWFsbHkgbGlua2VkLiBTaW5jZQorICAgICAgICAjIHRoaXMgaXMgYSBzdGF0aWMgbGlicmFyeSwgaXQncyBzdGlsbCB1cCB0byB0aGUgZmluYWwgdXNlIG9mIHRoZQorICAgICAgICAjIGxpYnJhcnkgd2hldGhlciBhIHN0YXRpYyBvciBzaGFyZWQgU1RMIHNob3VsZCBiZSB1c2VkLgorICAgICAgICBteV9uZGtfc3RsX2xpbmtfdHlwZSA6PSBub25lCisgICAgZW5kaWYKKworICAgICMgVGhlIHN5c3RlbSBTVEwgaXMgb25seSB0aGUgQysrIEFCSSBsYXllciwgc28gaXQncyBjb21wYXRpYmxlIHdpdGggYW55IFNUTC4KKyAgICBteV9hbGxvd2VkX25ka190eXBlcyArPSBuYXRpdmU6bmRrOnN5c3RlbTpzaGFyZWQKKyAgICBteV9hbGxvd2VkX25ka190eXBlcyArPSBuYXRpdmU6bmRrOnN5c3RlbTpub25lCisKKyAgICAjIExpYmFyaWVzIHRoYXQgZG9uJ3QgdXNlIHRoZSBTVEwgY2FuIGJlIGxpbmtlZCB0byBhbnl0aGluZy4KKyAgICBteV9hbGxvd2VkX25ka190eXBlcyArPSBuYXRpdmU6bmRrOm5vbmU6bm9uZQorCisgICAgIyBBbmQgaXQncyBhbHdheXMgb2theSB0byBsaW5rIGEgc3RhdGljIGxpYnJhcnkgdGhhdCB1c2VzIHlvdXIgb3duIFNUTCB0eXBlLgorICAgICMgU2luY2Ugbm90aGluZyB3YXMgYWN0dWFsbHkgbGlua2VkIGZvciB0aGUgc3RhdGljIGxpYnJhcnksIGl0IGlzIHVwIHRvIHRoZQorICAgICMgZmlyc3QgbGlua2VkIGxpYnJhcnkgaW4gdGhlIGRlcGVuZGVuY3kgY2hhaW4gd2hpY2ggZ2V0cyB1c2VkLgorICAgIG15X2FsbG93ZWRfbmRrX3R5cGVzICs9IG5hdGl2ZTpuZGs6JChteV9uZGtfc3RsX2ZhbWlseSk6bm9uZQorCisgICAgaWZlcSAoJChMT0NBTF9NT0RVTEVfQ0xBU1MpLEFQUFMpCisgICAgICAgICMgRm9yIGFuIGFwcCBwYWNrYWdlLCBpdCdzIGFjdHVhbGx5IG9rYXkgdG8gZGVwZW5kIG9uIGFueSBzZXQgb2YgU1RMcy4KKyAgICAgICAgIyBJZiBhbnkgb2YgdGhlIGluZGl2aWR1YWwgbGlicmFyaWVzIGRlcGVuZCBvbiBlYWNoIG90aGVyIHRoZXkndmUKKyAgICAgICAgIyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBmb3IgY29uc2lzdGVuY3ksIGFuZCBpZiB0aGV5IGRvbid0IHRoZXknbGwgYmUKKyAgICAgICAgIyBrZXB0IGlzb2xhdGVkIGJ5IFJUTERfTE9DQUwgYW55d2F5LgorICAgICAgICBteV9hbGxvd2VkX25ka190eXBlcyArPSBcCisgICAgICAgICAgICBuYXRpdmU6bmRrOmxpYmMrKzpzaGFyZWQgbmF0aXZlOm5kazpsaWJjKys6c3RhdGljCisKKyAgICAgICAgIyBUaGUgIm5vbmUiIGxpbmsgdHlwZSB0aGF0IHVzZWQgYnkgc3RhdGljIGxpYnJhcmllcyBpcyBpbnRlbnRpb25hbGx5CisgICAgICAgICMgb21pdHRlZCBoZXJlLiBXZSBzaG91bGQgb25seSBiZSBkZWFsaW5nIHdpdGggc2hhcmVkIGxpYnJhcmllcyBpbgorICAgICAgICAjIExPQ0FMX0pOSV9TSEFSRURfTElCUkFSSUVTLgorICAgIGVsc2UgaWZlcSAoJChteV9uZGtfc3RsX2xpbmtfdHlwZSksc2hhcmVkKQorICAgICAgICAjIE1vZHVsZXMgbGlua2VkIHRvIGEgc2hhcmVkIFNUTCBjYW4gb25seSB1c2UgYW5vdGhlciBzaGFyZWQgU1RMLgorICAgICAgICBteV9hbGxvd2VkX25ka190eXBlcyArPSBuYXRpdmU6bmRrOiQobXlfbmRrX3N0bF9mYW1pbHkpOnNoYXJlZAorICAgIGVuZGlmCisgICAgIyBFbHNlIHdlIGFyZSBhIG5vbi1zdGF0aWMgbGlicmFyeSB0aGF0IHVzZXMgYSBzdGF0aWMgU1RMLCBhbmQgYXJlCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgc2hhcmVkIGxpYnJhcmllcyB0aGF0IHVzZSBhbiBTVEwuCitlbHNlCisgICAgbXlfYWxsb3dlZF9uZGtfdHlwZXMgOj0gXAorICAgICAgICBuYXRpdmU6bmRrOm5vbmU6bm9uZSBcCisgICAgICAgIG5hdGl2ZTpuZGs6c3lzdGVtOm5vbmUgXAorICAgICAgICBuYXRpdmU6bmRrOnN5c3RlbTpzaGFyZWQgXAorCisgICAgaWZlcSAoJChMT0NBTF9NT0RVTEVfQ0xBU1MpLEFQUFMpCisgICAgICAgICMgQ1RTIGlzIGJhZCBhbmQgaXQgc2hvdWxkIGZlZWwgYmFkOiBodHRwOi8vYi8xMzI0OTczNworICAgICAgICBteV93YXJuX25ka190eXBlcyArPSBuYXRpdmU6bmRrOmxpYmMrKzpzdGF0aWMKKyAgICBlbmRpZgorZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvYW5kcm9pZF9tYW5pZmVzdC5tayBiL2NvcmUvYW5kcm9pZF9tYW5pZmVzdC5tawppbmRleCAwMDkzZTAyLi43ZDU3M2QzIDEwMDY0NAotLS0gYS9jb3JlL2FuZHJvaWRfbWFuaWZlc3QubWsKKysrIGIvY29yZS9hbmRyb2lkX21hbmlmZXN0Lm1rCkBAIC0zNCwxMCArMzQsMTIgQEAKIG1haW5fYW5kcm9pZF9tYW5pZmVzdCA6PSAkKGZ1bGxfYW5kcm9pZF9tYW5pZmVzdCkKIGZ1bGxfYW5kcm9pZF9tYW5pZmVzdCA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9BbmRyb2lkTWFuaWZlc3QueG1sCiAkKGZ1bGxfYW5kcm9pZF9tYW5pZmVzdCk6IFBSSVZBVEVfTElCU19NQU5JRkVTVFMgOj0gJChteV9mdWxsX2xpYnNfbWFuaWZlc3RfZmlsZXMpCiskKGZ1bGxfYW5kcm9pZF9tYW5pZmVzdCk6ICQoQU5EUk9JRF9NQU5JRkVTVF9NRVJHRVJfQ0xBU1NQQVRIKQogJChmdWxsX2FuZHJvaWRfbWFuaWZlc3QpIDogJChtYWluX2FuZHJvaWRfbWFuaWZlc3QpICQobXlfZnVsbF9saWJzX21hbmlmZXN0X2RlcHMpCiAJQGVjaG8gIk1lcmdlIGFuZHJvaWQgbWFuaWZlc3QgZmlsZXM6ICRAIDwtLSAkPCAkKFBSSVZBVEVfTElCU19NQU5JRkVTVFMpIgogCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpICQoQU5EUk9JRF9NQU5JRkVTVF9NRVJHRVIpIC0tbWFpbiAkPCAtLWxpYnMgJChQUklWQVRFX0xJQlNfTUFOSUZFU1RTKSBcCisJJChoaWRlKSAkKEFORFJPSURfTUFOSUZFU1RfTUVSR0VSKSAtLW1haW4gJDwgXAorCSAgICAtLWxpYnMgJChjYWxsIG5vcm1hbGl6ZS1wYXRoLWxpc3QsJChQUklWQVRFX0xJQlNfTUFOSUZFU1RTKSkgXAogCSAgICAtLW91dCAkQAogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9hdXRvZ2VuX3Rlc3RfY29uZmlnLm1rIGIvY29yZS9hdXRvZ2VuX3Rlc3RfY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTliYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2F1dG9nZW5fdGVzdF9jb25maWcubWsKQEAgLTAsMCArMSw2NCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIyBUaGlzIGJ1aWxkIHJ1bGUgYWxsb3dzIFRyYWRlRmVkIHRlc3QgY29uZmlnIGZpbGUgdG8gYmUgY3JlYXRlZCBiYXNlZCBvbgorIyBmb2xsb3dpbmcgaW5wdXRzOgorIyAgIGlzX25hdGl2ZTogSWYgdGhlIHRlc3QgaXMgYSBuYXRpdmUgdGVzdC4KKyMgICBMT0NBTF9NQU5JRkVTVF9GSUxFOiBOYW1lIG9mIHRoZSBBbmRyb2lkTWFuaWZlc3QgZmlsZSBmb3IgdGhlIHRlc3QuIElmIGl0J3MKKyMgICAgICAgbm90IHNldCwgZGVmYXVsdCB2YWx1ZSBgQW5kcm9pZE1hbmlmZXN0LnhtbGAgd2lsbCBiZSB1c2VkLgorIyBPdXRwdXQ6CisjICAgYXV0b2dlbl90ZXN0X2NvbmZpZ19maWxlOiBQYXRoIHRvIHRoZSB0ZXN0IGNvbmZpZyBmaWxlIGdlbmVyYXRlZC4KKworYXV0b2dlbl90ZXN0X2NvbmZpZ19maWxlIDo9ICQoZGlyICQoTE9DQUxfQlVJTFRfTU9EVUxFKSkkKExPQ0FMX01PRFVMRSkuY29uZmlnCitpZmVxICh0cnVlLCQoaXNfbmF0aXZlKSkKKyMgQXV0byBnZW5lcmF0aW5nIHRlc3QgY29uZmlnIGZpbGUgZm9yIG5hdGl2ZSB0ZXN0CiskKGF1dG9nZW5fdGVzdF9jb25maWdfZmlsZSkgOiAkKE5BVElWRV9URVNUX0NPTkZJR19URU1QTEFURSkKKwlAZWNobyAiQXV0byBnZW5lcmF0aW5nIHRlc3QgY29uZmlnICQobm90ZGlyICRAKSIKKwkkKGhpZGUpIHNlZCAncyZ7TU9EVUxFfSYkKFBSSVZBVEVfTU9EVUxFKSZnJyAkXiA+ICRACitteV9hdXRvX2dlbmVyYXRlX2NvbmZpZyA6PSB0cnVlCitlbHNlCisjIEF1dG8gZ2VuZXJhdGluZyB0ZXN0IGNvbmZpZyBmaWxlIGZvciBpbnN0cnVtZW50YXRpb24gdGVzdAoraWZlcSAoJChzdHJpcCAkKExPQ0FMX01BTklGRVNUX0ZJTEUpKSwpCisgIExPQ0FMX01BTklGRVNUX0ZJTEUgOj0gQW5kcm9pZE1hbmlmZXN0LnhtbAorZW5kaWYKK2lmZGVmIExPQ0FMX0ZVTExfTUFOSUZFU1RfRklMRQorICBteV9hbmRyb2lkX21hbmlmZXN0IDo9ICQoTE9DQUxfRlVMTF9NQU5JRkVTVF9GSUxFKQorZWxzZQorICBteV9hbmRyb2lkX21hbmlmZXN0IDo9ICQoTE9DQUxfUEFUSCkvJChMT0NBTF9NQU5JRkVTVF9GSUxFKQorZW5kaWYKK2lmbmVxICgsJCh3aWxkY2FyZCAkKG15X2FuZHJvaWRfbWFuaWZlc3QpKSkKKyQoYXV0b2dlbl90ZXN0X2NvbmZpZ19maWxlKTogUFJJVkFURV9BVVRPR0VOX1RFU1RfQ09ORklHX1NDUklQVCA6PSAkKEFVVE9HRU5fVEVTVF9DT05GSUdfU0NSSVBUKQorJChhdXRvZ2VuX3Rlc3RfY29uZmlnX2ZpbGUpOiBQUklWQVRFX1RFU1RfQ09ORklHX0FORFJPSURfTUFOSUZFU1QgOj0gJChteV9hbmRyb2lkX21hbmlmZXN0KQorJChhdXRvZ2VuX3Rlc3RfY29uZmlnX2ZpbGUpOiBQUklWQVRFX0VNUFRZX1RFU1RfQ09ORklHIDo9ICQoRU1QVFlfVEVTVF9DT05GSUcpCiskKGF1dG9nZW5fdGVzdF9jb25maWdfZmlsZSk6IFBSSVZBVEVfVEVNUExBVEUgOj0gJChJTlNUUlVNRU5UQVRJT05fVEVTVF9DT05GSUdfVEVNUExBVEUpCiskKGF1dG9nZW5fdGVzdF9jb25maWdfZmlsZSkgOiAkKG15X2FuZHJvaWRfbWFuaWZlc3QpICQoRU1QVFlfVEVTVF9DT05GSUcpICQoSU5TVFJVTUVOVEFUSU9OX1RFU1RfQ09ORklHX1RFTVBMQVRFKSAkKEFVVE9HRU5fVEVTVF9DT05GSUdfU0NSSVBUKQorCUBlY2hvICJBdXRvIGdlbmVyYXRpbmcgdGVzdCBjb25maWcgJChub3RkaXIgJEApIgorCUBybSAtZiAkQAorCSQoaGlkZSkgJChQUklWQVRFX0FVVE9HRU5fVEVTVF9DT05GSUdfU0NSSVBUKSAkQCAkKFBSSVZBVEVfVEVTVF9DT05GSUdfQU5EUk9JRF9NQU5JRkVTVCkgJChQUklWQVRFX0VNUFRZX1RFU1RfQ09ORklHKSAkKFBSSVZBVEVfVEVNUExBVEUpCitteV9hdXRvX2dlbmVyYXRlX2NvbmZpZyA6PSB0cnVlCitlbmRpZiAjIGlmZXEgKCwkKHdpbGRjYXJkICQobXlfYW5kcm9pZF9tYW5pZmVzdCkpKQorZW5kaWYgIyBpZm5lcSAodHJ1ZSwkKGlzX25hdGl2ZSkpCisKK2lmZXEgKHRydWUsJChteV9hdXRvX2dlbmVyYXRlX2NvbmZpZykpCisgIExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTICs9ICQoYXV0b2dlbl90ZXN0X2NvbmZpZ19maWxlKQorICAkKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoYXV0b2dlbl90ZXN0X2NvbmZpZ19maWxlKQorICBBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLmF1dG9fdGVzdF9jb25maWcgOj0gdHJ1ZQorZWxzZQorICBhdXRvZ2VuX3Rlc3RfY29uZmlnX2ZpbGUgOj0KK2VuZGlmCisKK215X2FuZHJvaWRfbWFuaWZlc3QgOj0KK215X2F1dG9fZ2VuZXJhdGVfY29uZmlnIDo9CmRpZmYgLS1naXQgYS9jb3JlL2F1eF9jb25maWcubWsgYi9jb3JlL2F1eF9jb25maWcubWsKaW5kZXggYzQwYjhjYy4uNmE1Y2Q2MyAxMDA2NDQKLS0tIGEvY29yZS9hdXhfY29uZmlnLm1rCisrKyBiL2NvcmUvYXV4X2NvbmZpZy5tawpAQCAtMzIsNyArMzIsNyBAQAogCiAjIHNldHVwIEFVWCBnbG9iYWxzCiBBVVhfU0hMSUJfU1VGRklYIDo9IC5zbwotQVVYX0dMT0JBTF9BUkZMQUdTIDo9IGNyc1BECitBVVhfR0xPQkFMX0FSRkxBR1MgOj0gY3FzRAogQVVYX1NUQVRJQ19MSUJfU1VGRklYIDo9IC5hCiAKICMgTG9hZCBldmVyLWxhc3RpbmcgImluZGV4ZWQiIHZlcnNpb24gb2YgQVVYIHZhcmlhbnQgZW52aXJvbm1lbnQ7IGl0IGlzIHRyZWF0ZWQgYXMgUkVBRC1PTkxZIGZyb20gdGhpcwpAQCAtMTAyLDEwICsxMDIsMTAgQEAKICQoZXZhbCBBVVhfT1NfVkFSSUFOVF9MSVNUXyQoQVVYX09TXyQoMSkpOj0pIFwKICQoY2FsbCBhdXgtdmFyaWFudC1zZXR1cC1wYXRocywkKF9uYW1lKSkgXAogJChldmFsIEFVWF9BTExfVkFSSUFOVFMgKz0gJChfbmFtZSkpIFwKLSQoZXZhbCBBVVhfQUxMX09TRVMgOj0gJChmaWx0ZXJvdXQgJChBVVhfT1NfJChfbmFtZSkpLCQoQVVYX0FMTF9PU0VTKSkgJChBVVhfT1NfJChfbmFtZSkpKSBcCi0kKGV2YWwgQVVYX0FMTF9DUFVTIDo9ICQoZmlsdGVyb3V0ICQoQVVYX0NQVV8kKF9uYW1lKSksJChBVVhfQUxMX0NQVVMpKSAkKEFVWF9DUFVfJChfbmFtZSkpKSBcCi0kKGV2YWwgQVVYX0FMTF9BUkNIUyA6PSAkKGZpbHRlcm91dCAkKEFVWF9BUkNIXyQoX25hbWUpKSwkKEFVWF9BTExfQVJDSFMpKSAkKEFVWF9BUkNIXyQoX25hbWUpKSkgXAotJChldmFsIEFVWF9BTExfU1VCQVJDSFMgOj0gJChmaWx0ZXJvdXQgJChBVVhfU1VCQVJDSF8kKF9uYW1lKSksJChBVVhfQUxMX1NVQkFSQ0hTKSkgJChBVVhfU1VCQVJDSF8kKF9uYW1lKSkpCiskKGV2YWwgQVVYX0FMTF9PU0VTIDo9ICQoZmlsdGVyLW91dCAkKEFVWF9PU18kKF9uYW1lKSksJChBVVhfQUxMX09TRVMpKSAkKEFVWF9PU18kKF9uYW1lKSkpIFwKKyQoZXZhbCBBVVhfQUxMX0NQVVMgOj0gJChmaWx0ZXItb3V0ICQoQVVYX0NQVV8kKF9uYW1lKSksJChBVVhfQUxMX0NQVVMpKSAkKEFVWF9DUFVfJChfbmFtZSkpKSBcCiskKGV2YWwgQVVYX0FMTF9BUkNIUyA6PSAkKGZpbHRlci1vdXQgJChBVVhfQVJDSF8kKF9uYW1lKSksJChBVVhfQUxMX0FSQ0hTKSkgJChBVVhfQVJDSF8kKF9uYW1lKSkpIFwKKyQoZXZhbCBBVVhfQUxMX1NVQkFSQ0hTIDo9ICQoZmlsdGVyLW91dCAkKEFVWF9TVUJBUkNIXyQoX25hbWUpKSwkKEFVWF9BTExfU1VCQVJDSFMpKSAkKEFVWF9TVUJBUkNIXyQoX25hbWUpKSkKIGVuZGVmCiAKICMgTG9hZCBzeXN0ZW0gY29uZmlndXJhdGlvbiByZWZlcmVuY2VkIGJ5IEFVWCB2YXJpYW50IGNvbmZpZzsKQEAgLTEzOCw3ICsxMzgsNyBAQAogJChldmFsIF9hbGw6PSkgXAogJChldmFsIF9yZXE6PSQoYWRkc3VmZml4IF8kKDEpLCQoYXV4X2VudikpKSBcCiAkKGZvcmVhY2ggdmFyLCQoX3JlcSksJChldmFsIF9hbGwgKz0gJCh2YXIpKSkgXAotJChldmFsIF9taXNzaW5nIDo9ICQoZmlsdGVyb3V0ICQoX2FsbCksJChfcmVxKSkpIFwKKyQoZXZhbCBfbWlzc2luZyA6PSAkKGZpbHRlci1vdXQgJChfYWxsKSwkKF9yZXEpKSkgXAogJChpZiAkKF9taXNzaW5nKSwkKGVycm9yIEFVWCB2YXJpYW50ICQoMSkgbXVzdCBkZWZpbmUgdmFyczogJChfbWlzc2luZykpKQogZW5kZWYKIApAQCAtMTU0LDcgKzE1NCw3IEBACiBjb25maWdfcm9vdHMgOj0gJCh3aWxkY2FyZCBkZXZpY2UgdmVuZG9yKQogYWxsX2NvbmZpZ3MgOj0KIGlmZGVmIGNvbmZpZ19yb290cwotYWxsX2NvbmZpZ3MgOj0gJChzaGVsbCBmaW5kICQoY29uZmlnX3Jvb3RzKSAtbWF4ZGVwdGggNCAtbmFtZSAnKiQodmFyaWFudF9zZngpJyAtbyAtbmFtZSAnKiQob3Nfc2Z4KScgfCBzb3J0KQorYWxsX2NvbmZpZ3MgOj0gJChzb3J0ICQoc2hlbGwgZmluZCAkKGNvbmZpZ19yb290cykgLW1heGRlcHRoIDQgLW5hbWUgJyokKHZhcmlhbnRfc2Z4KScgLW8gLW5hbWUgJyokKG9zX3NmeCknKSkKIGVuZGlmCiBhbGxfb3NfY29uZmlncyA6PSAkKGZpbHRlciAlJChvc19zZngpLCQoYWxsX2NvbmZpZ3MpKQogYWxsX3ZhcmlhbnRfY29uZmlncyA6PSAkKGZpbHRlciAlJCh2YXJpYW50X3NmeCksJChhbGxfY29uZmlncykpCmRpZmYgLS1naXQgYS9jb3JlL2Jhc2VfcnVsZXMubWsgYi9jb3JlL2Jhc2VfcnVsZXMubWsKaW5kZXggNTkyNjUwZC4uMjJlN2FlZiAxMDA2NDQKLS0tIGEvY29yZS9iYXNlX3J1bGVzLm1rCisrKyBiL2NvcmUvYmFzZV9ydWxlcy5tawpAQCAtNzIsNiArNzIsOCBAQAogTE9DQUxfT0VNX01PRFVMRSA6PSB0cnVlCiBlbHNlIGlmbmVxICgkKGZpbHRlciAkKFRBUkdFVF9PVVRfT0RNKS8lLCQoX3BhdGgpKSwpCiBMT0NBTF9PRE1fTU9EVUxFIDo9IHRydWUKK2Vsc2UgaWZuZXEgKCQoZmlsdGVyICQoVEFSR0VUX09VVF9QUk9EVUNUKS8lLCQoX3BhdGgpKSwpCitMT0NBTF9QUk9EVUNUX01PRFVMRSA6PSB0cnVlCiBlbmRpZgogX3BhdGggOj0KIApAQCAtODYsNiArODgsNyBAQAogZW5kaWYKIAogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvbG9jYWxfdm5kay5taworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvbG9jYWxfc3lzdGVtc2RrLm1rCiAKIG15X21vZHVsZV90YWdzIDo9ICQoTE9DQUxfTU9EVUxFX1RBR1MpCiBpZmVxICgkKG15X2hvc3RfY3Jvc3MpLHRydWUpCkBAIC0xOTksNiArMjAyLDggQEAKICAgcGFydGl0aW9uX3RhZyA6PSBfT0VNCiBlbHNlIGlmZXEgKHRydWUsJChMT0NBTF9PRE1fTU9EVUxFKSkKICAgcGFydGl0aW9uX3RhZyA6PSBfT0RNCitlbHNlIGlmZXEgKHRydWUsJChMT0NBTF9QUk9EVUNUX01PRFVMRSkpCisgIHBhcnRpdGlvbl90YWcgOj0gX1BST0RVQ1QKIGVsc2UgaWZlcSAoTkFUSVZFX1RFU1RTLCQoTE9DQUxfTU9EVUxFX0NMQVNTKSkKICAgcGFydGl0aW9uX3RhZyA6PSBfREFUQQogZWxzZQpAQCAtNDYwLDYgKzQ2NSw1MCBAQAogZW5kaWYKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIFRlc3QgRGF0YQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215X3Rlc3RfZGF0YV9wYWlycyA6PQorbXlfaW5zdGFsbGVkX3Rlc3RfZGF0YSA6PQorIyBTb3VyY2UgdG8gcmVsYXRpdmUgZHN0IGZpbGUgcGF0aHMgZm9yIHJldXNlIGluIExPQ0FMX0NPTVBBVElCSUxJVFlfU1VJVEUuCitteV90ZXN0X2RhdGFfZmlsZV9wYWlycyA6PQorCitpZm5lcSAoJChmaWx0ZXIgTkFUSVZFX1RFU1RTLCQoTE9DQUxfTU9EVUxFX0NMQVNTKSksKQoraWZuZXEgKCQoc3RyaXAgJChMT0NBTF9URVNUX0RBVEEpKSwpCitpZm5lcSAodHJ1ZSwkKExPQ0FMX1VOSU5TVEFMTEFCTEVfTU9EVUxFKSkKKworbXlfdGVzdF9kYXRhX3BhaXJzIDo9ICQoc3RyaXAgJChmb3JlYWNoIHRkLCQoTE9DQUxfVEVTVF9EQVRBKSwgXAorICAgICQoZXZhbCBfZmlsZSA6PSAkKGNhbGwgd29yZC1jb2xvbiwyLCQodGQpKSkgXAorICAgICQoaWYgJChfZmlsZSksIFwKKyAgICAgICQoZXZhbCBfc3JjX2Jhc2UgOj0gJChjYWxsIHdvcmQtY29sb24sMSwkKHRkKSkpLCBcCisgICAgICAkKGV2YWwgX3NyY19iYXNlIDo9ICQoTE9DQUxfUEFUSCkpIFwKKyAgICAgICAgJChldmFsIF9maWxlIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDEsJCh0ZCkpKSkgXAorICAgICQoaWYgJChmaW5kc3RyaW5nIC4uLCQoX2ZpbGUpKSwkKGVycm9yICQoTE9DQUxfTU9EVUxFX01BS0VGSUxFKTogTE9DQUxfVEVTVF9EQVRBIG1heSBub3QgaW5jbHVkZSAnLi4nOiAkKF9maWxlKSkpIFwKKyAgICAkKGlmICQoZmlsdGVyIC8lLCQoX3NyY19iYXNlKSAkKF9maWxlKSksJChlcnJvciAkKExPQ0FMX01PRFVMRV9NQUtFRklMRSk6IExPQ0FMX1RFU1RfREFUQSBtYXkgbm90IGluY2x1ZGUgYWJzb2x1dGUgcGF0aHM6ICQoX3NyY19iYXNlKSAkKF9maWxlKSkpIFwKKyAgICAkKGV2YWwgbXlfdGVzdF9kYXRhX2ZpbGVfcGFpcnMgOj0gJChteV90ZXN0X2RhdGFfZmlsZV9wYWlycykgJChjYWxsIGFwcGVuZC1wYXRoLCQoX3NyY19iYXNlKSwkKF9maWxlKSk6JChfZmlsZSkpIFwKKyAgICAkKGNhbGwgYXBwZW5kLXBhdGgsJChfc3JjX2Jhc2UpLCQoX2ZpbGUpKTokKGNhbGwgYXBwZW5kLXBhdGgsJChteV9tb2R1bGVfcGF0aCksJChfZmlsZSkpKSkKKworbXlfaW5zdGFsbGVkX3Rlc3RfZGF0YSA6PSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobXlfdGVzdF9kYXRhX3BhaXJzKSkKKyQoTE9DQUxfSU5TVEFMTEVEX01PRFVMRSk6ICQobXlfaW5zdGFsbGVkX3Rlc3RfZGF0YSkKKworZW5kaWYKK2VuZGlmCitlbmRpZgorCisjIEZvciB0ZXN0IG1vZHVsZXMgdGhhdCBsYWNrIGEgc3VpdGUgdGFnLCBzZXQgbnVsbC1zdWl0ZSBhcyB0aGUgZGVmYXVsdC4KKyMgV2Ugb25seSBzdXBwb3J0IGFkZGluZyBhIGRlZmF1bHQgc3VpdGUgdG8gbmF0aXZlIHRlc3RzLCBuYXRpdmUgYmVuY2htYXJrcywgYW5kIGluc3RydW1lbnRhdGlvbiB0ZXN0cy4KKyMgVGhpcyBpcyBiZWNhdXNlIHRoZXkgYXJlIHRoZSBvbmx5IHRlc3RzIHdlIGN1cnJlbnRseSBhdXRvLWdlbmVyYXRlIHRlc3QgY29uZmlncyBmb3IuCitpZm5kZWYgTE9DQUxfQ09NUEFUSUJJTElUWV9TVUlURQoraWZuZXEgKCQoZmlsdGVyIE5BVElWRV9URVNUUyBOQVRJVkVfQkVOQ0hNQVJLLCAkKExPQ0FMX01PRFVMRV9DTEFTUykpLCkKK0xPQ0FMX0NPTVBBVElCSUxJVFlfU1VJVEUgOj0gbnVsbC1zdWl0ZQorZW5kaWYKK2lmbmVxICgkKGZpbHRlciBBUFBTLCAkKExPQ0FMX01PRFVMRV9DTEFTUykpLCkKK2lmbmVxICgkKGZpbHRlciAkKG15X21vZHVsZV90YWdzKSx0ZXN0cyksKQorTE9DQUxfQ09NUEFUSUJJTElUWV9TVUlURSA6PSBudWxsLXN1aXRlCitlbmRpZgorZW5kaWYKK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBDb21wYXRpYmlsaXR5IHN1aXRlIGZpbGVzLgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGlmZGVmIExPQ0FMX0NPTVBBVElCSUxJVFlfU1VJVEUKQEAgLTQ2OCwxOSArNTE3LDIyIEBACiAjIHNlcGFyYXRlIHRoZSBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIGludG8gc3ViZGlyZWN0b3JpZXMgb2YgdGhlIHRlc3RjYXNlIGZvbGRlci4KIGFyY2hfZGlyIDo9CiBpc19uYXRpdmUgOj0KK211bHRpX2FyY2ggOj0KIGlmZXEgKCQoTE9DQUxfTU9EVUxFX0NMQVNTKSxOQVRJVkVfVEVTVFMpCiAgIGlzX25hdGl2ZSA6PSB0cnVlCisgIG11bHRpX2FyY2ggOj0gdHJ1ZQogZW5kaWYKIGlmZXEgKCQoTE9DQUxfTU9EVUxFX0NMQVNTKSxOQVRJVkVfQkVOQ0hNQVJLKQogICBpc19uYXRpdmUgOj0gdHJ1ZQorICBtdWx0aV9hcmNoIDo9IHRydWUKIGVuZGlmCiBpZmRlZiBMT0NBTF9NVUxUSUxJQgotICBpc19uYXRpdmUgOj0gdHJ1ZQorICBtdWx0aV9hcmNoIDo9IHRydWUKIGVuZGlmCi1pZmRlZiBpc19uYXRpdmUKK2lmZGVmIG11bHRpX2FyY2gKICAgYXJjaF9kaXIgOj0gLyQoJChteV9wcmVmaXgpJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKUFSQ0gpCi0gIGlzX25hdGl2ZSA6PQogZW5kaWYKK211bHRpX2FyY2ggOj0KIAogIyBUaGUgbW9kdWxlIGl0c2VsZi4KICQoZm9yZWFjaCBzdWl0ZSwgJChMT0NBTF9DT01QQVRJQklMSVRZX1NVSVRFKSwgXApAQCAtNTAwLDEzICs1NTIsNDQgQEAKICAgICAkKGZvcmVhY2ggZGlyLCAkKGNhbGwgY29tcGF0aWJpbGl0eV9zdWl0ZV9kaXJzLCQoc3VpdGUpKSwgXAogICAgICAgJChzKTokKGRpcikvJChuKSkpKSkKIAordGVzdF9jb25maWcgOj0gJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL0FuZHJvaWRUZXN0LnhtbCkKK2lmZXEgKCwkKHRlc3RfY29uZmlnKSkKKyAgaWZuZXEgKHRydWUsJChpc19uYXRpdmUpKQorICAgIGlzX2luc3RydW1lbnRhdGlvbl90ZXN0IDo9IHRydWUKKyAgICBpZmVxICh0cnVlLCAkKExPQ0FMX0lTX0hPU1RfTU9EVUxFKSkKKyAgICAgIGlzX2luc3RydW1lbnRhdGlvbl90ZXN0IDo9IGZhbHNlCisgICAgZW5kaWYKKyAgICAjIElmIExPQ0FMX01PRFVMRV9DTEFTUyBpcyBub3QgQVBQUywgaXQncyBjZXJ0YWlubHkgbm90IGFuIGluc3RydW1lbnRhdGlvbgorICAgICMgdGVzdC4gSG93ZXZlciwgc29tZSBwYWNrYWdlcyBmb3IgdGVzdCBkYXRhIGFsc28gaGF2ZSBMT0NBTF9NT0RVTEVfQ0xBU1MKKyAgICAjIHNldCB0byBBUFBTLiBUaGVzZSB3aWxsIHJlcXVpcmUgZmxhZyBMT0NBTF9ESVNBQkxFX0FVVE9fR0VORVJBVEVfVEVTVF9DT05GSUcKKyAgICAjIHRvIGRpc2FibGUgYXV0by1nZW5lcmF0aW5nIHRlc3QgY29uZmlnIGZpbGUuCisgICAgaWZuZXEgKEFQUFMsICQoTE9DQUxfTU9EVUxFX0NMQVNTKSkKKyAgICAgIGlzX2luc3RydW1lbnRhdGlvbl90ZXN0IDo9IGZhbHNlCisgICAgZW5kaWYKKyAgZW5kaWYKKyAgIyBDVFMgbW9kdWxlcyBjYW4gYmUgdXNlZCBmb3IgdGVzdCBkYXRhLCBzbyB0ZXN0IGNvbmZpZyBmaWxlcyBtdXN0IGJlCisgICMgZXhwbGljaXRseSBjcmVhdGVkIHVzaW5nIEFuZHJvaWRUZXN0LnhtbAorICBpZmVxICgsJChmaWx0ZXIgY3RzLCAkKExPQ0FMX0NPTVBBVElCSUxJVFlfU1VJVEUpKSkKKyAgICBpZm5lcSAodHJ1ZSwgJChMT0NBTF9ESVNBQkxFX0FVVE9fR0VORVJBVEVfVEVTVF9DT05GSUcpKQorICAgICAgaWZlcSAodHJ1ZSwgJChmaWx0ZXIgdHJ1ZSwkKGlzX25hdGl2ZSkgJChpc19pbnN0cnVtZW50YXRpb25fdGVzdCkpKQorICAgICAgICBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9hdXRvZ2VuX3Rlc3RfY29uZmlnLm1rCisgICAgICAgIHRlc3RfY29uZmlnIDo9ICQoYXV0b2dlbl90ZXN0X2NvbmZpZ19maWxlKQorICAgICAgICBhdXRvZ2VuX3Rlc3RfY29uZmlnX2ZpbGUgOj0KKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGlmCiAKLWlmbmVxICgsJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL0FuZHJvaWRUZXN0LnhtbCkpCitpc19pbnN0cnVtZW50YXRpb25fdGVzdCA6PQorCitpZm5lcSAoLCQodGVzdF9jb25maWcpKQogJChmb3JlYWNoIHN1aXRlLCAkKExPQ0FMX0NPTVBBVElCSUxJVFlfU1VJVEUpLCBcCiAgICQoZXZhbCBteV9jb21wYXRfZGlzdF8kKHN1aXRlKSArPSAkKGZvcmVhY2ggZGlyLCAkKGNhbGwgY29tcGF0aWJpbGl0eV9zdWl0ZV9kaXJzLCQoc3VpdGUpKSwgXAotICAgICQoTE9DQUxfUEFUSCkvQW5kcm9pZFRlc3QueG1sOiQoZGlyKS8kKExPQ0FMX01PRFVMRSkuY29uZmlnKSkpCisgICAgJCh0ZXN0X2NvbmZpZyk6JChkaXIpLyQoTE9DQUxfTU9EVUxFKS5jb25maWcpKSkKIGVuZGlmCiAKK3Rlc3RfY29uZmlnIDo9CisKIGlmbmVxICgsJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL0R5bmFtaWNDb25maWcueG1sKSkKICQoZm9yZWFjaCBzdWl0ZSwgJChMT0NBTF9DT01QQVRJQklMSVRZX1NVSVRFKSwgXAogICAkKGV2YWwgbXlfY29tcGF0X2Rpc3RfJChzdWl0ZSkgKz0gJChmb3JlYWNoIGRpciwgJChjYWxsIGNvbXBhdGliaWxpdHlfc3VpdGVfZGlycywkKHN1aXRlKSksIFwKQEAgLTUyMSwzOCArNjA0LDI0IEBACiBlbmRpZgogZW5kaWYgIyAkKG15X3ByZWZpeCkkKExPQ0FMX01PRFVMRV9DTEFTUylfJChMT0NBTF9NT0RVTEUpX2NvbXBhdF9maWxlcwogCitpZm5lcSAoJChteV90ZXN0X2RhdGFfZmlsZV9wYWlycyksKQorJChmb3JlYWNoIHBhaXIsICQobXlfdGVzdF9kYXRhX2ZpbGVfcGFpcnMpLCBcCisgICQoZXZhbCBwYXJ0cyA6PSAkKHN1YnN0IDosJChzcGFjZSksJChwYWlyKSkpIFwKKyAgJChldmFsIHNyY19wYXRoIDo9ICQod29yZCAxLCQocGFydHMpKSkgXAorICAkKGV2YWwgZmlsZSA6PSAkKHdvcmQgMiwkKHBhcnRzKSkpIFwKKyAgJChmb3JlYWNoIHN1aXRlLCAkKExPQ0FMX0NPTVBBVElCSUxJVFlfU1VJVEUpLCBcCisgICAgJChldmFsIG15X2NvbXBhdF9kaXN0XyQoc3VpdGUpICs9ICQoZm9yZWFjaCBkaXIsICQoY2FsbCBjb21wYXRpYmlsaXR5X3N1aXRlX2RpcnMsJChzdWl0ZSksJChhcmNoX2RpcikpLCBcCisgICAgICAkKHNyY19wYXRoKTokKGNhbGwgYXBwZW5kLXBhdGgsJChkaXIpLCQoZmlsZSkpKSkpKQorZW5kaWYKKworYXJjaF9kaXIgOj0KK2lzX25hdGl2ZSA6PQorCiAkKGNhbGwgY3JlYXRlLXN1aXRlLWRlcGVuZGVuY2llcykKIAogZW5kaWYgICMgTE9DQUxfQ09NUEFUSUJJTElUWV9TVUlURQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMgVGVzdCBEYXRhCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotbXlfdGVzdF9kYXRhX3BhaXJzIDo9Ci1teV9pbnN0YWxsZWRfdGVzdF9kYXRhIDo9Ci0KLWlmbmVxICgkKGZpbHRlciBOQVRJVkVfVEVTVFMsJChMT0NBTF9NT0RVTEVfQ0xBU1MpKSwpCi1pZm5lcSAoJChzdHJpcCAkKExPQ0FMX1RFU1RfREFUQSkpLCkKLWlmbmVxICh0cnVlLCQoTE9DQUxfVU5JTlNUQUxMQUJMRV9NT0RVTEUpKQotCi1teV90ZXN0X2RhdGFfcGFpcnMgOj0gJChzdHJpcCAkKGZvcmVhY2ggdGQsJChMT0NBTF9URVNUX0RBVEEpLCBcCi0gICAgJChldmFsIF9maWxlIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDIsJCh0ZCkpKSBcCi0gICAgJChpZiAkKF9maWxlKSwgXAotICAgICAgJChldmFsIF9iYXNlIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDEsJCh0ZCkpKSwgXAotICAgICAgJChldmFsIF9iYXNlIDo9ICQoTE9DQUxfUEFUSCkpIFwKLSAgICAgICAgJChldmFsIF9maWxlIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDEsJCh0ZCkpKSkgXAotICAgICQoaWYgJChmaW5kc3RyaW5nIC4uLCQoX2ZpbGUpKSwkKGVycm9yICQoTE9DQUxfTU9EVUxFX01BS0VGSUxFKTogTE9DQUxfVEVTVF9EQVRBIG1heSBub3QgaW5jbHVkZSAnLi4nOiAkKF9maWxlKSkpIFwKLSAgICAkKGlmICQoZmlsdGVyIC8lLCQoX2Jhc2UpICQoX2ZpbGUpKSwkKGVycm9yICQoTE9DQUxfTU9EVUxFX01BS0VGSUxFKTogTE9DQUxfVEVTVF9EQVRBIG1heSBub3QgaW5jbHVkZSBhYnNvbHV0ZSBwYXRoczogJChfYmFzZSkgJChfZmlsZSkpKSBcCi0gICAgJChjYWxsIGFwcGVuZC1wYXRoLCQoX2Jhc2UpLCQoX2ZpbGUpKTokKGNhbGwgYXBwZW5kLXBhdGgsJChteV9tb2R1bGVfcGF0aCksJChfZmlsZSkpKSkKLQotbXlfaW5zdGFsbGVkX3Rlc3RfZGF0YSA6PSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobXlfdGVzdF9kYXRhX3BhaXJzKSkKLSQoTE9DQUxfSU5TVEFMTEVEX01PRFVMRSk6ICQobXlfaW5zdGFsbGVkX3Rlc3RfZGF0YSkKLQotZW5kaWYKLWVuZGlmCi1lbmRpZgotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgUmVnaXN0ZXIgd2l0aCBBTExfTU9EVUxFUwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtNTk5LDYgKzY2OCw5IEBACiBBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLlRBUkdFVF9SRVFVSVJFRCA6PSBcCiAgICAgJChzdHJpcCAkKEFMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuVEFSR0VUX1JFUVVJUkVEKVwKICAgICAgICAgJChMT0NBTF9UQVJHRVRfUkVRVUlSRURfTU9EVUxFUykpCitBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLkhPU1RfUkVRVUlSRUQgOj0gXAorICAgICQoc3RyaXAgJChBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLkhPU1RfUkVRVUlSRUQpXAorICAgICAgICAkKExPQ0FMX0hPU1RfUkVRVUlSRURfTU9EVUxFUykpCiBBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLkVWRU5UX0xPR19UQUdTIDo9IFwKICAgICAkKEFMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuRVZFTlRfTE9HX1RBR1MpICQoZXZlbnRfbG9nX3RhZ3MpCiBBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLk1BS0VGSUxFIDo9IFwKQEAgLTYxMSw2ICs2ODMsNyBAQAogQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5GT1JfMk5EX0FSQ0ggOj0gdHJ1ZQogZW5kaWYKIEFMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuRk9SX0hPU1RfQ1JPU1MgOj0gJChteV9ob3N0X2Nyb3NzKQorQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5DT01QQVRJQklMSVRZX1NVSVRFUyA6PSAkKExPQ0FMX0NPTVBBVElCSUxJVFlfU1VJVEUpCiAKIElOU1RBTExBQkxFX0ZJTEVTLiQoTE9DQUxfSU5TVEFMTEVEX01PRFVMRSkuTU9EVUxFIDo9ICQobXlfcmVnaXN0ZXJfbmFtZSkKIApAQCAtNjY2LDcgKzczOSw3IEBACiAKIAogaWZkZWYgal9vcl9uCi0kKGpfb3JfbikgJChoX29yX3QpICQoal9vcl9uKS0kKGhfb3JfdCkgOiAkKG15X2NoZWNrZWRfbW9kdWxlKQorJChqX29yX24pICQoaF9vcl90KSAkKGpfb3JfbiktJChoX29yX2hjX29yX3QpIDogJChteV9jaGVja2VkX21vZHVsZSkKIGlmbmVxICgsJChmaWx0ZXIgJChteV9tb2R1bGVfdGFncyksdGVzdHMpKQogJChqX29yX24pLSQoaF9vcl90KS10ZXN0cyAkKGpfb3JfbiktdGVzdHMgJChoX29yX3QpLXRlc3RzIDogJChteV9jaGVja2VkX21vZHVsZSkKIGVuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2JpbmFyeS5tayBiL2NvcmUvYmluYXJ5Lm1rCmluZGV4IGU1NGVkYmUuLmMyZmEyN2MgMTAwNjQ0Ci0tLSBhL2NvcmUvYmluYXJ5Lm1rCisrKyBiL2NvcmUvYmluYXJ5Lm1rCkBAIC04OCw3ICs4OCw3IEBACiAgIGVuZGlmCiAKICAgIyBNYWtlIHN1cmUgd2UndmUgYnVpbHQgdGhlIE5ESy4KLSAgbXlfYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMgKz0gJChTT09OR19PVVRfRElSKS9uZGsudGltZXN0YW1wCisgIG15X2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzICs9ICQoU09PTkdfT1VUX0RJUikvbmRrX2Jhc2UudGltZXN0YW1wCiAKICAgIyBtaXBzMzJyNiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBOREsuIE5vIHJlbGVhc2VkIE5ESyBjb250YWlucyB0aGVzZQogICAjIGxpYnJhcmllcywgYnV0IHRoZSByMTAgaW4gcHJlYnVpbHRzL25kayBoYWQgYSBsb2NhbCBoYWNrIHRvIGFkZCB0aGVtIDooCkBAIC0xODAsNyArMTgwLDYgQEAKICAgbXlfbmRrX3N0bF9pbmNsdWRlX3BhdGggOj0KICAgbXlfbmRrX3N0bF9zaGFyZWRfbGliX2Z1bGxwYXRoIDo9CiAgIG15X25ka19zdGxfc3RhdGljX2xpYiA6PQotICBteV9uZGtfY3BwX3N0ZF92ZXJzaW9uIDo9CiAgIG15X2NwdV92YXJpYW50IDo9ICQoVEFSR0VUXyQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClDUFVfQUJJKQogICBpZmVxIChtaXBzMzJyNiwkKFRBUkdFVF8kKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQVJDSF9WQVJJQU5UKSkKICAgICBteV9jcHVfdmFyaWFudCA6PSBtaXBzMzJyNgpAQCAtMTg5LDg1ICsxODgsNDAgQEAKICAgaWZlcSAoLCQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSkKICAgICBMT0NBTF9OREtfU1RMX1ZBUklBTlQgOj0gc3lzdGVtCiAgIGVuZGlmCi0gIGlmbmVxICgxLCQod29yZHMgJChmaWx0ZXIgbm9uZSBzeXN0ZW0gc3RscG9ydF9zdGF0aWMgc3RscG9ydF9zaGFyZWQgYysrX3N0YXRpYyBjKytfc2hhcmVkIGdudXN0bF9zdGF0aWMsICQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSkpKQorICBpZm5lcSAoMSwkKHdvcmRzICQoZmlsdGVyIG5vbmUgc3lzdGVtIGMrK19zdGF0aWMgYysrX3NoYXJlZCwgJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpKSkpCiAgICAgJChlcnJvciAkKExPQ0FMX1BBVEgpOiBVbmtub3duIExPQ0FMX05ES19TVExfVkFSSUFOVCAkKExPQ0FMX05ES19TVExfVkFSSUFOVCkpCiAgIGVuZGlmCisKICAgaWZlcSAoc3lzdGVtLCQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSkKICAgICBteV9uZGtfc3RsX2luY2x1ZGVfcGF0aCA6PSAkKG15X25ka19zb3VyY2Vfcm9vdCkvY3h4LXN0bC9zeXN0ZW0vaW5jbHVkZQogICAgIG15X3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzICs9IGxpYnN0ZGMrKwotICBlbHNlICMgTE9DQUxfTkRLX1NUTF9WQVJJQU5UIGlzIG5vdCBzeXN0ZW0KLSAgaWZuZXEgKCwkKGZpbHRlciBzdGxwb3J0XyUsICQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSkpCi0gICAgbXlfbmRrX3N0bF9pbmNsdWRlX3BhdGggOj0gJChteV9uZGtfc291cmNlX3Jvb3QpL2N4eC1zdGwvc3RscG9ydC9zdGxwb3J0Ci0gICAgbXlfc3lzdGVtX3NoYXJlZF9saWJyYXJpZXMgKz0gbGlic3RkYysrCi0gICAgaWZlcSAoc3RscG9ydF9zdGF0aWMsJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpKQotICAgICAgbXlfbmRrX3N0bF9zdGF0aWNfbGliIDo9ICQobXlfbmRrX3NvdXJjZV9yb290KS9jeHgtc3RsL3N0bHBvcnQvbGlicy8kKG15X2NwdV92YXJpYW50KS9saWJzdGxwb3J0X3N0YXRpYy5hCi0gICAgICBteV9sZGxpYnMgKz0gLWxkbAotICAgIGVsc2UKLSAgICAgIG15X25ka19zdGxfc2hhcmVkX2xpYl9mdWxscGF0aCA6PSAkKG15X25ka19zb3VyY2Vfcm9vdCkvY3h4LXN0bC9zdGxwb3J0L2xpYnMvJChteV9jcHVfdmFyaWFudCkvbGlic3RscG9ydF9zaGFyZWQuc28KLSAgICBlbmRpZgotICBlbHNlICMgTE9DQUxfTkRLX1NUTF9WQVJJQU5UIGlzIG5vdCBzdGxwb3J0XyogZWl0aGVyCi0gIGlmbmVxICgsJChmaWx0ZXIgYysrXyUsICQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSkpCi0gICAgIyBQcmUtcjExIE5ES3MgdXNlZCBsaWJnYWJpKysgZm9yIGxpYmMrKydzIEMrKyBBQkksIGJ1dCByMTEgYW5kIGxhdGVyIHVzZQotICAgICMgbGliYysrYWJpLgotICAgICMKLSAgICAjIHIxMyBubyBsb25nZXIgaGFzIHRoZSBpbm5lciBkaXJlY3RvcnkgYXMgYSBzaWRlIGVmZmVjdCBvZiBqdXN0IHVzaW5nCi0gICAgIyBleHRlcm5hbC9saWJjeHguCi0gICAgaWZlcSAocjEwLCQoTE9DQUxfTkRLX1ZFUlNJT04pKQotICAgICAgbXlfbmRrX3N0bF9pbmNsdWRlX3BhdGggOj0gXAotICAgICAgICAkKG15X25ka19zb3VyY2Vfcm9vdCkvY3h4LXN0bC9sbHZtLWxpYmMrKy9saWJjeHgvaW5jbHVkZQotICAgICAgbXlfbmRrX3N0bF9pbmNsdWRlX3BhdGggKz0gXAotICAgICAgICAkKG15X25ka19zb3VyY2Vfcm9vdCkvY3h4LXN0bC9sbHZtLWxpYmMrKy9nYWJpKysvaW5jbHVkZQotICAgIGVsc2UgaWZlcSAocjExLCQoTE9DQUxfTkRLX1ZFUlNJT04pKQotICAgICAgbXlfbmRrX3N0bF9pbmNsdWRlX3BhdGggOj0gXAotICAgICAgICAkKG15X25ka19zb3VyY2Vfcm9vdCkvY3h4LXN0bC9sbHZtLWxpYmMrKy9saWJjeHgvaW5jbHVkZQotICAgICAgbXlfbmRrX3N0bF9pbmNsdWRlX3BhdGggKz0gXAotICAgICAgICAkKG15X25ka19zb3VyY2Vfcm9vdCkvY3h4LXN0bC9sbHZtLWxpYmMrK2FiaS9saWJjeHhhYmkvaW5jbHVkZQotICAgIGVsc2UKLSAgICAgIG15X25ka19zdGxfaW5jbHVkZV9wYXRoIDo9IFwKLSAgICAgICAgJChteV9uZGtfc291cmNlX3Jvb3QpL2N4eC1zdGwvbGx2bS1saWJjKysvaW5jbHVkZQotICAgICAgbXlfbmRrX3N0bF9pbmNsdWRlX3BhdGggKz0gXAotICAgICAgICAkKG15X25ka19zb3VyY2Vfcm9vdCkvY3h4LXN0bC9sbHZtLWxpYmMrK2FiaS9pbmNsdWRlCi0gICAgZW5kaWYKKyAgZWxzZSBpZm5lcSAoLCQoZmlsdGVyIGMrK18lLCAkKExPQ0FMX05ES19TVExfVkFSSUFOVCkpKQorICAgIG15X25ka19zdGxfaW5jbHVkZV9wYXRoIDo9IFwKKyAgICAgICQobXlfbmRrX3NvdXJjZV9yb290KS9jeHgtc3RsL2xsdm0tbGliYysrL2luY2x1ZGUKKyAgICBteV9uZGtfc3RsX2luY2x1ZGVfcGF0aCArPSBcCisgICAgICAkKG15X25ka19zb3VyY2Vfcm9vdCkvY3h4LXN0bC9sbHZtLWxpYmMrK2FiaS9pbmNsdWRlCiAgICAgbXlfbmRrX3N0bF9pbmNsdWRlX3BhdGggKz0gJChteV9uZGtfc291cmNlX3Jvb3QpL2FuZHJvaWQvc3VwcG9ydC9pbmNsdWRlCiAKICAgICBteV9saWJjeHhfbGliZGlyIDo9IFwKICAgICAgICQobXlfbmRrX3NvdXJjZV9yb290KS9jeHgtc3RsL2xsdm0tbGliYysrL2xpYnMvJChteV9jcHVfdmFyaWFudCkKIAotICAgIGlmbmVxICgsJChmaWx0ZXIgcjEwIHIxMSwkKExPQ0FMX05ES19WRVJTSU9OKSkpCi0gICAgICBpZmVxIChjKytfc3RhdGljLCQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSkKLSAgICAgICAgbXlfbmRrX3N0bF9zdGF0aWNfbGliIDo9ICQobXlfbGliY3h4X2xpYmRpcikvbGliYysrX3N0YXRpYy5hCi0gICAgICBlbHNlCi0gICAgICAgIG15X25ka19zdGxfc2hhcmVkX2xpYl9mdWxscGF0aCA6PSAkKG15X2xpYmN4eF9saWJkaXIpL2xpYmMrK19zaGFyZWQuc28KLSAgICAgIGVuZGlmCisgICAgaWZlcSAoYysrX3N0YXRpYywkKExPQ0FMX05ES19TVExfVkFSSUFOVCkpCisgICAgICBteV9uZGtfc3RsX3N0YXRpY19saWIgOj0gXAorICAgICAgICAkKG15X2xpYmN4eF9saWJkaXIpL2xpYmMrK19zdGF0aWMuYSBcCisgICAgICAgICQobXlfbGliY3h4X2xpYmRpcikvbGliYysrYWJpLmEKICAgICBlbHNlCi0gICAgICBpZmVxIChjKytfc3RhdGljLCQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSkKLSAgICAgICAgbXlfbmRrX3N0bF9zdGF0aWNfbGliIDo9IFwKLSAgICAgICAgICAkKG15X2xpYmN4eF9saWJkaXIpL2xpYmMrK19zdGF0aWMuYSBcCi0gICAgICAgICAgJChteV9saWJjeHhfbGliZGlyKS9saWJjKythYmkuYQotICAgICAgZWxzZQotICAgICAgICBteV9uZGtfc3RsX3NoYXJlZF9saWJfZnVsbHBhdGggOj0gJChteV9saWJjeHhfbGliZGlyKS9saWJjKytfc2hhcmVkLnNvCi0gICAgICBlbmRpZgorICAgICAgbXlfbmRrX3N0bF9zaGFyZWRfbGliX2Z1bGxwYXRoIDo9ICQobXlfbGliY3h4X2xpYmRpcikvbGliYysrX3NoYXJlZC5zbworICAgIGVuZGlmCiAKLSAgICAgIG15X25ka19zdGxfc3RhdGljX2xpYiArPSAkKG15X2xpYmN4eF9saWJkaXIpL2xpYmFuZHJvaWRfc3VwcG9ydC5hCi0gICAgICBpZm5lcSAoLCQoZmlsdGVyIGFybWVhYmkgYXJtZWFiaS12N2EsJChteV9jcHVfdmFyaWFudCkpKQotICAgICAgICBteV9uZGtfc3RsX3N0YXRpY19saWIgKz0gJChteV9saWJjeHhfbGliZGlyKS9saWJ1bndpbmQuYQotICAgICAgZW5kaWYKKyAgICBteV9uZGtfc3RsX3N0YXRpY19saWIgKz0gJChteV9saWJjeHhfbGliZGlyKS9saWJhbmRyb2lkX3N1cHBvcnQuYQorICAgIGlmbmVxICgsJChmaWx0ZXIgYXJtZWFiaSBhcm1lYWJpLXY3YSwkKG15X2NwdV92YXJpYW50KSkpCisgICAgICBteV9uZGtfc3RsX3N0YXRpY19saWIgKz0gJChteV9saWJjeHhfbGliZGlyKS9saWJ1bndpbmQuYQogICAgIGVuZGlmCiAKICAgICBteV9sZGxpYnMgKz0gLWxkbAotCi0gICAgbXlfbmRrX2NwcF9zdGRfdmVyc2lvbiA6PSBjKysxMQotICBlbHNlICMgTE9DQUxfTkRLX1NUTF9WQVJJQU5UIGlzIG5vdCBjKytfKiBlaXRoZXIKLSAgaWZuZXEgKCwkKGZpbHRlciBnbnVzdGxfJSwgJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpKSkKLSAgICBteV9uZGtfc3RsX2luY2x1ZGVfcGF0aCA6PSAkKG15X25ka19zb3VyY2Vfcm9vdCkvY3h4LXN0bC9nbnUtbGlic3RkYysrLyQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9OREtfR0NDX1ZFUlNJT04pL2xpYnMvJChteV9jcHVfdmFyaWFudCkvaW5jbHVkZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChteV9uZGtfc291cmNlX3Jvb3QpL2N4eC1zdGwvZ251LWxpYnN0ZGMrKy8kKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfTkRLX0dDQ19WRVJTSU9OKS9pbmNsdWRlCi0gICAgbXlfbmRrX3N0bF9zdGF0aWNfbGliIDo9ICQobXlfbmRrX3NvdXJjZV9yb290KS9jeHgtc3RsL2dudS1saWJzdGRjKysvJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX05ES19HQ0NfVkVSU0lPTikvbGlicy8kKG15X2NwdV92YXJpYW50KS9saWJnbnVzdGxfc3RhdGljLmEKICAgZWxzZSAjIExPQ0FMX05ES19TVExfVkFSSUFOVCBtdXN0IGJlIG5vbmUKICAgICAjIERvIG5vdGhpbmcuCiAgIGVuZGlmCi0gIGVuZGlmCi0gIGVuZGlmCi0gIGVuZGlmCiBlbmRpZgogCiBpZm5lcSAoJChMT0NBTF9VU0VfVk5ESyksKQpAQCAtMzg3LDkgKzM0MSw5IEBACiAjIGNsYW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgaG9zdCBidWlsZHMKICMgZW5hYmxlIGl0IHVubGVzcyB3ZSd2ZSBzcGVjaWZpY2FsbHkgZGlzYWJsZWQgY2xhbmcgYWJvdmUKIGlmZGVmIExPQ0FMX0lTX0hPU1RfTU9EVUxFCi0gICAgaWZlcSAoJCgkKG15X3ByZWZpeClPUyksd2luZG93cykKKyAgICBpZm5lcSAoJCgkKG15X3ByZWZpeClDTEFOR19TVVBQT1JURUQpLHRydWUpCiAgICAgICAgIGlmZXEgKCQobXlfY2xhbmcpLHRydWUpCi0gICAgICAgICAgICAkKGVycm9yICQoTE9DQUxfTU9EVUxFX01BS0VGSUxFKTogJChMT0NBTF9NT0RVTEUpOiBDbGFuZyBpcyBub3QgeWV0IHN1cHBvcnRlZCBmb3Igd2luZG93cyBiaW5hcmllcykKKyAgICAgICAgICAgICQoY2FsbCBwcmV0dHktZXJyb3IsQ2xhbmcgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yICQoJChteV9wcmVmaXgpT1MpIGJpbmFyaWVzKQogICAgICAgICBlbmRpZgogICAgICAgICBteV9jbGFuZyA6PSBmYWxzZQogICAgIGVsc2UKQEAgLTM5NywxMSArMzUxLDYgQEAKICAgICAgICAgICAgIG15X2NsYW5nIDo9IHRydWUKICAgICAgICAgZW5kaWYKICAgICBlbmRpZgotIyBBZGQgb3B0aW9uIHRvIG1ha2UgZ2NjIHRoZSBkZWZhdWx0IGZvciBkZXZpY2UgYnVpbGQKLWVsc2UgaWZlcSAoJChVU0VfQ0xBTkdfUExBVEZPUk1fQlVJTEQpLGZhbHNlKQotICAgIGlmZXEgKCQobXlfY2xhbmcpLCkKLSAgICAgICAgbXlfY2xhbmcgOj0gZmFsc2UKLSAgICBlbmRpZgogZWxzZSBpZmVxICgkKG15X2NsYW5nKSwpCiAgICAgbXlfY2xhbmcgOj0gdHJ1ZQogZW5kaWYKQEAgLTQyOSwxMSArMzc4LDYgQEAKICAgICBteV9jcHBfc3RkX3ZlcnNpb24gOj0gJChERUZBVUxUX0dDQ19DUFBfU1REX1ZFUlNJT04pCiBlbmRpZgogCi1pZmRlZiBMT0NBTF9TREtfVkVSU0lPTgotICAgICMgVGhlIE5ESyBoYW5kbGVzIHRoaXMgaXRzZWxmLgotICAgIG15X2NwcF9zdGRfdmVyc2lvbiA6PSAkKG15X25ka19jcHBfc3RkX3ZlcnNpb24pCi1lbmRpZgotCiBpZmRlZiBMT0NBTF9JU19IT1NUX01PRFVMRQogICAgIGlmbmVxICgkKG15X2NsYW5nKSx0cnVlKQogICAgICAgICAjIFRoZSBob3N0IEdDQyBkb2Vzbid0IHN1cHBvcnQgQysrMTQgKGFuZCBpcyBkZXByZWNhdGVkLCBzbyBsaWtlbHkKQEAgLTY2NSw2ICs2MDksOSBAQAogICBteV9jYyA6PSAkKG15X2NjX3dyYXBwZXIpICQobXlfY2MpCiBlbmRpZgogCitTWU5UQVhfVE9PTFNfUFJFRklYIDo9IFwKKyAgICAkKExMVk1fUFJFQlVJTFRTX0JBU0UpLyQoQlVJTERfT1MpLXg4Ni8kKExMVk1fUFJFQlVJTFRTX1ZFUlNJT04pL2xpYmV4ZWMKKwogaWZuZXEgKCQoTE9DQUxfTk9fU1RBVElDX0FOQUxZWkVSKSx0cnVlKQogICBteV9jYyA6PSBDQ0NfQ0M9JChDTEFORykgQ0xBTkc9JChDTEFORykgXAogICAgICAgICAgICAkKFNZTlRBWF9UT09MU19QUkVGSVgpL2NjYy1hbmFseXplcgpAQCAtODA2LDcgKzc1Myw3IEBACiBpZm5lcSAoLCQoTE9DQUxfU0RLX1ZFUlNJT04pKQogIyBTZXQgdGFyZ2V0LWFwaSBmb3IgTE9DQUxfU0RLX1ZFUlNJT05zIG90aGVyIHRoYW4gY3VycmVudC4KIGlmbmVxICgsJChmaWx0ZXItb3V0IGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50LCAkKExPQ0FMX1NES19WRVJTSU9OKSkpCi1yZW5kZXJzY3JpcHRfdGFyZ2V0X2FwaSA6PSAkKExPQ0FMX1NES19WRVJTSU9OKQorcmVuZGVyc2NyaXB0X3RhcmdldF9hcGkgOj0gJChjYWxsIGdldC1udW1lcmljLXNkay12ZXJzaW9uLCQoTE9DQUxfU0RLX1ZFUlNJT04pKQogZW5kaWYKIGVuZGlmICAjIExPQ0FMX1NES19WRVJTSU9OIGlzIHNldAogZW5kaWYgICMgTE9DQUxfUkVOREVSU0NSSVBUX1RBUkdFVF9BUEkgaXMgc2V0CkBAIC04NzAsNiArODE3LDkgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBDb21waWxlIHRoZSAucHJvdG8gZmlsZXMgdG8gLmNjIChvciAuYykgYW5kIHRoZW4gdG8gLm8KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmVxICgkKHN0cmlwICQoTE9DQUxfUFJPVE9DX09QVElNSVpFX1RZUEUpKSwpCisgIExPQ0FMX1BST1RPQ19PUFRJTUlaRV9UWVBFIDo9IGxpdGUKK2VuZGlmCiBwcm90b19zb3VyY2VzIDo9ICQoZmlsdGVyICUucHJvdG8sJChteV9zcmNfZmlsZXMpKQogaWZuZXEgKCQocHJvdG9fc291cmNlcyksKQogcHJvdG9fZ2VuX2RpciA6PSAkKGdlbmVyYXRlZF9zb3VyY2VzX2RpcikvcHJvdG8KQEAgLTg5MSw3ICs4NDEsNyBAQAogZW5kaWYKIG15X3Byb3RvX2NfaW5jbHVkZXMgOj0gZXh0ZXJuYWwvcHJvdG9idWYvc3JjCiBteV9jZmxhZ3MgKz0gLURHT09HTEVfUFJPVE9CVUZfTk9fUlRUSQotbXlfcHJvdG9jX2ZsYWdzIDo9IC0tY3BwX291dD0kKHByb3RvX2dlbl9kaXIpCitteV9wcm90b2NfZmxhZ3MgOj0gLS1jcHBfb3V0PSQoaWYgJChmaWx0ZXIgbGl0ZSBsaXRlLXN0YXRpYywkKExPQ0FMX1BST1RPQ19PUFRJTUlaRV9UWVBFKSksbGl0ZTosKSQocHJvdG9fZ2VuX2RpcikKIG15X3Byb3RvY19kZXBzIDo9CiBlbmRpZgogbXlfcHJvdG9fY19pbmNsdWRlcyArPSAkKHByb3RvX2dlbl9kaXIpCkBAIC0xNDI2LDEwICsxMzc2LDEyIEBACiAjIyBvdGhlciBOREstYnVpbHQgbGlicmFyaWVzCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2FsbG93ZWRfbmRrX3R5cGVzLm1rCisKIGlmZGVmIExPQ0FMX1NES19WRVJTSU9OCi1teV9saW5rX3R5cGUgOj0gbmF0aXZlOm5kawotbXlfd2Fybl90eXBlcyA6PQotbXlfYWxsb3dlZF90eXBlcyA6PSBuYXRpdmU6bmRrCitteV9saW5rX3R5cGUgOj0gbmF0aXZlOm5kazokKG15X25ka19zdGxfZmFtaWx5KTokKG15X25ka19zdGxfbGlua190eXBlKQorbXlfd2Fybl90eXBlcyA6PSAkKG15X3dhcm5fbmRrX3R5cGVzKQorbXlfYWxsb3dlZF90eXBlcyA6PSAkKG15X2FsbG93ZWRfbmRrX3R5cGVzKQogZWxzZSBpZmRlZiBMT0NBTF9VU0VfVk5ESwogICAgIF9uYW1lIDo9ICQocGF0c3Vic3QgJS52ZW5kb3IsJSwkKExPQ0FMX01PRFVMRSkpCiAgICAgaWZuZXEgKCQoZmlsdGVyICQoX25hbWUpLCQoVk5ES19DT1JFX0xJQlJBUklFUykgJChWTkRLX1NBTUVQUk9DRVNTX0xJQlJBUklFUykgJChMTE5ES19MSUJSQVJJRVMpKSwpCkBAIC0xNDQ5LDggKzE0MDEsOCBAQAogICAgIGVuZGlmCiBlbHNlCiBteV9saW5rX3R5cGUgOj0gbmF0aXZlOnBsYXRmb3JtCi1teV93YXJuX3R5cGVzIDo9Ci1teV9hbGxvd2VkX3R5cGVzIDo9IG5hdGl2ZTpuZGsgbmF0aXZlOnBsYXRmb3JtCitteV93YXJuX3R5cGVzIDo9ICQobXlfd2Fybl9uZGtfdHlwZXMpCitteV9hbGxvd2VkX3R5cGVzIDo9ICQobXlfYWxsb3dlZF9uZGtfdHlwZXMpIG5hdGl2ZTpwbGF0Zm9ybQogZW5kaWYKIAogbXlfbGlua19kZXBzIDo9ICQoYWRkcHJlZml4IFNUQVRJQ19MSUJSQVJJRVM6LCQobXlfd2hvbGVfc3RhdGljX2xpYnJhcmllcykgJChteV9zdGF0aWNfbGlicmFyaWVzKSkKQEAgLTE2OTYsNyArMTY0OCw2IEBACiAgICAgICAgIGlmZXEgKCwkKGZpbHRlciAtV2Vycm9yLCQobXlfYWxsX2NmbGFncykpKQogICAgICAgICAgICMgQWRkIC1XYWxsIC1XZXJyb3IgdW5sZXNzIHRoZSBwcm9qZWN0IGlzIGluIHRoZSBXQVJOSU5HX0FMTE9XRUQgcHJvamVjdCBsaXN0LgogICAgICAgICAgIGlmZXEgKCwkKHN0cmlwICQoY2FsbCBmaW5kX3dhcm5pbmdfYWxsb3dlZF9wcm9qZWN0cywkKExPQ0FMX1BBVEgpKSkpCi0gICAgICAgICAgICAkKGV2YWwgTU9EVUxFU19BRERFRF9XRVJST1IgOj0gJChNT0RVTEVTX0FEREVEX1dFUlJPUikgJChMT0NBTF9NT0RVTEVfTUFLRUZJTEUpOiQoTE9DQUxfTU9EVUxFKSkKICAgICAgICAgICAgIG15X2NmbGFncyA6PSAtV2FsbCAtV2Vycm9yICQobXlfY2ZsYWdzKQogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICQoZXZhbCBNT0RVTEVTX0FEREVEX1dBTEwgOj0gJChNT0RVTEVTX0FEREVEX1dBTEwpICQoTE9DQUxfTU9EVUxFX01BS0VGSUxFKTokKExPQ0FMX01PRFVMRSkpCkBAIC0xNzM3LDIxICsxNjg4LDIwIEBACiAgICAgaWZuZXEgKCQoTE9DQUxfVElEWV9DSEVDS1MpLCkKICAgICAgIG15X3RpZHlfY2hlY2tzIDo9ICQobXlfdGlkeV9jaGVja3MpLCQoTE9DQUxfVElEWV9DSEVDS1MpCiAgICAgZW5kaWYKLSAgICAjIFNldCB1cCBnbG9iYWwgZGVmYXVsdCBjbGFuZy10aWR5IGZsYWdzLCB3aGljaCBpcyBub25lLgotICAgIG15X3RpZHlfZmxhZ3MgOj0gJChXSVRIX1RJRFlfRkxBR1MpCi0gICAgIyBVc2UgbG9jYWwgY2xhbmctdGlkeSBmbGFncyBpZiBzcGVjaWZpZWQuCi0gICAgaWZuZXEgKCQoTE9DQUxfVElEWV9GTEFHUyksKQotICAgICAgbXlfdGlkeV9mbGFncyA6PSAkKExPQ0FMX1RJRFlfRkxBR1MpCi0gICAgZW5kaWYKKyAgICBteV90aWR5X2ZsYWdzICs9ICQoV0lUSF9USURZX0ZMQUdTKSAkKExPQ0FMX1RJRFlfRkxBR1MpCiAgICAgIyBJZiB0aWR5IGZsYWdzIGFyZSBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0IHRvIGNoZWNrIGFsbCBoZWFkZXIgZmlsZXMuCiAgICAgaWZlcSAoJChteV90aWR5X2ZsYWdzKSwpCiAgICAgICBteV90aWR5X2ZsYWdzIDo9ICQoY2FsbCBkZWZhdWx0X3RpZHlfaGVhZGVyX2ZpbHRlciwkKExPQ0FMX1BBVEgpKQogICAgIGVuZGlmCisgICAgIyBJZiBjbGFuZy10aWR5IGlzIG5vdCBlbmFibGVkIGdsb2JhbGx5LCBhZGQgdGhlIC1xdWlldCBmbGFnLgorICAgIGlmZXEgKCwkKGZpbHRlciAxIHRydWUsJChXSVRIX1RJRFkpKSkKKyAgICAgIG15X3RpZHlfZmxhZ3MgKz0gLXF1aWV0IC1leHRyYS1hcmctYmVmb3JlPS1mbm8tY2FyZXQtZGlhZ25vc3RpY3MKKyAgICBlbmRpZgogCiAgICAgIyBXZSBtaWdodCBiZSB1c2luZyB0aGUgc3RhdGljIGFuYWx5emVyIHRocm91Z2ggY2xhbmctdGlkeS4KICAgICAjIGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5MTQKICAgICBpZm5lcSAoJChteV90aWR5X2NoZWNrcyksKQotICAgICAgbXlfdGlkeV9mbGFncyArPSAiLWV4dHJhLWFyZy1iZWZvcmU9LURfX2NsYW5nX2FuYWx5emVyX18iCisgICAgICBteV90aWR5X2ZsYWdzICs9IC1leHRyYS1hcmctYmVmb3JlPS1EX19jbGFuZ19hbmFseXplcl9fCiAgICAgZW5kaWYKICAgZW5kaWYKIGVuZGlmCkBAIC0xODkwLDYgKzE4NDAsNyBAQAogICAgICAgICAkKG15X3dob2xlX3N0YXRpY19saWJyYXJpZXMpIFwKICAgICAgICAgJChteV9zaGFyZWRfbGlicmFyaWVzKSBcCiAgICAgICAgICQobXlfc3lzdGVtX3NoYXJlZF9saWJyYXJpZXMpKQorU09PTkdfQ09OVi4kKExPQ0FMX01PRFVMRSkuVFlQRSA6PSBuYXRpdmUKIFNPT05HX0NPTlYgOj0gJChTT09OR19DT05WKSAkKExPQ0FMX01PRFVMRSkKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2NvcmUvYnVpbGQtc3lzdGVtLmh0bWwgYi9jb3JlL2J1aWxkLXN5c3RlbS5odG1sCmluZGV4IGM3OTM4Y2MuLjNkODZlMjQgMTAwNjQ0Ci0tLSBhL2NvcmUvYnVpbGQtc3lzdGVtLmh0bWwKKysrIGIvY29yZS9idWlsZC1zeXN0ZW0uaHRtbApAQCAtNzYyLDYgKzc2MiwxOSBAQAogRGlhbGVyLCBDb250YWN0cywgZXRjLiAgVGhpcyB3aWxsIHByb2JhYmx5IGNoYW5nZSBvciBnbyBhd2F5IHdoZW4gd2Ugc3dpdGNoCiB0byBhbiBhbnQtYmFzZWQgYnVpbGQgc3lzdGVtIGZvciB0aGUgYXBwcy48L3A+CiAKKzxoND5MT0NBTF9QQVRDSF9NT0RVTEUgKGV4cGVyaW1lbnRhbCBvcHRpb24pPC9oND4KKzxwPkFzIG9mIEphbnVhcnkgMjAxOCwgeW91IGFsbW9zdCBjZXJ0YWlubHkgZG9uJ3QgbmVlZCB0aGlzIG9wdGlvbiwgc28gcGxlYXNlCithc2sgYW5kIG9ubHkgdXNlIGl0IGlmIHlvdSB1bmRlcnN0YW5kIHdoYXQgeW91J3JlIGRvaW5nLiBUaGlzIGZlYXR1cmUgaXMKK2V4cGVyaW1lbnRhbCBhbmQgbWF5IGdvIGF3YXkgaW4gZnV0dXJlLjwvcD4KKzxwPgorV2hlbiBjb21waWxpbmcgbGFuZ3VhZ2UgbGV2ZWwgOSsgLmphdmEgY29kZSBpbiBwYWNrYWdlcyB0aGF0IGFyZSBwYXJ0IG9mIGEKK2Egc3lzdGVtIG1vZHVsZSwgPGNvZGU+TE9DQUxfUEFUQ0hfTU9EVUxFPC9jb2RlPiBuYW1lcyB0aGUgbW9kdWxlIHRoYXQgeW91cgorc291cmNlcyBhbmQgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBwYXRjaGVkIGludG8uIFRoZSBBbmRyb2lkIHJ1bnRpbWUgY3VycmVudGx5CisoSmFuIDIwMTgpIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBKRVAgMjYxIG1vZHVsZSBzeXN0ZW0gc28gdGhpcyBvcHRpb24gaXMgb25seQorc3VwcG9ydGVkIGF0IGNvbXBpbGUgdGltZS4gSXQgc2hvdWxkIG9ubHkgYmUgbmVlZGVkIHRvIGNvbXBpbGUgdGVzdHMgaW4gcGFja2FnZXMKK3RoYXQgZXhpc3QgaW4gbGliY29yZSBhbmQgd2hpY2ggYXJlIGluY29udmVuaWVudCB0byBtb3ZlIGVsc2V3aGVyZS4KKzwvcD4KKwogPGg0PkxPQ0FMX1BBVEg8L2g0PgogPHA+VGhlIGRpcmVjdG9yeSB5b3VyIEFuZHJvaWQubWsgZmlsZSBpcyBpbi4gWW91IGNhbiBzZXQgaXQgYnkgcHV0dGluZyB0aGUKIGZvbGxvd2luZyBhcyB0aGUgZmlyc3QgbGluZSBpbiB5b3VyIEFuZHJvaWQubWs6PC9wPgpkaWZmIC0tZ2l0IGEvY29yZS9idWlsZF9pZC5tayBiL2NvcmUvYnVpbGRfaWQubWsKaW5kZXggMDAyNzJhYS4uZmY0ZDAxMyAxMDA2NDQKLS0tIGEvY29yZS9idWlsZF9pZC5taworKysgYi9jb3JlL2J1aWxkX2lkLm1rCkBAIC0xOCw0ICsxOCw0IEBACiAjIChsaWtlICJDUkIwMSIpLiAgSXQgbXVzdCBiZSBhIHNpbmdsZSB3b3JkLCBhbmQgaXMKICMgY2FwaXRhbGl6ZWQgYnkgY29udmVudGlvbi4KIAotZXhwb3J0IEJVSUxEX0lEPU9DLURSMQorZXhwb3J0IEJVSUxEX0lEPU9DLU1SMQpkaWZmIC0tZ2l0IGEvY29yZS9jbGFuZy9IT1NUX0NST1NTX3g4Ni5tayBiL2NvcmUvY2xhbmcvSE9TVF9DUk9TU194ODYubWsKaW5kZXggYmY0OGY5NS4uZmZkNzgxMSAxMDA2NDQKLS0tIGEvY29yZS9jbGFuZy9IT1NUX0NST1NTX3g4Ni5taworKysgYi9jb3JlL2NsYW5nL0hPU1RfQ1JPU1NfeDg2Lm1rCkBAIC0xICsxIEBACi0kKGNsYW5nXzJuZF9hcmNoX3ByZWZpeClIT1NUX0NST1NTX0xJQlBST0ZJTEVfUlQgOj0gJChMTFZNX1JUTElCX1BBVEgpL2xpYmNsYW5nX3J0LnByb2ZpbGUtaTY4Ni5hCiskKGNsYW5nXzJuZF9hcmNoX3ByZWZpeClIT1NUX0NST1NTX0xJQlBST0ZJTEVfUlQgOj0gJChMTFZNX1JUTElCX1BBVEgpL2xpYmNsYW5nX3J0LnByb2ZpbGUtaTM4Ni5hCmRpZmYgLS1naXQgYS9jb3JlL2NsYW5nL0hPU1RfeDg2Lm1rIGIvY29yZS9jbGFuZy9IT1NUX3g4Ni5tawppbmRleCAwNzIyYjJhLi4yODAzNTE3IDEwMDY0NAotLS0gYS9jb3JlL2NsYW5nL0hPU1RfeDg2Lm1rCisrKyBiL2NvcmUvY2xhbmcvSE9TVF94ODYubWsKQEAgLTEgKzEgQEAKLSQoY2xhbmdfMm5kX2FyY2hfcHJlZml4KUhPU1RfTElCUFJPRklMRV9SVCA6PSAkKExMVk1fUlRMSUJfUEFUSCkvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LmEKKyQoY2xhbmdfMm5kX2FyY2hfcHJlZml4KUhPU1RfTElCUFJPRklMRV9SVCA6PSAkKExMVk1fUlRMSUJfUEFUSCkvbGliY2xhbmdfcnQucHJvZmlsZS1pMzg2LmEKZGlmZiAtLWdpdCBhL2NvcmUvY2xhbmcvdmVyc2lvbnMubWsgYi9jb3JlL2NsYW5nL3ZlcnNpb25zLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2EyMDZhLi4wMDAwMDAwCi0tLSBhL2NvcmUvY2xhbmcvdmVyc2lvbnMubWsKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMjIENsYW5nL0xMVk0gcmVsZWFzZSB2ZXJzaW9ucy4KLQotTExWTV9QUkVCVUlMVFNfVkVSU0lPTiA/PSBjbGFuZy00MzkzMTIyCi1MTFZNX1BSRUJVSUxUU19CQVNFID89IHByZWJ1aWx0cy9jbGFuZy9ob3N0CmRpZmYgLS1naXQgYS9jb3JlL2NsZWFyX3ZhcnMubWsgYi9jb3JlL2NsZWFyX3ZhcnMubWsKaW5kZXggOTliZDY5MS4uZDFiYTM1NCAxMDA2NDQKLS0tIGEvY29yZS9jbGVhcl92YXJzLm1rCisrKyBiL2NvcmUvY2xlYXJfdmFycy5tawpAQCAtNyw2ICs3LDcgQEAKIExPQ0FMX0FBUFQyX09OTFk6PQogTE9DQUxfQUFQVF9GTEFHUzo9CiBMT0NBTF9BQVBUX0lOQ0xVREVfQUxMX1JFU09VUkNFUzo9CitMT0NBTF9BQVBUX05BTUVTUEFDRVM6PQogTE9DQUxfQURESVRJT05BTF9DRVJUSUZJQ0FURVM6PQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVM6PQogTE9DQUxfQURESVRJT05BTF9IVE1MX0RJUjo9CkBAIC0zNSw2ICszNiw3IEBACiBMT0NBTF9DTEFTU1BBVEg6PQogTE9DQUxfQ09NUEFUSUJJTElUWV9TVUlURTo9CiBMT0NBTF9DT01QQVRJQklMSVRZX1NVUFBPUlRfRklMRVM6PQorTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEU6PQogTE9DQUxfQ09OTFlGTEFHUzo9CiBMT0NBTF9DT1BZX0hFQURFUlM6PQogTE9DQUxfQ09QWV9IRUFERVJTX1RPOj0KQEAgLTU0LDYgKzU2LDcgQEAKIExPQ0FMX0RFWF9QUkVPUFRfSU1BR0VfTE9DQVRJT046PQogTE9DQUxfREVYX1BSRU9QVF9QUk9GSUxFX0NMQVNTX0xJU1RJTkc6PQogTE9DQUxfREVYX1BSRU9QVDo9ICMgJycsdHJ1ZSxmYWxzZSxub3N0cmlwcGluZworTE9DQUxfRElTQUJMRV9BVVRPX0dFTkVSQVRFX1RFU1RfQ09ORklHOj0KIExPQ0FMX0RPTlRfQ0hFQ0tfTU9EVUxFOj0KICMgRG9uJ3QgZGVsZXRlIHRoZSBNRVRBX0lORiBkaXIgd2hlbiBtZXJnaW5nIHN0YXRpYyBKYXZhIGxpYnJhcmllcy4KIExPQ0FMX0RPTlRfREVMRVRFX0pBUl9NRVRBX0lORjo9CkBAIC03Nyw2ICs4MCw3IEBACiBMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlM6PQogTE9DQUxfRVhQT1JUX0hFQURFUl9MSUJSQVJZX0hFQURFUlM6PQogTE9DQUxfRVhQT1JUX1BBQ0tBR0VfUkVTT1VSQ0VTOj0KK0xPQ0FMX0VYUE9SVF9QUk9HVUFSRF9GTEFHX0ZJTEVTOj0KIExPQ0FMX0VYUE9SVF9TSEFSRURfTElCUkFSWV9IRUFERVJTOj0KIExPQ0FMX0VYUE9SVF9TVEFUSUNfTElCUkFSWV9IRUFERVJTOj0KIExPQ0FMX0VYVFJBQ1RfQVBLOj0KQEAgLTk1LDYgKzk5LDcgQEAKIExPQ0FMX0dURVNUOj10cnVlCiBMT0NBTF9IQUxfU1RBVElDX0xJQlJBUklFUzo9CiBMT0NBTF9IRUFERVJfTElCUkFSSUVTOj0KK0xPQ0FMX0hPU1RfUkVRVUlSRURfTU9EVUxFUzo9CiBMT0NBTF9JTklUX1JDOj0KIExPQ0FMX0lOU1RBTExFRF9NT0RVTEU6PQogTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNOj0KQEAgLTEyMSw3ICsxMjYsNiBAQAogTE9DQUxfSkFSX1BST0NFU1NPUjo9CiBMT0NBTF9KQVJfUFJPQ0VTU09SX0FSR1M6PQogTE9DQUxfSkFWQUNGTEFHUzo9Ci1MT0NBTF9KQVZBQ19TSEFSRF9TSVpFOj0KIExPQ0FMX0pBVkFfTEFOR1VBR0VfVkVSU0lPTjo9CiBMT0NBTF9KQVZBX0xBWUVSU19GSUxFOj0KIExPQ0FMX0pBVkFfTElCUkFSSUVTOj0KQEAgLTE3OSw2ICsxODMsNyBAQAogTE9DQUxfUEFDS0FHRV9OQU1FOj0KIExPQ0FMX1BBQ0tBR0VfU1BMSVRTOj0KIExPQ0FMX1BBQ0tfTU9EVUxFX1JFTE9DQVRJT05TOj0KK0xPQ0FMX1BBVENIX01PRFVMRTo9CiBMT0NBTF9QSUNLVVBfRklMRVM6PQogTE9DQUxfUE9TVF9JTlNUQUxMX0NNRDo9CiBMT0NBTF9QT1NUX0xJTktfQ01EOj0KQEAgLTE5MSw4ICsxOTYsMTAgQEAKIExPQ0FMX1BSRUJVSUxUX09CSl9GSUxFUzo9CiBMT0NBTF9QUkVCVUlMVF9TVEFUSUNfSkFWQV9MSUJSQVJJRVM6PQogTE9DQUxfUFJFQlVJTFRfU1RSSVBfQ09NTUVOVFM6PQorTE9DQUxfUFJJVkFURV9QTEFURk9STV9BUElTOj0KIExPQ0FMX1BSSVZJTEVHRURfTU9EVUxFOj0KLSMgJycsZnVsbCxjdXN0b20sbm9zeXN0ZW0sZGlzYWJsZWQsb2JmdXNjYXRpb24sb3B0aW1pemF0aW9uCisjICcnLGZ1bGwsY3VzdG9tLGRpc2FibGVkLG9iZnVzY2F0aW9uLG9wdGltaXphdGlvbgorTE9DQUxfUFJPRFVDVF9NT0RVTEU6PQogTE9DQUxfUFJPR1VBUkRfRU5BQkxFRDo9CiBMT0NBTF9QUk9HVUFSRF9GTEFHX0ZJTEVTOj0KIExPQ0FMX1BST0dVQVJEX0ZMQUdTOj0KQEAgLTIyNiw5ICsyMzMsMTYgQEAKIExPQ0FMX1NES19WRVJTSU9OOj0KIExPQ0FMX1NIQVJFRF9BTkRST0lEX0xJQlJBUklFUzo9CiBMT0NBTF9TSEFSRURfTElCUkFSSUVTOj0KLUxPQ0FMX1NPT05HX0hFQURFUl9KQVIgOj0KK0xPQ0FMX1NPT05HX0NMQVNTRVNfSkFSIDo9CiBMT0NBTF9TT09OR19ERVhfSkFSIDo9CitMT0NBTF9TT09OR19FWFBPUlRfUFJPR1VBUkRfRkxBR1MgOj0KK0xPQ0FMX1NPT05HX0hFQURFUl9KQVIgOj0KIExPQ0FMX1NPT05HX0pBQ09DT19SRVBPUlRfQ0xBU1NFU19KQVIgOj0KK0xPQ0FMX1NPT05HX1BST0dVQVJEX0RJQ1QgOj0KK0xPQ0FMX1NPT05HX1JFU09VUkNFX0VYUE9SVF9QQUNLQUdFIDo9CitMT0NBTF9TT09OR19SUk9fRElSUyA6PQorTE9DQUxfRFJPSURET0NfU1RVQlNfU1JDSkFSIDo9CitMT0NBTF9EUk9JRERPQ19ET0NfWklQIDo9CiAjICcnLHRydWUKIExPQ0FMX1NPVVJDRV9GSUxFU19BTExfR0VORVJBVEVEOj0KIExPQ0FMX1NSQ19GSUxFUzo9CkBAIC0yNDEsNiArMjU1LDcgQEAKIExPQ0FMX1NUUklQX01PRFVMRTo9CiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUzo9bm9uZQogTE9DQUxfVEFSR0VUX1JFUVVJUkVEX01PRFVMRVM6PQorTE9DQUxfVEVTVF9DT05GSUdfT1BUSU9OUzo9CiBMT0NBTF9URVNUX0RBVEE6PQogTE9DQUxfVEVTVF9NT0RVTEVfVE9fUFJPR1VBUkRfV0lUSDo9CiBMT0NBTF9USURZOj0KQEAgLTI0OSw2ICsyNjQsNyBAQAogTE9DQUxfVU5JTlNUQUxMQUJMRV9NT0RVTEU6PQogTE9DQUxfVU5TVFJJUFBFRF9QQVRIOj0KIExPQ0FMX1VTRV9BQVBUMjo9JChVU0VfQUFQVDIpCitMT0NBTF9VU0VfUjg6PQogTE9DQUxfVVNFX1ZOREs6PQogTE9DQUxfVkVORE9SX01PRFVMRTo9CiBMT0NBTF9WVFNDX0ZMQUdTOj0KQEAgLTQyNSw2ICs0NDEsMTMgQEAKIExPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVNfMzI6PQogTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFU182NDo9CiAKKyMgUm9ib2xlY3RyaWMgdmFyaWFibGVzCitMT0NBTF9JTlNUUlVNRU5UX1NPVVJDRV9ESVJTIDo9CitMT0NBTF9ST0JPVEVTVF9GQUlMVVJFX0ZBVEFMIDo9CitMT0NBTF9ST0JPVEVTVF9GSUxFUyA6PQorTE9DQUxfUk9CT1RFU1RfVElNRU9VVCA6PQorTE9DQUxfVEVTVF9QQUNLQUdFIDo9CisKICMgQXV4IHNwZWNpZmljIHZhcmlhYmxlcwogTE9DQUxfQVVYX0FSQ0ggOj0KIExPQ0FMX0FVWF9DUFUgOj0KZGlmZiAtLWdpdCBhL2NvcmUvY29tYm8vVEFSR0VUX2xpbnV4LWFybS5tayBiL2NvcmUvY29tYm8vVEFSR0VUX2xpbnV4LWFybS5tawppbmRleCA3M2IxYzA0Li4wMWNmM2Y1IDEwMDY0NAotLS0gYS9jb3JlL2NvbWJvL1RBUkdFVF9saW51eC1hcm0ubWsKKysrIGIvY29yZS9jb21iby9UQVJHRVRfbGludXgtYXJtLm1rCkBAIC01MCw3ICs1MCw3IEBACiBlbmRpZgogCiBpZmVxICgkKHN0cmlwICQoVEFSR0VUXyQoY29tYm9fMm5kX2FyY2hfcHJlZml4KUFSQ0hfVkFSSUFOVCkpLCkKLVRBUkdFVF8kKGNvbWJvXzJuZF9hcmNoX3ByZWZpeClBUkNIX1ZBUklBTlQgOj0gYXJtdjV0ZQorJChlcnJvciBUQVJHRVRfJChjb21ib18ybmRfYXJjaF9wcmVmaXgpQVJDSF9WQVJJQU5UIG11c3QgYmUgc2V0KQogZW5kaWYKIAogVEFSR0VUX0FSQ0hfU1BFQ0lGSUNfTUFLRUZJTEUgOj0gJChCVUlMRF9DT01CT1MpL2FyY2gvJChUQVJHRVRfJChjb21ib18ybmRfYXJjaF9wcmVmaXgpQVJDSCkvJChUQVJHRVRfJChjb21ib18ybmRfYXJjaF9wcmVmaXgpQVJDSF9WQVJJQU5UKS5tawpkaWZmIC0tZ2l0IGEvY29yZS9jb21iby9hcmNoL2FybS9hcm12NXRlLXZmcC5tayBiL2NvcmUvY29tYm8vYXJjaC9hcm0vYXJtdjV0ZS12ZnAubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1Mjk5YWMuLjAwMDAwMDAKLS0tIGEvY29yZS9jb21iby9hcmNoL2FybS9hcm12NXRlLXZmcC5taworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyBBdCB0aGUgbW9tZW50LCB1c2UgdGhlIHNhbWUgc2V0dGluZ3MgdGhhbiB0aGUgb25lCi0jIGZvciBhcm12NXRlLCBzaW5jZSBUQVJHRVRfQVJDSF9WQVJJQU5UIDo9IGFybXY1dGUtdmZwCi0jIHdpbGwgb25seSBiZSB1c2VkIHRvIHNlbGVjdCBhbiBvcHRpbWl6ZWQgVkZQLWNhcGFibGUgYXNzZW1ibHkKLSMgaW50ZXJwcmV0ZXIgbG9vcCBmb3IgRGFsdmlrLgotIwotaW5jbHVkZSAkKEJVSUxEX0NPTUJPUykvYXJjaC9hcm0vYXJtdjV0ZS5tawotCmRpZmYgLS1naXQgYS9jb3JlL2NvbWJvL2FyY2gvYXJtL2FybXY1dGUubWsgYi9jb3JlL2NvbWJvL2FyY2gvYXJtL2FybXY1dGUubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNzU2OTUuLjAwMDAwMDAKLS0tIGEvY29yZS9jb21iby9hcmNoL2FybS9hcm12NXRlLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jIENvbmZpZ3VyYXRpb24gZm9yIExpbnV4IG9uIEFSTS4KLSMgR2VuZXJhdGluZyBiaW5hcmllcyBmb3IgdGhlIEFSTXY1VEUgYXJjaGl0ZWN0dXJlIGFuZCBoaWdoZXIKLSMKLQpkaWZmIC0tZ2l0IGEvY29yZS9jb21iby9zZWxlY3QubWsgYi9jb3JlL2NvbWJvL3NlbGVjdC5tawppbmRleCA1ZTE4MWI5Li5lYWI0YzcyIDEwMDY0NAotLS0gYS9jb3JlL2NvbWJvL3NlbGVjdC5taworKysgYi9jb3JlL2NvbWJvL3NlbGVjdC5tawpAQCAtMjgsNyArMjgsNyBAQAogCiAjIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciB0aGUgdmFyaW91cyB2YXJpYWJsZXMKIAotJChjb21ib192YXJfcHJlZml4KUdMT0JBTF9BUkZMQUdTIDo9IGNyc1BECiskKGNvbWJvX3Zhcl9wcmVmaXgpR0xPQkFMX0FSRkxBR1MgOj0gY3FzRCAtZm9ybWF0PWdudQogCiAkKGNvbWJvX3Zhcl9wcmVmaXgpU1RBVElDX0xJQl9TVUZGSVggOj0gLmEKIApkaWZmIC0tZ2l0IGEvY29yZS9jb25maWcubWsgYi9jb3JlL2NvbmZpZy5tawppbmRleCA0YmFlNmIzLi5lNzJiNTVhIDEwMDY0NAotLS0gYS9jb3JlL2NvbmZpZy5taworKysgYi9jb3JlL2NvbmZpZy5tawpAQCAtNjAsMjEgKzYwLDIzIEBACiAKICMgTWFyayB2YXJpYWJsZXMgZGVwcmVjYXRlZC9vYnNvbGV0ZQogQ0hBTkdFU19VUkwgOj0gaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vYnVpbGQvKy9tYXN0ZXIvQ2hhbmdlcy5tZAotJChLQVRJX2RlcHJlY2F0ZWRfdmFyIFBBVEgsRG8gbm90IHVzZSBQQVRIIGRpcmVjdGx5LiBTZWUgJChDSEFOR0VTX1VSTCkjUEFUSCkKLSQoS0FUSV9kZXByZWNhdGVkX3ZhciBQWVRIT05QQVRILERvIG5vdCB1c2UgUFlUSE9OUEFUSCBkaXJlY3RseS4gU2VlICQoQ0hBTkdFU19VUkwpI1BZVEhPTlBBVEgpCi0kKEtBVElfZGVwcmVjYXRlZF92YXIgT1VULFVzZSBPVVRfRElSIGluc3RlYWQuIFNlZSAkKENIQU5HRVNfVVJMKSNPVVQpCi0kKEtBVElfZGVwcmVjYXRlZF92YXIgQU5EUk9JRF9IT1NUX09VVCxVc2UgSE9TVF9PVVQgaW5zdGVhZC4gU2VlICQoQ0hBTkdFU19VUkwpI0FORFJPSURfSE9TVF9PVVQpCi0kKEtBVElfZGVwcmVjYXRlZF92YXIgQU5EUk9JRF9QUk9EVUNUX09VVCxVc2UgUFJPRFVDVF9PVVQgaW5zdGVhZC4gU2VlICQoQ0hBTkdFU19VUkwpI0FORFJPSURfUFJPRFVDVF9PVVQpCi0kKEtBVElfZGVwcmVjYXRlZF92YXIgQU5EUk9JRF9IT1NUX09VVF9URVNUQ0FTRVMsVXNlIEhPU1RfT1VUX1RFU1RDQVNFUyBpbnN0ZWFkLiBTZWUgJChDSEFOR0VTX1VSTCkjQU5EUk9JRF9IT1NUX09VVF9URVNUQ0FTRVMpCi0kKEtBVElfZGVwcmVjYXRlZF92YXIgQU5EUk9JRF9UQVJHRVRfT1VUX1RFU1RDQVNFUyxVc2UgVEFSR0VUX09VVF9URVNUQ0FTRVMgaW5zdGVhZC4gU2VlICQoQ0hBTkdFU19VUkwpI0FORFJPSURfVEFSR0VUX09VVF9URVNUQ0FTRVMpCi0kKEtBVElfZGVwcmVjYXRlZF92YXIgQU5EUk9JRF9CVUlMRF9UT1AsVXNlICcuJyBpbnN0ZWFkLiBTZWUgJChDSEFOR0VTX1VSTCkjQU5EUk9JRF9CVUlMRF9UT1ApCi0kKEtBVElfZGVwcmVjYXRlZF92YXIgXAorJChLQVRJX29ic29sZXRlX3ZhciBQQVRILERvIG5vdCB1c2UgUEFUSCBkaXJlY3RseS4gU2VlICQoQ0hBTkdFU19VUkwpI1BBVEgpCiskKEtBVElfb2Jzb2xldGVfdmFyIFBZVEhPTlBBVEgsRG8gbm90IHVzZSBQWVRIT05QQVRIIGRpcmVjdGx5LiBTZWUgJChDSEFOR0VTX1VSTCkjUFlUSE9OUEFUSCkKKyQoS0FUSV9vYnNvbGV0ZV92YXIgT1VULFVzZSBPVVRfRElSIGluc3RlYWQuIFNlZSAkKENIQU5HRVNfVVJMKSNPVVQpCiskKEtBVElfb2Jzb2xldGVfdmFyIEFORFJPSURfSE9TVF9PVVQsVXNlIEhPU1RfT1VUIGluc3RlYWQuIFNlZSAkKENIQU5HRVNfVVJMKSNBTkRST0lEX0hPU1RfT1VUKQorJChLQVRJX29ic29sZXRlX3ZhciBBTkRST0lEX1BST0RVQ1RfT1VULFVzZSBQUk9EVUNUX09VVCBpbnN0ZWFkLiBTZWUgJChDSEFOR0VTX1VSTCkjQU5EUk9JRF9QUk9EVUNUX09VVCkKKyQoS0FUSV9vYnNvbGV0ZV92YXIgQU5EUk9JRF9IT1NUX09VVF9URVNUQ0FTRVMsVXNlIEhPU1RfT1VUX1RFU1RDQVNFUyBpbnN0ZWFkLiBTZWUgJChDSEFOR0VTX1VSTCkjQU5EUk9JRF9IT1NUX09VVF9URVNUQ0FTRVMpCiskKEtBVElfb2Jzb2xldGVfdmFyIEFORFJPSURfVEFSR0VUX09VVF9URVNUQ0FTRVMsVXNlIFRBUkdFVF9PVVRfVEVTVENBU0VTIGluc3RlYWQuIFNlZSAkKENIQU5HRVNfVVJMKSNBTkRST0lEX1RBUkdFVF9PVVRfVEVTVENBU0VTKQorJChLQVRJX29ic29sZXRlX3ZhciBBTkRST0lEX0JVSUxEX1RPUCxVc2UgJy4nIGluc3RlYWQuIFNlZSAkKENIQU5HRVNfVVJMKSNBTkRST0lEX0JVSUxEX1RPUCkKKyQoS0FUSV9vYnNvbGV0ZV92YXIgXAogICBBTkRST0lEX1RPT0xDSEFJTiBcCiAgIEFORFJPSURfVE9PTENIQUlOXzJORF9BUkNIIFwKICAgQU5EUk9JRF9ERVZfU0NSSVBUUyBcCiAgIEFORFJPSURfRU1VTEFUT1JfUFJFQlVJTFRTIFwKICAgQU5EUk9JRF9QUkVfQlVJTERfUEFUSFMgXAogICAsU2VlICQoQ0hBTkdFU19VUkwpI290aGVyX2VudnNldHVwX3ZhcmlhYmxlcykKKyQoS0FUSV9vYnNvbGV0ZV92YXIgUFJPRFVDVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTF9PVkVSUklERSxTZXQgRkNNIFZlcnNpb24gaW4gZGV2aWNlIG1hbmlmZXN0IGluc3RlYWQuIFNlZSAkKENIQU5HRVNfVVJMKSNQUk9EVUNUX0NPTVBBVElCSUxJVFlfTUFUUklYX0xFVkVMX09WRVJSSURFKQorJChLQVRJX29ic29sZXRlX3ZhciBVU0VfQ0xBTkdfUExBVEZPUk1fQlVJTEQsQ2xhbmcgaXMgdGhlIG9ubHkgc3VwcG9ydGVkIEFuZHJvaWQgY29tcGlsZXIuIFNlZSAkKENIQU5HRVNfVVJMKSNVU0VfQ0xBTkdfUExBVEZPUk1fQlVJTEQpCiAKIENIQU5HRVNfVVJMIDo9CiAKQEAgLTg3LDE1ICs4OSw2IEBACiBkaXN0X2dvYWwgOj0gJChzdHJpcCAkKGZpbHRlciBkaXN0LCQoTUFLRUNNREdPQUxTKSkpCiBNQUtFQ01ER09BTFMgOj0gJChzdHJpcCAkKGZpbHRlci1vdXQgZGlzdCwkKE1BS0VDTURHT0FMUykpKQogCi0jIFRlbGwgcHl0aG9uIG5vdCB0byBzcGFtIHRoZSBzb3VyY2UgdHJlZSB3aXRoIC5weWMgZmlsZXMuICBUaGlzCi0jIG9ubHkgaGFzIGFuIGVmZmVjdCBvbiBweXRob24gMi42IGFuZCBhYm92ZS4KLWV4cG9ydCBQWVRIT05ET05UV1JJVEVCWVRFQ09ERSA6PSAxCi0KLWlmbmVxICgkKGZpbHRlciAtLWNvbG9yPWFsd2F5cywgJChHUkVQX09QVElPTlMpKSwpCi0kKHdhcm5pbmcgVGhlIGJ1aWxkIHN5c3RlbSBuZWVkcyB1bm1vZGlmaWVkIG91dHB1dCBvZiBncmVwLikKLSQoZXJyb3IgUGxlYXNlIHJlbW92ZSAtLWNvbG9yPWFsd2F5cyBmcm9tIHlvdXIgICQkR1JFUF9PUFRJT05TKQotZW5kaWYKLQogVU5BTUUgOj0gJChzaGVsbCB1bmFtZSAtc20pCiAKIFNSQ19UQVJHRVRfRElSIDo9ICQoVE9QRElSKWJ1aWxkL3RhcmdldApAQCAtMTA0LDcgKzk3LDcgQEAKIFNSQ19URVNUX0FQSV9ESVIgOj0gJChUT1BESVIpcHJlYnVpbHRzL3Nkay90ZXN0LWFwaQogCiAjIFNvbWUgc3BlY2lmaWMgcGF0aHMgdG8gdG9vbHMKLVNSQ19EUk9JRERPQ19ESVIgOj0gJChUT1BESVIpYnVpbGQvdG9vbHMvZHJvaWRkb2MKK1NSQ19EUk9JRERPQ19ESVIgOj0gJChUT1BESVIpYnVpbGQvbWFrZS90b29scy9kcm9pZGRvYwogCiAjIFNldCB1cCBlZmZpY2llbnQgbWF0aCBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWQgaW4gbWFrZS4KICMgSGVyZSBzaW5jZSB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgZW52c2V0dXAgYXMgd2VsbCBhcyBkdXJpbmcgYnVpbGQuCkBAIC0xNTUsNiArMTQ4LDE1IEBACiBCVUlMRF9IT1NUX0RBTFZJS19KQVZBX0xJQlJBUlkgOj0gJChCVUlMRF9TWVNURU0pL2hvc3RfZGFsdmlrX2phdmFfbGlicmFyeS5tawogQlVJTERfSE9TVF9EQUxWSUtfU1RBVElDX0pBVkFfTElCUkFSWSA6PSAkKEJVSUxEX1NZU1RFTSkvaG9zdF9kYWx2aWtfc3RhdGljX2phdmFfbGlicmFyeS5tawogCitCVUlMRF9IT1NUX1RFU1RfQ09ORklHIDo9ICQoQlVJTERfU1lTVEVNKS9ob3N0X3Rlc3RfY29uZmlnLm1rCitCVUlMRF9UQVJHRVRfVEVTVF9DT05GSUcgOj0gJChCVUlMRF9TWVNURU0pL3RhcmdldF90ZXN0X2NvbmZpZy5taworCitJTlNUUlVNRU5UQVRJT05fVEVTVF9DT05GSUdfVEVNUExBVEUgOj0gJChCVUlMRF9TWVNURU0pL2luc3RydW1lbnRhdGlvbl90ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwKK05BVElWRV9URVNUX0NPTkZJR19URU1QTEFURSA6PSAkKEJVSUxEX1NZU1RFTSkvbmF0aXZlX3Rlc3RfY29uZmlnX3RlbXBsYXRlLnhtbAorRU1QVFlfVEVTVF9DT05GSUcgOj0gJChCVUlMRF9TWVNURU0pL2VtcHR5X3Rlc3RfY29uZmlnLnhtbAorCisjIFRvb2wgdG8gZ2VuZXJhdGUgVHJhZGVGZWQgdGVzdCBjb25maWcgZmlsZSBhdXRvbWF0aWNhbGx5LgorQVVUT0dFTl9URVNUX0NPTkZJR19TQ1JJUFQgOj0gYnVpbGQvbWFrZS90b29scy9hdXRvX2dlbl90ZXN0X2NvbmZpZy5weQogCiAjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBQYXJzZSBvdXQgYW55IG1vZGlmaWVyIHRhcmdldHMuCkBAIC0xNjUsNyArMTY3LDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgVG9vbHMgbmVlZGVkIGluIHByb2R1Y3QgY29uZmlndXJhdGlvbiBtYWtlZmlsZXMuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1OT1JNQUxJWkVfUEFUSCA6PSBidWlsZC90b29scy9ub3JtYWxpemVfcGF0aC5weQorTk9STUFMSVpFX1BBVEggOj0gYnVpbGQvbWFrZS90b29scy9ub3JtYWxpemVfcGF0aC5weQogCiAjICQoMSk6IHRoZSBwYXRocyB0byBiZSBub3JtYWxpemVkCiBkZWZpbmUgbm9ybWFsaXplLXBhdGhzCkBAIC00MDIsMzMgKzQwNCwxMSBAQAogICBXSVRIX1NUQVRJQ19BTkFMWVpFUiA6PQogZW5kaWYKIAotIyBkZWZpbmUgY2xhbmcvbGx2bSB2ZXJzaW9ucyBhbmQgYmFzZSBkaXJlY3RvcnkuCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9jbGFuZy92ZXJzaW9ucy5tawotCiAjIFVuc2V0IFdJVEhfVElEWV9PTkxZIGlmIGdsb2JhbCBXSVRIX1RJRFlfT05MWSBpcyBub3QgdHJ1ZSBub3IgMS4KIGlmZXEgKCwkKGZpbHRlciAxIHRydWUsJChXSVRIX1RJRFlfT05MWSkpKQogICBXSVRIX1RJRFlfT05MWSA6PQogZW5kaWYKIAotUEFUSF9UT19DTEFOR19USURZIDo9IFwKLSAgICAkKExMVk1fUFJFQlVJTFRTX0JBU0UpLyQoQlVJTERfT1MpLXg4Ni8kKExMVk1fUFJFQlVJTFRTX1ZFUlNJT04pL2Jpbi9jbGFuZy10aWR5Ci1pZmVxICgkKHdpbGRjYXJkICQoUEFUSF9UT19DTEFOR19USURZKSksKQotICBpZm5lcSAoLCQoZmlsdGVyIDEgdHJ1ZSwkKFdJVEhfVElEWSkpKQotICAgICQod2FybmluZyAqKiogRGlzYWJsZSBXSVRIX1RJRFkgYmVjYXVzZSAkKFBBVEhfVE9fQ0xBTkdfVElEWSkgZG9lcyBub3QgZXhpc3QpCi0gIGVuZGlmCi0gIFBBVEhfVE9fQ0xBTkdfVElEWSA6PQotZW5kaWYKLQotIyBEaXNhYmxlIFdJVEhfU1RBVElDX0FOQUxZWkVSIGlmIHRvb2wgY2FuJ3QgYmUgZm91bmQKLVNZTlRBWF9UT09MU19QUkVGSVggOj0gXAotICAgICQoTExWTV9QUkVCVUlMVFNfQkFTRSkvJChCVUlMRF9PUykteDg2LyQoTExWTV9QUkVCVUlMVFNfVkVSU0lPTikvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjCi1pZm5lcSAoJChzdHJpcCAkKFdJVEhfU1RBVElDX0FOQUxZWkVSKSksKQotICBpZmVxICgkKHdpbGRjYXJkICQoU1lOVEFYX1RPT0xTX1BSRUZJWCkvY2NjLWFuYWx5emVyKSwpCi0gICAgJCh3YXJuaW5nICoqKiBEaXNhYmxlIFdJVEhfU1RBVElDX0FOQUxZWkVSIGJlY2F1c2UgJChTWU5UQVhfVE9PTFNfUFJFRklYKS9jY2MtYW5hbHl6ZXIgZG9lcyBub3QgZXhpc3QpCi0gICAgV0lUSF9TVEFUSUNfQU5BTFlaRVIgOj0KLSAgZW5kaWYKLWVuZGlmCi0KICMgUGljayBhIEphdmEgY29tcGlsZXIuCiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9jb21iby9qYXZhYy5tawogCkBAIC00NTksOSArNDM5LDkgQEAKIAogIyBXaGF0IHRvIGJ1aWxkOgogIyBwZGsgZnVzaW9uIGlmOgotIyAxKSBQREtfRlVTSU9OX1BMQVRGT1JNX1pJUCBpcyBwYXNzZWQgaW4gZnJvbSB0aGUgZW52aXJvbm1lbnQKKyMgMSkgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAgLyBQREtfRlVTSU9OX1BMQVRGT1JNX0RJUiBpcyBwYXNzZWQgaW4gZnJvbSB0aGUgZW52aXJvbm1lbnQKICMgb3IKLSMgMikgdGhlIHBsYXRmb3JtLnppcCBleGlzdHMgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KKyMgMikgdGhlIHBsYXRmb3JtLnppcCAvIHBkay5tayBleGlzdHMgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KICMgb3IKICMgMykgZnVzaW9uIGlzIGEgY29tbWFuZCBsaW5lIGJ1aWxkIGdvYWwsCiAjICAgIFBES19GVVNJT05fUExBVEZPUk1fWklQIGlzIG5lZWRlZCBhbnl3YXksIHRoZW4gZG8gd2UgbmVlZCB0aGUgJ2Z1c2lvbicgZ29hbD8KQEAgLTQ3MCwyNyArNDUwLDQ0IEBACiAjIG9yCiAjIDIpIFRBUkdFVF9CVUlMRF9QREsgaXMgcGFzc2VkIGluIGZyb20gdGhlIGVudmlyb25tZW50CiAKLSMgaWYgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAgaXMgc3BlY2lmaWVkLCBkbyBub3Qgb3ZlcnJpZGUuCi1pZm5kZWYgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAKLSMgTW9zdCBQREsgcHJvamVjdCBwYXRocyBzaG91bGQgYmUgdXNpbmcgdmVuZG9yL3Bkay9UQVJHRVRfREVWSUNFCi0jIGJ1dCBzb21lIGxlZ2FjeSBvbmVzIChlLmcuIG1pbmlfYXJtdjdhX25lb24gZ2VuZXJpYyBQREspIHdlcmUgc2V0dXAKLSMgd2l0aCB2ZW5kb3IvcGRrL1RBUkdFVF9QUk9EVUNULgotX3Bka19mdXNpb25fZGVmYXVsdF9wbGF0Zm9ybV96aXAgPSAkKHN0cmlwIFwKLSAgJCh3aWxkY2FyZCB2ZW5kb3IvcGRrLyQoVEFSR0VUX0RFVklDRSkvJChUQVJHRVRfUFJPRFVDVCktJChUQVJHRVRfQlVJTERfVkFSSUFOVCkvcGxhdGZvcm0vcGxhdGZvcm0uemlwKSBcCi0gICQod2lsZGNhcmQgdmVuZG9yL3Bkay8kKFRBUkdFVF9ERVZJQ0UpLyQocGF0c3Vic3QgYW9zcF8lLGZ1bGxfJSwkKFRBUkdFVF9QUk9EVUNUKSktJChUQVJHRVRfQlVJTERfVkFSSUFOVCkvcGxhdGZvcm0vcGxhdGZvcm0uemlwKSBcCi0gICQod2lsZGNhcmQgdmVuZG9yL3Bkay8kKFRBUkdFVF9QUk9EVUNUKS8kKFRBUkdFVF9QUk9EVUNUKS0kKFRBUkdFVF9CVUlMRF9WQVJJQU5UKS9wbGF0Zm9ybS9wbGF0Zm9ybS56aXApIFwKLSAgJCh3aWxkY2FyZCB2ZW5kb3IvcGRrLyQoVEFSR0VUX1BST0RVQ1QpLyQocGF0c3Vic3QgYW9zcF8lLGZ1bGxfJSwkKFRBUkdFVF9QUk9EVUNUKSktJChUQVJHRVRfQlVJTERfVkFSSUFOVCkvcGxhdGZvcm0vcGxhdGZvcm0uemlwKSkKLWlmbmVxICgsJChfcGRrX2Z1c2lvbl9kZWZhdWx0X3BsYXRmb3JtX3ppcCkpCi1QREtfRlVTSU9OX1BMQVRGT1JNX1pJUCA6PSAkKHdvcmQgMSwgJChfcGRrX2Z1c2lvbl9kZWZhdWx0X3BsYXRmb3JtX3ppcCkpCi1UQVJHRVRfQlVJTERfUERLIDo9IHRydWUKLWVuZGlmICMgX3Bka19mdXNpb25fZGVmYXVsdF9wbGF0Zm9ybV96aXAKLWVuZGlmICMgIVBES19GVVNJT05fUExBVEZPUk1fWklQCisjIGlmIFBES19GVVNJT05fUExBVEZPUk1fWklQIG9yIFBES19GVVNJT05fUExBVEZPUk1fRElSIGlzIHNwZWNpZmllZCwgZG8gbm90IG92ZXJyaWRlLgoraWZlcSAoLCQoc3RyaXAgJChQREtfRlVTSU9OX1BMQVRGT1JNX1pJUCkkKFBES19GVVNJT05fUExBVEZPUk1fRElSKSkpCisgICMgTW9zdCBQREsgcHJvamVjdCBwYXRocyBzaG91bGQgYmUgdXNpbmcgdmVuZG9yL3Bkay9UQVJHRVRfREVWSUNFCisgICMgYnV0IHNvbWUgbGVnYWN5IG9uZXMgKGUuZy4gbWluaV9hcm12N2FfbmVvbiBnZW5lcmljIFBESykgd2VyZSBzZXR1cAorICAjIHdpdGggdmVuZG9yL3Bkay9UQVJHRVRfUFJPRFVDVC4KKyAgIyBPdGhlcnMgYXJlIHNldCB1cCB3aXRoIHZlbmRvci9wZGsvVEFSR0VUX0RFVklDRS9UQVJHRVRfREVWSUNFLXVzZXJkZWJ1ZworICBfcGRrX2Z1c2lvbl9zZWFyY2hfcGF0aHMgOj0gXAorICAgIHZlbmRvci9wZGsvJChUQVJHRVRfREVWSUNFKS8kKFRBUkdFVF9ERVZJQ0UpLSQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpL3BsYXRmb3JtIFwKKyAgICB2ZW5kb3IvcGRrLyQoVEFSR0VUX0RFVklDRSkvJChUQVJHRVRfUFJPRFVDVCktJChUQVJHRVRfQlVJTERfVkFSSUFOVCkvcGxhdGZvcm0gXAorICAgIHZlbmRvci9wZGsvJChUQVJHRVRfREVWSUNFKS8kKHBhdHN1YnN0IGFvc3BfJSxmdWxsXyUsJChUQVJHRVRfUFJPRFVDVCkpLSQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpL3BsYXRmb3JtIFwKKyAgICB2ZW5kb3IvcGRrLyQoVEFSR0VUX1BST0RVQ1QpLyQoVEFSR0VUX1BST0RVQ1QpLSQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpL3BsYXRmb3JtIFwKKyAgICB2ZW5kb3IvcGRrLyQoVEFSR0VUX1BST0RVQ1QpLyQocGF0c3Vic3QgYW9zcF8lLGZ1bGxfJSwkKFRBUkdFVF9QUk9EVUNUKSktJChUQVJHRVRfQlVJTERfVkFSSUFOVCkvcGxhdGZvcm0KKworICBfcGRrX2Z1c2lvbl9kZWZhdWx0X3BsYXRmb3JtX3ppcCA6PSAkKHN0cmlwICQoZm9yZWFjaCBwLCQoX3Bka19mdXNpb25fc2VhcmNoX3BhdGhzKSwkKHdpbGRjYXJkICQocCkvcGxhdGZvcm0uemlwKSkpCisgIGlmbmVxICgsJChfcGRrX2Z1c2lvbl9kZWZhdWx0X3BsYXRmb3JtX3ppcCkpCisgICAgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAgOj0gJCh3b3JkIDEsICQoX3Bka19mdXNpb25fZGVmYXVsdF9wbGF0Zm9ybV96aXApKQorICAgIF9wZGtfZnVzaW9uX2RlZmF1bHRfcGxhdGZvcm1femlwIDo9CisgIGVsc2UKKyAgICBfcGRrX2Z1c2lvbl9kZWZhdWx0X3BsYXRmb3JtX21rIDo9ICQoc3RyaXAgJChmb3JlYWNoIHAsJChfcGRrX2Z1c2lvbl9zZWFyY2hfcGF0aHMpLCQod2lsZGNhcmQgJChwKS9wZGsubWspKSkKKyAgICBpZm5lcSAoLCQoX3Bka19mdXNpb25fZGVmYXVsdF9wbGF0Zm9ybV9taykpCisgICAgICBQREtfRlVTSU9OX1BMQVRGT1JNX0RJUiA6PSAkKGRpciAkKHdvcmQgMSwkKF9wZGtfZnVzaW9uX2RlZmF1bHRfcGxhdGZvcm1fbWspKSkKKyAgICAgIF9wZGtfZnVzaW9uX2RlZmF1bHRfcGxhdGZvcm1fbWsgOj0KKyAgICBlbmRpZgorICBlbmRpZiAjIF9wZGtfZnVzaW9uX2RlZmF1bHRfcGxhdGZvcm1femlwCisgIF9wZGtfZnVzaW9uX3NlYXJjaF9wYXRocyA6PQorZW5kaWYgIyAhUERLX0ZVU0lPTl9QTEFURk9STV9aSVAgJiYgIVBES19GVVNJT05fUExBVEZPUk1fRElSCisKK2lmbmVxICgsJChQREtfRlVTSU9OX1BMQVRGT1JNX1pJUCkpCisgIGlmbmVxICgsJChQREtfRlVTSU9OX1BMQVRGT1JNX0RJUikpCisgICAgJChlcnJvciBPbmx5IG9uZSBvZiBQREtfRlVTSU9OX1BMQVRGT1JNX1pJUCBvciBQREtfRlVTSU9OX1BMQVRGT1JNX0RJUiBtYXkgYmUgc3BlY2lmaWVkKQorICBlbmRpZgorZW5kaWYKIAogaWZuZXEgKCwkKGZpbHRlciBwZGsgZnVzaW9uLCAkKE1BS0VDTURHT0FMUykpKQogVEFSR0VUX0JVSUxEX1BESyA6PSB0cnVlCiBpZm5lcSAoLCQoZmlsdGVyIGZ1c2lvbiwgJChNQUtFQ01ER09BTFMpKSkKLWlmbmRlZiBQREtfRlVTSU9OX1BMQVRGT1JNX1pJUAotICAkKGVycm9yIFNwZWNpZnkgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAgdG8gZG8gYSBQREsgZnVzaW9uLikKK2lmZXEgKCwkKHN0cmlwICQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApJChQREtfRlVTSU9OX1BMQVRGT1JNX0RJUikpKQorICAkKGVycm9yIFNwZWNpZnkgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAgb3IgUERLX0ZVU0lPTl9QTEFURk9STV9ESVIgdG8gZG8gYSBQREsgZnVzaW9uLikKIGVuZGlmCiBlbmRpZiAgIyBmdXNpb24KIGVuZGlmICAjIHBkayBvciBmdXNpb24KQEAgLTQ5OCw3ICs0OTUsMTkgQEAKIGlmZGVmIFBES19GVVNJT05fUExBVEZPUk1fWklQCiBUQVJHRVRfQlVJTERfUERLIDo9IHRydWUKIGlmZXEgKCwkKHdpbGRjYXJkICQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApKSkKLSAgJChlcnJvciBDYW5ub3QgZmluZCBmaWxlICQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApLikKKyAgaWZuZXEgKCwkKHdpbGRjYXJkICQoZGlyICQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApKS9wZGsubWspKQorICAgIFBES19GVVNJT05fUExBVEZPUk1fRElSIDo9ICQoZGlyICQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApKQorICAgIFBES19GVVNJT05fUExBVEZPUk1fWklQIDo9CisgIGVsc2UKKyAgICAkKGVycm9yIENhbm5vdCBmaW5kIGZpbGUgJChQREtfRlVTSU9OX1BMQVRGT1JNX1pJUCkuKQorICBlbmRpZgorZW5kaWYKK2VuZGlmCisKK2lmZGVmIFBES19GVVNJT05fUExBVEZPUk1fRElSCitUQVJHRVRfQlVJTERfUERLIDo9IHRydWUKK2lmZXEgKCwkKHdpbGRjYXJkICQoUERLX0ZVU0lPTl9QTEFURk9STV9ESVIpL3Bkay5taykpCisgICQoZXJyb3IgQ2Fubm90IGZpbmQgZmlsZSAkKFBES19GVVNJT05fUExBVEZPUk1fRElSKS9wZGsubWsuKQogZW5kaWYKIGVuZGlmCiAKQEAgLTU0Miw2ICs1NTEsMTEgQEAKICAgVVNFX0Q4IDo9IHRydWUKIGVuZGlmCiAKKyMgRGVmYXVsdCBSOCBiZWhhdmlvciB3aGVuIFVTRV9SOCBpcyBub3Qgc3BlY2lmaWVkLgoraWZuZGVmIFVTRV9SOAorICBVU0VfUjggOj0gdHJ1ZQorZW5kaWYKKwogIwogIyBUb29scyB0aGF0IGFyZSBwcmVidWlsdHMgZm9yIFRBUkdFVF9CVUlMRF9BUFBTCiAjCkBAIC01NjYsOCArNTgwLDYgQEAKICAgWklQQUxJR04gOj0gJChwcmVidWlsdF9idWlsZF90b29sc19iaW4pL3ppcGFsaWduCiBlbmRpZiAjIFRBUkdFVF9CVUlMRF9BUFBTIHx8IFRBUkdFVF9CVUlMRF9QREsKIAotUjhfQ09NUEFUX1BST0dVQVJEIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3I4LWNvbXBhdC1wcm9ndWFyZAotCiBpZmVxICgsJChUQVJHRVRfQlVJTERfQVBQUykpCiAgICMgVXNlIFJlbmRlclNjcmlwdCBwcmVidWlsdHMgZm9yIHVuYnVuZGxlZCBidWlsZHMgYnV0IG5vdCBQREsgYnVpbGRzCiAgIExMVk1fUlNfQ0MgOj0gJChIT1NUX09VVF9FWEVDVVRBQkxFUykvbGx2bS1ycy1jYwpAQCAtNTg4LDYgKzYwMCw4IEBACiBTT09OR19KQVZBQ19XUkFQUEVSIDo9ICQoU09PTkdfSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3Nvb25nX2phdmFjX3dyYXBwZXIKIFNPT05HX1pJUCA6PSAkKFNPT05HX0hPU1RfT1VUX0VYRUNVVEFCTEVTKS9zb29uZ196aXAKIE1FUkdFX1pJUFMgOj0gJChTT09OR19IT1NUX09VVF9FWEVDVVRBQkxFUykvbWVyZ2VfemlwcworWE1MTElOVCA6PSAkKFNPT05HX0hPU1RfT1VUX0VYRUNVVEFCTEVTKS94bWxsaW50CitYWiA6PSAkKHByZWJ1aWx0X2J1aWxkX3Rvb2xzKS8kKEhPU1RfUFJFQlVJTFRfVEFHKS9iaW4veHoKIFpJUDJaSVAgOj0gJChTT09OR19IT1NUX09VVF9FWEVDVVRBQkxFUykvemlwMnppcAogWklQVElNRSA6PSAkKHByZWJ1aWx0X2J1aWxkX3Rvb2xzX2JpbikvemlwdGltZQogCkBAIC01OTYsMTMgKzYxMCwxMyBAQAogCiBMRVggOj0gcHJlYnVpbHRzL21pc2MvJChCVUlMRF9PUyktJChIT1NUX1BSRUJVSUxUX0FSQ0gpL2ZsZXgvZmxleC0yLjUuMzkKICMgVGhlIGRlZmF1bHQgUEtHREFUQURJUiBidWlsdCBpbiB0aGUgcHJlYnVpbHQgYmlzb24gaXMgYSByZWxhdGl2ZSBwYXRoCi0jIGV4dGVybmFsL2Jpc29uL2RhdGEuCisjIHByZWJ1aWx0cy9idWlsZC10b29scy9jb21tb24vYmlzb24uCiAjIFRvIHJ1biBiaXNvbiBmcm9tIGVsc2V3aGVyZSB5b3UgbmVlZCB0byBzZXQgdXAgZW52aXJvbWVudGFsIHZhcmlhYmxlCiAjIEJJU09OX1BLR0RBVEFESVIuCi1CSVNPTl9QS0dEQVRBRElSIDo9ICQoUFdEKS9leHRlcm5hbC9iaXNvbi9kYXRhCi1CSVNPTiA6PSBwcmVidWlsdHMvbWlzYy8kKEJVSUxEX09TKS0kKEhPU1RfUFJFQlVJTFRfQVJDSCkvYmlzb24vYmlzb24KK0JJU09OX1BLR0RBVEFESVIgOj0gJChQV0QpL3ByZWJ1aWx0cy9idWlsZC10b29scy9jb21tb24vYmlzb24KK0JJU09OIDo9IHByZWJ1aWx0cy9idWlsZC10b29scy8kKEJVSUxEX09TKS0kKEhPU1RfUFJFQlVJTFRfQVJDSCkvYmluL2Jpc29uCiBZQUNDIDo9ICQoQklTT04pIC1kCi1CSVNPTl9EQVRBIDo9ICQod2lsZGNhcmQgZXh0ZXJuYWwvYmlzb24vZGF0YS8qIGV4dGVybmFsL2Jpc29uL2RhdGEvKi8qKQorQklTT05fREFUQSA6PSAkKHdpbGRjYXJkICQoQklTT05fUEtHREFUQURJUikvKiAkKEJJU09OX1BLR0RBVEFESVIpLyovKikKIAogWUFTTSA6PSBwcmVidWlsdHMvbWlzYy8kKEJVSUxEX09TKS0kKEhPU1RfUFJFQlVJTFRfQVJDSCkveWFzbS95YXNtCiAKQEAgLTY1MCwxNyArNjY0LDE3IEBACiBTSU1HMklNRyA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9zaW1nMmltZyQoSE9TVF9FWEVDVVRBQkxFX1NVRkZJWCkKIElNRzJTSU1HIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2ltZzJzaW1nJChIT1NUX0VYRUNVVEFCTEVfU1VGRklYKQogRTJGU0NLIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2UyZnNjayQoSE9TVF9FWEVDVVRBQkxFX1NVRkZJWCkKLU1LVEFSQkFMTCA6PSBidWlsZC90b29scy9ta3RhcmJhbGwuc2gKK01LVEFSQkFMTCA6PSBidWlsZC9tYWtlL3Rvb2xzL21rdGFyYmFsbC5zaAogVFVORTJGUyA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS90dW5lMmZzJChIT1NUX0VYRUNVVEFCTEVfU1VGRklYKQogSkFSSkFSIDo9ICQoSE9TVF9PVVRfSkFWQV9MSUJSQVJJRVMpL2phcmphci5qYXIKIERBVEFfQklORElOR19DT01QSUxFUiA6PSAkKEhPU1RfT1VUX0pBVkFfTElCUkFSSUVTKS9kYXRhYmluZGluZy1jb21waWxlci5qYXIKLUZBVDE2Q09QWSA6PSBidWlsZC90b29scy9mYXQxNmNvcHkucHkKLUNIRUNLX0xJTktfVFlQRSA6PSBidWlsZC90b29scy9jaGVja19saW5rX3R5cGUucHkKK0ZBVDE2Q09QWSA6PSBidWlsZC9tYWtlL3Rvb2xzL2ZhdDE2Y29weS5weQorQ0hFQ0tfTElOS19UWVBFIDo9IGJ1aWxkL21ha2UvdG9vbHMvY2hlY2tfbGlua190eXBlLnB5CiAKIFBST0dVQVJEIDo9IGV4dGVybmFsL3Byb2d1YXJkL2Jpbi9wcm9ndWFyZC5zaAotSkFWQVRBR1MgOj0gYnVpbGQvdG9vbHMvamF2YS1ldmVudC1sb2ctdGFncy5weQotTUVSR0VUQUdTIDo9IGJ1aWxkL3Rvb2xzL21lcmdlLWV2ZW50LWxvZy10YWdzLnB5Ci1CVUlMRF9JTUFHRV9TUkNTIDo9ICQod2lsZGNhcmQgYnVpbGQvdG9vbHMvcmVsZWFzZXRvb2xzLyoucHkpCitKQVZBVEFHUyA6PSBidWlsZC9tYWtlL3Rvb2xzL2phdmEtZXZlbnQtbG9nLXRhZ3MucHkKK01FUkdFVEFHUyA6PSBidWlsZC9tYWtlL3Rvb2xzL21lcmdlLWV2ZW50LWxvZy10YWdzLnB5CitCVUlMRF9JTUFHRV9TUkNTIDo9ICQod2lsZGNhcmQgYnVpbGQvbWFrZS90b29scy9yZWxlYXNldG9vbHMvKi5weSkKIEFQUEVORDJTSU1HIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2FwcGVuZDJzaW1nCiBWRVJJVFlfU0lHTkVSIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3Zlcml0eV9zaWduZXIKIEJVSUxEX1ZFUklUWV9UUkVFIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2J1aWxkX3Zlcml0eV90cmVlCkBAIC02NzIsNiArNjg2LDcgQEAKIAogREVYRFVNUCA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9kZXhkdW1wMiQoQlVJTERfRVhFQ1VUQUJMRV9TVUZGSVgpCiBQUk9GTUFOIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3Byb2ZtYW4KK0hJRERFTkFQSSA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9oaWRkZW5hcGkKIAogIyByZWxvY2F0aW9uIHBhY2tlcgogUkVMT0NBVElPTl9QQUNLRVIgOj0gcHJlYnVpbHRzL21pc2MvJChCVUlMRF9PUyktJChIT1NUX1BSRUJVSUxUX0FSQ0gpL3JlbG9jYXRpb25fcGFja2VyL3JlbG9jYXRpb25fcGFja2VyCkBAIC02ODAsMTIgKzY5NSwyMyBAQAogRklOREJVR1MgOj0gJChGSU5EQlVHU19ESVIpL2ZpbmRidWdzCiAKICMgVG9vbCB0byBtZXJnZSBBbmRyb2lkTWFuaWZlc3QueG1scwotQU5EUk9JRF9NQU5JRkVTVF9NRVJHRVIgOj0gJChKQVZBKSAtY2xhc3NwYXRoIHByZWJ1aWx0cy9kZXZ0b29scy90b29scy9saWIvbWFuaWZlc3QtbWVyZ2VyLmphciBjb20uYW5kcm9pZC5tYW5pZm1lcmdlci5NYWluIG1lcmdlCitBTkRST0lEX01BTklGRVNUX01FUkdFUl9DTEFTU1BBVEggOj0gXAorICAgIHByZWJ1aWx0cy9ncmFkbGUtcGx1Z2luL2NvbS9hbmRyb2lkL3Rvb2xzL2J1aWxkL21hbmlmZXN0LW1lcmdlci8yNi4wLjAtYmV0YTIvbWFuaWZlc3QtbWVyZ2VyLTI2LjAuMC1iZXRhMi5qYXIgXAorICAgIHByZWJ1aWx0cy9ncmFkbGUtcGx1Z2luL2NvbS9hbmRyb2lkL3Rvb2xzL3Nkay1jb21tb24vMjYuMC4wLWJldGEyL3Nkay1jb21tb24tMjYuMC4wLWJldGEyLmphciBcCisgICAgcHJlYnVpbHRzL2dyYWRsZS1wbHVnaW4vY29tL2FuZHJvaWQvdG9vbHMvY29tbW9uLzI2LjAuMC1iZXRhMi9jb21tb24tMjYuMC4wLWJldGEyLmphciBcCisgICAgcHJlYnVpbHRzL21pc2MvY29tbW9uL2d1YXZhL2d1YXZhLTIxLjAuamFyCitBTkRST0lEX01BTklGRVNUX01FUkdFUiA6PSAkKEpBVkEpIFwKKyAgICAtY2xhc3NwYXRoICQoc3Vic3QgJChzcGFjZSksOiwkKHN0cmlwICQoQU5EUk9JRF9NQU5JRkVTVF9NRVJHRVJfQ0xBU1NQQVRIKSkpIFwKKyAgICBjb20uYW5kcm9pZC5tYW5pZm1lcmdlci5NZXJnZXIKIAogQ09MVU1OOj0gY29sdW1uCiAKIGlmZXEgKCQoRVhQRVJJTUVOVEFMX1VTRV9PUEVOSkRLOSksKQoraWZlcSAoJChSVU5fRVJST1JfUFJPTkUpLHRydWUpCiBVU0VfT1BFTkpESzkgOj0KK2Vsc2UKK1VTRV9PUEVOSkRLOSA6PSB0cnVlCitlbmRpZgogVEFSR0VUX09QRU5KREs5IDo9CiBlbHNlIGlmZXEgKCQoRVhQRVJJTUVOVEFMX1VTRV9PUEVOSkRLOSksZmFsc2UpCiBVU0VfT1BFTkpESzkgOj0KQEAgLTY5OCwxNCArNzI0LDggQEAKIFRBUkdFVF9PUEVOSkRLOSA6PSB0cnVlCiBlbmRpZgogCi0jIFBhdGggdG8gdG9vbHMuamFyLCBvciBlbXB0eSBpZiBVU0VfT1BFTkpESzkgaXMgdW5zZXQKLUhPU1RfSkRLX1RPT0xTX0pBUiA6PQotIyBUT0RPOiBSZW1vdmUgSE9TVF9KREtfVE9PTFNfSkFSIGFuZCBhbGwgcmVmZXJlbmNlcyB0byBpdCBvbmNlIE9wZW5KREsgOAotIyB0b29sY2hhaW5zIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIChpLmUuIHdoZW4gVVNFX09QRU5KREs5IGlzIGVuZm9yY2VkKS4KLSMgaHR0cDovL2IvMzg0MTgyMjAKLWlmbmRlZiBVU0VfT1BFTkpESzkKLUhPU1RfSkRLX1RPT0xTX0pBUiA6PSAkKEFORFJPSURfSkFWQV9UT09MQ0hBSU4pLy4uL2xpYi90b29scy5qYXIKLWVuZGlmICMgaWZuZGVmIFVTRV9PUEVOSkRLOQorIyBQYXRoIHRvIHRvb2xzLmphcgorSE9TVF9KREtfVE9PTFNfSkFSIDo9ICQoQU5EUk9JRF9KQVZBOF9IT01FKS9saWIvdG9vbHMuamFyCiAKICMgSXQncyBjYWxsZWQgbWQ1IG9uIE1hYyBPUyBhbmQgbWQ1c3VtIG9uIExpbnV4CiBpZmVxICgkKEhPU1RfT1MpLGRhcndpbikKQEAgLTcyMyw2ICs3NDMsMTkgQEAKIAogQVBJQ0hFQ0tfQ09NTUFORCA6PSAkKEFQSUNIRUNLKSAtSlhteDEwMjRtIC1KImNsYXNzcGF0aCAkKEFQSUNIRUNLX0NMQVNTUEFUSCkiCiAKKyMgQm9vbGVhbiB2YXJpYWJsZSBkZXRlcm1pbmluZyBpZiB0aGUgd2hpdGVsaXN0IGZvciBjb21wYXRpYmxlIHByb3BlcnRpZXMgaXMgZW5hYmxlZAorUFJPRFVDVF9DT01QQVRJQkxFX1BST1BFUlRZIDo9IGZhbHNlCitpZm5lcSAoJChQUk9EVUNUX0NPTVBBVElCTEVfUFJPUEVSVFlfT1ZFUlJJREUpLCkKKyAgUFJPRFVDVF9DT01QQVRJQkxFX1BST1BFUlRZIDo9ICQoUFJPRFVDVF9DT01QQVRJQkxFX1BST1BFUlRZX09WRVJSSURFKQorZWxzZSBpZmVxICgkKFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMKSwpCisgICMkKHdhcm5pbmcgbm8gcHJvZHVjdCBzaGlwcGluZyBsZXZlbCBkZWZpbmVkKQorZWxzZSBpZm5lcSAoJChjYWxsIG1hdGhfbHQsMjcsJChQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCkpLCkKKyAgUFJPRFVDVF9DT01QQVRJQkxFX1BST1BFUlRZIDo9IHRydWUKK2VuZGlmCisKKy5LQVRJX1JFQURPTkxZIDo9IFwKKyAgICBQUk9EVUNUX0NPTVBBVElCTEVfUFJPUEVSVFkKKwogIyBCb29sZWFuIHZhcmlhYmxlIGRldGVybWluaW5nIGlmIFRyZWJsZSBpcyBmdWxseSBlbmFibGVkCiBQUk9EVUNUX0ZVTExfVFJFQkxFIDo9IGZhbHNlCiBpZm5lcSAoJChQUk9EVUNUX0ZVTExfVFJFQkxFX09WRVJSSURFKSwpCkBAIC03MzMsMTUgKzc2NiwyNSBAQAogICBQUk9EVUNUX0ZVTExfVFJFQkxFIDo9IHRydWUKIGVuZGlmCiAKKyMgVE9ETyhiLzY5ODY1MDMyKTogTWFrZSBQUk9EVUNUX05PVElDRV9TUExJVCB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmQgcmVtb3ZlCisjICAgIHJlZmVyZW5jZXMgdG8gaXQgaGVyZSBhbmQgYmVsb3cuCitpZmRlZiBQUk9EVUNUX05PVElDRV9TUExJVF9PVkVSUklERQorICAgJChlcnJvciBQUk9EVUNUX05PVElDRV9TUExJVF9PVkVSUklERSBjYW5ub3QgYmUgc2V0LikKK2VuZGlmCisKIHJlcXVpcmVtZW50cyA6PSBcCiAgICAgUFJPRFVDVF9UUkVCTEVfTElOS0VSX05BTUVTUEFDRVMgXAogICAgIFBST0RVQ1RfU0VQT0xJQ1lfU1BMSVQgXAogICAgIFBST0RVQ1RfRU5GT1JDRV9WSU5URl9NQU5JRkVTVCBcCisgICAgUFJPRFVDVF9OT1RJQ0VfU1BMSVQKIAogIyBJZiBpdCBpcyBvdmVycmlkZW4sIHRoZW4gdGhlIHJlcXVpcmVtZW50IG92ZXJyaWRlIGlzIHRha2VuLCBvdGhlcndpc2UgaXQncwogIyBQUk9EVUNUX0ZVTExfVFJFQkxFCiAkKGZvcmVhY2ggcmVxLCQocmVxdWlyZW1lbnRzKSwkKGV2YWwgXAogICAgICQocmVxKSA6PSAkKGlmICQoJChyZXEpX09WRVJSSURFKSwkKCQocmVxKV9PVkVSUklERSksJChQUk9EVUNUX0ZVTExfVFJFQkxFKSkpKQorIyBJZiB0aGUgcmVxdWlyZW1lbnQgaXMgZmFsc2UgZm9yIGFueSByZWFzb24sIHRoZW4gaXQncyBub3QgUFJPRFVDVF9GVUxMX1RSRUJMRQorJChmb3JlYWNoIHJlcSwkKHJlcXVpcmVtZW50cyksJChldmFsIFwKKyAgICBQUk9EVUNUX0ZVTExfVFJFQkxFIDo9ICQoaWYgJChmaWx0ZXIgZmFsc2UsJCgkKHJlcSkpKSxmYWxzZSwkKFBST0RVQ1RfRlVMTF9UUkVCTEUpKSkpCiAKIFBST0RVQ1RfRlVMTF9UUkVCTEVfT1ZFUlJJREUgPz0KICQoZm9yZWFjaCByZXEsJChyZXF1aXJlbWVudHMpLCQoZXZhbCAkKHJlcSlfT1ZFUlJJREUgPz0pKQpAQCAtNzU0LDYgKzc5Nyw0NyBAQAogCiByZXF1aXJlbWVudHMgOj0KIAorIyBCT0FSRF9QUk9QRVJUWV9PVkVSUklERVNfU1BMSVRfRU5BQkxFRCBjYW4gYmUgdHJ1ZSBvbmx5IGlmIGVhcmx5LW1vdW50IG9mCisjIHBhcnRpdGlvbnMgaXMgc3VwcG9ydGVkLiBCdXQgdGhlIGVhcmx5LW1vdW50IG11c3QgYmUgc3VwcG9ydGVkIGZvciBmdWxsCisjIHRyZWJsZSBwcm9kdWN0cywgYW5kIHNvIEJPQVJEX1BST1BFUlRZX09WRVJSSURFU19TUExJVF9FTkFCTEVEIHNob3VsZCBiZSBzZXQKKyMgYnkgZGVmYXVsdCBmb3IgZnVsbCB0cmVibGUgcHJvZHVjdHMuCitpZmVxICgkKFBST0RVQ1RfRlVMTF9UUkVCTEUpLHRydWUpCisgIEJPQVJEX1BST1BFUlRZX09WRVJSSURFU19TUExJVF9FTkFCTEVEID89IHRydWUKK2VuZGlmCisKKyMgSWYgUFJPRFVDVF9VU0VfVk5ESyBpcyB0cnVlIGFuZCBCT0FSRF9WTkRLX1ZFUlNJT04gaXMgbm90IGRlZmluZWQgeWV0LAorIyBCT0FSRF9WTkRLX1ZFUlNJT04gd2lsbCBiZSBzZXQgdG8gImN1cnJlbnQiIGFzIGRlZmF1bHQuCisjIFBST0RVQ1RfVVNFX1ZOREsgd2lsbCBiZSB0cnVlIGluIEFuZHJvaWQtUCBvciBsYXRlciBsYXVuY2hpbmcgZGV2aWNlcy4KK1BST0RVQ1RfVVNFX1ZOREsgOj0gZmFsc2UKK2lmbmVxICgkKFBST0RVQ1RfVVNFX1ZOREtfT1ZFUlJJREUpLCkKKyAgUFJPRFVDVF9VU0VfVk5ESyA6PSAkKFBST0RVQ1RfVVNFX1ZOREtfT1ZFUlJJREUpCitlbHNlIGlmZXEgKCQoUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwpLCkKKyAgIyBObyBzaGlwcGluZyBsZXZlbCBkZWZpbmVkCitlbHNlIGlmZXEgKCQoY2FsbCBtYXRoX2d0X29yX2VxLDI3LCQoUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwpKSwpCisgIFBST0RVQ1RfVVNFX1ZOREsgOj0gJChQUk9EVUNUX0ZVTExfVFJFQkxFKQorZW5kaWYKKworaWZlcSAoJChQUk9EVUNUX1VTRV9WTkRLKSx0cnVlKQorICBpZm5kZWYgQk9BUkRfVk5ES19WRVJTSU9OCisgICAgQk9BUkRfVk5ES19WRVJTSU9OIDo9IGN1cnJlbnQKKyAgZW5kaWYKK2VuZGlmCisKKyQoS0FUSV9vYnNvbGV0ZV92YXIgUFJPRFVDVF9VU0VfVk5ES19PVkVSUklERSxVc2UgUFJPRFVDVF9VU0VfVk5ESyBpbnN0ZWFkKQorLktBVElfUkVBRE9OTFkgOj0gXAorICAgIFBST0RVQ1RfVVNFX1ZOREsKKworaWZkZWYgUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwKKyAgaWZuZXEgKCQoY2FsbCBtYXRoX2d0X29yX2VxLCQoUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwpLDI3KSwpCisgICAgaWZuZXEgKCQoVEFSR0VUX1VTRVNfTUtFMkZTKSx0cnVlKQorICAgICAgJChlcnJvciBXaGVuIFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMID49IDI3LCBUQVJHRVRfVVNFU19NS0UyRlMgbXVzdCBiZSB0cnVlKQorICAgIGVuZGlmCisgIGVuZGlmCisgIGlmbmVxICgkKGNhbGwgbnVtYmVyc19sZXNzX3RoYW4sJChQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCksJChCT0FSRF9TWVNURU1TREtfVkVSU0lPTlMpKSwpCisgICAgJChlcnJvciBCT0FSRF9TWVNURU1TREtfVkVSU0lPTlMgKCQoQk9BUkRfU1lTVEVNU0RLX1ZFUlNJT05TKSkgbXVzdCBhbGwgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMICgkKFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMKSkpCisgIGVuZGlmCitlbmRpZgorCiAjIFRoZSBkZWZhdWx0IGtleSBpZiBub3Qgc2V0IGFzIExPQ0FMX0NFUlRJRklDQVRFCiBpZmRlZiBQUk9EVUNUX0RFRkFVTFRfREVWX0NFUlRJRklDQVRFCiAgIERFRkFVTFRfU1lTVEVNX0RFVl9DRVJUSUZJQ0FURSA6PSAkKFBST0RVQ1RfREVGQVVMVF9ERVZfQ0VSVElGSUNBVEUpCkBAIC03NjEsNDIgKzg0NSwzOSBAQAogICBERUZBVUxUX1NZU1RFTV9ERVZfQ0VSVElGSUNBVEUgOj0gYnVpbGQvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvdGVzdGtleQogZW5kaWYKIAotRlJBTUVXT1JLX01BTklGRVNUX0ZJTEUgOj0gc3lzdGVtL2xpYmhpZGwvbWFuaWZlc3QueG1sCi0KLSMgQ29tcGF0aWJpbGl0eSBtYXRyaXggdmVyc2lvbmluZzoKLSMgTUFUUklYX0xFVkVMX09WRVJSSURFIGRlZmluZWQ6IE1BVFJJWF9MRVZFTCA9IE1BVFJJWF9MRVZFTF9PVkVSUklERQotIyBNQVRSSVhfTEVWRUxfT1ZFUlJJREUgdW5kZWZpbmVkOgotIyAgIEZVTExfVFJFQkxFICE9IHRydWU6IE1BVFJJWF9MRVZFTCA9IGxlZ2FjeQotIyAgIEZVTExfVFJFQkxFID09IHRydWU6Ci0jICAgICBTSElQUElOR19BUElfTEVWRUwgZGVmaW5lZDogTUFUUklYX0xFVkVMID0gU0hJUFBJTkdfQVBJX0xFVkVMCi0jICAgICBTSElQUElOR19BUElfTEVWRUwgdW5kZWZpbmVkOiBNQVRSSVhfTEVWRUwgPSBQTEFURk9STV9TREtfVkVSU0lPTgotIyBNQVRSSVhfTEVWRUwgPT0gbGVnYWN5ID0+IGxlZ2FjeS54bWwKLSMgTUFUUklYX0xFVkVMIDw9IDI2ID0+IDI2LnhtbAotIyBNQVRSSVhfTEVWRUwgPT0gMjcgPT4gMjcueG1sICMgZGVmaW5lIHdoZW4gMjcgcmVsZWFzZXMKLSMgTUFUUklYX0xFVkVMID09IDI4ID0+IDI4LnhtbCAjIGRlZmluZSB3aGVuIDI4IHJlbGVhc2VzCi0jIC4uLgotIyBvdGhlcndpc2UgPT4gY3VycmVudC54bWwKLQotaWZuZXEgKCQoUFJPRFVDVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTF9PVkVSUklERSksKQotICBQUk9EVUNUX0NPTVBBVElCSUxJVFlfTUFUUklYX0xFVkVMIDo9ICQoUFJPRFVDVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTF9PVkVSUklERSkKLWVsc2UgaWZuZXEgKCQoUFJPRFVDVF9GVUxMX1RSRUJMRSksdHJ1ZSkKLSAgUFJPRFVDVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTCA6PSBsZWdhY3kKLWVsc2UgaWZuZXEgKCQoUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwpLCkKLSAgUFJPRFVDVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTCA6PSAkKFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMKQotZWxzZQotICBQUk9EVUNUX0NPTVBBVElCSUxJVFlfTUFUUklYX0xFVkVMIDo9ICQoUExBVEZPUk1fU0RLX1ZFUlNJT04pCi1lbmRpZgotCi1pZmVxICgkKHN0cmlwICQoUFJPRFVDVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTCkpLGxlZ2FjeSkKLSAgRlJBTUVXT1JLX0NPTVBBVElCSUxJVFlfTUFUUklYX0ZJTEUgOj0gaGFyZHdhcmUvaW50ZXJmYWNlcy9jb21wYXRpYmlsaXR5X21hdHJpeC5sZWdhY3kueG1sCi1lbHNlIGlmZXEgKCQoY2FsbCBtYXRoX2d0X29yX2VxLCQoUFJPRFVDVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTCksMjcpLCkKLSAgRlJBTUVXT1JLX0NPTVBBVElCSUxJVFlfTUFUUklYX0ZJTEUgOj0gaGFyZHdhcmUvaW50ZXJmYWNlcy9jb21wYXRpYmlsaXR5X21hdHJpeC4yNi54bWwKLWVsc2UKLSAgRlJBTUVXT1JLX0NPTVBBVElCSUxJVFlfTUFUUklYX0ZJTEUgOj0gaGFyZHdhcmUvaW50ZXJmYWNlcy9jb21wYXRpYmlsaXR5X21hdHJpeC5jdXJyZW50LnhtbAotZW5kaWYKLQogQlVJTERfTlVNQkVSX0ZST01fRklMRSA6PSAkJChjYXQgJChPVVRfRElSKS9idWlsZF9udW1iZXIudHh0KQotQlVJTERfREFURVRJTUVfRlJPTV9GSUxFIDo9ICQkKGNhdCAkKE9VVF9ESVIpL2J1aWxkX2RhdGUudHh0KQorQlVJTERfREFURVRJTUVfRlJPTV9GSUxFIDo9ICQkKGNhdCAkKEJVSUxEX0RBVEVUSU1FX0ZJTEUpKQorCisjIFNFUG9saWN5IHZlcnNpb25zCisKKyMgUExBVEZPUk1fU0VQT0xJQ1lfVkVSU0lPTiBpcyBhIG51bWJlciBvZiB0aGUgZm9ybSAiTk4ubSIgd2l0aCAiTk4iIG1hcHBpbmcgdG8KKyMgUExBVEZPUk1fU0RLX1ZFUlNJT04gYW5kICJtIiBhcyBhIG1pbm9yIG51bWJlciB3aGljaCBhbGxvd3MgZm9yIFNFTGludXgKKyMgY2hhbmdlcyBpbmRlcGVuZGVudCBvZiBQTEFURk9STV9TREtfVkVSU0lPTi4gIFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8KKyMgMTAwMDAuMCB0byByZXByZXNlbnQgdGlwLW9mLXRyZWUgZGV2ZWxvcG1lbnQgdGhhdCBpcyBpbmhlcmVudGx5IHVuc3RhYmxlIGFuZAorIyB0aHVzIGRlc2lnbmVkIG5vdCB0byB3b3JrIHdpdGggYW55IHNoaXBwaW5nIHZlbmRvciBwb2xpY3kuICBUaGlzIGlzIHNpbWlsYXIgaW4KKyMgc3Bpcml0IHRvIGhvdyBERUZBVUxUX0FQUF9UQVJHRVRfU0RLIGlzIHNldC4KKyMgVGhlIG1pbm9yIHZlcnNpb24gKCdtJyBjb21wb25lbnQpIG11c3QgYmUgdXBkYXRlZCBldmVyeSB0aW1lIGEgcGxhdGZvcm0gcmVsZWFzZQorIyBpcyBtYWRlIHdoaWNoIGJyZWFrcyBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHByZXZpb3VzIHBsYXRmb3JtIHNlcG9saWN5IHZlcnNpb24sCisjIG5vdCBqdXN0IG9uIGV2ZXJ5IGluY3JlYXNlIGluIFBMQVRGT1JNX1NES19WRVJTSU9OLiAgVGhlIG1pbm9yIHZlcnNpb24gc2hvdWxkCisjIGJlIHJlc2V0IHRvIDAgb24gZXZlcnkgYnVtcCBvZiB0aGUgUExBVEZPUk1fU0RLX1ZFUlNJT04uCitzZXBvbGljeV9tYWpvcl92ZXJzIDo9IDI3CitzZXBvbGljeV9taW5vcl92ZXJzIDo9IDAKKworaWZuZXEgKCQoc2Vwb2xpY3lfbWFqb3JfdmVycyksICQoUExBVEZPUk1fU0RLX1ZFUlNJT04pKQorJChlcnJvciBzZXBvbGljeV9tYWpvcl92ZXJzaW9uIGRvZXMgbm90IG1hdGNoIFBMQVRGT1JNX1NES19WRVJTSU9OLCBwbGVhc2UgdXBkYXRlLikKK2VuZGlmCitpZm5lcSAoUkVMLCQoUExBVEZPUk1fVkVSU0lPTl9DT0RFTkFNRSkpCisgICAgc2Vwb2xpY3lfbWFqb3JfdmVycyA6PSAxMDAwMAorICAgIHNlcG9saWN5X21pbm9yX3ZlcnMgOj0gMAorZW5kaWYKK1BMQVRGT1JNX1NFUE9MSUNZX1ZFUlNJT04gOj0gJChqb2luICQoYWRkc3VmZml4IC4sJChzZXBvbGljeV9tYWpvcl92ZXJzKSksICQoc2Vwb2xpY3lfbWlub3JfdmVycykpCitzZXBvbGljeV9tYWpvcl92ZXJzIDo9CitzZXBvbGljeV9taW5vcl92ZXJzIDo9CisKKyMgQSBsaXN0IG9mIFNFUG9saWN5IHZlcnNpb25zLCBiZXNpZGVzIFBMQVRGT1JNX1NFUE9MSUNZX1ZFUlNJT04sIHRoYXQgdGhlIGZyYW1ld29yayBzdXBwb3J0cy4KK1BMQVRGT1JNX1NFUE9MSUNZX0NPTVBBVF9WRVJTSU9OUyA6PSBcCisgICAgMjYuMCBcCisgICAgMjcuMAogCiAjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTZXQgdXAgZmluYWwgb3B0aW9ucy4KQEAgLTgzNCwxMiArOTE1LDYgQEAKICQoVEFSR0VUXzJORF9BUkNIX1ZBUl9QUkVGSVgpREVYMk9BVF9UQVJHRVRfSU5TVFJVQ1RJT05fU0VUX0ZFQVRVUkVTIDo9IGRlZmF1bHQKIGVuZGlmCiAKLSMgVGhlc2Ugd2lsbCBjb21lIGZyb20gU29vbmcsIGRyb3AgdGhlIGVudmlyb25tZW50IHZlcnNpb25zCi11bmV4cG9ydCBDTEFORwotdW5leHBvcnQgQ0xBTkdfQ1hYCi11bmV4cG9ydCBDQ0NfQ0MKLXVuZXhwb3J0IENDQ19DWFgKLQogIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQ29sbGVjdCBhIGxpc3Qgb2YgdGhlIFNESyB2ZXJzaW9ucyB0aGF0IHdlIGNvdWxkIGNvbXBpbGUgYWdhaW5zdAogIyBGb3IgdXNlIHdpdGggdGhlIExPQ0FMX1NES19WRVJTSU9OIHZhcmlhYmxlIGZvciBpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKQEAgLTg3NSwyMCArOTUwLDIwIEBACiAgICAgJChwYXRzdWJzdCAkKEhJU1RPUklDQUxfU0RLX1ZFUlNJT05TX1JPT1QpLyUvYW5kcm9pZC5qYXIsJSwgXAogICAgICQod2lsZGNhcmQgJChISVNUT1JJQ0FMX1NES19WRVJTSU9OU19ST09UKS8qL2FuZHJvaWQuamFyKSkpCiAKLSMgV2UgZG9uJ3QgaGF2ZSBwcmVidWlsdCB0ZXN0X2N1cnJlbnQgU0RLIHlldC4KLVRBUkdFVF9BVkFJTEFCTEVfU0RLX1ZFUlNJT05TIDo9IHRlc3RfY3VycmVudCAkKFRBUkdFVF9BVkFJTEFCTEVfU0RLX1ZFUlNJT05TKQorVEFSR0VUX0FWQUlMQUJMRV9TREtfVkVSU0lPTlMgOj0gJChhZGRwcmVmaXggc3lzdGVtXywkKGNhbGwgbnVtZXJpY2FsbHlfc29ydCxcCisgICAgJChwYXRzdWJzdCAkKEhJU1RPUklDQUxfU0RLX1ZFUlNJT05TX1JPT1QpLyUvYW5kcm9pZF9zeXN0ZW0uamFyLCUsIFwKKyAgICAkKHdpbGRjYXJkICQoSElTVE9SSUNBTF9TREtfVkVSU0lPTlNfUk9PVCkvKi9hbmRyb2lkX3N5c3RlbS5qYXIpKSkpIFwKKyAgICAkKFRBUkdFVF9BVkFJTEFCTEVfU0RLX1ZFUlNJT05TKQorCisjIFdlIGRvbid0IGhhdmUgcHJlYnVpbHQgdGVzdF9jdXJyZW50IGFuZCBjb3JlX2N1cnJlbnQgU0RLIHlldC4KK1RBUkdFVF9BVkFJTEFCTEVfU0RLX1ZFUlNJT05TIDo9IHRlc3RfY3VycmVudCBjb3JlX2N1cnJlbnQgJChUQVJHRVRfQVZBSUxBQkxFX1NES19WRVJTSU9OUykKIAogVEFSR0VUX1NES19WRVJTSU9OU19XSVRIT1VUX0pBVkFfMThfU1VQUE9SVCA6PSAkKGNhbGwgbnVtYmVyc19sZXNzX3RoYW4sMjQsJChUQVJHRVRfQVZBSUxBQkxFX1NES19WRVJTSU9OUykpCiBUQVJHRVRfU0RLX1ZFUlNJT05TX1dJVEhPVVRfSkFWQV8xOV9TVVBQT1JUIDo9ICQoY2FsbCBudW1iZXJzX2xlc3NfdGhhbiwyNywkKFRBUkdFVF9BVkFJTEFCTEVfU0RLX1ZFUlNJT05TKSkKIAotSU5URVJOQUxfUExBVEZPUk1fQVBJX0ZJTEUgOj0gJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS9QQUNLQUdJTkcvcHVibGljX2FwaS50eHQKLUlOVEVSTkFMX1BMQVRGT1JNX1JFTU9WRURfQVBJX0ZJTEUgOj0gJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS9QQUNLQUdJTkcvcmVtb3ZlZC50eHQKLUlOVEVSTkFMX1BMQVRGT1JNX1NZU1RFTV9BUElfRklMRSA6PSAkKFRBUkdFVF9PVVRfQ09NTU9OX0lOVEVSTUVESUFURVMpL1BBQ0tBR0lORy9zeXN0ZW0tYXBpLnR4dAotSU5URVJOQUxfUExBVEZPUk1fU1lTVEVNX1JFTU9WRURfQVBJX0ZJTEUgOj0gJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS9QQUNLQUdJTkcvc3lzdGVtLXJlbW92ZWQudHh0Ci1JTlRFUk5BTF9QTEFURk9STV9TWVNURU1fRVhBQ1RfQVBJX0ZJTEUgOj0gJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS9QQUNLQUdJTkcvc3lzdGVtLWV4YWN0LnR4dAotSU5URVJOQUxfUExBVEZPUk1fVEVTVF9BUElfRklMRSA6PSAkKFRBUkdFVF9PVVRfQ09NTU9OX0lOVEVSTUVESUFURVMpL1BBQ0tBR0lORy90ZXN0LWFwaS50eHQKLUlOVEVSTkFMX1BMQVRGT1JNX1RFU1RfUkVNT1ZFRF9BUElfRklMRSA6PSAkKFRBUkdFVF9PVVRfQ09NTU9OX0lOVEVSTUVESUFURVMpL1BBQ0tBR0lORy90ZXN0LXJlbW92ZWQudHh0Ci1JTlRFUk5BTF9QTEFURk9STV9URVNUX0VYQUNUX0FQSV9GSUxFIDo9ICQoVEFSR0VUX09VVF9DT01NT05fSU5URVJNRURJQVRFUykvUEFDS0FHSU5HL3Rlc3QtZXhhY3QudHh0CitJTlRFUk5BTF9QTEFURk9STV9ISURERU5BUElfTElHSFRfR1JFWUxJU1QgOj0gJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS9QQUNLQUdJTkcvaGlkZGVuYXBpLWxpZ2h0LWdyZXlsaXN0LnR4dAorSU5URVJOQUxfUExBVEZPUk1fSElEREVOQVBJX0RBUktfR1JFWUxJU1QgOj0gJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS9QQUNLQUdJTkcvaGlkZGVuYXBpLWRhcmstZ3JleWxpc3QudHh0CitJTlRFUk5BTF9QTEFURk9STV9ISURERU5BUElfQkxBQ0tMSVNUIDo9ICQoVEFSR0VUX09VVF9DT01NT05fSU5URVJNRURJQVRFUykvUEFDS0FHSU5HL2hpZGRlbmFwaS1ibGFja2xpc3QudHh0CiAKICMgVGhpcyBpcyB0aGUgc3RhbmRhcmQgd2F5IHRvIG5hbWUgYSBkaXJlY3RvcnkgY29udGFpbmluZyBwcmVidWlsdCB0YXJnZXQKICMgb2JqZWN0cy4gRS5nLiwgcHJlYnVpbHQvJChUQVJHRVRfUFJFQlVJTFRfVEFHKS9saWJjLnNvCkBAIC05MzEsNiArMTAwNiw3IEBACiAgICAgY2FjaGVpbWFnZS1ub2RlcHMgXAogICAgIGJwdGltYWdlLW5vZGVwcyBcCiAgICAgdm5vZCB2ZW5kb3JpbWFnZS1ub2RlcHMgXAorICAgIHBub2QgcHJvZHVjdGltYWdlLW5vZGVwcyBcCiAgICAgc3lzdGVtb3RoZXJpbWFnZS1ub2RlcHMgXAogICAgIHJhbWRpc2stbm9kZXBzIFwKICAgICBib290aW1hZ2Utbm9kZXBzIFwKZGlmZiAtLWdpdCBhL2NvcmUvY29uZmlnX3Nhbml0aXplcnMubWsgYi9jb3JlL2NvbmZpZ19zYW5pdGl6ZXJzLm1rCmluZGV4IDk0MTUxNDMuLjM1ZDA3N2MgMTAwNjQ0Ci0tLSBhL2NvcmUvY29uZmlnX3Nhbml0aXplcnMubWsKKysrIGIvY29yZS9jb25maWdfc2FuaXRpemVycy5tawpAQCAtMjE3LDE5ICsyMTcsMTcgQEAKIAogICAgICAgIyBSZXNwZWN0IExPQ0FMX05PU0FOSVRJWkUgZm9yIGludGVnZXItb3ZlcmZsb3cgZmxhZ3MuCiAgICAgICBpZmVxICgkKGZpbHRlciBzaWduZWQtaW50ZWdlci1vdmVyZmxvdywgJChzdHJpcCAkKExPQ0FMX05PU0FOSVRJWkUpKSksKQotICAgICAgICBteV9jZmxhZ3MgKz0gLWZzYW5pdGl6ZT1zaWduZWQtaW50ZWdlci1vdmVyZmxvdworICAgICAgICBteV9zYW5pdGl6ZSArPSBzaWduZWQtaW50ZWdlci1vdmVyZmxvdwogICAgICAgZW5kaWYKICAgICAgIGlmZXEgKCQoZmlsdGVyIHVuc2lnbmVkLWludGVnZXItb3ZlcmZsb3csICQoc3RyaXAgJChMT0NBTF9OT1NBTklUSVpFKSkpLCkKLSAgICAgICAgbXlfY2ZsYWdzICs9IC1mc2FuaXRpemU9dW5zaWduZWQtaW50ZWdlci1vdmVyZmxvdworICAgICAgICBteV9zYW5pdGl6ZSArPSB1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93CiAgICAgICBlbmRpZgotICAgICAgbXlfY2ZsYWdzICs9IC1mc2FuaXRpemUtdHJhcD1hbGwKLSAgICAgIG15X2NmbGFncyArPSAtZnRyYXAtZnVuY3Rpb249YWJvcnQKICAgICAgIG15X2NmbGFncyArPSAkKElOVEVHRVJfT1ZFUkZMT1dfRVhUUkFfQ0ZMQUdTKQogCiAgICAgICAjIENoZWNrIGZvciBkaWFnbm9zdGljcyBtb2RlIChvbiBieSBkZWZhdWx0KS4KICAgICAgIGlmbmVxICgkKGZpbHRlciBpbnRlZ2VyX292ZXJmbG93LCQobXlfc2FuaXRpemVfZGlhZykpLCkKLSAgICAgICAgbXlfY2ZsYWdzICs9IC1mbm8tc2FuaXRpemUtdHJhcD1zaWduZWQtaW50ZWdlci1vdmVyZmxvdyx1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93Ci0gICAgICAgIG15X3NoYXJlZF9saWJyYXJpZXMgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVUJTQU5fUlVOVElNRV9MSUJSQVJZKSAkKG15X3NoYXJlZF9saWJyYXJpZXMpCisgICAgICAgIG15X3Nhbml0aXplX2RpYWcgKz0gc2lnbmVkLWludGVnZXItb3ZlcmZsb3cKKyAgICAgICAgbXlfc2FuaXRpemVfZGlhZyArPSB1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93CiAgICAgICBlbmRpZgogICAgIGVuZGlmCiAgIGVuZGlmCkBAIC0zMjYsNiArMzI0LDI3IEBACiAgIGVuZGlmCiBlbmRpZgogCisjIFVzZSBtaW5pbWFsIGRpYWdub3N0aWNzIHdoZW4gaW50ZWdlciBvdmVyZmxvdyBpcyBlbmFibGVkCitpZm5kZWYgTE9DQUxfSVNfSE9TVF9NT0RVTEUKKyAgIyBQcmUtZW1wdGl2ZWx5IGFkZCBVQlNBTiBtaW5pbWFsIHJ1bnRpbWUgaW5jYXNlIGEgc3RhdGljIGxpYnJhcnkgZGVwZW5kZW5jeSByZXF1aXJlcyBpdAorICBpZmVxICgkKGZpbHRlciBTVEFUSUNfTElCUkFSSUVTLCQoTE9DQUxfTU9EVUxFX0NMQVNTKSksKQorICAgIGlmbmRlZiBMT0NBTF9TREtfVkVSU0lPTgorICAgICAgbXlfc3RhdGljX2xpYnJhcmllcyArPSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClVQlNBTl9NSU5JTUFMX1JVTlRJTUVfTElCUkFSWSkKKyAgICBlbmRpZgorICBlbmRpZgorICBpZm5lcSAoJChmaWx0ZXIgdW5zaWduZWQtaW50ZWdlci1vdmVyZmxvdyBzaWduZWQtaW50ZWdlci1vdmVyZmxvdyBpbnRlZ2VyLCQobXlfc2FuaXRpemUpKSwpCisgICAgaWZlcSAoJChmaWx0ZXIgdW5zaWduZWQtaW50ZWdlci1vdmVyZmxvdyBzaWduZWQtaW50ZWdlciBvdmVyZmxvdyBpbnRlZ2VyLCQobXlfc2FuaXRpemVfZGlhZykpLCkKKyAgICAgIGlmZXEgKCQoZmlsdGVyIGNmaSwkKG15X3Nhbml0aXplX2RpYWcpKSwpCisgICAgICAgIGlmZXEgKCQoZmlsdGVyIGFkZHJlc3MsJChteV9zYW5pdGl6ZSkpLCkKKyAgICAgICAgICBteV9jZmxhZ3MgKz0gLWZzYW5pdGl6ZS1taW5pbWFsLXJ1bnRpbWUKKyAgICAgICAgICBteV9jZmxhZ3MgKz0gLWZuby1zYW5pdGl6ZS10cmFwPWludGVnZXIKKyAgICAgICAgICBteV9jZmxhZ3MgKz0gLWZuby1zYW5pdGl6ZS1yZWNvdmVyPWludGVnZXIKKyAgICAgICAgZW5kaWYKKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGlmCisKIGlmbmVxICgkKHN0cmlwICQoTE9DQUxfU0FOSVRJWkVfUkVDT1ZFUikpLCkKICAgcmVjb3Zlcl9hcmcgOj0gJChzdWJzdCAkKHNwYWNlKSwkKGNvbW1hKSwkKExPQ0FMX1NBTklUSVpFX1JFQ09WRVIpKSwKICAgbXlfY2ZsYWdzICs9IC1mc2FuaXRpemUtcmVjb3Zlcj0kKHJlY292ZXJfYXJnKQpkaWZmIC0tZ2l0IGEvY29yZS9jeHhfc3RsX3NldHVwLm1rIGIvY29yZS9jeHhfc3RsX3NldHVwLm1rCmluZGV4IGYwNzY1OWQuLjUxNzFiOGEgMTAwNjQ0Ci0tLSBhL2NvcmUvY3h4X3N0bF9zZXR1cC5taworKysgYi9jb3JlL2N4eF9zdGxfc2V0dXAubWsKQEAgLTc0LDYgKzc0LDE2IEBACiBpZm5lcSAoJChmaWx0ZXIgJChteV9jeHhfc3RsKSxsaWJjKysgbGliYysrX3N0YXRpYyksKQogICAgIG15X2NmbGFncyArPSAtRF9VU0lOR19MSUJDWFgKIAorICAgIGlmZXEgKCQoJChteV9wcmVmaXgpT1MpLGRhcndpbikKKyAgICAgICAgIyBsaWJjKysncyBoZWFkZXJzIGFyZSBhbm5vdGF0ZWQgd2l0aCBhdmFpbGFiaWxpdHkgbWFjcm9zIHRoYXQgaW5kaWNhdGUKKyAgICAgICAgIyB3aGljaCB2ZXJzaW9uIG9mIE1hYyBPUyB3YXMgdGhlIGZpcnN0IHRvIHNoaXAgd2l0aCBhIGxpYmMrKyBmZWF0dXJlCisgICAgICAgICMgYXZhaWxhYmxlIGluIGl0cyAqc3lzdGVtJ3MqIGxpYmMrKy5keWxpYi4gV2UgZG8gbm90IHVzZSB0aGUgc3lzdGVtJ3MKKyAgICAgICAgIyBsaWJyYXJ5LCBidXQgcmF0aGVyIHNoaXAgb3VyIG93bi4gQXMgc3VjaCwgdGhlc2UgYXZhaWxhYmlsaXR5CisgICAgICAgICMgYXR0cmlidXRlcyBhcmUgbWVhbmluZ2xlc3MgZm9yIHVzIGJ1dCBjYXVzZSBidWlsZCBicmVha3Mgd2hlbiB3ZSB0cnkKKyAgICAgICAgIyB0byB1c2UgY29kZSB0aGF0IHdvdWxkIG5vdCBiZSBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbSdzIGR5bGliLgorICAgICAgICBteV9jcHBmbGFncyArPSAtRF9MSUJDUFBfRElTQUJMRV9BVkFJTEFCSUxJVFkKKyAgICBlbmRpZgorCiAgICAgIyBOb3RlIHRoYXQgdGhlIHN0cnVjdHVyZSBvZiB0aGlzIG1lYW5zIHRoYXQgTE9DQUxfQ1hYX1NUTCA6PSBsaWJjKysgd2lsbAogICAgICMgdXNlIHRoZSBzdGF0aWMgbGliYysrIGZvciBzdGF0aWMgZXhlY3V0YWJsZXMuCiAgICAgaWZlcSAoJChteV9saW5rX3R5cGUpLGR5bmFtaWMpCmRpZmYgLS1naXQgYS9jb3JlL2RlZmluaXRpb25zLm1rIGIvY29yZS9kZWZpbml0aW9ucy5tawppbmRleCBjODM2OGI0Li5iMmIzYmJiIDEwMDY0NAotLS0gYS9jb3JlL2RlZmluaXRpb25zLm1rCisrKyBiL2NvcmUvZGVmaW5pdGlvbnMubWsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogIyAkKDEpOiBkaXJlY3RvcnkgdG8gc2VhcmNoIHVuZGVyCiAjIElnbm9yZXMgJCgxKS9BbmRyb2lkLm1rCiBkZWZpbmUgZmlyc3QtbWFrZWZpbGVzLXVuZGVyCi0kKHNoZWxsIGJ1aWxkL3Rvb2xzL2ZpbmRsZWF2ZXMucHkgJChGSU5EX0xFQVZFU19FWENMVURFUykgXAorJChzaGVsbCBidWlsZC9tYWtlL3Rvb2xzL2ZpbmRsZWF2ZXMucHkgJChGSU5EX0xFQVZFU19FWENMVURFUykgXAogICAgICAgICAtLW1pbmRlcHRoPTIgJChhZGRwcmVmaXggLS1kaXI9LCQoMSkpIEFuZHJvaWQubWspCiBlbmRlZgogCkBAIC0xNzIzLDYgKzE3MjMsMTAgQEAKICQoaWYgJChQUklWQVRFX0FMTF9PQkpFQ1RTKSwsJChoaWRlKSAkKCQoUFJJVkFURV8yTkRfQVJDSF9WQVJfUFJFRklYKSQoUFJJVkFURV9QUkVGSVgpQVIpIGQgJCgxKSAkKGRpciAkKDEpKWR1bW15Lm8gXAogICAmJiBybSAtZiAkKGRpciAkKDEpKWR1bW15Lm8pCiBlbmRlZgorZWxzZQorY3JlYXRlLWR1bW15Lm8taWYtbm8tb2JqcyA9CitnZXQtZHVtbXkuby1pZi1uby1vYmpzID0KK2RlbGV0ZS1kdW1teS5vLWlmLW5vLW9ianMgPQogZW5kaWYgICMgSE9TVF9PUyBpcyBkYXJ3aW4KIAogIyBFeHBsaWNpdGx5IGRlbGV0ZSB0aGUgYXJjaGl2ZSBmaXJzdCBzbyB0aGF0IGFyIGRvZXNuJ3QKQEAgLTE4NDksNyArMTg1Myw3IEBACiAgICQoUFJJVkFURV9PQkpDT1BZKSAtUyAtLXJlbW92ZS1zZWN0aW9uIC5nZGJfaW5kZXggLS1yZW1vdmUtc2VjdGlvbiAuY29tbWVudCAtLWtlZXAtc3ltYm9scz0kQC5rZWVwX3N5bWJvbHMgJEAubWluaV9kZWJ1Z2luZm8gJiYgXAogICAkKFBSSVZBVEVfT0JKQ09QWSkgLS1yZW5hbWUtc2VjdGlvbiBzYXZlZF9kZWJ1Z19mcmFtZT0uZGVidWdfZnJhbWUgJEAubWluaV9kZWJ1Z2luZm8gJiYgXAogICBybSAtZiAkQC5taW5pX2RlYnVnaW5mby54eiAmJiBcCi0gIHh6ICRALm1pbmlfZGVidWdpbmZvICYmIFwKKyAgJChYWikgJEAubWluaV9kZWJ1Z2luZm8gJiYgXAogICAkKFBSSVZBVEVfT0JKQ09QWSkgLS1hZGQtc2VjdGlvbiAuZ251X2RlYnVnZGF0YT0kQC5taW5pX2RlYnVnaW5mby54eiAkQDsgXAogZWxzZSBcCiAgIGNwIC1mICQ8ICRAOyBcCkBAIC0yMDc1LDYgKzIwNzksMTMgQEAKICAgJChQUklWQVRFX0FBUFQyX0NGTEFHUykgLS1sZWdhY3kKIGVuZGVmCiAKKyMgVE9ETyhiLzc0NTc0NTU3KTogdXNlIGFhcHQyIGNvbXBpbGUgLS16aXAgaWYgaXQgZ2V0cyBpbXBsZW1lbnRlZAorZGVmaW5lIGFhcHQyLWNvbXBpbGUtcmVzb3VyY2UtemlwcworQG1rZGlyIC1wICQoZGlyICRAKQorJChaSVBTWU5DKSAtZCAkQC5jb250ZW50cyAtbCAkQC5saXN0ICQoUFJJVkFURV9TT1VSQ0VfUkVTX1pJUFMpCiskKGhpZGUpICQoQUFQVDIpIGNvbXBpbGUgLW8gJEAgLS1kaXIgJEAudG1wICQoUFJJVkFURV9BQVBUMl9DRkxBR1MpIC0tbGVnYWN5CitlbmRlZgorCiAjIFNldCB1cCBydWxlIHRvIGNvbXBpbGUgb25lIHJlc291cmNlIGZpbGUgd2l0aCBhYXB0Mi4KICMgTXVzdCBiZSBjYWxsZWQgd2l0aCAkKGV2YWwpLgogIyAkKDEpOiB0aGUgc291cmNlIGZpbGUKQEAgLTIyMTgsMTYgKzIyMjksNiBAQAogJChoaWRlKSB0ciAnICcgJ1xuJyA8ICRALnRtcCB8ICQoTk9STUFMSVpFX1BBVEgpIHwgc29ydCAtdSA+ICRACiBlbmRlZgogCi0jICQoMSk6IHNoYXJkaW5nIG51bWJlci4KLSMgJCgyKTogSmF2YSBzb3VyY2UgZmlsZXMgcGF0aHMuCi1kZWZpbmUgc2F2ZS1zaGFyZGVkLWphdmEtc291cmNlLWxpc3QKLSQoamF2YV9zb3VyY2VfbGlzdF9maWxlKS5zaGFyZC4kKDEpOiAkKDIpICQkKE5PUk1BTElaRV9QQVRIKQotCUBlY2hvICJzaGFyZCBqYXZhIHNvdXJjZSBsaXN0OiAkJEAiCi0Jcm0gLWYgJCRACi0JJCQoY2FsbCBkdW1wLXdvcmRzLXRvLWZpbGUsJCgyKSwkJEAudG1wKQotCSQoaGlkZSkgdHIgJyAnICdcbicgPCAkJEAudG1wIHwgJCQoTk9STUFMSVpFX1BBVEgpIHwgc29ydCAtdSA+ICQkQAotZW5kZWYKLQogIyBDb21tb24gZGVmaW5pdGlvbiB0byBpbnZva2UgamF2YWMgb24gdGhlIGhvc3QgYW5kIHRhcmdldC4KICMKICMgJCgxKTogamF2YWMKQEAgLTIyMzcsMjMgKzIyMzgsMzEgQEAKICQoaGlkZSkgcm0gLXJmICQoUFJJVkFURV9DTEFTU19JTlRFUk1FRElBVEVTX0RJUikgJChQUklWQVRFX0FOTk9fSU5URVJNRURJQVRFU19ESVIpCiAkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKQogJChoaWRlKSBta2RpciAtcCAkKFBSSVZBVEVfQ0xBU1NfSU5URVJNRURJQVRFU19ESVIpICQoUFJJVkFURV9BTk5PX0lOVEVSTUVESUFURVNfRElSKQotJChoaWRlKSBpZiBbIC1zICQoUFJJVkFURV9KQVZBX1NPVVJDRV9MSVNUKSBdIDsgdGhlbiBcCiskKGlmICQoUFJJVkFURV9TUkNKQVJTKSxcCisgICAgJChaSVBTWU5DKSAtZCAkKFBSSVZBVEVfU1JDSkFSX0lOVEVSTUVESUFURVNfRElSKSAtbCAkKFBSSVZBVEVfU1JDSkFSX0xJU1RfRklMRSkgLWYgIiouamF2YSIgJChQUklWQVRFX1NSQ0pBUlMpKQorJChoaWRlKSBpZiBbIC1zICQoUFJJVkFURV9KQVZBX1NPVVJDRV9MSVNUKSAkKGlmICQoUFJJVkFURV9TUkNKQVJTKSwtbyAtcyAkKFBSSVZBVEVfU1JDSkFSX0xJU1RfRklMRSkgKV0gOyB0aGVuIFwKICAgICAkKFNPT05HX0pBVkFDX1dSQVBQRVIpICQoSkFWQUNfV1JBUFBFUikgJCgxKSAtZW5jb2RpbmcgVVRGLTggXAogICAgICQoaWYgJChmaW5kc3RyaW5nIHRydWUsJChQUklWQVRFX1dBUk5JTkdTX0VOQUJMRSkpLCQoeGxpbnRfdW5jaGVja2VkKSwpIFwKICAgICAkKGlmICQoUFJJVkFURV9VU0VfU1lTVEVNX01PRFVMRVMpLCBcCi0gICAgICAkKGFkZHByZWZpeCAtLXN5c3RlbT0sJChQUklWQVRFX1NZU1RFTV9NT0RVTEVTKSksIFwKKyAgICAgICQoYWRkcHJlZml4IC0tc3lzdGVtPSwkKFBSSVZBVEVfU1lTVEVNX01PRFVMRVNfRElSKSksIFwKICAgICAgICQoYWRkcHJlZml4IC1ib290Y2xhc3NwYXRoICwkKHN0cmlwIFwKICAgICAgICAgICAkKGNhbGwgbm9ybWFsaXplLXBhdGgtbGlzdCwkKFBSSVZBVEVfQk9PVENMQVNTUEFUSCkpIFwKICAgICAgICAgICAkKFBSSVZBVEVfRU1QVFlfQk9PVENMQVNTUEFUSCkpKSkgXAotICAgICQoYWRkcHJlZml4IC1jbGFzc3BhdGggLCQoc3RyaXAgXAotICAgICAgICAkKGNhbGwgbm9ybWFsaXplLXBhdGgtbGlzdCwkKDIpKSkpIFwKKyAgICAkKGlmICQoUFJJVkFURV9VU0VfU1lTVEVNX01PRFVMRVMpLCBcCisgICAgICAkKGlmICQoUFJJVkFURV9QQVRDSF9NT0RVTEUpLCBcCisgICAgICAgIC0tcGF0Y2gtbW9kdWxlPSQoUFJJVkFURV9QQVRDSF9NT0RVTEUpPSQoY2FsbCBub3JtYWxpemUtcGF0aC1saXN0LC4gJCgyKSkpKSBcCisgICAgJChhZGRwcmVmaXggLWNsYXNzcGF0aCAsJChjYWxsIG5vcm1hbGl6ZS1wYXRoLWxpc3QsJChzdHJpcCBcCisgICAgICAkKGlmICQoUFJJVkFURV9VU0VfU1lTVEVNX01PRFVMRVMpLCBcCisgICAgICAgICQoZmlsdGVyLW91dCAkKFBSSVZBVEVfU1lTVEVNX01PRFVMRVNfTElCUyksJChQUklWQVRFX0JPT1RDTEFTU1BBVEgpKSkgXAorICAgICAgJCgyKSkpKSBcCiAgICAgJChpZiAkKGZpbmRzdHJpbmcgdHJ1ZSwkKFBSSVZBVEVfV0FSTklOR1NfRU5BQkxFKSksJCh4bGludF91bmNoZWNrZWQpLCkgXAogICAgIC1kICQoUFJJVkFURV9DTEFTU19JTlRFUk1FRElBVEVTX0RJUikgLXMgJChQUklWQVRFX0FOTk9fSU5URVJNRURJQVRFU19ESVIpIFwKICAgICAkKFBSSVZBVEVfSkFWQUNGTEFHUykgXAogICAgIFxAJChQUklWQVRFX0pBVkFfU09VUkNFX0xJU1QpIFwKKyAgICAkKGlmICQoUFJJVkFURV9TUkNKQVJTKSxcQCQoUFJJVkFURV9TUkNKQVJfTElTVF9GSUxFKSkgXAogICAgIHx8ICggcm0gLXJmICQoUFJJVkFURV9DTEFTU19JTlRFUk1FRElBVEVTX0RJUikgOyBleGl0IDQxICkgXAogZmkKLSQoaWYgJChQUklWQVRFX0pBVkFfTEFZRVJTX0ZJTEUpLCAkKGhpZGUpIGJ1aWxkL3Rvb2xzL2phdmEtbGF5ZXJzLnB5IFwKKyQoaWYgJChQUklWQVRFX0pBVkFfTEFZRVJTX0ZJTEUpLCAkKGhpZGUpIGJ1aWxkL21ha2UvdG9vbHMvamF2YS1sYXllcnMucHkgXAogICAgICQoUFJJVkFURV9KQVZBX0xBWUVSU19GSUxFKSBAJChQUklWQVRFX0pBVkFfU09VUkNFX0xJU1QpLCkKICQoaWYgJChQUklWQVRFX0pBUl9FWENMVURFX0ZJTEVTKSwgJChoaWRlKSBmaW5kICQoUFJJVkFURV9DTEFTU19JTlRFUk1FRElBVEVTX0RJUikgXAogICAgIC1uYW1lICQod29yZCAxLCAkKFBSSVZBVEVfSkFSX0VYQ0xVREVfRklMRVMpKSBcCkBAIC0yMjcxLDU1ICsyMjgwLDIyIEBACiAkKGlmICQoUFJJVkFURV9FWFRSQV9KQVJfQVJHUyksJChjYWxsIGFkZC1qYXZhLXJlc291cmNlcy10bywkQCkpCiBlbmRlZgogCi0jICQoMSk6IEphdmFjIG91dHB1dCBqYXIgbmFtZS4KLSMgJCgyKTogSmF2YSBzb3VyY2UgbGlzdCBmaWxlLgotIyAkKDMpOiBKYXZhIGhlYWRlciBsaWJzLgotIyAkKDQpOiBKYXZhYyBzaGFyZGluZyBudW1iZXIuCi0jICQoNSk6IEphdmFjIHNvdXJjZXMgZGVwcyAodGhlIGFyZyBtYXkgbmVlZWQgJCQgaW4gY2FzZSBvZiBjb250YWluaW5nICcjJykKLWRlZmluZSBjcmVhdGUtY2xhc3Nlcy1mdWxsLWRlYnVnLmphcgotJCgxKTogUFJJVkFURV9KQVZBQ0ZMQUdTIDo9ICQkKExPQ0FMX0pBVkFDRkxBR1MpICQkKGFubm90YXRpb25fcHJvY2Vzc29yX2ZsYWdzKQotJCgxKTogUFJJVkFURV9KQVJfRVhDTFVERV9GSUxFUyA6PSAkJChMT0NBTF9KQVJfRVhDTFVERV9GSUxFUykKLSQoMSk6IFBSSVZBVEVfSkFSX1BBQ0tBR0VTIDo9ICQkKExPQ0FMX0pBUl9QQUNLQUdFUykKLSQoMSk6IFBSSVZBVEVfSkFSX0VYQ0xVREVfUEFDS0FHRVMgOj0gJCQoTE9DQUxfSkFSX0VYQ0xVREVfUEFDS0FHRVMpCi0kKDEpOiBQUklWQVRFX0RPTlRfREVMRVRFX0pBUl9NRVRBX0lORiA6PSAkJChMT0NBTF9ET05UX0RFTEVURV9KQVJfTUVUQV9JTkYpCi0kKDEpOiBQUklWQVRFX0pBVkFfU09VUkNFX0xJU1QgOj0gJCgyKQotJCgxKTogUFJJVkFURV9BTExfSkFWQV9IRUFERVJfTElCUkFSSUVTIDo9ICQoMykKLSQoMSk6IFBSSVZBVEVfQ0xBU1NfSU5URVJNRURJQVRFU19ESVIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvY2xhc3NlcyQoNCkKLSQoMSk6IFBSSVZBVEVfQU5OT19JTlRFUk1FRElBVEVTX0RJUiA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9hbm5vJCg0KQotJCgxKTogXAotICAgICQoMikgXAotICAgICQoMykgXAotICAgICQoNSkgXAotICAgICQkKGZ1bGxfamF2YV9ib290Y2xhc3NwYXRoX2xpYnMpIFwKLSAgICAkJChmdWxsX2phdmFfc3lzdGVtX21vZHVsZXNfZGVwcykgXAotICAgICQkKGxheWVyc19maWxlKSBcCi0gICAgJCQoYW5ub3RhdGlvbl9wcm9jZXNzb3JfZGVwcykgXAotICAgICQkKE5PUk1BTElaRV9QQVRIKSBcCi0gICAgJCQoSkFSX0FSR1MpIFwKLSAgICB8ICQkKFNPT05HX0pBVkFDX1dSQVBQRVIpCi0JQGVjaG8gIlRhcmdldCBKYXZhOiAkJEAgKCQkKFBSSVZBVEVfQ0xBU1NfSU5URVJNRURJQVRFU19ESVIpKSIKLQkkJChjYWxsIGNvbXBpbGUtamF2YSwkJChUQVJHRVRfSkFWQUMpLCQkKFBSSVZBVEVfQUxMX0pBVkFfSEVBREVSX0xJQlJBUklFUykpCi1lbmRlZgotCiBkZWZpbmUgdHJhbnNmb3JtLWphdmEtdG8taGVhZGVyLmphcgogQGVjaG8gIiQoJChQUklWQVRFX1BSRUZJWClESVNQTEFZKSBUdXJiaW5lOiAkKFBSSVZBVEVfTU9EVUxFKSIKIEBta2RpciAtcCAkKGRpciAkQCkKIEBybSAtcmYgJChkaXIgJEApL2NsYXNzZXMtdHVyYmluZQogQG1rZGlyICQoZGlyICRAKS9jbGFzc2VzLXR1cmJpbmUKLSQoaGlkZSkgaWYgWyAtcyAkKFBSSVZBVEVfSkFWQV9TT1VSQ0VfTElTVCkgXSA7IHRoZW4gXAorJChoaWRlKSBpZiBbIC1zICQoUFJJVkFURV9KQVZBX1NPVVJDRV9MSVNUKSAtbyAtbiAiJChQUklWQVRFX1NSQ0pBUlMpIiBdIDsgdGhlbiBcCiAgICAgJChKQVZBKSAtamFyICQoVFVSQklORSkgXAogICAgIC0tb3V0cHV0ICRALnByZW1lcmdlZCAtLXRlbXBfZGlyICQoZGlyICRAKS9jbGFzc2VzLXR1cmJpbmUgXAotICAgIC0tc291cmNlcyBcQCQoUFJJVkFURV9KQVZBX1NPVVJDRV9MSVNUKSBcCi0gICAgLS1qYXZhY29wdHMgJChQUklWQVRFX0pBVkFDRkxBR1MpICQoQ09NTU9OX0pES19GTEFHUykgXAotICAgICQoYWRkcHJlZml4IC0tYm9vdGNsYXNzcGF0aCAsJChzdHJpcCBcCi0gICAgICAgICAkKGNhbGwgbm9ybWFsaXplLXBhdGgtbGlzdCwkKFBSSVZBVEVfQk9PVENMQVNTUEFUSCkpIFwKLSAgICAgICAgICQoUFJJVkFURV9FTVBUWV9CT09UQ0xBU1NQQVRIKSkpIFwKLSAgICAkKGFkZHByZWZpeCAtLWNsYXNzcGF0aCAsJChzdHJpcCBcCi0gICAgICAgICQoY2FsbCBub3JtYWxpemUtcGF0aC1saXN0LCQoUFJJVkFURV9BTExfSkFWQV9IRUFERVJfTElCUkFSSUVTKSkpKSBcCisgICAgLS1zb3VyY2VzIFxAJChQUklWQVRFX0pBVkFfU09VUkNFX0xJU1QpIC0tc291cmNlX2phcnMgJChQUklWQVRFX1NSQ0pBUlMpIFwKKyAgICAtLWphdmFjb3B0cyAkKFBSSVZBVEVfSkFWQUNGTEFHUykgJChDT01NT05fSkRLX0ZMQUdTKSAtLSBcCisgICAgJChhZGRwcmVmaXggLS1ib290Y2xhc3NwYXRoICwkKHN0cmlwICQoUFJJVkFURV9CT09UQ0xBU1NQQVRIKSkpIFwKKyAgICAkKGFkZHByZWZpeCAtLWNsYXNzcGF0aCAsJChzdHJpcCAkKFBSSVZBVEVfQUxMX0pBVkFfSEVBREVSX0xJQlJBUklFUykpKSBcCiAgICAgfHwgKCBybSAtcmYgJChkaXIgJEApL2NsYXNzZXMtdHVyYmluZSA7IGV4aXQgNDEgKSAmJiBcCi0gICAgJChNRVJHRV9aSVBTKSAtaiAtc3RyaXBEaXIgTUVUQS1JTkYgJEAudG1wICRALnByZW1lcmdlZCAkKGNhbGwgcmV2ZXJzZS1saXN0LCQoUFJJVkFURV9TVEFUSUNfSkFWQV9IRUFERVJfTElCUkFSSUVTKSkgOyBcCisgICAgJChNRVJHRV9aSVBTKSAtaiAtLWlnbm9yZS1kdXBsaWNhdGVzIC1zdHJpcERpciBNRVRBLUlORiAkQC50bXAgJEAucHJlbWVyZ2VkICQoY2FsbCByZXZlcnNlLWxpc3QsJChQUklWQVRFX1NUQVRJQ19KQVZBX0hFQURFUl9MSUJSQVJJRVMpKSA7IFwKIGVsc2UgXAotICAgICQoTUVSR0VfWklQUykgLWogLXN0cmlwRGlyIE1FVEEtSU5GICRALnRtcCAkKGNhbGwgcmV2ZXJzZS1saXN0LCQoUFJJVkFURV9TVEFUSUNfSkFWQV9IRUFERVJfTElCUkFSSUVTKSkgOyBcCisgICAgJChNRVJHRV9aSVBTKSAtaiAtLWlnbm9yZS1kdXBsaWNhdGVzIC1zdHJpcERpciBNRVRBLUlORiAkQC50bXAgJChjYWxsIHJldmVyc2UtbGlzdCwkKFBSSVZBVEVfU1RBVElDX0pBVkFfSEVBREVSX0xJQlJBUklFUykpIDsgXAogZmkKICQoaGlkZSkgJChaSVBUSU1FKSAkQC50bXAKICQoaGlkZSkgJChjYWxsIGNvbW1pdC1jaGFuZ2UtZm9yLXRvYywkQCkKQEAgLTI0MTEsNiArMjM4NywyMSBAQAogICAgICQ8CiBlbmRlZgogCisKK2RlZmluZSB0cmFuc2Zvcm0tY2xhc3Nlcy1kOC5qYXItdG8tZGV4CitAZWNobyAidGFyZ2V0IERleDogJChQUklWQVRFX01PRFVMRSkiCitAbWtkaXIgLXAgJChkaXIgJEApCiskKGhpZGUpIHJtIC1mICQoZGlyICRAKWNsYXNzZXMqLmRleCAkKGRpciAkQClkOF9pbnB1dC5qYXIKKyQoaGlkZSkgJChaSVAyWklQKSAtaiAtaSAkPCAtbyAkKGRpciAkQClkOF9pbnB1dC5qYXIgIioqLyouY2xhc3MiCiskKGhpZGUpICQoRFhfQ09NTUFORCkgXAorICAgIC0tb3V0cHV0ICQoZGlyICRAKSBcCisgICAgLS1taW4tYXBpICQoUFJJVkFURV9NSU5fU0RLX1ZFUlNJT04pIFwKKyAgICAkKHN1YnN0IC0tbWFpbi1kZXgtbGlzdD0sIC0tbWFpbi1kZXgtbGlzdCAsIFwKKyAgICAgICAgJChmaWx0ZXItb3V0IC0tY29yZS1saWJyYXJ5IC0tbXVsdGktZGV4IC0tbWluaW1hbC1tYWluLWRleCwkKFBSSVZBVEVfRFhfRkxBR1MpKSkgXAorICAgICQoZGlyICRAKWQ4X2lucHV0LmphcgorJChoaWRlKSBybSAtZiAkKGRpciAkQClkOF9pbnB1dC5qYXIKK2VuZGVmCisKICMgQ3JlYXRlIGEgbW9zdGx5LWVtcHR5IC5qYXIgZmlsZSB0aGF0IHdlJ2xsIGFkZCB0byBsYXRlci4KICMgVGhlIE1hY09TIGphciB0b29sIGRvZXNuJ3QgbGlrZSBjcmVhdGluZyBlbXB0eSBqYXIgZmlsZXMsCiAjIHNvIHdlIG5lZWQgdG8gZ2l2ZSBpdCBzb21ldGhpbmcuCkBAIC0yNTU4LDYgKzI1NDksMTUgQEAKICAgZmkKIGVuZGVmCiAKKyMgQ29tcHJlc3MgYSBwYWNrYWdlIHVzaW5nIHRoZSBzdGFuZGFyZCBnemlwIGFsZ29yaXRobS4KK2RlZmluZSBjb21wcmVzcy1wYWNrYWdlCiskKGhpZGUpIFwKKyAgbXYgJEAgJEAudW5jb21wcmVzc2VkOyBcCisgICQoTUlOSUdaSVApIC1jICRALnVuY29tcHJlc3NlZCA+ICRALmNvbXByZXNzZWQ7IFwKKyAgcm0gLWYgJEAudW5jb21wcmVzc2VkOyBcCisgIG12ICRALmNvbXByZXNzZWQgJEA7CitlbmRlZgorCiAjIFJlbW92ZSBkeW5hbWljIHRpbWVzdGFtcHMgZnJvbSBwYWNrYWdlcwogIwogZGVmaW5lIHJlbW92ZS10aW1lc3RhbXBzLWZyb20tcGFja2FnZQpAQCAtMjU2OCwxMSArMjU2OCwxMiBAQAogIwogZGVmaW5lIHVuY29tcHJlc3MtZGV4cwogJChoaWRlKSBpZiAoemlwaW5mbyAkQCAnKi5kZXgnIDI+L2Rldi9udWxsIHwgZ3JlcCAtdiAnIHN0b3IgJyA+L2Rldi9udWxsKSA7IHRoZW4gXAotICBybSAtcmYgJChkaXIgJEApdW5jb21wcmVzc2VkZGV4cyAmJiBta2RpciAkKGRpciAkQCl1bmNvbXByZXNzZWRkZXhzOyBcCi0gIHVuemlwIC1xICRAICcqLmRleCcgLWQgJChkaXIgJEApdW5jb21wcmVzc2VkZGV4cyAmJiBcCisgIHRtcGRpcj0kQC50bXBkaXI7IFwKKyAgcm0gLXJmICQkdG1wZGlyICYmIG1rZGlyICQkdG1wZGlyOyBcCisgIHVuemlwIC1xICRAICcqLmRleCcgLWQgJCR0bXBkaXIgJiYgXAogICB6aXAgLXFkICRAICcqLmRleCcgJiYgXAotICAoIGNkICQoZGlyICRAKXVuY29tcHJlc3NlZGRleHMgJiYgZmluZCAuIC10eXBlIGYgfCBzb3J0IHwgemlwIC1xRCAtWCAtMCAuLi8kKG5vdGRpciAkQCkgLUAgKSAmJiBcCi0gIHJtIC1yZiAkKGRpciAkQCl1bmNvbXByZXNzZWRkZXhzOyBcCisgICggY2QgJCR0bXBkaXIgJiYgZmluZCAuIC10eXBlIGYgfCBzb3J0IHwgemlwIC1xRCAtWCAtMCAuLi8kKG5vdGRpciAkQCkgLUAgKSAmJiBcCisgIHJtIC1yZiAkJHRtcGRpcjsgXAogICBmaQogZW5kZWYKIApAQCAtMjY1Miw5ICsyNjUzLDkgQEAKICMgJCgxKTogc291cmNlIGZpbGUKICMgJCgyKTogZGVzdGluYXRpb24gZmlsZSwgbXVzdCBlbmQgd2l0aCAueG1sLgogZGVmaW5lIGNvcHkteG1sLWZpbGUtY2hlY2tlZAotJCgyKTogJCgxKQorJCgyKTogJCgxKSAkKFhNTExJTlQpCiAJQGVjaG8gIkNvcHkgeG1sOiAkJEAiCi0JJChoaWRlKSB4bWxsaW50ICQkPCA+L2Rldi9udWxsICAjIERvbid0IHByaW50IHRoZSB4bWwgZmlsZSB0byBzdGRvdXQuCisJJChoaWRlKSAkKFhNTExJTlQpICQkPCA+L2Rldi9udWxsICAjIERvbid0IHByaW50IHRoZSB4bWwgZmlsZSB0byBzdGRvdXQuCiAJJCQoY29weS1maWxlLXRvLXRhcmdldCkKIGVuZGVmCiAKQEAgLTI3NTcsMTggKzI3NTgsNTMgQEAKICMgJCgzKTogTE9DQUxfREVYX1BSRU9QVCwgaWYgbm9zdHJpcHBpbmcgdGhlbiBsZWF2ZSBjbGFzc2VzKi5kZXgKIGRlZmluZSBkZXhwcmVvcHQtY29weS1qYXIKICQoMik6ICQoMSkKLQlAZWNobyAkKGlmICQoZmlsdGVyIG5vc3RyaXBwaW5nLCQoMykpLCJDb3B5OiAkJEAiLCJDb3B5IHdpdGhvdXQgZGV4OiAkJEAiKQorCUBlY2hvICJDb3B5OiAkJEAiCiAJJCQoY29weS1maWxlLXRvLXRhcmdldCkKIAkkKGlmICQoZmlsdGVyIG5vc3RyaXBwaW5nLCQoMykpLCwkJChjYWxsIGRleHByZW9wdC1yZW1vdmUtY2xhc3Nlcy5kZXgsJCRAKSkKIGVuZGVmCiAKLSMgJCgxKTogdGhlIC5qYXIgb3IgLmFwayB0byByZW1vdmUgY2xhc3Nlcy5kZXgKKyMgJCgxKTogdGhlIC5qYXIgb3IgLmFwayB0byByZW1vdmUgY2xhc3Nlcy5kZXguIE5vdGUgdGhhdCBpZiBhbGwgZGV4IGZpbGVzCisjIGFyZSB1bmNvbXByZXNzZWQgaW4gdGhlIGFyY2hpdmUsIHRoZW4gZGV4b3B0IHdpbGwgbm90IGRvIGEgY29weSBvZiB0aGUgZGV4CisjIGZpbGVzIGFuZCB3ZSBzaG91bGQgbm90IHN0cmlwLgogZGVmaW5lIGRleHByZW9wdC1yZW1vdmUtY2xhc3Nlcy5kZXgKLSQoaGlkZSkgemlwIC0tcXVpZXQgLS1kZWxldGUgJCgxKSBjbGFzc2VzLmRleDsgXAorJChoaWRlKSBpZiAoemlwaW5mbyAkMSAnKi5kZXgnIDI+L2Rldi9udWxsIHwgZ3JlcCAtdiAnIHN0b3IgJyA+L2Rldi9udWxsKSA7IHRoZW4gXAoremlwIC0tcXVpZXQgLS1kZWxldGUgJCgxKSBjbGFzc2VzLmRleDsgXAogZGV4X2luZGV4PTI7IFwKIHdoaWxlIHppcCAtLXF1aWV0IC0tZGVsZXRlICQoMSkgY2xhc3NlcyQke2RleF9pbmRleH0uZGV4ID4gL2Rldi9udWxsOyBkbyBcCiAgIGxldCBkZXhfaW5kZXg9ZGV4X2luZGV4KzE7IFwKLWRvbmUKK2RvbmUgXAorZmkKK2VuZGVmCisKK2RlZmluZSBoaWRkZW5hcGktY29weS1kZXgtZmlsZXMKKyQoMik6ICQoMSkgJChISURERU5BUEkpICQoSU5URVJOQUxfUExBVEZPUk1fSElEREVOQVBJX0xJR0hUX0dSRVlMSVNUKSBcCisgICAgICAkKElOVEVSTkFMX1BMQVRGT1JNX0hJRERFTkFQSV9EQVJLX0dSRVlMSVNUKSAkKElOVEVSTkFMX1BMQVRGT1JNX0hJRERFTkFQSV9CTEFDS0xJU1QpCisJQHJtIC1yZiAkKGRpciAkKDIpKQorCUBta2RpciAtcCAkKGRpciAkKDIpKQorCWZpbmQgJChkaXIgJCgxKSkgLW1heGRlcHRoIDEgLW5hbWUgImNsYXNzZXMqLmRleCIgfCBzb3J0IHwgXAorCQl4YXJncyAtSXt9IGNwIC1mIHt9ICQoZGlyICQoMikpCisJZmluZCAkKGRpciAkKDIpKSAtbmFtZSAiY2xhc3NlcyouZGV4IiB8IHNvcnQgfCBzZWQgJ3MvXi8tLWRleD0vJyB8IFwKKwkJeGFyZ3MgJChISURERU5BUEkpIC0tbGlnaHQtZ3JleWxpc3Q9JChJTlRFUk5BTF9QTEFURk9STV9ISURERU5BUElfTElHSFRfR1JFWUxJU1QpIFwKKwkJICAgICAgICAgICAgICAgICAgIC0tZGFyay1ncmV5bGlzdD0kKElOVEVSTkFMX1BMQVRGT1JNX0hJRERFTkFQSV9EQVJLX0dSRVlMSVNUKSBcCisJCSAgICAgICAgICAgICAgICAgICAtLWJsYWNrbGlzdD0kKElOVEVSTkFMX1BMQVRGT1JNX0hJRERFTkFQSV9CTEFDS0xJU1QpCitlbmRlZgorCitkZWZpbmUgaGlkZGVuYXBpLWNvcHktc29vbmctamFyCiskKDIpOiBQUklWQVRFX0ZPTERFUiA6PSAkKGRpciAkKDIpKWRleC1oaWRkZW5hcGkKKyQoMik6ICQoMSkgJChISURERU5BUEkpICQoU09PTkdfWklQKSAkKE1FUkdFX1pJUFMpICQoSU5URVJOQUxfUExBVEZPUk1fSElEREVOQVBJX0xJR0hUX0dSRVlMSVNUKSBcCisgICAgICAkKElOVEVSTkFMX1BMQVRGT1JNX0hJRERFTkFQSV9EQVJLX0dSRVlMSVNUKSAkKElOVEVSTkFMX1BMQVRGT1JNX0hJRERFTkFQSV9CTEFDS0xJU1QpCisJQGVjaG8gIkhpZGRlbiBBUEk6ICQkQCIKKwkkJChjb3B5LWZpbGUtdG8tdGFyZ2V0KQorCUBybSAtcmYgJCR7UFJJVkFURV9GT0xERVJ9CisJQG1rZGlyIC1wICQke1BSSVZBVEVfRk9MREVSfQorCXVuemlwIC1xICQoMikgJ2NsYXNzZXMqLmRleCcgLWQgJCR7UFJJVkFURV9GT0xERVJ9CisJZmluZCAkJHtQUklWQVRFX0ZPTERFUn0gLW5hbWUgImNsYXNzZXMqLmRleCIgfCBzb3J0IHwgc2VkICdzL14vLS1kZXg9LycgfCBcCisJCXhhcmdzICQoSElEREVOQVBJKSAtLWxpZ2h0LWdyZXlsaXN0PSQoSU5URVJOQUxfUExBVEZPUk1fSElEREVOQVBJX0xJR0hUX0dSRVlMSVNUKSBcCisJCSAgICAgICAgICAgICAgICAgICAtLWRhcmstZ3JleWxpc3Q9JChJTlRFUk5BTF9QTEFURk9STV9ISURERU5BUElfREFSS19HUkVZTElTVCkgXAorCQkgICAgICAgICAgICAgICAgICAgLS1ibGFja2xpc3Q9JChJTlRFUk5BTF9QTEFURk9STV9ISURERU5BUElfQkxBQ0tMSVNUKQorCSQoU09PTkdfWklQKSAtbyAkJHtQUklWQVRFX0ZPTERFUn0vY2xhc3Nlcy5kZXguamFyIC1DICQke1BSSVZBVEVfRk9MREVSfSAtRCAkJHtQUklWQVRFX0ZPTERFUn0KKwkkKE1FUkdFX1pJUFMpIC1EIC16aXBUb05vdFN0cmlwICQke1BSSVZBVEVfRk9MREVSfS9jbGFzc2VzLmRleC5qYXIgLXN0cmlwRmlsZSAiY2xhc3NlcyouZGV4IiBcCisJCSQoMikgJCR7UFJJVkFURV9GT0xERVJ9L2NsYXNzZXMuZGV4LmphciAkKDEpCiBlbmRlZgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMzAxOCw3ICszMDU0LDkgQEAKICAgSE9TVF9EQUxWSUtfSkFWQV9MSUJSQVJZIFwKICAgSE9TVF9EQUxWSUtfU1RBVElDX0pBVkFfTElCUkFSWSBcCiAgIGJhc2VfcnVsZXMgXAotICBIRUFERVJfTElCUkFSWQorICBIRUFERVJfTElCUkFSWSBcCisgIEhPU1RfVEVTVF9DT05GSUcgXAorICBUQVJHRVRfVEVTVF9DT05GSUcKIAogJChmb3JlYWNoIHMsJChTVEFUUy5NT0RVTEVfVFlQRSksJChldmFsIFNUQVRTLk1PRFVMRV9UWVBFLiQocykgOj0pKQogZGVmaW5lIHJlY29yZC1tb2R1bGUtdHlwZQpAQCAtMzM4NiwzICszNDI0LDQzIEBACiAgICQoZXZhbCBBTExfTU9EVUxFUy4kKGVuZm9yY2VfcnJvX3NvdXJjZV9tb2R1bGUpLlJFUVVJUkVEICs9ICQoZW5mb3JjZV9ycm9fbW9kdWxlKSkgXAogKQogZW5kZWYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIEZpbmQgc3lzdGVtXyQoVkVSKSBpbiBMT0NBTF9TREtfVkVSU0lPTgorIyMKKyMjICQoMSk6IExPQ0FMX1NES19WRVJTSU9OCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZGVmaW5lIGhhcy1zeXN0ZW0tc2RrLXZlcnNpb24KKyQoZmlsdGVyIHN5c3RlbV8lLCQoMSkpCitlbmRlZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgR2V0IG51bWVyaWNhbCB2ZXJzaW9uIGluIExPQ0FMX1NES19WRVJTSU9OCisjIworIyMgJCgxKTogTE9DQUxfU0RLX1ZFUlNJT04KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitkZWZpbmUgZ2V0LW51bWVyaWMtc2RrLXZlcnNpb24KKyQoZmlsdGVyLW91dCBjdXJyZW50LFwKKyAgJChpZiAkKGNhbGwgaGFzLXN5c3RlbS1zZGstdmVyc2lvbiwkKDEpKSwkKHBhdHN1YnN0IHN5c3RlbV8lLCUsJCgxKSksJCgxKSkpCitlbmRlZgorCisjIENvbnZlcnQgdG8gbG93ZXIgY2FzZSB3aXRob3V0IHJlcXVpcmluZyBhIHNoZWxsLCB3aGljaCBpc24ndCBjYWNoZWFibGUuCit0by1sb3dlcj0kKHN1YnN0IEEsYSwkKHN1YnN0IEIsYiwkKHN1YnN0IEMsYywkKHN1YnN0IEQsZCwkKHN1YnN0IEUsZSwkKHN1YnN0IEYsZiwkKHN1YnN0IEcsZywkKHN1YnN0IEgsaCwkKHN1YnN0IEksaSwkKHN1YnN0IEosaiwkKHN1YnN0IEssaywkKHN1YnN0IEwsbCwkKHN1YnN0IE0sbSwkKHN1YnN0IE4sbiwkKHN1YnN0IE8sbywkKHN1YnN0IFAscCwkKHN1YnN0IFEscSwkKHN1YnN0IFIsciwkKHN1YnN0IFMscywkKHN1YnN0IFQsdCwkKHN1YnN0IFUsdSwkKHN1YnN0IFYsdiwkKHN1YnN0IFcsdywkKHN1YnN0IFgseCwkKHN1YnN0IFkseSwkKHN1YnN0IFoseiwkMSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpCisKKyMgQ29udmVydCB0byB1cHBlciBjYXNlIHdpdGhvdXQgcmVxdWlyaW5nIGEgc2hlbGwsIHdoaWNoIGlzbid0IGNhY2hlYWJsZS4KK3RvLXVwcGVyPSQoc3Vic3QgYSxBLCQoc3Vic3QgYixCLCQoc3Vic3QgYyxDLCQoc3Vic3QgZCxELCQoc3Vic3QgZSxFLCQoc3Vic3QgZixGLCQoc3Vic3QgZyxHLCQoc3Vic3QgaCxILCQoc3Vic3QgaSxJLCQoc3Vic3QgaixKLCQoc3Vic3QgayxLLCQoc3Vic3QgbCxMLCQoc3Vic3QgbSxNLCQoc3Vic3QgbixOLCQoc3Vic3QgbyxPLCQoc3Vic3QgcCxQLCQoc3Vic3QgcSxRLCQoc3Vic3QgcixSLCQoc3Vic3QgcyxTLCQoc3Vic3QgdCxULCQoc3Vic3QgdSxVLCQoc3Vic3QgdixWLCQoc3Vic3QgdyxXLCQoc3Vic3QgeCxYLCQoc3Vic3QgeSxZLCQoc3Vic3QgeixaLCQxKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkKKworIyBTYW5pdHktY2hlY2sgdG8tbG93ZXIgYW5kIHRvLXVwcGVyCitsb3dlciA6PSBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei1fCit1cHBlciA6PSBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fCisKK2lmbmVxICgkKGxvd2VyKSwkKGNhbGwgdG8tbG93ZXIsJCh1cHBlcikpKQorICAkKGVycm9yIHRvLWxvd2VyIHNhbml0eSBjaGVjayBmYWlsdXJlKQorZW5kaWYKKworaWZuZXEgKCQodXBwZXIpLCQoY2FsbCB0by11cHBlciwkKGxvd2VyKSkpCisgICQoZXJyb3IgdG8tdXBwZXIgc2FuaXR5IGNoZWNrIGZhaWx1cmUpCitlbmRpZgorCitsb3dlciA6PQordXBwZXIgOj0KZGlmZiAtLWdpdCBhL2NvcmUvZGV4X3ByZW9wdC5tayBiL2NvcmUvZGV4X3ByZW9wdC5tawppbmRleCAwZGNiMDdmLi4yNzBlNWY0IDEwMDY0NAotLS0gYS9jb3JlL2RleF9wcmVvcHQubWsKKysrIGIvY29yZS9kZXhfcHJlb3B0Lm1rCkBAIC0zNSwxNSArMzUsMjcgQEAKICMgQ29uZGl0aW9uYWwgdG8gYnVpbGRpbmcgb24gbGludXgsIGFzIGRleDJvYXQgY3VycmVudGx5IGRvZXMgbm90IHdvcmsgb24gZGFyd2luLgogaWZlcSAoJChIT1NUX09TKSxsaW51eCkKICAgV0lUSF9ERVhQUkVPUFQgPz0gdHJ1ZQotIyBGb3IgYW4gZW5nIGJ1aWxkIG9ubHkgcHJlLW9wdCB0aGUgYm9vdCBpbWFnZSBhbmQgc3lzdGVtIHNlcnZlci4gVGhpcyBnaXZlcyByZWFzb25hYmxlIHBlcmZvcm1hbmNlCi0jIGFuZCBzdGlsbCBhbGxvd3MgYSBzaW1wbGUgd29ya2Zsb3c6IGJ1aWxkaW5nIGluIGZyYW1ld29ya3MvYmFzZSBhbmQgc3luY2luZy4KICAgaWZlcSAoZW5nLCQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpKQorICAgICMgRG9uJ3Qgc3RyaXAgZm9yIHF1aWNrIGRldmVsb3BtZW50IHR1cm5hcm91bmRzLgorICAgIERFWF9QUkVPUFRfREVGQVVMVCA6PSBub3N0cmlwcGluZworICAgICMgRm9yIGFuIGVuZyBidWlsZCBvbmx5IHByZS1vcHQgdGhlIGJvb3QgaW1hZ2UgYW5kIHN5c3RlbSBzZXJ2ZXIuIFRoaXMgZ2l2ZXMgcmVhc29uYWJsZSBwZXJmb3JtYW5jZQorICAgICMgYW5kIHN0aWxsIGFsbG93cyBhIHNpbXBsZSB3b3JrZmxvdzogYnVpbGRpbmcgaW4gZnJhbWV3b3Jrcy9iYXNlIGFuZCBzeW5jaW5nLgogICAgIFdJVEhfREVYUFJFT1BUX0JPT1RfSU1HX0FORF9TWVNURU1fU0VSVkVSX09OTFkgPz0gdHJ1ZQogICBlbmRpZgotIyBBZGQgbWluaS1kZWJ1Zy1pbmZvIHRvIHRoZSBib290IGNsYXNzcGF0aCB1bmxlc3MgZXhwbGljaXRseSBhc2tlZCBub3QgdG8uCisgICMgQWRkIG1pbmktZGVidWctaW5mbyB0byB0aGUgYm9vdCBjbGFzc3BhdGggdW5sZXNzIGV4cGxpY2l0bHkgYXNrZWQgbm90IHRvLgogICBpZm5lcSAoZmFsc2UsJChXSVRIX0RFWFBSRU9QVF9ERUJVR19JTkZPKSkKICAgICBQUk9EVUNUX0RFWF9QUkVPUFRfQk9PVF9GTEFHUyArPSAtLWdlbmVyYXRlLW1pbmktZGVidWctaW5mbwogICBlbmRpZgorCisgICMgTm9uIGVuZyBsaW51eCBidWlsZHMgbXVzdCBoYXZlIHByZW9wdCBlbmFibGVkIHNvIHRoYXQgc3lzdGVtIHNlcnZlciBkb2Vzbid0IHJ1biBhcyBpbnRlcnByZXRlcgorICAjIG9ubHkuIGIvNzQyMDkzMjkKKyAgaWZlcSAoLCQoZmlsdGVyIGVuZywgJChUQVJHRVRfQlVJTERfVkFSSUFOVCkpKQorICAgIGlmbmVxICh0cnVlLCQoV0lUSF9ERVhQUkVPUFQpKQorICAgICAgaWZuZXEgKHRydWUsJChXSVRIX0RFWFBSRU9QVF9CT09UX0lNR19BTkRfU1lTVEVNX1NFUlZFUl9PTkxZKSkKKyAgICAgICAgJChjYWxsIHByZXR0eS1lcnJvciwgREVYUFJFT1BUIG11c3QgYmUgZW5hYmxlZCBmb3IgdXNlciBhbmQgdXNlcmRlYnVnIGJ1aWxkcykKKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgZW5kaWYKIGVuZGlmCiAKIEdMT0JBTF9ERVhQUkVPUFRfRkxBR1MgOj0KZGlmZiAtLWdpdCBhL2NvcmUvZGV4X3ByZW9wdF9saWJhcnQubWsgYi9jb3JlL2RleF9wcmVvcHRfbGliYXJ0Lm1rCmluZGV4IDc5ZTcyYzEuLmYyODljMjIgMTAwNjQ0Ci0tLSBhL2NvcmUvZGV4X3ByZW9wdF9saWJhcnQubWsKKysrIGIvY29yZS9kZXhfcHJlb3B0X2xpYmFydC5tawpAQCAtNywxMSArNywxNCBAQAogIyBTZXQgVVNFX0RFWDJPQVRfREVCVUcgdG8gZmFsc2UgZm9yIG9ubHkgYnVpbGRpbmcgbm9uLWRlYnVnIHZlcnNpb25zLgogaWZlcSAoJChVU0VfREVYMk9BVF9ERUJVRyksZmFsc2UpCiBERVgyT0FUIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2RleDJvYXQkKEhPU1RfRVhFQ1VUQUJMRV9TVUZGSVgpCitQQVRDSE9BVCA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9wYXRjaG9hdCQoSE9TVF9FWEVDVVRBQkxFX1NVRkZJWCkKIGVsc2UKIERFWDJPQVQgOj0gJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZGV4Mm9hdGQkKEhPU1RfRVhFQ1VUQUJMRV9TVUZGSVgpCitQQVRDSE9BVCA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9wYXRjaG9hdGQkKEhPU1RfRVhFQ1VUQUJMRV9TVUZGSVgpCiBlbmRpZgogCiBERVgyT0FUX0RFUEVOREVOQ1kgKz0gJChERVgyT0FUKQorUEFUQ0hPQVRfREVQRU5ERU5DWSArPSAkKFBBVENIT0FUKQogCiAjIFVzZSB0aGUgZmlyc3QgcHJlbG9hZGVkLWNsYXNzZXMgZmlsZSBpbiBQUk9EVUNUX0NPUFlfRklMRVMuCiBQUkVMT0FERURfQ0xBU1NFUyA6PSAkKGNhbGwgd29yZC1jb2xvbiwxLCQoZmlyc3R3b3JkIFwKQEAgLTg3LDE0ICs5MCwxOSBAQAogIyBpcyBjb252ZXJ0ZWQgaW50byB0byBib290LmFydCAodG8gbWF0Y2ggdGhlIGxlZ2FjeSBhc3N1bXB0aW9uIHRoYXQgYm9vdC5hcnQKICMgZXhpc3RzKSwgYW5kIHRoZSByZXN0IGFyZSBjb252ZXJ0ZWQgdG8gYm9vdC08bmFtZT4uYXJ0LgogIyBJbiBhZGRpdGlvbiwgZWFjaCAuYXJ0IGZpbGUgaGFzIGFuIGFzc29jaWF0ZWQgLm9hdCBmaWxlLgotTElCQVJUX1RBUkdFVF9CT09UX0FSVF9FWFRSQV9GSUxFUyA6PSAkKGZvcmVhY2ggamFyLCQod29yZGxpc3QgMiw5OTksJChMSUJBUlRfVEFSR0VUX0JPT1RfSkFSUykpLGJvb3QtJChqYXIpLmFydCBib290LSQoamFyKS5vYXQgYm9vdC0kKGphcikudmRleCkKLUxJQkFSVF9UQVJHRVRfQk9PVF9BUlRfRVhUUkFfRklMRVMgKz0gYm9vdC5vYXQgYm9vdC52ZGV4CitMSUJBUlRfVEFSR0VUX0JPT1RfQVJUX0VYVFJBX0ZJTEVTIDo9ICQoZm9yZWFjaCBqYXIsJCh3b3JkbGlzdCAyLDk5OSwkKExJQkFSVF9UQVJHRVRfQk9PVF9KQVJTKSksYm9vdC0kKGphcikuYXJ0IGJvb3QtJChqYXIpLmFydC5yZWwgYm9vdC0kKGphcikub2F0KQorTElCQVJUX1RBUkdFVF9CT09UX0FSVF9FWFRSQV9GSUxFUyArPSBib290LmFydC5yZWwgYm9vdC5vYXQKK0xJQkFSVF9UQVJHRVRfQk9PVF9BUlRfVkRFWF9GSUxFUyA6PSAkKGZvcmVhY2ggamFyLCQod29yZGxpc3QgMiw5OTksJChMSUJBUlRfVEFSR0VUX0JPT1RfSkFSUykpLGJvb3QtJChqYXIpLnZkZXgpCitMSUJBUlRfVEFSR0VUX0JPT1RfQVJUX1ZERVhfRklMRVMgKz0gYm9vdC52ZGV4CiAKICMgSWYgd2UgdXNlIGEgYm9vdCBpbWFnZSBwcm9maWxlLgogbXlfdXNlX3Byb2ZpbGVfZm9yX2Jvb3RfaW1hZ2UgOj0gJChQUk9EVUNUX1VTRV9QUk9GSUxFX0ZPUl9CT09UX0lNQUdFKQogaWZlcSAoLCQobXlfdXNlX3Byb2ZpbGVfZm9yX2Jvb3RfaW1hZ2UpKQotIyBJZiBub3Qgc2V0LCB1c2UgdGhlIGRlZmF1bHQuCi1teV91c2VfcHJvZmlsZV9mb3JfYm9vdF9pbWFnZSA6PSBmYWxzZQorIyBJZiBub3Qgc2V0LCBzZXQgdGhlIGRlZmF1bHQgdG8gdHJ1ZSBpZiB3ZSBhcmUgbm90IGEgUERLIGJ1aWxkLiBQREsgYnVpbGRzCisjIGNhbid0IGJ1aWxkIHRoZSBwcm9maWxlIHNpbmNlIHRoZXkgZG9uJ3QgaGF2ZSBmcmFtZXdvcmtzL2Jhc2UuCitpZm5lcSAodHJ1ZSwkKFRBUkdFVF9CVUlMRF9QREspKQorbXlfdXNlX3Byb2ZpbGVfZm9yX2Jvb3RfaW1hZ2UgOj0gdHJ1ZQorZW5kaWYKIGVuZGlmCiAKIGlmZXEgKHRydWUsJChteV91c2VfcHJvZmlsZV9mb3JfYm9vdF9pbWFnZSkpCkBAIC0xMTQsNiArMTIyLDcgQEAKIAlAbWtkaXIgLXAgJChkaXIgJEApCiAJQU5EUk9JRF9MT0dfVEFHUz0iKjplIiAkKFBST0ZNQU4pIFwKIAkJLS1jcmVhdGUtcHJvZmlsZS1mcm9tPSQoUFJJVkFURV9QUk9GSUxFX0lOUFVUX0xPQ0FUSU9OKSBcCisJCS0tc2tpcC1hcGstdmVyaWZpY2F0aW9uIFwKIAkJJChhZGRwcmVmaXggLS1hcGs9LCQoTElCQVJUX1RBUkdFVF9CT09UX0RFWF9GSUxFUykpIFwKIAkJJChhZGRwcmVmaXggLS1kZXgtbG9jYXRpb249LCQoTElCQVJUX1RBUkdFVF9CT09UX0RFWF9MT0NBVElPTlMpKSBcCiAJCS0tcmVmZXJlbmNlLXByb2ZpbGUtZmlsZT0kQApAQCAtMTI2LDYgKzEzNSw4IEBACiAKIGVuZGlmCiAKK0xJQkFSVF9UQVJHRVRfQk9PVF9BUlRfVkRFWF9JTlNUQUxMRURfU0hBUkVEX0ZJTEVTIDo9ICQoYWRkcHJlZml4ICQoUFJPRFVDVF9PVVQpLyQoREVYUFJFT1BUX0JPT1RfSkFSX0RJUikvLCQoTElCQVJUX1RBUkdFVF9CT09UX0FSVF9WREVYX0ZJTEVTKSkKKwogbXlfMm5kX2FyY2hfcHJlZml4IDo9CiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9kZXhfcHJlb3B0X2xpYmFydF9ib290Lm1rCiAKQEAgLTEzMywxMCArMTQ0LDI0IEBACiBpZmRlZiBUQVJHRVRfMk5EX0FSQ0gKIG15XzJuZF9hcmNoX3ByZWZpeCA6PSAkKFRBUkdFVF8yTkRfQVJDSF9WQVJfUFJFRklYKQogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvZGV4X3ByZW9wdF9saWJhcnRfYm9vdC5tawotbXlfMm5kX2FyY2hfcHJlZml4IDo9CiBlbmRpZgogZW5kaWYKIAorIyBDb3B5IHNoYXJlZCB2ZGV4IHRvIHRoZSBkaXJlY3RvcnkgYW5kIGNyZWF0ZSBjb3JyZXNwb25kaW5nIHN5bWxpbmtzIGluIHByaW1hcnkgYW5kIHNlY29uZGFyeSBhcmNoLgorJChMSUJBUlRfVEFSR0VUX0JPT1RfQVJUX1ZERVhfSU5TVEFMTEVEX1NIQVJFRF9GSUxFUykgOiBQUklNQVJZX0FSQ0hfRElSIDo9ICQoZGlyICQoREVGQVVMVF9ERVhfUFJFT1BUX0lOU1RBTExFRF9JTUFHRSkpCiskKExJQkFSVF9UQVJHRVRfQk9PVF9BUlRfVkRFWF9JTlNUQUxMRURfU0hBUkVEX0ZJTEVTKSA6IFNFQ09ORF9BUkNIX0RJUiA6PSAkKGRpciAkKCQobXlfMm5kX2FyY2hfcHJlZml4KURFRkFVTFRfREVYX1BSRU9QVF9JTlNUQUxMRURfSU1BR0UpKQorJChMSUJBUlRfVEFSR0VUX0JPT1RfQVJUX1ZERVhfSU5TVEFMTEVEX1NIQVJFRF9GSUxFUykgOiAkKERFRkFVTFRfREVYX1BSRU9QVF9CVUlMVF9JTUFHRV9GSUxFTkFNRSkKKwlAZWNobyAiSW5zdGFsbDogJEAiCisJQG1rZGlyIC1wICQoZGlyICRAKQorCUBybSAtZiAkQAorCSQoaGlkZSkgY3AgIiQoZGlyICQ8KSQobm90ZGlyICRAKSIgIiRAIgorCSMgTWFrZSBzeW1saW5rIGZvciBib3RoIHRoZSBhcmNocy4gSW4gdGhlIGNhc2UgaXRzIHNpbmdsZSBhcmNoIHRoZSBzeW1saW5rIHdpbGwganVzdCBnZXQgb3ZlcnJpZGRlbi4KKwlAbWtkaXIgLXAgJChQUklNQVJZX0FSQ0hfRElSKQorCSQoaGlkZSkgbG4gLXNmIC8kKERFWFBSRU9QVF9CT09UX0pBUl9ESVIpLyQobm90ZGlyICRAKSAkKFBSSU1BUllfQVJDSF9ESVIpJChub3RkaXIgJEApCisJQG1rZGlyIC1wICQoU0VDT05EX0FSQ0hfRElSKQorCSQoaGlkZSkgbG4gLXNmIC8kKERFWFBSRU9QVF9CT09UX0pBUl9ESVIpLyQobm90ZGlyICRAKSAkKFNFQ09ORF9BUkNIX0RJUikkKG5vdGRpciAkQCkKKworbXlfMm5kX2FyY2hfcHJlZml4IDo9CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBGb3IgYSBzaW5nbGUgamFyIG9yIEFQSwpkaWZmIC0tZ2l0IGEvY29yZS9kZXhfcHJlb3B0X2xpYmFydF9ib290Lm1rIGIvY29yZS9kZXhfcHJlb3B0X2xpYmFydF9ib290Lm1rCmluZGV4IDhiNzExOTguLmE1ZTdlODggMTAwNjQ0Ci0tLSBhL2NvcmUvZGV4X3ByZW9wdF9saWJhcnRfYm9vdC5taworKysgYi9jb3JlL2RleF9wcmVvcHRfbGliYXJ0X2Jvb3QubWsKQEAgLTMwLDYgKzMwLDggQEAKICQobXlfMm5kX2FyY2hfcHJlZml4KURFRkFVTFRfREVYX1BSRU9QVF9JTlNUQUxMRURfSU1BR0UgOj0gJChQUk9EVUNUX09VVCkkKCQobXlfMm5kX2FyY2hfcHJlZml4KUxJQkFSVF9CT09UX0lNQUdFX0ZJTEVOQU1FKQogJChteV8ybmRfYXJjaF9wcmVmaXgpTElCQVJUX1RBUkdFVF9CT09UX0FSVF9FWFRSQV9JTlNUQUxMRURfRklMRVMgOj0gJChhZGRwcmVmaXggJChkaXIgJCgkKG15XzJuZF9hcmNoX3ByZWZpeClERUZBVUxUX0RFWF9QUkVPUFRfSU5TVEFMTEVEX0lNQUdFKSksXAogICAgICQoTElCQVJUX1RBUkdFVF9CT09UX0FSVF9FWFRSQV9GSUxFUykpCiskKG15XzJuZF9hcmNoX3ByZWZpeClMSUJBUlRfVEFSR0VUX0JPT1RfQVJUX1ZERVhfSU5TVEFMTEVEX0ZJTEVTIDo9ICQoYWRkcHJlZml4ICQoZGlyICQoJChteV8ybmRfYXJjaF9wcmVmaXgpREVGQVVMVF9ERVhfUFJFT1BUX0lOU1RBTExFRF9JTUFHRSkpLFwKKyAgICAkKExJQkFSVF9UQVJHRVRfQk9PVF9BUlRfVkRFWF9GSUxFUykpCiAKICMgSWYgd2UgaGF2ZSBhIGNvbXBpbGVkLWNsYXNzZXMgZmlsZSwgY3JlYXRlIGEgcGFyYW1ldGVyLgogQ09NUElMRURfQ0xBU1NFU19GTEFHUyA6PQpAQCAtNDUsNyArNDcsNyBAQAogCiAjIFRoZSBydWxlIHRvIGluc3RhbGwgYm9vdC5hcnQKICMgRGVwZW5kcyBvbiBpbnN0YWxsZWQgYm9vdC5vYXQsIGJvb3QtKi5hcnQsIGJvb3QtKi5vYXQKLSQoJChteV8ybmRfYXJjaF9wcmVmaXgpREVGQVVMVF9ERVhfUFJFT1BUX0lOU1RBTExFRF9JTUFHRSkgOiAkKCQobXlfMm5kX2FyY2hfcHJlZml4KURFRkFVTFRfREVYX1BSRU9QVF9CVUlMVF9JTUFHRV9GSUxFTkFNRSkgfCAkKEFDUCkgJCgkKG15XzJuZF9hcmNoX3ByZWZpeClMSUJBUlRfVEFSR0VUX0JPT1RfQVJUX0VYVFJBX0lOU1RBTExFRF9GSUxFUykKKyQoJChteV8ybmRfYXJjaF9wcmVmaXgpREVGQVVMVF9ERVhfUFJFT1BUX0lOU1RBTExFRF9JTUFHRSkgOiAkKCQobXlfMm5kX2FyY2hfcHJlZml4KURFRkFVTFRfREVYX1BSRU9QVF9CVUlMVF9JTUFHRV9GSUxFTkFNRSkgfCAkKEFDUCkgJCgkKG15XzJuZF9hcmNoX3ByZWZpeClMSUJBUlRfVEFSR0VUX0JPT1RfQVJUX0VYVFJBX0lOU1RBTExFRF9GSUxFUykgJCgkKG15XzJuZF9hcmNoX3ByZWZpeClMSUJBUlRfVEFSR0VUX0JPT1RfQVJUX1ZERVhfSU5TVEFMTEVEX1NIQVJFRF9GSUxFUykKIAlAZWNobyAiSW5zdGFsbDogJEAiCiAJJChjb3B5LWZpbGUtdG8tdGFyZ2V0KQogCkBAIC03MSwxNyArNzMsMzYgQEAKICMgTm90ZTogdGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QuIENvbXBpbGVkIGNvZGUgY29udGFpbnMgc3RhY2sgY2hlY2tzIHdoaWNoIG1heSBkZXBlbmQKICMgICAgICAgb24gQVNBTiBzZXR0aW5ncy4KIAorIyBVc2UgQU5EUk9JRF9MT0dfVEFHUyB0byBzdXBwcmVzcyBtb3N0IGxvZ2dpbmcgYnkgZGVmYXVsdC4uLgoraWZlcSAoLCQoQVJUX0JPT1RfSU1BR0VfRVhUUkFfQVJHUykpCitERVgyT0FUX0JPT1RfSU1BR0VfTE9HX1RBR1MgOj0gQU5EUk9JRF9MT0dfVEFHUz0iKjplIgorZWxzZQorIyAuLi51bmxlc3MgdGhlIGJvb3QgaW1hZ2UgaXMgZ2VuZXJhdGVkIHNwZWNpZmljYWxseSBmb3IgdGVzdGluZywgdGhlbiBhbGxvdyBhbGwgbG9nZ2luZy4KK0RFWDJPQVRfQk9PVF9JTUFHRV9MT0dfVEFHUyA6PSBBTkRST0lEX0xPR19UQUdTPSIqOnYiCitlbmRpZgorCisjIEFuIGFkZGl0aW9uYWwgbWVzc2FnZSB0byBwcmludCBvbiBkZXgyb2F0IGZhaWx1cmUuCitERVgyT0FUX0ZBSUxVUkVfTUVTU0FHRSA6PSBFUlJPUjogRGV4Mm9hdCBmYWlsZWQgdG8gY29tcGlsZSBhIGJvb3QgaW1hZ2UuCitERVgyT0FUX0ZBSUxVUkVfTUVTU0FHRSArPSBJdCBpcyBsaWtlbHkgdGhhdCB0aGUgYm9vdCBjbGFzc3BhdGggaXMgaW5jb25zaXN0ZW50LgoraWZlcSAoJChPTkVfU0hPVF9NQUtFRklMRSksKQorICBERVgyT0FUX0ZBSUxVUkVfTUVTU0FHRSArPSBSZWJ1aWxkIHdpdGggQVJUX0JPT1RfSU1BR0VfRVhUUkFfQVJHUz0iLS1ydW50aW1lLWFyZyAtdmVyYm9zZTp2ZXJpZmllciIgdG8gc2VlIHZlcmlmaWNhdGlvbiBlcnJvcnMuCitlbHNlCisgIERFWDJPQVRfRkFJTFVSRV9NRVNTQUdFICs9IEJ1aWxkIHdpdGggbSwgbW1hLCBvciBtbW1hIGluc3RlYWQgb2YgbW0gb3IgbW1tIHRvIHJlbWVkeSB0aGUgc2l0dWF0aW9uLgorZW5kaWYKKwogJCgkKG15XzJuZF9hcmNoX3ByZWZpeClERUZBVUxUX0RFWF9QUkVPUFRfQlVJTFRfSU1BR0VfRklMRU5BTUUpOiBQUklWQVRFX0JPT1RfSU1BR0VfRkxBR1MgOj0gJChteV9ib290X2ltYWdlX2ZsYWdzKQogJCgkKG15XzJuZF9hcmNoX3ByZWZpeClERUZBVUxUX0RFWF9QUkVPUFRfQlVJTFRfSU1BR0VfRklMRU5BTUUpOiBQUklWQVRFXzJORF9BUkNIX1ZBUl9QUkVGSVggOj0gJChteV8ybmRfYXJjaF9wcmVmaXgpCiskKCQobXlfMm5kX2FyY2hfcHJlZml4KURFRkFVTFRfREVYX1BSRU9QVF9CVUlMVF9JTUFHRV9GSUxFTkFNRSk6IFBSSVZBVEVfSU1BR0VfTE9DQVRJT04gOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClERUZBVUxUX0RFWF9QUkVPUFRfQlVJTFRfSU1BR0VfTE9DQVRJT04pCiAjIFVzZSBkZXgyb2F0IGRlYnVnIHZlcnNpb24gZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcKLSQoJChteV8ybmRfYXJjaF9wcmVmaXgpREVGQVVMVF9ERVhfUFJFT1BUX0JVSUxUX0lNQUdFX0ZJTEVOQU1FKSA6ICQoTElCQVJUX1RBUkdFVF9CT09UX0RFWF9GSUxFUykgJChQUkVMT0FERURfQ0xBU1NFUykgJChDT01QSUxFRF9DTEFTU0VTKSAkKERJUlRZX0lNQUdFX09CSkVDVFMpICQoREVYMk9BVF9ERVBFTkRFTkNZKSAkKG15X291dF9ib290X2ltYWdlX3Byb2ZpbGVfbG9jYXRpb24pCiskKCQobXlfMm5kX2FyY2hfcHJlZml4KURFRkFVTFRfREVYX1BSRU9QVF9CVUlMVF9JTUFHRV9GSUxFTkFNRSkgOiAkKExJQkFSVF9UQVJHRVRfQk9PVF9ERVhfRklMRVMpICQoUFJFTE9BREVEX0NMQVNTRVMpICQoQ09NUElMRURfQ0xBU1NFUykgJChESVJUWV9JTUFHRV9PQkpFQ1RTKSAkKERFWDJPQVRfREVQRU5ERU5DWSkgJChQQVRDSE9BVF9ERVBFTkRFTkNZKSAkKG15X291dF9ib290X2ltYWdlX3Byb2ZpbGVfbG9jYXRpb24pCiAJQGVjaG8gInRhcmdldCBkZXgyb2F0OiAkQCIKIAlAbWtkaXIgLXAgJChkaXIgJEApCiAJQG1rZGlyIC1wICQoZGlyICQoJChQUklWQVRFXzJORF9BUkNIX1ZBUl9QUkVGSVgpTElCQVJUX1RBUkdFVF9CT09UX09BVF9VTlNUUklQUEVEKSkKLQlAcm0gLWYgJChkaXIgJEApLyouYXJ0ICQoZGlyICRAKS8qLm9hdAorCUBybSAtZiAkKGRpciAkQCkvKi5hcnQgJChkaXIgJEApLyoub2F0ICQoZGlyICRAKS8qLmFydC5yZWwKIAlAcm0gLWYgJChkaXIgJCgkKFBSSVZBVEVfMk5EX0FSQ0hfVkFSX1BSRUZJWClMSUJBUlRfVEFSR0VUX0JPT1RfT0FUX1VOU1RSSVBQRUQpKS8qLmFydAogCUBybSAtZiAkKGRpciAkKCQoUFJJVkFURV8yTkRfQVJDSF9WQVJfUFJFRklYKUxJQkFSVF9UQVJHRVRfQk9PVF9PQVRfVU5TVFJJUFBFRCkpLyoub2F0Ci0JJChoaWRlKSBBTkRST0lEX0xPR19UQUdTPSIqOmUiICQoREVYMk9BVCkgLS1ydW50aW1lLWFyZyAtWG1zJChERVgyT0FUX0lNQUdFX1hNUykgXAorCUBybSAtZiAkKGRpciAkKCQoUFJJVkFURV8yTkRfQVJDSF9WQVJfUFJFRklYKUxJQkFSVF9UQVJHRVRfQk9PVF9PQVRfVU5TVFJJUFBFRCkpLyouYXJ0LnJlbAorCSQoaGlkZSkgJChERVgyT0FUX0JPT1RfSU1BR0VfTE9HX1RBR1MpICQoREVYMk9BVCkgLS1ydW50aW1lLWFyZyAtWG1zJChERVgyT0FUX0lNQUdFX1hNUykgXAogCQktLXJ1bnRpbWUtYXJnIC1YbXgkKERFWDJPQVRfSU1BR0VfWE1YKSBcCiAJCSQoUFJJVkFURV9CT09UX0lNQUdFX0ZMQUdTKSBcCiAJCSQoYWRkcHJlZml4IC0tZGV4LWZpbGU9LCQoTElCQVJUX1RBUkdFVF9CT09UX0RFWF9GSUxFUykpIFwKQEAgLTk5LDYgKzEyMCwxMiBAQAogCQktLW11bHRpLWltYWdlIC0tbm8taW5saW5lLWZyb209Y29yZS1vai5qYXIgXAogCQktLWFib3J0LW9uLWhhcmQtdmVyaWZpZXItZXJyb3IgXAogCQktLWFib3J0LW9uLXNvZnQtdmVyaWZpZXItZXJyb3IgXAotCQkkKFBST0RVQ1RfREVYX1BSRU9QVF9CT09UX0ZMQUdTKSAkKEdMT0JBTF9ERVhQUkVPUFRfRkxBR1MpICQoQVJUX0JPT1RfSU1BR0VfRVhUUkFfQVJHUykKKwkJJChQUk9EVUNUX0RFWF9QUkVPUFRfQk9PVF9GTEFHUykgJChHTE9CQUxfREVYUFJFT1BUX0ZMQUdTKSAkKEFSVF9CT09UX0lNQUdFX0VYVFJBX0FSR1MpIFwKKwkJfHwgKCBlY2hvICIkKERFWDJPQVRfRkFJTFVSRV9NRVNTQUdFKSIgOyBmYWxzZSApICYmIFwKKwkkKERFWDJPQVRfQk9PVF9JTUFHRV9MT0dfVEFHUykgQU5EUk9JRF9ST09UPSQoUFJPRFVDVF9PVVQpL3N5c3RlbSBBTkRST0lEX0RBVEE9JChkaXIgJEApICQoUEFUQ0hPQVQpIFwKKwkJLS1pbnB1dC1pbWFnZS1sb2NhdGlvbj0kKFBSSVZBVEVfSU1BR0VfTE9DQVRJT04pIFwKKwkJLS1vdXRwdXQtaW1hZ2UtcmVsb2NhdGlvbi1kaXJlY3Rvcnk9JChkaXIgJEApIFwKKwkJLS1pbnN0cnVjdGlvbi1zZXQ9JCgkKFBSSVZBVEVfMk5EX0FSQ0hfVkFSX1BSRUZJWClERVgyT0FUX1RBUkdFVF9BUkNIKSBcCisJCS0tYmFzZS1vZmZzZXQtZGVsdGE9MHgxMDAwMDAwMAogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9kZXhfcHJlb3B0X29kZXhfaW5zdGFsbC5tayBiL2NvcmUvZGV4X3ByZW9wdF9vZGV4X2luc3RhbGwubWsKaW5kZXggZjQyMGIxOC4uMmIyODAwYiAxMDA2NDQKLS0tIGEvY29yZS9kZXhfcHJlb3B0X29kZXhfaW5zdGFsbC5taworKysgYi9jb3JlL2RleF9wcmVvcHRfb2RleF9pbnN0YWxsLm1rCkBAIC0xLDYgKzEsMjAgQEAKICMgZGV4cHJlb3B0X29kZXhfaW5zdGFsbC5tayBpcyB1c2VkIHRvIGRlZmluZSBvZGV4IGNyZWF0aW9uIHJ1bGVzIGZvciBKQVJzIGFuZCBBUEtzCiAjIFRoaXMgZmlsZSBkZXBlbmRzIG9uIHZhcmlhYmxlcyBzZXQgaW4gYmFzZV9ydWxlcy5tawotIyBPdXRwdXQgdmFyaWFibGVzOiBMT0NBTF9ERVhfUFJFT1BULCBidWlsdF9vZGV4LCBkZXhwcmVvcHRfYm9vdF9qYXJfbW9kdWxlCisjIE91dHB1dCB2YXJpYWJsZXM6IExPQ0FMX0RFWF9QUkVPUFQsIExPQ0FMX1VOQ09NUFJFU1NfREVYLCBidWlsdF9vZGV4LAorIyAgICAgICAgICAgICAgICAgICBkZXhwcmVvcHRfYm9vdF9qYXJfbW9kdWxlCisKKyMgV2UgZXhwbGljaXRseSB1bmNvbXByZXNzIEFQS3Mgb2YgcHJpdmlsZWdlZCBhcHBzLCBhbmQgdXNlZCBieQorIyBwcml2aWxlZ2VkIGFwcHMKK0xPQ0FMX1VOQ09NUFJFU1NfREVYIDo9IGZhbHNlCitpZm5lcSAodHJ1ZSwkKERPTlRfVU5DT01QUkVTU19QUklWX0FQUFNfREVYUykpCitpZmVxICh0cnVlLCQoTE9DQUxfUFJJVklMRUdFRF9NT0RVTEUpKQorICBMT0NBTF9VTkNPTVBSRVNTX0RFWCA6PSB0cnVlCitlbHNlCisgIGlmbmVxICgsJChmaWx0ZXIgJChQUk9EVUNUX0xPQURFRF9CWV9QUklWSUxFR0VEX01PRFVMRVMpLCAkKExPQ0FMX01PRFVMRSkpKQorICAgIExPQ0FMX1VOQ09NUFJFU1NfREVYIDo9IHRydWUKKyAgZW5kaWYgICMgUFJPRFVDVF9MT0FERURfQllfUFJJVklMRUdFRF9NT0RVTEVTCitlbmRpZiAgIyBMT0NBTF9QUklWSUxFR0VEX01PRFVMRQorZW5kaWYgICMgRE9OVF9VTkNPTVBSRVNTX1BSSVZfQVBQU19ERVhTCiAKICMgU2V0dGluZyBMT0NBTF9ERVhfUFJFT1BUIGJhc2VkIG9uIFdJVEhfREVYUFJFT1BULCBMT0NBTF9ERVhfUFJFT1BULCBldGMKIExPQ0FMX0RFWF9QUkVPUFQgOj0gJChzdHJpcCAkKExPQ0FMX0RFWF9QUkVPUFQpKQpAQCAtNDYsMTQgKzYwLDI3IEBACiBlbmRpZgogZW5kaWYKIAotIyBpZiBpbnN0YWxsaW5nIGludG8gc3lzdGVtLCBhbmQgb2RleCBhcmUgYmVpbmcgaW5zdGFsbGVkIGludG8gc3lzdGVtX290aGVyLCBkb24ndCBzdHJpcAotaWZlcSAoJChCT0FSRF9VU0VTX1NZU1RFTV9PVEhFUl9PREVYKSx0cnVlKQogaWZlcSAoJChMT0NBTF9ERVhfUFJFT1BUKSx0cnVlKQorCisjIERvbid0IHN0cmlwIHdpdGggZGV4ZXMgd2UgZXhwbGljaXRseSB1bmNvbXByZXNzIChkZXhvcHQgd2lsbCBub3Qgc3RvcmUgdGhlIGRleCBjb2RlKS4KK2lmZXEgKCQoTE9DQUxfVU5DT01QUkVTU19ERVgpLHRydWUpCitMT0NBTF9ERVhfUFJFT1BUIDo9IG5vc3RyaXBwaW5nCitlbmRpZiAgIyBMT0NBTF9VTkNPTVBSRVNTX0RFWAorCisjIHN5c3RlbV9vdGhlciBpc24ndCB0aGVyZSBmb3IgYW4gT1RBLCBzbyBkb24ndCBzdHJpcAorIyBpZiBtb2R1bGUgaXMgb24gc3lzdGVtLCBhbmQgb2RleCBpcyBvbiBzeXN0ZW1fb3RoZXIuCitpZmVxICgkKEJPQVJEX1VTRVNfU1lTVEVNX09USEVSX09ERVgpLHRydWUpCiBpZm5lcSAoJChjYWxsIGluc3RhbGwtb24tc3lzdGVtLW90aGVyLCAkKG15X21vZHVsZV9wYXRoKSksKQogTE9DQUxfREVYX1BSRU9QVCA6PSBub3N0cmlwcGluZwotZW5kaWYKLWVuZGlmCi1lbmRpZgorZW5kaWYgICMgaW5zdGFsbC1vbi1zeXN0ZW0tb3RoZXIKK2VuZGlmICAjIEJPQVJEX1VTRVNfU1lTVEVNX09USEVSX09ERVgKKworIyBXZSBhbHNvIGRvbid0IHN0cmlwIGlmIGFsbCBkZXhzIGFyZSB1bmNvbXByZXNzZWQgKGRleG9wdCB3aWxsIG5vdCBzdG9yZSB0aGUgZGV4IGNvZGUpLAorIyBidXQgdGhhdCByZXF1aXJlcyB0byBpbnNwZWN0IHRoZSBzb3VyY2UgZmlsZSwgd2hpY2ggaXMgdG9vIGVhcmx5IGF0IHRoaXMgcG9pbnQgKGFzIHdlCisjIGRvbid0IGtub3cgaWYgdGhlIHNvdXJjZSBmaWxlIHdpbGwgYWN0dWFsbHkgYmUgdXNlZCkuCisjIFNlZSBkZXhwcmVvcHQtcmVtb3ZlLWNsYXNzZXMuZGV4LgorCitlbmRpZiAgIyBMT0NBTF9ERVhfUFJFT1BUCiAKIGJ1aWx0X29kZXggOj0KIGJ1aWx0X3ZkZXggOj0KQEAgLTY1LDE3ICs5MiwxMCBAQAogYnVpbHRfaW5zdGFsbGVkX3ZkZXggOj0KIGJ1aWx0X2luc3RhbGxlZF9hcnQgOj0KIAotaWZkZWYgTE9DQUxfREVYX1BSRU9QVAotCiBpZmVxIChmYWxzZSwkKFdJVEhfREVYX1BSRU9QVF9HRU5FUkFURV9QUk9GSUxFKSkKIExPQ0FMX0RFWF9QUkVPUFRfR0VORVJBVEVfUFJPRklMRSA6PSBmYWxzZQogZW5kaWYKIAotaWZkZWYgTE9DQUxfVkVORE9SX01PRFVMRQotaWZlcSAodHJ1ZSwkKExPQ0FMX0RFWF9QUkVPUFRfR0VORVJBVEVfUFJPRklMRSkpCi0kKGVycm9yIHByb2ZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB2ZW5kb3IgbW9kdWxlcykKLWVuZGlmCi1lbHNlCiBpZm5kZWYgTE9DQUxfREVYX1BSRU9QVF9HRU5FUkFURV9QUk9GSUxFCiAjIElmIExPQ0FMX0RFWF9QUkVPUFRfR0VORVJBVEVfUFJPRklMRSBpcyBub3QgZGVmaW5lZCwgZGVmYXVsdCBpdCBiYXNlZCBvbiB0aGUgZXhpc3RlbmNlIG9mIHRoZQogIyBwcm9maWxlIGNsYXNzIGxpc3RpbmcuIFRPRE86IFVzZSBwcm9kdWN0IHNwZWNpZmljIGRpcmVjdG9yeSBoZXJlLgpAQCAtODMsMTQgKzEwMyw1NiBAQAogTE9DQUxfREVYX1BSRU9QVF9QUk9GSUxFX0NMQVNTX0xJU1RJTkcgOj0gJChteV9jbGFzc2VzX2RpcmVjdG9yeSkvJChMT0NBTF9NT0RVTEUpLnByb2YudHh0CiBpZm5lcSAoLCQod2lsZGNhcmQgJChMT0NBTF9ERVhfUFJFT1BUX1BST0ZJTEVfQ0xBU1NfTElTVElORykpKQogIyBQcm9maWxlIGxpc3RpbmcgZXhpc3RzLCB1c2UgaXQgdG8gZ2VuZXJhdGUgdGhlIHByb2ZpbGUuCi1pZmVxICgkKExPQ0FMX0RFWF9QUkVPUFRfQVBQX0lNQUdFKSwpCi1MT0NBTF9ERVhfUFJFT1BUX0FQUF9JTUFHRSA6PSB0cnVlCi1lbmRpZgogTE9DQUxfREVYX1BSRU9QVF9HRU5FUkFURV9QUk9GSUxFIDo9IHRydWUKIGVuZGlmCiBlbmRpZgorCitpZmVxICh0cnVlLCQoTE9DQUxfREVYX1BSRU9QVF9HRU5FUkFURV9QUk9GSUxFKSkKKworaWZkZWYgTE9DQUxfVkVORE9SX01PRFVMRQorJChjYWxsIHByZXR0eS1lcnJvciwgSW50ZXJuYWwgZXJyb3I6IHByb2ZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB2ZW5kb3IgbW9kdWxlcykKK2Vsc2UKK0xPQ0FMX0RFWF9QUkVPUFRfQVBQX0lNQUdFIDo9IHRydWUKIGVuZGlmCiAKK2lmbmRlZiBMT0NBTF9ERVhfUFJFT1BUX1BST0ZJTEVfQ0xBU1NfTElTVElORworJChjYWxsIHByZXR0eS1lcnJvcixNdXN0IGhhdmUgc3BlY2lmaWVkIGNsYXNzIGxpc3RpbmcgKExPQ0FMX0RFWF9QUkVPUFRfUFJPRklMRV9DTEFTU19MSVNUSU5HKSkKK2VuZGlmCitpZmVxICgsJChkZXhfcHJlb3B0X3Byb2ZpbGVfc3JjX2ZpbGUpKQorJChjYWxsIHByZXR0eS1lcnJvciwgSW50ZXJuYWwgZXJyb3I6IGRleF9wcmVvcHRfcHJvZmlsZV9zcmNfZmlsZSBtdXN0IGJlIHNldCkKK2VuZGlmCitteV9idWlsdF9wcm9maWxlIDo9ICQoZGlyICQoTE9DQUxfQlVJTFRfTU9EVUxFKSkvcHJvZmlsZS5wcm9mCitteV9kZXhfbG9jYXRpb24gOj0gJChwYXRzdWJzdCAkKFBST0RVQ1RfT1VUKSUsJSwkKExPQ0FMX0lOU1RBTExFRF9NT0RVTEUpKQorIyBSZW1vdmUgY29tcHJlc3NlZCBBUEsgZXh0ZW5zaW9uLgorbXlfZGV4X2xvY2F0aW9uIDo9ICQocGF0c3Vic3QgJS5neiwlLCQobXlfZGV4X2xvY2F0aW9uKSkKKyQobXlfYnVpbHRfcHJvZmlsZSk6IFBSSVZBVEVfQlVJTFRfTU9EVUxFIDo9ICQoZGV4X3ByZW9wdF9wcm9maWxlX3NyY19maWxlKQorJChteV9idWlsdF9wcm9maWxlKTogUFJJVkFURV9ERVhfTE9DQVRJT04gOj0gJChteV9kZXhfbG9jYXRpb24pCiskKG15X2J1aWx0X3Byb2ZpbGUpOiBQUklWQVRFX1NPVVJDRV9DTEFTU0VTIDo9ICQoTE9DQUxfREVYX1BSRU9QVF9QUk9GSUxFX0NMQVNTX0xJU1RJTkcpCiskKG15X2J1aWx0X3Byb2ZpbGUpOiAkKExPQ0FMX0RFWF9QUkVPUFRfUFJPRklMRV9DTEFTU19MSVNUSU5HKQorJChteV9idWlsdF9wcm9maWxlKTogJChQUk9GTUFOKQorJChteV9idWlsdF9wcm9maWxlKTogJChkZXhfcHJlb3B0X3Byb2ZpbGVfc3JjX2ZpbGUpCiskKG15X2J1aWx0X3Byb2ZpbGUpOgorCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApCisJQU5EUk9JRF9MT0dfVEFHUz0iKjplIiAkKFBST0ZNQU4pIFwKKwkJLS1jcmVhdGUtcHJvZmlsZS1mcm9tPSQoUFJJVkFURV9TT1VSQ0VfQ0xBU1NFUykgXAorCQktLWFwaz0kKFBSSVZBVEVfQlVJTFRfTU9EVUxFKSBcCisJCS0tZGV4LWxvY2F0aW9uPSQoUFJJVkFURV9ERVhfTE9DQVRJT04pIFwKKwkJLS1yZWZlcmVuY2UtcHJvZmlsZS1maWxlPSRACitkZXhfcHJlb3B0X3Byb2ZpbGVfc3JjX2ZpbGU6PQorCisjIFJlbW92ZSBjb21wcmVzc2VkIEFQSyBleHRlbnNpb24uCitteV9pbnN0YWxsZWRfcHJvZmlsZSA6PSAkKHBhdHN1YnN0ICUuZ3osJSwkKExPQ0FMX0lOU1RBTExFRF9NT0RVTEUpKS5wcm9mCisKKyMgbXlfaW5zdGFsbGVkX3Byb2ZpbGUgOj0gJChMT0NBTF9JTlNUQUxMRURfTU9EVUxFKS5wcm9mCiskKGV2YWwgJChjYWxsIGNvcHktb25lLWZpbGUsJChteV9idWlsdF9wcm9maWxlKSwkKG15X2luc3RhbGxlZF9wcm9maWxlKSkpCitidWlsZF9pbnN0YWxsZWRfcHJvZmlsZTo9JChteV9idWlsdF9wcm9maWxlKTokKG15X2luc3RhbGxlZF9wcm9maWxlKQorZWxzZQorYnVpbGRfaW5zdGFsbGVkX3Byb2ZpbGU6PQorbXlfaW5zdGFsbGVkX3Byb2ZpbGUgOj0KK2VuZGlmCisKK2lmZGVmIExPQ0FMX0RFWF9QUkVPUFQKKwogZGV4cHJlb3B0X2Jvb3RfamFyX21vZHVsZSA6PSAkKGZpbHRlciAkKERFWFBSRU9QVF9CT09UX0pBUlNfTU9EVUxFUyksJChMT0NBTF9NT0RVTEUpKQogaWZkZWYgZGV4cHJlb3B0X2Jvb3RfamFyX21vZHVsZQogIyBGb3IgbGliYXJ0LCB0aGUgYm9vdCBqYXJzJyBvZGV4IGZpbGVzIGFyZSByZXBsYWNlZCBieSAkKERFRkFVTFRfREVYX1BSRU9QVF9JTlNUQUxMRURfSU1BR0UpLgpAQCAtMTQ2LDMyICsyMDgsOSBAQAogCiBpZmRlZiBidWlsdF9vZGV4CiBpZmVxICh0cnVlLCQoTE9DQUxfREVYX1BSRU9QVF9HRU5FUkFURV9QUk9GSUxFKSkKLWlmbmRlZiBMT0NBTF9ERVhfUFJFT1BUX1BST0ZJTEVfQ0xBU1NfTElTVElORwotJChjYWxsIHByZXR0eS1lcnJvcixNdXN0IGhhdmUgc3BlY2lmaWVkIGNsYXNzIGxpc3RpbmcgKExPQ0FMX0RFWF9QUkVPUFRfUFJPRklMRV9DTEFTU19MSVNUSU5HKSkKLWVuZGlmCi1teV9idWlsdF9wcm9maWxlIDo9ICQoZGlyICQoTE9DQUxfQlVJTFRfTU9EVUxFKSkvcHJvZmlsZS5wcm9mCi1teV9kZXhfbG9jYXRpb24gOj0gJChwYXRzdWJzdCAkKFBST0RVQ1RfT1VUKSUsJSwkKExPQ0FMX0lOU1RBTExFRF9NT0RVTEUpKQogJChidWlsdF9vZGV4KTogJChteV9idWlsdF9wcm9maWxlKQogJChidWlsdF9vZGV4KTogUFJJVkFURV9QUk9GSUxFX1BSRU9QVF9GTEFHUyA6PSAtLXByb2ZpbGUtZmlsZT0kKG15X2J1aWx0X3Byb2ZpbGUpCi0kKG15X2J1aWx0X3Byb2ZpbGUpOiBQUklWQVRFX0JVSUxUX01PRFVMRSA6PSAkKExPQ0FMX0JVSUxUX01PRFVMRSkKLSQobXlfYnVpbHRfcHJvZmlsZSk6IFBSSVZBVEVfREVYX0xPQ0FUSU9OIDo9ICQobXlfZGV4X2xvY2F0aW9uKQotJChteV9idWlsdF9wcm9maWxlKTogUFJJVkFURV9TT1VSQ0VfQ0xBU1NFUyA6PSAkKExPQ0FMX0RFWF9QUkVPUFRfUFJPRklMRV9DTEFTU19MSVNUSU5HKQotJChteV9idWlsdF9wcm9maWxlKTogJChMT0NBTF9ERVhfUFJFT1BUX1BST0ZJTEVfQ0xBU1NfTElTVElORykKLSQobXlfYnVpbHRfcHJvZmlsZSk6ICQoUFJPRk1BTikKLSQobXlfYnVpbHRfcHJvZmlsZSk6ICQoTE9DQUxfQlVJTFRfTU9EVUxFKQotJChteV9idWlsdF9wcm9maWxlKToKLQkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKQotCUFORFJPSURfTE9HX1RBR1M9Iio6ZSIgJChQUk9GTUFOKSBcCi0JCS0tY3JlYXRlLXByb2ZpbGUtZnJvbT0kKFBSSVZBVEVfU09VUkNFX0NMQVNTRVMpIFwKLQkJLS1hcGs9JChQUklWQVRFX0JVSUxUX01PRFVMRSkgXAotCQktLWRleC1sb2NhdGlvbj0kKFBSSVZBVEVfREVYX0xPQ0FUSU9OKSBcCi0JCS0tcmVmZXJlbmNlLXByb2ZpbGUtZmlsZT0kQAotbXlfaW5zdGFsbGVkX3Byb2ZpbGUgOj0gJChMT0NBTF9JTlNUQUxMRURfTU9EVUxFKS5wcm9mCi0kKGV2YWwgJChjYWxsIGNvcHktb25lLWZpbGUsJChteV9idWlsdF9wcm9maWxlKSwkKG15X2luc3RhbGxlZF9wcm9maWxlKSkpCi1idWlsZF9pbnN0YWxsZWRfcHJvZmlsZTo9JChteV9idWlsdF9wcm9maWxlKTokKG15X2luc3RhbGxlZF9wcm9maWxlKQogZWxzZQotYnVpbGRfaW5zdGFsbGVkX3Byb2ZpbGU6PQotbXlfaW5zdGFsbGVkX3Byb2ZpbGUgOj0KICQoYnVpbHRfb2RleCk6IFBSSVZBVEVfUFJPRklMRV9QUkVPUFRfRkxBR1MgOj0KIGVuZGlmCiAKQEAgLTE4Nyw2ICsyMjYsMTIgQEAKIG15X3N5c3RlbV9zZXJ2ZXJfY29tcGlsZXJfZmlsdGVyIDo9IHNwZWVkCiBlbmRpZgogCitteV9kZWZhdWx0X2NvbXBpbGVyX2ZpbHRlciA6PSAkKFBST0RVQ1RfREVYX1BSRU9QVF9ERUZBVUxUX0NPTVBJTEVSX0ZJTFRFUikKK2lmZXEgKCwkKG15X2RlZmF1bHRfY29tcGlsZXJfZmlsdGVyKSkKKyMgSWYgbm8gZGVmYXVsdCBjb21waWxlciBmaWx0ZXIgaXMgc3BlY2lmaWVkLCBkZWZhdWx0IHRvICdxdWlja2VuJyB0byBzYXZlIG9uIHN0b3JhZ2UuCitteV9kZWZhdWx0X2NvbXBpbGVyX2ZpbHRlciA6PSBxdWlja2VuCitlbmRpZgorCiBpZmVxICgsJChmaWx0ZXIgLS1jb21waWxlci1maWx0ZXI9JSwgJChMT0NBTF9ERVhfUFJFT1BUX0ZMQUdTKSkpCiAgIGlmbmVxICgsJChmaWx0ZXIgJChQUk9EVUNUX1NZU1RFTV9TRVJWRVJfSkFSUyksJChMT0NBTF9NT0RVTEUpKSkKICAgICAjIEphcnMgb2Ygc3lzdGVtIHNlcnZlciwgdXNlIHRoZSBwcm9kdWN0IG9wdGlvbiBpZiBpdCBpcyBzZXQsIHNwZWVkIG90aGVyd2lzZS4KQEAgLTIwMSwxMyArMjQ2LDM5IEBACiAgICAgICAgICMgRm9yIG5vbiBzeXN0ZW0gc2VydmVyIGphcnMsIHVzZSBzcGVlZC1wcm9maWxlIHdoZW4gd2UgaGF2ZSBhIHByb2ZpbGUuCiAgICAgICAgIExPQ0FMX0RFWF9QUkVPUFRfRkxBR1MgKz0gLS1jb21waWxlci1maWx0ZXI9c3BlZWQtcHJvZmlsZQogICAgICAgZWxzZQotICAgICAgICAjIElmIG5vIGNvbXBpbGVyIGZpbHRlciBpcyBzcGVjaWZpZWQsIGRlZmF1bHQgdG8gJ3F1aWNrZW4nIHRvIHNhdmUgb24gc3RvcmFnZS4KLSAgICAgICAgTE9DQUxfREVYX1BSRU9QVF9GTEFHUyArPSAtLWNvbXBpbGVyLWZpbHRlcj1xdWlja2VuCisgICAgICAgIExPQ0FMX0RFWF9QUkVPUFRfRkxBR1MgKz0gLS1jb21waWxlci1maWx0ZXI9JChteV9kZWZhdWx0X2NvbXBpbGVyX2ZpbHRlcikKICAgICAgIGVuZGlmCiAgICAgZW5kaWYKICAgZW5kaWYKIGVuZGlmCiAKK215X2dlbmVyYXRlX2RtIDo9ICQoUFJPRFVDVF9ERVhfUFJFT1BUX0dFTkVSQVRFX0RNX0ZJTEVTKQoraWZlcSAoLCQoZmlsdGVyICQoTE9DQUxfREVYX1BSRU9QVF9GTEFHUyksLS1jb21waWxlci1maWx0ZXI9dmVyaWZ5KSkKKyMgR2VuZXJhdGluZyBETSBmaWxlcyBvbmx5IG1ha2VzIHNlbnNlIGZvciB2ZXJpZnksIGF2b2lkIGRvaW5nIGZvciBub24gdmVyaWZ5IGNvbXBpbGVyIGZpbHRlciBBUEtzLgorbXlfZ2VuZXJhdGVfZG0gOj0gZmFsc2UKK2VuZGlmCisKKyMgTm8gcmVhc29uIHRvIHVzZSBhIGRtIGZpbGUgaWYgdGhlIGRleCBpcyBhbHJlYWR5IHVuY29tcHJlc3NlZC4KK2lmZXEgKCQoTE9DQUxfVU5DT01QUkVTU19ERVgpLHRydWUpCitteV9nZW5lcmF0ZV9kbSA6PSBmYWxzZQorZW5kaWYKKworaWZlcSAodHJ1ZSwkKG15X2dlbmVyYXRlX2RtKSkKK0xPQ0FMX0RFWF9QUkVPUFRfRkxBR1MgKz0gLS1jb3B5LWRleC1maWxlcz1mYWxzZQorTE9DQUxfREVYX1BSRU9QVCA6PSBub3N0cmlwcGluZworbXlfYnVpbHRfZG0gOj0gJChkaXIgJChMT0NBTF9CVUlMVF9NT0RVTEUpKWdlbmVyYXRlZC5kbQorbXlfaW5zdGFsbGVkX2RtIDo9ICQocGF0c3Vic3QgJS5hcGssJSwkKExPQ0FMX0lOU1RBTExFRF9NT0RVTEUpKS5kbQorbXlfY29waWVkX3ZkZXggOj0gJChkaXIgJChMT0NBTF9CVUlMVF9NT0RVTEUpKXByaW1hcnkudmRleAorJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoYnVpbHRfdmRleCksJChteV9jb3BpZWRfdmRleCkpKQorJChteV9idWlsdF9kbSk6IFBSSVZBVEVfSU5QVVRfVkRFWCA6PSAkKG15X2NvcGllZF92ZGV4KQorJChteV9idWlsdF9kbSk6ICQobXlfY29waWVkX3ZkZXgpICQoWklQVElNRSkKKwkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgcm0gLWYgJEAKKwkkKGhpZGUpIHppcCAtcUQgLWogLVggLTkgJEAgJChQUklWQVRFX0lOUFVUX1ZERVgpCisJJChaSVBUSU1FKSAkQAorJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQobXlfYnVpbHRfZG0pLCQobXlfaW5zdGFsbGVkX2RtKSkpCitlbmRpZgorCiAjIFBST0RVQ1RfU1lTVEVNX1NFUlZFUl9ERUJVR19JTkZPIG92ZXJyaWRlcyBXSVRIX0RFWFBSRU9QVF9ERUJVR19JTkZPLgogbXlfc3lzdGVtX3NlcnZlcl9kZWJ1Z19pbmZvIDo9ICQoUFJPRFVDVF9TWVNURU1fU0VSVkVSX0RFQlVHX0lORk8pCiBpZmVxICgsJChmaWx0ZXIgZW5nLCAkKFRBUkdFVF9CVUlMRF9WQVJJQU5UKSkpCkBAIC0yMjMsMjAgKzI5NCwzNSBAQAogICBlbmRpZgogZW5kaWYKIAorIyBTZXQgdGhlIGNvbXBpbGVyIHJlYXNvbiB0byAncHJlYnVpbHQnIHRvIGlkZW50aWZ5IHRoZSBvYXQgZmlsZXMgcHJvZHVjZWQKKyMgZHVyaW5nIHRoZSBidWlsZCwgYXMgb3Bwb3NlZCB0byBjb21waWxlZCBvbiB0aGUgZGV2aWNlLgorTE9DQUxfREVYX1BSRU9QVF9GTEFHUyArPSAtLWNvbXBpbGF0aW9uLXJlYXNvbj1wcmVidWlsdAorCiAkKGJ1aWx0X29kZXgpOiBQUklWQVRFX0RFWF9QUkVPUFRfRkxBR1MgOj0gJChMT0NBTF9ERVhfUFJFT1BUX0ZMQUdTKQogJChidWlsdF92ZGV4KTogJChidWlsdF9vZGV4KQogJChidWlsdF9hcnQpOiAkKGJ1aWx0X29kZXgpCiBlbmRpZgogCi0jIEFkZCB0aGUgaW5zdGFsbGVkX29kZXggdG8gdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIGZpbGVzIGZvciB0aGlzIG1vZHVsZS4KLUFMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuSU5TVEFMTEVEICs9ICQoaW5zdGFsbGVkX29kZXgpCi1BTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLklOU1RBTExFRCArPSAkKGluc3RhbGxlZF92ZGV4KQotQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5JTlNUQUxMRUQgKz0gJChpbnN0YWxsZWRfYXJ0KQotQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5JTlNUQUxMRUQgKz0gJChteV9pbnN0YWxsZWRfcHJvZmlsZSkKLUFMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuQlVJTFRfSU5TVEFMTEVEICs9ICQoYnVpbHRfaW5zdGFsbGVkX29kZXgpCi1BTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLkJVSUxUX0lOU1RBTExFRCArPSAkKGJ1aWx0X2luc3RhbGxlZF92ZGV4KQotQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5CVUlMVF9JTlNUQUxMRUQgKz0gJChidWlsdF9pbnN0YWxsZWRfYXJ0KQotQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5CVUlMVF9JTlNUQUxMRUQgKz0gJChidWlsZF9pbnN0YWxsZWRfcHJvZmlsZSkKK2lmbmVxICh0cnVlLCQobXlfZ2VuZXJhdGVfZG0pKQorICAjIEFkZCB0aGUgaW5zdGFsbGVkX29kZXggdG8gdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIGZpbGVzIGZvciB0aGlzIG1vZHVsZSBpZiB3ZSBhcmVuJ3QgZ2VuZXJhdGluZyBhCisgICMgZG0gZmlsZS4KKyAgQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5JTlNUQUxMRUQgKz0gJChpbnN0YWxsZWRfb2RleCkKKyAgQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5JTlNUQUxMRUQgKz0gJChpbnN0YWxsZWRfdmRleCkKKyAgQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5JTlNUQUxMRUQgKz0gJChpbnN0YWxsZWRfYXJ0KQorCisgIEFMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuQlVJTFRfSU5TVEFMTEVEICs9ICQoYnVpbHRfaW5zdGFsbGVkX29kZXgpCisgIEFMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuQlVJTFRfSU5TVEFMTEVEICs9ICQoYnVpbHRfaW5zdGFsbGVkX3ZkZXgpCisgIEFMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuQlVJTFRfSU5TVEFMTEVEICs9ICQoYnVpbHRfaW5zdGFsbGVkX2FydCkKKworICAjIE1ha2Ugc3VyZSB0byBpbnN0YWxsIHRoZSAub2RleCBhbmQgLnZkZXggd2hlbiB5b3UgcnVuICJtYWtlIDxtb2R1bGVfbmFtZT4iCisgICQobXlfYWxsX3RhcmdldHMpOiAkKGluc3RhbGxlZF9vZGV4KSAkKGluc3RhbGxlZF92ZGV4KSAkKGluc3RhbGxlZF9hcnQpCitlbHNlCisgIEFMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuSU5TVEFMTEVEICs9ICQobXlfaW5zdGFsbGVkX2RtKQorICBBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLkJVSUxUX0lOU1RBTExFRCArPSAkKG15X2J1aWx0X2RtKSAkKG15X2luc3RhbGxlZF9kbSkKKworICAjIE1ha2Ugc3VyZSB0byBpbnN0YWxsIHRoZSAuZG0gd2hlbiB5b3UgcnVuICJtYWtlIDxtb2R1bGVfbmFtZT4iCisgICQobXlfYWxsX3RhcmdldHMpOiAkKGluc3RhbGxlZF9kbSkKK2VuZGlmCiAKICMgUmVjb3JkIGRleC1wcmVvcHQgY29uZmlnLgogREVYUFJFT1BULiQoTE9DQUxfTU9EVUxFKS5ERVhfUFJFT1BUIDo9ICQoTE9DQUxfREVYX1BSRU9QVCkKQEAgLTI1MCw4ICszMzYsMTAgQEAKIERFWFBSRU9QVC5NT0RVTEVTLiQoTE9DQUxfTU9EVUxFX0NMQVNTKSA6PSAkKHNvcnQgXAogICAkKERFWFBSRU9QVC5NT0RVTEVTLiQoTE9DQUxfTU9EVUxFX0NMQVNTKSkgJChMT0NBTF9NT0RVTEUpKQogCi0KLSMgTWFrZSBzdXJlIHRvIGluc3RhbGwgdGhlIC5vZGV4IGFuZCAudmRleCB3aGVuIHlvdSBydW4gIm1ha2UgPG1vZHVsZV9uYW1lPiIKLSQobXlfYWxsX3RhcmdldHMpOiAkKGluc3RhbGxlZF9vZGV4KSAkKGluc3RhbGxlZF92ZGV4KSAkKGluc3RhbGxlZF9hcnQpICQobXlfaW5zdGFsbGVkX3Byb2ZpbGUpCi0KIGVuZGlmICMgTE9DQUxfREVYX1BSRU9QVAorCisjIFByb2ZpbGUgZG9lc24ndCBkZXBlbmQgb24gTE9DQUxfREVYX1BSRU9QVC4KK0FMTF9NT0RVTEVTLiQobXlfcmVnaXN0ZXJfbmFtZSkuSU5TVEFMTEVEICs9ICQobXlfaW5zdGFsbGVkX3Byb2ZpbGUpCitBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLkJVSUxUX0lOU1RBTExFRCArPSAkKGJ1aWxkX2luc3RhbGxlZF9wcm9maWxlKQorCiskKG15X2FsbF90YXJnZXRzKTogJChteV9pbnN0YWxsZWRfcHJvZmlsZSkKZGlmZiAtLWdpdCBhL2NvcmUvZHBpX3NwZWNpZmljX2Fway5tayBiL2NvcmUvZHBpX3NwZWNpZmljX2Fway5tawppbmRleCBhYzVjNGE5Li5mMzJkYWY1IDEwMDY0NAotLS0gYS9jb3JlL2RwaV9zcGVjaWZpY19hcGsubWsKKysrIGIvY29yZS9kcGlfc3BlY2lmaWNfYXBrLm1rCkBAIC0xOCw4ICsxOCw4IEBACiAkKGJ1aWx0X2RwaV9hcGspOiBQUklWQVRFX0FTU0VUX0RJUiA6PSAkKExPQ0FMX0FTU0VUX0RJUikKICQoYnVpbHRfZHBpX2Fwayk6IFBSSVZBVEVfQUFQVF9JTkNMVURFUyA6PSAkKGFsbF9saWJyYXJ5X3Jlc19wYWNrYWdlX2V4cG9ydHMpCiAkKGJ1aWx0X2RwaV9hcGspOiBQUklWQVRFX1JFU09VUkNFX0xJU1QgOj0gJChhbGxfcmVzX2Fzc2V0cykKLWlmbmVxICgsJChmaWx0ZXItb3V0IGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50LCAkKExPQ0FMX1NES19WRVJTSU9OKSkpCi0kKGJ1aWx0X2RwaV9hcGspOiBQUklWQVRFX0RFRkFVTFRfQVBQX1RBUkdFVF9TREsgOj0gJChMT0NBTF9TREtfVkVSU0lPTikKK2lmbmVxICgsJChmaWx0ZXItb3V0IGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50IGNvcmVfY3VycmVudCwgJChMT0NBTF9TREtfVkVSU0lPTikpKQorJChidWlsdF9kcGlfYXBrKTogUFJJVkFURV9ERUZBVUxUX0FQUF9UQVJHRVRfU0RLIDo9ICQoY2FsbCBnZXQtbnVtZXJpYy1zZGstdmVyc2lvbiwkKExPQ0FMX1NES19WRVJTSU9OKSkKIGVsc2UKICQoYnVpbHRfZHBpX2Fwayk6IFBSSVZBVEVfREVGQVVMVF9BUFBfVEFSR0VUX1NESyA6PSAkKERFRkFVTFRfQVBQX1RBUkdFVF9TREspCiBlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9kcm9pZGRvYy5tayBiL2NvcmUvZHJvaWRkb2MubWsKaW5kZXggMmJhYzk4NC4uYjE3NGYzMSAxMDA2NDQKLS0tIGEvY29yZS9kcm9pZGRvYy5taworKysgYi9jb3JlL2Ryb2lkZG9jLm1rCkBAIC03MSwxMiArNzEsMjMgQEAKICAgZWxzZSBpZmVxICgkKExPQ0FMX1NES19WRVJTSU9OKSQoVEFSR0VUX0JVSUxEX0FQUFMpLHRlc3RfY3VycmVudCkKICAgICBMT0NBTF9KQVZBX0xJQlJBUklFUyA6PSBhbmRyb2lkX3Rlc3Rfc3R1YnNfY3VycmVudCAkKExPQ0FMX0pBVkFfTElCUkFSSUVTKQogICAgICQoZnVsbF90YXJnZXQpOiBQUklWQVRFX0JPT1RDTEFTU1BBVEggOj0gJChjYWxsIGphdmEtbGliLWZpbGVzLCBhbmRyb2lkX3Rlc3Rfc3R1YnNfY3VycmVudCkKKyAgZWxzZSBpZmVxICgkKExPQ0FMX1NES19WRVJTSU9OKSQoVEFSR0VUX0JVSUxEX0FQUFMpLGNvcmVfY3VycmVudCkKKyAgICBMT0NBTF9KQVZBX0xJQlJBUklFUyA6PSBjb3JlLmN1cnJlbnQuc3R1YnMgJChMT0NBTF9KQVZBX0xJQlJBUklFUykKKyAgICAkKGZ1bGxfdGFyZ2V0KTogUFJJVkFURV9CT09UQ0xBU1NQQVRIIDo9ICQoY2FsbCBqYXZhLWxpYi1maWxlcywgY29yZS5jdXJyZW50LnN0dWJzKQogICBlbHNlCi0gICAgTE9DQUxfSkFWQV9MSUJSQVJJRVMgOj0gc2RrX3YkKExPQ0FMX1NES19WRVJTSU9OKSAkKExPQ0FMX0pBVkFfTElCUkFSSUVTKQotICAgICQoZnVsbF90YXJnZXQpOiBQUklWQVRFX0JPT1RDTEFTU1BBVEggOj0gJChjYWxsIGphdmEtbGliLWZpbGVzLCBzZGtfdiQoTE9DQUxfU0RLX1ZFUlNJT04pKQorICAgICMgY29yZV88dmVyPiBpcyBzdWJzZXQgb2YgPHZlcj4uIEluc3RlYWQgb2YgZGVmaW5pbmcgYSBwcmVidWlsdCBsaWIgZm9yIGNvcmVfPHZlcj4sCisgICAgIyB1c2UgdGhlIHN0dWIgZm9yIDx2ZXI+IHdoZW4gYnVpbGRpbmcgZm9yIGFwcHMuCisgICAgX3ZlcnNpb24gOj0gJChwYXRzdWJzdCBjb3JlXyUsJSwkKExPQ0FMX1NES19WRVJTSU9OKSkKKyAgICBMT0NBTF9KQVZBX0xJQlJBUklFUyA6PSBzZGtfdiQoX3ZlcnNpb24pICQoTE9DQUxfSkFWQV9MSUJSQVJJRVMpCisgICAgJChmdWxsX3RhcmdldCk6IFBSSVZBVEVfQk9PVENMQVNTUEFUSCA6PSAkKGNhbGwgamF2YS1saWItZmlsZXMsIHNka192JChfdmVyc2lvbikpCisgICAgX3ZlcnNpb24gOj0KICAgZW5kaWYKIGVsc2UKLSAgTE9DQUxfSkFWQV9MSUJSQVJJRVMgOj0gY29yZS1vaiBjb3JlLWxpYmFydCBleHQgZnJhbWV3b3JrICQoTE9DQUxfSkFWQV9MSUJSQVJJRVMpCisgIGlmZXEgKCQoTE9DQUxfTk9fU1RBTkRBUkRfTElCUkFSSUVTKSx0cnVlKQorICAgIExPQ0FMX0pBVkFfTElCUkFSSUVTIDo9IGNvcmUtb2ogY29yZS1saWJhcnQKKyAgZWxzZQorICAgIExPQ0FMX0pBVkFfTElCUkFSSUVTIDo9IGNvcmUtb2ogY29yZS1saWJhcnQgZXh0IGZyYW1ld29yayAkKExPQ0FMX0pBVkFfTElCUkFSSUVTKQorICBlbmRpZgogICAkKGZ1bGxfdGFyZ2V0KTogUFJJVkFURV9CT09UQ0xBU1NQQVRIIDo9ICQoY2FsbCBqYXZhLWxpYi1maWxlcywgY29yZS1vaik6JChjYWxsIGphdmEtbGliLWZpbGVzLCBjb3JlLWxpYmFydCkKIGVuZGlmICAjIExPQ0FMX1NES19WRVJTSU9OCiBMT0NBTF9KQVZBX0xJQlJBUklFUyA6PSAkKHNvcnQgJChMT0NBTF9KQVZBX0xJQlJBUklFUykpCkBAIC05MSw2ICsxMDIsNyBAQAogJChmdWxsX3RhcmdldCk6IFBSSVZBVEVfU09VUkNFX1BBVEggOj0gJChjYWxsIG5vcm1hbGl6ZS1wYXRoLWxpc3QsJChMT0NBTF9EUk9JRERPQ19TT1VSQ0VfUEFUSCkpCiAkKGZ1bGxfdGFyZ2V0KTogUFJJVkFURV9KQVZBX0ZJTEVTIDo9ICQoZmlsdGVyICUuamF2YSwkKGZ1bGxfc3JjX2ZpbGVzKSkKICQoZnVsbF90YXJnZXQpOiBQUklWQVRFX0pBVkFfRklMRVMgKz0gJChhZGRwcmVmaXggJCgkKG15X3ByZWZpeClPVVRfQ09NTU9OX0lOVEVSTUVESUFURVMpLywgJChmaWx0ZXIgJS5qYXZhLCQoTE9DQUxfSU5URVJNRURJQVRFX1NPVVJDRVMpKSkKKyQoZnVsbF90YXJnZXQpOiBQUklWQVRFX0pBVkFfRklMRVMgKz0gJChmaWx0ZXIgJS5qYXZhLCQoTE9DQUxfR0VORVJBVEVEX1NPVVJDRVMpKQogJChmdWxsX3RhcmdldCk6IFBSSVZBVEVfU1JDSkFSUyA6PSAkKExPQ0FMX1NSQ0pBUlMpCiAkKGZ1bGxfdGFyZ2V0KTogUFJJVkFURV9TT1VSQ0VfSU5URVJNRURJQVRFU19ESVIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvc3JjCiAkKGZ1bGxfdGFyZ2V0KTogUFJJVkFURV9TUkNKQVJfSU5URVJNRURJQVRFU19ESVIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvc3JjamFycwpAQCAtMTcyLDE5ICsxODQsMjAgQEAKICMga2VlcCAtYm9vdGNsYXNzcGF0aCBoZXJlIHNpbmNlIGl0IHdvcmtzIGluIGNvbWJpbmF0aW9uIHdpdGggLXNvdXJjZSAxLjguCiAkKGZ1bGxfdGFyZ2V0KTogXAogICAgICAgICAkKGZ1bGxfc3JjX2ZpbGVzKSBcCisgICAgICAgICQoTE9DQUxfR0VORVJBVEVEX1NPVVJDRVMpIFwKICAgICAgICAgJChkcm9pZGRvY190ZW1wbGF0ZXMpIFwKICAgICAgICAgJChkcm9pZGRvYykgXAogICAgICAgICAkKGh0bWxfZGlyX2ZpbGVzKSBcCiAgICAgICAgICQoZnVsbF9qYXZhX2xpYnMpIFwKLSAgICAgICAgJChFWFRSQUNUX1NSQ0pBUlMpIFwKKyAgICAgICAgJChaSVBTWU5DKSBcCiAgICAgICAgICQoTE9DQUxfU1JDSkFSUykgXAogICAgICAgICAkKExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTKQogCUBlY2hvIERvY3MgZHJvaWRkb2M6ICQoUFJJVkFURV9PVVRfRElSKQogCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApCi0JJChoaWRlKSBybSAtcmYgJChQUklWQVRFX1NUVUJfT1VUX0RJUikgJChQUklWQVRFX1NSQ0pBUl9JTlRFUk1FRElBVEVTX0RJUikKKwkkKGhpZGUpIHJtIC1yZiAkKFBSSVZBVEVfU1RVQl9PVVRfRElSKQogCSQoY2FsbCBwcmVwYXJlLWRvYy1zb3VyY2UtbGlzdCwkKFBSSVZBVEVfU1JDX0xJU1RfRklMRSksJChQUklWQVRFX0pBVkFfRklMRVMpLCBcCiAJCQkkKFBSSVZBVEVfU09VUkNFX0lOVEVSTUVESUFURVNfRElSKSAkKFBSSVZBVEVfQURESVRJT05BTF9KQVZBX0RJUikpCi0JJChFWFRSQUNUX1NSQ0pBUlMpICQoUFJJVkFURV9TUkNKQVJfSU5URVJNRURJQVRFU19ESVIpICQoUFJJVkFURV9TUkNKQVJfTElTVF9GSUxFKSAkKFBSSVZBVEVfU1JDSkFSUykKKwkkKFpJUFNZTkMpIC1kICQoUFJJVkFURV9TUkNKQVJfSU5URVJNRURJQVRFU19ESVIpIC1sICQoUFJJVkFURV9TUkNKQVJfTElTVF9GSUxFKSAtZiAiKi5qYXZhIiAkKFBSSVZBVEVfU1JDSkFSUykKIAkkKGhpZGUpICggXAogCQkkKEpBVkFET0MpIFwKICAgICAgICAgICAgICAgICAtZW5jb2RpbmcgVVRGLTggXApAQCAtMjMwLDEzICsyNDMsMTIgQEAKICMgRm9yIE9wZW5KREsgOCB3ZSBjYW4gdXNlIC1ib290Y2xhc3NwYXRoIHRvIGRlZmluZSB0aGUgY29yZSBsaWJyYXJpZXMgY29kZS4KICQoZnVsbF90YXJnZXQpOiBQUklWQVRFX0JPT1RDTEFTU1BBVEhfQVJHIDo9ICQoYWRkcHJlZml4IC1ib290Y2xhc3NwYXRoICwkKFBSSVZBVEVfQk9PVENMQVNTUEFUSCkpCiBlbmRpZgotJChmdWxsX3RhcmdldCk6ICQoZnVsbF9zcmNfZmlsZXMpICQoZnVsbF9qYXZhX2xpYnMpICQoRVhUUkFDVF9TUkNKQVJTKSAkKExPQ0FMX1NSQ0pBUlMpICQoTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMpCiskKGZ1bGxfdGFyZ2V0KTogJChmdWxsX3NyY19maWxlcykgJChMT0NBTF9HRU5FUkFURURfU09VUkNFUykgJChmdWxsX2phdmFfbGlicykgJChaSVBTWU5DKSAkKExPQ0FMX1NSQ0pBUlMpICQoTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMpCiAJQGVjaG8gRG9jcyBqYXZhZG9jOiAkKFBSSVZBVEVfT1VUX0RJUikKIAlAbWtkaXIgLXAgJChkaXIgJEApCi0Jcm0gLXJmICQoUFJJVkFURV9TUkNKQVJfSU5URVJNRURJQVRFU19ESVIpCiAJJChjYWxsIHByZXBhcmUtZG9jLXNvdXJjZS1saXN0LCQoUFJJVkFURV9TUkNfTElTVF9GSUxFKSwkKFBSSVZBVEVfSkFWQV9GSUxFUyksIFwKIAkJCSQoUFJJVkFURV9TT1VSQ0VfSU5URVJNRURJQVRFU19ESVIpICQoUFJJVkFURV9BRERJVElPTkFMX0pBVkFfRElSKSkKLQkkKEVYVFJBQ1RfU1JDSkFSUykgJChQUklWQVRFX1NSQ0pBUl9JTlRFUk1FRElBVEVTX0RJUikgJChQUklWQVRFX1NSQ0pBUl9MSVNUX0ZJTEUpICQoUFJJVkFURV9TUkNKQVJTKQorCSQoWklQU1lOQykgLWQgJChQUklWQVRFX1NSQ0pBUl9JTlRFUk1FRElBVEVTX0RJUikgLWwgJChQUklWQVRFX1NSQ0pBUl9MSVNUX0ZJTEUpIC1mICIqLmphdmEiICQoUFJJVkFURV9TUkNKQVJTKQogCSQoaGlkZSkgKCBcCiAJCSQoSkFWQURPQykgXAogICAgICAgICAgICAgICAgIC1lbmNvZGluZyBVVEYtOCBcCmRpZmYgLS1naXQgYS9jb3JlL2R5bmFtaWNfYmluYXJ5Lm1rIGIvY29yZS9keW5hbWljX2JpbmFyeS5tawppbmRleCBmNDRiOGE4Li5lYmJlNzFjIDEwMDY0NAotLS0gYS9jb3JlL2R5bmFtaWNfYmluYXJ5Lm1rCisrKyBiL2NvcmUvZHluYW1pY19iaW5hcnkubWsKQEAgLTE0NSwxNSArMTQ1LDE1IEBACiAKIGlmZXEgKCQobXlfc3RyaXBfbW9kdWxlKSxtaW5pLWRlYnVnLWluZm8pCiAjIFN0cmlwIHRoZSBiaW5hcnksIGJ1dCBrZWVwIGRlYnVnIGZyYW1lcyBhbmQgc3ltYm9sIHRhYmxlIGluIGEgY29tcHJlc3NlZCAuZ251X2RlYnVnZGF0YSBzZWN0aW9uLgotJChzdHJpcF9vdXRwdXQpOiAkKHN0cmlwX2lucHV0KSB8ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9TVFJJUCkgJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX09CSkNPUFkpICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9OTSkKKyQoc3RyaXBfb3V0cHV0KTogJChzdHJpcF9pbnB1dCkgJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX1NUUklQKSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfT0JKQ09QWSkgJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX05NKSAkKFhaKQogCSQodHJhbnNmb3JtLXRvLXN0cmlwcGVkLWtlZXAtbWluaS1kZWJ1Zy1pbmZvKQogZWxzZSBpZm5lcSAoJChmaWx0ZXIgdHJ1ZSBub19kZWJ1Z2xpbmssJChteV9zdHJpcF9tb2R1bGUpKSwpCiAjIFN0cmlwIHRoZSBiaW5hcnkKLSQoc3RyaXBfb3V0cHV0KTogJChzdHJpcF9pbnB1dCkgfCAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfU1RSSVApCiskKHN0cmlwX291dHB1dCk6ICQoc3RyaXBfaW5wdXQpICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9TVFJJUCkKIAkkKHRyYW5zZm9ybS10by1zdHJpcHBlZCkKIGVsc2UgaWZlcSAoJChteV9zdHJpcF9tb2R1bGUpLGtlZXBfc3ltYm9scykKICMgU3RyaXAgb25seSB0aGUgZGVidWcgZnJhbWVzLCBidXQgbGVhdmUgdGhlIHN5bWJvbCB0YWJsZS4KLSQoc3RyaXBfb3V0cHV0KTogJChzdHJpcF9pbnB1dCkgfCAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfU1RSSVApCiskKHN0cmlwX291dHB1dCk6ICQoc3RyaXBfaW5wdXQpICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9TVFJJUCkKIAkkKHRyYW5zZm9ybS10by1zdHJpcHBlZC1rZWVwLXN5bWJvbHMpCiAKICMgQSBwcm9kdWN0IG1heSBiZSBjb25maWd1cmVkIHRvIHN0cmlwIGV2ZXJ5dGhpbmcgaW4gc29tZSBidWlsZCB2YXJpYW50cy4KZGlmZiAtLWdpdCBhL2NvcmUvZW1wdHlfdGVzdF9jb25maWcueG1sIGIvY29yZS9lbXB0eV90ZXN0X2NvbmZpZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5ZGFmZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvZW1wdHlfdGVzdF9jb25maWcueG1sCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIE5vIEFuZHJvaWRUZXN0LnhtbCB3YXMgcHJvdmlkZWQgYW5kIHRoZSBtYW5pZmVzdCBkb2VzIG5vdCBpbmNsdWRlCisgICAgIGluc3RydW1lbnRhdGlvbiwgaGVuY2UgdGhpcyBhcGsgaXMgbm90IGluc3RydW1lbnRhYmxlLgorLS0+Cis8Y29uZmlndXJhdGlvbiBkZXNjcmlwdGlvbj0iRW1wdHkgQ29uZmlndXJhdGlvbiIgLz4KZGlmZiAtLWdpdCBhL2NvcmUvZW52c2V0dXAubWsgYi9jb3JlL2VudnNldHVwLm1rCmluZGV4IGRkZjkwM2MuLjEyYjU4NjkgMTAwNjQ0Ci0tLSBhL2NvcmUvZW52c2V0dXAubWsKKysrIGIvY29yZS9lbnZzZXR1cC5tawpAQCAtMTc5LDYgKzE3OSw3IEBACiBUQVJHRVRfQ09QWV9PVVRfQVNBTiA6PSAkKFRBUkdFVF9DT1BZX09VVF9EQVRBKS9hc2FuCiBUQVJHRVRfQ09QWV9PVVRfT0VNIDo9IG9lbQogVEFSR0VUX0NPUFlfT1VUX09ETSA6PSBvZG0KK1RBUkdFVF9DT1BZX09VVF9QUk9EVUNUIDo9IHByb2R1Y3QKIFRBUkdFVF9DT1BZX09VVF9ST09UIDo9IHJvb3QKIFRBUkdFVF9DT1BZX09VVF9SRUNPVkVSWSA6PSByZWNvdmVyeQogCkBAIC0xOTgsNiArMTk5LDE3IEBACiBUQVJHRVRfQ09QWV9PVVRfVkVORE9SIDo9ICQoX3ZlbmRvcl9wYXRoX3BsYWNlaG9sZGVyKQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmluZSBUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVCB0byBhIHBsYWNlaG9sZGVyLCBmb3IgYXQgdGhpcyBwb2ludAorIyB3ZSBkb24ndCBrbm93IGlmIHRoZSBkZXZpY2Ugd2FudHMgdG8gYnVpbGQgYSBzZXBhcmF0ZSBwcm9kdWN0LmltZworIyBvciBqdXN0IGJ1aWxkIHByb2R1Y3Qgc3R1ZmYgaW50byBzeXN0ZW0uaW1nLgorIyBBIGRldmljZSBjYW4gc2V0IHVwIFRBUkdFVF9DT1BZX09VVF9QUk9EVUNUIHRvICJwcm9kdWN0IiBpbiBpdHMKKyMgQm9hcmRDb25maWcubWsuCisjIFdlJ2xsIHN1YnN0aXR1dGUgd2l0aCB0aGUgcmVhbCB2YWx1ZSBhZnRlciBsb2FkaW5nIEJvYXJkQ29uZmlnLm1rLgorX3Byb2R1Y3RfcGF0aF9wbGFjZWhvbGRlciA6PSB8fFBST0RVQ1QtUEFUSC1QSHx8CitUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVCA6PSAkKF9wcm9kdWN0X3BhdGhfcGxhY2Vob2xkZXIpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFNldCB1cCBtaW5pbWFsIEJPT1RDTEFTU1BBVEggbGlzdCBvZiBqYXJzIHRvIGJ1aWxkL2V4ZWN1dGUKICMgamF2YSBjb2RlIHdpdGggZGFsdmlrdm0vYXJ0LgpAQCAtMjczLDYgKzI4NSwyOSBAQAogZWxzZSBpZmRlZiBCT0FSRF9VU0VTX1ZFTkRPUklNQUdFCiAkKGVycm9yIFRBUkdFVF9DT1BZX09VVF9WRU5ET1IgbXVzdCBiZSBzZXQgdG8gJ3ZlbmRvcicgdG8gdXNlIGEgdmVuZG9yIGltYWdlKQogZW5kaWYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOb3cgd2UgY2FuIHN1YnN0aXR1dGUgd2l0aCB0aGUgcmVhbCB2YWx1ZSBvZiBUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVAoraWZlcSAoJChUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVCksJChfcHJvZHVjdF9wYXRoX3BsYWNlaG9sZGVyKSkKK1RBUkdFVF9DT1BZX09VVF9QUk9EVUNUIDo9IHN5c3RlbS9wcm9kdWN0CitlbHNlIGlmZXEgKCQoZmlsdGVyIHByb2R1Y3Qgc3lzdGVtL3Byb2R1Y3QsJChUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVCkpLCkKKyQoZXJyb3IgVEFSR0VUX0NPUFlfT1VUX1BST0RVQ1QgbXVzdCBiZSBlaXRoZXIgJ3Byb2R1Y3QnIG9yICdzeXN0ZW0vcHJvZHVjdCcsIHNlZWluZyAnJChUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVCknLikKK2VuZGlmCitQUk9EVUNUX0NPUFlfRklMRVMgOj0gJChzdWJzdCAkKF9wcm9kdWN0X3BhdGhfcGxhY2Vob2xkZXIpLCQoVEFSR0VUX0NPUFlfT1VUX1BST0RVQ1QpLCQoUFJPRFVDVF9DT1BZX0ZJTEVTKSkKKworQk9BUkRfVVNFU19QUk9EVUNUSU1BR0UgOj0KK2lmZGVmIEJPQVJEX1BSRUJVSUxUX1BST0RVQ1RJTUFHRQorQk9BUkRfVVNFU19QUk9EVUNUSU1BR0UgOj0gdHJ1ZQorZW5kaWYKK2lmZGVmIEJPQVJEX1BST0RVQ1RJTUFHRV9GSUxFX1NZU1RFTV9UWVBFCitCT0FSRF9VU0VTX1BST0RVQ1RJTUFHRSA6PSB0cnVlCitlbmRpZgoraWZlcSAoJChUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVCkscHJvZHVjdCkKK0JPQVJEX1VTRVNfUFJPRFVDVElNQUdFIDo9IHRydWUKK2Vsc2UgaWZkZWYgQk9BUkRfVVNFU19QUk9EVUNUSU1BR0UKKyQoZXJyb3IgVEFSR0VUX0NPUFlfT1VUX1BST0RVQ1QgbXVzdCBiZSBzZXQgdG8gJ3Byb2R1Y3QnIHRvIHVzZSBhIHByb2R1Y3QgaW1hZ2UpCitlbmRpZgorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEVuc3VyZSB0aGF0IG9ubHkgVEFSR0VUX1JFQ09WRVJZX1VQREFURVJfTElCUyAqb3IqIEFCX09UQV9VUERBVEVSIGlzIHNldC4KIFRBUkdFVF9SRUNPVkVSWV9VUERBVEVSX0xJQlMgPz0KQEAgLTI4NSw2ICszMjAsMTEgQEAKIGVuZGlmCiAKICMgQ2hlY2sgQk9BUkRfVk5ES19WRVJTSU9OCitkZWZpbmUgY2hlY2tfdm5ka192ZXJzaW9uCisgICQoZXZhbCB2bmRrX3BhdGggOj0gcHJlYnVpbHRzL3ZuZGsvdiQoMSkpIFwKKyAgJChpZiAkKHdpbGRjYXJkICQodm5ka19wYXRoKS8qL0FuZHJvaWQuYnApLCwkKGVycm9yIFZOREsgdmVyc2lvbiAkKDEpIG5vdCBmb3VuZCkpCitlbmRlZgorCiBpZmRlZiBCT0FSRF9WTkRLX1ZFUlNJT04KICAgaWZuZXEgKCQoQk9BUkRfVk5ES19WRVJTSU9OKSxjdXJyZW50KQogICAgICQoZXJyb3IgQk9BUkRfVk5ES19WRVJTSU9OOiBPbmx5ICJjdXJyZW50IiBpcyBpbXBsZW1lbnRlZCkKQEAgLTI5NSw2ICszMzUsMTcgQEAKICAgVEFSR0VUX1ZFTkRPUl9URVNUX1NVRkZJWCA6PQogZW5kaWYKIAoraWZkZWYgUFJPRFVDVF9FWFRSQV9WTkRLX1ZFUlNJT05TCisgICQoZm9yZWFjaCB2LCQoUFJPRFVDVF9FWFRSQV9WTkRLX1ZFUlNJT05TKSwkKGNhbGwgY2hlY2tfdm5ka192ZXJzaW9uLCQodikpKQorZW5kaWYKKworIyBFbnN1cmUgdGhhdCBCT0FSRF9TWVNURU1TREtfVkVSU0lPTlMgYXJlIGFsbCB3aXRoaW4gUExBVEZPUk1fU1lTVEVNU0RLX1ZFUlNJT05TCitfdW5zdXBwb3J0ZWRfc3lzdGVtc2RrX3ZlcnNpb25zIDo9ICQoZmlsdGVyLW91dCAkKFBMQVRGT1JNX1NZU1RFTVNES19WRVJTSU9OUyksJChCT0FSRF9TWVNURU1TREtfVkVSU0lPTlMpKQoraWZuZXEgKCwkKF91bnN1cHBvcnRlZF9zeXN0ZW1zZGtfdmVyc2lvbnMpKQorICAkKGVycm9yIFN5c3RlbSBTREsgdmVyc2lvbnMgJyQoX3Vuc3VwcG9ydGVkX3N5c3RlbXNka192ZXJzaW9ucyknIGluIEJPQVJEX1NZU1RFTVNES19WRVJTSU9OUyBhcmUgbm90IHN1cHBvcnRlZC5cCisgICAgICAgICAgU3VwcG9ydGVkIHZlcnNpb25zIGFyZSAkKFBMQVRGT1JNX1NZU1RFTVNES19WRVJTSU9OUykpCitlbmRpZgorCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBTZXQgdXAgY29uZmlndXJhdGlvbiBmb3IgdGFyZ2V0IG1hY2hpbmUuCiAjIFRoZSBmb2xsb3dpbmcgbXVzdCBiZSBzZXQ6CkBAIC0zNTcsMTIgKzQwOCwxMyBAQAogSE9TVF9PVVRfU0RLX0FERE9OIDo9ICQoSE9TVF9PVVQpL3Nka19hZGRvbgogSE9TVF9PVVRfTkFUSVZFX1RFU1RTIDo9ICQoSE9TVF9PVVQpL25hdGl2ZXRlc3Q2NAogSE9TVF9PVVRfQ09WRVJBR0UgOj0gJChIT1NUX09VVCkvY292ZXJhZ2UKK0hPU1RfT1VUX1RFU1RDQVNFUyA6PSAkKEhPU1RfT1VUKS90ZXN0Y2FzZXMKIAogSE9TVF9DUk9TU19PVVRfRVhFQ1VUQUJMRVMgOj0gJChIT1NUX0NST1NTX09VVCkvYmluCiBIT1NUX0NST1NTX09VVF9TSEFSRURfTElCUkFSSUVTIDo9ICQoSE9TVF9DUk9TU19PVVQpL2xpYgogSE9TVF9DUk9TU19PVVRfTkFUSVZFX1RFU1RTIDo9ICQoSE9TVF9DUk9TU19PVVQpL25hdGl2ZXRlc3QKIEhPU1RfQ1JPU1NfT1VUX0NPVkVSQUdFIDo9ICQoSE9TVF9DUk9TU19PVVQpL2NvdmVyYWdlCi1IT1NUX09VVF9URVNUQ0FTRVMgOj0gJChIT1NUX09VVCkvdGVzdGNhc2VzCitIT1NUX0NST1NTX09VVF9URVNUQ0FTRVMgOj0gJChIT1NUX0NST1NTX09VVCkvdGVzdGNhc2VzCiAKIEhPU1RfT1VUX0lOVEVSTUVESUFURVMgOj0gJChIT1NUX09VVCkvb2JqCiBIT1NUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTIDo9ICQoSE9TVF9PVVRfSU5URVJNRURJQVRFUykvbGliCkBAIC0zODIsNiArNDM0LDggQEAKIAogSE9TVF9DUk9TU19PVVRfR0VOIDo9ICQoSE9TVF9DUk9TU19PVVQpL2dlbgogCitIT1NUX09VVF9URVNUX0NPTkZJRyA6PSAkKEhPU1RfT1VUKS90ZXN0X2NvbmZpZworCiAjIE91dCBmb3IgSE9TVF8yTkRfQVJDSAogSE9TVF8yTkRfQVJDSF9WQVJfUFJFRklYIDo9IDJORF8KIEhPU1RfMk5EX0FSQ0hfTU9EVUxFX1NVRkZJWCA6PSBfMzIKQEAgLTQ1Nyw2ICs1MTEsNyBAQAogVEFSR0VUX09VVF9OT1RJQ0VfRklMRVMgOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURVMpL05PVElDRV9GSUxFUwogVEFSR0VUX09VVF9GQUtFIDo9ICQoUFJPRFVDVF9PVVQpL2Zha2VfcGFja2FnZXMKIFRBUkdFVF9PVVRfVEVTVENBU0VTIDo9ICQoUFJPRFVDVF9PVVQpL3Rlc3RjYXNlcworVEFSR0VUX09VVF9URVNUX0NPTkZJRyA6PSAkKFBST0RVQ1RfT1VUKS90ZXN0X2NvbmZpZwogCiBpZmVxICgkKFNBTklUSVpFX0xJVEUpLHRydWUpCiAjIFdoZW4gdXNpbmcgU0FOSVRJWkVfTElURSwgQVBLcyBtdXN0IG5vdCBiZSBwYWNrYWdlZCB3aXRoIHNhbml0aXplZCBsaWJyYXJpZXMsIGFzIHRoZXkgd2lsbCBub3QKQEAgLTYwNiw2ICs2NjEsMzkgQEAKIGVuZGlmCiAkKFRBUkdFVF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9PVVRfT0RNX0FQUFMgOj0gJChUQVJHRVRfT1VUX09ETV9BUFBTKQogCitUQVJHRVRfT1VUX1BST0RVQ1QgOj0gJChQUk9EVUNUX09VVCkvJChUQVJHRVRfQ09QWV9PVVRfUFJPRFVDVCkKK2lmbmVxICgkKGZpbHRlciBhZGRyZXNzLCQoU0FOSVRJWkVfVEFSR0VUKSksKQordGFyZ2V0X291dF9wcm9kdWN0X3NoYXJlZF9saWJyYXJpZXNfYmFzZSA6PSAkKFBST0RVQ1RfT1VUKS8kKFRBUkdFVF9DT1BZX09VVF9BU0FOKS9zeXN0ZW0KK2lmZXEgKCQoU0FOSVRJWkVfTElURSksdHJ1ZSkKKyMgV2hlbiB1c2luZyBTQU5JVElaRV9MSVRFLCBBUEtzIG11c3Qgbm90IGJlIHBhY2thZ2VkIHdpdGggc2FuaXRpemVkIGxpYnJhcmllcywgYXMgdGhleSB3aWxsIG5vdAorIyB3b3JrIHdpdGggdW5zYW5pdGl6ZWQgYXBwX3Byb2Nlc3MuIEZvciBzaW1wbGljaXR5LCBnZW5lcmF0ZSBBUEtzIGludG8gL2RhdGEvYXNhbi8uCit0YXJnZXRfb3V0X3Byb2R1Y3RfYXBwX2Jhc2UgOj0gJChQUk9EVUNUX09VVCkvJChUQVJHRVRfQ09QWV9PVVRfQVNBTikvcHJvZHVjdAorZWxzZQordGFyZ2V0X291dF9wcm9kdWN0X2FwcF9iYXNlIDo9ICQoVEFSR0VUX09VVF9QUk9EVUNUKQorZW5kaWYKK2Vsc2UKK3RhcmdldF9vdXRfcHJvZHVjdF9zaGFyZWRfbGlicmFyaWVzX2Jhc2UgOj0gJChUQVJHRVRfT1VUKQordGFyZ2V0X291dF9wcm9kdWN0X2FwcF9iYXNlIDo9ICQoVEFSR0VUX09VVF9QUk9EVUNUKQorZW5kaWYKKworaWZlcSAoJChUQVJHRVRfSVNfNjRfQklUKSx0cnVlKQorVEFSR0VUX09VVF9QUk9EVUNUX1NIQVJFRF9MSUJSQVJJRVMgOj0gJCh0YXJnZXRfb3V0X3Byb2R1Y3Rfc2hhcmVkX2xpYnJhcmllc19iYXNlKS9saWI2NAorZWxzZQorVEFSR0VUX09VVF9QUk9EVUNUX1NIQVJFRF9MSUJSQVJJRVMgOj0gJCh0YXJnZXRfb3V0X3Byb2R1Y3Rfc2hhcmVkX2xpYnJhcmllc19iYXNlKS9saWIKK2VuZGlmCitUQVJHRVRfT1VUX1BST0RVQ1RfSkFWQV9MSUJSQVJJRVM6PSAkKFRBUkdFVF9PVVRfUFJPRFVDVCkvZnJhbWV3b3JrCitUQVJHRVRfT1VUX1BST0RVQ1RfQVBQUyA6PSAkKHRhcmdldF9vdXRfcHJvZHVjdF9hcHBfYmFzZSkvYXBwCitUQVJHRVRfT1VUX1BST0RVQ1RfQVBQU19QUklWSUxFR0VEIDo9ICQodGFyZ2V0X291dF9wcm9kdWN0X2FwcF9iYXNlKS9wcml2LWFwcAorVEFSR0VUX09VVF9QUk9EVUNUX0VUQyA6PSAkKFRBUkdFVF9PVVRfUFJPRFVDVCkvZXRjCisKK2lmZXEgKCQoVEFSR0VUX1RSQU5TTEFURV8yTkRfQVJDSCksdHJ1ZSkKKyQoVEFSR0VUXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX09VVF9QUk9EVUNUX1NIQVJFRF9MSUJSQVJJRVMgOj0gJCh0YXJnZXRfb3V0X3Byb2R1Y3Rfc2hhcmVkX2xpYnJhcmllc19iYXNlKS9saWIvJChUQVJHRVRfMk5EX0FSQ0gpCitlbHNlCiskKFRBUkdFVF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9PVVRfUFJPRFVDVF9TSEFSRURfTElCUkFSSUVTIDo9ICQodGFyZ2V0X291dF9wcm9kdWN0X3NoYXJlZF9saWJyYXJpZXNfYmFzZSkvbGliCitlbmRpZgorJChUQVJHRVRfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfT1VUX1BST0RVQ1RfQVBQUyA6PSAkKFRBUkdFVF9PVVRfUFJPRFVDVF9BUFBTKQorJChUQVJHRVRfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfT1VUX1BST0RVQ1RfQVBQU19QUklWSUxFR0VEIDo9ICQoVEFSR0VUX09VVF9QUk9EVUNUX0FQUFNfUFJJVklMRUdFRCkKKwogVEFSR0VUX09VVF9CUkVBS1BBRCA6PSAkKFBST0RVQ1RfT1VUKS9icmVha3BhZAogCiBUQVJHRVRfT1VUX1VOU1RSSVBQRUQgOj0gJChQUk9EVUNUX09VVCkvc3ltYm9scwpAQCAtNjQ1LDEzICs3MzMsMyBAQAogaWZlcSAoJChDQUxMRURfRlJPTV9TRVRVUCksdHJ1ZSkKIFBSSU5UX0JVSUxEX0NPTkZJRyA/PSB0cnVlCiBlbmRpZgotCi1pZmVxICgkKFVTRV9DTEFOR19QTEFURk9STV9CVUlMRCksKQotVVNFX0NMQU5HX1BMQVRGT1JNX0JVSUxEIDo9IHRydWUKLWVuZGlmCi0KLWlmbmVxICgkKFVTRV9DTEFOR19QTEFURk9STV9CVUlMRCksdHJ1ZSkKLWlmbmVxICgkKFVTRV9DTEFOR19QTEFURk9STV9CVUlMRCksZmFsc2UpCi0kKGVycm9yIFVTRV9DTEFOR19QTEFURk9STV9CVUlMRCBtdXN0IGJlIHRydWUgb3IgZmFsc2UpCi1lbmRpZgotZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvZXhlY3V0YWJsZV9pbnRlcm5hbC5tayBiL2NvcmUvZXhlY3V0YWJsZV9pbnRlcm5hbC5tawppbmRleCAwYWVjMjc1Li40YTYyZmJmIDEwMDY0NAotLS0gYS9jb3JlL2V4ZWN1dGFibGVfaW50ZXJuYWwubWsKKysrIGIvY29yZS9leGVjdXRhYmxlX2ludGVybmFsLm1rCkBAIC0xMiw3ICsxMiw5IEBACiBMT0NBTF9NT0RVTEVfU1VGRklYIDo9ICQoVEFSR0VUX0VYRUNVVEFCTEVfU1VGRklYKQogZW5kaWYKIAoraWZkZWYgdGFyZ2V0LWV4ZWN1dGFibGUtaG9vawogJChjYWxsIHRhcmdldC1leGVjdXRhYmxlLWhvb2spCitlbmRpZgogCiBza2lwX2J1aWxkX2Zyb21fc291cmNlIDo9CiBpZmRlZiBMT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRQpkaWZmIC0tZ2l0IGEvY29yZS9nZW5lcmF0ZV9lbmZvcmNlX3Jyby5tayBiL2NvcmUvZ2VuZXJhdGVfZW5mb3JjZV9ycm8ubWsKaW5kZXggNTc5MDg5Yy4uNjJhOGM4ZCAxMDA2NDQKLS0tIGEvY29yZS9nZW5lcmF0ZV9lbmZvcmNlX3Jyby5taworKysgYi9jb3JlL2dlbmVyYXRlX2VuZm9yY2VfcnJvLm1rCkBAIC03LDEyICs3LDEyIEBACiAKIGlmZXEgKHRydWUsJChlbmZvcmNlX3Jyb19zb3VyY2VfaXNfbWFuaWZlc3RfcGFja2FnZV9uYW1lKSkKICQocnJvX2FuZHJvaWRfbWFuaWZlc3RfZmlsZSk6IFBSSVZBVEVfUEFDS0FHRV9OQU1FIDo9ICQoZW5mb3JjZV9ycm9fc291cmNlX21hbmlmZXN0X3BhY2thZ2VfaW5mbykKLSQocnJvX2FuZHJvaWRfbWFuaWZlc3RfZmlsZSk6IGJ1aWxkL3Rvb2xzL2dlbmVyYXRlLWVuZm9yY2UtcnJvLWFuZHJvaWQtbWFuaWZlc3QucHkKLQkkKGhpZGUpIGJ1aWxkL3Rvb2xzL2dlbmVyYXRlLWVuZm9yY2UtcnJvLWFuZHJvaWQtbWFuaWZlc3QucHkgLXUgLXAgJChQUklWQVRFX1BBQ0tBR0VfTkFNRSkgLW8gJEAKKyQocnJvX2FuZHJvaWRfbWFuaWZlc3RfZmlsZSk6IGJ1aWxkL21ha2UvdG9vbHMvZ2VuZXJhdGUtZW5mb3JjZS1ycm8tYW5kcm9pZC1tYW5pZmVzdC5weQorCSQoaGlkZSkgYnVpbGQvbWFrZS90b29scy9nZW5lcmF0ZS1lbmZvcmNlLXJyby1hbmRyb2lkLW1hbmlmZXN0LnB5IC11IC1wICQoUFJJVkFURV9QQUNLQUdFX05BTUUpIC1vICRACiBlbHNlCiAkKHJyb19hbmRyb2lkX21hbmlmZXN0X2ZpbGUpOiBQUklWQVRFX1NPVVJDRV9NQU5JRkVTVF9GSUxFIDo9ICQoZW5mb3JjZV9ycm9fc291cmNlX21hbmlmZXN0X3BhY2thZ2VfaW5mbykKLSQocnJvX2FuZHJvaWRfbWFuaWZlc3RfZmlsZSk6ICQoZW5mb3JjZV9ycm9fc291cmNlX21hbmlmZXN0X3BhY2thZ2VfaW5mbykgYnVpbGQvdG9vbHMvZ2VuZXJhdGUtZW5mb3JjZS1ycm8tYW5kcm9pZC1tYW5pZmVzdC5weQotCSQoaGlkZSkgYnVpbGQvdG9vbHMvZ2VuZXJhdGUtZW5mb3JjZS1ycm8tYW5kcm9pZC1tYW5pZmVzdC5weSAtcCAkKFBSSVZBVEVfU09VUkNFX01BTklGRVNUX0ZJTEUpIC1vICRACiskKHJyb19hbmRyb2lkX21hbmlmZXN0X2ZpbGUpOiAkKGVuZm9yY2VfcnJvX3NvdXJjZV9tYW5pZmVzdF9wYWNrYWdlX2luZm8pIGJ1aWxkL21ha2UvdG9vbHMvZ2VuZXJhdGUtZW5mb3JjZS1ycm8tYW5kcm9pZC1tYW5pZmVzdC5weQorCSQoaGlkZSkgYnVpbGQvbWFrZS90b29scy9nZW5lcmF0ZS1lbmZvcmNlLXJyby1hbmRyb2lkLW1hbmlmZXN0LnB5IC1wICQoUFJJVkFURV9TT1VSQ0VfTUFOSUZFU1RfRklMRSkgLW8gJEAKIGVuZGlmCiAKIExPQ0FMX1BBVEg6PSAkKGludGVybWVkaWF0ZXMpCmRpZmYgLS1naXQgYS9jb3JlL2hvc3RfZGFsdmlrX2phdmFfbGlicmFyeS5tayBiL2NvcmUvaG9zdF9kYWx2aWtfamF2YV9saWJyYXJ5Lm1rCmluZGV4IGE1MjJmMGIuLjFlZjBjY2IgMTAwNjQ0Ci0tLSBhL2NvcmUvaG9zdF9kYWx2aWtfamF2YV9saWJyYXJ5Lm1rCisrKyBiL2NvcmUvaG9zdF9kYWx2aWtfamF2YV9saWJyYXJ5Lm1rCkBAIC02Nyw2ICs2Nyw4IEBACiAKIGluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2phdmFfY29tbW9uLm1rCiAKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL3Nka19jaGVjay5taworCiAkKGNsZWFudGFyZ2V0KTogUFJJVkFURV9DTEVBTl9GSUxFUyArPSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKQogCiAjIExpc3Qgb2YgZGVwZW5kZW5jaWVzIGZvciBhbnl0aGluZyB0aGF0IG5lZWRzIGFsbCBqYXZhIHNvdXJjZXMgaW4gcGxhY2UKQEAgLTc0LDYgKzc2LDcgQEAKICAgICAkKGphdmFfc291cmNlcykgXAogICAgICQoamF2YV9yZXNvdXJjZV9zb3VyY2VzKSBcCiAgICAgJChwcm90b19qYXZhX3NvdXJjZXNfZmlsZV9zdGFtcCkgXAorICAgICQoTE9DQUxfU1JDSkFSUykgXAogICAgICQoTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMpCiAKICQoamF2YV9zb3VyY2VfbGlzdF9maWxlKTogJChqYXZhX3NvdXJjZXNfZGVwcykKQEAgLTg0LDYgKzg3LDkgQEAKICQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfSkFSX0VYQ0xVREVfRklMRVMgOj0KICQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfSkFSX1BBQ0tBR0VTIDo9CiAkKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBQUklWQVRFX0pBUl9FWENMVURFX1BBQ0tBR0VTIDo9CiskKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBQUklWQVRFX1NSQ0pBUlMgOj0gJChMT0NBTF9TUkNKQVJTKQorJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKTogUFJJVkFURV9TUkNKQVJfTElTVF9GSUxFIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL3NyY2phci1saXN0CiskKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBQUklWQVRFX1NSQ0pBUl9JTlRFUk1FRElBVEVTX0RJUiA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9zcmNqYXJzCiAkKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBcCiAgICAgJChqYXZhX3NvdXJjZV9saXN0X2ZpbGUpIFwKICAgICAkKGphdmFfc291cmNlc19kZXBzKSBcCkBAIC05Myw2ICs5OSw3IEBACiAgICAgJChhbm5vdGF0aW9uX3Byb2Nlc3Nvcl9kZXBzKSBcCiAgICAgJChOT1JNQUxJWkVfUEFUSCkgXAogICAgICQoSkFSX0FSR1MpIFwKKyAgICAkKFpJUFNZTkMpIFwKICAgICB8ICQoU09PTkdfSkFWQUNfV1JBUFBFUikKIAkkKHRyYW5zZm9ybS1ob3N0LWphdmEtdG8tZGFsdmlrLXBhY2thZ2UpCiAKQEAgLTEwMCw2ICsxMDcsNyBAQAogCiAkKGZ1bGxfY2xhc3Nlc190dXJiaW5lX2phcik6IFBSSVZBVEVfSkFWQUNGTEFHUyA6PSAkKExPQ0FMX0pBVkFDRkxBR1MpICQoYW5ub3RhdGlvbl9wcm9jZXNzb3JfZmxhZ3MpCiAkKGZ1bGxfY2xhc3Nlc190dXJiaW5lX2phcik6IFBSSVZBVEVfRE9OVF9ERUxFVEVfSkFSX01FVEFfSU5GIDo9ICQoTE9DQUxfRE9OVF9ERUxFVEVfSkFSX01FVEFfSU5GKQorJChmdWxsX2NsYXNzZXNfdHVyYmluZV9qYXIpOiBQUklWQVRFX1NSQ0pBUlMgOj0gJChMT0NBTF9TUkNKQVJTKQogJChmdWxsX2NsYXNzZXNfdHVyYmluZV9qYXIpOiBcCiAgICAgJChqYXZhX3NvdXJjZV9saXN0X2ZpbGUpIFwKICAgICAkKGphdmFfc291cmNlc19kZXBzKSBcCkBAIC0xMzQsNyArMTQyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZnVsbF9zdGF0aWNfamF2YV9saWJzKSAgfCAkKE1FUkdFX1pJUFMpCiAJJChpZiAkKFBSSVZBVEVfSkFSX01BTklGRVNUKSwgJChoaWRlKSBzZWQgLWUgInMvJUJVSUxEX05VTUJFUiUvJChCVUlMRF9OVU1CRVJfRlJPTV9GSUxFKS8iIFwKICAgICAgICAgICAgICQoUFJJVkFURV9KQVJfTUFOSUZFU1QpID4gJChkaXIgJEApL21hbmlmZXN0Lm1mKQotCSQoTUVSR0VfWklQUykgLWogJChpZiAkKFBSSVZBVEVfSkFSX01BTklGRVNUKSwtbSAkKGRpciAkQCkvbWFuaWZlc3QubWYpIFwKKwkkKE1FUkdFX1pJUFMpIC1qIC0taWdub3JlLWR1cGxpY2F0ZXMgJChpZiAkKFBSSVZBVEVfSkFSX01BTklGRVNUKSwtbSAkKGRpciAkQCkvbWFuaWZlc3QubWYpIFwKICAgICAgICAgICAgICQoaWYgJChQUklWQVRFX0RPTlRfREVMRVRFX0pBUl9NRVRBX0lORiksLC1zdHJpcERpciBNRVRBLUlORiAtemlwVG9Ob3RTdHJpcCAkPCkgXAogICAgICAgICAgICAgJEAgJDwgJChjYWxsIHJldmVyc2UtbGlzdCwkKFBSSVZBVEVfU1RBVElDX0pBVkFfTElCUkFSSUVTKSkKIApAQCAtMTUwLDYgKzE1OCw3IEBACiAKICQoZXZhbCAkKGNhbGwgY29weS1vbmUtZmlsZSwkKGZ1bGxfY2xhc3Nlc19qYXJqYXJfamFyKSwkKGZ1bGxfY2xhc3Nlc19qYXIpKSkKIAoraWZuZXEgKCQoVVNFX0Q4X0RFU1VHQVIpLHRydWUpCiBteV9kZXN1Z2FyaW5nIDo9CiBpZmVxICgkKExPQ0FMX0pBVkFfTEFOR1VBR0VfVkVSU0lPTiksMS44KQogbXlfZGVzdWdhcmluZyA6PSB0cnVlCkBAIC0xNTcsNiArMTY2LDkgQEAKICQoZnVsbF9jbGFzc2VzX2Rlc3VnYXJfamFyKTogJChmdWxsX2NsYXNzZXNfamFyKSAkKGZ1bGxfamF2YV9oZWFkZXJfbGlicykgJChERVNVR0FSKQogCSQoZGVzdWdhci1jbGFzc2VzLWphcikKIGVuZGlmCitlbHNlCitteV9kZXN1Z2FyaW5nIDo9CitlbmRpZgogCiBpZm5kZWYgbXlfZGVzdWdhcmluZwogZnVsbF9jbGFzc2VzX2Rlc3VnYXJfamFyIDo9ICQoZnVsbF9jbGFzc2VzX2phcikKQEAgLTE3Miw4ICsxODQsMTIgQEAKIGVsc2UgIyAhTE9DQUxfSVNfU1RBVElDX0pBVkFfTElCUkFSWQogJChidWlsdF9kZXgpOiBQUklWQVRFX0lOVEVSTUVESUFURVNfRElSIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pCiAkKGJ1aWx0X2RleCk6IFBSSVZBVEVfRFhfRkxBR1MgOj0gJChMT0NBTF9EWF9GTEFHUykKLSQoYnVpbHRfZGV4KTogJChmdWxsX2NsYXNzZXNfZGVzdWdhcl9qYXIpICQoRFgpCiskKGJ1aWx0X2RleCk6ICQoZnVsbF9jbGFzc2VzX2Rlc3VnYXJfamFyKSAkKERYKSAkKFpJUDJaSVApCitpZm5lcSAoJChVU0VfRDhfREVTVUdBUiksdHJ1ZSkKIAkkKHRyYW5zZm9ybS1jbGFzc2VzLmphci10by1kZXgpCitlbHNlCisJJCh0cmFuc2Zvcm0tY2xhc3Nlcy1kOC5qYXItdG8tZGV4KQorZW5kaWYKIAogJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0RFWF9GSUxFIDo9ICQoYnVpbHRfZGV4KQogJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1NPVVJDRV9BUkNISVZFIDo9ICQoZnVsbF9jbGFzc2VzX2phcmphcl9qYXIpCkBAIC0xODUsOSArMjAxLDkgQEAKIAogZW5kaWYgIyAhTE9DQUxfSVNfU1RBVElDX0pBVkFfTElCUkFSWQogCi1pZm5lcSAoLCQoZmlsdGVyLW91dCBjdXJyZW50IHN5c3RlbV9jdXJyZW50IHRlc3RfY3VycmVudCwgJChMT0NBTF9TREtfVkVSU0lPTikpKQotICBteV9kZWZhdWx0X2FwcF90YXJnZXRfc2RrIDo9ICQoTE9DQUxfU0RLX1ZFUlNJT04pCi0gIG15X3Nka192ZXJzaW9uIDo9ICQoTE9DQUxfU0RLX1ZFUlNJT04pCitpZm5lcSAoLCQoZmlsdGVyLW91dCBjdXJyZW50IHN5c3RlbV9jdXJyZW50IHRlc3RfY3VycmVudCBjb3JlX2N1cnJlbnQsICQoTE9DQUxfU0RLX1ZFUlNJT04pKSkKKyAgbXlfZGVmYXVsdF9hcHBfdGFyZ2V0X3NkayA6PSAkKGNhbGwgZ2V0LW51bWVyaWMtc2RrLXZlcnNpb24sJChMT0NBTF9TREtfVkVSU0lPTikpCisgIG15X3Nka192ZXJzaW9uIDo9ICQoY2FsbCBnZXQtbnVtZXJpYy1zZGstdmVyc2lvbiwkKExPQ0FMX1NES19WRVJTSU9OKSkKIGVsc2UKICAgbXlfZGVmYXVsdF9hcHBfdGFyZ2V0X3NkayA6PSAkKERFRkFVTFRfQVBQX1RBUkdFVF9TREspCiAgIG15X3Nka192ZXJzaW9uIDo9ICQoUExBVEZPUk1fU0RLX1ZFUlNJT04pCmRpZmYgLS1naXQgYS9jb3JlL2hvc3RfZXhlY3V0YWJsZV9pbnRlcm5hbC5tayBiL2NvcmUvaG9zdF9leGVjdXRhYmxlX2ludGVybmFsLm1rCmluZGV4IDE5MjAwZmQuLmM0ZjlmNjYgMTAwNjQ0Ci0tLSBhL2NvcmUvaG9zdF9leGVjdXRhYmxlX2ludGVybmFsLm1rCisrKyBiL2NvcmUvaG9zdF9leGVjdXRhYmxlX2ludGVybmFsLm1rCkBAIC0xMiw3ICsxMiw5IEBACiBMT0NBTF9NT0RVTEVfU1VGRklYIDo9ICQoJChteV9wcmVmaXgpRVhFQ1VUQUJMRV9TVUZGSVgpCiBlbmRpZgogCitpZmRlZiBob3N0LWV4ZWN1dGFibGUtaG9vawogJChjYWxsIGhvc3QtZXhlY3V0YWJsZS1ob29rKQorZW5kaWYKIAogc2tpcF9idWlsZF9mcm9tX3NvdXJjZSA6PQogaWZkZWYgTE9DQUxfUFJFQlVJTFRfTU9EVUxFX0ZJTEUKZGlmZiAtLWdpdCBhL2NvcmUvaG9zdF9qYXZhX2xpYnJhcnkubWsgYi9jb3JlL2hvc3RfamF2YV9saWJyYXJ5Lm1rCmluZGV4IDliZWFkM2YuLmRiMjQ1NDIgMTAwNjQ0Ci0tLSBhL2NvcmUvaG9zdF9qYXZhX2xpYnJhcnkubWsKKysrIGIvY29yZS9ob3N0X2phdmFfbGlicmFyeS5tawpAQCAtNTUsMTkgKzU1LDE1IEBACiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9qYXZhX2NvbW1vbi5tawogCiAjIFRoZSBsYXllcnMgZmlsZSBhbGxvd3MgeW91IHRvIGVuZm9yY2UgYSBsYXllcmluZyBiZXR3ZWVuIGphdmEgcGFja2FnZXMuCi0jIFJ1biBidWlsZC90b29scy9qYXZhLWxheWVycy5weSBmb3IgbW9yZSBkZXRhaWxzLgorIyBSdW4gYnVpbGQvbWFrZS90b29scy9qYXZhLWxheWVycy5weSBmb3IgbW9yZSBkZXRhaWxzLgogbGF5ZXJzX2ZpbGUgOj0gJChhZGRwcmVmaXggJChMT0NBTF9QQVRIKS8sICQoTE9DQUxfSkFWQV9MQVlFUlNfRklMRSkpCiAKLSMgSWYgZXJyb3IgcHJvbmUgaXMgZW5hYmxlZCB0aGVuIGFkZCBMT0NBTF9FUlJPUl9QUk9ORV9GTEFHUyB0byBMT0NBTF9KQVZBQ0ZMQUdTCi1pZmVxICgkKFJVTl9FUlJPUl9QUk9ORSksdHJ1ZSkKLUxPQ0FMX0pBVkFDRkxBR1MgKz0gJChMT0NBTF9FUlJPUl9QUk9ORV9GTEFHUykKLWVuZGlmCi0KICMgTGlzdCBvZiBkZXBlbmRlbmNpZXMgZm9yIGFueXRoaW5nIHRoYXQgbmVlZHMgYWxsIGphdmEgc291cmNlcyBpbiBwbGFjZQogamF2YV9zb3VyY2VzX2RlcHMgOj0gXAogICAgICQoamF2YV9zb3VyY2VzKSBcCiAgICAgJChqYXZhX3Jlc291cmNlX3NvdXJjZXMpIFwKICAgICAkKHByb3RvX2phdmFfc291cmNlc19maWxlX3N0YW1wKSBcCisgICAgJChMT0NBTF9TUkNKQVJTKSBcCiAgICAgJChMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUykKIAogJChqYXZhX3NvdXJjZV9saXN0X2ZpbGUpOiAkKGphdmFfc291cmNlc19kZXBzKQpAQCAtNzgsNiArNzQsOSBAQAogJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKTogUFJJVkFURV9KQVJfRVhDTFVERV9GSUxFUyA6PQogJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKTogUFJJVkFURV9KQVJfUEFDS0FHRVMgOj0KICQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfSkFSX0VYQ0xVREVfUEFDS0FHRVMgOj0KKyQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfU1JDSkFSUyA6PSAkKExPQ0FMX1NSQ0pBUlMpCiskKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBQUklWQVRFX1NSQ0pBUl9MSVNUX0ZJTEUgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvc3JjamFyLWxpc3QKKyQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfU1JDSkFSX0lOVEVSTUVESUFURVNfRElSIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL3NyY2phcnMKICQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFwKICAgICAkKGphdmFfc291cmNlX2xpc3RfZmlsZSkgXAogICAgICQoamF2YV9zb3VyY2VzX2RlcHMpIFwKQEAgLTg3LDYgKzg2LDcgQEAKICAgICAkKE5PUk1BTElaRV9QQVRIKSBcCiAgICAgJChaSVBUSU1FKSBcCiAgICAgJChKQVJfQVJHUykgXAorICAgICQoWklQU1lOQykgXAogICAgIHwgJChTT09OR19KQVZBQ19XUkFQUEVSKQogCSQodHJhbnNmb3JtLWhvc3QtamF2YS10by1wYWNrYWdlKQogCSQocmVtb3ZlLXRpbWVzdGFtcHMtZnJvbS1wYWNrYWdlKQpAQCAtOTksNyArOTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChmdWxsX3N0YXRpY19qYXZhX2xpYnMpIHwgJChNRVJHRV9aSVBTKQogCSQoaWYgJChQUklWQVRFX0pBUl9NQU5JRkVTVCksICQoaGlkZSkgc2VkIC1lICJzLyVCVUlMRF9OVU1CRVIlLyQoQlVJTERfTlVNQkVSX0ZST01fRklMRSkvIiBcCiAgICAgICAgICAgICAkKFBSSVZBVEVfSkFSX01BTklGRVNUKSA+ICQoZGlyICRAKS9tYW5pZmVzdC5tZikKLQkkKE1FUkdFX1pJUFMpIC1qICQoaWYgJChQUklWQVRFX0pBUl9NQU5JRkVTVCksLW0gJChkaXIgJEApL21hbmlmZXN0Lm1mKSBcCisJJChNRVJHRV9aSVBTKSAtaiAtLWlnbm9yZS1kdXBsaWNhdGVzICQoaWYgJChQUklWQVRFX0pBUl9NQU5JRkVTVCksLW0gJChkaXIgJEApL21hbmlmZXN0Lm1mKSBcCiAgICAgICAgICAgICAtc3RyaXBEaXIgTUVUQS1JTkYgLXppcFRvTm90U3RyaXAgJDwgJEAgJDwgJChjYWxsIHJldmVyc2UtbGlzdCwkKFBSSVZBVEVfU1RBVElDX0pBVkFfTElCUkFSSUVTKSkKIAogIyBSdW4gamFyamFyIGlmIG5lY2Vzc2FyeSwgb3RoZXJ3aXNlIGp1c3QgY29weSB0aGUgZmlsZS4KZGlmZiAtLWdpdCBhL2NvcmUvaG9zdF9qYXZhX2xpYnJhcnlfY29tbW9uLm1rIGIvY29yZS9ob3N0X2phdmFfbGlicmFyeV9jb21tb24ubWsKaW5kZXggOGRmNGIzNy4uNTFlMmQ5NCAxMDA2NDQKLS0tIGEvY29yZS9ob3N0X2phdmFfbGlicmFyeV9jb21tb24ubWsKKysrIGIvY29yZS9ob3N0X2phdmFfbGlicmFyeV9jb21tb24ubWsKQEAgLTQ4LDMgKzQ4LDggQEAKIAogTE9DQUxfSU5URVJNRURJQVRFX1NPVVJDRV9ESVIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvc3JjCiBMT0NBTF9KQVZBX0xJQlJBUklFUyA6PSAkKHNvcnQgJChMT0NBTF9KQVZBX0xJQlJBUklFUykpCisKKyMgSWYgZXJyb3IgcHJvbmUgaXMgZW5hYmxlZCB0aGVuIGFkZCBMT0NBTF9FUlJPUl9QUk9ORV9GTEFHUyB0byBMT0NBTF9KQVZBQ0ZMQUdTCitpZmVxICgkKFJVTl9FUlJPUl9QUk9ORSksdHJ1ZSkKK0xPQ0FMX0pBVkFDRkxBR1MgKz0gJChMT0NBTF9FUlJPUl9QUk9ORV9GTEFHUykKK2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2hvc3Rfc2hhcmVkX2xpYnJhcnlfaW50ZXJuYWwubWsgYi9jb3JlL2hvc3Rfc2hhcmVkX2xpYnJhcnlfaW50ZXJuYWwubWsKaW5kZXggNWUxOTljYy4uMGEzYjMxNyAxMDA2NDQKLS0tIGEvY29yZS9ob3N0X3NoYXJlZF9saWJyYXJ5X2ludGVybmFsLm1rCisrKyBiL2NvcmUvaG9zdF9zaGFyZWRfbGlicmFyeV9pbnRlcm5hbC5tawpAQCAtMjAsNyArMjAsOSBAQAogJChlcnJvciAkKExPQ0FMX1BBVEgpOiBDYW5ub3Qgc2V0IG1vZHVsZSBzdGVtIGZvciBhIGxpYnJhcnkpCiBlbmRpZgogCitpZmRlZiBob3N0LXNoYXJlZC1saWJyYXJ5LWhvb2sKICQoY2FsbCBob3N0LXNoYXJlZC1saWJyYXJ5LWhvb2spCitlbmRpZgogCiBza2lwX2J1aWxkX2Zyb21fc291cmNlIDo9CiBpZmRlZiBMT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtdjUvQm9hcmRDb25maWcubWsgYi9jb3JlL2hvc3RfdGVzdF9jb25maWcubWsKc2ltaWxhcml0eSBpbmRleCA2OCUKcmVuYW1lIGZyb20gdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtdjUvQm9hcmRDb25maWcubWsKcmVuYW1lIHRvIGNvcmUvaG9zdF90ZXN0X2NvbmZpZy5tawppbmRleCAwMTY5MzdhLi5iOTk3NWU1IDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9Cb2FyZENvbmZpZy5taworKysgYi9jb3JlL2hvc3RfdGVzdF9jb25maWcubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCwxMCArMTQsMTIgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAjCiAKLWluY2x1ZGUgYnVpbGQvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvQm9hcmRDb25maWcubWsKKyMKKyMgQ29tbW9uIHJ1bGVzIGZvciBidWlsZGluZyBhIFRyYWRlRmVkIHRlc3QgWE1MIGZpbGUgZm9yIGhvc3Qgc2lkZSB0ZXN0cy4KKyMKIAotVEFSR0VUX0FSQ0hfVkFSSUFOVCA6PSBhcm12NXRlCi1UQVJHRVRfQ1BVX0FCSSA6PSBhcm1lYWJpCi1UQVJHRVRfQ1BVX0FCSTIgOj0KKyQoY2FsbCByZWNvcmQtbW9kdWxlLXR5cGUsSE9TVF9URVNUX0NPTkZJRykKIAotV0lUSF9ERVhQUkVPUFQgOj0gZmFsc2UKK0xPQ0FMX0lTX0hPU1RfTU9EVUxFIDo9IHRydWUKKworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGVzdF9jb25maWdfY29tbW9uLm1rCmRpZmYgLS1naXQgYS9jb3JlL2luc3RhbGxfam5pX2xpYnMubWsgYi9jb3JlL2luc3RhbGxfam5pX2xpYnMubWsKaW5kZXggNmI1NTBjMS4uYjdkODNkYyAxMDA2NDQKLS0tIGEvY29yZS9pbnN0YWxsX2puaV9saWJzLm1rCisrKyBiL2NvcmUvaW5zdGFsbF9qbmlfbGlicy5tawpAQCAtMTgsMTkgKzE4LDE0IEBACiBpZm5lcSAoJChmaWx0ZXIgdGVzdHMgc2FtcGxlcywgJChMT0NBTF9NT0RVTEVfVEFHUykpLCkKIG15X2VtYmVkX2puaSA6PSB0cnVlCiBlbmRpZgotaWZlcSAoJChQUk9EVUNUX0ZVTExfVFJFQkxFKSx0cnVlKQotICBpZmVxICgkKGZpbHRlciAkKFRBUkdFVF9PVVQpLyUsICQobXlfbW9kdWxlX3BhdGgpKSwpCi0gICAgIyBJZiB0aGlzIGFwcCBpc24ndCB0byBiZSBpbnN0YWxsZWQgdG8gdGhlIHN5c3RlbSBwYXJ0aXRpb24sIGFuZCB0aGUgZGV2aWNlCi0gICAgIyBpcyBmdWxseSB0cmVibGUtaXplZCB0aGVuIGpuaSBsaWJzIGFyZSBlbWJlZGRlZCwgT3RoZXJ3aXNlLCBhY2Nlc3MgdG8gdGhlCi0gICAgIyBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxpYiBpcyBpbnN0YWxsZWQgdG8gKHVzdWFsbHkgL3ZlbmRvci9saWIpIG5lZWRzIHRvIGJlCi0gICAgIyBhbGxvd2VkIGZvciBzeXN0ZW0gcHJvY2Vzc2VzLCB3aGljaCBpcyBhIFRyZWJsZSB2aW9sYXRpb24uCi0gICAgbXlfZW1iZWRfam5pIDo9IHRydWUKLSAgZW5kaWYKLWVsc2UKLSAgaWZlcSAoJChmaWx0ZXIgJChUQVJHRVRfT1VUKS8lICQoVEFSR0VUX09VVF9WRU5ET1IpLyUgJChUQVJHRVRfT1VUX09FTSkvJSwgJChteV9tb2R1bGVfcGF0aCkpLCkKLSAgICAjIElmIHRoaXMgYXBwIGlzbid0IHRvIGJlIGluc3RhbGxlZCB0byBzeXN0ZW0sIHZlbmRvciwgb3Igb2VtIHBhcnRpdGlvbnMuCi0gICAgbXlfZW1iZWRfam5pIDo9IHRydWUKLSAgZW5kaWYKK2lmZXEgKCQoZmlsdGVyICQoVEFSR0VUX09VVCkvJSAkKFRBUkdFVF9PVVRfVkVORE9SKS8lICQoVEFSR0VUX09VVF9PRU0pLyUsICQobXlfbW9kdWxlX3BhdGgpKSwpCisjIElmIHRoaXMgYXBwIGlzbid0IHRvIGJlIGluc3RhbGxlZCB0byBzeXN0ZW0gcGFydGl0aW9ucy4KK215X2VtYmVkX2puaSA6PSB0cnVlCitlbmRpZgorIyBJZiB3ZSdyZSBpbnN0YWxsaW5nIHRoaXMgQVBQIGFzIGEgY29tcHJlc3NlZCBtb2R1bGUsIHdlIGluY2x1ZGUgYWxsIEpOSSBsaWJyYXJpZXMKKyMgaW4gdGhlIGNvbXByZXNzZWQgYXJ0aWZhY3QsIHJhdGhlciB0aGFuIGFzIHNlcGFyYXRlIGZpbGVzIG9uIHRoZSBwYXJ0aXRpb24gaW4gcXVlc3Rpb24uCitpZmRlZiBMT0NBTF9DT01QUkVTU0VEX01PRFVMRQorbXlfZW1iZWRfam5pIDo9IHRydWUKIGVuZGlmCiAKIGpuaV9zaGFyZWRfbGlicmFyaWVzIDo9CmRpZmYgLS1naXQgYS9jb3JlL2luc3RhbGxfam5pX2xpYnNfaW50ZXJuYWwubWsgYi9jb3JlL2luc3RhbGxfam5pX2xpYnNfaW50ZXJuYWwubWsKaW5kZXggMjY1ZDQ4Mi4uYWI1ZmQyYyAxMDA2NDQKLS0tIGEvY29yZS9pbnN0YWxsX2puaV9saWJzX2ludGVybmFsLm1rCisrKyBiL2NvcmUvaW5zdGFsbF9qbmlfbGlic19pbnRlcm5hbC5tawpAQCAtMjQsMTYgKzI0LDExIEBACiBpZmRlZiBteV9lbWJlZF9qbmkKICMgQXBwIGV4cGxpY2l0bHkgcmVxdWlyZXMgdGhlIHByZWJ1aWx0IE5ESyBzdGwgc2hhcmVkIGxpYnJhaWVzLgogIyBUaGUgTkRLIHN0bCBzaGFyZWQgbGlicmFyaWVzIHNob3VsZCBuZXZlciBnbyB0byB0aGUgc3lzdGVtIGltYWdlLgotaWZuZXEgKCQoZmlsdGVyICQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSwgc3RscG9ydF9zaGFyZWQgYysrX3NoYXJlZCksKQoraWZlcSAoJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpLGMrK19zaGFyZWQpCiBpZm5kZWYgTE9DQUxfU0RLX1ZFUlNJT04KICQoZXJyb3IgTE9DQUxfU0RLX1ZFUlNJT04gbXVzdCBiZSBkZWZpbmVkIHdpdGggTE9DQUxfTkRLX1NUTF9WQVJJQU5ULCBcCiAgICAgTE9DQUxfUEFDS0FHRV9OQU1FPSQoTE9DQUxfUEFDS0FHRV9OQU1FKSkKIGVuZGlmCi1lbmRpZgotaWZlcSAoc3RscG9ydF9zaGFyZWQsJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpKQotbXlfam5pX3NoYXJlZF9saWJyYXJpZXMgKz0gXAotICAgICQoSElTVE9SSUNBTF9OREtfVkVSU0lPTlNfUk9PVCkvJChMT0NBTF9OREtfVkVSU0lPTikvc291cmNlcy9jeHgtc3RsL3N0bHBvcnQvbGlicy8kKFRBUkdFVF8kKG15XzJuZF9hcmNoX3ByZWZpeClDUFVfQUJJKS9saWJzdGxwb3J0X3NoYXJlZC5zbwotZWxzZSBpZmVxIChjKytfc2hhcmVkLCQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSkKIG15X2puaV9zaGFyZWRfbGlicmFyaWVzICs9IFwKICAgICAkKEhJU1RPUklDQUxfTkRLX1ZFUlNJT05TX1JPT1QpLyQoTE9DQUxfTkRLX1ZFUlNJT04pL3NvdXJjZXMvY3h4LXN0bC9sbHZtLWxpYmMrKy9saWJzLyQoVEFSR0VUXyQobXlfMm5kX2FyY2hfcHJlZml4KUNQVV9BQkkpL2xpYmMrK19zaGFyZWQuc28KIGVuZGlmCkBAIC0xMDgsMTUgKzEwMywxNiBAQAogZW5kaWYgICMgb3V0ZXIgbXlfcHJlYnVpbHRfam5pX2xpYnMKIAogIyBWZXJpZnkgdGhhdCBhbGwgaW5jbHVkZWQgbGlicmFyaWVzIGFyZSBidWlsdCBhZ2FpbnN0IHRoZSBOREsKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2FsbG93ZWRfbmRrX3R5cGVzLm1rCiBpZm5lcSAoJChzdHJpcCAkKExPQ0FMX0pOSV9TSEFSRURfTElCUkFSSUVTKSksKQogaWZuZXEgKCQoTE9DQUxfU0RLX1ZFUlNJT04pLCkKIG15X2xpbmtfdHlwZSA6PSBhcHA6c2RrCi1teV93YXJuX3R5cGVzIDo9IG5hdGl2ZTpwbGF0Zm9ybQotbXlfYWxsb3dlZF90eXBlcyA6PSBuYXRpdmU6bmRrCitteV93YXJuX3R5cGVzIDo9IG5hdGl2ZTpwbGF0Zm9ybSAkKG15X3dhcm5fbmRrX3R5cGVzKQorbXlfYWxsb3dlZF90eXBlcyA6PSAkKG15X2FsbG93ZWRfbmRrX3R5cGVzKQogZWxzZQogbXlfbGlua190eXBlIDo9IGFwcDpwbGF0Zm9ybQotbXlfd2Fybl90eXBlcyA6PQotbXlfYWxsb3dlZF90eXBlcyA6PSBuYXRpdmU6bmRrIG5hdGl2ZTpwbGF0Zm9ybSBuYXRpdmU6dmVuZG9yIG5hdGl2ZTp2bmRrIG5hdGl2ZTp2bmRrX3ByaXZhdGUKK215X3dhcm5fdHlwZXMgOj0gJChteV93YXJuX25ka190eXBlcykKK215X2FsbG93ZWRfdHlwZXMgOj0gJChteV9hbGxvd2VkX25ka190eXBlcykgbmF0aXZlOnBsYXRmb3JtIG5hdGl2ZTp2ZW5kb3IgbmF0aXZlOnZuZGsgbmF0aXZlOnZuZGtfcHJpdmF0ZQogZW5kaWYKIAogbXlfbGlua19kZXBzIDo9ICQoYWRkcHJlZml4IFNIQVJFRF9MSUJSQVJJRVM6LCQoTE9DQUxfSk5JX1NIQVJFRF9MSUJSQVJJRVMpKQpkaWZmIC0tZ2l0IGEvY29yZS9pbnN0cnVtZW50YXRpb25fdGVzdF9jb25maWdfdGVtcGxhdGUueG1sIGIvY29yZS9pbnN0cnVtZW50YXRpb25fdGVzdF9jb25maWdfdGVtcGxhdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZWE2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2luc3RydW1lbnRhdGlvbl90ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzwhLS0gVGhpcyB0ZXN0IGNvbmZpZyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkLiAtLT4KKzxjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9uPSJSdW5zIHtMQUJFTH0uIj4KKyAgICA8b3B0aW9uIG5hbWU9InRlc3Qtc3VpdGUtdGFnIiB2YWx1ZT0iYXBjdCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9InRlc3Qtc3VpdGUtdGFnIiB2YWx1ZT0iYXBjdC1pbnN0cnVtZW50YXRpb24iIC8+CisgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGFyZ2V0cHJlcC5zdWl0ZS5TdWl0ZUFwa0luc3RhbGxlciI+CisgICAgICAgIDxvcHRpb24gbmFtZT0iY2xlYW51cC1hcGtzIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJ0ZXN0LWZpbGUtbmFtZSIgdmFsdWU9IntNT0RVTEV9LmFwayIgLz4KKyAgICA8L3RhcmdldF9wcmVwYXJlcj4KKworICAgIDx0ZXN0IGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50ZXN0dHlwZS57VEVTVF9UWVBFfSIgPgorICAgICAgICA8b3B0aW9uIG5hbWU9InBhY2thZ2UiIHZhbHVlPSJ7UEFDS0FHRX0iIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icnVubmVyIiB2YWx1ZT0ie1JVTk5FUn0iIC8+CisgICAgPC90ZXN0PgorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9qYWNvY28ubWsgYi9jb3JlL2phY29jby5tawppbmRleCBmNTE3OTBkLi42NDA2ZGY0IDEwMDY0NAotLS0gYS9jb3JlL2phY29jby5taworKysgYi9jb3JlL2phY29jby5tawpAQCAtODQsOCArODQsOCBAQAogCW1rZGlyIC1wICQoUFJJVkFURV9JTlNUUlVNRU5URURfUEFUSCkKIAlqYXZhIC1qYXIgJChKQUNPQ09fQ0xJX0pBUikgXAogCSAgaW5zdHJ1bWVudCBcCi0JICAtcXVpZXQgXAotCSAgLWRlc3QgJyQoUFJJVkFURV9JTlNUUlVNRU5URURfUEFUSCknIFwKKwkgIC0tcXVpZXQgXAorCSAgLS1kZXN0ICckKFBSSVZBVEVfSU5TVFJVTUVOVEVEX1BBVEgpJyBcCiAJICAkKFBSSVZBVEVfVU5aSVBQRURfUEFUSCkKIAl0b3VjaCAkKFBSSVZBVEVfSU5TVFJVTUVOVEVEX1RJTUVTVEFNUF9QQVRIKQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEubWsgYi9jb3JlL2phdmEubWsKaW5kZXggOTE0M2JjMS4uZTI2MzkwNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhLm1rCisrKyBiL2NvcmUvamF2YS5tawpAQCAtMTUsNiArMTUsMTAgQEAKIGVuZGlmICMgIVBES19KQVZBCiBlbmRpZiAjUERLCiAKK2lmbmRlZiBMT0NBTF9VU0VfUjgKK0xPQ0FMX1VTRV9SOCA6PSAkKFVTRV9SOCkKK2VuZGlmCisKIExPQ0FMX05PX1NUQU5EQVJEX0xJQlJBUklFUzo9JChzdHJpcCAkKExPQ0FMX05PX1NUQU5EQVJEX0xJQlJBUklFUykpCiBMT0NBTF9TREtfVkVSU0lPTjo9JChzdHJpcCAkKExPQ0FMX1NES19WRVJTSU9OKSkKIApAQCAtNTksMTUgKzYzLDYgQEAKIGludGVybWVkaWF0ZXMgOj0gJChjYWxsIGxvY2FsLWludGVybWVkaWF0ZXMtZGlyKQogaW50ZXJtZWRpYXRlcy5DT01NT04gOj0gJChjYWxsIGxvY2FsLWludGVybWVkaWF0ZXMtZGlyLENPTU1PTikKIAotIyBDaG9vc2UgbGVhZiBuYW1lIGZvciB0aGUgY29tcGlsZWQgamFyIGZpbGUuCi1pZmVxICgkKExPQ0FMX0VNTUFfSU5TVFJVTUVOVCksdHJ1ZSkKLWZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXJfbGVhZiA6PSBjbGFzc2VzLW5vLWRlYnVnLXZhci5qYXIKLWJ1aWx0X2RleF9pbnRlcm1lZGlhdGVfbGVhZiA6PSBuby1sb2NhbAotZWxzZQotZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcl9sZWFmIDo9IGNsYXNzZXMtZnVsbC1kZWJ1Zy5qYXIKLWJ1aWx0X2RleF9pbnRlcm1lZGlhdGVfbGVhZiA6PSB3aXRoLWxvY2FsCi1lbmRpZgotCiBpZmVxICgkKExPQ0FMX1BST0dVQVJEX0VOQUJMRUQpLGRpc2FibGVkKQogTE9DQUxfUFJPR1VBUkRfRU5BQkxFRCA6PQogZW5kaWYKQEAgLTc1LDE0ICs3MCwxNCBAQAogZnVsbF9jbGFzc2VzX3R1cmJpbmVfamFyIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2NsYXNzZXMtdHVyYmluZS5qYXIKIGZ1bGxfY2xhc3Nlc19oZWFkZXJfamFyamFyIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2NsYXNzZXMtaGVhZGVyLWphcmphci5qYXIKIGZ1bGxfY2xhc3Nlc19oZWFkZXJfamFyIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2NsYXNzZXMtaGVhZGVyLmphcgotZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phciA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS8kKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXJfbGVhZikKK2Z1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvY2xhc3Nlcy1mdWxsLWRlYnVnLmphcgogZnVsbF9jbGFzc2VzX3Byb2Nlc3NlZF9qYXIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvY2xhc3Nlcy1wcm9jZXNzZWQuamFyCiBmdWxsX2NsYXNzZXNfZGVzdWdhcl9qYXIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvY2xhc3Nlcy1kZXN1Z2FyLmphcgotamFyamFyX2xlYWYgOj0gY2xhc3Nlcy1qYXJqYXIuamFyCi1mdWxsX2NsYXNzZXNfamFyamFyX2phciA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS8kKGphcmphcl9sZWFmKQorZnVsbF9jbGFzc2VzX2phcmphcl9qYXIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvY2xhc3Nlcy1qYXJqYXIuamFyCiBmdWxsX2NsYXNzZXNfcHJvZ3VhcmRfamFyIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2NsYXNzZXMtcHJvZ3VhcmQuamFyCiBmdWxsX2NsYXNzZXNfY29tYmluZWRfamFyIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2NsYXNzZXMtY29tYmluZWQuamFyCi1idWlsdF9kZXhfaW50ZXJtZWRpYXRlIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pLyQoYnVpbHRfZGV4X2ludGVybWVkaWF0ZV9sZWFmKS9jbGFzc2VzLmRleAorYnVpbHRfZGV4X2ludGVybWVkaWF0ZSA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9kZXgvY2xhc3Nlcy5kZXgKK2J1aWx0X2RleF9oaWRkZW5hcGkgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvZGV4LWhpZGRlbmFwaS9jbGFzc2VzLmRleAogZnVsbF9jbGFzc2VzX3N0dWJzX2phciA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9zdHVicy5qYXIKIGphdmFfc291cmNlX2xpc3RfZmlsZSA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9qYXZhLXNvdXJjZS1saXN0CiAKQEAgLTExMyw5ICsxMDgsOCBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIC5ycyBmaWxlczogUmVuZGVyU2NyaXB0IHNvdXJjZXMgdG8gLmphdmEgZmlsZXMgYW5kIC5iYyBmaWxlcwotIyMgLmZzIGZpbGVzOiBGaWx0ZXJzY3JpcHQgc291cmNlcyB0byAuamF2YSBmaWxlcyBhbmQgLmJjIGZpbGVzCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXJlbmRlcnNjcmlwdF9zb3VyY2VzIDo9ICQoZmlsdGVyICUucnMgJS5mcywkKExPQ0FMX1NSQ19GSUxFUykpCityZW5kZXJzY3JpcHRfc291cmNlcyA6PSAkKGZpbHRlciAlLnJzLCQoTE9DQUxfU1JDX0ZJTEVTKSkKICMgQmVjYXVzZSBuYW1lcyBvZiB0aGUgamF2YSBmaWxlcyBmcm9tIFJlbmRlclNjcmlwdCBhcmUgdW5rbm93biB1bnRpbCB0aGUKICMgLnJzIGZpbGUocykgYXJlIGNvbXBpbGVkLCB3ZSBoYXZlIHRvIGRlcGVuZCBvbiBhIHRpbWVzdGFtcCBmaWxlLgogUmVuZGVyU2NyaXB0X2ZpbGVfc3RhbXAgOj0KQEAgLTEzNCw4ICsxMjgsOCBAQAogZWxzZQogICBpZm5lcSAoLCQoTE9DQUxfU0RLX1ZFUlNJT04pKQogICAgICMgU2V0IHRhcmdldC1hcGkgZm9yIExPQ0FMX1NES19WRVJTSU9OcyBvdGhlciB0aGFuIGN1cnJlbnQuCi0gICAgaWZuZXEgKCwkKGZpbHRlci1vdXQgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsICQoTE9DQUxfU0RLX1ZFUlNJT04pKSkKLSAgICAgIHJlbmRlcnNjcmlwdF90YXJnZXRfYXBpIDo9ICQoTE9DQUxfU0RLX1ZFUlNJT04pCisgICAgaWZuZXEgKCwkKGZpbHRlci1vdXQgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQgY29yZV9jdXJyZW50LCAkKExPQ0FMX1NES19WRVJTSU9OKSkpCisgICAgICByZW5kZXJzY3JpcHRfdGFyZ2V0X2FwaSA6PSAkKGNhbGwgZ2V0LW51bWVyaWMtc2RrLXZlcnNpb24sJChMT0NBTF9TREtfVkVSU0lPTikpCiAgICAgZW5kaWYKICAgZW5kaWYgICMgTE9DQUxfU0RLX1ZFUlNJT04gaXMgc2V0CiBlbmRpZiAgIyBMT0NBTF9SRU5ERVJTQ1JJUFRfVEFSR0VUX0FQSSBpcyBzZXQKQEAgLTE1OSw3ICsxNTMsNyBAQAogcmVuZGVyc2NyaXB0X2ZsYWdzICs9ICQoTE9DQUxfUkVOREVSU0NSSVBUX0ZMQUdTKQogCiAjIHByZXBlbmQgdGhlIFJlbmRlclNjcmlwdCBzeXN0ZW0gaW5jbHVkZSBwYXRoCi1pZm5lcSAoJChmaWx0ZXItb3V0IGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50LCQoTE9DQUxfU0RLX1ZFUlNJT04pKSQoaWYgJChUQVJHRVRfQlVJTERfQVBQUyksJChmaWx0ZXIgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsJChMT0NBTF9TREtfVkVSU0lPTikpKSwpCitpZm5lcSAoJChmaWx0ZXItb3V0IGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50IGNvcmVfY3VycmVudCwkKExPQ0FMX1NES19WRVJTSU9OKSkkKGlmICQoVEFSR0VUX0JVSUxEX0FQUFMpLCQoZmlsdGVyIGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50LCQoTE9DQUxfU0RLX1ZFUlNJT04pKSksKQogIyBpZiBhIG51bWVyaWMgTE9DQUxfU0RLX1ZFUlNJT04sIG9yIGN1cnJlbnQgTE9DQUxfU0RLX1ZFUlNJT04gd2l0aCBUQVJHRVRfQlVJTERfQVBQUwogTE9DQUxfUkVOREVSU0NSSVBUX0lOQ0xVREVTIDo9IFwKICAgICAkKEhJU1RPUklDQUxfU0RLX1ZFUlNJT05TX1JPT1QpL3JlbmRlcnNjcmlwdC9jbGFuZy1pbmNsdWRlIFwKQEAgLTE3Niw3ICsxNzAsNyBAQAogTE9DQUxfUkVOREVSU0NSSVBUX0lOQ0xVREVTIDo9ICQoTE9DQUxfUkVOREVSU0NSSVBUX0lOQ0xVREVTX09WRVJSSURFKQogZW5kaWYKIAotYmNfZmlsZXMgOj0gJChwYXRzdWJzdCAlLmZzLCUuYmMsICQocGF0c3Vic3QgJS5ycywlLmJjLCAkKG5vdGRpciAkKHJlbmRlcnNjcmlwdF9zb3VyY2VzKSkpKQorYmNfZmlsZXMgOj0gJChwYXRzdWJzdCAlLnJzLCUuYmMsICQobm90ZGlyICQocmVuZGVyc2NyaXB0X3NvdXJjZXMpKSkKIGJjX2RlcF9maWxlcyA6PSAkKGFkZHByZWZpeCAkKHJlbmRlcnNjcmlwdF9pbnRlcm1lZGlhdGUuQ09NTU9OKS8sJChwYXRzdWJzdCAlLmJjLCUuZCwkKGJjX2ZpbGVzKSkpCiAKICQoUmVuZGVyU2NyaXB0X2ZpbGVfc3RhbXApOiBQUklWQVRFX1JTX0lOQ0xVREVTIDo9ICQoTE9DQUxfUkVOREVSU0NSSVBUX0lOQ0xVREVTKQpAQCAtMjc1LDcgKzI2OSw3IEBACiAKIGFpZGxfcHJlcHJvY2Vzc19pbXBvcnQgOj0KIGlmZGVmIExPQ0FMX1NES19WRVJTSU9OCi1pZm5lcSAoJChmaWx0ZXIgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsICQoTE9DQUxfU0RLX1ZFUlNJT04pJChUQVJHRVRfQlVJTERfQVBQUykpLCkKK2lmbmVxICgkKGZpbHRlciBjdXJyZW50IHN5c3RlbV9jdXJyZW50IHRlc3RfY3VycmVudCBjb3JlX2N1cnJlbnQsICQoTE9DQUxfU0RLX1ZFUlNJT04pJChUQVJHRVRfQlVJTERfQVBQUykpLCkKICAgIyBMT0NBTF9TREtfVkVSU0lPTiBpcyBjdXJyZW50IGFuZCBubyBUQVJHRVRfQlVJTERfQVBQUwogICBhaWRsX3ByZXByb2Nlc3NfaW1wb3J0IDo9ICQoVEFSR0VUX09VVF9DT01NT05fSU5URVJNRURJQVRFUykvZnJhbWV3b3JrLmFpZGwKIGVsc2UKQEAgLTMyMyw3ICszMTcsNyBAQAogbG9ndGFnc19zb3VyY2VzIDo9ICQoYWRkcHJlZml4ICQoTE9DQUxfUEFUSCkvLCAkKGxvZ3RhZ3Nfc291cmNlcykpCiAKICQobG9ndGFnc19qYXZhX3NvdXJjZXMpOiBQUklWQVRFX01FUkdFRF9UQUcgOj0gJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS9hbGwtZXZlbnQtbG9nLXRhZ3MudHh0Ci0kKGxvZ3RhZ3NfamF2YV9zb3VyY2VzKTogJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvbG9ndGFncy8lLmphdmE6ICQoTE9DQUxfUEFUSCkvJS5sb2d0YWdzICQoVEFSR0VUX09VVF9DT01NT05fSU5URVJNRURJQVRFUykvYWxsLWV2ZW50LWxvZy10YWdzLnR4dCAkKEpBVkFUQUdTKSBidWlsZC90b29scy9ldmVudF9sb2dfdGFncy5weQorJChsb2d0YWdzX2phdmFfc291cmNlcyk6ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2xvZ3RhZ3MvJS5qYXZhOiAkKExPQ0FMX1BBVEgpLyUubG9ndGFncyAkKFRBUkdFVF9PVVRfQ09NTU9OX0lOVEVSTUVESUFURVMpL2FsbC1ldmVudC1sb2ctdGFncy50eHQgJChKQVZBVEFHUykgYnVpbGQvbWFrZS90b29scy9ldmVudF9sb2dfdGFncy5weQogCSQodHJhbnNmb3JtLWxvZ3RhZ3MtdG8tamF2YSkKIAogZWxzZQpAQCAtMzM2LDM5ICszMzAsMjYgQEAKIGphdmFfaW50ZXJtZWRpYXRlX3NvdXJjZXMgOj0gJChhZGRwcmVmaXggJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS8sICQoZmlsdGVyICUuamF2YSwkKExPQ0FMX0lOVEVSTUVESUFURV9TT1VSQ0VTKSkpCiBhbGxfamF2YV9zb3VyY2VzIDo9ICQoamF2YV9zb3VyY2VzKSAkKGphdmFfaW50ZXJtZWRpYXRlX3NvdXJjZXMpCiAKLWVuYWJsZV9zaGFyZGluZyA6PQotaWZuZXEgKCQoVFVSQklORV9FTkFCTEVEKSxmYWxzZSkKLWlmbmVxICgkKExPQ0FMX0pBVkFDX1NIQVJEX1NJWkUpLCkKLWlmbmVxICgkKExPQ0FMX0pBUl9QUk9DRVNTT1IpLCkKLSQoY2FsbCBwcmV0dHktZXJyb3IsQ2Fubm90IHNldCBib3RoIExPQ0FMX0pBVkFDX1NIQVJEX1NJWkUgYW5kIExPQ0FMX0pBUl9QUk9DRVNTT1IhKQotZW5kaWYgIyBMT0NBTF9KQVJfUFJPQ0VTU09SIGlzIG5vdCBlbXB0eQotZW5hYmxlX3NoYXJkaW5nIDo9IHRydWUKLQotbnVtX3NoYXJkcyA6PSAkKGNhbGwgaW50X2RpdmlkZSwkKHdvcmRzICQoamF2YV9zb3VyY2VzKSksJChMT0NBTF9KQVZBQ19TSEFSRF9TSVpFKSkKLWlmbmVxICgkKHdvcmRzICQoamF2YV9zb3VyY2VzKSksJChjYWxsIGludF9tdWx0aXBseSwkKExPQ0FMX0pBVkFDX1NIQVJEX1NJWkUpLCQobnVtX3NoYXJkcykpKQotIyBpbmNyZW1lbnQgbnVtYmVyIG9mIHNoYXJkcyBieSAxLgotbnVtX3NoYXJkcyA6PSAkKGNhbGwgaW50X3BsdXMsJChudW1fc2hhcmRzKSwxKQotZW5kaWYKLQotc2hhcmRfaWR4X2xpc3QgOj0gJChjYWxsIGludF9yYW5nZV9saXN0LDEsJChudW1fc2hhcmRzKSkKLXNoYXJkZWRfamF2YV9zb3VyY2VfbGlzdF9maWxlcyArPSAkKGZvcmVhY2ggeCwkKHNoYXJkX2lkeF9saXN0KSwkKGphdmFfc291cmNlX2xpc3RfZmlsZSkuc2hhcmQuJCh4KSkKLXNoYXJkZWRfamFyX2xpc3QgKz0gJChmb3JlYWNoIHgsJChzaGFyZF9pZHhfbGlzdCksJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKS5zaGFyZC4kKHgpKQotCi0jIGFsd2F5cyBwdXQgZHluYW1pY2FsbHktbG9jYXRlZCAuamF2YSBmaWxlcyAoZ2VuZXJhdGVkIGJ5IFByb3RvL3Jlc291cmNlLCBldGMpIGluIGEgbmV3IGZpbmFsIHNoYXJkLgotIyBpbmNyZW1lbnQgbnVtYmVyIG9mIHNoYXJkcyBieSAxLgotbnVtX3NoYXJkcyA6PSAkKGNhbGwgaW50X3BsdXMsJChudW1fc2hhcmRzKSwxKQotc2hhcmRlZF9qYXZhX3NvdXJjZV9saXN0X2ZpbGVzICs9ICQoamF2YV9zb3VyY2VfbGlzdF9maWxlKS5zaGFyZC4kKG51bV9zaGFyZHMpCi1zaGFyZGVkX2phcl9saXN0ICs9ICQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcikuc2hhcmQuJChudW1fc2hhcmRzKQotTE9DQUxfSU5URVJNRURJQVRFX1RBUkdFVFMgKz0gJChzaGFyZGVkX2phdmFfc291cmNlX2xpc3RfZmlsZXMpCi1MT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyArPSAkKHNoYXJkZWRfamFyX2xpc3QpCi1lbmRpZiAjIExPQ0FMX0pBVkFDX1NIQVJEX1NJWkUgaXMgbm90IGVtcHR5Ci1lbmRpZiAjIFRVUkJJTkVfRU5BQkxFRCAhPSBmYWxzZQotCiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9qYXZhX2NvbW1vbi5tawogCitpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9zZGtfY2hlY2subWsKKwogJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfSEFTX1JTX1NPVVJDRVMgOj0gJChpZiAkKHJlbmRlcnNjcmlwdF9zb3VyY2VzKSx0cnVlKQogJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfUlNfU09VUkNFX0lOVEVSTUVESUFURVNfRElSIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL3JlbmRlcnNjcmlwdAogCisjIFNldCB0aGUgcHJvZmlsZSBzb3VyY2Ugc28gdGhhdCB0aGUgb2RleCAvIHByb2ZpbGUgY29kZSBpbmNsdWRlZCBmcm9tIGphdmEubWsKKyMgY2FuIGZpbmQgaXQuCisjCisjIFRPRE86IGIvNjQ4OTYwODksIHRoaXMgaXMgYnJva2VuIHdoZW4gY2FsbGVkIGZyb20gcGFja2FnZV9pbnRlcm5hbC5taywgc2luY2UgdGhlIGZpbGUKKyMgd2UgcHJlb3B0IGZyb20gaXMgYSB0ZW1wb3JhcnkgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZHJlc3NlZCBpbiBhIGZvbGxvdyB1cCwgcG9zc2libHkKKyMgYnkgZGlzYWJsaW5nIHN0cmlwcGluZyBmb3IgcHJvZmlsZSBndWlkZWQgcHJlb3B0ICh3aGljaCBtYXkgYmUgZGVzaXJhYmxlIGZvciBvdGhlcgorIyByZWFzb25zIGFueXdheSkuCisjCisjIE5vdGUgdGhhdCB3ZSBzZXQgdGhpcyBvbmx5IHdoZW4gY2FsbGVkIGZyb20gcGFja2FnZV9pbnRlcm5hbC5tayBhbmQgbm90IGluIG90aGVyIGNhc2VzLgoraWZuZXEgKCwkKGNhbGxlZF9mcm9tX3BhY2thZ2VfaW50ZXJuYWwpCitkZXhfcHJlb3B0X3Byb2ZpbGVfc3JjX2ZpbGUgOj0gJChMT0NBTF9CVUlMVF9NT0RVTEUpCitlbmRpZgorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgZGVmaW5lcyBidWlsdF9vZGV4IGFsb25nIHdpdGggcnVsZSB0byBpbnN0YWxsIG9kZXgKIGluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2RleF9wcmVvcHRfb2RleF9pbnN0YWxsLm1rCkBAIC0zNzcsNyArMzU4LDcgQEAKICMgTWFrZSBzdXJlIHRoZXJlJ3Mgc29tZXRoaW5nIHRvIGJ1aWxkLgogaWZkZWYgZnVsbF9jbGFzc2VzX2phcgogaWZuZGVmIG5lZWRfY29tcGlsZV9qYXZhCi0kKGVycm9yICQoTE9DQUxfUEFUSCk6IFRhcmdldCBqYXZhIG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgYW55IHNvdXJjZSBvciByZXNvdXJjZSBmaWxlcykKKyQoY2FsbCBwcmV0dHktZXJyb3IsVGFyZ2V0IGphdmEgbW9kdWxlIGRvZXMgbm90IGRlZmluZSBhbnkgc291cmNlIG9yIHJlc291cmNlIGZpbGVzKQogZW5kaWYKIGVuZGlmCiAKQEAgLTM5NCw3ICszNzUsNyBAQAogQUxMX01PRFVMRVMuJChMT0NBTF9NT0RVTEUpLlNUVUJTIDo9ICQoZnVsbF9jbGFzc2VzX3N0dWJzX2phcikKIAogIyBUaGUgbGF5ZXJzIGZpbGUgYWxsb3dzIHlvdSB0byBlbmZvcmNlIGEgbGF5ZXJpbmcgYmV0d2VlbiBqYXZhIHBhY2thZ2VzLgotIyBSdW4gYnVpbGQvdG9vbHMvamF2YS1sYXllcnMucHkgZm9yIG1vcmUgZGV0YWlscy4KKyMgUnVuIGJ1aWxkL21ha2UvdG9vbHMvamF2YS1sYXllcnMucHkgZm9yIG1vcmUgZGV0YWlscy4KIGxheWVyc19maWxlIDo9ICQoYWRkcHJlZml4ICQoTE9DQUxfUEFUSCkvLCAkKExPQ0FMX0pBVkFfTEFZRVJTX0ZJTEUpKQogJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKTogUFJJVkFURV9KQVZBX0xBWUVSU19GSUxFIDo9ICQobGF5ZXJzX2ZpbGUpCiAkKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBQUklWQVRFX1dBUk5JTkdTX0VOQUJMRSA6PSAkKExPQ0FMX1dBUk5JTkdTX0VOQUJMRSkKQEAgLTQyNCw1NiArNDA1LDE2IEBACiAgICAgJChqYXZhX3Jlc291cmNlX3NvdXJjZXMpIFwKICAgICAkKFJlbmRlclNjcmlwdF9maWxlX3N0YW1wKSBcCiAgICAgJChwcm90b19qYXZhX3NvdXJjZXNfZmlsZV9zdGFtcCkgXAorICAgICQoTE9DQUxfU1JDSkFSUykgXAogICAgICQoTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMpCiAKICQoamF2YV9zb3VyY2VfbGlzdF9maWxlKTogJChqYXZhX3NvdXJjZXNfZGVwcykKIAkkKHdyaXRlLWphdmEtc291cmNlLWxpc3QpCiAKLWlmZGVmIGVuYWJsZV9zaGFyZGluZwotJChmb3JlYWNoIHgsJChzaGFyZF9pZHhfbGlzdCksXAotICAkKGV2YWwgJChjYWxsIHNhdmUtc2hhcmRlZC1qYXZhLXNvdXJjZS1saXN0LCQoeCksXAotICAgICQod29yZGxpc3QgJChjYWxsIGludF9wbHVzLDEsJChjYWxsIGludF9tdWx0aXBseSwkKExPQ0FMX0pBVkFDX1NIQVJEX1NJWkUpLCQoY2FsbCBpbnRfc3VidHJhY3QsJCh4KSwxKSkpLFwKLSAgICAgICQoY2FsbCBpbnRfbXVsdGlwbHksJChMT0NBTF9KQVZBQ19TSEFSRF9TSVpFKSwkKHgpKSwkKHNvcnQgJChqYXZhX3NvdXJjZXMpKSkpKSkKLQotIyBhbHdheXMgcHV0IGR5bmFtaWNhbGx5LWxvY2F0ZWQgLmphdmEgZmlsZXMgKGdlbmVyYXRlZCBieSBQcm90by9yZXNvdXJjZSwgZXRjKSBpbiBhIG5ldyBmaW5hbCBzaGFyZC4KLSQoamF2YV9zb3VyY2VfbGlzdF9maWxlKS5zaGFyZC4kKG51bV9zaGFyZHMpOiBQUklWQVRFX0pBVkFfSU5URVJNRURJQVRFX1NPVVJDRVMgOj0gJChqYXZhX2ludGVybWVkaWF0ZV9zb3VyY2VzKQotJChqYXZhX3NvdXJjZV9saXN0X2ZpbGUpLnNoYXJkLiQobnVtX3NoYXJkcyk6ICQoamF2YV9yZXNvdXJjZV9zb3VyY2VzKSBcCi0gICAgJChSZW5kZXJTY3JpcHRfZmlsZV9zdGFtcCkgXAotICAgICQocHJvdG9famF2YV9zb3VyY2VzX2ZpbGVfc3RhbXApIFwKLSAgICAkKExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTKSBcCi0gICAgJChOT1JNQUxJWkVfUEFUSCkKLQkkKGhpZGUpIHJtIC1mICRACi0JJChjYWxsIGR1bXAtd29yZHMtdG8tZmlsZSwkKFBSSVZBVEVfSkFWQV9JTlRFUk1FRElBVEVfU09VUkNFUyksJEAudG1wKQotCSQoY2FsbCBmZXRjaC1hZGRpdGlvbmFsLWphdmEtc291cmNlLCRALnRtcCkKLQkkKGhpZGUpIHRyICcgJyAnXG4nIDwgJEAudG1wIHwgJChOT1JNQUxJWkVfUEFUSCkgfCBzb3J0IC11ID4gJEAKLQotIyBKYXZhYyBzaGFyZGluZyB3aXRoIGhlYWRlciBsaWJzIGluY2x1ZGluZyBpdHMgb3duIGhlYWRlciBqYXIgYXMgb25lIG9mIGRlcGVuZGVuY3kuCi0kKGZvcmVhY2ggeCwkKHNoYXJkX2lkeF9saXN0KSxcCi0gICQoZXZhbCAkKGNhbGwgY3JlYXRlLWNsYXNzZXMtZnVsbC1kZWJ1Zy5qYXIsJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKS5zaGFyZC4kKHgpLFwKLSAgICAkKGphdmFfc291cmNlX2xpc3RfZmlsZSkuc2hhcmQuJCh4KSxcCi0gICAgICAkKGZ1bGxfamF2YV9oZWFkZXJfbGlicykgJChmdWxsX2NsYXNzZXNfaGVhZGVyX2phciksJCh4KSxcCi0gICAgICAgICQod29yZGxpc3QgJChjYWxsIGludF9wbHVzLDEsJChjYWxsIGludF9tdWx0aXBseSwkKExPQ0FMX0pBVkFDX1NIQVJEX1NJWkUpLCQoY2FsbCBpbnRfc3VidHJhY3QsJCh4KSwxKSkpLFwKLSAgICAgICAgICAkKGNhbGwgaW50X211bHRpcGx5LCQoTE9DQUxfSkFWQUNfU0hBUkRfU0laRSksJCh4KSksJChzb3J0ICQoamF2YV9zb3VyY2VzKSkpKSkpCi0KLSMgSmF2YWMgc2hhcmRpbmcgZm9yIGxhc3Qgc2hhcmQgd2l0aCBhZGRpdGlvbmFsIEphdmEgZGVwZW5kZW5jaWVzLgotJChldmFsICQoY2FsbCBjcmVhdGUtY2xhc3Nlcy1mdWxsLWRlYnVnLmphciwkKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpLnNoYXJkLiQobnVtX3NoYXJkcyksXAotICAkKGphdmFfc291cmNlX2xpc3RfZmlsZSkuc2hhcmQuJChudW1fc2hhcmRzKSwkKGZ1bGxfamF2YV9oZWFkZXJfbGlicykgJChmdWxsX2NsYXNzZXNfaGVhZGVyX2phciksJChzdHJpcCBcCi0gICAgJChudW1fc2hhcmRzKSksJCQoamF2YV9yZXNvdXJjZV9zb3VyY2VzKSAkJChSZW5kZXJTY3JpcHRfZmlsZV9zdGFtcCkgXAotICAgICAgJCQocHJvdG9famF2YV9zb3VyY2VzX2ZpbGVfc3RhbXApICQkKExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTKSkpCi0KLSQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfU0hBUkRFRF9KQVJfTElTVCA6PSAkKHNoYXJkZWRfamFyX2xpc3QpCi0kKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiAkKHNoYXJkZWRfamFyX2xpc3QpIHwgJChNRVJHRV9aSVBTKQotCSQoTUVSR0VfWklQUykgLWogJEAgJChQUklWQVRFX1NIQVJERURfSkFSX0xJU1QpCi1lbHNlCi0jIHdlIGNhbid0IHVzZSBzaW5nbGUgJCBmb3IgamF2YV9zb3VyY2VzX2RlcHMgc2luY2UgaXQgbWF5IGNvbnRhaW4gaGFzaCAnIycgc2lnbi4KLSQoZXZhbCAkKGNhbGwgY3JlYXRlLWNsYXNzZXMtZnVsbC1kZWJ1Zy5qYXIsJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKSxcCi0gICQoamF2YV9zb3VyY2VfbGlzdF9maWxlKSwkKGZ1bGxfamF2YV9oZWFkZXJfbGlicyksLCQkKGphdmFfc291cmNlc19kZXBzKSkpCi0KLWVuZGlmICMgaWZkZWYgZW5hYmxlX3NoYXJkaW5nCi0KIGlmbmVxICgkKFRVUkJJTkVfRU5BQkxFRCksZmFsc2UpCiAKICQoZnVsbF9jbGFzc2VzX3R1cmJpbmVfamFyKTogUFJJVkFURV9KQVZBQ0ZMQUdTIDo9ICQoTE9DQUxfSkFWQUNGTEFHUykgJChhbm5vdGF0aW9uX3Byb2Nlc3Nvcl9mbGFncykKKyQoZnVsbF9jbGFzc2VzX3R1cmJpbmVfamFyKTogUFJJVkFURV9TUkNKQVJTIDo9ICQoTE9DQUxfU1JDSkFSUykKICQoZnVsbF9jbGFzc2VzX3R1cmJpbmVfamFyKTogUFJJVkFURV9ET05UX0RFTEVURV9KQVJfTUVUQV9JTkYgOj0gJChMT0NBTF9ET05UX0RFTEVURV9KQVJfTUVUQV9JTkYpCiAkKGZ1bGxfY2xhc3Nlc190dXJiaW5lX2phcik6IFwKICAgICAkKGphdmFfc291cmNlX2xpc3RfZmlsZSkgXApAQCAtNTA0LDYgKzQ0NSwzMSBAQAogCiBlbmRpZiAjIFRVUkJJTkVfRU5BQkxFRCAhPSBmYWxzZQogCiskKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBQUklWQVRFX0pBVkFDRkxBR1MgOj0gJChMT0NBTF9KQVZBQ0ZMQUdTKSAkKGFubm90YXRpb25fcHJvY2Vzc29yX2ZsYWdzKQorJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKTogUFJJVkFURV9KQVJfRVhDTFVERV9GSUxFUyA6PSAkKExPQ0FMX0pBUl9FWENMVURFX0ZJTEVTKQorJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKTogUFJJVkFURV9KQVJfUEFDS0FHRVMgOj0gJChMT0NBTF9KQVJfUEFDS0FHRVMpCiskKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBQUklWQVRFX0pBUl9FWENMVURFX1BBQ0tBR0VTIDo9ICQoTE9DQUxfSkFSX0VYQ0xVREVfUEFDS0FHRVMpCiskKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBQUklWQVRFX0RPTlRfREVMRVRFX0pBUl9NRVRBX0lORiA6PSAkKExPQ0FMX0RPTlRfREVMRVRFX0pBUl9NRVRBX0lORikKKyQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfSkFWQV9TT1VSQ0VfTElTVCA6PSAkKGphdmFfc291cmNlX2xpc3RfZmlsZSkKKyQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfQUxMX0pBVkFfSEVBREVSX0xJQlJBUklFUyA6PSAkKGZ1bGxfamF2YV9oZWFkZXJfbGlicykKKyQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfU1JDSkFSUyA6PSAkKExPQ0FMX1NSQ0pBUlMpCiskKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiBQUklWQVRFX1NSQ0pBUl9MSVNUX0ZJTEUgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvc3JjamFyLWxpc3QKKyQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFBSSVZBVEVfU1JDSkFSX0lOVEVSTUVESUFURVNfRElSIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL3NyY2phcnMKKyQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcik6IFwKKyAgICAkKGphdmFfc291cmNlX2xpc3RfZmlsZSkgXAorICAgICQoZnVsbF9qYXZhX2hlYWRlcl9saWJzKSBcCisgICAgJChqYXZhX3NvdXJjZXNfZGVwcykgXAorICAgICQoZnVsbF9qYXZhX2Jvb3RjbGFzc3BhdGhfbGlicykgXAorICAgICQoZnVsbF9qYXZhX3N5c3RlbV9tb2R1bGVzX2RlcHMpIFwKKyAgICAkKGxheWVyc19maWxlKSBcCisgICAgJChhbm5vdGF0aW9uX3Byb2Nlc3Nvcl9kZXBzKSBcCisgICAgJChOT1JNQUxJWkVfUEFUSCkgXAorICAgICQoSkFSX0FSR1MpIFwKKyAgICAkKFpJUFNZTkMpIFwKKyAgICB8ICQoU09PTkdfSkFWQUNfV1JBUFBFUikKKwlAZWNobyAiVGFyZ2V0IEphdmE6ICRACisJJChjYWxsIGNvbXBpbGUtamF2YSwkKFRBUkdFVF9KQVZBQyksJChQUklWQVRFX0FMTF9KQVZBX0hFQURFUl9MSUJSQVJJRVMpKQorCiBqYXZhYy1jaGVjayA6ICQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcikKIGphdmFjLWNoZWNrLSQoTE9DQUxfTU9EVUxFKSA6ICQoZnVsbF9jbGFzc2VzX2NvbXBpbGVkX2phcikKIApAQCAtNTEzLDcgKzQ3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGZ1bGxfc3RhdGljX2phdmFfbGlicykgfCAkKE1FUkdFX1pJUFMpCiAJJChpZiAkKFBSSVZBVEVfSkFSX01BTklGRVNUKSwgJChoaWRlKSBzZWQgLWUgInMvJUJVSUxEX05VTUJFUiUvJChCVUlMRF9OVU1CRVJfRlJPTV9GSUxFKS8iIFwKICAgICAgICAgICAgICQoUFJJVkFURV9KQVJfTUFOSUZFU1QpID4gJChkaXIgJEApL21hbmlmZXN0Lm1mKQotCSQoTUVSR0VfWklQUykgLWogJChpZiAkKFBSSVZBVEVfSkFSX01BTklGRVNUKSwtbSAkKGRpciAkQCkvbWFuaWZlc3QubWYpIFwKKwkkKE1FUkdFX1pJUFMpIC1qIC0taWdub3JlLWR1cGxpY2F0ZXMgJChpZiAkKFBSSVZBVEVfSkFSX01BTklGRVNUKSwtbSAkKGRpciAkQCkvbWFuaWZlc3QubWYpIFwKICAgICAgICAgICAgICQoaWYgJChQUklWQVRFX0RPTlRfREVMRVRFX0pBUl9NRVRBX0lORiksLC1zdHJpcERpciBNRVRBLUlORiAtemlwVG9Ob3RTdHJpcCAkPCkgXAogICAgICAgICAgICAgJEAgJDwgJChjYWxsIHJldmVyc2UtbGlzdCwkKFBSSVZBVEVfU1RBVElDX0pBVkFfTElCUkFSSUVTKSkKIApAQCAtNTU1LDM4ICs1MjEsNDIgQEAKIAogJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoZnVsbF9jbGFzc2VzX2phcmphcl9qYXIpLCQoZnVsbF9jbGFzc2VzX2phcikpKQogCitMT0NBTF9GVUxMX0NMQVNTRVNfUFJFX0pBQ09DT19KQVIgOj0gJChmdWxsX2NsYXNzZXNfamFyKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2phY29jby5taworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKICMgVGVtcG9yYXJpbHkgZW5hYmxlIC0tbXVsdGktZGV4IHVudGlsIHByb2d1YXJkIHN1cHBvcnRzIHY1MyBjbGFzcyBmaWxlcwogIyAoIGh0dHA6Ly9iLzY3NjczODYwICkgb3Igd2UgbW92ZSBhd2F5IGZyb20gcHJvZ3VhcmQgYWx0b2dldGhlci4KIGlmZGVmIFRBUkdFVF9PUEVOSkRLOQogTE9DQUxfRFhfRkxBR1MgOj0gJChmaWx0ZXItb3V0IC0tbXVsdGktZGV4LCQoTE9DQUxfRFhfRkxBR1MpKSAtLW11bHRpLWRleAogZW5kaWYKIAoraWZuZXEgKCQoVVNFX0Q4X0RFU1VHQVIpLHRydWUpCiBteV9kZXN1Z2FyaW5nIDo9CiBpZm5kZWYgTE9DQUxfSVNfU1RBVElDX0pBVkFfTElCUkFSWQogbXlfZGVzdWdhcmluZyA6PSB0cnVlCiAkKGZ1bGxfY2xhc3Nlc19kZXN1Z2FyX2phcik6IFBSSVZBVEVfRFhfRkxBR1MgOj0gJChMT0NBTF9EWF9GTEFHUykKLSQoZnVsbF9jbGFzc2VzX2Rlc3VnYXJfamFyKTogJChmdWxsX2NsYXNzZXNfamFyKSAkKGZ1bGxfamF2YV9oZWFkZXJfbGlicykgJChERVNVR0FSKQorJChmdWxsX2NsYXNzZXNfZGVzdWdhcl9qYXIpOiAkKExPQ0FMX0ZVTExfQ0xBU1NFU19KQUNPQ09fSkFSKSAkKGZ1bGxfamF2YV9oZWFkZXJfbGlicykgJChERVNVR0FSKQogCSQoZGVzdWdhci1jbGFzc2VzLWphcikKIGVuZGlmCitlbHNlCitteV9kZXN1Z2FyaW5nIDo9CitlbmRpZgogCiBpZm5kZWYgbXlfZGVzdWdhcmluZwotZnVsbF9jbGFzc2VzX2Rlc3VnYXJfamFyIDo9ICQoZnVsbF9jbGFzc2VzX2phcikKK2Z1bGxfY2xhc3Nlc19kZXN1Z2FyX2phciA6PSAkKExPQ0FMX0ZVTExfQ0xBU1NFU19KQUNPQ09fSkFSKQogZW5kaWYKIAotTE9DQUxfRlVMTF9DTEFTU0VTX1BSRV9KQUNPQ09fSkFSIDo9ICQoZnVsbF9jbGFzc2VzX2Rlc3VnYXJfamFyKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2phY29jby5tawotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWZ1bGxfY2xhc3Nlc19wcmVfcHJvZ3VhcmRfamFyIDo9ICQoTE9DQUxfRlVMTF9DTEFTU0VTX0pBQ09DT19KQVIpCitmdWxsX2NsYXNzZXNfcHJlX3Byb2d1YXJkX2phciA6PSAkKGZ1bGxfY2xhc3Nlc19kZXN1Z2FyX2phcikKIAogIyBLZWVwIGEgY29weSBvZiB0aGUgamFyIGp1c3QgYmVmb3JlIHByb2d1YXJkIHByb2Nlc3NpbmcuCiAkKGV2YWwgJChjYWxsIGNvcHktb25lLWZpbGUsJChmdWxsX2NsYXNzZXNfcHJlX3Byb2d1YXJkX2phciksJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvY2xhc3Nlcy1wcmUtcHJvZ3VhcmQuamFyKSkKIAogIyBSdW4gcHJvZ3VhcmQgaWYgbmVjZXNzYXJ5CiBpZmRlZiBMT0NBTF9QUk9HVUFSRF9FTkFCTEVECi1pZm5lcSAoJChmaWx0ZXItb3V0IGZ1bGwgY3VzdG9tIG5vc3lzdGVtIG9iZnVzY2F0aW9uIG9wdGltaXphdGlvbiBzaHJpbmt0ZXN0cywkKExPQ0FMX1BST0dVQVJEX0VOQUJMRUQpKSwpCitpZm5lcSAoJChmaWx0ZXItb3V0IGZ1bGwgY3VzdG9tIG9iZnVzY2F0aW9uIG9wdGltaXphdGlvbiwkKExPQ0FMX1BST0dVQVJEX0VOQUJMRUQpKSwpCiAgICAgJCh3YXJuaW5nIHdoaWxlIHByb2Nlc3Npbmc6ICQoTE9DQUxfTU9EVUxFKSkKICAgICAkKGVycm9yIGludmFsaWQgdmFsdWUgZm9yIExPQ0FMX1BST0dVQVJEX0VOQUJMRUQ6ICQoTE9DQUxfUFJPR1VBUkRfRU5BQkxFRCkpCiBlbmRpZgpAQCAtNjAyLDcgKzU3Miw3IEBACiBteV9wcm9ndWFyZF9zZGtfcmFpc2UgOj0KIGlmZGVmIExPQ0FMX1NES19WRVJTSU9OCiBpZmRlZiBUQVJHRVRfQlVJTERfQVBQUwotaWZlcSAoLCQoZmlsdGVyIGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50LCAkKExPQ0FMX1NES19WRVJTSU9OKSkpCitpZmVxICgsJChmaWx0ZXIgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQgY29yZV9jdXJyZW50LCAkKExPQ0FMX1NES19WRVJTSU9OKSkpCiAgIG15X3Byb2d1YXJkX3Nka19yYWlzZSA6PSAkKGNhbGwgamF2YS1saWItaGVhZGVyLWZpbGVzLCBzZGtfdmN1cnJlbnQpCiBlbmRpZgogZWxzZQpAQCAtNjI0LDE5ICs1OTQsMTYgQEAKIAogY29tbW9uX3Byb2d1YXJkX2ZsYWdzIDo9IC1mb3JjZXByb2Nlc3NpbmcKIAotY29tbW9uX3Byb2d1YXJkX2ZsYWdfZmlsZXMgOj0KLWlmZXEgKCQoZmlsdGVyIG5vc3lzdGVtLCQoTE9DQUxfUFJPR1VBUkRfRU5BQkxFRCkpLCkKLWNvbW1vbl9wcm9ndWFyZF9mbGFnX2ZpbGVzICs9ICQoQlVJTERfU1lTVEVNKS9wcm9ndWFyZC5mbGFncwotaWZlcSAoJChMT0NBTF9FTU1BX0lOU1RSVU1FTlQpLHRydWUpCi1jb21tb25fcHJvZ3VhcmRfZmxhZ3MgKz0gLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL3Byb2d1YXJkLmVtbWEuZmxhZ3MKLWVuZGlmCi0jIElmIHRoaXMgaXMgYSB0ZXN0IHBhY2thZ2UsIGFkZCBwcm9ndWFyZCBrZWVwIGZsYWdzIGZvciB0ZXN0cy4KK2NvbW1vbl9wcm9ndWFyZF9mbGFnX2ZpbGVzIDo9ICQoQlVJTERfU1lTVEVNKS9wcm9ndWFyZC5mbGFncwogaWZuZXEgKCQoTE9DQUxfSU5TVFJVTUVOVEFUSU9OX0ZPUikkKGZpbHRlciB0ZXN0cywkKExPQ0FMX01PRFVMRV9UQUdTKSksKQotY29tbW9uX3Byb2d1YXJkX2ZsYWdfZmlsZXMgKz0gJChCVUlMRF9TWVNURU0pL3Byb2d1YXJkX3Rlc3RzLmZsYWdzCi1pZmVxICgkKGZpbHRlciBzaHJpbmt0ZXN0cywkKExPQ0FMX1BST0dVQVJEX0VOQUJMRUQpKSwpCiBjb21tb25fcHJvZ3VhcmRfZmxhZ3MgKz0gLWRvbnRzaHJpbmsgIyBkb24ndCBzaHJpbmsgdGVzdHMgYnkgZGVmYXVsdAotZW5kaWYgIyBzaHJpbmt0ZXN0cwogZW5kaWYgIyB0ZXN0IHBhY2thZ2UKK2lmbmVxICgkKExPQ0FMX1BST0dVQVJEX0VOQUJMRUQpLGN1c3RvbSkKKyAgaWZkZWYgTE9DQUxfVVNFX0FBUFQyCisgICAgY29tbW9uX3Byb2d1YXJkX2ZsYWdfZmlsZXMgKz0gJChmb3JlYWNoIGwsJChMT0NBTF9TVEFUSUNfQU5EUk9JRF9MSUJSQVJJRVMpLFwKKyAgICAgICAgJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixKQVZBX0xJQlJBUklFUywkKGwpLCxDT01NT04pL2V4cG9ydF9wcm9ndWFyZF9mbGFncykKKyAgZW5kaWYKK2VuZGlmCiBpZm5lcSAoJChjb21tb25fcHJvZ3VhcmRfZmxhZ19maWxlcyksKQogY29tbW9uX3Byb2d1YXJkX2ZsYWdzICs9ICQoYWRkcHJlZml4IC1pbmNsdWRlICwgJChjb21tb25fcHJvZ3VhcmRfZmxhZ19maWxlcykpCiAjIFRoaXMgaXMgaW5jbHVkZWQgZnJvbSAkKEJVSUxEX1NZU1RFTSkvcHJvZ3VhcmQuZmxhZ3MKQEAgLTY3OCwxMiArNjQ1LDExIEBACiAKIGVuZGlmICMgbm8gb2JmdXNjYXRpb24KIGVuZGlmICMgTE9DQUxfSU5TVFJVTUVOVEFUSU9OX0ZPUgotZW5kaWYgICMgTE9DQUxfUFJPR1VBUkRfRU5BQkxFRCBpcyBub3Qgbm9zeXN0ZW0KIAogcHJvZ3VhcmRfZmxhZ19maWxlcyA6PSAkKGFkZHByZWZpeCAkKExPQ0FMX1BBVEgpLywgJChMT0NBTF9QUk9HVUFSRF9GTEFHX0ZJTEVTKSkKLWlmZXEgKCQoVVNFX1I4KSx0cnVlKQoraWZlcSAoJChMT0NBTF9VU0VfUjgpLHRydWUpCiBwcm9ndWFyZF9mbGFnX2ZpbGVzICs9ICQoYWRkcHJlZml4ICQoTE9DQUxfUEFUSCkvLCAkKExPQ0FMX1I4X0ZMQUdfRklMRVMpKQotZW5kaWYgIyBVU0VfUjgKK2VuZGlmICMgTE9DQUxfVVNFX1I4CiBMT0NBTF9QUk9HVUFSRF9GTEFHUyArPSAkKGFkZHByZWZpeCAtaW5jbHVkZSAsICQocHJvZ3VhcmRfZmxhZ19maWxlcykpCiAKIGlmZGVmIExPQ0FMX1RFU1RfTU9EVUxFX1RPX1BST0dVQVJEX1dJVEgKQEAgLTcwNiw3ICs2NzIsNyBAQAogZW5kaWYKIAogaWZuZXEgKCQoZmlsdGVyIG9iZnVzY2F0aW9uLCQoTE9DQUxfUFJPR1VBUkRfRU5BQkxFRCkpLCkKLWlmbmVxICgkKFVTRV9SOCksdHJ1ZSkKK2lmbmVxICgkKExPQ0FMX1VTRV9SOCksdHJ1ZSkKICAgJChmdWxsX2NsYXNzZXNfcHJvZ3VhcmRfamFyKTogLktBVElfSU1QTElDSVRfT1VUUFVUUyA6PSAkKHByb2d1YXJkX2RpY3Rpb25hcnkpCiBlbHNlCiAgICQoYnVpbHRfZGV4X2ludGVybWVkaWF0ZSk6IC5LQVRJX0lNUExJQ0lUX09VVFBVVFMgOj0gJChwcm9ndWFyZF9kaWN0aW9uYXJ5KQpAQCAtNzE0LDcgKzY4MCw3IEBACiBlbmRpZgogCiAjIElmIFI4IGlzIG5vdCBlbmFibGVkIHJ1biBQcm9ndWFyZC4KLWlmbmVxICgkKFVTRV9SOCksdHJ1ZSkKK2lmbmVxICgkKExPQ0FMX1VTRV9SOCksdHJ1ZSkKICMgQ2hhbmdlcyB0byB0aGVzZSBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSByZXBsaWNhdGVkIGJlbG93IHdoZW4gdXNpbmcgUjgKICMgaW5zdGVhZCBvZiBQcm9ndWFyZCArIGR4LgogJChmdWxsX2NsYXNzZXNfcHJvZ3VhcmRfamFyKTogUFJJVkFURV9QUk9HVUFSRF9JTkpBUl9GSUxURVJTIDo9ICQocHJvZ3VhcmRfaW5qYXJfZmlsdGVycykKQEAgLTcyMiwxMCArNjg4LDEwIEBACiAkKGZ1bGxfY2xhc3Nlc19wcm9ndWFyZF9qYXIpOiBQUklWQVRFX1BST0dVQVJEX0ZMQUdTIDo9ICQobGVnYWN5X3Byb2d1YXJkX2ZsYWdzKSAkKGNvbW1vbl9wcm9ndWFyZF9mbGFncykgJChMT0NBTF9QUk9HVUFSRF9GTEFHUykKICQoZnVsbF9jbGFzc2VzX3Byb2d1YXJkX2phcikgOiAkKGZ1bGxfY2xhc3Nlc19wcmVfcHJvZ3VhcmRfamFyKSAkKGV4dHJhX2lucHV0X2phcikgJChteV9wcm9ndWFyZF9zZGtfcmFpc2UpICQoY29tbW9uX3Byb2d1YXJkX2ZsYWdfZmlsZXMpICQocHJvZ3VhcmRfZmxhZ19maWxlcykgJChsZWdhY3lfcHJvZ3VhcmRfbGliX2RlcHMpIHwgJChQUk9HVUFSRCkKIAkkKGNhbGwgdHJhbnNmb3JtLWphci10by1wcm9ndWFyZCkKLWVsc2UgIyAhVVNFX1I4CitlbHNlICMgIUxPQ0FMX1VTRV9SOAogIyBSdW5uaW5nIFI4IGluc3RlYWQgb2YgUHJvZ3VhcmQsIHByb2d1YXJkZWQgamFyIGlzIGFjdHVhbGx5IHRoZSBwcmUtUHJvZ3VhcmRlZCBqYXIuCiBmdWxsX2NsYXNzZXNfcHJvZ3VhcmRfamFyIDo9ICQoZnVsbF9jbGFzc2VzX3ByZV9wcm9ndWFyZF9qYXIpCi1lbmRpZiAjICFVU0VfUjgKK2VuZGlmICMgIUxPQ0FMX1VTRV9SOAogCiBlbHNlICAjIExPQ0FMX1BST0dVQVJEX0VOQUJMRUQgbm90IGRlZmluZWQKIHByb2d1YXJkX2ZsYWdfZmlsZXMgOj0KQEAgLTczNCwxOSArNzAwLDEwIEBACiAKIGlmbmVxICgkKExPQ0FMX0lTX1NUQVRJQ19KQVZBX0xJQlJBUlkpLHRydWUpCiAkKGJ1aWx0X2RleF9pbnRlcm1lZGlhdGUpOiBQUklWQVRFX0RYX0ZMQUdTIDo9ICQoTE9DQUxfRFhfRkxBR1MpCi0jIElmIHlvdSBpbnN0cnVtZW50IGNsYXNzIGZpbGVzIHRoYXQgaGF2ZSBsb2NhbCB2YXJpYWJsZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpbgotIyB0aGVtIGVtbWEgZG9lcyBub3QgY29ycmVjdGx5IG1haW50YWluIHRoZSBsb2NhbCB2YXJpYWJsZSB0YWJsZS4KLSMgVGhpcyB3aWxsIGNhdXNlIGFuIGVycm9yIHdoZW4geW91IHRyeSB0byBjb252ZXJ0IHRoZSBjbGFzcyBmaWxlcyBmb3IgQW5kcm9pZC4KLSMgVGhlIHdvcmthcm91bmQgaGVyZSBpcyB0byBidWlsZCBkaWZmZXJlbnQgZGV4IGZpbGUgaGVyZSBiYXNlZCBvbiBlbW1hIHN3aXRjaAotIyB0aGVuIGxhdGVyIGNvcHkgaW50byBjbGFzc2VzLmRleC4gV2hlbiBlbW1hIGlzIG9uLCBkeCBpcyBydW4gd2l0aCAtLW5vLWxvY2FscwotIyBvcHRpb24gdG8gcmVtb3ZlIGxvY2FsIHZhcmlhYmxlIGluZm9ybWF0aW9uCi1pZmVxICgkKExPQ0FMX0VNTUFfSU5TVFJVTUVOVCksdHJ1ZSkKLSQoYnVpbHRfZGV4X2ludGVybWVkaWF0ZSk6IFBSSVZBVEVfRFhfRkxBR1MgKz0gLS1uby1sb2NhbHMKLWVuZGlmCiAKIG15X3I4IDo9CiBpZmRlZiBMT0NBTF9QUk9HVUFSRF9FTkFCTEVECi1pZmVxICgkKFVTRV9SOCksdHJ1ZSkKK2lmZXEgKCQoTE9DQUxfVVNFX1I4KSx0cnVlKQogIyBUaGVzZSBhcmUgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIHByb2d1YXJkZWQgamFyIHdoZW4gcnVubmluZwogIyBQcm9ndWFyZCArIGR4LiBUaGV5IGFyZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGRleCB3aGVuIHVzaW5nIFI4LCBhcwogIyBSOCBkb2VzIFByb2d1YXJkICsgZHgKQEAgLTc1NiwxNSArNzEzLDI2IEBACiAkKGJ1aWx0X2RleF9pbnRlcm1lZGlhdGUpOiBQUklWQVRFX1BST0dVQVJEX0ZMQUdTIDo9ICQobGVnYWN5X3Byb2d1YXJkX2ZsYWdzKSAkKGNvbW1vbl9wcm9ndWFyZF9mbGFncykgJChMT0NBTF9QUk9HVUFSRF9GTEFHUykKICQoYnVpbHRfZGV4X2ludGVybWVkaWF0ZSkgOiAkKGZ1bGxfY2xhc3Nlc19wcm9ndWFyZF9qYXIpICQoZXh0cmFfaW5wdXRfamFyKSAkKG15X3N1cHBvcnRfbGlicmFyeV9zZGtfcmFpc2UpICQoY29tbW9uX3Byb2d1YXJkX2ZsYWdfZmlsZXMpICQocHJvZ3VhcmRfZmxhZ19maWxlcykgJChsZWdhY3lfcHJvZ3VhcmRfbGliX2RlcHMpICQoUjhfQ09NUEFUX1BST0dVQVJEKQogCSQodHJhbnNmb3JtLWphci10by1kZXgtcjgpCi1lbmRpZiAjIFVTRV9SOAorZW5kaWYgIyBMT0NBTF9VU0VfUjgKIGVuZGlmICMgTE9DQUxfUFJPR1VBUkRfRU5BQkxFRAogCiBpZm5kZWYgbXlfcjgKLSQoYnVpbHRfZGV4X2ludGVybWVkaWF0ZSk6ICQoZnVsbF9jbGFzc2VzX3Byb2d1YXJkX2phcikgJChEWCkKKyQoYnVpbHRfZGV4X2ludGVybWVkaWF0ZSk6ICQoZnVsbF9jbGFzc2VzX3Byb2d1YXJkX2phcikgJChEWCkgJChaSVAyWklQKQoraWZuZXEgKCQoVVNFX0Q4X0RFU1VHQVIpLHRydWUpCiAJJCh0cmFuc2Zvcm0tY2xhc3Nlcy5qYXItdG8tZGV4KQorZWxzZQorCSQodHJhbnNmb3JtLWNsYXNzZXMtZDguamFyLXRvLWRleCkKK2VuZGlmCiBlbmRpZgogCi0kKGJ1aWx0X2RleCk6ICQoYnVpbHRfZGV4X2ludGVybWVkaWF0ZSkKK2lmbmVxICgkKGZpbHRlciAkKExPQ0FMX01PRFVMRSksJChQUk9EVUNUX0JPT1RfSkFSUykpLCkgIyBpc19ib290X2phcgorICAkKGV2YWwgJChjYWxsIGhpZGRlbmFwaS1jb3B5LWRleC1maWxlcywkKGJ1aWx0X2RleF9pbnRlcm1lZGlhdGUpLCQoYnVpbHRfZGV4X2hpZGRlbmFwaSkpKQorICBidWlsdF9kZXhfY29weV9mcm9tIDo9ICQoYnVpbHRfZGV4X2hpZGRlbmFwaSkKK2Vsc2UgIyAhaXNfYm9vdF9qYXIKKyAgYnVpbHRfZGV4X2NvcHlfZnJvbSA6PSAkKGJ1aWx0X2RleF9pbnRlcm1lZGlhdGUpCitlbmRpZiAjIGlzX2Jvb3RfamFyCisKKyQoYnVpbHRfZGV4KTogJChidWlsdF9kZXhfY29weV9mcm9tKQogCUBlY2hvIENvcHlpbmc6ICRACiAJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkKIAkkKGhpZGUpIHJtIC1mICQoZGlyICRAKS9jbGFzc2VzKi5kZXgKQEAgLTgwMCw5ICs3NjgsOSBAQAogCiBlbmRpZiAgIyBmdWxsX2NsYXNzZXNfamFyIGlzIGRlZmluZWQKIAotaWZuZXEgKCwkKGZpbHRlci1vdXQgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsICQoTE9DQUxfU0RLX1ZFUlNJT04pKSkKLSAgbXlfZGVmYXVsdF9hcHBfdGFyZ2V0X3NkayA6PSAkKExPQ0FMX1NES19WRVJTSU9OKQotICBteV9zZGtfdmVyc2lvbiA6PSAkKExPQ0FMX1NES19WRVJTSU9OKQoraWZuZXEgKCwkKGZpbHRlci1vdXQgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQgY29yZV9jdXJyZW50LCAkKExPQ0FMX1NES19WRVJTSU9OKSkpCisgIG15X2RlZmF1bHRfYXBwX3RhcmdldF9zZGsgOj0gJChjYWxsIGdldC1udW1lcmljLXNkay12ZXJzaW9uLCQoTE9DQUxfU0RLX1ZFUlNJT04pKQorICBteV9zZGtfdmVyc2lvbiA6PSAkKGNhbGwgZ2V0LW51bWVyaWMtc2RrLXZlcnNpb24sJChMT0NBTF9TREtfVkVSU0lPTikpCiBlbHNlCiAgIG15X2RlZmF1bHRfYXBwX3RhcmdldF9zZGsgOj0gJChERUZBVUxUX0FQUF9UQVJHRVRfU0RLKQogICBteV9zZGtfdmVyc2lvbiA6PSAkKFBMQVRGT1JNX1NES19WRVJTSU9OKQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhX2NvbW1vbi5tayBiL2NvcmUvamF2YV9jb21tb24ubWsKaW5kZXggNGRkMGRlNi4uZGVhMDQzNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhX2NvbW1vbi5taworKysgYi9jb3JlL2phdmFfY29tbW9uLm1rCkBAIC0xLDUgKzEsMTEgQEAKICMgQ29tbW9uIHRvIGhvc3QgYW5kIHRhcmdldCBKYXZhIG1vZHVsZXMuCiAKK215X3Nvb25nX3Byb2JsZW1zIDo9CisKK2lmbmVxICgkKGZpbHRlciAuLi8lLCQoTE9DQUxfU1JDX0ZJTEVTKSksKQorbXlfc29vbmdfcHJvYmxlbXMgKz0gZG90ZG90X3NyY3MKK2VuZGlmCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBKYXZhIHZlcnNpb24KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0zMCw4ICszNiwzMiBAQAogTE9DQUxfSkFWQUNGTEFHUyArPSAtc291cmNlICQoTE9DQUxfSkFWQV9MQU5HVUFHRV9WRVJTSU9OKSAtdGFyZ2V0ICQoTE9DQUxfSkFWQV9MQU5HVUFHRV9WRVJTSU9OKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE9wZW5KREsgdmVyc2lvbnMgdXAgdG8gOCBzaGlwcGVkIHdpdGggYm9vdHN0cmFwIGFuZCB0b29scyBqYXJzCisjIChydC5qYXIsIGpjZS5qYXIsIHRvb2xzLmphciBldGMuKS4gVGhlc2UgYXJlIG5vIGxvbmdlciBwYXJ0IG9mCisjIE9wZW5KREsgOSwgYnV0IHdlIHN0aWxsIG1ha2UgdGhlbSBhdmFpbGFibGUgZm9yIGhvc3QgdG9vbHMgdGhhdAorIyBhcmUgdGFyZ2V0aW5nIG9sZGVyIHZlcnNpb25zLgorVVNFX0hPU1RfQk9PVFNUUkFQX0pBUlMgOj0gdHJ1ZQoraWZlcSAoLCQoZmlsdGVyICQoTE9DQUxfSkFWQV9MQU5HVUFHRV9WRVJTSU9OKSwgMS42IDEuNyAxLjgpKQorVVNFX0hPU1RfQk9PVFNUUkFQX0pBUlMgOj0gZmFsc2UKK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRHJvcCBIT1NUX0pES19UT09MU19KQVIgZnJvbSBjbGFzc3BhdGggd2hlbiB0YXJnZXRpbmcgdmVyc2lvbnMgPiA5ICh3aGljaCBkb24ndCBoYXZlIGl0KS4KKyMgVE9ETzogUmVtb3ZlIEhPU1RfSkRLX1RPT0xTX0pBUiBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gaXQgb25jZSBob3N0CisjIGJvb3RzdHJhcCBqYXJzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIChpZS4gd2hlbiBVU0VfSE9TVF9CT09UU1RSQVBfSkFSUworIyBpcyBhbHdheXMgZmFsc2UpLiBodHRwOi8vYi8zODQxODIyMAoraWZuZXEgKCQoVVNFX0hPU1RfQk9PVFNUUkFQX0pBUlMpLHRydWUpCitMT0NBTF9DTEFTU1BBVEggOj0gJChmaWx0ZXItb3V0ICQoSE9TVF9KREtfVE9PTFNfSkFSKSwkKExPQ0FMX0NMQVNTUEFUSCkpCitlbmRpZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgLnByb3RvIGZpbGVzOiBDb21waWxlIHByb3RvIGZpbGVzIHRvIC5qYXZhCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZlcSAoJChzdHJpcCAkKExPQ0FMX1BST1RPQ19PUFRJTUlaRV9UWVBFKSksKQorICBMT0NBTF9QUk9UT0NfT1BUSU1JWkVfVFlQRSA6PSBsaXRlCitlbmRpZgogcHJvdG9fc291cmNlcyA6PSAkKGZpbHRlciAlLnByb3RvLCQoTE9DQUxfU1JDX0ZJTEVTKSkKICMgQmVjYXVzZSBuYW1lcyBvZiB0aGUgLmphdmEgZmlsZXMgY29tcGlsZWQgZnJvbSAucHJvdG8gZmlsZXMgYXJlIHVua25vd24gdW50aWwgdGhlCiAjIC5wcm90byBmaWxlcyBhcmUgY29tcGlsZWQsIHdlIHVzZSBhIHRpbWVzdGFtcCBmaWxlIGFzIGRlcGVkZW5jeS4KQEAgLTYxLDcgKzkxLDcgQEAKICAgZW5kaWYKIGVuZGlmCiAkKHByb3RvX2phdmFfc291cmNlc19maWxlX3N0YW1wKTogUFJJVkFURV9QUk9UT0NfRkxBR1MgOj0gJChMT0NBTF9QUk9UT0NfRkxBR1MpCi0kKHByb3RvX2phdmFfc291cmNlc19maWxlX3N0YW1wKTogUFJJVkFURV9QUk9UT19KQVZBX09VVFBVVF9QQVJBTVMgOj0gJChMT0NBTF9QUk9UT19KQVZBX09VVFBVVF9QQVJBTVMpCiskKHByb3RvX2phdmFfc291cmNlc19maWxlX3N0YW1wKTogUFJJVkFURV9QUk9UT19KQVZBX09VVFBVVF9QQVJBTVMgOj0gJChpZiAkKGZpbHRlciBsaXRlLCQoTE9DQUxfUFJPVE9DX09QVElNSVpFX1RZUEUpKSxsaXRlJChpZiAkKExPQ0FMX1BST1RPX0pBVkFfT1VUUFVUX1BBUkFNUyksOiwpLCkkKExPQ0FMX1BST1RPX0pBVkFfT1VUUFVUX1BBUkFNUykKICQocHJvdG9famF2YV9zb3VyY2VzX2ZpbGVfc3RhbXApIDogJChwcm90b19zb3VyY2VzX2Z1bGxwYXRoKSAkKFBST1RPQykKIAkkKGNhbGwgdHJhbnNmb3JtLXByb3RvLXRvLWphdmEpCiAKQEAgLTE0Nyw3ICsxNzcsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgV2FybiBpZiB0aGVyZSBpcyB1bnJlY29nbml6ZWQgZmlsZSBpbiBMT0NBTF9TUkNfRklMRVMuCiBteV91bmtub3duX3NyY19maWxlcyA6PSAkKGZpbHRlci1vdXQgXAotICAlLmphdmEgJS5haWRsICUucHJvdG8gJS5sb2d0YWdzICUuZnMgJS5ycywgXAorICAlLmphdmEgJS5haWRsICUucHJvdG8gJS5sb2d0YWdzICUucnMsIFwKICAgJChMT0NBTF9TUkNfRklMRVMpICQoTE9DQUxfSU5URVJNRURJQVRFX1NPVVJDRVMpICQoTE9DQUxfR0VORVJBVEVEX1NPVVJDRVMpKQogaWZuZXEgKCQobXlfdW5rbm93bl9zcmNfZmlsZXMpLCkKICQod2FybmluZyAkKExPQ0FMX01PRFVMRV9NQUtFRklMRSk6ICQoTE9DQUxfTU9EVUxFKTogVW51c2VkIHNvdXJjZSBmaWxlczogJChteV91bmtub3duX3NyY19maWxlcykpCkBAIC0xNTgsNyArMTg4LDcgQEAKICMgTE9DQUxfU09VUkNFX0ZJTEVTX0FMTF9HRU5FUkFURUQgaXMgc2V0IG9ubHkgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBoYXZlIHN0YXRpYyBzb3VyY2UgZmlsZXMsCiAjIGJ1dCBnZW5lcmF0ZWQgc291cmNlIGZpbGVzIGluIGl0cyBMT0NBTF9JTlRFUk1FRElBVEVfU09VUkNFX0RJUi4KICMgWW91IGhhdmUgdG8gc2V0IHVwIHRoZSBkZXBlbmRlbmN5IGluIHNvbWUgb3RoZXIgd2F5LgotbmVlZF9jb21waWxlX2phdmEgOj0gJChzdHJpcCAkKGFsbF9qYXZhX3NvdXJjZXMpJChhbGxfcmVzX2Fzc2V0cykkKGphdmFfcmVzb3VyY2Vfc291cmNlcykpJChMT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMpJChmaWx0ZXIgdHJ1ZSwkKExPQ0FMX1NPVVJDRV9GSUxFU19BTExfR0VORVJBVEVEKSkKK25lZWRfY29tcGlsZV9qYXZhIDo9ICQoc3RyaXAgJChhbGxfamF2YV9zb3VyY2VzKSQoTE9DQUxfU1JDSkFSUykkKGFsbF9yZXNfYXNzZXRzKSQoamF2YV9yZXNvdXJjZV9zb3VyY2VzKSkkKExPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUykkKGZpbHRlciB0cnVlLCQoTE9DQUxfU09VUkNFX0ZJTEVTX0FMTF9HRU5FUkFURUQpKQogaWZkZWYgbmVlZF9jb21waWxlX2phdmEKIAogYW5ub3RhdGlvbl9wcm9jZXNzb3JfZmxhZ3MgOj0KQEAgLTIyOCw5ICsyNTgsMTUgQEAKICAgICAgIGZ1bGxfamF2YV9ib290Y2xhc3NwYXRoX2xpYnMgOj0gJChjYWxsIGphdmEtbGliLWhlYWRlci1maWxlcyxhbmRyb2lkX3N5c3RlbV9zdHVic19jdXJyZW50KQogICAgIGVsc2UgaWZlcSAoJChMT0NBTF9TREtfVkVSU0lPTikkKFRBUkdFVF9CVUlMRF9BUFBTKSx0ZXN0X2N1cnJlbnQpCiAgICAgICBmdWxsX2phdmFfYm9vdGNsYXNzcGF0aF9saWJzIDo9ICQoY2FsbCBqYXZhLWxpYi1oZWFkZXItZmlsZXMsYW5kcm9pZF90ZXN0X3N0dWJzX2N1cnJlbnQpCisgICAgZWxzZSBpZmVxICgkKExPQ0FMX1NES19WRVJTSU9OKSQoVEFSR0VUX0JVSUxEX0FQUFMpLGNvcmVfY3VycmVudCkKKyAgICAgIGZ1bGxfamF2YV9ib290Y2xhc3NwYXRoX2xpYnMgOj0gJChjYWxsIGphdmEtbGliLWhlYWRlci1maWxlcyxjb3JlLmN1cnJlbnQuc3R1YnMpCiAgICAgZWxzZQotICAgICAgZnVsbF9qYXZhX2Jvb3RjbGFzc3BhdGhfbGlicyA6PSAkKGNhbGwgamF2YS1saWItaGVhZGVyLWZpbGVzLHNka192JChMT0NBTF9TREtfVkVSU0lPTikpCi0gICAgZW5kaWYgIyBjdXJyZW50LCBzeXN0ZW1fY3VycmVudCwgb3IgdGVzdF9jdXJyZW50CisgICAgICAjIGNvcmVfPHZlcj4gaXMgc3Vic2V0IG9mIDx2ZXI+LiBJbnN0ZWFkIG9mIGRlZmluaW5nIGEgcHJlYnVpbHQgbGliIGZvciBjb3JlXzx2ZXI+LAorICAgICAgIyB1c2UgdGhlIHN0dWIgZm9yIDx2ZXI+IHdoZW4gYnVpbGRpbmcgZm9yIGFwcHMuCisgICAgICBfdmVyc2lvbiA6PSAkKHBhdHN1YnN0IGNvcmVfJSwlLCQoTE9DQUxfU0RLX1ZFUlNJT04pKQorICAgICAgZnVsbF9qYXZhX2Jvb3RjbGFzc3BhdGhfbGlicyA6PSAkKGNhbGwgamF2YS1saWItaGVhZGVyLWZpbGVzLHNka192JChfdmVyc2lvbikpCisgICAgICBfdmVyc2lvbiA6PQorICAgIGVuZGlmICMgY3VycmVudCwgc3lzdGVtX2N1cnJlbnQsIHN5c3RlbV8ke1ZFUn0sIHRlc3RfY3VycmVudCBvciBjb3JlX2N1cnJlbnQKICAgZW5kaWYgIyBMT0NBTF9TREtfVkVSU0lPTgogCiAgIGlmbmVxICgkKExPQ0FMX05PX1NUQU5EQVJEX0xJQlJBUklFUyksdHJ1ZSkKQEAgLTI3Myw3ICszMDksMjMgQEAKICAgICBmdWxsX3NoYXJlZF9qYXZhX2xpYnMgOj0gJChjYWxsIGphdmEtbGliLWZpbGVzLCQoTE9DQUxfSkFWQV9MSUJSQVJJRVMpLHRydWUpCiAgICAgZnVsbF9zaGFyZWRfamF2YV9oZWFkZXJfbGlicyA6PSAkKGNhbGwgamF2YS1saWItaGVhZGVyLWZpbGVzLCQoTE9DQUxfSkFWQV9MSUJSQVJJRVMpLHRydWUpCiAgIGVsc2UgIyAhVVNFX0NPUkVfTElCX0JPT1RDTEFTU1BBVEgKLQorICAgICMgR2l2ZSBob3N0LXNpZGUgdG9vbHMgYSB2ZXJzaW9uIG9mIE9wZW5KREsncyBzdGFuZGFyZCBsaWJyYXJpZXMKKyAgICAjIGNsb3NlIHRvIHdoYXQgdGhleSdyZSB0YXJnZXRpbmcuIEFzIG9mIERlYyAyMDE3LCBBT1NQIGlzIG9ubHkKKyAgICAjIGJ1bmRsaW5nIE9wZW5KREsgOCBhbmQgOSwgc28gbm90aGluZyA8IDggaXMgYXZhaWxhYmxlLgorICAgICMKKyAgICAjIFdoZW4gYnVpbGRpbmcgd2l0aCBPcGVuSkRLIDgsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGhhdmUgbm8KKyAgICAjIGVmZmVjdCBzaW5jZSB0aG9zZSBqYXJzIHdvdWxkIGJlIGF2YWlsYWJsZSBieSBkZWZhdWx0LgorICAgICMKKyAgICAjIFdoZW4gYnVpbGRpbmcgd2l0aCBPcGVuSkRLIDkgYnV0IHRhcmdldGluZyBhIHZlcnNpb24gPCAxLjgsCisgICAgIyBwdXR0aW5nIHRoZW0gb24gdGhlIGJvb3RjbGFzc3BhdGggbWVhbnMgdGhhdDoKKyAgICAjIGEpIGNvZGUgY2FuJ3QgKGFjY2lkZW50YWxseSkgcmVmZXIgdG8gT3BlbkpESyA5IHNwZWNpZmljIEFQSXMKKyAgICAjIGIpIHJlZmVyZW5jZXMgdG8gZXhpc3RpbmcgQVBJcyBhcmUgbm90IHJlaW50ZXJwcmV0ZWQgaW4gYW4KKyAgICAjICAgIE9wZW5KREsgOS1zcGVjaWZpYyB3YXksIGVnLiBjYWxscyB0byBzdWJjbGFzc2VzIG9mCisgICAgIyAgICBqYXZhLm5pby5CdWZmZXIgYXMgaW4gaHR0cDovL2IvNzA4NjI1ODMKKyAgICBpZmVxICgkKFVTRV9IT1NUX0JPT1RTVFJBUF9KQVJTKSx0cnVlKQorICAgICAgZnVsbF9qYXZhX2Jvb3RjbGFzc3BhdGhfbGlicyArPSAkKEFORFJPSURfSkFWQThfSE9NRSkvanJlL2xpYi9qY2UuamFyCisgICAgICBmdWxsX2phdmFfYm9vdGNsYXNzcGF0aF9saWJzICs9ICQoQU5EUk9JRF9KQVZBOF9IT01FKS9qcmUvbGliL3J0LmphcgorICAgIGVuZGlmCiAgICAgZnVsbF9zaGFyZWRfamF2YV9saWJzIDo9ICQoYWRkcHJlZml4ICQoSE9TVF9PVVRfSkFWQV9MSUJSQVJJRVMpLyxcCiAgICAgICAkKGFkZHN1ZmZpeCAkKENPTU1PTl9KQVZBX1BBQ0tBR0VfU1VGRklYKSwkKExPQ0FMX0pBVkFfTElCUkFSSUVTKSkpCiAgICAgZnVsbF9zaGFyZWRfamF2YV9oZWFkZXJfbGlicyA6PSAkKGZ1bGxfc2hhcmVkX2phdmFfbGlicykKQEAgLTMwNCw3ICszNTYsMTAgQEAKIAogJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfQk9PVENMQVNTUEFUSCA6PSAkKGZ1bGxfamF2YV9ib290Y2xhc3NwYXRoX2xpYnMpCiAkKExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTKTogUFJJVkFURV9FTVBUWV9CT09UQ0xBU1NQQVRIIDo9ICQoZW1wdHlfYm9vdGNsYXNzcGF0aCkKLSQoTE9DQUxfSU5URVJNRURJQVRFX1RBUkdFVFMpOiBQUklWQVRFX1NZU1RFTV9NT0RVTEVTIDo9ICQobXlfc3lzdGVtX21vZHVsZXNfZGlyKQorJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfU1lTVEVNX01PRFVMRVMgOj0gJChteV9zeXN0ZW1fbW9kdWxlcykKKyQoTE9DQUxfSU5URVJNRURJQVRFX1RBUkdFVFMpOiBQUklWQVRFX1NZU1RFTV9NT0RVTEVTX0RJUiA6PSAkKG15X3N5c3RlbV9tb2R1bGVzX2RpcikKKyQoTE9DQUxfSU5URVJNRURJQVRFX1RBUkdFVFMpOiBQUklWQVRFX1NZU1RFTV9NT0RVTEVTX0xJQlMgOj0gJChjYWxsIGphdmEtbGliLWZpbGVzLCQoU09PTkdfU1lTVEVNX01PRFVMRVNfTElCU18kKG15X3N5c3RlbV9tb2R1bGVzKSkpCiskKExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTKTogUFJJVkFURV9QQVRDSF9NT0RVTEUgOj0gJChMT0NBTF9QQVRDSF9NT0RVTEUpCiAKIGlmbmRlZiBMT0NBTF9JU19IT1NUX01PRFVMRQogIyBUaGlzIGlzIHNldCBieSBwYWNrYWdlcyB0aGF0IGFyZSBsaW5raW5nIHRvIG90aGVyIHBhY2thZ2VzIHRoYXQgZXhwb3J0CkBAIC0zNTYsMzUgKzQxMSw2IEBACiBlbmRpZgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1pZm5kZWYgTE9DQUxfSVNfSE9TVF9NT0RVTEUKLSMjIEFBUFQgRmxhZ3MKLSMgYWFwdCBkb2Vzbid0IGFjY2VwdCBtdWx0aXBsZSAtLWV4dHJhLXBhY2thZ2VzIGZsYWdzLgotIyBXZSBoYXZlIHRvIGNvbGxhcHNlIHRoZW0gaW50byBhIHNpbmdsZSAtLWV4dHJhLXBhY2thZ2VzIGZsYWcgaGVyZS4KLUxPQ0FMX0FBUFRfRkxBR1MgOj0gJChzdHJpcCAkKExPQ0FMX0FBUFRfRkxBR1MpKQotaWZkZWYgTE9DQUxfQUFQVF9GTEFHUwotaWZlcSAoJChmaWx0ZXIgMCAxLCQod29yZHMgJChmaWx0ZXIgLS1leHRyYS1wYWNrYWdlcywkKExPQ0FMX0FBUFRfRkxBR1MpKSkpLCkKLWFhcHRfZmxhZ3MgOj0gJChzdWJzdCAtLWV4dHJhLXBhY2thZ2VzJChzcGFjZSksLS1leHRyYS1wYWNrYWdlc0AsJChMT0NBTF9BQVBUX0ZMQUdTKSkKLWFhcHRfZmxhZ3NfZXh0cmFfcGFja2FnZXMgOj0gJChwYXRzdWJzdCAtLWV4dHJhLXBhY2thZ2VzQCUsJSwkKGZpbHRlciAtLWV4dHJhLXBhY2thZ2VzQCUsJChhYXB0X2ZsYWdzKSkpCi1hYXB0X2ZsYWdzX2V4dHJhX3BhY2thZ2VzIDo9ICQoc29ydCAkKHN1YnN0IDosJChzcGFjZSksJChhYXB0X2ZsYWdzX2V4dHJhX3BhY2thZ2VzKSkpCi1MT0NBTF9BQVBUX0ZMQUdTIDo9ICQoZmlsdGVyLW91dCAtLWV4dHJhLXBhY2thZ2VzQCUsJChhYXB0X2ZsYWdzKSkgXAotICAgIC0tZXh0cmEtcGFja2FnZXMgJChzdWJzdCAkKHNwYWNlKSw6LCQoYWFwdF9mbGFnc19leHRyYV9wYWNrYWdlcykpCi1hYXB0X2ZsYWdzX2V4dHJhX3BhY2thZ2VzIDo9Ci1hYXB0X2ZsYWdzIDo9Ci1lbmRpZgotZW5kaWYKLQotJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfQUFQVF9GTEFHUyA6PSAkKExPQ0FMX0FBUFRfRkxBR1MpICQoUFJPRFVDVF9BQVBUX0ZMQUdTKQotJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfVEFSR0VUX0FBUFRfQ0hBUkFDVEVSSVNUSUNTIDo9ICQoVEFSR0VUX0FBUFRfQ0hBUkFDVEVSSVNUSUNTKQotJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfTUFOSUZFU1RfUEFDS0FHRV9OQU1FIDo9ICQoTE9DQUxfTUFOSUZFU1RfUEFDS0FHRV9OQU1FKQotJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfTUFOSUZFU1RfSU5TVFJVTUVOVEFUSU9OX0ZPUiA6PSAkKExPQ0FMX01BTklGRVNUX0lOU1RSVU1FTlRBVElPTl9GT1IpCi0KLWlmZGVmIGFpZGxfc291cmNlcwotQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5BSURMX0ZJTEVTIDo9ICQoYWlkbF9zb3VyY2VzKQotZW5kaWYKLWlmZGVmIHJlbmRlcnNjcmlwdF9zb3VyY2VzCi1BTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLlJTX0ZJTEVTIDo9ICQocmVuZGVyc2NyaXB0X3NvdXJjZXNfZnVsbHBhdGgpCi1lbmRpZgotZW5kaWYgICMgIUxPQ0FMX0lTX0hPU1RfTU9EVUxFCiAKIGZ1bGxfamF2YV9saWJzIDo9ICQoZnVsbF9zaGFyZWRfamF2YV9saWJzKSAkKGZ1bGxfc3RhdGljX2phdmFfbGlicykgJChMT0NBTF9DTEFTU1BBVEgpCiBmdWxsX2phdmFfaGVhZGVyX2xpYnMgOj0gJChmdWxsX3NoYXJlZF9qYXZhX2hlYWRlcl9saWJzKSAkKGZ1bGxfc3RhdGljX2phdmFfaGVhZGVyX2xpYnMpCkBAIC00MDMsMTUgKzQyOSwyMyBAQAogaWZlcSAoJChMT0NBTF9TREtfVkVSU0lPTiksc3lzdGVtX2N1cnJlbnQpCiBteV9saW5rX3R5cGUgOj0gamF2YTpzeXN0ZW0KIG15X3dhcm5fdHlwZXMgOj0gamF2YTpwbGF0Zm9ybQotbXlfYWxsb3dlZF90eXBlcyA6PSBqYXZhOnNkayBqYXZhOnN5c3RlbQorbXlfYWxsb3dlZF90eXBlcyA6PSBqYXZhOnNkayBqYXZhOnN5c3RlbSBqYXZhOmNvcmUKK2Vsc2UgaWZuZXEgKCwkKGNhbGwgaGFzLXN5c3RlbS1zZGstdmVyc2lvbiwkKExPQ0FMX1NES19WRVJTSU9OKSkpCitteV9saW5rX3R5cGUgOj0gamF2YTpzeXN0ZW0KK215X3dhcm5fdHlwZXMgOj0gamF2YTpwbGF0Zm9ybQorbXlfYWxsb3dlZF90eXBlcyA6PSBqYXZhOnNkayBqYXZhOnN5c3RlbSBqYXZhOmNvcmUKK2Vsc2UgaWZlcSAoJChMT0NBTF9TREtfVkVSU0lPTiksY29yZV9jdXJyZW50KQorbXlfbGlua190eXBlIDo9IGphdmE6Y29yZQorbXlfd2Fybl90eXBlcyA6PQorbXlfYWxsb3dlZF90eXBlcyA6PSBqYXZhOmNvcmUKIGVsc2UgaWZuZXEgKCQoTE9DQUxfU0RLX1ZFUlNJT04pLCkKIG15X2xpbmtfdHlwZSA6PSBqYXZhOnNkawogbXlfd2Fybl90eXBlcyA6PSBqYXZhOnN5c3RlbSBqYXZhOnBsYXRmb3JtCi1teV9hbGxvd2VkX3R5cGVzIDo9IGphdmE6c2RrCitteV9hbGxvd2VkX3R5cGVzIDo9IGphdmE6c2RrIGphdmE6Y29yZQogZWxzZQogbXlfbGlua190eXBlIDo9IGphdmE6cGxhdGZvcm0KIG15X3dhcm5fdHlwZXMgOj0KLW15X2FsbG93ZWRfdHlwZXMgOj0gamF2YTpzZGsgamF2YTpzeXN0ZW0gamF2YTpwbGF0Zm9ybQorbXlfYWxsb3dlZF90eXBlcyA6PSBqYXZhOnNkayBqYXZhOnN5c3RlbSBqYXZhOnBsYXRmb3JtIGphdmE6Y29yZQogZW5kaWYKIAogaWZkZWYgTE9DQUxfQUFQVDJfT05MWQpAQCAtNDI4LDMgKzQ2MiwxNyBAQAogbXlfY29tbW9uIDo9IENPTU1PTgogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvbGlua190eXBlLm1rCiBlbmRpZiAgIyAhTE9DQUxfSVNfSE9TVF9NT0RVTEUKKworaWZuZXEgKCQoTE9DQUxfTU9EVUxFX01BS0VGSUxFKSwkKFNPT05HX0FORFJPSURfTUspKQorCitTT09OR19DT05WLiQoTE9DQUxfTU9EVUxFKS5QUk9CTEVNUyA6PSBcCisgICAgJChTT09OR19DT05WLiQoTE9DQUxfTU9EVUxFKS5QUk9CTEVNUykgJChteV9zb29uZ19wcm9ibGVtcykKK1NPT05HX0NPTlYuJChMT0NBTF9NT0RVTEUpLkRFUFMgOj0gXAorICAgICQoU09PTkdfQ09OVi4kKExPQ0FMX01PRFVMRSkuREVQUykgXAorICAgICQoTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTKSBcCisgICAgJChMT0NBTF9KQVZBX0xJQlJBUklFUykgXAorICAgICQoTE9DQUxfSk5JX1NIQVJFRF9MSUJSQVJJRVMpCitTT09OR19DT05WLiQoTE9DQUxfTU9EVUxFKS5UWVBFIDo9IGphdmEKK1NPT05HX0NPTlYgOj0gJChTT09OR19DT05WKSAkKExPQ0FMX01PRFVMRSkKKworZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvamF2YV9saWJyYXJ5Lm1rIGIvY29yZS9qYXZhX2xpYnJhcnkubWsKaW5kZXggZDdjMDhjYy4uMWI5MTRmNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhX2xpYnJhcnkubWsKKysrIGIvY29yZS9qYXZhX2xpYnJhcnkubWsKQEAgLTMxLDYgKzMxLDcgQEAKICMgamF2YSBsaWJyYXJpZXMgcHJvZHVjZSBqYXZhbGliLmphciwgc28gd2Ugd2lsbCBjb3B5IGNsYXNzZXMuamFyIHRoZXJlIHRvby4KIGludGVybWVkaWF0ZXMuQ09NTU9OIDo9ICQoY2FsbCBsb2NhbC1pbnRlcm1lZGlhdGVzLWRpcixDT01NT04pCiBjb21tb25famF2YWxpYi5qYXIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvamF2YWxpYi5qYXIKK2RleF9wcmVvcHRfcHJvZmlsZV9zcmNfZmlsZSA6PSAkKGNvbW1vbl9qYXZhbGliLmphcikKIExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTICs9ICQoY29tbW9uX2phdmFsaWIuamFyKQogCiBpZmVxICgkKExPQ0FMX1BST0dVQVJEX0VOQUJMRUQpLGRpc2FibGVkKQpAQCAtNDEsNiArNDIsOCBAQAogaWZlcSAodHJ1ZSwkKExPQ0FMX0VNTUFfSU5TVFJVTUVOVCkpCiBpZmVxICh0cnVlLCQoRU1NQV9JTlNUUlVNRU5UX1NUQVRJQykpCiBMT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgKz0gamFjb2NvYWdlbnQKKyMgRXhjbHVkZSBqYWNvY28gY2xhc3NlcyBmcm9tIHByb2d1YXJkCitMT0NBTF9QUk9HVUFSRF9GTEFHUyArPSAtaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvcHJvZ3VhcmQuamFjb2NvLmZsYWdzCiBlbmRpZiAjIExPQ0FMX0VNTUFfSU5TVFJVTUVOVAogZW5kaWYgIyBFTU1BX0lOU1RSVU1FTlRfU1RBVElDCiBlbHNlCkBAIC02OSwxMCArNzIsMTAgQEAKIAkkKGNhbGwgYWRkLWRleC10by1wYWNrYWdlLWFyZywkQC50bXApCiAJJChoaWRlKSAkKFpJUFRJTUUpICRALnRtcAogCSQoY2FsbCBjb21taXQtY2hhbmdlLWZvci10b2MsJEApCi1pZm5lcSAoLCQoZmlsdGVyICQoUFJPRFVDVF9MT0FERURfQllfUFJJVklMRUdFRF9NT0RVTEVTKSwgJChMT0NBTF9NT0RVTEUpKSkKK2lmZXEgKHRydWUsICQoTE9DQUxfVU5DT01QUkVTU19ERVgpKQogCSQodW5jb21wcmVzcy1kZXhzKQogCSQoYWxpZ24tcGFja2FnZSkKLWVuZGlmICAjIFBST0RVQ1RfTE9BREVEX0JZX1BSSVZJTEVHRURfTU9EVUxFUworZW5kaWYgICMgTE9DQUxfVU5DT01QUkVTU19ERVgKIAogLktBVElfUkVTVEFUOiAkKGNvbW1vbl9qYXZhbGliLmphcikKIApkaWZmIC0tZ2l0IGEvY29yZS9sb2NhbF9zeXN0ZW1zZGsubWsgYi9jb3JlL2xvY2FsX3N5c3RlbXNkay5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFiMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9sb2NhbF9zeXN0ZW1zZGsubWsKQEAgLTAsMCArMSw1NiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworaWZkZWYgQk9BUkRfU1lTVEVNU0RLX1ZFUlNJT05TCisgICMgQXBwcyBhbmQgamFycyBpbiB2ZW5kb3Igb3Igb2RtIHBhcnRpdGlvbiBhcmUgZm9yY2VkIHRvIGJ1aWxkIGFnYWluc3QgU3lzdGVtIFNESy4KKyAgX2lzX3ZlbmRvcl9hcHAgOj0KKyAgaWZuZXEgKCwkKGZpbHRlciB0cnVlLCQoTE9DQUxfVkVORE9SX01PRFVMRSkgJChMT0NBTF9PRE1fTU9EVUxFKSAkKExPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSkpKQorICAgICMgTm90ZTogbm8gbmVlZCB0byBjaGVjayBMT0NBTF9NT0RVTEVfUEFUSCogc2luY2UgTE9DQUxfW1ZFTkRPUnxPRE18T0VNXV9NT0RVTEUgaXMgYWxyZWFkeQorICAgICMgc2V0IGNvcnJlY3RseSBiZWZvcmUgdGhpcyBpcyBpbmNsdWRlZC4KKyAgICBfaXNfdmVuZG9yX2FwcCA6PSB0cnVlCisgIGVuZGlmCisgIGlmbmVxICgsJChmaWx0ZXIgSkFWQV9MSUJSQVJJRVMgQVBQUywkKExPQ0FMX01PRFVMRV9DTEFTUykpKQorICAgIGlmbmRlZiBMT0NBTF9TREtfVkVSU0lPTgorICAgICAgaWZlcSAoJChfaXNfdmVuZG9yX2FwcCksdHJ1ZSkKKyAgICAgICAgTE9DQUxfU0RLX1ZFUlNJT04gOj0gc3lzdGVtX2N1cnJlbnQKKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGlmCisKKyMgRW5zdXJlIHRoYXQgdGhlIHNlbGVjdGVkIFN5c3RlbSBTREsgdmVyc2lvbiBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB2ZXJzaW9ucy4KKyMgVGhlIHJhbmdlIG9mIHN1cHBvcnQgdmVyc2lvbnMgYmVjb21lcyBuYXJyb3dlciB3aGVuIEJPQVJEX1NZU1RFTVNES19WRVJTSU9OUworIyBpcyBzZXQsIHdoaWNoIGlzIGEgc3Vic2V0IG9mIFBMQVRGT1JNX1NZU1RFTVNES19WRVJTSU9OUy4KK2lmbmVxICgsJChjYWxsIGhhcy1zeXN0ZW0tc2RrLXZlcnNpb24sJChMT0NBTF9TREtfVkVSU0lPTikpKQorICBpZm5lcSAoJChfaXNfdmVuZG9yX2FwcCksdHJ1ZSkKKyAgICAjIGFwcHMgYnVuZGxlZCBpbiBzeXN0ZW0gcGFydGl0aW9uIGNhbiB1c2UgYWxsIHN5c3RlbSBzZGsgdmVyc2lvbnMgcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtCisgICAgX3N1cHBvcnRlZF9zeXN0ZW1zZGtfdmVyc2lvbnMgOj0gJChQTEFURk9STV9TWVNURU1TREtfVkVSU0lPTlMpCisgIGVsc2UgaWZkZWYgQk9BUkRfU1lTVEVNU0RLX1ZFUlNJT05TCisgICAgIyBXaGVuIEJPQVJEX1NZU1RFTVNES19WRVJTSU9OUyBpcyBzZXQsIHZlbmRvcnMgYXBwcyBhcmUgcmVzdHJpY3RlZCB0byB1c2UgdGhvc2UgdmVyc2lvbnMKKyAgICAjIHdoaWNoIGlzIGVxdWFsIHRvIG9yIHNtYWxsZXIgdGhhbiBQTEFURk9STV9TWVNURU1TREtfVkVSU0lPTlMKKyAgICBfc3VwcG9ydGVkX3N5c3RlbXNka192ZXJzaW9ucyA6PSAkKEJPQVJEX1NZU1RFTVNES19WRVJTSU9OUykKKyAgZWxzZQorICAgICMgSWYgbm90LCB2ZW5kb3IgYXBrcyBhcmUgdHJlYXRlZCBlcXVhbGx5IHRvIHN5c3RlbSBhcHBzCisgICAgX3N1cHBvcnRlZF9zeXN0ZW1zZGtfdmVyc2lvbnMgOj0gJChQTEFURk9STV9TWVNURU1TREtfVkVSU0lPTlMpCisgIGVuZGlmCisgIF9zeXN0ZW1fc2RrX3ZlcnNpb24gOj0gJChjYWxsIGdldC1udW1lcmljLXNkay12ZXJzaW9uLCQoTE9DQUxfU0RLX1ZFUlNJT04pKQorICBpZm5lcSAoJChfc3lzdGVtX3Nka192ZXJzaW9uKSwkKGZpbHRlciAkKF9zeXN0ZW1fc2RrX3ZlcnNpb24pLCQoX3N1cHBvcnRlZF9zeXN0ZW1zZGtfdmVyc2lvbnMpKSkKKyAgICAkKGNhbGwgcHJldHR5LWVycm9yLEluY29tcGF0aWJsZSBMT0NBTF9TREtfVkVSU0lPTiAnJChMT0NBTF9TREtfVkVSU0lPTiknLiBcCisgICAgICAgICAgIFN5c3RlbSBTREsgdmVyc2lvbiAnJChfc3lzdGVtX3Nka192ZXJzaW9uKScgaXMgbm90IHN1cHBvcnRlZC4gU3VwcG9ydGVkIHZlcnNpb25zIGFyZTogJChfc3VwcG9ydGVkX3N5c3RlbXNka192ZXJzaW9ucykpCisgIGVuZGlmCisgIF9zeXN0ZW1fc2RrX3ZlcnNpb24gOj0KKyAgX3N1cHBvcnRlZF9zeXN0ZW1zZGtfdmVyc2lvbnMgOj0KK2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL21haW4ubWsgYi9jb3JlL21haW4ubWsKaW5kZXggNmY3MzY2ZC4uZGE4ODYxMyAxMDA2NDQKLS0tIGEvY29yZS9tYWluLm1rCisrKyBiL2NvcmUvbWFpbi5tawpAQCAtNjAsMTQgKzYwLDI0IEBACiAjIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGNvbW1hbmQgbGluZSBldmVyeSB0aW1lLiAgQXZvaWRzIHJlYnVpbGRzCiAjIHdoZW4gdXNpbmcgbmluamEuCiAkKHNoZWxsIG1rZGlyIC1wICQoT1VUX0RJUikgJiYgXAotICAgIGVjaG8gLW4gJChCVUlMRF9OVU1CRVIpID4gJChPVVRfRElSKS9idWlsZF9udW1iZXIudHh0ICYmIFwKLSAgICBlY2hvIC1uICQoQlVJTERfREFURVRJTUUpID4gJChPVVRfRElSKS9idWlsZF9kYXRlLnR4dCkKKyAgICBlY2hvIC1uICQoQlVJTERfTlVNQkVSKSA+ICQoT1VUX0RJUikvYnVpbGRfbnVtYmVyLnR4dCkKK0JVSUxEX05VTUJFUl9GSUxFIDo9ICQoT1VUX0RJUikvYnVpbGRfbnVtYmVyLnR4dAorCiBpZmVxICgkKEhPU1RfT1MpLGRhcndpbikKIERBVEVfRlJPTV9GSUxFIDo9IGRhdGUgLXIgJChCVUlMRF9EQVRFVElNRV9GUk9NX0ZJTEUpCiBlbHNlCiBEQVRFX0ZST01fRklMRSA6PSBkYXRlIC1kIEAkKEJVSUxEX0RBVEVUSU1FX0ZST01fRklMRSkKIGVuZGlmCiAKKyMgUGljayBhIHJlYXNvbmFibGUgc3RyaW5nIHRvIHVzZSB0byBpZGVudGlmeSBmaWxlcy4KK2lmZXEgKCQoc3RyaXAgJChIQVNfQlVJTERfTlVNQkVSKSksZmFsc2UpCisgICMgQlVJTERfTlVNQkVSIGhhcyBhIHRpbWVzdGFtcCBpbiBpdCwgd2hpY2ggbWVhbnMgdGhhdAorICAjIGl0IHdpbGwgY2hhbmdlIGV2ZXJ5IHRpbWUuICBQaWNrIGEgc3RhYmxlIHZhbHVlLgorICBGSUxFX05BTUVfVEFHIDo9IGVuZy4kKFVTRVIpCitlbHNlCisgIEZJTEVfTkFNRV9UQUcgOj0gJChmaWxlIDwkKEJVSUxEX05VTUJFUl9GSUxFKSkKK2VuZGlmCisKICMgTWFrZSBhbiBlbXB0eSBkaXJlY3RvcnksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1ha2UgZW1wdHkgamFycwogRU1QVFlfRElSRUNUT1JZIDo9ICQoT1VUX0RJUikvZW1wdHkKICQoc2hlbGwgbWtkaXIgLXAgJChFTVBUWV9ESVJFQ1RPUlkpICYmIHJtIC1yZiAkKEVNUFRZX0RJUkVDVE9SWSkvKikKQEAgLTk3LDExICsxMDcsMjEgQEAKICMgKG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIGRlZmluaXRpb25zLm1ha2UpCiBJTlRFUk5BTF9NT0RJRklFUl9UQVJHRVRTIDo9IGFsbAogCi0jIEVNTUFfSU5TVFJVTUVOVF9TVEFUSUMgbWVyZ2VzIHRoZSBzdGF0aWMgZW1tYSBsaWJyYXJ5IHRvIGVhY2ggZW1tYS1lbmFibGVkIG1vZHVsZS4KKyMgRU1NQV9JTlNUUlVNRU5UX1NUQVRJQyBtZXJnZXMgdGhlIHN0YXRpYyBqYWNvY28gbGlicmFyeSB0byBlYWNoCisjIGphY29jby1lbmFibGVkIG1vZHVsZS4KIGlmZXEgKHRydWUsJChFTU1BX0lOU1RSVU1FTlRfU1RBVElDKSkKIEVNTUFfSU5TVFJVTUVOVCA6PSB0cnVlCiBlbmRpZgogCitpZmVxICh0cnVlLCQoRU1NQV9JTlNUUlVNRU5UKSkKKyMgQWRkaW5nIHRoZSBqYWNvY28gbGlicmFyeSBjYW4gY2F1c2UgdGhlIGluY2x1c2lvbiBvZgorIyBzb21lIHR5cGljYWxseSBiYW5uZWQgY2xhc3NlcworIyBTbyBpZiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBTS0lQX0JPT1RfSkFSU19DSEVDSywgZW5hYmxlIGl0IGhlcmUKK2lmbmRlZiBTS0lQX0JPT1RfSkFSU19DSEVDSworU0tJUF9CT09UX0pBUlNfQ0hFQ0sgOj0gdHJ1ZQorZW5kaWYKK2VuZGlmCisKICMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVmFsaWRhdGUgQURESVRJT05BTF9ERUZBVUxUX1BST1BFUlRJRVMuCkBAIC0xMTYsNiArMTM2LDggQEAKICQoZXJyb3IgQURESVRJT05BTF9CVUlMRF9QUk9QRVJUSUVTIG11c3Qgbm90IGJlIHNldCBiZWZvcmUgaGVyZTogJChBRERJVElPTkFMX0JVSUxEX1BST1BFUlRJRVMpKQogZW5kaWYKIAorQURESVRJT05BTF9CVUlMRF9QUk9QRVJUSUVTIDo9CisKICMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQWRkIHRoZSBwcm9kdWN0LWRlZmluZWQgcHJvcGVydGllcyB0byB0aGUgYnVpbGQgcHJvcGVydGllcy4KQEAgLTE3NSwxOSArMTk3LDM0IEBACiAKICMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5hYmxlIGR5bmFtaWMgbGlua2VyIGRldmVsb3BlciB3YXJuaW5ncyBmb3IgdXNlcmRlYnVnLCBlbmcKLSMgYW5kIG5vbi1SRUwgYnVpbGRzCisjIEVuYWJsZSBkeW5hbWljIGxpbmtlciBhbmQgaGlkZGVuIEFQSSBkZXZlbG9wZXIgd2FybmluZ3MgZm9yCisjIHVzZXJkZWJ1ZywgZW5nIGFuZCBub24tUkVMIGJ1aWxkcwogaWZuZXEgKCQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpLHVzZXIpCi0gIEFERElUSU9OQUxfQlVJTERfUFJPUEVSVElFUyArPSByby5iaW9uaWMubGQud2FybmluZz0xCisgIEFERElUSU9OQUxfQlVJTERfUFJPUEVSVElFUyArPSByby5iaW9uaWMubGQud2FybmluZz0xIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvLmFydC5oaWRkZW5hcGkud2FybmluZz0xCiBlbHNlCiAjIEVuYWJsZSBpdCBmb3IgdXNlciBidWlsZHMgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3QgZmluYWwuCiBpZm5lcSAoJChQTEFURk9STV9WRVJTSU9OX0NPREVOQU1FKSxSRUwpCi0gIEFERElUSU9OQUxfQlVJTERfUFJPUEVSVElFUyArPSByby5iaW9uaWMubGQud2FybmluZz0xCisgIEFERElUSU9OQUxfQlVJTERfUFJPUEVSVElFUyArPSByby5iaW9uaWMubGQud2FybmluZz0xIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvLmFydC5oaWRkZW5hcGkud2FybmluZz0xCiBlbmRpZgogZW5kaWYKIAogQURESVRJT05BTF9CVUlMRF9QUk9QRVJUSUVTICs9IHJvLnRyZWJsZS5lbmFibGVkPSR7UFJPRFVDVF9GVUxMX1RSRUJMRX0KIAorJChLQVRJX29ic29sZXRlX3ZhciBQUk9EVUNUX0ZVTExfVFJFQkxFLFwKKwlDb2RlIHNob3VsZCBiZSB3cml0dGVuIHRvIHdvcmsgcmVnYXJkbGVzcyBvZiBhIGRldmljZSBiZWluZyBUcmVibGUgb3IgXAorCXZhcmlhYmxlcyBsaWtlIFBST0RVQ1RfU0VQT0xJQ1lfU1BMSVQgc2hvdWxkIGJlIHVzZWQgdW50aWwgdGhhdCBpcyBcCisJcG9zc2libGUuKQorCisjIFNldHMgcm8uYWN0aW9uYWJsZV9jb21wYXRpYmxlX3Byb3BlcnR5LmVuYWJsZWQgdG8ga25vdyBvbiBydW50aW1lIHdoZXRoZXIgdGhlIHdoaXRlbGlzdAorIyBvZiBhY3Rpb25hYmxlIGNvbXBhdGlibGUgcHJvcGVydGllcyBpcyBlbmFibGVkIG9yIG5vdC4KK2lmZXEgKCQoUFJPRFVDVF9BQ1RJT05BQkxFX0NPTVBBVElCTEVfUFJPUEVSVFlfRElTQUJMRSksdHJ1ZSkKK0FERElUSU9OQUxfREVGQVVMVF9QUk9QRVJUSUVTICs9IHJvLmFjdGlvbmFibGVfY29tcGF0aWJsZV9wcm9wZXJ0eS5lbmFibGVkPWZhbHNlCitlbHNlCitBRERJVElPTkFMX0RFRkFVTFRfUFJPUEVSVElFUyArPSByby5hY3Rpb25hYmxlX2NvbXBhdGlibGVfcHJvcGVydHkuZW5hYmxlZD0ke1BST0RVQ1RfQ09NUEFUSUJMRV9QUk9QRVJUWX0KK2VuZGlmCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMjIwogIyMjIEluIHRoaXMgc2VjdGlvbiB3ZSBzZXQgdXAgdGhlIHRoaW5ncyB0aGF0IGFyZSBkaWZmZXJlbnQKQEAgLTMxMSw3ICszNDgsNyBAQAogCiAjIFNldHMgdGhlIGxvY2F0aW9uIHRoYXQgdGhlIHJ1bnRpbWUgZHVtcHMgc3RhY2sgdHJhY2VzIHRvIHdoZW4gc2lnbmFsbGVkCiAjIHdpdGggU0lHUVVJVC4gU3RhY2sgdHJhY2UgZHVtcGluZyBpcyB0dXJuZWQgb24gZm9yIGFsbCBhbmRyb2lkIGJ1aWxkcy4KLUFERElUSU9OQUxfQlVJTERfUFJPUEVSVElFUyArPSBkYWx2aWsudm0uc3RhY2stdHJhY2UtZmlsZT0vZGF0YS9hbnIvdHJhY2VzLnR4dAorQURESVRJT05BTF9CVUlMRF9QUk9QRVJUSUVTICs9IGRhbHZpay52bS5zdGFjay10cmFjZS1kaXI9L2RhdGEvYW5yCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIERlZmluZSBhIGZ1bmN0aW9uIHRoYXQsIGdpdmVuIGEgbGlzdCBvZiBtb2R1bGUgdGFncywgcmV0dXJucwpAQCAtNDEwLDEwICs0NDcsMTAgQEAKIAogJChmb3JlYWNoIG1rLCQoc3ViZGlyX21ha2VmaWxlcyksJChpbmZvIFskKGNhbGwgaW5jX2FuZF9wcmludCxzdWJkaXJfbWFrZWZpbGVzX2luYykvJChzdWJkaXJfbWFrZWZpbGVzX3RvdGFsKV0gaW5jbHVkaW5nICQobWspIC4uLikkKGV2YWwgaW5jbHVkZSAkKG1rKSkpCiAKLWlmZGVmIFBES19GVVNJT05fUExBVEZPUk1fWklQCitpZm5lcSAoLCQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApJChQREtfRlVTSU9OX1BMQVRGT1JNX0RJUikpCiAjIEJyaW5nIGluIHRoZSBQREsgcGxhdGZvcm0uemlwIG1vZHVsZXMuCiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9wZGtfZnVzaW9uX21vZHVsZXMubWsKLWVuZGlmICMgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAKK2VuZGlmICMgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAgfHwgUERLX0ZVU0lPTl9QTEFURk9STV9ESVIKIAogZHJvaWRfdGFyZ2V0cyA6IGJsdWVwcmludF90b29scwogCkBAIC01ODMsNiArNjIwLDMxIEBACiBlbmRlZgogJChjYWxsIGFkZC1hbGwtaG9zdC10by10YXJnZXQtcmVxdWlyZWQtbW9kdWxlcy1kZXBzKQogCisjIFNldHMgdXAgZGVwZW5kZW5jaWVzIHN1Y2ggdGhhdCB3aGVuZXZlciBhIHRhcmdldCBtb2R1bGUgaXMgaW5zdGFsbGVkLAorIyBhbnkgaG9zdCBtb2R1bGVzIGxpc3RlZCBpbiAkKEFMTF9NT0RVTEVTLiQobSkuSE9TVF9SRVFVSVJFRCkgd2lsbCBhbHNvIGJlIGluc3RhbGxlZAorZGVmaW5lIGFkZC1hbGwtdGFyZ2V0LXRvLWhvc3QtcmVxdWlyZWQtbW9kdWxlcy1kZXBzCiskKGZvcmVhY2ggbSwkKEFMTF9NT0RVTEVTKSwgXAorICAkKGV2YWwgcmVxX21vZHMgOj0gJChBTExfTU9EVUxFUy4kKG0pLkhPU1RfUkVRVUlSRUQpKVwKKyAgJChpZiAkKHJlcV9tb2RzKSwgXAorICAgICQoZXZhbCByZXFfZmlsZXMgOj0gKVwKKyAgICAkKGZvcmVhY2ggcmVxX21vZCwkKHJlcV9tb2RzKSwgXAorICAgICAgJChldmFsIHJlcV9maWxlIDo9ICQoZmlsdGVyICQoSE9TVF9PVVQpLyUsICQoY2FsbCBtb2R1bGUtaW5zdGFsbGVkLWZpbGVzLCQocmVxX21vZCkpKSkgXAorICAgICAgJChpZiAkKHN0cmlwICQocmVxX2ZpbGUpKSxcCisgICAgICAgICxcCisgICAgICAgICQoZXJyb3IgJChtKS5MT0NBTF9IT1NUX1JFUVVJUkVEX01PRFVMRVMgOiBpbGxlZ2FsIHZhbHVlICQocmVxX21vZCkgOiBub3QgYSBob3N0IG1vZHVsZS4gSWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0YXJnZXQgbW9kdWxlcyB0byBiZSByZXF1aXJlZCB0byBiZSBpbnN0YWxsZWQgYWxvbmcgd2l0aCB5b3VyIHRhcmdldCBtb2R1bGUsIGFkZCB0aG9zZSBtb2R1bGUgbmFtZXMgdG8gTE9DQUxfUkVRVUlSRURfTU9EVUxFUyBpbnN0ZWFkKVwKKyAgICAgIClcCisgICAgICAkKGV2YWwgcmVxX2ZpbGVzIDo9ICQocmVxX2ZpbGVzKSQoc3BhY2UpJChyZXFfZmlsZSkpXAorICAgIClcCisgICAgJChldmFsIHJlcV9maWxlcyA6PSAkKHN0cmlwICQocmVxX2ZpbGVzKSkpXAorICAgICQoZXZhbCBtb2RfZmlsZXMgOj0gJChmaWx0ZXIgJChUQVJHRVRfT1VUX1JPT1QpLyUsICQoY2FsbCBtb2R1bGUtaW5zdGFsbGVkLWZpbGVzLCQobSkpKSlcCisgICAgJChldmFsIG1vZF9maWxlcyA6PSAkKGZpbHRlci1vdXQgJChyZXFfZmlsZXMpLCQobW9kX2ZpbGVzKSkpXAorICAgICQoaWYgJChtb2RfZmlsZXMpLFwKKyAgICAgICQoZXZhbCAkKGNhbGwgYWRkLXJlcXVpcmVkLWRlcHMsICQobW9kX2ZpbGVzKSwkKHJlcV9maWxlcykpKSBcCisgICAgKVwKKyAgKVwKKykKK2VuZGVmCiskKGNhbGwgYWRkLWFsbC10YXJnZXQtdG8taG9zdC1yZXF1aXJlZC1tb2R1bGVzLWRlcHMpCiAKIHRfbSA6PQogaF9tIDo9CkBAIC0xMDE2LDYgKzEwNzgsOSBAQAogLlBIT05ZOiB2ZW5kb3JpbWFnZQogdmVuZG9yaW1hZ2U6ICQoSU5TVEFMTEVEX1ZFTkRPUklNQUdFX1RBUkdFVCkKIAorLlBIT05ZOiBwcm9kdWN0aW1hZ2UKK3Byb2R1Y3RpbWFnZTogJChJTlNUQUxMRURfUFJPRFVDVElNQUdFX1RBUkdFVCkKKwogLlBIT05ZOiBzeXN0ZW1vdGhlcmltYWdlCiBzeXN0ZW1vdGhlcmltYWdlOiAkKElOU1RBTExFRF9TWVNURU1PVEhFUklNQUdFX1RBUkdFVCkKIApAQCAtMTAzOSwxMCArMTEwNCwxMyBAQAogCSQoSU5TVEFMTEVEX0NBQ0hFSU1BR0VfVEFSR0VUKSBcCiAJJChJTlNUQUxMRURfQlBUSU1BR0VfVEFSR0VUKSBcCiAJJChJTlNUQUxMRURfVkVORE9SSU1BR0VfVEFSR0VUKSBcCisJJChJTlNUQUxMRURfUFJPRFVDVElNQUdFX1RBUkdFVCkgXAogCSQoSU5TVEFMTEVEX1NZU1RFTU9USEVSSU1BR0VfVEFSR0VUKSBcCiAJJChJTlNUQUxMRURfRklMRVNfRklMRSkgXAogCSQoSU5TVEFMTEVEX0ZJTEVTX0ZJTEVfVkVORE9SKSBcCi0JJChJTlNUQUxMRURfRklMRVNfRklMRV9TWVNURU1PVEhFUikKKwkkKElOU1RBTExFRF9GSUxFU19GSUxFX1BST0RVQ1QpIFwKKwkkKElOU1RBTExFRF9GSUxFU19GSUxFX1NZU1RFTU9USEVSKSBcCisJc29vbmdfZG9jcwogCiAjIGRpc3RfZmlsZXMgb25seSBmb3IgcHV0dGluZyB5b3VyIGxpYnJhcnkgaW50byB0aGUgZGlzdCBkaXJlY3Rvcnkgd2l0aCBhIGZ1bGwgYnVpbGQuCiAuUEhPTlk6IGRpc3RfZmlsZXMKQEAgLTExMDYsNiArMTE3NCw3IEBACiAgICAgJChDT1ZFUkFHRV9aSVApIFwKICAgICAkKElOU1RBTExFRF9GSUxFU19GSUxFKSBcCiAgICAgJChJTlNUQUxMRURfRklMRVNfRklMRV9WRU5ET1IpIFwKKyAgICAkKElOU1RBTExFRF9GSUxFU19GSUxFX1BST0RVQ1QpIFwKICAgICAkKElOU1RBTExFRF9GSUxFU19GSUxFX1NZU1RFTU9USEVSKSBcCiAgICAgJChJTlNUQUxMRURfQlVJTERfUFJPUF9UQVJHRVQpIFwKICAgICAkKEJVSUxUX1RBUkdFVF9GSUxFU19QQUNLQUdFKSBcCkBAIC0xMTg3LDYgKzEyNTYsOSBAQAogLlBIT05ZOiBmaW5kYnVncwogZmluZGJ1Z3M6ICQoSU5URVJOQUxfRklOREJVR1NfSFRNTF9UQVJHRVQpICQoSU5URVJOQUxfRklOREJVR1NfWE1MX1RBUkdFVCkKIAorLlBIT05ZOiBmaW5kbHNkdW1wcworZmluZGxzZHVtcHM6ICQoRklORF9MU0RVTVBTX0ZJTEUpCisKICN4eHggc2NyYXBlIHRoaXMgZnJvbSBBTExfTU9EVUxFX05BTUVfVEFHUwogLlBIT05ZOiBtb2R1bGVzCiBtb2R1bGVzOgpkaWZmIC0tZ2l0IGEvY29yZS9uYXRpdmVfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sIGIvY29yZS9uYXRpdmVfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjA1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL25hdGl2ZV90ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzwhLS0gVGhpcyB0ZXN0IGNvbmZpZyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkLiAtLT4KKzxjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9uPSJSdW5zIHtNT0RVTEV9LiI+CisgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGFyZ2V0cHJlcC5QdXNoRmlsZVByZXBhcmVyIj4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJjbGVhbnVwIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0ie01PRFVMRX0tPi9kYXRhL2xvY2FsL3RtcC97TU9EVUxFfSIgLz4KKyAgICA8L3RhcmdldF9wcmVwYXJlcj4KKworICAgIDx0ZXN0IGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50ZXN0dHlwZS5HVGVzdCIgPgorICAgICAgICA8b3B0aW9uIG5hbWU9Im5hdGl2ZS10ZXN0LWRldmljZS1wYXRoIiB2YWx1ZT0iL2RhdGEvbG9jYWwvdG1wIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9Im1vZHVsZS1uYW1lIiB2YWx1ZT0ie01PRFVMRX0iIC8+CisgICAgPC90ZXN0PgorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9wYWNrYWdlX2ludGVybmFsLm1rIGIvY29yZS9wYWNrYWdlX2ludGVybmFsLm1rCmluZGV4IDlmOTljN2EuLjg1OGExYmYgMTAwNjQ0Ci0tLSBhL2NvcmUvcGFja2FnZV9pbnRlcm5hbC5taworKysgYi9jb3JlL3BhY2thZ2VfaW50ZXJuYWwubWsKQEAgLTExMSw2ICsxMTEsOCBAQAogICAgICAgICBlbmZvcmNlX3Jyb19lbmFibGVkIDo9CiAgICAgICBlbHNlIGlmZXEgKHRydWUsJChMT0NBTF9PRE1fTU9EVUxFKSkKICAgICAgICAgZW5mb3JjZV9ycm9fZW5hYmxlZCA6PQorICAgICAgZWxzZSBpZmVxICh0cnVlLCQoTE9DQUxfUFJPRFVDVF9NT0RVTEUpKQorICAgICAgICBlbmZvcmNlX3Jyb19lbmFibGVkIDo9CiAgICAgICBlbmRpZgogICAgIGVsc2UgaWZlcSAoJChmaWx0ZXIgJChUQVJHRVRfT1VUKS8lLCQoTE9DQUxfTU9EVUxFX1BBVEgpKSwpCiAgICAgICBlbmZvcmNlX3Jyb19lbmFibGVkIDo9CkBAIC0yMjYsOCArMjI4LDIwIEBACiBMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyArPSAkKFJfZmlsZV9zdGFtcCkKIGVuZGlmCiAKK2lmZGVmIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCitpZm5lcSAodHJ1ZSwkKExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFKSkKKyQoY2FsbCBwcmV0dHktZXJyb3IsIFVua25vd24gdmFsdWUgZm9yIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFICQoTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEUpKQorZW5kaWYKK2VuZGlmCisKK2lmZGVmIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCitQQUNLQUdFUy4kKExPQ0FMX1BBQ0tBR0VfTkFNRSkuQ09NUFJFU1NFRCA6PSBnegorTE9DQUxfQlVJTFRfTU9EVUxFX1NURU0gOj0gcGFja2FnZS5hcGsuZ3oKK0xPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSAkKExPQ0FMX01PRFVMRSkuYXBrLmd6CitlbHNlICAjICFMT0NBTF9DT01QUkVTU0VEX01PRFVMRQogTE9DQUxfQlVJTFRfTU9EVUxFX1NURU0gOj0gcGFja2FnZS5hcGsKIExPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSAkKExPQ0FMX01PRFVMRSkuYXBrCitlbmRpZgogCiBMT0NBTF9QUk9HVUFSRF9FTkFCTEVEOj0kKHN0cmlwICQoTE9DQUxfUFJPR1VBUkRfRU5BQkxFRCkpCiBpZm5kZWYgTE9DQUxfUFJPR1VBUkRfRU5BQkxFRApAQCAtMjYwLDkgKzI3NCwxMSBAQAogCiBpZmVxICh0cnVlLCQoTE9DQUxfRU1NQV9JTlNUUlVNRU5UKSkKIGlmZXEgKHRydWUsJChFTU1BX0lOU1RSVU1FTlRfU1RBVElDKSkKLWlmbmVxICgkKExPQ0FMX1NSQ19GSUxFUykkKExPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUykkKExPQ0FMX1NPVVJDRV9GSUxFU19BTExfR0VORVJBVEVEKSwpCitpZm5lcSAoJChMT0NBTF9TUkNfRklMRVMpJChMT0NBTF9TUkNKQVJTKSQoTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTKSQoTE9DQUxfU09VUkNFX0ZJTEVTX0FMTF9HRU5FUkFURUQpLCkKICMgT25seSBhZGQgamFjb2NvYWdlbnQgaWYgdGhlIHBhY2thZ2UgY29udGFpbnMgc29tZSBqYXZhIGNvZGUKIExPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyArPSBqYWNvY29hZ2VudAorIyBFeGNsdWRlIGphY29jbyBjbGFzc2VzIGZyb20gcHJvZ3VhcmQKK0xPQ0FMX1BST0dVQVJEX0ZMQUdTICs9IC1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9wcm9ndWFyZC5qYWNvY28uZmxhZ3MKIGVuZGlmICMgQ29udGFpbnMgamF2YSBjb2RlCiBlbHNlCiBpZmRlZiBMT0NBTF9TREtfVkVSU0lPTgpAQCAtMjk4LDExICszMTQsMTkgQEAKIExPQ0FMX0FBUFRfRkxBR1MgKz0gLS1hdXRvLWFkZC1vdmVybGF5IC0tZXh0cmEtcGFja2FnZXMgY29tLmFuZHJvaWQuZGF0YWJpbmRpbmcubGlicmFyeQogZW5kaWYgICMgTE9DQUxfREFUQV9CSU5ESU5HCiAKKyMgSWYgdGhlIG1vZHVsZSBpcyBhIGNvbXByZXNzZWQgbW9kdWxlLCB3ZSBkb24ndCBwcmUtb3B0IGl0IGJlY2F1c2UgaXRzIGZpbmFsCisjIGluc3RhbGxhdGlvbiBsb2NhdGlvbiB3aWxsIGJlIHRoZSBkYXRhIHBhcnRpdGlvbi4KK2lmZGVmIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCitMT0NBTF9ERVhfUFJFT1BUIDo9IGZhbHNlCitlbmRpZgorCiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9hbmRyb2lkX21hbmlmZXN0Lm1rCiAKK2NhbGxlZF9mcm9tX3BhY2thZ2VfaW50ZXJuYWwgOj0gdHJ1ZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9qYXZhLm1rCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NhbGxlZF9mcm9tX3BhY2thZ2VfaW50ZXJuYWwgOj0KIAogTE9DQUxfU0RLX1JFU19WRVJTSU9OOj0kKHN0cmlwICQoTE9DQUxfU0RLX1JFU19WRVJTSU9OKSkKIGlmZXEgKCQoTE9DQUxfU0RLX1JFU19WRVJTSU9OKSwpCkBAIC0zMzcsMTAgKzM2MSwxMyBAQAogIyBNYWtlIHN1cmUgdGhlIGRhdGEtYmluZGluZyBwcm9jZXNzIGhhcHBlbnMgYmVmb3JlIGphdmFjIGFuZCBnZW5lcmF0aW9uIG9mIFIuamF2YS4KICQoUl9maWxlX3N0YW1wKTogJChkYXRhX2JpbmRpbmdfc3RhbXApCiAkKGphdmFfc291cmNlX2xpc3RfZmlsZSk6ICQoZGF0YV9iaW5kaW5nX3N0YW1wKQotJChmb3JlYWNoIHgsJChzaGFyZGVkX2phdmFfc291cmNlX2xpc3RfZmlsZXMpLCQoZXZhbCAkKHgpOiAkKGRhdGFfYmluZGluZ19zdGFtcCkpKQogJChmdWxsX2NsYXNzZXNfY29tcGlsZWRfamFyKTogJChkYXRhX2JpbmRpbmdfc3RhbXApCiBlbmRpZiAgIyBMT0NBTF9EQVRBX0JJTkRJTkcKIAorcmVzb3VyY2VfZXhwb3J0X3BhY2thZ2UgOj0KKworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYWFwdF9mbGFncy5taworCiBpZmVxICgkKG5lZWRfY29tcGlsZV9yZXMpLHRydWUpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTM1MCw2ICszNzcsMTAgQEAKIG15X2Fwa19zcGxpdF9jb25maWdzIDo9CiAKIGlmZGVmIExPQ0FMX1BBQ0tBR0VfU1BMSVRTCitpZmRlZiBMT0NBTF9DT01QUkVTU0VEX01PRFVMRQorJChlcnJvciAkKExPQ0FMX01PRFVMRSk6IExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGZvciBzcGxpdCBpbnN0YWxscykKK2VuZGlmICAjIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCisKIG15X2Fwa19zcGxpdF9jb25maWdzIDo9ICQoTE9DQUxfUEFDS0FHRV9TUExJVFMpCiBteV9zcGxpdF9zdWZmaXhlcyA6PSAkKHN1YnN0ICQoY29tbWEpLF8sJChteV9hcGtfc3BsaXRfY29uZmlncykpCiBidWlsdF9hcGtfc3BsaXRzIDo9ICQoZm9yZWFjaCBzLCQobXlfc3BsaXRfc3VmZml4ZXMpLCQoaW50ZXJtZWRpYXRlcykvcGFja2FnZV8kKHMpLmFwaykKQEAgLTM2NCw4ICszOTUsOCBAQAogZWxzZQogaWZuZXEgKCwkKExPQ0FMX1NES19WRVJTSU9OKSkKICMgU2V0IHRhcmdldC1hcGkgZm9yIExPQ0FMX1NES19WRVJTSU9OcyBvdGhlciB0aGFuIGN1cnJlbnQuCi1pZm5lcSAoLCQoZmlsdGVyLW91dCBjdXJyZW50IHN5c3RlbV9jdXJyZW50IHRlc3RfY3VycmVudCwgJChMT0NBTF9TREtfVkVSU0lPTikpKQotcmVuZGVyc2NyaXB0X3RhcmdldF9hcGkgOj0gJChMT0NBTF9TREtfVkVSU0lPTikKK2lmbmVxICgsJChmaWx0ZXItb3V0IGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50IGNvcmVfY3VycmVudCwgJChMT0NBTF9TREtfVkVSU0lPTikpKQorcmVuZGVyc2NyaXB0X3RhcmdldF9hcGkgOj0gJChjYWxsIGdldC1udW1lcmljLXNkay12ZXJzaW9uLCQoTE9DQUxfU0RLX1ZFUlNJT04pKQogZW5kaWYKIGVuZGlmICAjIExPQ0FMX1NES19WRVJTSU9OIGlzIHNldAogZW5kaWYgICMgTE9DQUxfUkVOREVSU0NSSVBUX1RBUkdFVF9BUEkgaXMgc2V0CkBAIC0zNzcsOCArNDA4LDEzIEBACiBlbmRpZiAgIyByZW5kZXJzY3JpcHRfdGFyZ2V0X2FwaSBpcyBzZXQKIG15X2Fzc2V0X2RpcnMgOj0gJChMT0NBTF9BU1NFVF9ESVIpCiBteV9mdWxsX2Fzc2V0X3BhdGhzIDo9ICQoYWxsX2Fzc2V0cykKKwogIyBBZGQgQUFQVDIgbGluayBzcGVjaWZpYyBmbGFncy4KLSQobXlfcmVzX3BhY2thZ2UpOiBQUklWQVRFX0FBUFRfRkxBR1MgOj0gJChMT0NBTF9BQVBUX0ZMQUdTKSAtLW5vLXN0YXRpYy1saWItcGFja2FnZXMKKyQobXlfcmVzX3BhY2thZ2UpOiBQUklWQVRFX0FBUFRfRkxBR1MgOj0gJChMT0NBTF9BQVBUX0ZMQUdTKQoraWZuZGVmIExPQ0FMX0FBUFRfTkFNRVNQQUNFUworICAkKG15X3Jlc19wYWNrYWdlKTogUFJJVkFURV9BQVBUX0ZMQUdTICs9IC0tbm8tc3RhdGljLWxpYi1wYWNrYWdlcworZW5kaWYKKwogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYWFwdDIubWsKIGVsc2UgICMgTE9DQUxfVVNFX0FBUFQyCiAKQEAgLTQwMyw3ICs0MzksNiBAQAogCiAkKHByb2d1YXJkX29wdGlvbnNfZmlsZSk6ICQoUl9maWxlX3N0YW1wKQogCi1yZXNvdXJjZV9leHBvcnRfcGFja2FnZSA6PQogaWZkZWYgTE9DQUxfRVhQT1JUX1BBQ0tBR0VfUkVTT1VSQ0VTCiAjIFB1dCB0aGlzIG1vZHVsZSdzIHJlc291cmNlcyBpbnRvIGEgUFJPRFVDVC1hZ25vc2l0YyBwYWNrYWdlIHRoYXQKICMgb3RoZXIgcGFja2FnZXMgY2FuIHVzZSB0byBidWlsZCB0aGVpciBvd24gUFJPRFVDVC1hZ25vc3RpYyBSLmphdmEgKGV0Yy4pCkBAIC00MzEsMzkgKzQ2NiwzNCBAQAogIyBUaGUgUi5qYXZhIGZpbGUgbXVzdCBleGlzdCBieSB0aGUgdGltZSB0aGUgamF2YSBzb3VyY2UKICMgbGlzdCBpcyBnZW5lcmF0ZWQKICQoamF2YV9zb3VyY2VfbGlzdF9maWxlKTogJChSX2ZpbGVfc3RhbXApCi0kKGZvcmVhY2ggeCwkKHNoYXJkZWRfamF2YV9zb3VyY2VfbGlzdF9maWxlcyksJChldmFsICQoeCk6ICQoUl9maWxlX3N0YW1wKSkpCiAKIGVuZGlmICAjIG5lZWRfY29tcGlsZV9yZXMKIAotaWZlcSAoJChMT0NBTF9OT19TVEFOREFSRF9MSUJSQVJJRVMpLHRydWUpCi0jIFdlIG5lZWQgdG8gZXhwbGljaXRseSBjbGVhciB0aGlzIHZhciBzbyB0aGF0IHdlIGRvbid0Ci0jIGluaGVyaXQgdGhlIHZhbHVlIGZyb20gd2hvbWV2ZXIgY2F1c2VkIHVzIHRvIGJlIGJ1aWx0LgotJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfQUFQVF9JTkNMVURFUyA6PQotZWxzZQorZnJhbWV3b3JrX3Jlc19wYWNrYWdlX2V4cG9ydCA6PQorCitpZm5lcSAoJChMT0NBTF9OT19TVEFOREFSRF9MSUJSQVJJRVMpLHRydWUpCiAjIE1vc3QgcGFja2FnZXMgc2hvdWxkIGxpbmsgYWdhaW5zdCB0aGUgcmVzb3VyY2VzIGRlZmluZWQgYnkgZnJhbWV3b3JrLXJlcy4KICMgRXZlbiBpZiB0aGV5IGRvbid0IGhhdmUgdGhlaXIgb3duIHJlc291cmNlcywgdGhleSBtYXkgdXNlIGZyYW1ld29yawogIyByZXNvdXJjZXMuCi1pZm5lcSAoJChmaWx0ZXItb3V0IGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50LCQoTE9DQUxfU0RLX1JFU19WRVJTSU9OKSkkKGlmICQoVEFSR0VUX0JVSUxEX0FQUFMpLCQoZmlsdGVyIGN1cnJlbnQgc3lzdGVtX2N1cnJlbnQgdGVzdF9jdXJyZW50LCQoTE9DQUxfU0RLX1JFU19WRVJTSU9OKSkpLCkKK2lmZXEgKCQoTE9DQUxfU0RLX1JFU19WRVJTSU9OKSxjb3JlX2N1cnJlbnQpCisjIGNvcmVfY3VycmVudCBkb2Vzbid0IGNvbnRhaW4gYW55IGZyYW1ld29yayByZXNvdXJjZXMuCitlbHNlIGlmbmVxICgkKGZpbHRlci1vdXQgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsJChMT0NBTF9TREtfUkVTX1ZFUlNJT04pKSQoaWYgJChUQVJHRVRfQlVJTERfQVBQUyksJChmaWx0ZXIgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsJChMT0NBTF9TREtfUkVTX1ZFUlNJT04pKSksKQogIyBmb3IgcmVsZWFzZWQgc2RrIHZlcnNpb25zLCB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzIHdlcmUgYnVpbHQgaW50byBhbmRyb2lkLmphci4KIGZyYW1ld29ya19yZXNfcGFja2FnZV9leHBvcnQgOj0gXAogICAgICQoSElTVE9SSUNBTF9TREtfVkVSU0lPTlNfUk9PVCkvJChMT0NBTF9TREtfUkVTX1ZFUlNJT04pL2FuZHJvaWQuamFyCi1mcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0X2RlcHMgOj0gJChmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0KQogZWxzZSAjIExPQ0FMX1NES19SRVNfVkVSU0lPTgogZnJhbWV3b3JrX3Jlc19wYWNrYWdlX2V4cG9ydCA6PSBcCiAgICAgJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixBUFBTLGZyYW1ld29yay1yZXMsLENPTU1PTikvcGFja2FnZS1leHBvcnQuYXBrCi0jIFdlIGNhbid0IGRlcGVuZCBkaXJlY3RseSBvbiB0aGUgZXhwb3J0LmFwayBmaWxlOyBpdCB3b24ndCBnZXQgaXRzCi0jIFBSSVZBVEVfIHZhcnMgc2V0IHVwIGNvcnJlY3RseSBpZiB3ZSBkby4gIEluc3RlYWQsIGRlcGVuZCBvbiB0aGUKLSMgY29ycmVzcG9uZGluZyBSLnN0YW1wIGZpbGUsIHdoaWNoIGxpc3RzIHRoZSBleHBvcnQuYXBrIGFzIGEgZGVwZW5kZW5jeS4KLWZyYW1ld29ya19yZXNfcGFja2FnZV9leHBvcnRfZGVwcyA6PSBcCi0gICAgJChkaXIgJChmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0KSlzcmMvUi5zdGFtcAogZW5kaWYgIyBMT0NBTF9TREtfUkVTX1ZFUlNJT04KK2VuZGlmICMgTE9DQUxfTk9fU1RBTkRBUkRfTElCUkFSSUVTCisKIGFsbF9saWJyYXJ5X3Jlc19wYWNrYWdlX2V4cG9ydHMgOj0gXAogICAgICQoZnJhbWV3b3JrX3Jlc19wYWNrYWdlX2V4cG9ydCkgXAogICAgICQoZm9yZWFjaCBsaWIsJChMT0NBTF9SRVNfTElCUkFSSUVTKSxcCiAgICAgICAgICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsQVBQUywkKGxpYiksLENPTU1PTikvcGFja2FnZS1leHBvcnQuYXBrKQogCiBhbGxfbGlicmFyeV9yZXNfcGFja2FnZV9leHBvcnRfZGVwcyA6PSBcCi0gICAgJChmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0X2RlcHMpIFwKKyAgICAkKGZyYW1ld29ya19yZXNfcGFja2FnZV9leHBvcnQpIFwKICAgICAkKGZvcmVhY2ggbGliLCQoTE9DQUxfUkVTX0xJQlJBUklFUyksXAogICAgICAgICAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEFQUFMsJChsaWIpLCxDT01NT04pL3NyYy9SLnN0YW1wKQogJChyZXNvdXJjZV9leHBvcnRfcGFja2FnZSkgJChSX2ZpbGVfc3RhbXApICQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChhbGxfbGlicmFyeV9yZXNfcGFja2FnZV9leHBvcnRfZGVwcykKQEAgLTQ3Myw3ICs1MDMsNiBAQAogaWZkZWYgTE9DQUxfVVNFX0FBUFQyCiAkKG15X3Jlc19wYWNrYWdlKSA6ICQoYWxsX2xpYnJhcnlfcmVzX3BhY2thZ2VfZXhwb3J0X2RlcHMpCiBlbmRpZgotZW5kaWYgIyBMT0NBTF9OT19TVEFOREFSRF9MSUJSQVJJRVMKIAogaWZuZXEgKCQoZnVsbF9jbGFzc2VzX2phciksKQogJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0RFWF9GSUxFIDo9ICQoYnVpbHRfZGV4KQpAQCAtNTUzLDYgKzU4Miw5IEBACiBlbHNlCiAkKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfUkVTT1VSQ0VfTElTVCA6PSAkKGFsbF9yZXNfYXNzZXRzKQogJChMT0NBTF9CVUlMVF9NT0RVTEUpIDogJChhbGxfcmVzX2Fzc2V0cykgJChmdWxsX2FuZHJvaWRfbWFuaWZlc3QpICQoQUFQVCkgJChaSVBBTElHTikKK2VuZGlmICAjIExPQ0FMX1VTRV9BQVBUMgoraWZkZWYgTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEUKKyQoTE9DQUxfQlVJTFRfTU9EVUxFKSA6ICQoTUlOSUdaSVApCiBlbmRpZgogCUBlY2hvICJ0YXJnZXQgUGFja2FnZTogJChQUklWQVRFX01PRFVMRSkgKCRAKSIKIGlmZGVmIExPQ0FMX1VTRV9BQVBUMgpAQCAtNTc1LDI1ICs2MDcsMjMgQEAKIAkkKGNhbGwgYWRkLWphci1yZXNvdXJjZXMtdG8tcGFja2FnZSwkQCwkKFBSSVZBVEVfRlVMTF9DTEFTU0VTX0pBUiksJChQUklWQVRFX1JFU09VUkNFX0lOVEVSTUVESUFURVNfRElSKSkKIGVuZGlmCiBlbmRpZiAgIyBmdWxsX2NsYXNzZXNfamFyCitpZmVxICh0cnVlLCAkKExPQ0FMX1VOQ09NUFJFU1NfREVYKSkKKwlAIyBObyBuZWVkIHRvIGFsaWduLCBzaWduLXBhY2thZ2UgYmVsb3cgd2lsbCBkbyBpdC4KKwkkKHVuY29tcHJlc3MtZGV4cykKK2VuZGlmCiBpZmRlZiBMT0NBTF9ERVhfUFJFT1BUCiBpZm5lcSAoJChCVUlMRF9QTEFURk9STV9aSVApLCkKIAlAIyBLZWVwIGEgY29weSBvZiBhcGsgd2l0aCBjbGFzc2VzLmRleCB1bnN0cmlwcGVkCiAJJChoaWRlKSBjcCAtZiAkQCAkKGRpciAkQClwYWNrYWdlLmRleC5hcGsKIGVuZGlmICAjIEJVSUxEX1BMQVRGT1JNX1pJUAotaWZuZXEgKHRydWUsJChET05UX1VOQ09NUFJFU1NfUFJJVl9BUFBTX0RFWFMpKQotaWZlcSAodHJ1ZSwkKExPQ0FMX1BSSVZJTEVHRURfTU9EVUxFKSkKLQlAIyBObyBuZWVkIHRvIGFsaWduLCBzaWduLXBhY2thZ2UgYmVsb3cgd2lsbCBkbyBpdC4KLQkkKHVuY29tcHJlc3MtZGV4cykKLWVuZGlmICAjIExPQ0FMX1BSSVZJTEVHRURfTU9EVUxFCi1lbmRpZiAgIyBET05UX1VOQ09NUFJFU1NfUFJJVl9BUFBTX0RFWFMKIGlmbmVxIChub3N0cmlwcGluZywkKExPQ0FMX0RFWF9QUkVPUFQpKQogCSQoY2FsbCBkZXhwcmVvcHQtcmVtb3ZlLWNsYXNzZXMuZGV4LCRAKQogZW5kaWYKLWVuZGlmCi1pZm5lcSAoLCQoZmlsdGVyICQoUFJPRFVDVF9MT0FERURfQllfUFJJVklMRUdFRF9NT0RVTEVTKSwgJChMT0NBTF9NT0RVTEUpKSkKLQkkKHVuY29tcHJlc3MtZGV4cykKLWVuZGlmICAjIFBST0RVQ1RfTE9BREVEX0JZX1BSSVZJTEVHRURfTU9EVUxFUworZW5kaWYgICMgTE9DQUxfREVYX1BSRU9QVAogCSQoc2lnbi1wYWNrYWdlKQoraWZkZWYgTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEUKKwkkKGNvbXByZXNzLXBhY2thZ2UpCitlbmRpZiAgIyBMT0NBTF9DT01QUkVTU0VEX01PRFVMRQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBCdWlsZCBkcGktc3BlY2lmaWMgYXBrcywgaWYgaXQncyBhcHBzX29ubHkgYnVpbGQuCkBAIC02MTMsNiArNjQzLDEwIEBACiAkKGJ1aWx0X29kZXgpIDogJChkaXIgJChMT0NBTF9CVUlMVF9NT0RVTEUpKSUgOiAkKGJ1aWx0X2RleCkKIAkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKSAmJiBybSAtZiAkQAogCSQoYWRkLWRleC10by1wYWNrYWdlKQoraWZlcSAodHJ1ZSwgJChMT0NBTF9VTkNPTVBSRVNTX0RFWCkpCisJJCh1bmNvbXByZXNzLWRleHMpCisJJChhbGlnbi1wYWNrYWdlKQorZW5kaWYKIAkkKGhpZGUpIG12ICRAICRALmlucHV0CiAJJChjYWxsIGRleHByZW9wdC1vbmUtZmlsZSwkQC5pbnB1dCwkQCkKIAkkKGhpZGUpIHJtICRALmlucHV0CmRpZmYgLS1naXQgYS9jb3JlL3BhdGhtYXAubWsgYi9jb3JlL3BhdGhtYXAubWsKaW5kZXggYTFjMjBjOS4uYWYzM2Y1ZCAxMDA2NDQKLS0tIGEvY29yZS9wYXRobWFwLm1rCisrKyBiL2NvcmUvcGF0aG1hcC5tawpAQCAtODAsNiArODAsNyBAQAogCSAgICB0ZWxlY29tbSBcCiAJICAgIHRlbGVwaG9ueSBcCiAJICAgIHdpZmkgXAorCSAgICBsb3dwYW4gXAogCSAgICBrZXlzdG9yZSBcCiAJICAgIHJzIFwKIAkgKQpkaWZmIC0tZ2l0IGEvY29yZS9wZGtfY29uZmlnLm1rIGIvY29yZS9wZGtfY29uZmlnLm1rCmluZGV4IGRiYTc0OGMuLjlmZTZkNDcgMTAwNjQ0Ci0tLSBhL2NvcmUvcGRrX2NvbmZpZy5taworKysgYi9jb3JlL3Bka19jb25maWcubWsKQEAgLTEsMTAgKzEsMTMgQEAKICMgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHJ1bGUgdG8gZnVzZSB0aGUgcGxhdGZvcm0uemlwIGludG8gdGhlIGN1cnJlbnQgUERLIGJ1aWxkLgogUERLX1BMQVRGT1JNX0pBVkFfWklQX0pBVkFfVEFSR0VUX0xJQl9ESVIgOj0KIFBES19QTEFURk9STV9KQVZBX1pJUF9KQVZBX0hPU1RfTElCX0RJUiA6PSBcCi0JaG9zdC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2JvdW5jeWNhc3RsZS1ob3N0X2ludGVybWVkaWF0ZXMKKwlob3N0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvYm91bmN5Y2FzdGxlLWhvc3RfaW50ZXJtZWRpYXRlcyBcCisJaG9zdC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2NvbXBhdGliaWxpdHktaG9zdC11dGlsX2ludGVybWVkaWF0ZXMgXAorCWhvc3QvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9jdHMtdHJhZGVmZWQtaGFybmVzc19pbnRlcm1lZGlhdGVzIFwKKwlob3N0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvaG9zdHRlc3RsaWJfaW50ZXJtZWRpYXRlcwogUERLX1BMQVRGT1JNX0pBVkFfWklQX0NPTlRFTlRTIDo9CiAKLWlmbmVxICgsJChmaWx0ZXIgcGxhdGZvcm0tamF2YSwgJChNQUtFQ01ER09BTFMpKSQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApKQoraWZuZXEgKCwkKGZpbHRlciBwbGF0Zm9ybS1qYXZhLCAkKE1BS0VDTURHT0FMUykpJChQREtfRlVTSU9OX1BMQVRGT1JNX1pJUCkkKFBES19GVVNJT05fUExBVEZPUk1fRElSKSkKICMgYWRkaXRpb25hbCBpdGVtcyB0byBhZGQgdG8gcGxhdGZvcm0uemlwIGZvciBwbGF0Zm9ybS1qYXZhIGJ1aWxkCiAjIEZvciB0aGVzZSBkaXJzLCBhZGQgY2xhc3Nlcy5qYXIgYW5kIGphdmFsaWIuamFyIGZyb20gdGhlIGRpciB0byBwbGF0Zm9ybS56aXAKICMgYWxsIHBhdGhzIHVuZGVyIG91dCBkaXIKQEAgLTIxLDYgKzI0LDcgQEAKICAgdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvY29yZS1val9pbnRlcm1lZGlhdGVzIFwKICAgdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvY29yZS1saWJhcnRfaW50ZXJtZWRpYXRlcyBcCiAgIHRhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2xlZ2FjeS10ZXN0X2ludGVybWVkaWF0ZXMgXAorICB0YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9sZWdhY3ktYW5kcm9pZC10ZXN0X2ludGVybWVkaWF0ZXMgXAogICB0YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9leHRfaW50ZXJtZWRpYXRlcyBcCiAgIHRhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29ya19pbnRlcm1lZGlhdGVzIFwKICAgdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvaHdiaW5kZXJfaW50ZXJtZWRpYXRlcyBcCkBAIC00MCwzOSArNDQsNjAgQEAKIAkkKFBES19QTEFURk9STV9KQVZBX1pJUF9KQVZBX0hPU1RfTElCX0RJUikKIAogUERLX1BMQVRGT1JNX0pBVkFfWklQX0NPTlRFTlRTICs9ICQoZm9yZWFjaCBsaWJfZGlyLCQoUERLX1BMQVRGT1JNX0pBVkFfWklQX0pBVkFfTElCX0RJUiksXAotICAgICQobGliX2RpcikvY2xhc3Nlcy5qYXIgJChsaWJfZGlyKS9jbGFzc2VzLmphci50b2MgXAorICAgICQobGliX2RpcikvY2xhc3Nlcy5qYXIgJChsaWJfZGlyKS9jbGFzc2VzLWhlYWRlci5qYXIgXAogICAgICQobGliX2RpcikvamF2YWxpYi5qYXIgICQobGliX2RpcikvY2xhc3NlcyouZGV4IFwKICAgICAkKGxpYl9kaXIpL2NsYXNzZXMuZGV4LnRvYyApCiAKICMgY2hlY2sgYW5kIG92ZXJyaWRlIGphdmEgc3VwcG9ydCBsZXZlbAotaWZuZXEgKCQoVEFSR0VUX0JVSUxEX1BESykkKFBES19GVVNJT05fUExBVEZPUk1fWklQKSwpCi1pZm5lcSAoJCh3aWxkY2FyZCBleHRlcm5hbC9wcm9ndWFyZCksKQotVEFSR0VUX0JVSUxEX0pBVkFfU1VQUE9SVF9MRVZFTCA6PSBzZGsKLWVsc2UgIyBubyBwcm9ndWFyZAotVEFSR0VUX0JVSUxEX0pBVkFfU1VQUE9SVF9MRVZFTCA6PQotZW5kaWYKLSMgcGxhdGZvcm0gc3VwcHJvdCBpcyBzZXQgYWZ0ZXIgY2hlY2tpbmcgcGxhdGZvcm0uemlwCitpZm5lcSAoJChUQVJHRVRfQlVJTERfUERLKSQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApJChQREtfRlVTSU9OX1BMQVRGT1JNX0RJUiksKQorICBpZm5lcSAoJCh3aWxkY2FyZCBleHRlcm5hbC9wcm9ndWFyZCksKQorICAgIFRBUkdFVF9CVUlMRF9KQVZBX1NVUFBPUlRfTEVWRUwgOj0gc2RrCisgIGVsc2UgIyBubyBwcm9ndWFyZAorICAgIFRBUkdFVF9CVUlMRF9KQVZBX1NVUFBPUlRfTEVWRUwgOj0KKyAgZW5kaWYKKyAgIyBwbGF0Zm9ybSBzdXBwb3J0IGlzIHNldCBhZnRlciBjaGVja2luZyBwbGF0Zm9ybS56aXAKIGVuZGlmICMgUERLCiAKK2lmbmVxICgsJChQREtfRlVTSU9OX1BMQVRGT1JNX0RJUikkKFBES19GVVNJT05fUExBVEZPUk1fWklQKSkKKworX3Bka19mdXNpb25faW50ZXJtZWRpYXRlcyA6PQorX3Bka19mdXNpb25fc3RhbXAgOj0KK19wZGtfZnVzaW9uX2ZpbGVfbGlzdCA6PQorX3Bka19mdXNpb25famF2YV9maWxlX2xpc3QgOj0KK1BES19GVVNJT05fU1lNTElOS19TVEFNUCA6PQorCitpZmRlZiBQREtfRlVTSU9OX1BMQVRGT1JNX0RJUgorICBfcGRrX2Z1c2lvbl9pbnRlcm1lZGlhdGVzIDo9ICQoUERLX0ZVU0lPTl9QTEFURk9STV9ESVIpCisgIF9wZGtfZnVzaW9uX2ZpbGVfbGlzdCA6PSAkKHNvcnQgXAorICAgICQoc2hlbGwgY2QgJChQREtfRlVTSU9OX1BMQVRGT1JNX0RJUik7IGZpbmQgKiAtdHlwZSBmKSkKKyAgX3Bka19mdXNpb25famF2YV9maWxlX2xpc3QgOj0gJChmaWx0ZXIgdGFyZ2V0L2NvbW1vbi8lLCQoX3Bka19mdXNpb25fZmlsZV9saXN0KSkKKyAgX3Bka19mdXNpb25fZmlsZV9saXN0IDo9ICQoZmlsdGVyLW91dCB0YXJnZXQvY29tbW9uLyUsJChfcGRrX2Z1c2lvbl9maWxlX2xpc3QpKQorCisgIFBES19GVVNJT05fU1lNTElOS19TVEFNUCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLCBQQUNLQUdJTkcsIHBka19mdXNpb24pL3Bka19zeW1saW5rcy5zdGFtcAorCisgIHN5bWxpbmtfbGlzdCA6PSAkKHNvcnQgXAorICAgICQoc2hlbGwgY2QgJChQREtfRlVTSU9OX1BMQVRGT1JNX0RJUik7IGZpbmQgKiAtdHlwZSBsKSkKKyQoUERLX0ZVU0lPTl9TWU1MSU5LX1NUQU1QKTogUFJJVkFURV9TWU1MSU5LUyA6PSAkKGZvcmVhY2ggcywkKHN5bWxpbmtfbGlzdCksXAorICAgICQocyk6JChzaGVsbCByZWFkbGluayAkKFBES19GVVNJT05fUExBVEZPUk1fRElSKS8kKHMpKSkKKyQoUERLX0ZVU0lPTl9TWU1MSU5LX1NUQU1QKToKKwkkKGZvcmVhY2ggcywkKFBSSVZBVEVfU1lNTElOS1MpLFwKKwkgIG1rZGlyIC1wICQoUFJPRFVDVF9PVVQpLyQoZGlyICQoY2FsbCB3b3JkLWNvbG9uLDEsJChzKSkpICYmIFwKKwkgIGxuIC1zZiAkKGNhbGwgd29yZC1jb2xvbiwyLCQocykpICQoUFJPRFVDVF9PVVQpLyQoY2FsbCB3b3JkLWNvbG9uLDEsJChzKSkgJiYpIHRydWUKKwl0b3VjaCAkQAorCisgIHN5bWxpbmtfbGlzdCA6PQorZW5kaWYgIyBQREtfRlVTSU9OX1BMQVRGT1JNX0RJUgorCiBpZmRlZiBQREtfRlVTSU9OX1BMQVRGT1JNX1pJUAotX3Bka19mdXNpb25faW50ZXJtZWRpYXRlcyA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLCBQQUNLQUdJTkcsIHBka19mdXNpb24pCi1fcGRrX2Z1c2lvbl9zdGFtcCA6PSAkKF9wZGtfZnVzaW9uX2ludGVybWVkaWF0ZXMpL3Bka19mdXNpb24uc3RhbXAKKyAgX3Bka19mdXNpb25faW50ZXJtZWRpYXRlcyA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLCBQQUNLQUdJTkcsIHBka19mdXNpb24pCisgIF9wZGtfZnVzaW9uX3N0YW1wIDo9ICQoX3Bka19mdXNpb25faW50ZXJtZWRpYXRlcykvcGRrX2Z1c2lvbi5zdGFtcAogCi1fcGRrX2Z1c2lvbl9maWxlX2xpc3QgOj0gJChzaGVsbCB1bnppcCAtWiAtMSAkKFBES19GVVNJT05fUExBVEZPUk1fWklQKSBcCi0gICAgJypbXi9dJyAteCAndGFyZ2V0L2NvbW1vbi8qJyAyPi9kZXYvbnVsbCkKLV9wZGtfZnVzaW9uX2phdmFfZmlsZV9saXN0IDo9IFwKLQkkKHNoZWxsIHVuemlwIC1aIC0xICQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApICd0YXJnZXQvY29tbW9uLyonIDI+L2Rldi9udWxsKQotX3Bka19mdXNpb25fZmlsZXMgOj0gJChhZGRwcmVmaXggJChfcGRrX2Z1c2lvbl9pbnRlcm1lZGlhdGVzKS8sXAotICAgICQoX3Bka19mdXNpb25fZmlsZV9saXN0KSAkKF9wZGtfZnVzaW9uX2phdmFfZmlsZV9saXN0KSkKLQotaWZuZXEgKCQoX3Bka19mdXNpb25famF2YV9maWxlX2xpc3QpLCkKLSMgVGhpcyByZXByZXNlbnRzIHdoZXRoZXIgamF2YSBidWlsZCBjYW4gdXNlIHBsYXRmb3JtIEFQSSBvciBub3QKLSMgVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgaW4gQW5kcm9pZC5tawotVEFSR0VUX0JVSUxEX1BES19KQVZBX1BMQVRGT1JNIDo9IHRydWUKLWlmbmVxICgkKFRBUkdFVF9CVUlMRF9KQVZBX1NVUFBPUlRfTEVWRUwpLCkKLVRBUkdFVF9CVUlMRF9KQVZBX1NVUFBPUlRfTEVWRUwgOj0gcGxhdGZvcm0KLWVuZGlmCi1lbmRpZgorICBfcGRrX2Z1c2lvbl9maWxlX2xpc3QgOj0gJChzaGVsbCB1bnppcCAtWiAtMSAkKFBES19GVVNJT05fUExBVEZPUk1fWklQKSBcCisgICAgICAnKlteL10nIC14ICd0YXJnZXQvY29tbW9uLyonIDI+L2Rldi9udWxsKQorICBfcGRrX2Z1c2lvbl9qYXZhX2ZpbGVfbGlzdCA6PSBcCisgICAgICAkKHNoZWxsIHVuemlwIC1aIC0xICQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApICd0YXJnZXQvY29tbW9uLyonIDI+L2Rldi9udWxsKQorICBfcGRrX2Z1c2lvbl9maWxlcyA6PSAkKGFkZHByZWZpeCAkKF9wZGtfZnVzaW9uX2ludGVybWVkaWF0ZXMpLyxcCisgICAgICAkKF9wZGtfZnVzaW9uX2ZpbGVfbGlzdCkgJChfcGRrX2Z1c2lvbl9qYXZhX2ZpbGVfbGlzdCkpCiAKICQoX3Bka19mdXNpb25fc3RhbXApIDogJChQREtfRlVTSU9OX1BMQVRGT1JNX1pJUCkKIAlAZWNobyAiVW56aXAgJChkaXIgJEApIDwtICQ8IgpAQCAtODEsOSArMTA2LDE3IEBACiAJJChjYWxsIHNwbGl0LWxvbmctYXJndW1lbnRzLC10b3VjaCwkKF9wZGtfZnVzaW9uX2ZpbGVzKSkKIAkkKGhpZGUpIHRvdWNoICRACiAKLQogJChfcGRrX2Z1c2lvbl9maWxlcykgOiAkKF9wZGtfZnVzaW9uX3N0YW1wKQorZW5kaWYgIyBQREtfRlVTSU9OX1BMQVRGT1JNX1pJUAogCitpZm5lcSAoJChfcGRrX2Z1c2lvbl9qYXZhX2ZpbGVfbGlzdCksKQorICAjIFRoaXMgcmVwcmVzZW50cyB3aGV0aGVyIGphdmEgYnVpbGQgY2FuIHVzZSBwbGF0Zm9ybSBBUEkgb3Igbm90CisgICMgVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgaW4gQW5kcm9pZC5taworICBUQVJHRVRfQlVJTERfUERLX0pBVkFfUExBVEZPUk0gOj0gdHJ1ZQorICBpZm5lcSAoJChUQVJHRVRfQlVJTERfSkFWQV9TVVBQT1JUX0xFVkVMKSwpCisgICAgVEFSR0VUX0JVSUxEX0pBVkFfU1VQUE9SVF9MRVZFTCA6PSBwbGF0Zm9ybQorICBlbmRpZgorZW5kaWYKIAogIyBJbXBsaWNpdCBwYXR0ZXJuIHJ1bGVzIHRvIGNvcHkgdGhlIGZ1c2lvbiBmaWxlcyB0byB0aGUgc3lzdGVtIGltYWdlIGRpcmVjdG9yeS4KICMgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGFscmVhZHkgZXhwbGljaXQgcnVsZSBpbiB0aGUgYnVpbGQgc3lzdGVtIHRvIGdlbmVyYXRlIGEgZmlsZSwKQEAgLTEwMSw2MyArMTM0LDU3IEBACiAJJChoaWRlKSBjcCAtZnBQUiAkPCAkQAogCiBpZmVxICh0cnVlLCQoVEFSR0VUX0JVSUxEX1BES19KQVZBX1BMQVRGT1JNKSkKKyAgUERLX0ZVU0lPTl9PVVRfRElSIDo9ICQoT1VUX0RJUikKIAotUERLX0ZVU0lPTl9PVVRfRElSIDo9ICQoT1VUX0RJUikKKyAgZGVmaW5lIEpBVkFfZGVwZW5kZW5jeV90ZW1wbGF0ZQorICAkKGNhbGwgYWRkLWRlcGVuZGVuY3ksJChQREtfRlVTSU9OX09VVF9ESVIpLyQoc3RyaXAgJCgxKSksXAorICAgICQoZm9yZWFjaCBkLCQoZmlsdGVyICQoMiksJChfcGRrX2Z1c2lvbl9qYXZhX2ZpbGVfbGlzdCkpLCQoUERLX0ZVU0lPTl9PVVRfRElSKS8kKGQpKSkKKyAgZW5kZWYKIAotZGVmaW5lIEpBVkFfZGVwZW5kZW5jeV90ZW1wbGF0ZQotJChjYWxsIGFkZC1kZXBlbmRlbmN5LCQoUERLX0ZVU0lPTl9PVVRfRElSKS8kKHN0cmlwICQoMSkpLFwKLSAgJChmb3JlYWNoIGQsJChmaWx0ZXIgJCgyKSwkKF9wZGtfZnVzaW9uX2phdmFfZmlsZV9saXN0KSksJChQREtfRlVTSU9OX09VVF9ESVIpLyQoZCkpKQotZW5kZWYKKyAgIyBuZWVkcyBleHBsaWNpdCBkZXBlbmRlbmN5IGFzIHBhY2thZ2UtZXhwb3J0LmFwayBpcyBub3QgZXhwbGljaXRseSBwdWxsZWQKKyAgJChldmFsICQoY2FsbCBKQVZBX2RlcGVuZGVuY3lfdGVtcGxhdGUsXAorICB0YXJnZXQvY29tbW9uL29iai9BUFBTL2ZyYW1ld29yay1yZXNfaW50ZXJtZWRpYXRlcy9zcmMvUi5zdGFtcCxcCisgIHRhcmdldC9jb21tb24vb2JqL0FQUFMvZnJhbWV3b3JrLXJlc19pbnRlcm1lZGlhdGVzL3BhY2thZ2UtZXhwb3J0LmFwaykpCiAKLSMgbmVlZHMgZXhwbGljaXQgZGVwZW5kZW5jeSBhcyBwYWNrYWdlLWV4cG9ydC5hcGsgaXMgbm90IGV4cGxpY2l0bHkgcHVsbGVkCi0kKGV2YWwgJChjYWxsIEpBVkFfZGVwZW5kZW5jeV90ZW1wbGF0ZSxcCi10YXJnZXQvY29tbW9uL29iai9BUFBTL2ZyYW1ld29yay1yZXNfaW50ZXJtZWRpYXRlcy9zcmMvUi5zdGFtcCxcCi10YXJnZXQvY29tbW9uL29iai9BUFBTL2ZyYW1ld29yay1yZXNfaW50ZXJtZWRpYXRlcy9wYWNrYWdlLWV4cG9ydC5hcGspKQotCi0jIGphdmFsaWIuamFyIHNob3VsZCBwdWxsIGNsYXNzZXMuamFyIGFzIGNsYXNzZXMuamFyIGlzIG5vdCBleHBsaWNpdGx5IHB1bGxlZC4KLSQoZm9yZWFjaCBsaWJfZGlyLCQoUERLX1BMQVRGT1JNX0pBVkFfWklQX0pBVkFfVEFSR0VUX0xJQl9ESVIpLFwKLSQoZXZhbCAkKGNhbGwgSkFWQV9kZXBlbmRlbmN5X3RlbXBsYXRlLCQobGliX2RpcikvamF2YWxpYi5qYXIsXAotJChsaWJfZGlyKS9jbGFzc2VzLmphcikpKQorICAjIGphdmFsaWIuamFyIHNob3VsZCBwdWxsIGNsYXNzZXMuamFyIGFzIGNsYXNzZXMuamFyIGlzIG5vdCBleHBsaWNpdGx5IHB1bGxlZC4KKyAgJChmb3JlYWNoIGxpYl9kaXIsJChQREtfUExBVEZPUk1fSkFWQV9aSVBfSkFWQV9UQVJHRVRfTElCX0RJUiksXAorICAkKGV2YWwgJChjYWxsIEpBVkFfZGVwZW5kZW5jeV90ZW1wbGF0ZSwkKGxpYl9kaXIpL2phdmFsaWIuamFyLFwKKyAgJChsaWJfZGlyKS9jbGFzc2VzLmphcikpKQogCiAjIGltcGxpY2l0IHJ1bGVzIGZvciBhbGwgb3RoZXIgdGFyZ2V0IGZpbGVzCiAkKFRBUkdFVF9DT01NT05fT1VUX1JPT1QpLyUgOiAkKF9wZGtfZnVzaW9uX2ludGVybWVkaWF0ZXMpL3RhcmdldC9jb21tb24vJSAkKF9wZGtfZnVzaW9uX3N0YW1wKQogCUBta2RpciAtcCAkKGRpciAkQCkKIAkkKGhpZGUpIGNwIC1mcFBSICQ8ICRACi1lbmRpZgorZW5kaWYgIyBUQVJHRVRfQlVJTERfUERLX0pBVkFfUExBVEZPUk0KIAogQUxMX1BES19GVVNJT05fRklMRVMgOj0gJChhZGRwcmVmaXggJChQUk9EVUNUX09VVCkvLCAkKF9wZGtfZnVzaW9uX2ZpbGVfbGlzdCkpCiAKLWVuZGlmICMgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAKK2VuZGlmICMgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAgfHwgUERLX0ZVU0lPTl9QTEFURk9STV9ESVIKIAogaWZlcSAoJChUQVJHRVRfQlVJTERfUERLKSx0cnVlKQotJChpbmZvIFBESyBUQVJHRVRfQlVJTERfSkFWQV9TVVBQT1JUX0xFVkVMICQoVEFSR0VUX0JVSUxEX0pBVkFfU1VQUE9SVF9MRVZFTCkpCi1pZmVxICgkKFRBUkdFVF9CVUlMRF9QREtfSkFWQV9QTEFURk9STSksKQotCi0jIFNESyB1c2VkIGZvciBKYXZhIGJ1aWxkIHVuZGVyIFBESwotUERLX0JVSUxEX1NES19WRVJTSU9OIDo9ICQobGFzdHdvcmQgJChUQVJHRVRfQVZBSUxBQkxFX1NES19WRVJTSU9OUykpCi0kKGluZm8gUERLIEJ1aWxkIHVzZXMgU0RLICQoUERLX0JVSUxEX1NES19WRVJTSU9OKSkKLQotZWxzZSAjIFBES19KQVZBCi0KLSQoaW5mbyBQREsgQnVpbGQgdXNlcyB0aGUgY3VycmVudCBwbGF0Zm9ybSBBUEkpCi0KLWVuZGlmICMgUERLX0pBVkEKLQorICAkKGluZm8gUERLIFRBUkdFVF9CVUlMRF9KQVZBX1NVUFBPUlRfTEVWRUwgJChUQVJHRVRfQlVJTERfSkFWQV9TVVBQT1JUX0xFVkVMKSkKKyAgaWZlcSAoJChUQVJHRVRfQlVJTERfUERLX0pBVkFfUExBVEZPUk0pLCkKKyAgICAjIFNESyB1c2VkIGZvciBKYXZhIGJ1aWxkIHVuZGVyIFBESworICAgIFBES19CVUlMRF9TREtfVkVSU0lPTiA6PSAkKGxhc3R3b3JkICQoVEFSR0VUX0FWQUlMQUJMRV9TREtfVkVSU0lPTlMpKQorICAgICQoaW5mbyBQREsgQnVpbGQgdXNlcyBTREsgJChQREtfQlVJTERfU0RLX1ZFUlNJT04pKQorICBlbHNlICMgUERLX0pBVkEKKyAgICAkKGluZm8gUERLIEJ1aWxkIHVzZXMgdGhlIGN1cnJlbnQgcGxhdGZvcm0gQVBJKQorICBlbmRpZiAjIFBES19KQVZBCiBlbmRpZiAjIEJVSUxEX1BESwogCiBpZm5lcSAoLCQoZmlsdGVyIHBsYXRmb3JtIHBsYXRmb3JtLWphdmEsICQoTUFLRUNNREdPQUxTKSkkKGZpbHRlciB0cnVlLCQoVEFSR0VUX0JVSUxEX1BESykpKQotIyBmaWxlcyB1bmRlciAkKFBST0RVQ1RfT1VUKS9zeW1ib2xzIHRvIGhlbHAgZGVidWdnaW5nLgotIyBTb3VyY2Ugbm90IGluY2x1ZGVkIHRvIFBESyBkdWUgdG8gZGVwZW5kZW5jeSBpc3N1ZSwgc28gcHJvdmlkZSBzeW1ib2xzIGluc3RlYWQuCisgICMgZmlsZXMgdW5kZXIgJChQUk9EVUNUX09VVCkvc3ltYm9scyB0byBoZWxwIGRlYnVnZ2luZy4KKyAgIyBTb3VyY2Ugbm90IGluY2x1ZGVkIHRvIFBESyBkdWUgdG8gZGVwZW5kZW5jeSBpc3N1ZSwgc28gcHJvdmlkZSBzeW1ib2xzIGluc3RlYWQuCiAKLSMgV2UgbWF5IG5vdCBiZSBidWlsZGluZyBhbGwgb2YgdGhlbS4KLSMgVGhlIHBsYXRmb3JtLnppcCBqdXN0IHNpbGVudGx5IGlnbm9yZXMgdGhlIG5vbmV4aXN0ZW50IG9uZXMuCi1QREtfU1lNQk9MX0ZJTEVTX0xJU1QgOj0gXAotICAgIHN5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiBcCi0gICAgc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczY0CisgICMgV2UgbWF5IG5vdCBiZSBidWlsZGluZyBhbGwgb2YgdGhlbS4KKyAgIyBUaGUgcGxhdGZvcm0uemlwIGp1c3Qgc2lsZW50bHkgaWdub3JlcyB0aGUgbm9uZXhpc3RlbnQgb25lcy4KKyAgUERLX1NZTUJPTF9GSUxFU19MSVNUIDo9IFwKKyAgICAgIHN5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiBcCisgICAgICBzeXN0ZW0vYmluL2FwcF9wcm9jZXNzNjQKIAotaWZkZWYgUERLX0ZVU0lPTl9QTEFURk9STV9aSVAKLSMgc3ltYm9scyBzaG91bGQgYmUgZXhwbGljaXRseSBwdWxsZWQgZm9yIGZ1c2lvbiBidWlsZAotJChmb3JlYWNoIGYsJChmaWx0ZXIgJChQREtfU1lNQk9MX0ZJTEVTX0xJU1QpLCAkKF9wZGtfZnVzaW9uX2ZpbGVfbGlzdCkpLFwKLSAgJChldmFsICQoY2FsbCBhZGQtZGVwZW5kZW5jeSwkKFBST0RVQ1RfT1VUKS8kKGYpLCQoUFJPRFVDVF9PVVQpL3N5bWJvbHMvJChmKSkpKQotZW5kaWYgIyBQTEFURk9STV9aSVAKLWVuZGlmICMgcGxhdGZvcm0uemlwIGJ1aWxkIG9yIFBESworICBpZm5lcSAoLCQoUERLX0ZVU0lPTl9QTEFURk9STV9aSVApJChQREtfRlVTSU9OX1BMQVRGT1JNX0RJUikpCisgICAgIyBzeW1ib2xzIHNob3VsZCBiZSBleHBsaWNpdGx5IHB1bGxlZCBmb3IgZnVzaW9uIGJ1aWxkCisgICAgJChmb3JlYWNoIGYsJChmaWx0ZXIgJChQREtfU1lNQk9MX0ZJTEVTX0xJU1QpLCAkKF9wZGtfZnVzaW9uX2ZpbGVfbGlzdCkpLFwKKyAgICAgICQoZXZhbCAkKGNhbGwgYWRkLWRlcGVuZGVuY3ksJChQUk9EVUNUX09VVCkvJChmKSwkKFBST0RVQ1RfT1VUKS9zeW1ib2xzLyQoZikpKSkKKyAgZW5kaWYgIyBQTEFURk9STV9aSVAgfHwgUExBVEZPUk1fRElSCitlbmRpZiAjIHBsYXRmb3JtLnppcC9kaXIgYnVpbGQgb3IgUERLCmRpZmYgLS1naXQgYS9jb3JlL3Bka19mdXNpb25fbW9kdWxlcy5tayBiL2NvcmUvcGRrX2Z1c2lvbl9tb2R1bGVzLm1rCmluZGV4IDBjMDNmMzcuLjlhYWJkMGYgMTAwNjQ0Ci0tLSBhL2NvcmUvcGRrX2Z1c2lvbl9tb2R1bGVzLm1rCisrKyBiL2NvcmUvcGRrX2Z1c2lvbl9tb2R1bGVzLm1rCkBAIC0yLDEwICsyLDE2IEBACiAjIFdlIHVzZSB0aGVzZSBydWxlcyB0byByZWJ1aWxkIC5vZGV4IGZpbGVzIG9mIHRoZSAuamFyLy5hcGsgaW5zaWRlIHRoZSBwbGF0Zm9ybS56aXAuCiAjCiAKK2lmZGVmIFBES19GVVNJT05fUExBVEZPUk1fWklQCiBwZGtfZGV4cHJlb3B0X2NvbmZpZ19tayA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFUykvcGRrX2RleHByZW9wdF9jb25maWcubWsKIAogJChzaGVsbCBybSAtZiAkKHBka19kZXhwcmVvcHRfY29uZmlnX21rKSAmJiBta2RpciAtcCAkKGRpciAkKHBka19kZXhwcmVvcHRfY29uZmlnX21rKSkgJiYgXAogICAgICAgICB1bnppcCAtcW8gJChQREtfRlVTSU9OX1BMQVRGT1JNX1pJUCkgLWQgJChkaXIgJChwZGtfZGV4cHJlb3B0X2NvbmZpZ19taykpIHBka19kZXhwcmVvcHRfY29uZmlnLm1rIDI+L2Rldi9udWxsKQorZW5kaWYKKworaWZkZWYgUERLX0ZVU0lPTl9QTEFURk9STV9ESVIKK3Bka19kZXhwcmVvcHRfY29uZmlnX21rIDo9ICQoUERLX0ZVU0lPTl9QTEFURk9STV9ESVIpL3Bka19kZXhwcmVvcHRfY29uZmlnLm1rCitlbmRpZgogCiAtaW5jbHVkZSAkKHBka19kZXhwcmVvcHRfY29uZmlnX21rKQogCmRpZmYgLS1naXQgYS9jb3JlL3ByZWJ1aWx0X2ludGVybmFsLm1rIGIvY29yZS9wcmVidWlsdF9pbnRlcm5hbC5tawppbmRleCA0N2JkMWIyLi45NmUyNjEzIDEwMDY0NAotLS0gYS9jb3JlL3ByZWJ1aWx0X2ludGVybmFsLm1rCisrKyBiL2NvcmUvcHJlYnVpbHRfaW50ZXJuYWwubWsKQEAgLTIwLDE5ICsyMCwxOSBAQAogCiBpZmRlZiBMT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRQogICBteV9wcmVidWlsdF9zcmNfZmlsZSA6PSAkKExPQ0FMX1BSRUJVSUxUX01PRFVMRV9GSUxFKQorZWxzZSBpZmRlZiBMT0NBTF9TUkNfRklMRVNfJCgkKG15X3ByZWZpeCkkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQVJDSCkKKyAgbXlfcHJlYnVpbHRfc3JjX2ZpbGUgOj0gJChMT0NBTF9QQVRIKS8kKExPQ0FMX1NSQ19GSUxFU18kKCQobXlfcHJlZml4KSQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClBUkNIKSkKKyAgTE9DQUxfU1JDX0ZJTEVTXyQoJChteV9wcmVmaXgpJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKUFSQ0gpIDo9CitlbHNlIGlmZGVmIExPQ0FMX1NSQ19GSUxFU18kKG15XzMyXzY0X2JpdF9zdWZmaXgpCisgIG15X3ByZWJ1aWx0X3NyY19maWxlIDo9ICQoTE9DQUxfUEFUSCkvJChMT0NBTF9TUkNfRklMRVNfJChteV8zMl82NF9iaXRfc3VmZml4KSkKKyAgTE9DQUxfU1JDX0ZJTEVTXyQobXlfMzJfNjRfYml0X3N1ZmZpeCkgOj0KK2Vsc2UgaWZkZWYgTE9DQUxfU1JDX0ZJTEVTCisgIG15X3ByZWJ1aWx0X3NyY19maWxlIDo9ICQoTE9DQUxfUEFUSCkvJChMT0NBTF9TUkNfRklMRVMpCisgIExPQ0FMX1NSQ19GSUxFUyA6PQorZWxzZSBpZmRlZiBMT0NBTF9SRVBMQUNFX1BSRUJVSUxUX0FQS19JTlNUQUxMRUQKKyAgIyBUaGlzIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGJlbG93CiBlbHNlCi0gIGlmZGVmIExPQ0FMX1NSQ19GSUxFU18kKCQobXlfcHJlZml4KSQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClBUkNIKQotICAgIG15X3ByZWJ1aWx0X3NyY19maWxlIDo9ICQoTE9DQUxfUEFUSCkvJChMT0NBTF9TUkNfRklMRVNfJCgkKG15X3ByZWZpeCkkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQVJDSCkpCi0gICAgTE9DQUxfU1JDX0ZJTEVTXyQoJChteV9wcmVmaXgpJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKUFSQ0gpIDo9Ci0gIGVsc2UKLSAgICBpZmRlZiBMT0NBTF9TUkNfRklMRVNfJChteV8zMl82NF9iaXRfc3VmZml4KQotICAgICAgbXlfcHJlYnVpbHRfc3JjX2ZpbGUgOj0gJChMT0NBTF9QQVRIKS8kKExPQ0FMX1NSQ19GSUxFU18kKG15XzMyXzY0X2JpdF9zdWZmaXgpKQotICAgICAgTE9DQUxfU1JDX0ZJTEVTXyQobXlfMzJfNjRfYml0X3N1ZmZpeCkgOj0KLSAgICBlbHNlCi0gICAgICBteV9wcmVidWlsdF9zcmNfZmlsZSA6PSAkKExPQ0FMX1BBVEgpLyQoTE9DQUxfU1JDX0ZJTEVTKQotICAgICAgTE9DQUxfU1JDX0ZJTEVTIDo9Ci0gICAgZW5kaWYKLSAgZW5kaWYKKyAgJChjYWxsIHByZXR0eS1lcnJvcixObyBzb3VyY2UgZmlsZXMgc3BlY2lmaWVkKQogZW5kaWYKIAogTE9DQUxfQ0hFQ0tFRF9NT0RVTEUgOj0gJChteV9wcmVidWlsdF9zcmNfZmlsZSkKQEAgLTEwNSwxMyArMTA1LDM0IEBACiAgIHByZWJ1aWx0X21vZHVsZV9pc19kZXhfamF2YWxpYiA6PQogZW5kaWYKIAotaWZlcSAoJChMT0NBTF9NT0RVTEVfQ0xBU1MpLEFQUFMpCi1MT0NBTF9CVUlMVF9NT0RVTEVfU1RFTSA6PSBwYWNrYWdlLmFwawotaWZuZGVmIExPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTQotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9ICQoTE9DQUxfTU9EVUxFKS5hcGsKK2lmZGVmIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCitpZm5lcSAodHJ1ZSwkKExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFKSkKKyQoY2FsbCBwcmV0dHktZXJyb3IsIFVua25vd24gdmFsdWUgZm9yIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFICQoTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEUpKQogZW5kaWYKIGVuZGlmCiAKK2lmZXEgKCQoTE9DQUxfTU9EVUxFX0NMQVNTKSxBUFBTKQoraWZkZWYgTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEUKK0xPQ0FMX0JVSUxUX01PRFVMRV9TVEVNIDo9IHBhY2thZ2UuYXBrLmd6CitlbHNlCitMT0NBTF9CVUlMVF9NT0RVTEVfU1RFTSA6PSBwYWNrYWdlLmFwaworZW5kaWYgICMgTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEUKKworaWZuZGVmIExPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTQoraWZkZWYgTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEUKK1BBQ0tBR0VTLiQoTE9DQUxfTU9EVUxFKS5DT01QUkVTU0VEIDo9IGd6CitMT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gJChMT0NBTF9NT0RVTEUpLmFway5negorZWxzZQorTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9ICQoTE9DQUxfTU9EVUxFKS5hcGsKK2VuZGlmICAjIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCitlbmRpZiAgIyBMT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0KKworZWxzZSAgIyAkKExPQ0FMX01PRFVMRV9DTEFTUykgIT0gQVBQUykKK2lmZGVmIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCiskKGVycm9yICQoTE9DQUxfTU9EVUxFKSA6IExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFIGNhbiBvbmx5IGJlIGRlZmluZWQgZm9yIG1vZHVsZSBjbGFzcyBBUFBTKQorZW5kaWYgICMgTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEUKK2VuZGlmCisKIGlmbmVxICgkKGZpbHRlciB0cnVlIGtlZXBfc3ltYm9scyBub19kZWJ1Z2xpbmsgbWluaS1kZWJ1Zy1pbmZvLCQobXlfc3RyaXBfbW9kdWxlKSAkKG15X3BhY2tfbW9kdWxlX3JlbG9jYXRpb25zKSksKQogICBpZmRlZiBMT0NBTF9JU19IT1NUX01PRFVMRQogICAgICQoZXJyb3IgQ2Fubm90IHN0cmlwL3BhY2sgaG9zdCBtb2R1bGUgTE9DQUxfUEFUSD0kKExPQ0FMX1BBVEgpKQpAQCAtMTUyLDggKzE3MywxMCBAQAogZW5kaWYKIGV4cG9ydF9jZmxhZ3MgOj0KIAoraW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYWxsb3dlZF9uZGtfdHlwZXMubWsKKwogaWZkZWYgTE9DQUxfU0RLX1ZFUlNJT04KLW15X2xpbmtfdHlwZSA6PSBuYXRpdmU6bmRrCitteV9saW5rX3R5cGUgOj0gbmF0aXZlOm5kazokKG15X25ka19zdGxfZmFtaWx5KTokKG15X25ka19zdGxfbGlua190eXBlKQogZWxzZSBpZmRlZiBMT0NBTF9VU0VfVk5ESwogICAgIF9uYW1lIDo9ICQocGF0c3Vic3QgJS52ZW5kb3IsJSwkKExPQ0FMX01PRFVMRSkpCiAgICAgaWZuZXEgKCQoZmlsdGVyICQoX25hbWUpLCQoVk5ES19DT1JFX0xJQlJBUklFUykgJChWTkRLX1NBTUVQUk9DRVNTX0xJQlJBUklFUykgJChMTE5ES19MSUJSQVJJRVMpKSwpCkBAIC0yNzYsNiArMjk5LDggQEAKIGVuZGlmCiBlbmRpZgogCitkZXhfcHJlb3B0X3Byb2ZpbGVfc3JjX2ZpbGUgOj0gJChteV9wcmVidWlsdF9zcmNfZmlsZSkKKwogcnNfY29tcGF0aWJpbGl0eV9qbmlfbGlicyA6PQogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvaW5zdGFsbF9qbmlfbGlicy5tawogCkBAIC0zMjgsNiArMzUzLDEyIEBACiBlbmRpZgogZW5kaWYKIAorIyBJZiB0aGUgbW9kdWxlIGlzIGEgY29tcHJlc3NlZCBtb2R1bGUsIHdlIGRvbid0IHByZS1vcHQgaXQgYmVjYXVzZSBpdHMgZmluYWwKKyMgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIHdpbGwgYmUgdGhlIGRhdGEgcGFydGl0aW9uLgoraWZkZWYgTE9DQUxfQ09NUFJFU1NFRF9NT0RVTEUKK0xPQ0FMX0RFWF9QUkVPUFQgOj0gZmFsc2UKK2VuZGlmCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBkZWZpbmVzIGJ1aWx0X29kZXggYWxvbmcgd2l0aCBydWxlIHRvIGluc3RhbGwgb2RleAogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvZGV4X3ByZW9wdF9vZGV4X2luc3RhbGwubWsKQEAgLTM1MiwxOCArMzgzLDE2IEBACiBlbmRpZgogJChidWlsdF9tb2R1bGUpOiBQUklWQVRFX0VNQkVEREVEX0pOSV9MSUJTIDo9ICQoZW1iZWRkZWRfcHJlYnVpbHRfam5pX2xpYnMpCiAKK2lmZGVmIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCiskKGJ1aWx0X21vZHVsZSkgOiAkKE1JTklHWklQKQorZW5kaWYKKwogJChidWlsdF9tb2R1bGUpIDogJChteV9wcmVidWlsdF9zcmNfZmlsZSkgfCAkKFpJUEFMSUdOKSAkKFNJR05BUEtfSkFSKQogCSQodHJhbnNmb3JtLXByZWJ1aWx0LXRvLXRhcmdldCkKIAkkKHVuY29tcHJlc3Mtc2hhcmVkLWxpYnMpCi1pZm5lcSAodHJ1ZSwkKERPTlRfVU5DT01QUkVTU19QUklWX0FQUFNfREVYUykpCi1pZmVxICh0cnVlLCQoTE9DQUxfUFJJVklMRUdFRF9NT0RVTEUpKQoraWZlcSAodHJ1ZSwgJChMT0NBTF9VTkNPTVBSRVNTX0RFWCkpCiAJJCh1bmNvbXByZXNzLWRleHMpCi1lbHNlCi0gIGlmbmVxICgsJChmaWx0ZXIgJChQUk9EVUNUX0xPQURFRF9CWV9QUklWSUxFR0VEX01PRFVMRVMpLCAkKExPQ0FMX01PRFVMRSkpKQotCSAgJCh1bmNvbXByZXNzLWRleHMpCi0gIGVuZGlmICAjIFBST0RVQ1RfTE9BREVEX0JZX1BSSVZJTEVHRURfTU9EVUxFUwotZW5kaWYgICMgTE9DQUxfUFJJVklMRUdFRF9NT0RVTEUKLWVuZGlmICAjIERPTlRfVU5DT01QUkVTU19QUklWX0FQUFNfREVYUworZW5kaWYgICMgTE9DQUxfVU5DT01QUkVTU19ERVgKIGlmZGVmIExPQ0FMX0RFWF9QUkVPUFQKIGlmbmVxICgkKEJVSUxEX1BMQVRGT1JNX1pJUCksKQogCUAjIEtlZXAgYSBjb3B5IG9mIGFwayB3aXRoIGNsYXNzZXMuZGV4IHVuc3RyaXBwZWQKQEAgLTM4MiwxOCArNDExLDMzIEBACiBlbHNlICAjIExPQ0FMX0NFUlRJRklDQVRFID09IFBSRVNJR05FRAogCSQoYWxpZ24tcGFja2FnZSkKIGVuZGlmICAjIExPQ0FMX0NFUlRJRklDQVRFCitpZmRlZiBMT0NBTF9DT01QUkVTU0VEX01PRFVMRQorCSQoY29tcHJlc3MtcGFja2FnZSkKK2VuZGlmICAjIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCiBlbmRpZiAgIyAhIExPQ0FMX1JFUExBQ0VfUFJFQlVJTFRfQVBLX0lOU1RBTExFRAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyBSdWxlIHRvIGJ1aWxkIHRoZSBvZGV4IGZpbGUKKyMjIFJ1bGUgdG8gYnVpbGQgdGhlIG9kZXggZmlsZS4KKyMgSW4gY2FzZSB3ZSBkb24ndCBzdHJpcCB0aGUgYnVpbHQgbW9kdWxlLCB1c2UgaXQsIGFzIGRleHByZW9wdAorIyBjYW4gZG8gb3B0aW1pemF0aW9ucyBiYXNlZCBvbiB3aGV0aGVyIHRoZSBidWlsdCBtb2R1bGUgb25seQorIyBjb250YWlucyB1bmNvbXByZXNzZWQgZGV4IGNvZGUuCiBpZmRlZiBMT0NBTF9ERVhfUFJFT1BUCitpZmVxIChub3N0cmlwcGluZywkKExPQ0FMX0RFWF9QUkVPUFQpKQorJChidWlsdF9vZGV4KSA6ICQoYnVpbHRfbW9kdWxlKQorCSQoY2FsbCBkZXhwcmVvcHQtb25lLWZpbGUsJDwsJEApCitlbHNlCiAkKGJ1aWx0X29kZXgpIDogJChteV9wcmVidWlsdF9zcmNfZmlsZSkKIAkkKGNhbGwgZGV4cHJlb3B0LW9uZS1maWxlLCQ8LCRAKQogZW5kaWYKK2VuZGlmCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIEluc3RhbGwgc3BsaXQgYXBrcy4KIGlmZGVmIExPQ0FMX1BBQ0tBR0VfU1BMSVRTCitpZmRlZiBMT0NBTF9DT01QUkVTU0VEX01PRFVMRQorJChlcnJvciAkKExPQ0FMX01PRFVMRSk6IExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGZvciBzcGxpdCBpbnN0YWxscykKK2VuZGlmICAjIExPQ0FMX0NPTVBSRVNTRURfTU9EVUxFCisKICMgTE9DQUxfUEFDS0FHRV9TUExJVFMgaXMgYSBsaXN0IG9mIGFwa3MgdG8gYmUgaW5zdGFsbGVkLgogYnVpbHRfYXBrX3NwbGl0cyA6PSAkKGFkZHByZWZpeCAkKGludGVybWVkaWF0ZXMpLywkKG5vdGRpciAkKExPQ0FMX1BBQ0tBR0VfU1BMSVRTKSkpCiBpbnN0YWxsZWRfYXBrX3NwbGl0cyA6PSAkKGFkZHByZWZpeCAkKG15X21vZHVsZV9wYXRoKS8sJChub3RkaXIgJChMT0NBTF9QQUNLQUdFX1NQTElUUykpKQpAQCAtNTAwLDYgKzU0NCwxMCBAQAogCiBpZmVxICgkKExPQ0FMX1NES19WRVJTSU9OKSxzeXN0ZW1fY3VycmVudCkKIG15X2xpbmtfdHlwZSA6PSBqYXZhOnN5c3RlbQorZWxzZSBpZm5lcSAoLCQoY2FsbCBoYXMtc3lzdGVtLXNkay12ZXJzaW9uLCQoTE9DQUxfU0RLX1ZFUlNJT04pKSkKK215X2xpbmtfdHlwZSA6PSBqYXZhOnN5c3RlbQorZWxzZSBpZmVxICgkKExPQ0FMX1NES19WRVJTSU9OKSxjb3JlX2N1cnJlbnQpCitteV9saW5rX3R5cGUgOj0gamF2YTpjb3JlCiBlbHNlIGlmbmVxICgkKExPQ0FMX1NES19WRVJTSU9OKSwpCiBteV9saW5rX3R5cGUgOj0gamF2YTpzZGsKIGVsc2UKQEAgLTUyNCwxMiArNTcyLDE2IEBACiBpZm5lcSAoJChteV9zcmNfYWFyKSwpCiAjIFRoaXMgaXMgLmFhciBmaWxlLCBhcmNoaXZlIG9mIGNsYXNzZXMuamFyIGFuZCBBbmRyb2lkIHJlc291cmNlcy4KIG15X3NyY19qYXIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvYWFyL2NsYXNzZXMuamFyCitteV9zcmNfcHJvZ3VhcmRfb3B0aW9ucyA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9hYXIvcHJvZ3VhcmQudHh0CiAKKyQobXlfc3JjX2phcikgOiAuS0FUSV9JTVBMSUNJVF9PVVRQVVRTIDo9ICQobXlfc3JjX3Byb2d1YXJkX29wdGlvbnMpCiAkKG15X3NyY19qYXIpIDogJChteV9zcmNfYWFyKQogCSQoaGlkZSkgcm0gLXJmICQoZGlyICRAKSAmJiBta2RpciAtcCAkKGRpciAkQCkgJChkaXIgJEApL3JlcwogCSQoaGlkZSkgdW56aXAgLXFvIC1kICQoZGlyICRAKSAkPAogCSMgTWFrZSBzdXJlIHRoZSBleHRyYWN0ZWQgY2xhc3Nlcy5qYXIgaGFzIGEgbmV3IHRpbWVzdGFtcC4KIAkkKGhpZGUpIHRvdWNoICRACisJIyBNYWtlIHN1cmUgdGhlIHByb2d1YXJkIGZpbGUgZXhpc3RzIGFuZCBoYXMgYSBuZXcgdGltZXN0YW1wLgorCSQoaGlkZSkgdG91Y2ggJChkaXIgJEApL3Byb2d1YXJkLnR4dAogCiBlbmRpZgogCkBAIC01NTMsMjQgKzYwNSwyNCBAQAogCiBpZmRlZiBMT0NBTF9VU0VfQUFQVDIKIGlmbmVxICgkKG15X3NyY19hYXIpLCkKKworJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvZXhwb3J0X3Byb2d1YXJkX2ZsYWdzIDogJChteV9zcmNfcHJvZ3VhcmRfb3B0aW9ucykKKwkkKHRyYW5zZm9ybS1wcmVidWlsdC10by10YXJnZXQpCisKIExPQ0FMX1NES19SRVNfVkVSU0lPTjo9JChzdHJpcCAkKExPQ0FMX1NES19SRVNfVkVSU0lPTikpCiBpZmVxICgkKExPQ0FMX1NES19SRVNfVkVSU0lPTiksKQogICBMT0NBTF9TREtfUkVTX1ZFUlNJT046PSQoTE9DQUxfU0RLX1ZFUlNJT04pCiBlbmRpZgogCiBmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0IDo9Ci1mcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0X2RlcHMgOj0KICMgUGxlYXNlIHJlZmVyIHRvIHBhY2thZ2UubWsKIGlmbmVxICgkKExPQ0FMX05PX1NUQU5EQVJEX0xJQlJBUklFUyksdHJ1ZSkKIGlmbmVxICgkKGZpbHRlci1vdXQgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsJChMT0NBTF9TREtfUkVTX1ZFUlNJT04pKSQoaWYgJChUQVJHRVRfQlVJTERfQVBQUyksJChmaWx0ZXIgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsJChMT0NBTF9TREtfUkVTX1ZFUlNJT04pKSksKQogZnJhbWV3b3JrX3Jlc19wYWNrYWdlX2V4cG9ydCA6PSBcCiAgICAgJChISVNUT1JJQ0FMX1NES19WRVJTSU9OU19ST09UKS8kKExPQ0FMX1NES19SRVNfVkVSU0lPTikvYW5kcm9pZC5qYXIKLWZyYW1ld29ya19yZXNfcGFja2FnZV9leHBvcnRfZGVwcyA6PSAkKGZyYW1ld29ya19yZXNfcGFja2FnZV9leHBvcnQpCiBlbHNlCiBmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0IDo9IFwKICAgICAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEFQUFMsZnJhbWV3b3JrLXJlcywsQ09NTU9OKS9wYWNrYWdlLWV4cG9ydC5hcGsKLWZyYW1ld29ya19yZXNfcGFja2FnZV9leHBvcnRfZGVwcyA6PSBcCi0gICAgJChkaXIgJChmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0KSlzcmMvUi5zdGFtcAogZW5kaWYKIGVuZGlmCiAKQEAgLTU4OCw3ICs2NDAsNyBAQAogJChteV9yZXNfcGFja2FnZSk6IFBSSVZBVEVfUFJPRFVDVF9BQVBUX0NPTkZJRyA6PQogJChteV9yZXNfcGFja2FnZSk6IFBSSVZBVEVfUFJPRFVDVF9BQVBUX1BSRUZfQ09ORklHIDo9CiAkKG15X3Jlc19wYWNrYWdlKTogUFJJVkFURV9UQVJHRVRfQUFQVF9DSEFSQUNURVJJU1RJQ1MgOj0KLSQobXlfcmVzX3BhY2thZ2UpIDogJChmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0X2RlcHMpCiskKG15X3Jlc19wYWNrYWdlKSA6ICQoZnJhbWV3b3JrX3Jlc19wYWNrYWdlX2V4cG9ydCkKIAogZnVsbF9hbmRyb2lkX21hbmlmZXN0IDo9CiBteV9yZXNfcmVzb3VyY2VzIDo9CmRpZmYgLS1naXQgYS9jb3JlL3Byb2R1Y3QtZ3JhcGgubWsgYi9jb3JlL3Byb2R1Y3QtZ3JhcGgubWsKaW5kZXggMjY4Njg4YS4uNTc2ZDE0ZCAxMDA2NDQKLS0tIGEvY29yZS9wcm9kdWN0LWdyYXBoLm1rCisrKyBiL2NvcmUvcHJvZHVjdC1ncmFwaC5tawpAQCAtNzcsNyArNzcsNyBAQAogCSAgJChmb3JlYWNoIGQsJChQUk9EVUNUUy4kKHN0cmlwICQocCkpLklOSEVSSVRTX0ZST00pLCBlY2hvIFwiJChkKVwiIC1cPiBcIiQocClcIiA+PiAkQC5pbjspKQogCSQoZm9yZWFjaCBwLCQoUFJJVkFURV9QUk9EVUNUUyksJChjYWxsIGVtaXQtcHJvZHVjdC1ub2RlLXByb3BzLCQocCksJEAuaW4pKQogCSQoaGlkZSkgZWNobyAnfScgPj4gJEAuaW4KLQkkKGhpZGUpIC4vYnVpbGQvdG9vbHMvZmlsdGVyLXByb2R1Y3QtZ3JhcGgucHkgJChQUklWQVRFX1BST0RVQ1RTX0ZJTFRFUikgPCAkQC5pbiA+ICRACisJJChoaWRlKSBidWlsZC9tYWtlL3Rvb2xzL2ZpbHRlci1wcm9kdWN0LWdyYXBoLnB5ICQoUFJJVkFURV9QUk9EVUNUU19GSUxURVIpIDwgJEAuaW4gPiAkQAogCiAjIEV2YWx1YXRlcyB0byB0aGUgbmFtZSBvZiB0aGUgcHJvZHVjdCBmaWxlCiAjICQoMSkgcHJvZHVjdCBmaWxlCkBAIC0xMDQsNiArMTA0LDcgQEAKIAkkKGhpZGUpIGVjaG8gJ1BST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTPSQkKFBST0RVQ1RTLiQoc3RyaXAgJCgxKSkuUFJPRFVDVF9QUk9QRVJUWV9PVkVSUklERVMpJyA+PiAkJEAKIAkkKGhpZGUpIGVjaG8gJ1BST0RVQ1RfREVGQVVMVF9QUk9QRVJUWV9PVkVSUklERVM9JCQoUFJPRFVDVFMuJChzdHJpcCAkKDEpKS5QUk9EVUNUX0RFRkFVTFRfUFJPUEVSVFlfT1ZFUlJJREVTKScgPj4gJCRACiAJJChoaWRlKSBlY2hvICdQUk9EVUNUX1NZU1RFTV9ERUZBVUxUX1BST1BFUlRJRVM9JCQoUFJPRFVDVFMuJChzdHJpcCAkKDEpKS5QUk9EVUNUX1NZU1RFTV9ERUZBVUxUX1BST1BFUlRJRVMpJyA+PiAkJEAKKwkkKGhpZGUpIGVjaG8gJ1BST0RVQ1RfUFJPRFVDVF9QUk9QRVJUSUVTPSQkKFBST0RVQ1RTLiQoc3RyaXAgJCgxKSkuUFJPRFVDVF9QUk9EVUNUX1BST1BFUlRJRVMpJyA+PiAkJEAKIAkkKGhpZGUpIGVjaG8gJ1BST0RVQ1RfQ0hBUkFDVEVSSVNUSUNTPSQkKFBST0RVQ1RTLiQoc3RyaXAgJCgxKSkuUFJPRFVDVF9DSEFSQUNURVJJU1RJQ1MpJyA+PiAkJEAKIAkkKGhpZGUpIGVjaG8gJ1BST0RVQ1RfQ09QWV9GSUxFUz0kJChQUk9EVUNUUy4kKHN0cmlwICQoMSkpLlBST0RVQ1RfQ09QWV9GSUxFUyknID4+ICQkQAogCSQoaGlkZSkgZWNobyAnUFJPRFVDVF9PVEFfUFVCTElDX0tFWVM9JCQoUFJPRFVDVFMuJChzdHJpcCAkKDEpKS5QUk9EVUNUX09UQV9QVUJMSUNfS0VZUyknID4+ICQkQApAQCAtMTIxLDExICsxMjIsMTEgQEAKIAogJChjYWxsIHByb2R1Y3QtZGVidWctZmlsZW5hbWUsICQocCkpOiBcCiAJCQkkKE9VVF9ESVIpL3Byb2R1Y3RzLyQoc3RyaXAgJCgxKSkudHh0IFwKLQkJCWJ1aWxkL3Rvb2xzL3Byb2R1Y3RfZGVidWcucHkgXAorCQkJYnVpbGQvbWFrZS90b29scy9wcm9kdWN0X2RlYnVnLnB5IFwKIAkJCSQodGhpc19tYWtlZmlsZSkKIAlAZWNobyBQcm9kdWN0IGRlYnVnIGh0bWwgZmlsZTogJCRACiAJJChoaWRlKSBta2RpciAtcCAkJChkaXIgJCRAKQotCSQoaGlkZSkgY2F0ICQkPCB8IGJ1aWxkL3Rvb2xzL3Byb2R1Y3RfZGVidWcucHkgPiAkJEAKKwkkKGhpZGUpIGNhdCAkJDwgfCBidWlsZC9tYWtlL3Rvb2xzL3Byb2R1Y3RfZGVidWcucHkgPiAkJEAKIGVuZGVmCiAKIHByb2R1Y3RfZGVidWdfZmlsZXM6PQpkaWZmIC0tZ2l0IGEvY29yZS9wcm9kdWN0Lm1rIGIvY29yZS9wcm9kdWN0Lm1rCmluZGV4IGMwMWE4NTYuLjE5ZWRlODIgMTAwNjQ0Ci0tLSBhL2NvcmUvcHJvZHVjdC5taworKysgYi9jb3JlL3Byb2R1Y3QubWsKQEAgLTg4LDYgKzg4LDcgQEAKICAgICBQUk9EVUNUX0JSQU5EIFwKICAgICBQUk9EVUNUX1BST1BFUlRZX09WRVJSSURFUyBcCiAgICAgUFJPRFVDVF9ERUZBVUxUX1BST1BFUlRZX09WRVJSSURFUyBcCisgICAgUFJPRFVDVF9QUk9EVUNUX1BST1BFUlRJRVMgXAogICAgIFBST0RVQ1RfQ0hBUkFDVEVSSVNUSUNTIFwKICAgICBQUk9EVUNUX0NPUFlfRklMRVMgXAogICAgIFBST0RVQ1RfT1RBX1BVQkxJQ19LRVlTIFwKQEAgLTEwMiw2ICsxMDMsNyBAQAogICAgIFBST0RVQ1RfU0RLX0FERE9OX0NPUFlfTU9EVUxFUyBcCiAgICAgUFJPRFVDVF9TREtfQURET05fRE9DX01PRFVMRVMgXAogICAgIFBST0RVQ1RfU0RLX0FERE9OX1NZU19JTUdfU09VUkNFX1BST1AgXAorICAgIFBST0RVQ1RfU09PTkdfTkFNRVNQQUNFUyBcCiAgICAgUFJPRFVDVF9ERUZBVUxUX1dJRklfQ0hBTk5FTFMgXAogICAgIFBST0RVQ1RfREVGQVVMVF9ERVZfQ0VSVElGSUNBVEUgXAogICAgIFBST0RVQ1RfUkVTVFJJQ1RfVkVORE9SX0ZJTEVTIFwKQEAgLTEyNCwxNyArMTI2LDIxIEBACiAgICAgUFJPRFVDVF9WRVJJVFlfU0lHTklOR19LRVkgXAogICAgIFBST0RVQ1RfU1lTVEVNX1ZFUklUWV9QQVJUSVRJT04gXAogICAgIFBST0RVQ1RfVkVORE9SX1ZFUklUWV9QQVJUSVRJT04gXAorICAgIFBST0RVQ1RfUFJPRFVDVF9WRVJJVFlfUEFSVElUSU9OIFwKICAgICBQUk9EVUNUX1NZU1RFTV9TRVJWRVJfREVCVUdfSU5GTyBcCiAgICAgUFJPRFVDVF9ERVhfUFJFT1BUX01PRFVMRV9DT05GSUdTIFwKKyAgICBQUk9EVUNUX0RFWF9QUkVPUFRfREVGQVVMVF9DT01QSUxFUl9GSUxURVIgXAogICAgIFBST0RVQ1RfREVYX1BSRU9QVF9ERUZBVUxUX0ZMQUdTIFwKICAgICBQUk9EVUNUX0RFWF9QUkVPUFRfQk9PVF9GTEFHUyBcCiAgICAgUFJPRFVDVF9ERVhfUFJFT1BUX1BST0ZJTEVfRElSIFwKICAgICBQUk9EVUNUX0RFWF9QUkVPUFRfQk9PVF9JTUFHRV9QUk9GSUxFX0xPQ0FUSU9OIFwKKyAgICBQUk9EVUNUX0RFWF9QUkVPUFRfR0VORVJBVEVfRE1fRklMRVMgXAogICAgIFBST0RVQ1RfVVNFX1BST0ZJTEVfRk9SX0JPT1RfSU1BR0UgXAogICAgIFBST0RVQ1RfU1lTVEVNX1NFUlZFUl9DT01QSUxFUl9GSUxURVIgXAogICAgIFBST0RVQ1RfU0FOSVRJWkVSX01PRFVMRV9DT05GSUdTIFwKICAgICBQUk9EVUNUX1NZU1RFTV9CQVNFX0ZTX1BBVEggXAogICAgIFBST0RVQ1RfVkVORE9SX0JBU0VfRlNfUEFUSCBcCisgICAgUFJPRFVDVF9QUk9EVUNUX0JBU0VfRlNfUEFUSCBcCiAgICAgUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwgXAogICAgIFZFTkRPUl9QUk9EVUNUX1JFU1RSSUNUX1ZFTkRPUl9GSUxFUyBcCiAgICAgVkVORE9SX0VYQ0VQVElPTl9NT0RVTEVTIFwKQEAgLTE0OCw2ICsxNTQsOCBAQAogICAgIFBST0RVQ1RfQURCX0tFWVMgXAogICAgIFBST0RVQ1RfQ0ZJX0lOQ0xVREVfUEFUSFMgXAogICAgIFBST0RVQ1RfQ0ZJX0VYQ0xVREVfUEFUSFMgXAorICAgIFBST0RVQ1RfQ09NUEFUSUJMRV9QUk9QRVJUWV9PVkVSUklERSBcCisgICAgUFJPRFVDVF9BQ1RJT05BQkxFX0NPTVBBVElCTEVfUFJPUEVSVFlfRElTQUJMRSBcCiAKIGRlZmluZSBkdW1wLXByb2R1Y3QKICQoaW5mbyA9PT09ICQoMSkgPT09PSlcCkBAIC0zMDEsMTQgKzMwOSwxNSBAQAogCUJPQVJEX0ZMQVNIX0JMT0NLX1NJWkUgXAogCUJPQVJEX1ZFTkRPUklNQUdFX1BBUlRJVElPTl9TSVpFIFwKIAlCT0FSRF9WRU5ET1JJTUFHRV9GSUxFX1NZU1RFTV9UWVBFIFwKKwlCT0FSRF9QUk9EVUNUSU1BR0VfUEFSVElUSU9OX1NJWkUgXAorCUJPQVJEX1BST0RVQ1RJTUFHRV9GSUxFX1NZU1RFTV9UWVBFIFwKIAlCT0FSRF9JTlNUQUxMRVJfQ01ETElORSBcCiAKIAogX3Byb2R1Y3Rfc3Rhc2hfdmFyX2xpc3QgKz0gXAogCURFRkFVTFRfU1lTVEVNX0RFVl9DRVJUSUZJQ0FURSBcCiAJV0lUSF9ERVhQUkVPUFQgXAotCVdJVEhfREVYUFJFT1BUX0JPT1RfSU1HX0FORF9TWVNURU1fU0VSVkVSX09OTFkgXAotCVdJVEhfREVYUFJFT1BUX0FQUF9JTUFHRQorCVdJVEhfREVYUFJFT1BUX0JPT1RfSU1HX0FORF9TWVNURU1fU0VSVkVSX09OTFkKIAogIwogIyBNYXJrIHRoZSB2YXJpYWJsZXMgaW4gX3Byb2R1Y3Rfc3Rhc2hfdmFyX2xpc3QgYXMgcmVhZG9ubHkKZGlmZiAtLWdpdCBhL2NvcmUvcHJvZHVjdF9jb25maWcubWsgYi9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rCmluZGV4IDRlMmQ1YWUuLjI2MjBhZGIgMTAwNjQ0Ci0tLSBhL2NvcmUvcHJvZHVjdF9jb25maWcubWsKKysrIGIvY29yZS9wcm9kdWN0X2NvbmZpZy5tawpAQCAtMzY1LDYgKzM2NSwxMyBAQAogICAgICQoc3RyaXAgJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfU1lTVEVNX0RFRkFVTFRfUFJPUEVSVElFUykpCiAuS0FUSV9SRUFET05MWSA6PSBQUk9EVUNUX1NZU1RFTV9ERUZBVUxUX1BST1BFUlRJRVMKIAorIyBBIGxpc3Qgb2YgcHJvcGVydHkgYXNzaWdubWVudHMsIGxpa2UgImtleSA9IHZhbHVlIiwgd2l0aCB6ZXJvIG9yIG1vcmUKKyMgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIG9uIGVpdGhlciBzaWRlIG9mIHRoZSAnPScuCisjIHVzZWQgZm9yIGFkZGluZyBwcm9wZXJ0aWVzIHRvIGJ1aWxkLnByb3Agb2YgcHJvZHVjdCBwYXJ0aXRpb24KK1BST0RVQ1RfUFJPRFVDVF9QUk9QRVJUSUVTIDo9IFwKKyAgICAkKHN0cmlwICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1BST0RVQ1RfUFJPUEVSVElFUykpCisuS0FUSV9SRUFET05MWSA6PSBQUk9EVUNUX1BST0RVQ1RfUFJPUEVSVElFUworCiAjIFNob3VsZCB3ZSB1c2UgdGhlIGRlZmF1bHQgcmVzb3VyY2VzIG9yIGFkZCBhbnkgcHJvZHVjdCBzcGVjaWZpYyBvdmVybGF5cwogUFJPRFVDVF9QQUNLQUdFX09WRVJMQVlTIDo9IFwKICAgICAkKHN0cmlwICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX1BBQ0tBR0VfT1ZFUkxBWVMpKQpAQCAtMzg1LDggKzM5MiwxMiBAQAogUFJPRFVDVF9FWFRSQV9SRUNPVkVSWV9LRVlTIDo9ICQoc29ydCBcCiAgICAgJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfRVhUUkFfUkVDT1ZFUllfS0VZUykpCiAKK1BST0RVQ1RfREVYX1BSRU9QVF9ERUZBVUxUX0NPTVBJTEVSX0ZJTFRFUiA6PSBcCisgICAgJChzdHJpcCAkKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9ERVhfUFJFT1BUX0RFRkFVTFRfQ09NUElMRVJfRklMVEVSKSkKIFBST0RVQ1RfREVYX1BSRU9QVF9ERUZBVUxUX0ZMQUdTIDo9IFwKICAgICAkKHN0cmlwICQoUFJPRFVDVFMuJChJTlRFUk5BTF9QUk9EVUNUKS5QUk9EVUNUX0RFWF9QUkVPUFRfREVGQVVMVF9GTEFHUykpCitQUk9EVUNUX0RFWF9QUkVPUFRfR0VORVJBVEVfRE1fRklMRVMgOj0gXAorICAgICQoc3RyaXAgJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfREVYX1BSRU9QVF9HRU5FUkFURV9ETV9GSUxFUykpCiBQUk9EVUNUX0RFWF9QUkVPUFRfQk9PVF9GTEFHUyA6PSBcCiAgICAgJChzdHJpcCAkKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9ERVhfUFJFT1BUX0JPT1RfRkxBR1MpKQogUFJPRFVDVF9ERVhfUFJFT1BUX1BST0ZJTEVfRElSIDo9IFwKQEAgLTQ4MCwzICs0OTEsMTUgQEAKICMgV2hldGhlciBhbnkgcGF0aHMgc2hvdWxkIGhhdmUgQ0ZJIGVuYWJsZWQgZm9yIGNvbXBvbmVudHMKIFBST0RVQ1RfQ0ZJX0lOQ0xVREVfUEFUSFMgOj0gXAogICAgICQoc3RyaXAgJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfQ0ZJX0lOQ0xVREVfUEFUSFMpKQorCisjIHdoaWNoIFNvb25nIG5hbWVzcGFjZXMgdG8gZXhwb3J0IHRvIE1ha2UKK1BST0RVQ1RfU09PTkdfTkFNRVNQQUNFUyA6PSBcCisgICAgJChzdHJpcCAkKFBST0RVQ1RTLiQoSU5URVJOQUxfUFJPRFVDVCkuUFJPRFVDVF9TT09OR19OQU1FU1BBQ0VTKSkKKworIyBBIGZsYWcgdG8gb3ZlcnJpZGUgUFJPRFVDVF9DT01QQVRJQkxFX1BST1BFUlRZCitQUk9EVUNUX0NPTVBBVElCTEVfUFJPUEVSVFlfT1ZFUlJJREUgOj0gXAorICAgICQoc3RyaXAgJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfQ09NUEFUSUJMRV9QUk9QRVJUWV9PVkVSUklERSkpCisKKyMgV2hldGhlciB0aGUgd2hpdGVsaXN0IG9mIGFjdGlvbmFibGUgY29tcGF0aWJsZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBkaXNhYmxlZCBvciBub3QKK1BST0RVQ1RfQUNUSU9OQUJMRV9DT01QQVRJQkxFX1BST1BFUlRZX0RJU0FCTEUgOj0gXAorICAgICQoc3RyaXAgJChQUk9EVUNUUy4kKElOVEVSTkFMX1BST0RVQ1QpLlBST0RVQ1RfQUNUSU9OQUJMRV9DT01QQVRJQkxFX1BST1BFUlRZX0RJU0FCTEUpKQpkaWZmIC0tZ2l0IGEvY29yZS9wcm9ndWFyZC5lbW1hLmZsYWdzIGIvY29yZS9wcm9ndWFyZC5lbW1hLmZsYWdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjk0MDg2Li4wMDAwMDAwCi0tLSBhL2NvcmUvcHJvZ3VhcmQuZW1tYS5mbGFncworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBLZWVwIGV2ZXJ5dGhpbmcgZm9yIHRoZSBlbW1hIGNsYXNzZXMKLS1rZWVwIGNsYXNzIGNvbS52bGFkaXVtLioqIHsKLSAgKjsKLX0KZGlmZiAtLWdpdCBhL2NvcmUvcHJvZ3VhcmRfdGVzdHMuZmxhZ3MgYi9jb3JlL3Byb2d1YXJkX3Rlc3RzLmZsYWdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjg0MGJjLi4wMDAwMDAwCi0tLSBhL2NvcmUvcHJvZ3VhcmRfdGVzdHMuZmxhZ3MKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIEtlZXAgZXZlcnl0aGluZyBmb3IgdGVzdHMKLSMgVGhpcyBmbGFnIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBtYWtlZmlsZXMgYW5kIGlzIHNldCBmb3IgdGVzdHMgYnkgZGVmYXVsdC4KLSMtZG9udHNocmluawotCi0jIEJ1dCB3ZSBtYXkgd2FudCB0byBvYmZ1c2NhdGUgaWYgdGhlIG1haW4gYXBwIGdldHMgb2JmdXNjYXRlZC4KLSMgVGhpcyBmbGFnIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBtYWtlZmlsZXMuCi0jLWRvbnRvYmZ1c2NhdGUKLQotIy1rZWVwIGNsYXNzICogZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UgewotIyAgcHVibGljIHZvaWQgdGVzdCooKTsKLSN9Ci0KLSMta2VlcGNsYXNzZXN3aXRobWVtYmVycyBjbGFzcyAqIHsKLSMgIHB1YmxpYyBzdGF0aWMgdm9pZCBydW4oKTsKLSMgIHB1YmxpYyBzdGF0aWMganVuaXQuZnJhbWV3b3JrLlRlc3Qgc3VpdGUoKTsKLSN9Ci0KLSMgc29tZSBBbGxUZXN0cyBkb24ndCBpbmNsdWRlIHJ1bigpLgotIy1rZWVwY2xhc3Nlc3dpdGhtZW1iZXJzIGNsYXNzICogewotIyAgcHVibGljIHN0YXRpYyBqdW5pdC5mcmFtZXdvcmsuVGVzdCBzdWl0ZSgpOwotI30KLQotIy1rZWVwIGNsYXNzICogZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlCi0jLWtlZXAgY2xhc3MgKiBleHRlbmRzIGFuZHJvaWQuYXBwLkluc3RydW1lbnRhdGlvbgotIy1rZWVwIGNsYXNzICogZXh0ZW5kcyBhbmRyb2lkLnRlc3QuVGVzdFN1aXRlUHJvdmlkZXIKLQpkaWZmIC0tZ2l0IGEvY29yZS9zZGtfY2hlY2subWsgYi9jb3JlL3Nka19jaGVjay5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDlmYzdjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9zZGtfY2hlY2subWsKQEAgLTAsMCArMSwzNyBAQAorCisjIEVuZm9yY2VtZW50IGNoZWNrcyB0aGF0IExPQ0FMX1NES19WRVJTSU9OIGFuZCBMT0NBTF9QUklWQVRFX1BMQVRGT1JNX0FQSVMgYXJlCisjIHNldCBjb3JyZWN0bHkuCisjIFNob3VsZCBiZSBpbmNsdWRlZCBieSBqYXZhIHRhcmdldHMgdGhhdCBhbGxvdyBzcGVjaWZ5aW5nIExPQ0FMX1NES19WRVJTSU9OLgorIyBUaGUgSkFWQV9TREtfRU5GT1JDRU1FTlRfV0FSTklORyBhbmQgSkFWQV9TREtfRU5GT1JDRU1FTlRfRVJST1IgdmFyaWFibGVzIG1heQorIyBiZSBzZXQgdG8gYSBwYXJ0aWN1bGFyIG1vZHVsZSBjbGFzcyB0byBlbmFibGUgd2FybmluZ3MgYW5kIGVycm9ycyBmb3IgdGhhdAorIyBzdWJ0eXBlLgorCit3aGl0ZWxpc3RlZF9tb2R1bGVzIDo9IGZyYW1ld29yay1yZXNfX2F1dG9fZ2VuZXJhdGVkX3JybworCisKK2lmZXEgKCwkKEpBVkFfU0RLX0VORk9SQ0VNRU5UX0VSUk9SKSkKKyAgSkFWQV9TREtfRU5GT1JDRU1FTlRfRVJST1IgOj0gQVBQUworZW5kaWYKKworaWZlcSAoJChMT0NBTF9TREtfVkVSU0lPTikkKExPQ0FMX1BSSVZBVEVfUExBVEZPUk1fQVBJUyksKQorICBpZmVxICgsJChmaWx0ZXIgJChMT0NBTF9NT0RVTEUpLCQod2hpdGVsaXN0ZWRfbW9kdWxlcykpKQorICAgIGlmbmVxICgkKEpBVkFfU0RLX0VORk9SQ0VNRU5UX1dBUk5JTkcpJChKQVZBX1NES19FTkZPUkNFTUVOVF9FUlJPUiksKQorICAgICAgbXlfbWVzc2FnZSA6PSBNdXN0IHNwZWNpZnkgTE9DQUxfU0RLX1ZFUlNJT04gb3IgTE9DQUxfUFJJVkFURV9QTEFURk9STV9BUElTLAorICAgICAgaWZlcSAoJChMT0NBTF9NT0RVTEVfQ0xBU1MpLCQoSkFWQV9TREtfRU5GT1JDRU1FTlRfRVJST1IpKQorICAgICAgICAkKGNhbGwgcHJldHR5LWVycm9yLCQobXlfbWVzc2FnZSkpCisgICAgICBlbmRpZgorICAgICAgaWZlcSAoJChMT0NBTF9NT0RVTEVfQ0xBU1MpLCQoSkFWQV9TREtfRU5GT1JDRU1FTlRfV0FSTklORykpCisgICAgICAgICQoY2FsbCBwcmV0dHktd2FybmluZywkKG15X21lc3NhZ2UpKQorICAgICAgZW5kaWYKKyAgICAgIG15X21lc3NhZ2UgOj0KKyAgICBlbmRpZgorICBlbmRpZgorZWxzZSBpZm5lcSAoJChMT0NBTF9TREtfVkVSU0lPTiksKQorICBpZm5lcSAoJChMT0NBTF9QUklWQVRFX1BMQVRGT1JNX0FQSVMpLCkKKyAgICBteV9tZXNzYWdlIDo9IFNwZWNpZmllcyBib3RoIExPQ0FMX1NES19WRVJTSU9OICgkKExPQ0FMX1NES19WRVJTSU9OKSkgYW5kCisgICAgbXlfbWVzc2FnZSArPSBMT0NBTF9QUklWQVRFX1BMQVRGT1JNX0FQSVMgKCQoTE9DQUxfUFJJVkFURV9QTEFURk9STV9BUElTKSkKKyAgICBteV9tZXNzYWdlICs9IGJ1dCBzaG91bGQgc3BlY2lmeSBvbmx5IG9uZQorICAgICQoY2FsbCBwcmV0dHktZXJyb3IsJChteV9tZXNzYWdlKSkKKyAgICBteV9tZXNzYWdlIDo9CisgIGVuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zaGFyZWRfbGlicmFyeV9pbnRlcm5hbC5tayBiL2NvcmUvc2hhcmVkX2xpYnJhcnlfaW50ZXJuYWwubWsKaW5kZXggNjg3NTM2Yi4uYWI4ODdlMCAxMDA2NDQKLS0tIGEvY29yZS9zaGFyZWRfbGlicmFyeV9pbnRlcm5hbC5taworKysgYi9jb3JlL3NoYXJlZF9saWJyYXJ5X2ludGVybmFsLm1rCkBAIC0yMCw3ICsyMCw5IEBACiAkKGVycm9yICQoTE9DQUxfUEFUSCk6IENhbm5vdCBzZXQgbW9kdWxlIHN0ZW0gZm9yIGEgbGlicmFyeSkKIGVuZGlmCiAKK2lmZGVmIHRhcmdldC1zaGFyZWQtbGlicmFyeS1ob29rCiAkKGNhbGwgdGFyZ2V0LXNoYXJlZC1saWJyYXJ5LWhvb2spCitlbmRpZgogCiBza2lwX2J1aWxkX2Zyb21fc291cmNlIDo9CiBpZmRlZiBMT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRQpkaWZmIC0tZ2l0IGEvY29yZS9zb29uZ19hcHBfcHJlYnVpbHQubWsgYi9jb3JlL3Nvb25nX2FwcF9wcmVidWlsdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTBkMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9zb29uZ19hcHBfcHJlYnVpbHQubWsKQEAgLTAsMCArMSwxMDQgQEAKKyMgQXBwIHByZWJ1aWx0IGNvbWluZyBmcm9tIFNvb25nLgorIyBFeHRyYSBpbnB1dHM6CisjIExPQ0FMX1NPT05HX1JFU09VUkNFX0VYUE9SVF9QQUNLQUdFCisKK2lmbmVxICgkKExPQ0FMX01PRFVMRV9NQUtFRklMRSksJChTT09OR19BTkRST0lEX01LKSkKKyAgJChjYWxsIHByZXR0eS1lcnJvcixzb29uZ19hcHBfcHJlYnVpbHQubWsgbWF5IG9ubHkgYmUgdXNlZCBmcm9tIFNvb25nKQorZW5kaWYKKworTE9DQUxfTU9EVUxFX1NVRkZJWCA6PSAuYXBrCitMT0NBTF9CVUlMVF9NT0RVTEVfU1RFTSA6PSBwYWNrYWdlLmFwaworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmdWxsX2NsYXNzZXNfamFyIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2NsYXNzZXMuamFyCitmdWxsX2NsYXNzZXNfcHJlX3Byb2d1YXJkX2phciA6PSAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9jbGFzc2VzLXByZS1wcm9ndWFyZC5qYXIKK2Z1bGxfY2xhc3Nlc19oZWFkZXJfamFyIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2NsYXNzZXMtaGVhZGVyLmphcgorCiskKGV2YWwgJChjYWxsIGNvcHktb25lLWZpbGUsJChMT0NBTF9TT09OR19DTEFTU0VTX0pBUiksJChmdWxsX2NsYXNzZXNfamFyKSkpCiskKGV2YWwgJChjYWxsIGNvcHktb25lLWZpbGUsJChMT0NBTF9TT09OR19DTEFTU0VTX0pBUiksJChmdWxsX2NsYXNzZXNfcHJlX3Byb2d1YXJkX2phcikpKQorCitpZmRlZiBMT0NBTF9TT09OR19KQUNPQ09fUkVQT1JUX0NMQVNTRVNfSkFSCisgICQoZXZhbCAkKGNhbGwgY29weS1vbmUtZmlsZSwkKExPQ0FMX1NPT05HX0pBQ09DT19SRVBPUlRfQ0xBU1NFU19KQVIpLFwKKyAgICAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9qYWNvY28tcmVwb3J0LWNsYXNzZXMuamFyKSkKKyAgJChjYWxsIGFkZC1kZXBlbmRlbmN5LCQoTE9DQUxfQlVJTFRfTU9EVUxFKSxcCisgICAgJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvamFjb2NvLXJlcG9ydC1jbGFzc2VzLmphcikKK2VuZGlmCisKK2lmZGVmIExPQ0FMX1NPT05HX1BST0dVQVJEX0RJQ1QKKyAgJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoTE9DQUxfU09PTkdfUFJPR1VBUkRfRElDVCksXAorICAgICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL3Byb2d1YXJkX2RpY3Rpb25hcnkpKQorICAkKGNhbGwgYWRkLWRlcGVuZGVuY3ksJChMT0NBTF9CVUlMVF9NT0RVTEUpLFwKKyAgICAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9wcm9ndWFyZF9kaWN0aW9uYXJ5KQorZW5kaWYKKworaWZuZXEgKCQoVFVSQklORV9FTkFCTEVEKSxmYWxzZSkKK2lmZGVmIExPQ0FMX1NPT05HX0hFQURFUl9KQVIKKyQoZXZhbCAkKGNhbGwgY29weS1vbmUtZmlsZSwkKExPQ0FMX1NPT05HX0hFQURFUl9KQVIpLCQoZnVsbF9jbGFzc2VzX2hlYWRlcl9qYXIpKSkKK2Vsc2UKKyQoZXZhbCAkKGNhbGwgY29weS1vbmUtZmlsZSwkKGZ1bGxfY2xhc3Nlc19qYXIpLCQoZnVsbF9jbGFzc2VzX2hlYWRlcl9qYXIpKSkKK2VuZGlmCitlbmRpZiAjIFRVUkJJTkVfRU5BQkxFRCAhPSBmYWxzZQorCisKKyQoZXZhbCAkKGNhbGwgY29weS1vbmUtZmlsZSwkKExPQ0FMX1BSRUJVSUxUX01PRFVMRV9GSUxFKSwkKExPQ0FMX0JVSUxUX01PRFVMRSkpKQorCitpZmRlZiBMT0NBTF9TT09OR19SRVNPVVJDRV9FWFBPUlRfUEFDS0FHRQorcmVzb3VyY2VfZXhwb3J0X3BhY2thZ2UgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvcGFja2FnZS1leHBvcnQuYXBrCityZXNvdXJjZV9leHBvcnRfc3RhbXAgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvc3JjL1Iuc3RhbXAKKworJChyZXNvdXJjZV9leHBvcnRfcGFja2FnZSk6IFBSSVZBVEVfU1RBTVAgOj0gJChyZXNvdXJjZV9leHBvcnRfc3RhbXApCiskKHJlc291cmNlX2V4cG9ydF9wYWNrYWdlKTogLktBVElfSU1QTElDSVRfT1VUUFVUUyA6PSAkKHJlc291cmNlX2V4cG9ydF9zdGFtcCkKKyQocmVzb3VyY2VfZXhwb3J0X3BhY2thZ2UpOiAkKExPQ0FMX1NPT05HX1JFU09VUkNFX0VYUE9SVF9QQUNLQUdFKQorCUBlY2hvICJDb3B5OiAkJEAiCisJJChjb3B5LWZpbGUtdG8tdGFyZ2V0KQorCXRvdWNoICQoUFJJVkFURV9TVEFNUCkKKyQoY2FsbCBhZGQtZGVwZW5kZW5jeSwkKExPQ0FMX0JVSUxUX01PRFVMRSksJChyZXNvdXJjZV9leHBvcnRfcGFja2FnZSkpCisKK2VuZGlmICMgTE9DQUxfU09PTkdfUkVTT1VSQ0VfRVhQT1JUX1BBQ0tBR0UKKworamF2YS1kZXg6ICQoTE9DQUxfU09PTkdfREVYX0pBUikKKworaWZkZWYgTE9DQUxfREVYX1BSRU9QVAorIyBkZWZpbmVzIGJ1aWx0X29kZXggYWxvbmcgd2l0aCBydWxlIHRvIGluc3RhbGwgb2RleAoraW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvZGV4X3ByZW9wdF9vZGV4X2luc3RhbGwubWsKKworJChidWlsdF9vZGV4KTogJChMT0NBTF9TT09OR19ERVhfSkFSKQorCSQoY2FsbCBkZXhwcmVvcHQtb25lLWZpbGUsJDwsJEApCitlbmRpZgorCitQQUNLQUdFUyA6PSAkKFBBQ0tBR0VTKSAkKExPQ0FMX01PRFVMRSkKK2lmZGVmIExPQ0FMX0NFUlRJRklDQVRFCisgIFBBQ0tBR0VTLiQoTE9DQUxfTU9EVUxFKS5DRVJUSUZJQ0FURSA6PSAkKExPQ0FMX0NFUlRJRklDQVRFKQorICBQQUNLQUdFUy4kKExPQ0FMX01PRFVMRSkuUFJJVkFURV9LRVkgOj0gJChwYXRzdWJzdCAlLng1MDkucGVtLCUucGs4LCQoTE9DQUxfQ0VSVElGSUNBVEUpKQorZW5kaWYKKworaWZuZGVmIExPQ0FMX0lTX0hPU1RfTU9EVUxFCitpZmVxICgkKExPQ0FMX1NES19WRVJTSU9OKSxzeXN0ZW1fY3VycmVudCkKK215X2xpbmtfdHlwZSA6PSBqYXZhOnN5c3RlbQorZWxzZSBpZm5lcSAoJChMT0NBTF9TREtfVkVSU0lPTiksKQorbXlfbGlua190eXBlIDo9IGphdmE6c2RrCitlbHNlCitteV9saW5rX3R5cGUgOj0gamF2YTpwbGF0Zm9ybQorZW5kaWYKKyMgd2Fybi9hbGxvd2VkIHR5cGVzIGFyZSBib3RoIGVtcHR5IGJlY2F1c2UgU29vbmcgbW9kdWxlcyBjYW4ndCBkZXBlbmQgb24KKyMgbWFrZS1kZWZpbmVkIG1vZHVsZXMuCitteV93YXJuX3R5cGVzIDo9CitteV9hbGxvd2VkX3R5cGVzIDo9CisKK215X2xpbmtfZGVwcyA6PQorbXlfMm5kX2FyY2hfcHJlZml4IDo9ICQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWCkKK215X2NvbW1vbiA6PSBDT01NT04KK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2xpbmtfdHlwZS5taworZW5kaWYgIyAhTE9DQUxfSVNfSE9TVF9NT0RVTEUKKworaWZkZWYgTE9DQUxfU09PTkdfUlJPX0RJUlMKKyAgJChjYWxsIGFwcGVuZF9lbmZvcmNlX3Jyb19zb3VyY2VzLCBcCisgICAgICAkKG15X3JlZ2lzdGVyX25hbWUpLCBcCisgICAgICBmYWxzZSwgXAorICAgICAgJChMT0NBTF9GVUxMX01BTklGRVNUX0ZJTEUpLCBcCisgICAgICAkKExPQ0FMX0VYUE9SVF9QQUNLQUdFX1JFU09VUkNFUyksIFwKKyAgICAgICQoTE9DQUxfU09PTkdfUlJPX0RJUlMpKQorZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc29vbmdfY29uZmlnLm1rIGIvY29yZS9zb29uZ19jb25maWcubWsKaW5kZXggYTkwZTVhZi4uYmY0MGZlMyAxMDA2NDQKLS0tIGEvY29yZS9zb29uZ19jb25maWcubWsKKysrIGIvY29yZS9zb29uZ19jb25maWcubWsKQEAgLTQyLDYgKzQyLDkgQEAKIAogJChjYWxsIGFkZF9qc29uX3N0ciwgIE1ha2Vfc3VmZml4LCAtJChUQVJHRVRfUFJPRFVDVCkpCiAKKyQoY2FsbCBhZGRfanNvbl9zdHIsICBCdWlsZElkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICQoQlVJTERfSUQpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIEJ1aWxkTnVtYmVyRnJvbUZpbGUsICAgICAgICAgICAgICAgJCQkKEJVSUxEX05VTUJFUl9GUk9NX0ZJTEUpKQorCiAkKGNhbGwgYWRkX2pzb25fdmFsLCAgUGxhdGZvcm1fc2RrX3ZlcnNpb24sICAgICAgICAgICAgICAkKFBMQVRGT1JNX1NES19WRVJTSU9OKSkKICQoY2FsbCBhZGRfanNvbl9jc3YsICBQbGF0Zm9ybV92ZXJzaW9uX2FjdGl2ZV9jb2RlbmFtZXMsICQoUExBVEZPUk1fVkVSU0lPTl9BTExfQ09ERU5BTUVTKSkKICQoY2FsbCBhZGRfanNvbl9jc3YsICBQbGF0Zm9ybV92ZXJzaW9uX2Z1dHVyZV9jb2RlbmFtZXMsICQoUExBVEZPUk1fVkVSU0lPTl9GVVRVUkVfQ09ERU5BTUVTKSkKQEAgLTgxLDYgKzg0LDggQEAKICQoY2FsbCBhZGRfanNvbl9zdHIsICBBQVBUUHJlZmVycmVkQ29uZmlnLCAgICAgICAgICAgICAgICQoUFJPRFVDVF9BQVBUX1BSRUZfQ09ORklHKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBBQVBUUHJlYnVpbHREUEksICAgICAgICAgICAgICAgICAgICQoUFJPRFVDVF9BQVBUX1BSRUJVSUxUX0RQSSkpCiAKKyQoY2FsbCBhZGRfanNvbl9zdHIsICBEZWZhdWx0QXBwQ2VydGlmaWNhdGUsICAgICAgICAgICAgICQoUFJPRFVDVF9ERUZBVUxUX0RFVl9DRVJUSUZJQ0FURSkpCisKICQoY2FsbCBhZGRfanNvbl9zdHIsICBBcHBzRGVmYXVsdFZlcnNpb25OYW1lLCAgICAgICAgICAgICQoQVBQU19ERUZBVUxUX1ZFUlNJT05fTkFNRSkpCiAKICQoY2FsbCBhZGRfanNvbl9saXN0LCBTYW5pdGl6ZUhvc3QsICAgICAgICAgICAgICAgICAgICAgICQoU0FOSVRJWkVfSE9TVCkpCkBAIC0xMDMsMjQgKzEwOCwzNSBAQAogCiAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQXJ0VXNlUmVhZEJhcnJpZXIsICAgICAgICAgICAgICAgICAkKGNhbGwgaW52ZXJ0X2Jvb2wsJChmaWx0ZXIgZmFsc2UsJChQUk9EVUNUX0FSVF9VU0VfUkVBRF9CQVJSSUVSKSkpKQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJpbmRlcjMyYml0LCAgICAgICAgICAgICAgICAgICAgICAgJChCSU5ERVIzMkJJVCkpCi0kKGNhbGwgYWRkX2pzb25fYm9vbCwgQnJpbGxvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKEJSSUxMTykpCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgQnRDb25maWdJbmNsdWRlRGlyLCAgICAgICAgICAgICAgICAkKEJPQVJEX0JMVUVUT09USF9CRFJPSURfQlVJTERDRkdfSU5DTFVERV9ESVIpKQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIERldmljZV91c2VzX2h3YzIsICAgICAgICAgICAgICAgICAgJChmaWx0ZXIgdHJ1ZSwkKFRBUkdFVF9VU0VTX0hXQzIpKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBEZXZpY2VLZXJuZWxIZWFkZXJzLCAgICAgICAgICAgICAgICQoVEFSR0VUX1BST0pFQ1RfU1lTVEVNX0lOQ0xVREVTKSkKICQoY2FsbCBhZGRfanNvbl9ib29sLCBEZXZpY2VQcmVmZXIzMkJpdEV4ZWN1dGFibGVzLCAgICAgICQoZmlsdGVyIHRydWUsJChUQVJHRVRfUFJFRkVSXzMyX0JJVF9FWEVDVVRBQkxFUykpKQotJChjYWxsIGFkZF9qc29uX3ZhbCwgIERldmljZVVzZXNDbGFuZywgICAgICAgICAgICAgICAgICAgJChpZiAkKFVTRV9DTEFOR19QTEFURk9STV9CVUlMRCksJChVU0VfQ0xBTkdfUExBVEZPUk1fQlVJTEQpLGZhbHNlKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBEZXZpY2VWbmRrVmVyc2lvbiwgICAgICAgICAgICAgICAgICQoQk9BUkRfVk5ES19WRVJTSU9OKSkKKyQoY2FsbCBhZGRfanNvbl9zdHIsICBQbGF0Zm9ybV92bmRrX3ZlcnNpb24sICAgICAgICAgICAgICQoUExBVEZPUk1fVk5ES19WRVJTSU9OKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBFeHRyYVZuZGtWZXJzaW9ucywgICAgICAgICAgICAgICAgICQoUFJPRFVDVF9FWFRSQV9WTkRLX1ZFUlNJT05TKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBEZXZpY2VTeXN0ZW1TZGtWZXJzaW9ucywgICAgICAgICAgICQoQk9BUkRfU1lTVEVNU0RLX1ZFUlNJT05TKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBQbGF0Zm9ybV9zeXN0ZW1zZGtfdmVyc2lvbnMsICAgICAgICQoUExBVEZPUk1fU1lTVEVNU0RLX1ZFUlNJT05TKSkKICQoY2FsbCBhZGRfanNvbl9ib29sLCBNYWxsb2Nfbm90X3N2ZWx0ZSwgICAgICAgICAgICAgICAgICQoY2FsbCBpbnZlcnRfYm9vbCwkKGZpbHRlciB0cnVlLCQoTUFMTE9DX1NWRUxURSkpKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBPdmVycmlkZV9yc19kcml2ZXIsICAgICAgICAgICAgICAgICQoT1ZFUlJJREVfUlNfRFJJVkVSKSkKLSQoY2FsbCBhZGRfanNvbl9ib29sLCBUcmVibGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX0ZVTExfVFJFQkxFKSkpCisKKyQoY2FsbCBhZGRfanNvbl9ib29sLCBUcmVibGVfbGlua2VyX25hbWVzcGFjZXMsICAgICAgICAgICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1RSRUJMRV9MSU5LRVJfTkFNRVNQQUNFUykpKQorJChjYWxsIGFkZF9qc29uX2Jvb2wsIEVuZm9yY2VfdmludGZfbWFuaWZlc3QsICAgICAgICAgICAgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfRU5GT1JDRV9WSU5URl9NQU5JRkVTVCkpKQorCiAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVW1sLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGZpbHRlciB0cnVlLCQoVEFSR0VUX1VTRVJfTU9ERV9MSU5VWCkpKQogJChjYWxsIGFkZF9qc29uX3N0ciwgIFZlbmRvclBhdGgsICAgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfVkVORE9SKSkKKyQoY2FsbCBhZGRfanNvbl9zdHIsICBPZG1QYXRoLCAgICAgICAgICAgICAgICAgICAgICAgICAgICQoVEFSR0VUX0NPUFlfT1VUX09ETSkpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgUHJvZHVjdFBhdGgsICAgICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9QUk9EVUNUKSkKICQoY2FsbCBhZGRfanNvbl9ib29sLCBNaW5pbWl6ZUphdmFEZWJ1Z0luZm8sICAgICAgICAgICAgICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX01JTklNSVpFX0pBVkFfREVCVUdfSU5GTykpKQogCiAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVXNlR29tYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGZpbHRlci1vdXQgZmFsc2UsJChVU0VfR09NQSkpKQogCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgRGlzdERpciwgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlmICQoZGlzdF9nb2FsKSwgJChESVNUX0RJUikpKQogCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgTmFtZXNwYWNlc1RvRXhwb3J0LCAgICAgICAgICAgICAgICAkKFBST0RVQ1RfU09PTkdfTkFNRVNQQUNFUykpCisKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBQZ29BZGRpdGlvbmFsUHJvZmlsZURpcnMsICAgICAgICAgICQoUEdPX0FERElUSU9OQUxfUFJPRklMRV9ESVJTKSkKKwogX2NvbnRlbnRzIDo9ICQoc3Vic3QgJChjb21tYSkkKG5ld2xpbmUpX19TVl9FTkQsJChuZXdsaW5lKX0kKG5ld2xpbmUpLCQoX2NvbnRlbnRzKV9fU1ZfRU5EKQogCiAkKGZpbGUgPiQoU09PTkdfVkFSSUFCTEVTKS50bXAsJChfY29udGVudHMpKQpkaWZmIC0tZ2l0IGEvY29yZS9zb29uZ19qYXZhX3ByZWJ1aWx0Lm1rIGIvY29yZS9zb29uZ19qYXZhX3ByZWJ1aWx0Lm1rCmluZGV4IGNjYmU3NDUuLjYzYTFlMmUgMTAwNjQ0Ci0tLSBhL2NvcmUvc29vbmdfamF2YV9wcmVidWlsdC5taworKysgYi9jb3JlL3Nvb25nX2phdmFfcHJlYnVpbHQubWsKQEAgLTE2LDMyICsxNiw3MiBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGZ1bGxfY2xhc3Nlc19qYXIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvY2xhc3Nlcy5qYXIKK2Z1bGxfY2xhc3Nlc19wcmVfcHJvZ3VhcmRfamFyIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2NsYXNzZXMtcHJlLXByb2d1YXJkLmphcgogZnVsbF9jbGFzc2VzX2hlYWRlcl9qYXIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvY2xhc3Nlcy1oZWFkZXIuamFyCiBjb21tb25famF2YWxpYi5qYXIgOj0gJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvamF2YWxpYi5qYXIKIAogJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoTE9DQUxfUFJFQlVJTFRfTU9EVUxFX0ZJTEUpLCQoZnVsbF9jbGFzc2VzX2phcikpKQorJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoTE9DQUxfUFJFQlVJTFRfTU9EVUxFX0ZJTEUpLCQoZnVsbF9jbGFzc2VzX3ByZV9wcm9ndWFyZF9qYXIpKSkKKworaWZkZWYgTE9DQUxfRFJPSURET0NfU1RVQlNfU1JDSkFSCiskKGV2YWwgJChjYWxsIGNvcHktb25lLWZpbGUsJChMT0NBTF9EUk9JRERPQ19TVFVCU19TUkNKQVIpLCQoT1VUX0RPQ1MpLyQoTE9DQUxfTU9EVUxFKS1zdHVicy5zcmNqYXIpKQorQUxMX0RPQ1MgKz0gJChPVVRfRE9DUykvJChMT0NBTF9NT0RVTEUpLXN0dWJzLnNyY2phcgorZW5kaWYKKworaWZkZWYgTE9DQUxfRFJPSURET0NfRE9DX1pJUAorJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoTE9DQUxfRFJPSURET0NfRE9DX1pJUCksJChPVVRfRE9DUykvJChMT0NBTF9NT0RVTEUpLWRvY3MuemlwKSkKKyQoY2FsbCBkaXN0LWZvci1nb2Fscyxkb2NzLCQoT1VUX0RPQ1MpLyQoTE9DQUxfTU9EVUxFKS1kb2NzLnppcCkKK2VuZGlmCiAKIGlmZGVmIExPQ0FMX1NPT05HX0pBQ09DT19SRVBPUlRfQ0xBU1NFU19KQVIKICAgJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoTE9DQUxfU09PTkdfSkFDT0NPX1JFUE9SVF9DTEFTU0VTX0pBUiksXAogICAgICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2phY29jby1yZXBvcnQtY2xhc3Nlcy5qYXIpKQorICAkKGNhbGwgYWRkLWRlcGVuZGVuY3ksJChjb21tb25famF2YWxpYi5qYXIpLFwKKyAgICAkKGludGVybWVkaWF0ZXMuQ09NTU9OKS9qYWNvY28tcmVwb3J0LWNsYXNzZXMuamFyKQogZW5kaWYKIAotaWZuZXEgKCQoVFVSQklORV9ESVNBQkxFRCksZmFsc2UpCitpZmRlZiBMT0NBTF9TT09OR19FWFBPUlRfUFJPR1VBUkRfRkxBR1MKKyAgJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoTE9DQUxfU09PTkdfRVhQT1JUX1BST0dVQVJEX0ZMQUdTKSxcCisgICAgJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvZXhwb3J0X3Byb2d1YXJkX2ZsYWdzKSkKKyAgJChjYWxsIGFkZC1kZXBlbmRlbmN5LCQoTE9DQUxfQlVJTFRfTU9EVUxFKSxcCisgICAgJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvZXhwb3J0X3Byb2d1YXJkX2ZsYWdzKQorZW5kaWYKKworaWZkZWYgTE9DQUxfU09PTkdfUkVTT1VSQ0VfRVhQT1JUX1BBQ0tBR0UKK215X3Jlc19wYWNrYWdlIDo9ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL3BhY2thZ2UtcmVzLmFwaworCiskKG15X3Jlc19wYWNrYWdlKTogJChMT0NBTF9TT09OR19SRVNPVVJDRV9FWFBPUlRfUEFDS0FHRSkKKwlAZWNobyAiQ29weTogJCRAIgorCSQoY29weS1maWxlLXRvLXRhcmdldCkKKworJChjYWxsIGFkZC1kZXBlbmRlbmN5LCQoTE9DQUxfQlVJTFRfTU9EVUxFKSwkKG15X3Jlc19wYWNrYWdlKSkKKworZW5kaWYgIyBMT0NBTF9TT09OR19SRVNPVVJDRV9FWFBPUlRfUEFDS0FHRQorCitpZm5lcSAoJChUVVJCSU5FX0VOQUJMRUQpLGZhbHNlKQogaWZkZWYgTE9DQUxfU09PTkdfSEVBREVSX0pBUgogJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoTE9DQUxfU09PTkdfSEVBREVSX0pBUiksJChmdWxsX2NsYXNzZXNfaGVhZGVyX2phcikpKQogZWxzZQogJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoZnVsbF9jbGFzc2VzX2phciksJChmdWxsX2NsYXNzZXNfaGVhZGVyX2phcikpKQogZW5kaWYKLWVuZGlmICMgVFVSQklORV9ESVNBQkxFRCAhPSBmYWxzZQorZW5kaWYgIyBUVVJCSU5FX0VOQUJMRUQgIT0gZmFsc2UKIAogaWZkZWYgTE9DQUxfU09PTkdfREVYX0pBUgogICBpZm5kZWYgTE9DQUxfSVNfSE9TVF9NT0RVTEUKLSAgICAkKGV2YWwgJChjYWxsIGNvcHktb25lLWZpbGUsJChMT0NBTF9TT09OR19ERVhfSkFSKSwkKGNvbW1vbl9qYXZhbGliLmphcikpKQorICAgIGlmbmVxICgkKGZpbHRlciAkKExPQ0FMX01PRFVMRSksJChQUk9EVUNUX0JPT1RfSkFSUykpLCkgICMgaXNfYm9vdF9qYXIKKyAgICAgICQoZXZhbCAkKGNhbGwgaGlkZGVuYXBpLWNvcHktc29vbmctamFyLCQoTE9DQUxfU09PTkdfREVYX0pBUiksJChjb21tb25famF2YWxpYi5qYXIpKSkKKyAgICBlbHNlICMgIWlzX2Jvb3RfamFyCisgICAgICAkKGV2YWwgJChjYWxsIGNvcHktb25lLWZpbGUsJChMT0NBTF9TT09OR19ERVhfSkFSKSwkKGNvbW1vbl9qYXZhbGliLmphcikpKQorICAgIGVuZGlmICMgaXNfYm9vdF9qYXIKICAgICAkKGV2YWwgJChjYWxsIGFkZC1kZXBlbmRlbmN5LCQoY29tbW9uX2phdmFsaWIuamFyKSwkKGZ1bGxfY2xhc3Nlc19qYXIpICQoZnVsbF9jbGFzc2VzX2hlYWRlcl9qYXIpKSkKIAorICAgIGRleF9wcmVvcHRfcHJvZmlsZV9zcmNfZmlsZSA6PSAkKGNvbW1vbl9qYXZhbGliLmphcikKKwogICAgICMgZGVmaW5lcyBidWlsdF9vZGV4IGFsb25nIHdpdGggcnVsZSB0byBpbnN0YWxsIG9kZXgKICAgICBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9kZXhfcHJlb3B0X29kZXhfaW5zdGFsbC5tawogCisgICAgZGV4X3ByZW9wdF9wcm9maWxlX3NyY19maWxlIDo9CisKICAgICBpZmRlZiBMT0NBTF9ERVhfUFJFT1BUCiAgICAgICBpZm5lcSAoJChkZXhwcmVvcHRfYm9vdF9qYXJfbW9kdWxlKSwpICMgYm9vdCBqYXIKICAgICAgICAgIyBib290IGphcidzIHJ1bGVzIGFyZSBkZWZpbmVkIGluIGRleF9wcmVvcHQubWsKQEAgLTc3LDE3ICsxMTcsMTkgQEAKIGlmbmRlZiBMT0NBTF9JU19IT1NUX01PRFVMRQogaWZlcSAoJChMT0NBTF9TREtfVkVSU0lPTiksc3lzdGVtX2N1cnJlbnQpCiBteV9saW5rX3R5cGUgOj0gamF2YTpzeXN0ZW0KLW15X3dhcm5fdHlwZXMgOj0gamF2YTpwbGF0Zm9ybQotbXlfYWxsb3dlZF90eXBlcyA6PSBqYXZhOnNkayBqYXZhOnN5c3RlbQorZWxzZSBpZm5lcSAoLCQoY2FsbCBoYXMtc3lzdGVtLXNkay12ZXJzaW9uLCQoTE9DQUxfU0RLX1ZFUlNJT04pKSkKK215X2xpbmtfdHlwZSA6PSBqYXZhOnN5c3RlbQorZWxzZSBpZmVxICgkKExPQ0FMX1NES19WRVJTSU9OKSxjb3JlX2N1cnJlbnQpCitteV9saW5rX3R5cGUgOj0gamF2YTpjb3JlCiBlbHNlIGlmbmVxICgkKExPQ0FMX1NES19WRVJTSU9OKSwpCiBteV9saW5rX3R5cGUgOj0gamF2YTpzZGsKLW15X3dhcm5fdHlwZXMgOj0gamF2YTpzeXN0ZW0gamF2YTpwbGF0Zm9ybQotbXlfYWxsb3dlZF90eXBlcyA6PSBqYXZhOnNkawogZWxzZQogbXlfbGlua190eXBlIDo9IGphdmE6cGxhdGZvcm0KLW15X3dhcm5fdHlwZXMgOj0KLW15X2FsbG93ZWRfdHlwZXMgOj0gamF2YTpzZGsgamF2YTpzeXN0ZW0gamF2YTpwbGF0Zm9ybQogZW5kaWYKKyMgd2Fybi9hbGxvd2VkIHR5cGVzIGFyZSBib3RoIGVtcHR5IGJlY2F1c2UgU29vbmcgbW9kdWxlcyBjYW4ndCBkZXBlbmQgb24KKyMgbWFrZS1kZWZpbmVkIG1vZHVsZXMuCitteV93YXJuX3R5cGVzIDo9CitteV9hbGxvd2VkX3R5cGVzIDo9CiAKIG15X2xpbmtfZGVwcyA6PQogbXlfMm5kX2FyY2hfcHJlZml4IDo9ICQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWCkKZGlmZiAtLWdpdCBhL2NvcmUvc3RhdGljX2phdmFfbGlicmFyeS5tayBiL2NvcmUvc3RhdGljX2phdmFfbGlicmFyeS5tawppbmRleCA1ZmZiODhkLi42NGUxNmMyIDEwMDY0NAotLS0gYS9jb3JlL3N0YXRpY19qYXZhX2xpYnJhcnkubWsKKysrIGIvY29yZS9zdGF0aWNfamF2YV9saWJyYXJ5Lm1rCkBAIC04OCw3ICs4OCw3IEBACiAKIExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTICs9ICQobXlfcmVzX3BhY2thZ2UpCiBlbmRpZiAgIyBMT0NBTF9VU0VfQUFQVDIKLWVuZGlmICAjIExPQ0FMX1JFU09VUkNFX0RJUgorZW5kaWYgICMgbmVlZF9jb21waWxlX3JlcwogCiBhbGxfcmVzX2Fzc2V0cyA6PSAkKGFsbF9yZXNvdXJjZXMpCiAKQEAgLTEwMywyNSArMTAzLDQwIEBACiBlbmRpZgogCiBmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0IDo9Ci1mcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0X2RlcHMgOj0KICMgUGxlYXNlIHJlZmVyIHRvIHBhY2thZ2UubWsKIGlmbmVxICgkKExPQ0FMX05PX1NUQU5EQVJEX0xJQlJBUklFUyksdHJ1ZSkKIGlmbmVxICgkKGZpbHRlci1vdXQgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsJChMT0NBTF9TREtfUkVTX1ZFUlNJT04pKSQoaWYgJChUQVJHRVRfQlVJTERfQVBQUyksJChmaWx0ZXIgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsJChMT0NBTF9TREtfUkVTX1ZFUlNJT04pKSksKQogZnJhbWV3b3JrX3Jlc19wYWNrYWdlX2V4cG9ydCA6PSBcCiAgICAgJChISVNUT1JJQ0FMX1NES19WRVJTSU9OU19ST09UKS8kKExPQ0FMX1NES19SRVNfVkVSU0lPTikvYW5kcm9pZC5qYXIKLWZyYW1ld29ya19yZXNfcGFja2FnZV9leHBvcnRfZGVwcyA6PSAkKGZyYW1ld29ya19yZXNfcGFja2FnZV9leHBvcnQpCiBlbHNlCiBmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0IDo9IFwKICAgICAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEFQUFMsZnJhbWV3b3JrLXJlcywsQ09NTU9OKS9wYWNrYWdlLWV4cG9ydC5hcGsKLWZyYW1ld29ya19yZXNfcGFja2FnZV9leHBvcnRfZGVwcyA6PSBcCi0gICAgJChkaXIgJChmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0KSlzcmMvUi5zdGFtcAogZW5kaWYKIGVuZGlmCiAKK2lmZGVmIExPQ0FMX1VTRV9BQVBUMgoraW1wb3J0X3Byb2d1YXJkX2ZsYWdfZmlsZXMgOj0gJChzdHJpcCAkKGZvcmVhY2ggbCwkKExPQ0FMX1NUQVRJQ19BTkRST0lEX0xJQlJBUklFUyksXAorICAgICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsSkFWQV9MSUJSQVJJRVMsJChsKSwsQ09NTU9OKS9leHBvcnRfcHJvZ3VhcmRfZmxhZ3MpKQorJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvZXhwb3J0X3Byb2d1YXJkX2ZsYWdzOiAkKGltcG9ydF9wcm9ndWFyZF9mbGFnX2ZpbGVzKSAkKGFkZHByZWZpeCAkKExPQ0FMX1BBVEgpLywkKExPQ0FMX0VYUE9SVF9QUk9HVUFSRF9GTEFHX0ZJTEVTKSkKKwlAZWNobyAiRXhwb3J0IHByb2d1YXJkIGZsYWdzOiAkQCIKKwlybSAtZiAkQAorCXRvdWNoICRACisJZm9yIGYgaW4gJCs7IGRvIFwKKwkJZWNobyAtZSAiXG4jIGluY2x1ZGluZyAkJGYiID4+JEA7IFwKKwkJY2F0ICQkZiA+PiRAOyBcCisJZG9uZQoraW1wb3J0X3Byb2d1YXJkX2ZsYWdfZmlsZXMgOj0KK2VuZGlmCisKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2FhcHRfZmxhZ3MubWsKKwogIyBhZGQgLS1ub24tY29uc3RhbnQtaWQgdG8gcHJldmVudCBpbmxpbmluZyBjb25zdGFudHMuCiAjIEFBUiBuZWVkcyB0ZXh0IHN5bWJvbCBmaWxlIFIudHh0LgogaWZkZWYgTE9DQUxfVVNFX0FBUFQyCi0kKExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTKTogUFJJVkFURV9BQVBUX0ZMQUdTIDo9ICQoTE9DQUxfQUFQVF9GTEFHUykgLS1zdGF0aWMtbGliIC0tbm8tc3RhdGljLWxpYi1wYWNrYWdlcworJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfQUFQVF9GTEFHUyA6PSAkKExPQ0FMX0FBUFRfRkxBR1MpIC0tc3RhdGljLWxpYgoraWZuZGVmIExPQ0FMX0FBUFRfTkFNRVNQQUNFUworICAkKExPQ0FMX0lOVEVSTUVESUFURV9UQVJHRVRTKTogUFJJVkFURV9BQVBUX0ZMQUdTICs9IC0tbm8tc3RhdGljLWxpYi1wYWNrYWdlcworZW5kaWYKICQoTE9DQUxfSU5URVJNRURJQVRFX1RBUkdFVFMpOiBQUklWQVRFX1BST0RVQ1RfQUFQVF9DT05GSUcgOj0KICQoTE9DQUxfSU5URVJNRURJQVRFX1RBUkdFVFMpOiBQUklWQVRFX1BST0RVQ1RfQUFQVF9QUkVGX0NPTkZJRyA6PQogJChMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyk6IFBSSVZBVEVfVEFSR0VUX0FBUFRfQ0hBUkFDVEVSSVNUSUNTIDo9CkBAIC0xNDksOCArMTY0LDggQEAKIGVsc2UKIGlmbmVxICgsJChMT0NBTF9TREtfVkVSU0lPTikpCiAjIFNldCB0YXJnZXQtYXBpIGZvciBMT0NBTF9TREtfVkVSU0lPTnMgb3RoZXIgdGhhbiBjdXJyZW50LgotaWZuZXEgKCwkKGZpbHRlci1vdXQgY3VycmVudCBzeXN0ZW1fY3VycmVudCB0ZXN0X2N1cnJlbnQsICQoTE9DQUxfU0RLX1ZFUlNJT04pKSkKLXJlbmRlcnNjcmlwdF90YXJnZXRfYXBpIDo9ICQoTE9DQUxfU0RLX1ZFUlNJT04pCitpZm5lcSAoLCQoZmlsdGVyLW91dCBjdXJyZW50IHN5c3RlbV9jdXJyZW50IHRlc3RfY3VycmVudCBjb3JlX2N1cnJlbnQsICQoTE9DQUxfU0RLX1ZFUlNJT04pKSkKK3JlbmRlcnNjcmlwdF90YXJnZXRfYXBpIDo9ICQoY2FsbCBnZXQtbnVtZXJpYy1zZGstdmVyc2lvbiwkKExPQ0FMX1NES19WRVJTSU9OKSkKIGVuZGlmCiBlbmRpZiAgIyBMT0NBTF9TREtfVkVSU0lPTiBpcyBzZXQKIGVuZGlmICAjIExPQ0FMX1JFTkRFUlNDUklQVF9UQVJHRVRfQVBJIGlzIHNldApAQCAtMTYxLDEwICsxNzYsMTAgQEAKIGVuZGlmICAjIHJlbmRlcnNjcmlwdF90YXJnZXRfYXBpIDwgMjEKIGVuZGlmICAjIHJlbmRlcnNjcmlwdF90YXJnZXRfYXBpIGlzIHNldAogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYWFwdDIubWsKLSQobXlfcmVzX3BhY2thZ2UpIDogJChmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0X2RlcHMpCiskKG15X3Jlc19wYWNrYWdlKSA6ICQoZnJhbWV3b3JrX3Jlc19wYWNrYWdlX2V4cG9ydCkKIGVsc2UKICQoUl9maWxlX3N0YW1wKTogUFJJVkFURV9SRVNPVVJDRV9MSVNUIDo9ICQoYWxsX3Jlc291cmNlcykKLSQoUl9maWxlX3N0YW1wKSA6ICQoYWxsX3Jlc291cmNlcykgJChmdWxsX2FuZHJvaWRfbWFuaWZlc3QpICQoQUFQVCkgJChmcmFtZXdvcmtfcmVzX3BhY2thZ2VfZXhwb3J0X2RlcHMpCiskKFJfZmlsZV9zdGFtcCkgOiAkKGFsbF9yZXNvdXJjZXMpICQoZnVsbF9hbmRyb2lkX21hbmlmZXN0KSAkKEFBUFQpICQoZnJhbWV3b3JrX3Jlc19wYWNrYWdlX2V4cG9ydCkKIAlAZWNobyAidGFyZ2V0IFIuamF2YS9NYW5pZmVzdC5qYXZhOiAkKFBSSVZBVEVfTU9EVUxFKSAoJEApIgogCSQoY3JlYXRlLXJlc291cmNlLWphdmEtZmlsZXMpCiAJJChoaWRlKSBmaW5kICQoUFJJVkFURV9TT1VSQ0VfSU5URVJNRURJQVRFU19ESVIpIC1uYW1lIFIuamF2YSB8IHhhcmdzIGNhdCA+ICRACkBAIC0xNzIsNyArMTg3LDYgQEAKIAogJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKFJfZmlsZV9zdGFtcCkKICQoamF2YV9zb3VyY2VfbGlzdF9maWxlKTogJChSX2ZpbGVfc3RhbXApCi0kKGZvcmVhY2ggeCwkKHNoYXJkZWRfamF2YV9zb3VyY2VfbGlzdF9maWxlcyksJChldmFsICQoeCk6ICQoUl9maWxlX3N0YW1wKSkpCiAkKGZ1bGxfY2xhc3Nlc19jb21waWxlZF9qYXIpOiAkKFJfZmlsZV9zdGFtcCkKICQoZnVsbF9jbGFzc2VzX3R1cmJpbmVfamFyKTogJChSX2ZpbGVfc3RhbXApCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L2RldmljZS5tayBiL2NvcmUvdGFyZ2V0X3Rlc3RfY29uZmlnLm1rCnNpbWlsYXJpdHkgaW5kZXggNzAlCmNvcHkgZnJvbSB0YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9kZXZpY2UubWsKY29weSB0byBjb3JlL3RhcmdldF90ZXN0X2NvbmZpZy5tawppbmRleCA3YzRhYWYyLi42MWY1ZDJiIDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9kZXZpY2UubWsKKysrIGIvY29yZS90YXJnZXRfdGVzdF9jb25maWcubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCw0ICsxNCwxMCBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICMKIAotaW5jbHVkZSBidWlsZC90YXJnZXQvYm9hcmQvZ2VuZXJpYy9kZXZpY2UubWsKKyMKKyMgQ29tbW9uIHJ1bGVzIGZvciBidWlsZGluZyBhIFRyYWRlRmVkIHRlc3QgWE1MIGZpbGUgZm9yIHRhcmdldCBzaWRlIHRlc3RzLgorIworCiskKGNhbGwgcmVjb3JkLW1vZHVsZS10eXBlLFRBUkdFVF9URVNUX0NPTkZJRykKKworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGVzdF9jb25maWdfY29tbW9uLm1rCmRpZmYgLS1naXQgYS9jb3JlL3RhcmdldF90ZXN0X2ludGVybmFsLm1rIGIvY29yZS90YXJnZXRfdGVzdF9pbnRlcm5hbC5tawppbmRleCA1OWEzYTllLi5iNWMzYTdjIDEwMDY0NAotLS0gYS9jb3JlL3RhcmdldF90ZXN0X2ludGVybmFsLm1rCisrKyBiL2NvcmUvdGFyZ2V0X3Rlc3RfaW50ZXJuYWwubWsKQEAgLTgsMTUgKzgsOSBAQAogICBpZm5kZWYgTE9DQUxfU0RLX1ZFUlNJT04KICAgICBMT0NBTF9TVEFUSUNfTElCUkFSSUVTICs9IGxpYmd0ZXN0X21haW4gbGliZ3Rlc3QKICAgZWxzZQotICAgIGlmbmVxICgsJChmaWx0ZXIgYysrXyUsJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpKSkKLSAgICAgICAgbXlfbmRrX2d0ZXN0X3N1ZmZpeCA6PSBfYysrCi0gICAgZWxzZSBpZm5lcSAoJChmaWx0ZXIgc3RscG9ydF8sJChMT0NBTF9OREtfU1RMX1ZBUklBTlQpKSwpCi0gICAgICAgIG15X25ka19ndGVzdF9zdWZmaXggOj0gX3N0bHBvcnQKLSAgICBlbHNlIGlmbmVxICgkKGZpbHRlciBnbnVzdGxfLCQoTE9DQUxfTkRLX1NUTF9WQVJJQU5UKSksKQotICAgICAgICBteV9uZGtfZ3Rlc3Rfc3VmZml4IDo9IF9nbnVzdGwKLSAgICBlbHNlICMgc3lzdGVtIFNUTCwgdXNlIHN0bHBvcnQKLSAgICAgICAgbXlfbmRrX2d0ZXN0X3N1ZmZpeCA6PSBfc3RscG9ydAotICAgIGVuZGlmCisgICAgIyBUT0RPKGRhbmFsYmVydCk6IFJlbW92ZSB0aGUgc3VmZml4IGZyb20gdGhlIG1vZHVsZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlCisgICAgIyBvbmUgdmFyaWFudCBub3cuCisgICAgbXlfbmRrX2d0ZXN0X3N1ZmZpeCA6PSBfYysrCiAgICAgTE9DQUxfU1RBVElDX0xJQlJBUklFUyArPSBcCiAgICAgICAgIGxpYmd0ZXN0X21haW5fbmRrJChteV9uZGtfZ3Rlc3Rfc3VmZml4KSBcCiAgICAgICAgIGxpYmd0ZXN0X25kayQobXlfbmRrX2d0ZXN0X3N1ZmZpeCkKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvYXBpY2hlY2subWsgYi9jb3JlL3Rhc2tzL2FwaWNoZWNrLm1rCmluZGV4IDM5NzVkMjAuLjFkODY3ZDEgMTAwNjQ0Ci0tLSBhL2NvcmUvdGFza3MvYXBpY2hlY2subWsKKysrIGIvY29yZS90YXNrcy9hcGljaGVjay5tawpAQCAtNTQsNyArNTQsNyBAQAogICAgIC1lcnJvciAxNiAtZXJyb3IgMTcgLWVycm9yIDE4ICwgXAogICAgIGNhdCAkKEJVSUxEX1NZU1RFTSkvYXBpY2hlY2tfbXNnX2xhc3QudHh0LCBcCiAgICAgY2hlY2stcHVibGljLWFwaSwgXAotICAgICQoY2FsbCBkb2MtdGltZXN0YW1wLWZvcixhcGktc3R1YnMpIFwKKyAgICAkKE9VVF9ET0NTKS9hcGktc3R1YnMtZG9jcy1zdHVicy5zcmNqYXIgXAogICAgICkpCiAKICMgQ2hlY2sgdGhhdCB0aGUgQVBJIHdlJ3JlIGJ1aWxkaW5nIGhhc24ndCBjaGFuZ2VkIGZyb20gdGhlIG5vdC15ZXQtcmVsZWFzZWQKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAtZXJyb3IgMjUgLWVycm9yIDI2IC1lcnJvciAyNywgXAogICAgIGNhdCAkKEJVSUxEX1NZU1RFTSkvYXBpY2hlY2tfbXNnX2N1cnJlbnQudHh0LCBcCiAgICAgY2hlY2stcHVibGljLWFwaSwgXAotICAgICQoY2FsbCBkb2MtdGltZXN0YW1wLWZvcixhcGktc3R1YnMpIFwKKyAgICAkKE9VVF9ET0NTKS9hcGktc3R1YnMtZG9jcy1zdHVicy5zcmNqYXIgXAogICAgICkpCiAKIC5QSE9OWTogdXBkYXRlLXB1YmxpYy1hcGkKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgIC1lcnJvciAxNiAtZXJyb3IgMTcgLWVycm9yIDE4ICwgXAogICAgIGNhdCAkKEJVSUxEX1NZU1RFTSkvYXBpY2hlY2tfbXNnX2xhc3QudHh0LCBcCiAgICAgY2hlY2stc3lzdGVtLWFwaSwgXAotICAgICQoY2FsbCBkb2MtdGltZXN0YW1wLWZvcixzeXN0ZW0tYXBpLXN0dWJzKSBcCisgICAgJChPVVRfRE9DUykvc3lzdGVtLWFwaS1zdHVicy1kb2NzLXN0dWJzLnNyY2phciBcCiAgICAgKSkKIAogIyBDaGVjayB0aGF0IHRoZSBTeXN0ZW0gQVBJIHdlJ3JlIGJ1aWxkaW5nIGhhc24ndCBjaGFuZ2VkIGZyb20gdGhlIG5vdC15ZXQtcmVsZWFzZWQKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgIC1lcnJvciAyNSAtZXJyb3IgMjYgLWVycm9yIDI3LCBcCiAgICAgY2F0ICQoQlVJTERfU1lTVEVNKS9hcGljaGVja19tc2dfY3VycmVudC50eHQsIFwKICAgICBjaGVjay1zeXN0ZW0tYXBpLCBcCi0gICAgJChjYWxsIGRvYy10aW1lc3RhbXAtZm9yLHN5c3RlbS1hcGktc3R1YnMpIFwKKyAgICAkKE9VVF9ET0NTKS9zeXN0ZW0tYXBpLXN0dWJzLWRvY3Mtc3R1YnMuc3JjamFyIFwKICAgICApKQogCiAuUEhPTlk6IHVwZGF0ZS1zeXN0ZW0tYXBpCkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAtZXJyb3IgMjUgLWVycm9yIDI2IC1lcnJvciAyNywgXAogICAgIGNhdCAkKEJVSUxEX1NZU1RFTSkvYXBpY2hlY2tfbXNnX2N1cnJlbnQudHh0LCBcCiAgICAgY2hlY2stdGVzdC1hcGksIFwKLSAgICAkKGNhbGwgZG9jLXRpbWVzdGFtcC1mb3IsdGVzdC1hcGktc3R1YnMpIFwKKyAgICAkKE9VVF9ET0NTKS90ZXN0LWFwaS1zdHVicy1kb2NzLXN0dWJzLnNyY2phciBcCiAgICAgKSkKIAogLlBIT05ZOiB1cGRhdGUtdGVzdC1hcGkKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvY2hlY2tfYm9vdF9qYXJzL2NoZWNrX2Jvb3RfamFycy5weSBiL2NvcmUvdGFza3MvY2hlY2tfYm9vdF9qYXJzL2NoZWNrX2Jvb3RfamFycy5weQppbmRleCAxYjQ1NDBjLi45ZDcxNTUzIDEwMDc1NQotLS0gYS9jb3JlL3Rhc2tzL2NoZWNrX2Jvb3RfamFycy9jaGVja19ib290X2phcnMucHkKKysrIGIvY29yZS90YXNrcy9jaGVja19ib290X2phcnMvY2hlY2tfYm9vdF9qYXJzLnB5CkBAIC0zOSw3ICszOSw3IEBACiAgIHJldHVybiBUcnVlCiAKIAotZGVmIENoZWNrSmFyKGphcik6CitkZWYgQ2hlY2tKYXIod2hpdGVsaXN0X3BhdGgsIGphcik6CiAgICIiIkNoZWNrIGEgamFyIGZpbGUuCiAgICIiIgogICAjIEdldCB0aGUgbGlzdCBvZiBmaWxlcyBpbnNpZGUgdGhlIGphciBmaWxlLgpAQCAtNTUsOCArNTUsOSBAQAogICAgICAgcGFja2FnZV9uYW1lID0gcGFja2FnZV9uYW1lLnJlcGxhY2UoJy8nLCAnLicpCiAgICAgICAjIFNraXAgY2xhc3Mgd2l0aG91dCBhIHBhY2thZ2UgbmFtZQogICAgICAgaWYgcGFja2FnZV9uYW1lIGFuZCBub3Qgd2hpdGVsaXN0X3JlLm1hdGNoKHBhY2thZ2VfbmFtZSk6Ci0gICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICgnRXJyb3I6ICVzIGNvbnRhaW5zIGNsYXNzIGZpbGUgJXMsIHdoaWNoIGlzIG5vdCBpbiB0aGUgd2hpdGVsaXN0JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoamFyLCBmKSkKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgKCdFcnJvcjogJXMgY29udGFpbnMgY2xhc3MgZmlsZSAlcywgd2hvc2UgcGFja2FnZSBuYW1lICVzIGlzIG5vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHdoaXRlbGlzdCAlcyBvZiBwYWNrYWdlcyBhbGxvd2VkIG9uIHRoZSBib290Y2xhc3NwYXRoLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGphciwgZiwgcGFja2FnZV9uYW1lLCB3aGl0ZWxpc3RfcGF0aCkpCiAgICAgICAgIHJldHVybiBGYWxzZQogICByZXR1cm4gVHJ1ZQogCkBAIC02NSwxMyArNjYsMTQgQEAKICAgaWYgbGVuKGFyZ3YpIDwgMjoKICAgICBwcmludCBfX2RvY19fCiAgICAgcmV0dXJuIDEKKyAgd2hpdGVsaXN0X3BhdGggPSBhcmd2WzBdCiAKLSAgaWYgbm90IExvYWRXaGl0ZWxpc3QoYXJndlswXSk6CisgIGlmIG5vdCBMb2FkV2hpdGVsaXN0KHdoaXRlbGlzdF9wYXRoKToKICAgICByZXR1cm4gMQogCiAgIHBhc3NlZCA9IFRydWUKICAgZm9yIGphciBpbiBhcmd2WzE6XToKLSAgICBpZiBub3QgQ2hlY2tKYXIoamFyKToKKyAgICBpZiBub3QgQ2hlY2tKYXIod2hpdGVsaXN0X3BhdGgsIGphcik6CiAgICAgICBwYXNzZWQgPSBGYWxzZQogICBpZiBub3QgcGFzc2VkOgogICAgIHJldHVybiAxCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL2NoZWNrX2VtdV9ib290Lm1rIGIvY29yZS90YXNrcy9jaGVja19lbXVfYm9vdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODcwNjc3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS90YXNrcy9jaGVja19lbXVfYm9vdC5tawpAQCAtMCwwICsxLDIzIEBACitjaGVja19lbXVfYm9vdDAgOj0gJChESVNUX0RJUikvJChUQVJHRVRfUFJPRFVDVCktJChUQVJHRVRfQlVJTERfVkFSSUFOVCktZW11bGF0b3ItYm9vdC10ZXN0LXJlc3VsdC50eHQKKyQoY2hlY2tfZW11X2Jvb3QwKSA6IFBSSVZBVEVfUFJFRklYIDo9ICQoVEFSR0VUX1BST0RVQ1QpLSQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpCiskKGNoZWNrX2VtdV9ib290MCkgOiBQUklWQVRFX0VNVUxBVE9SX0JPT1RfVEVTVF9TSCA6PSBkZXZpY2UvZ2VuZXJpYy9nb2xkZmlzaC90b29scy9lbXVsYXRvcl9ib290X3Rlc3Quc2gKKyQoY2hlY2tfZW11X2Jvb3QwKSA6IFBSSVZBVEVfQk9PVF9DT01QTEVURV9TVFJJTkcgOj0gImVtdWxhdG9yOiBJTkZPOiBib290IGNvbXBsZXRlZCIKKyQoY2hlY2tfZW11X2Jvb3QwKSA6IFBSSVZBVEVfQk9PVF9GQUlMX1NUUklORyA6PSAiZW11bGF0b3I6IEVSUk9SOiBmYWlsIHRvIGJvb3QgYWZ0ZXIiCiskKGNoZWNrX2VtdV9ib290MCkgOiBQUklWQVRFX1NVQ0NFU1NfRklMRSA6PSAkKERJU1RfRElSKS8kKFBSSVZBVEVfUFJFRklYKS1CT09ULVNVQ0NFU1MudHh0CiskKGNoZWNrX2VtdV9ib290MCkgOiBQUklWQVRFX0ZBSUxfRklMRSA6PSAkKERJU1RfRElSKS8kKFBSSVZBVEVfUFJFRklYKS1CT09ULUZBSUwudHh0CiskKGNoZWNrX2VtdV9ib290MCkgOiAkKElOU1RBTExFRF9RRU1VX1NZU1RFTUlNQUdFKSAgJChJTlNUQUxMRURfUUVNVV9WRU5ET1JJTUFHRSkgXAorICAgICAgICAgICAgICAgICAkKGlmICQoQk9BUkRfVVNFUkRBVEFJTUFHRV9QQVJUSVRJT05fU0laRSksJChQUk9EVUNUX09VVCkvdXNlcmRhdGEuaW1nKSBcCisgICAgICAgICAgICAgICAgICQoUFJPRFVDVF9PVVQpL3JhbWRpc2suaW1nIGRldmljZS9nZW5lcmljL2dvbGRmaXNoL3Rvb2xzL2VtdWxhdG9yX2Jvb3RfdGVzdC5zaAorCUBta2RpciAtcCAkKGRpciAkKGNoZWNrX2VtdV9ib290MCkpCisJJChoaWRlKSBybSAtZiAkKGNoZWNrX2VtdV9ib290MCkKKwkkKGhpZGUpIHJtIC1mICQoUFJJVkFURV9TVUNDRVNTX0ZJTEUpCisJJChoaWRlKSBybSAtZiAkKFBSSVZBVEVfRkFJTF9GSUxFKQorCShleHBvcnQgQU5EUk9JRF9QUk9EVUNUX09VVD0kJChjZCAkKFBST0RVQ1RfT1VUKTtwd2QpO1wKKwkJZXhwb3J0IEFORFJPSURfQlVJTERfVE9QPSQkKHB3ZCk7XAorCQkkKFBSSVZBVEVfRU1VTEFUT1JfQk9PVF9URVNUX1NIKSA+ICQoY2hlY2tfZW11X2Jvb3QwKSkKKwkoaWYgZ3JlcCAtcSAkKFBSSVZBVEVfQk9PVF9DT01QTEVURV9TVFJJTkcpICQoY2hlY2tfZW11X2Jvb3QwKTtcCisJdGhlbiBlY2hvIGJvb3Rfc3VjY2VlZGVkID4gJChQUklWQVRFX1NVQ0NFU1NfRklMRSk7IGZpKQorCShpZiBncmVwIC1xICQoUFJJVkFURV9CT09UX0ZBSUxfU1RSSU5HKSAkKGNoZWNrX2VtdV9ib290MCk7XAorCXRoZW4gZWNobyBib290X2ZhaWxlZCA+ICQoUFJJVkFURV9GQUlMX0ZJTEUpOyBmaSkKKy5QSE9OWTogY2hlY2tfZW11X2Jvb3QKK2NoZWNrX2VtdV9ib290OiAkKGNoZWNrX2VtdV9ib290MCkKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvZGV2aWNlLXRlc3RzLm1rIGIvY29yZS90YXNrcy9kZXZpY2UtdGVzdHMubWsKaW5kZXggZDY3OWM1OS4uYTJiNjI2ZSAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy9kZXZpY2UtdGVzdHMubWsKKysrIGIvY29yZS90YXNrcy9kZXZpY2UtdGVzdHMubWsKQEAgLTYsNyArNiw3IEBACiAjCiAjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAjCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JscyBlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApAQCAtMTYsMTQgKzE2LDIzIEBACiAuUEhPTlk6IGRldmljZS10ZXN0cwogCiBkZXZpY2UtdGVzdHMtemlwIDo9ICQoUFJPRFVDVF9PVVQpL2RldmljZS10ZXN0cy56aXAKLSQoZGV2aWNlLXRlc3RzLXppcCk6ICQoQ09NUEFUSUJJTElUWS5kZXZpY2UtdGVzdHMuRklMRVMpICQoU09PTkdfWklQKQorIyBDcmVhdGUgYW4gYXJ0aWZhY3QgdG8gaW5jbHVkZSBhIGxpc3Qgb2YgdGVzdCBjb25maWcgZmlsZXMgaW4gZGV2aWNlLXRlc3RzLgorZGV2aWNlLXRlc3RzLWxpc3QtemlwIDo9ICQoUFJPRFVDVF9PVVQpL2RldmljZS10ZXN0c19saXN0LnppcAorJChkZXZpY2UtdGVzdHMtemlwKSA6IC5LQVRJX0lNUExJQ0lUX09VVFBVVFMgOj0gJChkZXZpY2UtdGVzdHMtbGlzdC16aXApCiskKGRldmljZS10ZXN0cy16aXApIDogUFJJVkFURV9kZXZpY2VfdGVzdHNfbGlzdCA6PSAkKFBST0RVQ1RfT1VUKS9kZXZpY2UtdGVzdHNfbGlzdAorCiskKGRldmljZS10ZXN0cy16aXApIDogJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5GSUxFUykgJChTT09OR19aSVApCiAJZWNobyAkKHNvcnQgJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5GSUxFUykpIHwgdHIgIiAiICJcbiIgPiAkQC5saXN0CiAJZ3JlcCAkKEhPU1RfT1VUX1RFU1RDQVNFUykgJEAubGlzdCA+ICRALWhvc3QubGlzdCB8fCB0cnVlCiAJZ3JlcCAkKFRBUkdFVF9PVVRfVEVTVENBU0VTKSAkQC5saXN0ID4gJEAtdGFyZ2V0Lmxpc3QgfHwgdHJ1ZQogCSQoaGlkZSkgJChTT09OR19aSVApIC1kIC1vICRAIC1QIGhvc3QgLUMgJChIT1NUX09VVCkgLWwgJEAtaG9zdC5saXN0IC1QIHRhcmdldCAtQyAkKFBST0RVQ1RfT1VUKSAtbCAkQC10YXJnZXQubGlzdAotCXJtIC1mICRALmxpc3QgJEAtaG9zdC5saXN0ICRALXRhcmdldC5saXN0CisJcm0gLWYgJChQUklWQVRFX2RldmljZV90ZXN0c19saXN0KQorCSQoaGlkZSkgZ3JlcCAtZSAuKi5jb25maWckJCAkQC1ob3N0Lmxpc3QgfCBzZWQgcyUkKEhPU1RfT1VUKSVob3N0JWcgPiAkKFBSSVZBVEVfZGV2aWNlX3Rlc3RzX2xpc3QpCisJJChoaWRlKSBncmVwIC1lIC4qLmNvbmZpZyQkICRALXRhcmdldC5saXN0IHwgc2VkIHMlJChQUk9EVUNUX09VVCkldGFyZ2V0JWcgPj4gJChQUklWQVRFX2RldmljZV90ZXN0c19saXN0KQorCSQoaGlkZSkgJChTT09OR19aSVApIC1kIC1vICQoZGV2aWNlLXRlc3RzLWxpc3QtemlwKSAtQyAkKGRpciAkQCkgLWYgJChQUklWQVRFX2RldmljZV90ZXN0c19saXN0KQorCXJtIC1mICRALmxpc3QgJEAtaG9zdC5saXN0ICRALXRhcmdldC5saXN0ICQoUFJJVkFURV9kZXZpY2VfdGVzdHNfbGlzdCkKIAogZGV2aWNlLXRlc3RzOiAkKGRldmljZS10ZXN0cy16aXApCi0kKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGRldmljZS10ZXN0cywgJChkZXZpY2UtdGVzdHMtemlwKSkKKyQoY2FsbCBkaXN0LWZvci1nb2FscywgZGV2aWNlLXRlc3RzLCAkKGRldmljZS10ZXN0cy16aXApICQoZGV2aWNlLXRlc3RzLWxpc3QtemlwKSkKIAogdGVzdHM6IGRldmljZS10ZXN0cwpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLm1rIGIvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLm1rCmluZGV4IGJmNGViMWQuLmM3ZjFkYzkgMTAwNjQ0Ci0tLSBhL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy5taworKysgYi9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsKQEAgLTYsNyArNiw3IEBACiAjCiAjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAjCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JscyBlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApAQCAtMTUsMTIgKzE1LDIxIEBACiAuUEhPTlk6IGdlbmVyYWwtdGVzdHMKIAogZ2VuZXJhbC10ZXN0cy16aXAgOj0gJChQUk9EVUNUX09VVCkvZ2VuZXJhbC10ZXN0cy56aXAKLSQoZ2VuZXJhbC10ZXN0cy16aXApOiAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5GSUxFUykgJChTT09OR19aSVApCisjIENyZWF0ZSBhbiBhcnRpZmFjdCB0byBpbmNsdWRlIGEgbGlzdCBvZiB0ZXN0IGNvbmZpZyBmaWxlcyBpbiBnZW5lcmFsLXRlc3RzLgorZ2VuZXJhbC10ZXN0cy1saXN0LXppcCA6PSAkKFBST0RVQ1RfT1VUKS9nZW5lcmFsLXRlc3RzX2xpc3QuemlwCiskKGdlbmVyYWwtdGVzdHMtemlwKSA6IC5LQVRJX0lNUExJQ0lUX09VVFBVVFMgOj0gJChnZW5lcmFsLXRlc3RzLWxpc3QtemlwKQorJChnZW5lcmFsLXRlc3RzLXppcCkgOiBQUklWQVRFX2dlbmVyYWxfdGVzdHNfbGlzdCA6PSAkKFBST0RVQ1RfT1VUKS9nZW5lcmFsLXRlc3RzX2xpc3QKKworJChnZW5lcmFsLXRlc3RzLXppcCkgOiAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5GSUxFUykgJChTT09OR19aSVApCiAJZWNobyAkKHNvcnQgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuRklMRVMpKSB8IHRyICIgIiAiXG4iID4gJEAubGlzdAogCWdyZXAgJChIT1NUX09VVF9URVNUQ0FTRVMpICRALmxpc3QgPiAkQC1ob3N0Lmxpc3QgfHwgdHJ1ZQogCWdyZXAgJChUQVJHRVRfT1VUX1RFU1RDQVNFUykgJEAubGlzdCA+ICRALXRhcmdldC5saXN0IHx8IHRydWUKIAkkKGhpZGUpICQoU09PTkdfWklQKSAtZCAtbyAkQCAtUCBob3N0IC1DICQoSE9TVF9PVVQpIC1sICRALWhvc3QubGlzdCAtUCB0YXJnZXQgLUMgJChQUk9EVUNUX09VVCkgLWwgJEAtdGFyZ2V0Lmxpc3QKLQlybSAtZiAkQC5saXN0ICRALWhvc3QubGlzdCAkQC10YXJnZXQubGlzdAorCXJtIC1mICQoUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2xpc3QpCisJJChoaWRlKSBncmVwIC1lIC4qLmNvbmZpZyQkICRALWhvc3QubGlzdCB8IHNlZCBzJSQoSE9TVF9PVVQpJWhvc3QlZyA+ICQoUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2xpc3QpCisJJChoaWRlKSBncmVwIC1lIC4qLmNvbmZpZyQkICRALXRhcmdldC5saXN0IHwgc2VkIHMlJChQUk9EVUNUX09VVCkldGFyZ2V0JWcgPj4gJChQUklWQVRFX2dlbmVyYWxfdGVzdHNfbGlzdCkKKwkkKGhpZGUpICQoU09PTkdfWklQKSAtZCAtbyAkKGdlbmVyYWwtdGVzdHMtbGlzdC16aXApIC1DICQoZGlyICRAKSAtZiAkKFBSSVZBVEVfZ2VuZXJhbF90ZXN0c19saXN0KQorCXJtIC1mICRALmxpc3QgJEAtaG9zdC5saXN0ICRALXRhcmdldC5saXN0ICQoUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2xpc3QpCiAKIGdlbmVyYWwtdGVzdHM6ICQoZ2VuZXJhbC10ZXN0cy16aXApCi0kKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGdlbmVyYWwtdGVzdHMsICQoZ2VuZXJhbC10ZXN0cy16aXApKQorJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBnZW5lcmFsLXRlc3RzLCAkKGdlbmVyYWwtdGVzdHMtemlwKSAkKGdlbmVyYWwtdGVzdHMtbGlzdC16aXApKQpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9tb2R1bGUtaW5mby5tayBiL2NvcmUvdGFza3MvbW9kdWxlLWluZm8ubWsKaW5kZXggZTliMmFjNy4uYjQ1NTI2ZiAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy9tb2R1bGUtaW5mby5taworKysgYi9jb3JlL3Rhc2tzL21vZHVsZS1pbmZvLm1rCkBAIC0xMSw2ICsxMSw4IEBACiAJCQknInBhdGgiOiBbJChmb3JlYWNoIHcsJChzb3J0ICQoQUxMX01PRFVMRVMuJChtKS5QQVRIKSksIiQodykiLCApXSwgJyBcCiAJCQknInRhZ3MiOiBbJChmb3JlYWNoIHcsJChzb3J0ICQoQUxMX01PRFVMRVMuJChtKS5UQUdTKSksIiQodykiLCApXSwgJyBcCiAJCQknImluc3RhbGxlZCI6IFskKGZvcmVhY2ggdywkKHNvcnQgJChBTExfTU9EVUxFUy4kKG0pLklOU1RBTExFRCkpLCIkKHcpIiwgKV0sICcgXAorCQkJJyJjb21wYXRpYmlsaXR5X3N1aXRlcyI6IFskKGZvcmVhY2ggdywkKHNvcnQgJChBTExfTU9EVUxFUy4kKG0pLkNPTVBBVElCSUxJVFlfU1VJVEVTKSksIiQodykiLCApXSwgJyBcCisJCQknImF1dG9fdGVzdF9jb25maWciOiBbJChBTExfTU9EVUxFUy4kKG0pLmF1dG9fdGVzdF9jb25maWcpXSwgJyBcCiAJCQknfSxcbicgXAogCSApIHwgc2VkIC1lICdzLywgKlxdL10vZycgLWUgJ3MvLCAqXH0vIH0vZycgLWUgJyQkcy8sJCQvLycgPj4gJEAKIAkkKGhpZGUpIGVjaG8gJ30nID4+ICRACmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL29lbV9pbWFnZS5tayBiL2NvcmUvdGFza3Mvb2VtX2ltYWdlLm1rCmluZGV4IDMyZDU2YTcuLjY2ZWVjMjIgMTAwNjQ0Ci0tLSBhL2NvcmUvdGFza3Mvb2VtX2ltYWdlLm1rCisrKyBiL2NvcmUvdGFza3Mvb2VtX2ltYWdlLm1rCkBAIC0zNSw3ICszNSw3IEBACiAJQG1rZGlyIC1wICQob2VtaW1hZ2VfaW50ZXJtZWRpYXRlcykgJiYgcm0gLXJmICQob2VtaW1hZ2VfaW50ZXJtZWRpYXRlcykvb2VtX2ltYWdlX2luZm8udHh0CiAJJChjYWxsIGdlbmVyYXRlLXVzZXJpbWFnZS1wcm9wLWRpY3Rpb25hcnksICQob2VtaW1hZ2VfaW50ZXJtZWRpYXRlcykvb2VtX2ltYWdlX2luZm8udHh0LCBza2lwX2ZzY2s9dHJ1ZSkKIAkkKGhpZGUpIFBBVEg9JChmb3JlYWNoIHAsJChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyksJChwKTopJCRQQVRIIFwKLQkgIC4vYnVpbGQvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKKwkgIGJ1aWxkL21ha2UvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKIAkgICQoVEFSR0VUX09VVF9PRU0pICQob2VtaW1hZ2VfaW50ZXJtZWRpYXRlcykvb2VtX2ltYWdlX2luZm8udHh0ICRAICQoVEFSR0VUX09VVCkKIAkkKGhpZGUpICQoY2FsbCBhc3NlcnQtbWF4LWltYWdlLXNpemUsJEAsJChCT0FSRF9PRU1JTUFHRV9QQVJUSVRJT05fU0laRSkpCiAKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3Mvc2RrLWFkZG9uLm1rIGIvY29yZS90YXNrcy9zZGstYWRkb24ubWsKaW5kZXggNTkzYzNjZC4uMTk3ZDQxYSAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy9zZGstYWRkb24ubWsKKysrIGIvY29yZS90YXNrcy9zZGstYWRkb24ubWsKQEAgLTExNSw3ICsxMTUsNyBAQAogCSQoaGlkZSkgJChTT09OR19aSVApIC1vICRAIC1DICQoZGlyICQoUFJJVkFURV9TVEFHSU5HX0RJUikpIC1EICQoUFJJVkFURV9TVEFHSU5HX0RJUikKIAogJChmdWxsX3RhcmdldF9pbWcpOiBQUklWQVRFX1NUQUdJTkdfRElSIDo9ICQoY2FsbCBhcHBlbmQtcGF0aCwkKHN0YWdpbmcpLCQoYWRkb25fZGlyX2ltZykpL2ltYWdlcy8kKFRBUkdFVF9DUFVfQUJJKQotJChmdWxsX3RhcmdldF9pbWcpOiAkKGZ1bGxfdGFyZ2V0KSAkKGFkZG9uX2ltZ19zb3VyY2VfcHJvcCkgfCAkKFNPT05HX1pJUCkKKyQoZnVsbF90YXJnZXRfaW1nKTogJChmdWxsX3RhcmdldCkgJChhZGRvbl9pbWdfc291cmNlX3Byb3ApIHwgJChBQ1ApICQoU09PTkdfWklQKQogCUBlY2hvIFBhY2thZ2luZyBTREsgQWRkb24gU3lzdGVtLUltYWdlOiAkQAogCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApCiAJJChBQ1ApIC1yICQoUFJPRFVDVF9PVVQpL2RhdGEgJChQUklWQVRFX1NUQUdJTkdfRElSKS9kYXRhCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Rlc3RfbWFwcGluZy5tayBiL2NvcmUvdGFza3MvdGVzdF9tYXBwaW5nLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Mjc1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rhc2tzL3Rlc3RfbWFwcGluZy5tawpAQCAtMCwwICsxLDM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIENyZWF0ZSBhbiBhcnRpZmFjdCB0byBpbmNsdWRlIFRFU1RfTUFQUElORyBmaWxlcyBpbiBzb3VyY2UgdHJlZS4KKworLlBIT05ZOiB0ZXN0X21hcHBpbmcKKworaW50ZXJtZWRpYXRlcyA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyx0ZXN0X21hcHBpbmcpCit0ZXN0X21hcHBpbmdzX3ppcCA6PSAkKGludGVybWVkaWF0ZXMpL3Rlc3RfbWFwcGluZ3MuemlwCit0ZXN0X21hcHBpbmdfbGlzdCA6PSAkKE9VVF9ESVIpLy5tb2R1bGVfcGF0aHMvVEVTVF9NQVBQSU5HLmxpc3QKK3Rlc3RfbWFwcGluZ3MgOj0gJChmaWxlIDwkKHRlc3RfbWFwcGluZ19saXN0KSkKKyQodGVzdF9tYXBwaW5nc196aXApIDogUFJJVkFURV90ZXN0X21hcHBpbmdzIDo9ICQoc3Vic3QgJChuZXdsaW5lKSxcbiwkKHRlc3RfbWFwcGluZ3MpKQorCiskKHRlc3RfbWFwcGluZ3NfemlwKSA6ICQodGVzdF9tYXBwaW5ncykgJChTT09OR19aSVApCisJQGVjaG8gIkJ1aWxkaW5nIGFydGlmYWN0IHRvIGluY2x1ZGUgVEVTVF9NQVBQSU5HIGZpbGVzLiIKKwlybSAtcmYgJEAKKwllY2hvIC1lICIkKFBSSVZBVEVfdGVzdF9tYXBwaW5ncykiID4gJEAubGlzdAorCSQoU09PTkdfWklQKSAtbyAkQCAtQyAuIC1sICRALmxpc3QKKwlybSAtZiAkQC5saXN0CisKK3Rlc3RfbWFwcGluZyA6ICQodGVzdF9tYXBwaW5nc196aXApCisKKyQoY2FsbCBkaXN0LWZvci1nb2FscywgZGlzdF9maWxlcyB0ZXN0X21hcHBpbmcsJCh0ZXN0X21hcHBpbmdzX3ppcCkpCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Rvb2xzL2J1aWxkX2N1c3RvbV9pbWFnZS5tayBiL2NvcmUvdGFza3MvdG9vbHMvYnVpbGRfY3VzdG9tX2ltYWdlLm1rCmluZGV4IDdjMzg1NDYuLmExMTUxZTkgMTAwNjQ0Ci0tLSBhL2NvcmUvdGFza3MvdG9vbHMvYnVpbGRfY3VzdG9tX2ltYWdlLm1rCisrKyBiL2NvcmUvdGFza3MvdG9vbHMvYnVpbGRfY3VzdG9tX2ltYWdlLm1rCkBAIC0xNTEsOSArMTUxLDkgQEAKIAkgICAgY2F0ICQoUFJJVkFURV9ESUNUX0ZJTEUpID4+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTKS9pbWFnZV9pbmZvLnR4dCkKIAkjIEdlbmVyYXRlIHRoZSBpbWFnZS4KIAkkKGlmICQoZmlsdGVyIG9lbSwkKFBSSVZBVEVfTU9VTlRfUE9JTlQpKSwgXAotCSAgJChoaWRlKSBlY2hvICJvZW0uYnVpbGRudW1iZXI9JChCVUlMRF9OVU1CRVIpIiA+PiAkKFBSSVZBVEVfU1RBR0lOR19ESVIpL29lbS5wcm9wKQorCSAgJChoaWRlKSBlY2hvICJvZW0uYnVpbGRudW1iZXI9JChCVUlMRF9OVU1CRVJfRlJPTV9GSUxFKSIgPj4gJChQUklWQVRFX1NUQUdJTkdfRElSKS9vZW0ucHJvcCkKIAkkKGhpZGUpIFBBVEg9JChmb3JlYWNoIHAsJChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyksJChwKTopJCRQQVRIIFwKLQkgIC4vYnVpbGQvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKKwkgIGJ1aWxkL21ha2UvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5IFwKIAkgICQoUFJJVkFURV9TVEFHSU5HX0RJUikgJChQUklWQVRFX0lOVEVSTUVESUFURVMpL2ltYWdlX2luZm8udHh0ICRAICQoVEFSR0VUX09VVCkKIAogbXlfaW5zdGFsbGVkX2N1c3RvbV9pbWFnZSA6PSAkKFBST0RVQ1RfT1VUKS8kKG5vdGRpciAkKG15X2J1aWx0X2N1c3RvbV9pbWFnZSkpCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Rvb2xzL2NvbXBhdGliaWxpdHkubWsgYi9jb3JlL3Rhc2tzL3Rvb2xzL2NvbXBhdGliaWxpdHkubWsKaW5kZXggMjBiODMxNC4uNjExNzQxNCAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy90b29scy9jb21wYXRpYmlsaXR5Lm1rCisrKyBiL2NvcmUvdGFza3MvdG9vbHMvY29tcGF0aWJpbGl0eS5tawpAQCAtMTksNiArMTksOCBAQAogIyAgIHRlc3Rfc3VpdGVfdHJhZGVmZWQ6IHRoZSBuYW1lIG9mIHRoaXMgdGVzdCBzdWl0ZSdzIHRyYWRlZmVkIHdyYXBwZXIKICMgICB0ZXN0X3N1aXRlX2R5bmFtaWNfY29uZmlnOiB0aGUgcGF0aCB0byB0aGlzIHRlc3Qgc3VpdGUncyBkeW5hbWljIGNvbmZpZ3VyYXRpb24gZmlsZQogIyAgIHRlc3Rfc3VpdGVfcmVhZG1lOiB0aGUgcGF0aCB0byBhIFJFQURNRSBmaWxlIGZvciB0aGlzIHRlc3Qgc3VpdGUKKyMgICB0ZXN0X3N1aXRlX3ByZWJ1aWx0X3Rvb2xzOiB0aGUgc2V0IG9mIHByZWJ1aWx0IHRvb2xzIHRvIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSAndG9vbHMnIHN1YmRpcmVjdG9yeSBvZiB0aGUgdGVzdCBzdWl0ZS4KICMgT3V0cHV0IHZhcmlhYmxlczoKICMgICBjb21wYXRpYmlsaXR5X3ppcDogdGhlIHBhdGggdG8gdGhlIG91dHB1dCB6aXAgZmlsZS4KIApAQCAtMjYsNiArMjgsNyBAQAogdGVzdF9hcnRpZmFjdHMgOj0gJChDT01QQVRJQklMSVRZLiQodGVzdF9zdWl0ZV9uYW1lKS5GSUxFUykKIHRlc3RfdG9vbHMgOj0gJChIT1NUX09VVF9KQVZBX0xJQlJBUklFUykvaG9zdHRlc3RsaWIuamFyIFwKICAgJChIT1NUX09VVF9KQVZBX0xJQlJBUklFUykvdHJhZGVmZWQuamFyIFwKKyAgJChIT1NUX09VVF9KQVZBX0xJQlJBUklFUykvbG9nYW5hbHlzaXMuamFyIFwKICAgJChIT1NUX09VVF9KQVZBX0xJQlJBUklFUykvY29tcGF0aWJpbGl0eS1ob3N0LXV0aWwuamFyIFwKICAgJChIT1NUX09VVF9KQVZBX0xJQlJBUklFUykvY29tcGF0aWJpbGl0eS1ob3N0LXV0aWwtdGVzdHMuamFyIFwKICAgJChIT1NUX09VVF9KQVZBX0xJQlJBUklFUykvY29tcGF0aWJpbGl0eS1jb21tb24tdXRpbC10ZXN0cy5qYXIgXApAQCAtMzksMTAgKzQyLDEwIEBACiBjb21wYXRpYmlsaXR5X3ppcCA6PSAkKG91dF9kaXIpLnppcAogJChjb21wYXRpYmlsaXR5X3ppcCk6IFBSSVZBVEVfTkFNRSA6PSBhbmRyb2lkLSQodGVzdF9zdWl0ZV9uYW1lKQogJChjb21wYXRpYmlsaXR5X3ppcCk6IFBSSVZBVEVfT1VUX0RJUiA6PSAkKG91dF9kaXIpCi0kKGNvbXBhdGliaWxpdHlfemlwKTogUFJJVkFURV9UT09MUyA6PSAkKHRlc3RfdG9vbHMpCiskKGNvbXBhdGliaWxpdHlfemlwKTogUFJJVkFURV9UT09MUyA6PSAkKHRlc3RfdG9vbHMpICQodGVzdF9zdWl0ZV9wcmVidWlsdF90b29scykKICQoY29tcGF0aWJpbGl0eV96aXApOiBQUklWQVRFX1NVSVRFX05BTUUgOj0gJCh0ZXN0X3N1aXRlX25hbWUpCiAkKGNvbXBhdGliaWxpdHlfemlwKTogUFJJVkFURV9EWU5BTUlDX0NPTkZJRyA6PSAkKHRlc3Rfc3VpdGVfZHluYW1pY19jb25maWcpCi0kKGNvbXBhdGliaWxpdHlfemlwKTogJCh0ZXN0X2FydGlmYWN0cykgJCh0ZXN0X3Rvb2xzKSAkKHRlc3Rfc3VpdGVfZHluYW1pY19jb25maWcpICQoU09PTkdfWklQKSB8ICQoQURCKSAkKEFDUCkKKyQoY29tcGF0aWJpbGl0eV96aXApOiAkKHRlc3RfYXJ0aWZhY3RzKSAkKHRlc3RfdG9vbHMpICQodGVzdF9zdWl0ZV9wcmVidWlsdF90b29scykgJCh0ZXN0X3N1aXRlX2R5bmFtaWNfY29uZmlnKSAkKFNPT05HX1pJUCkgfCAkKEFEQikgJChBQ1ApCiAjIE1ha2UgZGlyIHN0cnVjdHVyZQogCSQoaGlkZSkgbWtkaXIgLXAgJChQUklWQVRFX09VVF9ESVIpL3Rvb2xzICQoUFJJVkFURV9PVVRfRElSKS90ZXN0Y2FzZXMKICMgQ29weSB0b29scwpAQCAtNTYsMyArNTksNCBAQAogdGVzdF9zdWl0ZV90cmFkZWZlZCA6PQogdGVzdF9zdWl0ZV9keW5hbWljX2NvbmZpZyA6PQogdGVzdF9zdWl0ZV9yZWFkbWUgOj0KK3Rlc3Rfc3VpdGVfcHJlYnVpbHRfdG9vbHMgOj0KZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvdHJhZGVmZWQtdGVzdHMtbGlzdC5tayBiL2NvcmUvdGFza3MvdHJhZGVmZWQtdGVzdHMtbGlzdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2JkZmNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90YXNrcy90cmFkZWZlZC10ZXN0cy1saXN0Lm1rCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgTGlzdCBhbGwgVHJhZGVGZWQgdGVzdHMgZnJvbSBDT01QQVRJQklMSVRZLnRyYWRlZmVkX3Rlc3RzX2RpcgorLlBIT05ZOiB0cmFkZWZlZC10ZXN0cy1saXN0CisKK3RyYWRlZmVkX3Rlc3RzIDo9CiskKGZvcmVhY2ggZGlyLCAkKENPTVBBVElCSUxJVFkudHJhZGVmZWRfdGVzdHNfZGlyKSwgXAorICAkKGV2YWwgdHJhZGVmZWRfdGVzdHMgKz0gJChzaGVsbCBmaW5kICQoZGlyKSAtdHlwZSBmIC1uYW1lICIqLnhtbCIpKSkKK3RyYWRlZmVkX3Rlc3RzX2xpc3RfaW50ZXJtZWRpYXRlcyA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyx0cmFkZWZlZF90ZXN0c19saXN0LEhPU1QsQ09NTU9OKQordHJhZGVmZWRfdGVzdHNfbGlzdF96aXAgOj0gJCh0cmFkZWZlZF90ZXN0c19saXN0X2ludGVybWVkaWF0ZXMpL3RyYWRlZmVkLXRlc3RzX2xpc3QuemlwCithbGxfdGVzdHMgOj0KKyQoZm9yZWFjaCB0ZXN0LCAkKHRyYWRlZmVkX3Rlc3RzKSwgXAorICAkKGV2YWwgYWxsX3Rlc3RzICs9ICQod29yZCAyLCQoc3Vic3QgL3Jlcy9jb25maWcvLCQoc3BhY2UpLCQodGVzdCkpKSkpCiskKHRyYWRlZmVkX3Rlc3RzX2xpc3RfemlwKSA6IFBSSVZBVEVfdHJhZGVmZWRfdGVzdHMgOj0gJChzdWJzdCAueG1sLCwkKHN1YnN0ICQoc3BhY2UpLFxuLCQoc29ydCAkKGFsbF90ZXN0cykpKSkKKyQodHJhZGVmZWRfdGVzdHNfbGlzdF96aXApIDogUFJJVkFURV90cmFkZWZlZF90ZXN0c19saXN0IDo9ICQodHJhZGVmZWRfdGVzdHNfbGlzdF9pbnRlcm1lZGlhdGVzKS90cmFkZWZlZC10ZXN0c19saXN0CisKKyQodHJhZGVmZWRfdGVzdHNfbGlzdF96aXApIDogJCh0cmFkZWZlZF90ZXN0cykgJChTT09OR19aSVApCisJQGVjaG8gIlBhY2thZ2U6ICRAIgorCSQoaGlkZSkgcm0gLXJmICQoZGlyICRAKSAmJiBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpIGVjaG8gLWUgIiQoUFJJVkFURV90cmFkZWZlZF90ZXN0cykiID4gJChQUklWQVRFX3RyYWRlZmVkX3Rlc3RzX2xpc3QpCisJJChoaWRlKSAkKFNPT05HX1pJUCkgLWQgLW8gJEAgLUMgJChkaXIgJEApIC1mICQoUFJJVkFURV90cmFkZWZlZF90ZXN0c19saXN0KQorCit0cmFkZWZlZC10ZXN0cy1saXN0IDogJCh0cmFkZWZlZF90ZXN0c19saXN0X3ppcCkKKyQoY2FsbCBkaXN0LWZvci1nb2FscywgdHJhZGVmZWQtdGVzdHMtbGlzdCwgJCh0cmFkZWZlZF90ZXN0c19saXN0X3ppcCkpCisKK3Rlc3RzOiB0cmFkZWZlZC10ZXN0cy1saXN0CmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3ZuZGsubWsgYi9jb3JlL3Rhc2tzL3ZuZGsubWsKaW5kZXggZDgyNGE0MS4uMzYwNGFlZCAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy92bmRrLm1rCisrKyBiL2NvcmUvdGFza3Mvdm5kay5tawpAQCAtMTcsNiArMTcsMTIgQEAKICMgQk9BUkRfVk5ES19WRVJTSU9OIG11c3QgYmUgc2V0IHRvICdjdXJyZW50JyBpbiBvcmRlciB0byBnZW5lcmF0ZSBhIFZOREsgc25hcHNob3QuCiBpZmVxICgkKEJPQVJEX1ZOREtfVkVSU0lPTiksY3VycmVudCkKIAorIyBQTEFURk9STV9WTkRLX1ZFUlNJT04gbXVzdCBiZSBzZXQuCitpZm5lcSAoLCQoUExBVEZPUk1fVk5ES19WRVJTSU9OKSkKKworIyBCT0FSRF9WTkRLX1JVTlRJTUVfRElTQUJMRSBtdXN0IG5vdCBiZSBzZXQgdG8gJ3RydWUnLgoraWZuZXEgKCQoQk9BUkRfVk5ES19SVU5USU1FX0RJU0FCTEUpLHRydWUpCisKICMgUmV0dXJucyBhcmNoLXNwZWNpZmljIGxpYmNsYW5nX3J0LnVic2FuKiBsaWJyYXJ5IG5hbWUuCiAjIEJlY2F1c2UgVk5ES19DT1JFX0xJQlJBUklFUyBpbmNsdWRlcyBhbGwgYXJjaCB2YXJpYW50cyBmb3IgbGliY2xhbmdfcnQudWJzYW4qCiAjIGxpYnMsIHRoZSBhcmNoLXNwZWNpZmljIGxpYnMgYXJlIHNlbGVjdGVkIHNlcGFyYXRlbHkuCkBAIC0yNCw3MiArMzAsMTY5IEBACiAjIEFyZ3M6CiAjICAgJCgxKTogaWYgbm90IGVtcHR5LCBldmFsdWF0ZXMgZm9yIFRBUkdFVF8yTkRfQVJDSAogZGVmaW5lIGNsYW5nLXVic2FuLXZuZGstY29yZQotICAkKGV2YWwgcHJlZml4IDo9ICQoaWYgJCgxKSwyTkRfLCkpCi0gICQoYWRkc3VmZml4IC52ZW5kb3IsJCgkKGFkZHByZWZpeCAkKHByZWZpeCksVUJTQU5fUlVOVElNRV9MSUJSQVJZKSkpCiskKHN0cmlwIFwKKyAgJChldmFsIHByZWZpeCA6PSAkKGlmICQoMSksMk5EXywpKSBcCisgICQoYWRkc3VmZml4IC52ZW5kb3IsJCgkKGFkZHByZWZpeCAkKHByZWZpeCksVUJTQU5fUlVOVElNRV9MSUJSQVJZKSkpIFwKKykKIGVuZGVmCiAKKyMgUmV0dXJucyBsaXN0IG9mIGZpbGUgcGF0aHMgb2YgdGhlIGludGVybWVkaWF0ZSBvYmpzCisjCiAjIEFyZ3M6Ci0jICAgJCgxKTogbGlzdCBvZiBsaWIgbmFtZXMgd2l0aG91dCAnLnNvJyBzdWZmaXggKGUuZy4sIGxpYlgudmVuZG9yKQotIyAgICQoMik6IGlmIG5vdCBlbXB0eSwgZXZhbHVhdGVzIGZvciBUQVJHRVRfMk5EX0FSQ0gKKyMgICAkKDEpOiBsaXN0IG9mIG1vZHVsZSBhbmQgZmlsZW5hbWUgcGFpcnMgKGUuZy4sIGxkLmNvbmZpZy50eHQ6bGQuY29uZmlnLjI3LnR4dCAuLi4pCisjICAgJCgyKTogdGFyZ2V0IGNsYXNzIChlLmcuLCBTSEFSRURfTElCUkFSSUVTLCBTVEFUSUNfTElCUkFSSUVTLCBFVEMpCisjICAgJCgzKTogaWYgbm90IGVtcHR5LCBldmFsdWF0ZXMgZm9yIFRBUkdFVF8yTkRfQVJDSAogZGVmaW5lIHBhdGhzLW9mLWludGVybWVkaWF0ZXMKLSAgJChzdHJpcCBcCi0gICAgJChmb3JlYWNoIGxpYiwkKDEpLCBcCi0gICAgICAkKGNhbGwgYXBwZW5kLXBhdGgsJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixTSEFSRURfTElCUkFSSUVTLCQobGliKSwsLCQoMikpLCQobGliKS5zbykpKQorJChzdHJpcCBcCisgICQoZm9yZWFjaCBwYWlyLCQoMSksIFwKKyAgICAkKGV2YWwgc3BsaXRfcGFpciA6PSAkKHN1YnN0IDosJChzcGFjZSksJChwYWlyKSkpIFwKKyAgICAkKGV2YWwgbW9kdWxlIDo9ICQod29yZCAxLCQoc3BsaXRfcGFpcikpKSBcCisgICAgJChldmFsIGZpbGVuYW1lIDo9ICQod29yZCAyLCQoc3BsaXRfcGFpcikpKSBcCisgICAgJChldmFsIGRpciA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLCQoMiksJChtb2R1bGUpLCwsJCgzKSkpIFwKKyAgICAkKGNhbGwgYXBwZW5kLXBhdGgsJChkaXIpLCQoZmlsZW5hbWUpKSBcCisgICkgXAorKQogZW5kZWYKIAotdm5ka19jb3JlX2xpYnMgOj0gJChhZGRzdWZmaXggLnZlbmRvciwkKGZpbHRlci1vdXQgbGliY2xhbmdfcnQudWJzYW4lLCQoVk5ES19DT1JFX0xJQlJBUklFUykpKQotdm5ka19zcF9saWJzIDo9ICQoYWRkc3VmZml4IC52ZW5kb3IsJChWTkRLX1NBTUVQUk9DRVNTX0xJQlJBUklFUykpCi12bmRrX3NuYXBzaG90X2RlcGVuZGVuY2llcyA6PSBcCi0gICQodm5ka19jb3JlX2xpYnMpIFwKLSAgJCh2bmRrX3NwX2xpYnMpCisjIFJldHVybnMgcGF0aHMgb2Ygbm90aWNlIGZpbGVzIHVuZGVyICQoVEFSR0VUX09VVF9OT1RJQ0VfRklMRVMpCisjCisjIEFyZ3M6CisjICAgJCgxKTogbGlzdCBvZiBsaWIgbmFtZXMgKGUuZy4sIGxpYmZvby52ZW5kb3IpCisjICAgJCgyKTogdm5kayBsaWIgdHlwZSwgb25lIG9mICd2bmRrJyBvciAndm5kay1zcCcKK2RlZmluZSBwYXRocy1vZi1ub3RpY2UtZmlsZXMKKyQoc3RyaXAgXAorICAkKGV2YWwgbGliX2RpciA6PSBsaWIkKGlmICQoVEFSR0VUX0lTXzY0QklUKSw2NCwpKSBcCisgICQoZXZhbCB2bmRrX2RpciA6PSAkKDIpLSQoUExBVEZPUk1fVk5ES19WRVJTSU9OKSkgXAorICAkKGZvcmVhY2ggbGliLCQoMSksIFwKKyAgICAkKGV2YWwgbm90aWNlX2ZpbGVfbmFtZSA6PSAkKHBhdHN1YnN0ICUudmVuZG9yLCUuc28udHh0LCQobGliKSkpIFwKKyAgICAkKFRBUkdFVF9PVVRfTk9USUNFX0ZJTEVTKS9zcmMvc3lzdGVtLyQobGliX2RpcikvJCh2bmRrX2RpcikvJChub3RpY2VfZmlsZV9uYW1lKSBcCisgICkgXAorKQorZW5kZWYKIAogIyBJZiBpbiB0aGUgZnV0dXJlIGxpYmNsYW5nX3J0LnVic2FuKiBpcyByZW1vdmVkIGZyb20gdGhlIFZOREstY29yZSBsaXN0LAogIyBuZWVkIHRvIHVwZGF0ZSB0aGUgcmVsYXRlZCBsb2dpYyBpbiB0aGlzIGZpbGUuCiBpZmVxICgsJChmaWx0ZXIgbGliY2xhbmdfcnQudWJzYW4lLCQoVk5ES19DT1JFX0xJQlJBUklFUykpKQotICAkKGVycm9yIGxpYmNsYW5nX3J0LnVic2FuKiBpcyBubyBsb25nZXIgYSBWTkRLLWNvcmUgbGlicmFyeS4pCisgICQod2FybmluZyBsaWJjbGFuZ19ydC51YnNhbiogaXMgbm8gbG9uZ2VyIGEgVk5ESy1jb3JlIGxpYnJhcnkuIFBsZWFzZSB1cGRhdGUgdGhpcyBmaWxlLikKKyAgdm5ka19jb3JlX2xpYnMgOj0gJChhZGRzdWZmaXggLnZlbmRvciwkKFZOREtfQ09SRV9MSUJSQVJJRVMpKQorZWxzZQorICB2bmRrX2NvcmVfbGlicyA6PSAkKGFkZHN1ZmZpeCAudmVuZG9yLCQoZmlsdGVyLW91dCBsaWJjbGFuZ19ydC51YnNhbiUsJChWTkRLX0NPUkVfTElCUkFSSUVTKSkpCisKKyAgdm5ka19jb3JlX2xpYnMgKz0gJChjYWxsIGNsYW5nLXVic2FuLXZuZGstY29yZSkKKyAgaWZkZWYgVEFSR0VUXzJORF9BUkNICisgICAgdm5ka19jb3JlX2xpYnMgKz0gJChjYWxsIGNsYW5nLXVic2FuLXZuZGstY29yZSx0cnVlKQorICBlbmRpZgogZW5kaWYKIAotIyBmb3IgVEFSR0VUX0FSQ0gKLWNsYW5nX3Vic2FuX3ZuZGtfY29yZV8kKFRBUkdFVF9BUkNIKSA6PSAkKGNhbGwgY2xhbmctdWJzYW4tdm5kay1jb3JlKQotdm5ka19zbmFwc2hvdF9kZXBlbmRlbmNpZXMgKz0gXAotICAkKGNsYW5nX3Vic2FuX3ZuZGtfY29yZV8kKFRBUkdFVF9BUkNIKSkKK3ZuZGtfc3BfbGlicyA6PSAkKGFkZHN1ZmZpeCAudmVuZG9yLCQoVk5ES19TQU1FUFJPQ0VTU19MSUJSQVJJRVMpKQordm5ka19wcml2YXRlX2xpYnMgOj0gJChhZGRzdWZmaXggLnZlbmRvciwkKFZOREtfUFJJVkFURV9MSUJSQVJJRVMpKQogCi1pZmRlZiBUQVJHRVRfMk5EX0FSQ0gKLWNsYW5nX3Vic2FuX3ZuZGtfY29yZV8kKFRBUkdFVF8yTkRfQVJDSCkgOj0gJChjYWxsIGNsYW5nLXVic2FuLXZuZGstY29yZSx0cnVlKQotdm5ka19zbmFwc2hvdF9kZXBlbmRlbmNpZXMgKz0gXAotICAkKGNsYW5nX3Vic2FuX3ZuZGtfY29yZV8kKFRBUkdFVF8yTkRfQVJDSCkpCi1lbmRpZgordm5ka19zbmFwc2hvdF9saWJzIDo9IFwKKyAgJCh2bmRrX2NvcmVfbGlicykgXAorICAkKHZuZGtfc3BfbGlicykKIAordm5ka19wcmVidWlsdF90eHRzIDo9IFwKKyAgbGQuY29uZmlnLnR4dCBcCisgIHZuZGtzcC5saWJyYXJpZXMudHh0IFwKKyAgbGxuZGsubGlicmFyaWVzLnR4dAorCit2bmRrX3NuYXBzaG90X3RvcCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyx2bmRrLXNuYXBzaG90KQordm5ka19zbmFwc2hvdF9vdXQgOj0gJCh2bmRrX3NuYXBzaG90X3RvcCkvdm5kay1zbmFwc2hvdAordm5ka19zbmFwc2hvdF9jb25maWdzX291dCA6PSAkKHZuZGtfc25hcHNob3RfdG9wKS9jb25maWdzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB2bmRrY29yZS5saWJyYXJpZXMudHh0Cit2bmRrY29yZS5saWJyYXJpZXMudHh0IDo9ICQodm5ka19zbmFwc2hvdF9jb25maWdzX291dCkvdm5ka2NvcmUubGlicmFyaWVzLnR4dAorJCh2bmRrY29yZS5saWJyYXJpZXMudHh0KTogJCh2bmRrX2NvcmVfbGlicykKKwlAZWNobyAnR2VuZXJhdGluZzogJEAnCisJQHJtIC1mICRACisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgZWNobyAtbiA+ICRACisJJChoaWRlKSAkKGZvcmVhY2ggbGliLCReLGVjaG8gJChwYXRzdWJzdCAlLnZlbmRvciwlLCQobGliKSkuc28gPj4gJEA7KQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB2bmRrcHJpdmF0ZS5saWJyYXJpZXMudHh0Cit2bmRrcHJpdmF0ZS5saWJyYXJpZXMudHh0IDo9ICQodm5ka19zbmFwc2hvdF9jb25maWdzX291dCkvdm5ka3ByaXZhdGUubGlicmFyaWVzLnR4dAorJCh2bmRrcHJpdmF0ZS5saWJyYXJpZXMudHh0KTogJCh2bmRrX3ByaXZhdGVfbGlicykKKwlAZWNobyAnR2VuZXJhdGluZzogJEAnCisJQHJtIC1mICRACisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgZWNobyAtbiA+ICRACisJJChoaWRlKSAkKGZvcmVhY2ggbGliLCReLGVjaG8gJChwYXRzdWJzdCAlLnZlbmRvciwlLCQobGliKSkuc28gPj4gJEA7KQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb2R1bGVfcGF0aHMudHh0Cittb2R1bGVfcGF0aHMudHh0IDo9ICQodm5ka19zbmFwc2hvdF9jb25maWdzX291dCkvbW9kdWxlX3BhdGhzLnR4dAorJChtb2R1bGVfcGF0aHMudHh0KTogJCh2bmRrX3NuYXBzaG90X2xpYnMpCisJQGVjaG8gJ0dlbmVyYXRpbmc6ICRAJworCUBybSAtZiAkQAorCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpIGVjaG8gLW4gPiAkQAorCSQoaGlkZSkgJChmb3JlYWNoIGxpYiwkXixlY2hvICQocGF0c3Vic3QgJS52ZW5kb3IsJSwkKGxpYikpLnNvICQoQUxMX01PRFVMRVMuJChsaWIpLlBBVEgpID4+ICRAOykKKworCit2bmRrX3NuYXBzaG90X2NvbmZpZ3MgOj0gXAorICAkKHZuZGtjb3JlLmxpYnJhcmllcy50eHQpIFwKKyAgJCh2bmRrcHJpdmF0ZS5saWJyYXJpZXMudHh0KSBcCisgICQobW9kdWxlX3BhdGhzLnR4dCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHZuZGtfc25hcHNob3RfemlwCit2bmRrX3NuYXBzaG90X3ZhcmlhbnQgOj0gJCh2bmRrX3NuYXBzaG90X291dCkvJChUQVJHRVRfQVJDSCkKK3ZuZGtfbGliX2RpciA6PSAkKHZuZGtfc25hcHNob3RfdmFyaWFudCkvYXJjaC0kKFRBUkdFVF9BUkNIKS0kKFRBUkdFVF9BUkNIX1ZBUklBTlQpCit2bmRrX2xpYl9kaXJfMm5kIDo9ICQodm5ka19zbmFwc2hvdF92YXJpYW50KS9hcmNoLSQoVEFSR0VUXzJORF9BUkNIKS0kKFRBUkdFVF8yTkRfQVJDSF9WQVJJQU5UKQogdm5ka19zbmFwc2hvdF96aXAgOj0gJChQUk9EVUNUX09VVCkvYW5kcm9pZC12bmRrLSQoVEFSR0VUX0FSQ0gpLnppcAotdm5ka19zbmFwc2hvdF9vdXQgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcsdm5kay1zbmFwc2hvdCkKKwogJCh2bmRrX3NuYXBzaG90X3ppcCk6IFBSSVZBVEVfVk5ES19TTkFQU0hPVF9PVVQgOj0gJCh2bmRrX3NuYXBzaG90X291dCkKIAotJCh2bmRrX3NuYXBzaG90X3ppcCk6IFBSSVZBVEVfVk5ES19DT1JFX09VVF8kKFRBUkdFVF9BUkNIKSA6PSBcCi0gICQodm5ka19zbmFwc2hvdF9vdXQpL2FyY2gtJChUQVJHRVRfQVJDSCkvc2hhcmVkL3ZuZGstY29yZQotJCh2bmRrX3NuYXBzaG90X3ppcCk6IFBSSVZBVEVfVk5ES19DT1JFX0lOVEVSTUVESUFURVNfJChUQVJHRVRfQVJDSCkgOj0gXAotICAkKGNhbGwgcGF0aHMtb2YtaW50ZXJtZWRpYXRlcywkKHZuZGtfY29yZV9saWJzKSAkKGNsYW5nX3Vic2FuX3ZuZGtfY29yZV8kKFRBUkdFVF9BUkNIKSkpCi0kKHZuZGtfc25hcHNob3RfemlwKTogUFJJVkFURV9WTkRLX1NQX09VVF8kKFRBUkdFVF9BUkNIKSA6PSBcCi0gICQodm5ka19zbmFwc2hvdF9vdXQpL2FyY2gtJChUQVJHRVRfQVJDSCkvc2hhcmVkL3ZuZGstc3AKLSQodm5ka19zbmFwc2hvdF96aXApOiBQUklWQVRFX1ZOREtfU1BfSU5URVJNRURJQVRFU18kKFRBUkdFVF9BUkNIKSA6PSBcCi0gICQoY2FsbCBwYXRocy1vZi1pbnRlcm1lZGlhdGVzLCQodm5ka19zcF9saWJzKSkKKyQodm5ka19zbmFwc2hvdF96aXApOiBQUklWQVRFX1ZOREtfQ09SRV9PVVQgOj0gJCh2bmRrX2xpYl9kaXIpL3NoYXJlZC92bmRrLWNvcmUKKyQodm5ka19zbmFwc2hvdF96aXApOiBQUklWQVRFX1ZOREtfQ09SRV9JTlRFUk1FRElBVEVTIDo9IFwKKyAgJChjYWxsIHBhdGhzLW9mLWludGVybWVkaWF0ZXMsJChmb3JlYWNoIGxpYiwkKHZuZGtfY29yZV9saWJzKSwkKGxpYik6JChsaWIpLnNvKSxTSEFSRURfTElCUkFSSUVTKQorCiskKHZuZGtfc25hcHNob3RfemlwKTogUFJJVkFURV9WTkRLX1NQX09VVCA6PSAkKHZuZGtfbGliX2Rpcikvc2hhcmVkL3ZuZGstc3AKKyQodm5ka19zbmFwc2hvdF96aXApOiBQUklWQVRFX1ZOREtfU1BfSU5URVJNRURJQVRFUyA6PSBcCisgICQoY2FsbCBwYXRocy1vZi1pbnRlcm1lZGlhdGVzLCQoZm9yZWFjaCBsaWIsJCh2bmRrX3NwX2xpYnMpLCQobGliKTokKGxpYikuc28pLFNIQVJFRF9MSUJSQVJJRVMpCisKKyQodm5ka19zbmFwc2hvdF96aXApOiBQUklWQVRFX0NPTkZJR1NfT1VUIDo9ICQodm5ka19zbmFwc2hvdF92YXJpYW50KS9jb25maWdzCiskKHZuZGtfc25hcHNob3RfemlwKTogUFJJVkFURV9DT05GSUdTX0lOVEVSTUVESUFURVMgOj0gXAorICAkKGNhbGwgcGF0aHMtb2YtaW50ZXJtZWRpYXRlcywkKGZvcmVhY2ggdHh0LCQodm5ka19wcmVidWlsdF90eHRzKSwgXAorICAgICQodHh0KTokKHBhdHN1YnN0ICUudHh0LCUuJChQTEFURk9STV9WTkRLX1ZFUlNJT04pLnR4dCwkKHR4dCkpKSxFVEMpIFwKKyAgJCh2bmRrX3NuYXBzaG90X2NvbmZpZ3MpCisKKyQodm5ka19zbmFwc2hvdF96aXApOiBQUklWQVRFX05PVElDRV9GSUxFU19PVVQgOj0gJCh2bmRrX3NuYXBzaG90X3ZhcmlhbnQpL05PVElDRV9GSUxFUworJCh2bmRrX3NuYXBzaG90X3ppcCk6IFBSSVZBVEVfTk9USUNFX0ZJTEVTX0lOVEVSTUVESUFURVMgOj0gXAorICAkKGNhbGwgcGF0aHMtb2Ytbm90aWNlLWZpbGVzLCQodm5ka19jb3JlX2xpYnMpLHZuZGspIFwKKyAgJChjYWxsIHBhdGhzLW9mLW5vdGljZS1maWxlcywkKHZuZGtfc3BfbGlicyksdm5kay1zcCkKIAogaWZkZWYgVEFSR0VUXzJORF9BUkNICi0kKHZuZGtfc25hcHNob3RfemlwKTogUFJJVkFURV9WTkRLX0NPUkVfT1VUXyQoVEFSR0VUXzJORF9BUkNIKSA6PSBcCi0gICQodm5ka19zbmFwc2hvdF9vdXQpL2FyY2gtJChUQVJHRVRfMk5EX0FSQ0gpL3NoYXJlZC92bmRrLWNvcmUKLSQodm5ka19zbmFwc2hvdF96aXApOiBQUklWQVRFX1ZOREtfQ09SRV9JTlRFUk1FRElBVEVTXyQoVEFSR0VUXzJORF9BUkNIKSA6PSBcCi0gICQoY2FsbCBwYXRocy1vZi1pbnRlcm1lZGlhdGVzLCQodm5ka19jb3JlX2xpYnMpICQoY2xhbmdfdWJzYW5fdm5ka19jb3JlXyQoVEFSR0VUXzJORF9BUkNIKSksdHJ1ZSkKLSQodm5ka19zbmFwc2hvdF96aXApOiBQUklWQVRFX1ZOREtfU1BfT1VUXyQoVEFSR0VUXzJORF9BUkNIKSA6PSBcCi0gICQodm5ka19zbmFwc2hvdF9vdXQpL2FyY2gtJChUQVJHRVRfMk5EX0FSQ0gpL3NoYXJlZC92bmRrLXNwCi0kKHZuZGtfc25hcHNob3RfemlwKTogUFJJVkFURV9WTkRLX1NQX0lOVEVSTUVESUFURVNfJChUQVJHRVRfMk5EX0FSQ0gpIDo9IFwKLSAgJChjYWxsIHBhdGhzLW9mLWludGVybWVkaWF0ZXMsJCh2bmRrX3NwX2xpYnMpLHRydWUpCiskKHZuZGtfc25hcHNob3RfemlwKTogUFJJVkFURV9WTkRLX0NPUkVfT1VUXzJORCA6PSAkKHZuZGtfbGliX2Rpcl8ybmQpL3NoYXJlZC92bmRrLWNvcmUKKyQodm5ka19zbmFwc2hvdF96aXApOiBQUklWQVRFX1ZOREtfQ09SRV9JTlRFUk1FRElBVEVTXzJORCA6PSBcCisgICQoY2FsbCBwYXRocy1vZi1pbnRlcm1lZGlhdGVzLCQoZm9yZWFjaCBsaWIsJCh2bmRrX2NvcmVfbGlicyksJChsaWIpOiQobGliKS5zbyksU0hBUkVEX0xJQlJBUklFUyx0cnVlKQorCiskKHZuZGtfc25hcHNob3RfemlwKTogUFJJVkFURV9WTkRLX1NQX09VVF8yTkQgOj0gJCh2bmRrX2xpYl9kaXJfMm5kKS9zaGFyZWQvdm5kay1zcAorJCh2bmRrX3NuYXBzaG90X3ppcCk6IFBSSVZBVEVfVk5ES19TUF9JTlRFUk1FRElBVEVTXzJORCA6PSBcCisgICQoY2FsbCBwYXRocy1vZi1pbnRlcm1lZGlhdGVzLCQoZm9yZWFjaCBsaWIsJCh2bmRrX3NwX2xpYnMpLCQobGliKTokKGxpYikuc28pLFNIQVJFRF9MSUJSQVJJRVMsdHJ1ZSkKIGVuZGlmCiAKICMgQXJncwogIyAgICQoMSk6IGRlc3RpbmF0aW9uIGRpcmVjdG9yeQotIyAgICQoMik6IGxpc3Qgb2YgbGlicyB0byBjb3B5CisjICAgJCgyKTogbGlzdCBvZiBmaWxlcyB0byBjb3B5CiAkKHZuZGtfc25hcHNob3RfemlwKTogcHJpdmF0ZS1jb3B5LXZuZGstaW50ZXJtZWRpYXRlcyA9IFwKLQlAbWtkaXIgLXAgJCgxKTsgXAotCSQoZm9yZWFjaCBsaWIsJCgyKSxjcCAtcCAkKGxpYikgJChjYWxsIGFwcGVuZC1wYXRoLCQoMSksJChzdWJzdCAudmVuZG9yLCwkKG5vdGRpciAkKGxpYikpKSk7KQorICAkKGlmICQoMiksJChzdHJpcCBcCisgICAgQG1rZGlyIC1wICQoMSk7IFwKKyAgICAkKGZvcmVhY2ggZmlsZSwkKDIpLCBcCisgICAgICBpZiBbIC1lICQoZmlsZSkgXTsgdGhlbiBcCisgICAgICAgIGNwIC1wICQoZmlsZSkgJChjYWxsIGFwcGVuZC1wYXRoLCQoMSksJChzdWJzdCAudmVuZG9yLCwkKG5vdGRpciAkKGZpbGUpKSkpOyBcCisgICAgICBmaTsgXAorICAgICkgXAorICApKQorCit2bmRrX3NuYXBzaG90X2RlcGVuZGVuY2llcyA6PSBcCisgICQodm5ka19zbmFwc2hvdF9saWJzKSBcCisgICQodm5ka19wcmVidWlsdF90eHRzKSBcCisgICQodm5ka19zbmFwc2hvdF9jb25maWdzKQogCiAkKHZuZGtfc25hcHNob3RfemlwKTogJCh2bmRrX3NuYXBzaG90X2RlcGVuZGVuY2llcykgJChTT09OR19aSVApCiAJQGVjaG8gJ0dlbmVyYXRpbmcgVk5ESyBzbmFwc2hvdDogJEAnCkBAIC05NywyOCArMjAwLDYwIEBACiAJQHJtIC1yZiAkKFBSSVZBVEVfVk5ES19TTkFQU0hPVF9PVVQpCiAJQG1rZGlyIC1wICQoUFJJVkFURV9WTkRLX1NOQVBTSE9UX09VVCkKIAkkKGNhbGwgcHJpdmF0ZS1jb3B5LXZuZGstaW50ZXJtZWRpYXRlcywgXAotCQkkKFBSSVZBVEVfVk5ES19DT1JFX09VVF8kKFRBUkdFVF9BUkNIKSksJChQUklWQVRFX1ZOREtfQ09SRV9JTlRFUk1FRElBVEVTXyQoVEFSR0VUX0FSQ0gpKSkKKwkJJChQUklWQVRFX1ZOREtfQ09SRV9PVVQpLCQoUFJJVkFURV9WTkRLX0NPUkVfSU5URVJNRURJQVRFUykpCiAJJChjYWxsIHByaXZhdGUtY29weS12bmRrLWludGVybWVkaWF0ZXMsIFwKLQkJJChQUklWQVRFX1ZOREtfU1BfT1VUXyQoVEFSR0VUX0FSQ0gpKSwkKFBSSVZBVEVfVk5ES19TUF9JTlRFUk1FRElBVEVTXyQoVEFSR0VUX0FSQ0gpKSkKKwkJJChQUklWQVRFX1ZOREtfU1BfT1VUKSwkKFBSSVZBVEVfVk5ES19TUF9JTlRFUk1FRElBVEVTKSkKKwkkKGNhbGwgcHJpdmF0ZS1jb3B5LXZuZGstaW50ZXJtZWRpYXRlcywgXAorCQkkKFBSSVZBVEVfQ09ORklHU19PVVQpLCQoUFJJVkFURV9DT05GSUdTX0lOVEVSTUVESUFURVMpKQorCSQoY2FsbCBwcml2YXRlLWNvcHktdm5kay1pbnRlcm1lZGlhdGVzLCBcCisJCSQoUFJJVkFURV9OT1RJQ0VfRklMRVNfT1VUKSwkKFBSSVZBVEVfTk9USUNFX0ZJTEVTX0lOVEVSTUVESUFURVMpKQogaWZkZWYgVEFSR0VUXzJORF9BUkNICiAJJChjYWxsIHByaXZhdGUtY29weS12bmRrLWludGVybWVkaWF0ZXMsIFwKLQkJJChQUklWQVRFX1ZOREtfQ09SRV9PVVRfJChUQVJHRVRfMk5EX0FSQ0gpKSwkKFBSSVZBVEVfVk5ES19DT1JFX0lOVEVSTUVESUFURVNfJChUQVJHRVRfMk5EX0FSQ0gpKSkKKwkJJChQUklWQVRFX1ZOREtfQ09SRV9PVVRfMk5EKSwkKFBSSVZBVEVfVk5ES19DT1JFX0lOVEVSTUVESUFURVNfMk5EKSkKIAkkKGNhbGwgcHJpdmF0ZS1jb3B5LXZuZGstaW50ZXJtZWRpYXRlcywgXAotCQkkKFBSSVZBVEVfVk5ES19TUF9PVVRfJChUQVJHRVRfMk5EX0FSQ0gpKSwkKFBSSVZBVEVfVk5ES19TUF9JTlRFUk1FRElBVEVTXyQoVEFSR0VUXzJORF9BUkNIKSkpCisJCSQoUFJJVkFURV9WTkRLX1NQX09VVF8yTkQpLCQoUFJJVkFURV9WTkRLX1NQX0lOVEVSTUVESUFURVNfMk5EKSkKIGVuZGlmCi0JJChoaWRlKSAkKFNPT05HX1pJUCkgLW8gJEAgLVAgdm5kay1zbmFwc2hvdCAtQyAkKFBSSVZBVEVfVk5ES19TTkFQU0hPVF9PVVQpIFwKLQktRCAkKFBSSVZBVEVfVk5ES19TTkFQU0hPVF9PVVQpCisJJChoaWRlKSAkKFNPT05HX1pJUCkgLW8gJEAgLUMgJChQUklWQVRFX1ZOREtfU05BUFNIT1RfT1VUKSAtRCAkKFBSSVZBVEVfVk5ES19TTkFQU0hPVF9PVVQpCiAKIC5QSE9OWTogdm5kawogdm5kazogJCh2bmRrX3NuYXBzaG90X3ppcCkKIAogJChjYWxsIGRpc3QtZm9yLWdvYWxzLCB2bmRrLCAkKHZuZGtfc25hcHNob3RfemlwKSkKIAorIyBjbGVhciBnbG9iYWwgdmFycworY2xhbmctdWJzYW4tdm5kay1jb3JlIDo9CitwYXRocy1vZi1pbnRlcm1lZGlhdGVzIDo9CitwYXRocy1vZi1ub3RpY2UtZmlsZXMgOj0KK3ZuZGtfY29yZV9saWJzIDo9Cit2bmRrX3NwX2xpYnMgOj0KK3ZuZGtfc25hcHNob3RfbGlicyA6PQordm5ka19wcmVidWlsdF90eHRzIDo9Cit2bmRrX3NuYXBzaG90X2NvbmZpZ3MgOj0KK3ZuZGtfc25hcHNob3RfdG9wIDo9Cit2bmRrX3NuYXBzaG90X291dCA6PQordm5ka19zbmFwc2hvdF9jb25maWdzX291dCA6PQordm5ka19zbmFwc2hvdF92YXJpYW50IDo9Cit2bmRrX2xpYl9kaXIgOj0KK3ZuZGtfbGliX2Rpcl8ybmQgOj0KK3ZuZGtfc25hcHNob3RfZGVwZW5kZW5jaWVzIDo9CisKK2Vsc2UgIyBCT0FSRF9WTkRLX1JVTlRJTUVfRElTQUJMRSBpcyBzZXQgdG8gJ3RydWUnCitlcnJvcl9tc2cgOj0gIkNBTk5PVCBnZW5lcmF0ZSBWTkRLIHNuYXBzaG90LiBCT0FSRF9WTkRLX1JVTlRJTUVfRElTQUJMRSBtdXN0IG5vdCBiZSBzZXQgdG8gJ3RydWUnLiIKK2VuZGlmICMgQk9BUkRfVk5ES19SVU5USU1FX0RJU0FCTEUKKworZWxzZSAjIFBMQVRGT1JNX1ZOREtfVkVSU0lPTiBpcyBOT1Qgc2V0CitlcnJvcl9tc2cgOj0gIkNBTk5PVCBnZW5lcmF0ZSBWTkRLIHNuYXBzaG90LiBQTEFURk9STV9WTkRLX1ZFUlNJT04gbXVzdCBiZSBzZXQuIgorZW5kaWYgIyBQTEFURk9STV9WTkRLX1ZFUlNJT04KKwogZWxzZSAjIEJPQVJEX1ZOREtfVkVSU0lPTiBpcyBOT1Qgc2V0IHRvICdjdXJyZW50JworZXJyb3JfbXNnIDo9ICJDQU5OT1QgZ2VuZXJhdGUgVk5ESyBzbmFwc2hvdC4gQk9BUkRfVk5ES19WRVJTSU9OIG11c3QgYmUgc2V0IHRvICdjdXJyZW50Jy4iCitlbmRpZiAjIEJPQVJEX1ZOREtfVkVSU0lPTgorCitpZm5lcSAoLCQoZXJyb3JfbXNnKSkKIAogLlBIT05ZOiB2bmRrCiB2bmRrOgotCSQoY2FsbCBlY2hvLWVycm9yLCQoY3VycmVudF9tYWtlZmlsZSksQ0FOTk9UIGdlbmVyYXRlIFZOREsgc25hcHNob3QuIEJPQVJEX1ZOREtfVkVSU0lPTiBtdXN0IGJlIHNldCB0byAnY3VycmVudCcuKQorCSQoY2FsbCBlY2hvLWVycm9yLCQoY3VycmVudF9tYWtlZmlsZSksJChlcnJvcl9tc2cpKQogCWV4aXQgMQogCi1lbmRpZiAjIEJPQVJEX1ZOREtfVkVSU0lPTgorZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdF9jb25maWdfY29tbW9uLm1rIGIvY29yZS90ZXN0X2NvbmZpZ19jb21tb24ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg3ZjlmMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdF9jb25maWdfY29tbW9uLm1rCkBAIC0wLDAgKzEsNTYgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK0xPQ0FMX01PRFVMRV9DTEFTUyA6PSBURVNUX0NPTkZJRworCisjIE91dHB1dCB0ZXN0IGNvbmZpZyBmaWxlcyB0byB0ZXN0Y2FzZXMgZGlyZWN0b3J5LgoraWZlcSAoLCQoZmlsdGVyIGdlbmVyYWwtdGVzdHMsICQoTE9DQUxfQ09NUEFUSUJJTElUWV9TVUlURSkpKQorICBMT0NBTF9DT01QQVRJQklMSVRZX1NVSVRFICs9IGdlbmVyYWwtdGVzdHMKK2VuZGlmCisKK0xPQ0FMX01PRFVMRV9TVUZGSVggOj0gLmNvbmZpZworCitteV90ZXN0X2NvbmZpZ19maWxlIDo9ICQod2lsZGNhcmQgJChMT0NBTF9QQVRIKS8kKExPQ0FMX01PRFVMRSkueG1sKQorTE9DQUxfU1JDX0ZJTEVTIDo9CisKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKKworIyBUaGUgdGVzdCBjb25maWcgaXMgbm90IGluIGEgc3RhbmRhbG9uZSBYTUwgZmlsZS4KK2lmbmRlZiBteV90ZXN0X2NvbmZpZ19maWxlCisKK2lmbmRlZiBMT0NBTF9URVNUX0NPTkZJR19PUFRJT05TCisgICQoY2FsbCBwcmV0dHktZXJyb3IsTE9DQUxfVEVTVF9DT05GSUdfT1BUSU9OUyBtdXN0IGJlIHNldCBpZiB0aGUgdGVzdCBYTUwgZmlsZSBpcyBub3QgcHJvdmlkZWQuKQorZW5kaWYKKworbXlfYmFzZV90ZXN0X2NvbmZpZ19maWxlIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZFRlc3QueG1sCitteV90ZXN0X2NvbmZpZ19maWxlIDo9ICQoZGlyICQoTE9DQUxfQlVJTFRfTU9EVUxFKSlBbmRyb2lkVGVzdC54bWwKKworJChteV90ZXN0X2NvbmZpZ19maWxlKSA6IFBSSVZBVEVfdGVzdF9jb25maWdfb3B0aW9ucyA6PSAkKExPQ0FMX1RFU1RfQ09ORklHX09QVElPTlMpCiskKG15X3Rlc3RfY29uZmlnX2ZpbGUpIDogJChteV9iYXNlX3Rlc3RfY29uZmlnX2ZpbGUpCisJQGVjaG8gIkNyZWF0ZSAkKG5vdGRpciAkQCkgd2l0aCBvcHRpb25zOiAkKFBSSVZBVEVfdGVzdF9jb25maWdfb3B0aW9ucykuIgorCSQoZXZhbCBfb3B0aW9uX3htbCA6PSBcCisJCSQoZm9yZWFjaCBvcHRpb24sJChQUklWQVRFX3Rlc3RfY29uZmlnX29wdGlvbnMpLCBcCisJCQkkKGV2YWwgcCA6PSAkKHN1YnN0IDosJChzcGFjZSksJChvcHRpb24pKSkgXAorCQkJPG9wdGlvbiBuYW1lPSIkKHdvcmQgMSwkKHApKSIgdmFsdWU9IiQod29yZCAyLCQocCkpIiBcLz5cbikpCisJJChoaWRlKSBzZWQgJ3MmPC9jb25maWd1cmF0aW9uPiYkKF9vcHRpb25feG1sKTwvY29uZmlndXJhdGlvbj4mJyAkPCA+ICRACisKK2VuZGlmICMgbXlfdGVzdF9jb25maWdfZmlsZQorCiskKExPQ0FMX0JVSUxUX01PRFVMRSkgOiAkKG15X3Rlc3RfY29uZmlnX2ZpbGUpCisJJChjb3B5LWZpbGUtdG8tdGFyZ2V0KQorCitteV9iYXNlX3Rlc3RfY29uZmlnX2ZpbGUgOj0KK215X3Rlc3RfY29uZmlnX2ZpbGUgOj0KZGlmZiAtLWdpdCBhL2NvcmUvdmVyc2lvbl9kZWZhdWx0cy5tayBiL2NvcmUvdmVyc2lvbl9kZWZhdWx0cy5tawppbmRleCBhYmYzMDY3Li5lODNkNmZhIDEwMDY0NAotLS0gYS9jb3JlL3ZlcnNpb25fZGVmYXVsdHMubWsKKysrIGIvY29yZS92ZXJzaW9uX2RlZmF1bHRzLm1rCkBAIC0yNCw4ICsyNCw5IEBACiAjICAgICBERUZBVUxUX0FQUF9UQVJHRVRfU0RLCiAjICAgICBCVUlMRF9JRAogIyAgICAgQlVJTERfTlVNQkVSCi0jICAgICBCVUlMRF9EQVRFVElNRQogIyAgICAgUExBVEZPUk1fU0VDVVJJVFlfUEFUQ0gKKyMgICAgIFBMQVRGT1JNX1ZOREtfVkVSU0lPTgorIyAgICAgUExBVEZPUk1fU1lTVEVNU0RLX1ZFUlNJT05TCiAjCiAKICMgTG9vayBmb3IgYW4gb3B0aW9uYWwgZmlsZSBjb250YWluaW5nIG92ZXJyaWRlcyBvZiB0aGUgZGVmYXVsdHMsCkBAIC00OSwxMiArNTAsNiBAQAogCiBpZm5kZWYgVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04KICAgVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04gOj0gJChERUZBVUxUX1BMQVRGT1JNX1ZFUlNJT04pCi1lbHNlIGlmZXEgKCQoVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04pLE9QUjEpCi0gICMgSEFDSzogbHVuY2ggY3VycmVudGx5IHNldHMgVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04gdG8KLSAgIyBERUZBVUxUX1BMQVRGT1JNX1ZFUlNJT04sIHdoaWNoIGNhdXNlcyB1bm5lY2Vzc2FyeSBwYWluCi0gICMgd2hlbiB0aGUgb2xkIERFRkFVTFRfUExBVEZPUk1fVkVSU0lPTiBiZWNvbWVzIGludmFsaWQuCi0gICMgRm9yIG5vdywgc2lsZW50bHkgdXBncmFkZSBPUFIxIHRvIHRoZSBjdXJyZW50IGRlZmF1bHQuCi0gIFRBUkdFVF9QTEFURk9STV9WRVJTSU9OIDo9ICQoREVGQVVMVF9QTEFURk9STV9WRVJTSU9OKQogZW5kaWYKIAogaWZlcSAoLCQoZmlsdGVyICQoQUxMT1dFRF9WRVJTSU9OUyksICQoVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04pKSkKQEAgLTc3LDcgKzcyLDggQEAKICMgZnJhbWV3b3Jrcy9zdXBwb3J0L2NvbXBhdC9naW5nZXJicmVhZC9hbmRyb2lkL3N1cHBvcnQvdjQvb3MvQnVpbGRDb21wYXQuamF2YQogCiAjIFdoZW4geW91IGNoYW5nZSBQTEFURk9STV9WRVJTSU9OIGZvciBhIGdpdmVuIFBMQVRGT1JNX1NES19WRVJTSU9OCi0jIHBsZWFzZSBhZGQgdGhhdCBQTEFURk9STV9WRVJTSU9OIHRvIHRoZSBmb2xsb3dpbmcgdGV4dCBmaWxlOgorIyBwbGVhc2UgYWRkIHRoYXQgUExBVEZPUk1fVkVSU0lPTiBhcyB3ZWxsIGFzIGNsZWFuIHVwIG9ic29sZXRlIFBMQVRGT1JNX1ZFUlNJT04ncworIyBpbiB0aGUgZm9sbG93aW5nIHRleHQgZmlsZToKICMgY3RzL3Rlc3RzL3Rlc3RzL29zL2Fzc2V0cy9wbGF0Zm9ybV92ZXJzaW9ucy50eHQKIFBMQVRGT1JNX1ZFUlNJT04uUFBSMSA6PSBQCiAKQEAgLTExMCw3ICsxMDYsNyBAQAogICAjIFdoZW4geW91IGluY3JlbWVudCB0aGUgUExBVEZPUk1fU0RLX1ZFUlNJT04gcGxlYXNlIGVuc3VyZSB5b3UgYWxzbwogICAjIGNsZWFyIG91dCB0aGUgZm9sbG93aW5nIHRleHQgZmlsZSBvZiBhbGwgb2xkZXIgUExBVEZPUk1fVkVSU0lPTidzOgogICAjIGN0cy90ZXN0cy90ZXN0cy9vcy9hc3NldHMvcGxhdGZvcm1fdmVyc2lvbnMudHh0Ci0gIFBMQVRGT1JNX1NES19WRVJTSU9OIDo9IDI2CisgIFBMQVRGT1JNX1NES19WRVJTSU9OIDo9IDI3CiBlbmRpZgogCiBpZm5kZWYgUExBVEZPUk1fVkVSU0lPTl9DT0RFTkFNRQpAQCAtMTcxLDcgKzE2Nyw3IEBACiAgICAgIyBhc3N1bWluZyB0aGUgZGV2aWNlIGNhbiBvbmx5IHN1cHBvcnQgQVBJcyBhcyBvZiB0aGUgcHJldmlvdXMgb2ZmaWNpYWwKICAgICAjIHB1YmxpYyByZWxlYXNlLgogICAgICMgVGhpcyB2YWx1ZSB3aWxsIGFsd2F5cyBiZSAwIGZvciByZWxlYXNlIGJ1aWxkcy4KLSAgICBQTEFURk9STV9QUkVWSUVXX1NES19WRVJTSU9OIDo9IDEKKyAgICBQTEFURk9STV9QUkVWSUVXX1NES19WRVJTSU9OIDo9IDAKICAgZW5kaWYKIGVuZGlmCiAKQEAgLTE4OCwxMyArMTg0LDU3IEBACiAgIGVuZGlmCiBlbmRpZgogCitpZm5kZWYgUExBVEZPUk1fVk5ES19WRVJTSU9OCisgICMgVGhpcyBpcyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgVk5ESyB2ZXJzaW9uIGZvciB0aGUgY3VycmVudCBWTkRLIGxpYnJhcmllcy4KKyAgIyBUaGUgdmVyc2lvbiBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIFBMQVRGT1JNX1ZFUlNJT05fQ09ERU5BTUUgPT0gUkVMLgorICAjIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBzZXQgdG8gYSBDT0RFTkFNRSB2ZXJzaW9uLiBUaGUgQUJJIGlzIGFsbG93ZWQgdG8gYmUKKyAgIyBjaGFuZ2VkIG9ubHkgYmVmb3JlIHRoZSBBbmRyb2lkIHZlcnNpb24gaXMgcmVsZWFzZWQuIE9uY2UKKyAgIyBQTEFURk9STV9WTkRLX1ZFUlNJT04gaXMgc2V0IHRvIGFjdHVhbCB2ZXJzaW9uLCB0aGUgQUJJIGZvciB0aGlzIHZlcnNpb24KKyAgIyB3aWxsIGJlIGZyb3pvbiBhbmQgZW1pdCBidWlsZCBlcnJvcnMgaWYgYW55IEFCSSBmb3IgdGhlIFZOREsgbGlicyBhcmUKKyAgIyBjaGFuZ2VkLgorICAjIEFmdGVyIHRoYXQgdGhlIHNuYXBzaG90IG9mIHRoZSBWTkRLIHdpdGggdGhpcyB2ZXJzaW9uIHdpbGwgYmUgZ2VuZXJhdGVkLgorICAjCisgICMgVGhlIFZOREsgdmVyc2lvbiBmb2xsb3dzIFBMQVRGT1JNX1NES19WRVJTSU9OLgorICBpZmVxIChSRUwsJChQTEFURk9STV9WRVJTSU9OX0NPREVOQU1FKSkKKyAgICBQTEFURk9STV9WTkRLX1ZFUlNJT04gOj0gJChQTEFURk9STV9TREtfVkVSU0lPTikKKyAgZWxzZQorICAgIFBMQVRGT1JNX1ZOREtfVkVSU0lPTiA6PSAkKFBMQVRGT1JNX1ZFUlNJT05fQ09ERU5BTUUpCisgIGVuZGlmCitlbmRpZgorCitpZm5kZWYgUExBVEZPUk1fU1lTVEVNU0RLX01JTl9WRVJTSU9OCisgICMgVGhpcyBpcyB0aGUgb2xkZXN0IHZlcnNpb24gb2Ygc3lzdGVtIFNESyB0aGF0IHRoZSBwbGF0Zm9ybSBzdXBwb3J0cy4gQ29udHJhcnkKKyAgIyB0byB0aGUgcHVibGljIFNESyB3aGVyZSBwbGF0Zm9ybSBlc3NlbnRpYWxseSBzdXBwb3J0cyBhbGwgcHJldmlvdXMgU0RLIHZlcnNpb25zLAorICAjIHBsYXRmb3JtIHN1cHBvcnRzIG9ubHkgYSBmZXcgbnVtYmVyIG9mIHJlY2VudCBzeXN0ZW0gU0RLIHZlcnNpb25zIGFzIHNvbWUgb2YKKyAgIyBvbGQgc3lzdGVtIEFQSXMgYXJlIGdyYWR1YWxseSBkZXByZWNhdGVkLCByZW1vdmVkIGFuZCB0aGVuIGRlbGV0ZWQuCisgICMgSG93ZXZlciwgY3VycmVudGx5IGluIFAsIHdlIG9ubHkgc3VwcG9ydCB0aGUgc2luZ2xlIGxhdGVzdCB2ZXJzaW9uIHNpbmNlIHRoZXJlCisgICMgaXMgbm8gb2xkIHN5c3RlbSBTREsgdmVyc2lvbnMuIFRoZXJlZm9yZSwgdGhpcyBpcyBzZXQgdG8gZW1wdHkgZm9yIG5vdy4gVGhpcworICAjIHNob3VsZCBsYXRlciAoaW4gcG9zdCBQKSBiZSBzZXQgdG8gYSBudW1iZXIsIGxpa2UgMjguCisgIFBMQVRGT1JNX1NZU1RFTVNES19NSU5fVkVSU0lPTiA6PQorZW5kaWYKKworIyBUaGlzIGlzIHRoZSBsaXN0IG9mIHN5c3RlbSBTREsgdmVyc2lvbnMgdGhhdCB0aGUgY3VycmVudCBwbGF0Zm9ybSBzdXBwb3J0cy4KK1BMQVRGT1JNX1NZU1RFTVNES19WRVJTSU9OUyA6PQoraWZuZXEgKCwkKFBMQVRGT1JNX1NZU1RFTVNES19NSU5fVkVSU0lPTikpCisgICQoaWYgJChjYWxsIG1hdGhfaXNfbnVtYmVyLCQoUExBVEZPUk1fU1lTVEVNU0RLX01JTl9WRVJTSU9OKSksLFwKKyAgICAkKGVycm9yIFBMQVRGT1JNX1NZU1RFTVNES19NSU5fVkVSU0lPTiBtdXN0IGJlIGEgbnVtYmVyLCBidXQgd2FzICQoUExBVEZPUk1fU1lTVEVNU0RLX01JTl9WRVJTSU9OKSkpCisgIFBMQVRGT1JNX1NZU1RFTVNES19WRVJTSU9OUyA6PSAkKGNhbGwgaW50X3JhbmdlX2xpc3QsJChQTEFURk9STV9TWVNURU1TREtfTUlOX1ZFUlNJT04pLCQoUExBVEZPUk1fU0RLX1ZFUlNJT04pKQorZW5kaWYKKyMgUGxhdGZvcm0gYWx3YXlzIHN1cHBvcnRzIHRoZSBjdXJyZW50IHZlcnNpb24KK2lmZXEgKFJFTCwkKFBMQVRGT1JNX1ZFUlNJT05fQ09ERU5BTUUpKQorICBQTEFURk9STV9TWVNURU1TREtfVkVSU0lPTlMgKz0gJChQTEFURk9STV9TREtfVkVSU0lPTikKK2Vsc2UKKyAgUExBVEZPUk1fU1lTVEVNU0RLX1ZFUlNJT05TICs9ICQoUExBVEZPUk1fVkVSU0lPTl9DT0RFTkFNRSkKK2VuZGlmCitQTEFURk9STV9TWVNURU1TREtfVkVSU0lPTlMgOj0gJChzdHJpcCAkKHNvcnQgJChQTEFURk9STV9TWVNURU1TREtfVkVSU0lPTlMpKSkKKwogaWZuZGVmIFBMQVRGT1JNX1NFQ1VSSVRZX1BBVENICiAgICAgIyAgVXNlZCB0byBpbmRpY2F0ZSB0aGUgc2VjdXJpdHkgcGF0Y2ggdGhhdCBoYXMgYmVlbiBhcHBsaWVkIHRvIHRoZSBkZXZpY2UuCiAgICAgIyAgSXQgbXVzdCBzaWduaWZ5IHRoYXQgdGhlIGJ1aWxkIGluY2x1ZGVzIGFsbCBzZWN1cml0eSBwYXRjaGVzIGlzc3VlZCB1cCB0aHJvdWdoIHRoZSBkZXNpZ25hdGVkIEFuZHJvaWQgUHVibGljIFNlY3VyaXR5IEJ1bGxldGluLgogICAgICMgIEl0IG11c3QgYmUgb2YgdGhlIGZvcm0gIllZWVktTU0tREQiIG9uIHByb2R1Y3Rpb24gZGV2aWNlcy4KICAgICAjICBJdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgQW5kcm9pZCBTZWN1cml0eSBQYXRjaCBMZXZlbCBzdHJpbmdzIG9mIHRoZSBQdWJsaWMgU2VjdXJpdHkgQnVsbGV0aW5zLgogICAgICMgIElmIHRoZXJlIGlzIG5vICRQTEFURk9STV9TRUNVUklUWV9QQVRDSCBzZXQsIGtlZXAgaXQgZW1wdHkuCi0gICAgICBQTEFURk9STV9TRUNVUklUWV9QQVRDSCA6PSAyMDE3LTEwLTA1CisgICAgICBQTEFURk9STV9TRUNVUklUWV9QQVRDSCA6PSAyMDE3LTEyLTAxCiBlbmRpZgogCiBpZm5kZWYgUExBVEZPUk1fQkFTRV9PUwpAQCAtMjI2LDYgKzI2NiwxMiBAQAogREFURSA6PSBkYXRlIC1kIEAkKEJVSUxEX0RBVEVUSU1FKQogZW5kaWYKIAorIyBFdmVyeXRoaW5nIHNob3VsZCBiZSB1c2luZyBCVUlMRF9EQVRFVElNRV9GUk9NX0ZJTEUgaW5zdGVhZC4KKyMgQlVJTERfREFURVRJTUUgYW5kIERBVEUgY2FuIGJlIHJlbW92ZWQgb25jZSBCVUlMRF9OVU1CRVIgbW92ZXMKKyMgdG8gc29vbmdfdWkuCitCVUlMRF9EQVRFVElNRSA6PQorCitIQVNfQlVJTERfTlVNQkVSIDo9IHRydWUKIGlmbmRlZiBCVUlMRF9OVU1CRVIKICAgIyBCVUlMRF9OVU1CRVIgc2hvdWxkIGJlIHNldCB0byB0aGUgc291cmNlIGNvbnRyb2wgdmFsdWUgdGhhdAogICAjIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNvdXJjZSBjb2RlLiAgRS5nLiwgYQpAQCAtMjM3LDQgKzI4Myw1IEBACiAgICMgZnJvbSB0aGlzIGRhdGUvdGltZSIgdmFsdWUuICBNYWtlIGl0IHN0YXJ0IHdpdGggYSBub24tZGlnaXQgc28gdGhhdAogICAjIGFueW9uZSB0cnlpbmcgdG8gcGFyc2UgaXQgYXMgYW4gaW50ZWdlciB3aWxsIHByb2JhYmx5IGdldCAiMCIuCiAgIEJVSUxEX05VTUJFUiA6PSBlbmcuJChzaGVsbCBlY2hvICQke1VTRVI6MDo2fSkuJChzaGVsbCAkKERBVEUpICslWSVtJWQuJUglTSVTKQorICBIQVNfQlVJTERfTlVNQkVSIDo9IGZhbHNlCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZW52c2V0dXAuc2ggYi9lbnZzZXR1cC5zaAppbmRleCA5YTYxNmVmLi5jZjYxOTUwIDEwMDY0NAotLS0gYS9lbnZzZXR1cC5zaAorKysgYi9lbnZzZXR1cC5zaApAQCAtOCw3ICs4LDcgQEAKICAgICAgICAgICAgICBTZWxlY3RzIDxwcm9kdWN0X25hbWU+IGFzIHRoZSBwcm9kdWN0IHRvIGJ1aWxkLCBhbmQgPGJ1aWxkX3ZhcmlhbnQ+IGFzIHRoZSB2YXJpYW50IHRvCiAgICAgICAgICAgICAgYnVpbGQsIGFuZCBzdG9yZXMgdGhvc2Ugc2VsZWN0aW9ucyBpbiB0aGUgZW52aXJvbm1lbnQgdG8gYmUgcmVhZCBieSBzdWJzZXF1ZW50CiAgICAgICAgICAgICAgaW52b2NhdGlvbnMgb2YgJ20nIGV0Yy4KLS0gdGFwYXM6ICAgICB0YXBhcyBbPEFwcDE+IDxBcHAyPiAuLi5dIFthcm18eDg2fG1pcHN8YXJtdjV8YXJtNjR8eDg2XzY0fG1pcHM2NF0gW2VuZ3x1c2VyZGVidWd8dXNlcl0KKy0gdGFwYXM6ICAgICB0YXBhcyBbPEFwcDE+IDxBcHAyPiAuLi5dIFthcm18eDg2fG1pcHN8YXJtNjR8eDg2XzY0fG1pcHM2NF0gW2VuZ3x1c2VyZGVidWd8dXNlcl0KIC0gY3Jvb3Q6ICAgICBDaGFuZ2VzIGRpcmVjdG9yeSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgogLSBtOiAgICAgICAgIE1ha2VzIGZyb20gdGhlIHRvcCBvZiB0aGUgdHJlZS4KIC0gbW06ICAgICAgICBCdWlsZHMgYWxsIG9mIHRoZSBtb2R1bGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgYnV0IG5vdCB0aGVpciBkZXBlbmRlbmNpZXMuCkBAIC01MSw3ICs1MSw3IEBACiAgICAgY2FjaGVkX3ZhcnM9YGNhdCAkVC9idWlsZC9lbnZzZXR1cC5zaCB8IHRyICcoKScgJyAgJyB8IGF3ayAne2ZvcihpPTE7aTw9TkY7aSsrKSBpZigkaX4vZ2V0X2J1aWxkX3Zhci8pIHByaW50ICQoaSsxKX0nIHwgc29ydCAtdSB8IHRyICdcbicgJyAnYAogICAgIGNhY2hlZF9hYnNfdmFycz1gY2F0ICRUL2J1aWxkL2VudnNldHVwLnNoIHwgdHIgJygpJyAnICAnIHwgYXdrICd7Zm9yKGk9MTtpPD1ORjtpKyspIGlmKCRpfi9nZXRfYWJzX2J1aWxkX3Zhci8pIHByaW50ICQoaSsxKX0nIHwgc29ydCAtdSB8IHRyICdcbicgJyAnYAogICAgICMgQ2FsbCB0aGUgYnVpbGQgc3lzdGVtIHRvIGR1bXAgdGhlICI8dmFsPj08dmFsdWU+IiBwYWlycyBhcyBhIHNoZWxsIHNjcmlwdC4KLSAgICBidWlsZF9kaWN0c19zY3JpcHQ9YFxjZCAkVDsgYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCAtLWR1bXB2YXJzLW1vZGUgXAorICAgIGJ1aWxkX2RpY3RzX3NjcmlwdD1gXGJ1aWx0aW4gY2QgJFQ7IGJ1aWxkL3Nvb25nL3Nvb25nX3VpLmJhc2ggLS1kdW1wdmFycy1tb2RlIFwKICAgICAgICAgICAgICAgICAgICAgICAgIC0tdmFycz0iJGNhY2hlZF92YXJzIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAtLWFicy12YXJzPSIkY2FjaGVkX2Fic192YXJzIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAtLXZhci1wcmVmaXg9dmFyX2NhY2hlXyBcCkBAIC0zMTgsNyArMzE4LDEyIEBACiAKIGZ1bmN0aW9uIHNldHRpdGxlKCkKIHsKLSAgICBpZiBbICIkU1RBWV9PRkZfTVlfTEFXTiIgPSAiIiBdOyB0aGVuCisgICAgIyBUaGlzIHVzZWQgdG8gYmUgb3B0LW91dCB3aXRoIFNUQVlfT0ZGX01ZX0xBV04sIGJ1dCB0aGlzIGJyZWFrcyBmb2xrcworICAgICMgYWN0dWFsbHkgdXNpbmcgUFJPTVBUX0NPTU1BTkQgKGh0dHBzOi8vaXNzdWV0cmFja2VyLmdvb2dsZS5jb20vMzg0MDIyNTYpLAorICAgICMgYW5kIHRoZSBhdHRlbXB0IHRvIHNldCB0aGUgdGl0bGUgZG9lc24ndCBkbyBhbnl0aGluZyBmb3IgdGhlIGRlZmF1bHQKKyAgICAjIHdpbmRvdyBtYW5hZ2VyIGluIGRlYmlhbiByaWdodCBub3csIHNvIHN3aXRjaCBpdCB0byBvcHQtaW4gZm9yIGFueW9uZQorICAgICMgd2hvIGFjdHVhbGx5IHdhbnRzIHRoaXMuCisgICAgaWYgWyAiJEFORFJPSURfQlVJTERfU0VUX1dJTkRPV19USVRMRSIgPSAidHJ1ZSIgXTsgdGhlbgogICAgICAgICBsb2NhbCBhcmNoPSQoZ2V0dGFyZ2V0YXJjaCkKICAgICAgICAgbG9jYWwgcHJvZHVjdD0kVEFSR0VUX1BST0RVQ1QKICAgICAgICAgbG9jYWwgdmFyaWFudD0kVEFSR0VUX0JVSUxEX1ZBUklBTlQKQEAgLTY1NiwxMCArNjYxLDEwIEBACiBmdW5jdGlvbiB0YXBhcygpCiB7CiAgICAgbG9jYWwgc2hvd0hlbHA9IiQoZWNobyAkKiB8IHhhcmdzIC1uIDEgZWNobyB8IFxncmVwIC1FICdeKGhlbHApJCcgfCB4YXJncykiCi0gICAgbG9jYWwgYXJjaD0iJChlY2hvICQqIHwgeGFyZ3MgLW4gMSBlY2hvIHwgXGdyZXAgLUUgJ14oYXJtfHg4NnxtaXBzfGFybXY1fGFybTY0fHg4Nl82NHxtaXBzNjQpJCcgfCB4YXJncykiCisgICAgbG9jYWwgYXJjaD0iJChlY2hvICQqIHwgeGFyZ3MgLW4gMSBlY2hvIHwgXGdyZXAgLUUgJ14oYXJtfHg4NnxtaXBzfGFybTY0fHg4Nl82NHxtaXBzNjQpJCcgfCB4YXJncykiCiAgICAgbG9jYWwgdmFyaWFudD0iJChlY2hvICQqIHwgeGFyZ3MgLW4gMSBlY2hvIHwgXGdyZXAgLUUgJ14odXNlcnx1c2VyZGVidWd8ZW5nKSQnIHwgeGFyZ3MpIgogICAgIGxvY2FsIGRlbnNpdHk9IiQoZWNobyAkKiB8IHhhcmdzIC1uIDEgZWNobyB8IFxncmVwIC1FICdeKGxkcGl8bWRwaXx0dmRwaXxoZHBpfHhoZHBpfHh4aGRwaXx4eHhoZHBpfGFsbGRwaSkkJyB8IHhhcmdzKSIKLSAgICBsb2NhbCBhcHBzPSIkKGVjaG8gJCogfCB4YXJncyAtbiAxIGVjaG8gfCBcZ3JlcCAtRSAtdiAnXih1c2VyfHVzZXJkZWJ1Z3xlbmd8YXJtfHg4NnxtaXBzfGFybXY1fGFybTY0fHg4Nl82NHxtaXBzNjR8bGRwaXxtZHBpfHR2ZHBpfGhkcGl8eGhkcGl8eHhoZHBpfHh4eGhkcGl8YWxsZHBpKSQnIHwgeGFyZ3MpIgorICAgIGxvY2FsIGFwcHM9IiQoZWNobyAkKiB8IHhhcmdzIC1uIDEgZWNobyB8IFxncmVwIC1FIC12ICdeKHVzZXJ8dXNlcmRlYnVnfGVuZ3xhcm18eDg2fG1pcHN8YXJtNjR8eDg2XzY0fG1pcHM2NHxsZHBpfG1kcGl8dHZkcGl8aGRwaXx4aGRwaXx4eGhkcGl8eHh4aGRwaXxhbGxkcGkpJCcgfCB4YXJncykiCiAKICAgICBpZiBbICIkc2hvd0hlbHAiICE9ICIiIF07IHRoZW4KICAgICAgICQoZ2V0dG9wKS9idWlsZC9tYWtlL3RhcGFzSGVscC5zaApAQCAtNjgzLDcgKzY4OCw2IEBACiAgICAgY2FzZSAkYXJjaCBpbgogICAgICAgeDg2KSAgICBwcm9kdWN0PWFvc3BfeDg2OzsKICAgICAgIG1pcHMpICAgcHJvZHVjdD1hb3NwX21pcHM7OwotICAgICAgYXJtdjUpICBwcm9kdWN0PWdlbmVyaWNfYXJtdjU7OwogICAgICAgYXJtNjQpICBwcm9kdWN0PWFvc3BfYXJtNjQ7OwogICAgICAgeDg2XzY0KSBwcm9kdWN0PWFvc3BfeDg2XzY0OzsKICAgICAgIG1pcHM2NCkgIHByb2R1Y3Q9YW9zcF9taXBzNjQ7OwpAQCAtNzM3LDMzICs3NDEsMTEgQEAKICAgICBmaQogfQogCi0jIFJldHVybiBkcml2ZXIgZm9yICJtYWtlIiwgaWYgYW55IChlZy4gc3RhdGljIGFuYWx5emVyKQotZnVuY3Rpb24gZ2V0ZHJpdmVyKCkKLXsKLSAgICBsb2NhbCBUPSIkMSIKLSAgICB0ZXN0ICIkV0lUSF9TVEFUSUNfQU5BTFlaRVIiID0gIjAiICYmIHVuc2V0IFdJVEhfU1RBVElDX0FOQUxZWkVSCi0gICAgaWYgWyAtbiAiJFdJVEhfU1RBVElDX0FOQUxZWkVSIiBdOyB0aGVuCi0gICAgICAgICMgVXNlIHNjYW4tYnVpbGQgdG8gY29sbGVjdCBhbGwgc3RhdGljIGFuYWx5emVyIHJlcG9ydHMgaW50byBkaXJlY3RvcnkKLSAgICAgICAgIyAvdG1wL3NjYW4tYnVpbGQteXl5eS1tbS1kZC1oaG1tc3MtKgotICAgICAgICAjIFRoZSBjbGFuZyBjb21waWxlciBwYXNzZWQgYnkgLS11c2UtYW5hbHl6ZXIgaGVyZSBpcyBub3QgaW1wb3J0YW50LgotICAgICAgICAjIGJ1aWxkL21ha2UvY29yZS9iaW5hcnkubWsgd2lsbCBzZXQgQ0xBTkdfQ1hYIGFuZCBDTEFORyBiZWZvcmUgY2FsbGluZwotICAgICAgICAjIGMrKy1hbmFseXplciBhbmQgY2NjLWFuYWx5emVyLgotICAgICAgICBsb2NhbCBDTEFOR19WRVJTSU9OPSQoZ2V0X2J1aWxkX3ZhciBMTFZNX1BSRUJVSUxUU19WRVJTSU9OKQotICAgICAgICBsb2NhbCBCVUlMRF9PUz0kKGdldF9idWlsZF92YXIgQlVJTERfT1MpCi0gICAgICAgIGxvY2FsIENMQU5HX0RJUj0iJFQvcHJlYnVpbHRzL2NsYW5nL2hvc3QvJHtCVUlMRF9PU30teDg2LyR7Q0xBTkdfVkVSU0lPTn0iCi0gICAgICAgIGVjaG8gIlwKLSR7Q0xBTkdfRElSfS90b29scy9zY2FuLWJ1aWxkL2Jpbi9zY2FuLWJ1aWxkIFwKLS0tdXNlLWFuYWx5emVyICR7Q0xBTkdfRElSfS9iaW4vY2xhbmcgXAotLS1zdGF0dXMtYnVncyIKLSAgICBmaQotfQotCiBmdW5jdGlvbiBtKCkKIHsKICAgICBsb2NhbCBUPSQoZ2V0dG9wKQotICAgIGxvY2FsIERSVj0kKGdldGRyaXZlciAkVCkKICAgICBpZiBbICIkVCIgXTsgdGhlbgotICAgICAgICBfd3JhcF9idWlsZCAkRFJWICRUL2J1aWxkL3Nvb25nL3Nvb25nX3VpLmJhc2ggLS1tYWtlLW1vZGUgJEAKKyAgICAgICAgX3dyYXBfYnVpbGQgJFQvYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCAtLW1ha2UtbW9kZSAkQAogICAgIGVsc2UKICAgICAgICAgZWNobyAiQ291bGRuJ3QgbG9jYXRlIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBUcnkgc2V0dGluZyBUT1AuIgogICAgICAgICByZXR1cm4gMQpAQCAtNzkwLDExICs3NzIsMTAgQEAKIGZ1bmN0aW9uIG1tKCkKIHsKICAgICBsb2NhbCBUPSQoZ2V0dG9wKQotICAgIGxvY2FsIERSVj0kKGdldGRyaXZlciAkVCkKICAgICAjIElmIHdlJ3JlIHNpdHRpbmcgaW4gdGhlIHJvb3Qgb2YgdGhlIGJ1aWxkIHRyZWUsIGp1c3QgZG8gYQogICAgICMgbm9ybWFsIGJ1aWxkLgogICAgIGlmIFsgLWYgYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCBdOyB0aGVuCi0gICAgICAgIF93cmFwX2J1aWxkICREUlYgJFQvYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCAtLW1ha2UtbW9kZSAkQAorICAgICAgICBfd3JhcF9idWlsZCAkVC9idWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlICRACiAgICAgZWxzZQogICAgICAgICAjIEZpbmQgdGhlIGNsb3Nlc3QgQW5kcm9pZC5tayBmaWxlLgogICAgICAgICBsb2NhbCBNPSQoZmluZG1ha2VmaWxlKQpAQCAtODI5LDcgKzgxMCw3IEBACiAgICAgICAgICAgICBpZiBbICIxIiA9ICIke1dJVEhfVElEWV9PTkxZfSIgLW8gInRydWUiID0gIiR7V0lUSF9USURZX09OTFl9IiBdOyB0aGVuCiAgICAgICAgICAgICAgIE1PRFVMRVM9dGlkeV9vbmx5CiAgICAgICAgICAgICBmaQotICAgICAgICAgICAgT05FX1NIT1RfTUFLRUZJTEU9JE0gX3dyYXBfYnVpbGQgJERSViAkVC9idWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlICRNT0RVTEVTICRBUkdTCisgICAgICAgICAgICBPTkVfU0hPVF9NQUtFRklMRT0kTSBfd3JhcF9idWlsZCAkVC9idWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlICRNT0RVTEVTICRBUkdTCiAgICAgICAgIGZpCiAgICAgZmkKIH0KQEAgLTgzNyw3ICs4MTgsNiBAQAogZnVuY3Rpb24gbW1tKCkKIHsKICAgICBsb2NhbCBUPSQoZ2V0dG9wKQotICAgIGxvY2FsIERSVj0kKGdldGRyaXZlciAkVCkKICAgICBpZiBbICIkVCIgXTsgdGhlbgogICAgICAgICBsb2NhbCBNQUtFRklMRT0KICAgICAgICAgbG9jYWwgTU9EVUxFUz0KQEAgLTg5Nyw3ICs4NzcsNyBAQAogICAgICAgICBmaQogICAgICAgICAjIENvbnZlcnQgIi8iIHRvICItIi4KICAgICAgICAgTU9EVUxFU19JTl9QQVRIUz0ke01PRFVMRVNfSU5fUEFUSFMvL1wvLy19Ci0gICAgICAgIE9ORV9TSE9UX01BS0VGSUxFPSIkTUFLRUZJTEUiIF93cmFwX2J1aWxkICREUlYgJFQvYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCAtLW1ha2UtbW9kZSAkREFTSF9BUkdTICRNT0RVTEVTICRNT0RVTEVTX0lOX1BBVEhTICRBUkdTCisgICAgICAgIE9ORV9TSE9UX01BS0VGSUxFPSIkTUFLRUZJTEUiIF93cmFwX2J1aWxkICRUL2J1aWxkL3Nvb25nL3Nvb25nX3VpLmJhc2ggLS1tYWtlLW1vZGUgJERBU0hfQVJHUyAkTU9EVUxFUyAkTU9EVUxFU19JTl9QQVRIUyAkQVJHUwogICAgIGVsc2UKICAgICAgICAgZWNobyAiQ291bGRuJ3QgbG9jYXRlIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBUcnkgc2V0dGluZyBUT1AuIgogICAgICAgICByZXR1cm4gMQpAQCAtOTA3LDkgKzg4Nyw4IEBACiBmdW5jdGlvbiBtbWEoKQogewogICBsb2NhbCBUPSQoZ2V0dG9wKQotICBsb2NhbCBEUlY9JChnZXRkcml2ZXIgJFQpCiAgIGlmIFsgLWYgYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCBdOyB0aGVuCi0gICAgX3dyYXBfYnVpbGQgJERSViAkVC9idWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlICRACisgICAgX3dyYXBfYnVpbGQgJFQvYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCAtLW1ha2UtbW9kZSAkQAogICBlbHNlCiAgICAgaWYgWyAhICIkVCIgXTsgdGhlbgogICAgICAgZWNobyAiQ291bGRuJ3QgbG9jYXRlIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBUcnkgc2V0dGluZyBUT1AuIgpAQCAtOTIxLDE0ICs5MDAsMTMgQEAKICAgICBsb2NhbCBNT0RVTEVTX0lOX1BBVEhTPU1PRFVMRVMtSU4tJChkaXJuYW1lICR7TX0pCiAgICAgIyBDb252ZXJ0ICIvIiB0byAiLSIuCiAgICAgTU9EVUxFU19JTl9QQVRIUz0ke01PRFVMRVNfSU5fUEFUSFMvL1wvLy19Ci0gICAgX3dyYXBfYnVpbGQgJERSViAkVC9idWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlICRAICRNT0RVTEVTX0lOX1BBVEhTCisgICAgX3dyYXBfYnVpbGQgJFQvYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCAtLW1ha2UtbW9kZSAkQCAkTU9EVUxFU19JTl9QQVRIUwogICBmaQogfQogCiBmdW5jdGlvbiBtbW1hKCkKIHsKICAgbG9jYWwgVD0kKGdldHRvcCkKLSAgbG9jYWwgRFJWPSQoZ2V0ZHJpdmVyICRUKQogICBpZiBbICIkVCIgXTsgdGhlbgogICAgIGxvY2FsIERBU0hfQVJHUz0kKGVjaG8gIiRAIiB8IGF3ayAtdiBSUz0iICIgLXYgT1JTPSIgIiAnL14tLiokLycpCiAgICAgbG9jYWwgRElSUz0kKGVjaG8gIiRAIiB8IGF3ayAtdiBSUz0iICIgLXYgT1JTPSIgIiAnL15bXi1dLiokLycpCkBAIC05NTksNyArOTM3LDcgQEAKICAgICBkb25lCiAgICAgIyBDb252ZXJ0ICIvIiB0byAiLSIuCiAgICAgTU9EVUxFU19JTl9QQVRIUz0ke01PRFVMRVNfSU5fUEFUSFMvL1wvLy19Ci0gICAgX3dyYXBfYnVpbGQgJERSViAkVC9idWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlICREQVNIX0FSR1MgJEFSR1MgJE1PRFVMRVNfSU5fUEFUSFMKKyAgICBfd3JhcF9idWlsZCAkVC9idWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlICREQVNIX0FSR1MgJEFSR1MgJE1PRFVMRVNfSU5fUEFUSFMKICAgZWxzZQogICAgIGVjaG8gIkNvdWxkbid0IGxvY2F0ZSB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgVHJ5IHNldHRpbmcgVE9QLiIKICAgICByZXR1cm4gMQpkaWZmIC0tZ2l0IGEvaGVscC5zaCBiL2hlbHAuc2gKaW5kZXggM2YzOWM3Ny4uYzE0MzU0MiAxMDA3NTUKLS0tIGEvaGVscC5zaAorKysgYi9oZWxwLnNoCkBAIC0zOCw2ICszOCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRzIGZvciAiU3lzdGVtLCBOTyBEZXBlbmRlbmNpZXMiCiAgICAgdm5vZCAgICAgICAgICAgICAgICAgICAgUXVpY2tseSByZWJ1aWxkIHRoZSB2ZW5kb3IgaW1hZ2UgZnJvbSBidWlsdCBwYWNrYWdlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kcyBmb3IgIlZlbmRvciwgTk8gRGVwZW5kZW5jaWVzIgorICAgIHBub2QgICAgICAgICAgICAgICAgICAgIFF1aWNrbHkgcmVidWlsZCB0aGUgcHJvZHVjdCBpbWFnZSBmcm9tIGJ1aWx0IHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRzIGZvciAiUHJvZHVjdCwgTk8gRGVwZW5kZW5jaWVzIgogCiAKIFNvLCBmb3IgZXhhbXBsZSwgeW91IGNvdWxkIHJ1bjoKZGlmZiAtLWdpdCBhL3RhcGFzSGVscC5zaCBiL3RhcGFzSGVscC5zaAppbmRleCAwNThhYzFkLi4zOGIzZTM0IDEwMDc1NQotLS0gYS90YXBhc0hlbHAuc2gKKysrIGIvdGFwYXNIZWxwLnNoCkBAIC02LDcgKzYsNyBAQAogY2QgLi4vLi4KIFRPUD0iJHtQV0R9IgogCi1tZXNzYWdlPSd1c2FnZTogdGFwYXMgWzxBcHAxPiA8QXBwMj4gLi4uXSBbYXJtfHg4NnxtaXBzfGFybXY1fGFybTY0fHg4Nl82NHxtaXBzNjRdIFtlbmd8dXNlcmRlYnVnfHVzZXJdCittZXNzYWdlPSd1c2FnZTogdGFwYXMgWzxBcHAxPiA8QXBwMj4gLi4uXSBbYXJtfHg4NnxtaXBzfGFybTY0fHg4Nl82NHxtaXBzNjRdIFtlbmd8dXNlcmRlYnVnfHVzZXJdCiAKIHRhcGFzIHNlbGVjdHMgaW5kaXZpZHVhbCBhcHBzIHRvIGJlIGJ1aWx0IGJ5IHRoZSBBbmRyb2lkIGJ1aWxkIHN5c3RlbS4gVW5saWtlCiAibHVuY2giLCAidGFwYXMiIGRvZXMgbm90IHJlcXVlc3QgdGhlIGJ1aWxkaW5nIG9mIGltYWdlcyBmb3IgYSBkZXZpY2UuCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvQW5kcm9pZC5tayBiL3RhcmdldC9ib2FyZC9BbmRyb2lkLm1rCmluZGV4IDRiNWFmM2MuLjdmZTQ1ZWIgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9BbmRyb2lkLm1rCisrKyBiL3RhcmdldC9ib2FyZC9BbmRyb2lkLm1rCkBAIC0yMCw3ICsyMCw3IEBACiBib2FyZF9pbmZvX3R4dCA6PSAkKHdpbGRjYXJkICQoVEFSR0VUX0RFVklDRV9ESVIpL2JvYXJkLWluZm8udHh0KQogZW5kaWYKICQoSU5TVEFMTEVEX0FORFJPSURfSU5GT19UWFRfVEFSR0VUKTogJChib2FyZF9pbmZvX3R4dCkKLQkkKGhpZGUpIGJ1aWxkL3Rvb2xzL2NoZWNrX3JhZGlvX3ZlcnNpb25zLnB5ICQ8ICQoQk9BUkRfSU5GT19DSEVDSykKKwkkKGhpZGUpIGJ1aWxkL21ha2UvdG9vbHMvY2hlY2tfcmFkaW9fdmVyc2lvbnMucHkgJDwgJChCT0FSRF9JTkZPX0NIRUNLKQogCSQoY2FsbCBwcmV0dHksIkdlbmVyYXRlZDogKCRAKSIpCiBpZmRlZiBib2FyZF9pbmZvX3R4dAogCSQoaGlkZSkgZ3JlcCAtdiAnIycgJDwgPiAkQApAQCAtMzQsMTQgKzM0LDE3IEBACiBpZmRlZiBERVZJQ0VfTUFOSUZFU1RfRklMRQogIyAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSBjYW4gYmUgYSBsaXN0IG9mIGZpbGVzCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSAgICAgICAgOj0gbWFuaWZlc3QueG1sCitMT0NBTF9NT0RVTEUgICAgICAgIDo9IGRldmljZV9tYW5pZmVzdC54bWwKK0xPQ0FMX01PRFVMRV9TVEVNICAgOj0gbWFuaWZlc3QueG1sCiBMT0NBTF9NT0RVTEVfQ0xBU1MgIDo9IEVUQwotTE9DQUxfTU9EVUxFX1BBVEggICA6PSAkKFRBUkdFVF9PVVRfVkVORE9SKQorTE9DQUxfTU9EVUxFX1BBVEggICA6PSAkKFRBUkdFVF9PVVRfVkVORE9SKS9ldGMvdmludGYKIAogR0VOIDo9ICQobG9jYWwtZ2VuZXJhdGVkLXNvdXJjZXMtZGlyKS9tYW5pZmVzdC54bWwKICQoR0VOKTogUFJJVkFURV9ERVZJQ0VfTUFOSUZFU1RfRklMRSA6PSAkKERFVklDRV9NQU5JRkVTVF9GSUxFKQogJChHRU4pOiAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZgogCUJPQVJEX1NFUE9MSUNZX1ZFUlM9JChCT0FSRF9TRVBPTElDWV9WRVJTKSBcCisJUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUPSQoUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUKSBcCisJUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUw9JChQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCkgXAogCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2Fzc2VtYmxlX3ZpbnRmIC1vICRAIFwKIAkJLWkgJChjYWxsIG5vcm1hbGl6ZS1wYXRoLWxpc3QsJChQUklWQVRFX0RFVklDRV9NQU5JRkVTVF9GSUxFKSkKIApAQCAtNDksMTAyICs1MiwzIEBACiBpbmNsdWRlICQoQlVJTERfUFJFQlVJTFQpCiBCVUlMVF9WRU5ET1JfTUFOSUZFU1QgOj0gJChMT0NBTF9CVUlMVF9NT0RVTEUpCiBlbmRpZgotCi0jIERldmljZSBDb21wYXRpYmlsaXR5IE1hdHJpeAotaWZkZWYgREVWSUNFX01BVFJJWF9GSUxFCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSAgICAgICAgOj0gY29tcGF0aWJpbGl0eV9tYXRyaXgueG1sCi1MT0NBTF9NT0RVTEVfQ0xBU1MgIDo9IEVUQwotTE9DQUxfTU9EVUxFX1BBVEggICA6PSAkKFRBUkdFVF9PVVRfVkVORE9SKQotCi1HRU4gOj0gJChsb2NhbC1nZW5lcmF0ZWQtc291cmNlcy1kaXIpL2NvbXBhdGliaWxpdHlfbWF0cml4LnhtbAotJChHRU4pOiAkKERFVklDRV9NQVRSSVhfRklMRSkgJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXNzZW1ibGVfdmludGYKLQkjIFRPRE8oYi8zNzM0MjYyNyk6IHB1dCBCT0FSRF9WTkRLX1ZFUlNJT04gJiBCT0FSRF9WTkRLX0xJQlJBUklFUyBpbnRvIGRldmljZSBtYXRyaXguCi0JJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXNzZW1ibGVfdmludGYgLWkgJDwgLW8gJEAKLQotTE9DQUxfUFJFQlVJTFRfTU9EVUxFX0ZJTEUgOj0gJChHRU4pCi1pbmNsdWRlICQoQlVJTERfUFJFQlVJTFQpCi1CVUlMVF9WRU5ET1JfTUFUUklYIDo9ICQoTE9DQUxfQlVJTFRfTU9EVUxFKQotZW5kaWYKLQotIyBGcmFtZXdvcmsgTWFuaWZlc3QKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFICAgICAgICA6PSBzeXN0ZW1fbWFuaWZlc3QueG1sCi1MT0NBTF9NT0RVTEVfU1RFTSAgIDo9IG1hbmlmZXN0LnhtbAotTE9DQUxfTU9EVUxFX0NMQVNTICA6PSBFVEMKLUxPQ0FMX01PRFVMRV9QQVRIICAgOj0gJChUQVJHRVRfT1VUKQotCi1HRU4gOj0gJChsb2NhbC1nZW5lcmF0ZWQtc291cmNlcy1kaXIpL21hbmlmZXN0LnhtbAotCi0kKEdFTik6IFBSSVZBVEVfRkxBR1MgOj0KLQotaWZlcSAoJChQUk9EVUNUX0VORk9SQ0VfVklOVEZfTUFOSUZFU1QpLHRydWUpCi1pZmRlZiBCVUlMVF9WRU5ET1JfTUFUUklYCi0kKEdFTik6ICQoQlVJTFRfVkVORE9SX01BVFJJWCkKLSQoR0VOKTogUFJJVkFURV9GTEFHUyArPSAtYyAiJChCVUlMVF9WRU5ET1JfTUFUUklYKSIKLWVuZGlmCi1lbmRpZgotCi0kKEdFTik6ICQoRlJBTUVXT1JLX01BTklGRVNUX0ZJTEUpICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2Fzc2VtYmxlX3ZpbnRmCi0JQk9BUkRfU0VQT0xJQ1lfVkVSUz0kKEJPQVJEX1NFUE9MSUNZX1ZFUlMpICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2Fzc2VtYmxlX3ZpbnRmIC1pICQ8IC1vICRAICQoUFJJVkFURV9GTEFHUykKLQotTE9DQUxfUFJFQlVJTFRfTU9EVUxFX0ZJTEUgOj0gJChHRU4pCi1pbmNsdWRlICQoQlVJTERfUFJFQlVJTFQpCi1CVUlMVF9TWVNURU1fTUFOSUZFU1QgOj0gJChMT0NBTF9CVUlMVF9NT0RVTEUpCi0KLSMgRnJhbWV3b3JrIENvbXBhdGliaWxpdHkgTWF0cml4Ci1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSAgICAgICAgOj0gc3lzdGVtX2NvbXBhdGliaWxpdHlfbWF0cml4LnhtbAotTE9DQUxfTU9EVUxFX1NURU0gICA6PSBjb21wYXRpYmlsaXR5X21hdHJpeC54bWwKLUxPQ0FMX01PRFVMRV9DTEFTUyAgOj0gRVRDCi1MT0NBTF9NT0RVTEVfUEFUSCAgIDo9ICQoVEFSR0VUX09VVCkKLQotR0VOIDo9ICQobG9jYWwtZ2VuZXJhdGVkLXNvdXJjZXMtZGlyKS9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwKLQotJChHRU4pOiBQUklWQVRFX0ZMQUdTIDo9Ci0KLWlmZXEgKCQoUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUKSx0cnVlKQotaWZkZWYgQlVJTFRfVkVORE9SX01BTklGRVNUCi0kKEdFTik6ICQoQlVJTFRfVkVORE9SX01BTklGRVNUKQotJChHRU4pOiBQUklWQVRFX0ZMQUdTICs9IC1jICIkKEJVSUxUX1ZFTkRPUl9NQU5JRkVTVCkiCi1lbmRpZgotZW5kaWYKLQotaWZlcSAodHJ1ZSwkKEJPQVJEX0FWQl9FTkFCTEUpKQotJChHRU4pOiAkKEFWQlRPT0wpCi0jIElOVEVSTkFMX0FWQl9TWVNURU1fU0lHTklOR19BUkdTIGNvbnNpc3RzIG9mIEJPQVJEX0FWQl9TWVNURU1fS0VZX1BBVEggYW5kCi0jIEJPQVJEX0FWQl9TWVNURU1fQUxHT1JJVEhNLiBXZSBzaG91bGQgYWRkIHRoZSBkZXBlbmRlbmN5IG9mIGtleSBwYXRoLCB3aGljaAotIyBpcyBhIGZpbGUsIGhlcmUuCi0kKEdFTik6ICQoQk9BUkRfQVZCX1NZU1RFTV9LRVlfUEFUSCkKLSMgVXNlIGRlZmVycmVkIGFzc2lnbm1lbnQgKD0pIGluc3RlYWQgb2YgaW1tZWRpYXRlIGFzc2lnbm1lbnQgKDo9KS4KLSMgT3RoZXJ3aXNlLCBjYW5ub3QgZ2V0IElOVEVSTkFMX0FWQl9TWVNURU1fU0lHTklOR19BUkdTLgotRlJBTUVXT1JLX1ZCTUVUQV9WRVJTSU9OID0gJCQoIiQoQVZCVE9PTCkiIGFkZF9oYXNodHJlZV9mb290ZXIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1wcmludF9yZXF1aXJlZF9saWJhdmJfdmVyc2lvbiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKElOVEVSTkFMX0FWQl9TWVNURU1fU0lHTklOR19BUkdTKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKEJPQVJEX0FWQl9TWVNURU1fQUREX0hBU0hUUkVFX0ZPT1RFUl9BUkdTKSkKLWVsc2UKLUZSQU1FV09SS19WQk1FVEFfVkVSU0lPTiA6PSAwLjAKLWVuZGlmCi0KLSMgQWxsIGtlcm5lbCB2ZXJzaW9ucyB0aGF0IHRoZSBzeXN0ZW0gaW1hZ2Ugd29ya3Mgd2l0aC4KLUtFUk5FTF9WRVJTSU9OUyA6PSAzLjE4IDQuNCA0LjkKLUtFUk5FTF9DT05GSUdfREFUQSA6PSBrZXJuZWwvY29uZmlncwotCi0kKEdFTik6ICQoZm9yZWFjaCB2ZXJzaW9uLCQoS0VSTkVMX1ZFUlNJT05TKSxcCi0JJCh3aWxkY2FyZCAkKEtFUk5FTF9DT05GSUdfREFUQSkvYW5kcm9pZC0kKHZlcnNpb24pL2FuZHJvaWQtYmFzZSouY2ZnKSkKLSQoR0VOKTogUFJJVkFURV9GTEFHUyArPSAkKGZvcmVhY2ggdmVyc2lvbiwkKEtFUk5FTF9WRVJTSU9OUyksXAotCS0ta2VybmVsPSQodmVyc2lvbik6JChjYWxsIG5vcm1hbGl6ZS1wYXRoLWxpc3QsXAotCQkkKHdpbGRjYXJkICQoS0VSTkVMX0NPTkZJR19EQVRBKS9hbmRyb2lkLSQodmVyc2lvbikvYW5kcm9pZC1iYXNlKi5jZmcpKSkKLQotS0VSTkVMX1ZFUlNJT05TIDo9Ci1LRVJORUxfQ09ORklHX0RBVEEgOj0KLQotJChHRU4pOiAkKEZSQU1FV09SS19DT01QQVRJQklMSVRZX01BVFJJWF9GSUxFKSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZgotCSMgVE9ETyhiLzM3NDA1ODY5KSAoYi8zNzcxNTM3NSkgaW5qZWN0IGF2YiB2ZXJzaW9ucyBhcyB3ZWxsIGZvciBkZXZpY2VzIHRoYXQgaGF2ZSBhdmIgZW5hYmxlZC4KLQlQT0xJQ1lWRVJTPSQoUE9MSUNZVkVSUykgXAotCQlCT0FSRF9TRVBPTElDWV9WRVJTPSQoQk9BUkRfU0VQT0xJQ1lfVkVSUykgXAotCQlGUkFNRVdPUktfVkJNRVRBX1ZFUlNJT049JChGUkFNRVdPUktfVkJNRVRBX1ZFUlNJT04pIFwKLQkJJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXNzZW1ibGVfdmludGYgLWkgJDwgLW8gJEAgJChQUklWQVRFX0ZMQUdTKQotTE9DQUxfUFJFQlVJTFRfTU9EVUxFX0ZJTEUgOj0gJChHRU4pCi1pbmNsdWRlICQoQlVJTERfUFJFQlVJTFQpCi1CVUlMVF9TWVNURU1fQ09NUEFUSUJJTElUWV9NQVRSSVggOj0gJChMT0NBTF9CVUlMVF9NT0RVTEUpCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9Cb2FyZENvbmZpZy5tayBiL3RhcmdldC9ib2FyZC9nZW5lcmljL0JvYXJkQ29uZmlnLm1rCmluZGV4IDMzMWYwODIuLjcwYzc4YTggMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljL0JvYXJkQ29uZmlnLm1rCisrKyBiL3RhcmdldC9ib2FyZC9nZW5lcmljL0JvYXJkQ29uZmlnLm1rCkBAIC0yNSw2ICsyNSw3IEBACiBUQVJHRVRfQ1BVX0FCSTIgOj0gYXJtZWFiaQogSEFWRV9IVENfQVVESU9fRFJJVkVSIDo9IHRydWUKIEJPQVJEX1VTRVNfR0VORVJJQ19BVURJTyA6PSB0cnVlCitUQVJHRVRfQk9PVExPQURFUl9CT0FSRF9OQU1FIDo9IGdvbGRmaXNoXyQoVEFSR0VUX0FSQ0gpCiAKICMgbm8gaGFyZHdhcmUgY2FtZXJhCiBVU0VfQ0FNRVJBX1NUVUIgOj0gdHJ1ZQpAQCAtNTcsMTEgKzU4LDE1IEBACiAjIHdoZW4gZmluYWxpemluZyB0aGVtLgogQk9BUkRfVkVORE9SSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gMTAwMDAwMDAwCiBCT0FSRF9WRU5ET1JJTUFHRV9GSUxFX1NZU1RFTV9UWVBFIDo9IGV4dDQKLUJPQVJEX0NBQ0hFSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gNjkyMDYwMTYKLUJPQVJEX0NBQ0hFSU1BR0VfRklMRV9TWVNURU1fVFlQRSA6PSBleHQ0CiBCT0FSRF9GTEFTSF9CTE9DS19TSVpFIDo9IDUxMgogVEFSR0VUX1VTRVJJTUFHRVNfU1BBUlNFX0VYVF9ESVNBQkxFRCA6PSB0cnVlCiBERVZJQ0VfTUFUUklYX0ZJTEUgICA6PSBkZXZpY2UvZ2VuZXJpYy9nb2xkZmlzaC9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwKIAogQk9BUkRfU0VQT0xJQ1lfRElSUyArPSBidWlsZC90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeQogQk9BUkRfUFJPUEVSVFlfT1ZFUlJJREVTX1NQTElUX0VOQUJMRUQgOj0gdHJ1ZQorCisjIEVuYWJsZSBBL0IgdXBkYXRlCitUQVJHRVRfTk9fUkVDT1ZFUlkgOj0gdHJ1ZQorQk9BUkRfQlVJTERfU1lTVEVNX1JPT1RfSU1BR0UgOj0gdHJ1ZQorCitCT0FSRF9WTkRLX1ZFUlNJT04gOj0gY3VycmVudApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L09XTkVSUyBiL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L09XTkVSUwppbmRleCA0YmQ3ZTM0Li4zODI4OTg4IDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9PV05FUlMKKysrIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvT1dORVJTCkBAIC0xLDYgKzEsNCBAQAotbm5rQGdvb2dsZS5jb20KIGplZmZ2QGdvb2dsZS5jb20KLWtseXViaW5AZ29vZ2xlLmNvbQogZGNhc2htYW5AZ29vZ2xlLmNvbQogamJpcmVzQGdvb2dsZS5jb20KIHNzcGF0aWxAZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvYm9vdGFuaW0udGUgYi90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9ib290YW5pbS50ZQppbmRleCA0YmUxYzhhLi5lNGY3YzczIDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9ib290YW5pbS50ZQorKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9ib290YW5pbS50ZQpAQCAtMiw0ICsyLDcgQEAKIGFsbG93IGJvb3RhbmltIGFzaG1lbV9kZXZpY2U6Y2hyX2ZpbGUgZXhlY3V0ZTsKICNUT0RPOiBUaGlzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCB1bnRpbCBiLzYyOTU0ODc3IGlzIGZpeGVkCiBkb250YXVkaXQgYm9vdGFuaW0gc3lzdGVtX2RhdGFfZmlsZTpkaXIgcmVhZDsKKworYWxsb3cgYm9vdGFuaW0gZ3JhcGhpY3NfZGV2aWNlOmNocl9maWxlIHsgcmVhZCBpb2N0bCBvcGVuIH07CisKIHNldF9wcm9wKGJvb3RhbmltLCBxZW11X3Byb3ApCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9maWxlLnRlIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvZmlsZS50ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRhZTllNC4uMDAwMDAwMAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9maWxlLnRlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdHlwZSBzeXNmc193cml0YWJsZSwgZnNfdHlwZSwgc3lzZnNfdHlwZSwgbWxzdHJ1c3RlZG9iamVjdDsKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L2ZpbGVfY29udGV4dHMgYi90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9maWxlX2NvbnRleHRzCmluZGV4IGY1NTBmNGQuLjUyMWM2NWUgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L2ZpbGVfY29udGV4dHMKKysrIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvZmlsZV9jb250ZXh0cwpAQCAtMTUsNyArMTUsNiBAQAogL2Rldi9xZW11Xy4qICAgICAgICAgICAgICAgICB1Om9iamVjdF9yOnFlbXVfZGV2aWNlOnMwCiAvZGV2L3R0eUdGWzAtOV0qICAgICAgICAgICAgIHU6b2JqZWN0X3I6c2VyaWFsX2RldmljZTpzMAogL2Rldi90dHlTMiAgICAgICAgICAgICAgICAgICB1Om9iamVjdF9yOmNvbnNvbGVfZGV2aWNlOnMwCi0vc3lzL3FlbXVfdHJhY2UoLy4qKT8gICAgICAgIHU6b2JqZWN0X3I6c3lzZnNfd3JpdGFibGU6czAKIC92ZW5kb3IvYmluL2luaXRcLnJhbmNodS1jb3JlXC5zaCB1Om9iamVjdF9yOmdvbGRmaXNoX3NldHVwX2V4ZWM6czAKIC92ZW5kb3IvYmluL2luaXRcLnJhbmNodS1uZXRcLnNoIHU6b2JqZWN0X3I6Z29sZGZpc2hfc2V0dXBfZXhlYzpzMAogL3ZlbmRvci9iaW4vcWVtdS1wcm9wcyAgICAgICB1Om9iamVjdF9yOnFlbXVfcHJvcHNfZXhlYzpzMApAQCAtMjMsNiArMjIsNyBAQAogL3ZlbmRvci9iaW4vaHcvYW5kcm9pZFwuaGFyZHdhcmVcLmRybUAxXC4wLXNlcnZpY2VcLndpZGV2aW5lICAgICAgICAgIHU6b2JqZWN0X3I6aGFsX2RybV93aWRldmluZV9leGVjOnMwCiAKIC92ZW5kb3IvbGliKDY0KT8vaHcvZ3JhbGxvY1wucmFuY2h1XC5zbyAgIHU6b2JqZWN0X3I6c2FtZV9wcm9jZXNzX2hhbF9maWxlOnMwCisvdmVuZG9yL2xpYig2NCk/L2h3L2dyYWxsb2NcLmdvbGRmaXNoXC5kZWZhdWx0XC5zbyAgIHU6b2JqZWN0X3I6c2FtZV9wcm9jZXNzX2hhbF9maWxlOnMwCiAvdmVuZG9yL2xpYig2NCk/L2xpYkVHTF9lbXVsYXRpb25cLnNvICAgICAgICAgIHU6b2JqZWN0X3I6c2FtZV9wcm9jZXNzX2hhbF9maWxlOnMwCiAvdmVuZG9yL2xpYig2NCk/L2xpYkdMRVN2MV9DTV9lbXVsYXRpb25cLnNvICAgIHU6b2JqZWN0X3I6c2FtZV9wcm9jZXNzX2hhbF9maWxlOnMwCiAvdmVuZG9yL2xpYig2NCk/L2xpYkdMRVN2Ml9lbXVsYXRpb25cLnNvICAgICAgIHU6b2JqZWN0X3I6c2FtZV9wcm9jZXNzX2hhbF9maWxlOnMwCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9nZW5mc19jb250ZXh0cyBiL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L2dlbmZzX2NvbnRleHRzCmluZGV4IGJkY2VhZDEuLjkxY2VkZjEgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L2dlbmZzX2NvbnRleHRzCisrKyBiL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L2dlbmZzX2NvbnRleHRzCkBAIC0yLDMgKzIsMTYgQEAKICMgL3N5cy9idXMvcGxhdGZvcm0vZGV2aWNlcy9BTkRSMDAwMTowMC9wcm9wZXJ0aWVzL2FuZHJvaWQvIHdoaWNoIGlzIGEgc3ltbGluayB0bwogIyAvc3lzL2RldmljZXMvcGxhdGZvcm0vQU5EUjAwMDE6MDAvcHJvcGVydGllcy9hbmRyb2lkLwogZ2VuZnNjb24gc3lzZnMgL2RldmljZXMvcGxhdGZvcm0vQU5EUjAwMDE6MDAvcHJvcGVydGllcy9hbmRyb2lkIHU6b2JqZWN0X3I6c3lzZnNfZHRfZmlybXdhcmVfYW5kcm9pZDpzMAorCisjIFdlIGV4cGVjdCAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8qIGFuZCBldmVyeXRoaW5nIGl0IGxpbmtzIHRvIHRvIGJlIGxhYmVsZWQKKyMgYXMgc3lzZnNfYmF0dGVyeWluZm8uCitnZW5mc2NvbiBzeXNmcyAvZGV2aWNlcy9wbGF0Zm9ybS9HRlNIMDAwMTowMC9wb3dlcl9zdXBwbHkgdTpvYmplY3RfcjpzeXNmc19iYXR0ZXJ5aW5mbzpzMAorCisjIC9zeXMvY2xhc3MvcnRjCitnZW5mc2NvbiBzeXNmcyAvZGV2aWNlcy9wbnAwLzAwOjAwL3J0YyB1Om9iamVjdF9yOnN5c2ZzX3J0YzpzMAorZ2VuZnNjb24gc3lzZnMgL2RldmljZXMvcGxhdGZvcm0vR0ZTSDAwMDc6MDAvcnRjIHU6b2JqZWN0X3I6c3lzZnNfcnRjOnMwCisKKyMgL3N5cy9jbGFzcy9uZXQKK2dlbmZzY29uIHN5c2ZzIC9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDowOC4wL3ZpcnRpbzUvbmV0IHU6b2JqZWN0X3I6c3lzZnNfbmV0OnMwCitnZW5mc2NvbiBzeXNmcyAvZGV2aWNlcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltL2h3c2ltMC9uZXQgdTpvYmplY3RfcjpzeXNmc19uZXQ6czAKK2dlbmZzY29uIHN5c2ZzIC9kZXZpY2VzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0vaHdzaW0xL25ldCB1Om9iamVjdF9yOnN5c2ZzX25ldDpzMApkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvZ29sZGZpc2hfc2V0dXAudGUgYi90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9nb2xkZmlzaF9zZXR1cC50ZQppbmRleCBiY2Q0OWJkLi5lYjkxM2U5IDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9nb2xkZmlzaF9zZXR1cC50ZQorKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9nb2xkZmlzaF9zZXR1cC50ZQpAQCAtNCw2ICs0LDcgQEAKIAogaW5pdF9kYWVtb25fZG9tYWluKGdvbGRmaXNoX3NldHVwKQogCitzZXRfcHJvcChnb2xkZmlzaF9zZXR1cCwgZGVidWdfcHJvcCk7CiBhbGxvdyBnb2xkZmlzaF9zZXR1cCBzZWxmOmNhcGFiaWxpdHkgeyBuZXRfYWRtaW4gbmV0X3JhdyB9OwogYWxsb3cgZ29sZGZpc2hfc2V0dXAgc2VsZjp1ZHBfc29ja2V0IHsgY3JlYXRlIGlvY3RsIH07CiBhbGxvdyBnb2xkZmlzaF9zZXR1cCB2ZW5kb3JfdG9vbGJveF9leGVjOmZpbGUgZXhlY3V0ZV9ub190cmFuczsKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L2hhbF9jYXNfZGVmYXVsdC50ZSBiL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L2hhbF9jYXNfZGVmYXVsdC50ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWQzYmVlCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvaGFsX2Nhc19kZWZhdWx0LnRlCkBAIC0wLDAgKzEgQEAKK3ZuZGJpbmRlcl91c2UoaGFsX2Nhc19kZWZhdWx0KTsKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L2hhbF9maW5nZXJwcmludF9kZWZhdWx0LnRlIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvaGFsX2ZpbmdlcnByaW50X2RlZmF1bHQudGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViMDZmMQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L2hhbF9maW5nZXJwcmludF9kZWZhdWx0LnRlCkBAIC0wLDAgKzEsNSBAQAorIyBUT0RPKGIvMzY2NDQ0OTIpOiBSZW1vdmUgZGF0YV9iZXR3ZWVuX2NvcmVfYW5kX3ZlbmRvcl92aW9sYXRvcnMgb25jZQorIyBoYWxfZmluZ2VycHJpbnQgbm8gbG9uZ2VyIGRpcmVjdGx5IGFjY2Vzc2VzIGZpbmdlcnByaW50ZF9kYXRhX2ZpbGUuCit0eXBlYXR0cmlidXRlIGhhbF9maW5nZXJwcmludF9kZWZhdWx0IGRhdGFfYmV0d2Vlbl9jb3JlX2FuZF92ZW5kb3JfdmlvbGF0b3JzOworYWxsb3cgaGFsX2ZpbmdlcnByaW50X2RlZmF1bHQgZmluZ2VycHJpbnRkX2RhdGFfZmlsZTpmaWxlIGNyZWF0ZV9maWxlX3Blcm1zOworYWxsb3cgaGFsX2ZpbmdlcnByaW50X2RlZmF1bHQgZmluZ2VycHJpbnRkX2RhdGFfZmlsZTpkaXIgcndfZGlyX3Blcm1zOwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvaGFsX2dyYXBoaWNzX2FsbG9jYXRvcl9kZWZhdWx0LnRlIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvaGFsX2dyYXBoaWNzX2FsbG9jYXRvcl9kZWZhdWx0LnRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOGUyN2QKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9oYWxfZ3JhcGhpY3NfYWxsb2NhdG9yX2RlZmF1bHQudGUKQEAgLTAsMCArMSwyIEBACithbGxvdyBoYWxfZ3JhcGhpY3NfYWxsb2NhdG9yX2RlZmF1bHQgZ3JhcGhpY3NfZGV2aWNlOmRpciBzZWFyY2g7CithbGxvdyBoYWxfZ3JhcGhpY3NfYWxsb2NhdG9yX2RlZmF1bHQgZ3JhcGhpY3NfZGV2aWNlOmNocl9maWxlIHsgaW9jdGwgb3BlbiByZWFkIHdyaXRlIH07CmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9oZWFsdGhkLnRlIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvaGVhbHRoZC50ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQ2NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvaGVhbHRoZC50ZQpAQCAtMCwwICsxLDIgQEAKKyMgQWxsb3cgdG8gcmVhZCAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseSBkaXJlY3RvcnkKK2FsbG93IGhlYWx0aGQgc3lzZnM6ZGlyIHJfZGlyX3Blcm1zOwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvcHJvcGVydHkudGUgYi90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9wcm9wZXJ0eS50ZQppbmRleCBhNDg2NzAyLi41NmUwMmVmIDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9wcm9wZXJ0eS50ZQorKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9wcm9wZXJ0eS50ZQpAQCAtMSw0ICsxLDMgQEAKIHR5cGUgcWVtdV9wcm9wLCBwcm9wZXJ0eV90eXBlOwogdHlwZSBxZW11X2NtZGxpbmUsIHByb3BlcnR5X3R5cGU7CiB0eXBlIHJhZGlvX25vcmlsX3Byb3AsIHByb3BlcnR5X3R5cGU7Ci10eXBlIG9wZW5nbGVzX3Byb3AsIHByb3BlcnR5X3R5cGU7CmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9wcm9wZXJ0eV9jb250ZXh0cyBiL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L3Byb3BlcnR5X2NvbnRleHRzCmluZGV4IGM2NmE4NWYuLjNhNjFiNmIgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L3Byb3BlcnR5X2NvbnRleHRzCisrKyBiL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L3Byb3BlcnR5X2NvbnRleHRzCkBAIC0zLDQgKzMsMyBAQAogcm8uZW11LiAgICAgICAgICAgICAgICAgdTpvYmplY3RfcjpxZW11X3Byb3A6czAKIHJvLmVtdWxhdG9yLiAgICAgICAgICAgIHU6b2JqZWN0X3I6cWVtdV9wcm9wOnMwCiByby5yYWRpby5ub3JpbCAgICAgICAgICB1Om9iamVjdF9yOnJhZGlvX25vcmlsX3Byb3A6czAKLXJvLm9wZW5nbGVzLiAgICAgICAgICAgIHU6b2JqZWN0X3I6b3BlbmdsZXNfcHJvcDpzMApkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvc3lzdGVtX3NlcnZlci50ZSBiL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5L3N5c3RlbV9zZXJ2ZXIudGUKaW5kZXggOTA2MzA5NS4uZGQ3MGIxMiAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kvc3lzdGVtX3NlcnZlci50ZQorKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeS9zeXN0ZW1fc2VydmVyLnRlCkBAIC0xLDIgKzEgQEAKLWdldF9wcm9wKHN5c3RlbV9zZXJ2ZXIsIG9wZW5nbGVzX3Byb3ApCiBnZXRfcHJvcChzeXN0ZW1fc2VydmVyLCByYWRpb19ub3JpbF9wcm9wKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjQvQm9hcmRDb25maWcubWsgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NC9Cb2FyZENvbmZpZy5tawppbmRleCA5YmViOWEzLi5iZThlYTM5IDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NC9Cb2FyZENvbmZpZy5taworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NC9Cb2FyZENvbmZpZy5tawpAQCAtMjAsNiArMjAsNyBAQAogVEFSR0VUX0FSQ0hfVkFSSUFOVCA6PSBhcm12OC1hCiBUQVJHRVRfQ1BVX1ZBUklBTlQgOj0gZ2VuZXJpYwogVEFSR0VUX0NQVV9BQkkgOj0gYXJtNjQtdjhhCitUQVJHRVRfQk9PVExPQURFUl9CT0FSRF9OQU1FIDo9IGdvbGRmaXNoXyQoVEFSR0VUX0FSQ0gpCiAKIFRBUkdFVF8yTkRfQVJDSCA6PSBhcm0KIFRBUkdFVF8yTkRfQ1BVX0FCSSA6PSBhcm1lYWJpLXY3YQpAQCAtODgsMTEgKzg5LDE1IEBACiAjIHdoZW4gZmluYWxpemluZyB0aGVtLgogQk9BUkRfVkVORE9SSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gMTAwMDAwMDAwCiBCT0FSRF9WRU5ET1JJTUFHRV9GSUxFX1NZU1RFTV9UWVBFIDo9IGV4dDQKLUJPQVJEX0NBQ0hFSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gNjkyMDYwMTYKLUJPQVJEX0NBQ0hFSU1BR0VfRklMRV9TWVNURU1fVFlQRSA6PSBleHQ0CiBCT0FSRF9GTEFTSF9CTE9DS19TSVpFIDo9IDUxMgogVEFSR0VUX1VTRVJJTUFHRVNfU1BBUlNFX0VYVF9ESVNBQkxFRCA6PSB0cnVlCiBERVZJQ0VfTUFUUklYX0ZJTEUgICA6PSBkZXZpY2UvZ2VuZXJpYy9nb2xkZmlzaC9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwKIAogQk9BUkRfUFJPUEVSVFlfT1ZFUlJJREVTX1NQTElUX0VOQUJMRUQgOj0gdHJ1ZQogQk9BUkRfU0VQT0xJQ1lfRElSUyArPSBidWlsZC90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeQorCisjIEVuYWJsZSBBL0IgdXBkYXRlCitUQVJHRVRfTk9fUkVDT1ZFUlkgOj0gdHJ1ZQorQk9BUkRfQlVJTERfU1lTVEVNX1JPT1RfSU1BR0UgOj0gdHJ1ZQorCitCT0FSRF9WTkRLX1ZFUlNJT04gOj0gY3VycmVudApkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYS9Cb2FyZENvbmZpZy5tayBiL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybTY0X2EvQm9hcmRDb25maWcubWsKaW5kZXggODhiZDg3Yy4uMzRhOGFjMCAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYS9Cb2FyZENvbmZpZy5taworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NF9hL0JvYXJkQ29uZmlnLm1rCkBAIC0xNCwzOCArMTQsNyBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICMKIAotIyBDb21tb24gYm9hcmRjb25maWcgc2V0dGluZ3MgZm9yIGdlbmVyaWMgQU9TUCBwcm9kdWN0cyB0YXJnZXR0aW5nIG1vYmlsZQotIyAocGhvbmUvdGFibGUpIGRldmljZXMuCi0KLSMgQm9vdGxvYWRlciBpcyBub3QgcGFydCBvZiBnZW5lcmljIEFPU1AgaW1hZ2UKLVRBUkdFVF9OT19CT09UTE9BREVSIDo9IHRydWUKLQotIyBLZXJuZWwgaXMgYWxzbyBub3QgcGFydCBvZiBnZW5lcmljIEFPU1AgaW1hZ2UKLVRBUkdFVF9OT19LRVJORUwgOj0gdHJ1ZQotCi0jIHN5c3RlbS5pbWcgaXMgYWx3YXlzIGV4dDQgd2l0aCBzcGFyc2Ugb3B0aW9uCi1UQVJHRVRfVVNFUklNQUdFU19VU0VfRVhUNCA6PSB0cnVlCi1UQVJHRVRfVVNFUklNQUdFU19TUEFSU0VfRVhUX0RJU0FCTEVEIDo9IGZhbHNlCi1UQVJHRVRfVVNFU19NS0UyRlMgOj0gdHJ1ZQotCi0jIEVuYWJsZSBkZXggcHJlLW9wdCB0byBzcGVlZCB1cCBpbml0aWFsIGJvb3QKLWlmZXEgKCQoSE9TVF9PUyksbGludXgpCi0gIGlmZXEgKCQoV0lUSF9ERVhQUkVPUFQpLCkKLSAgICBXSVRIX0RFWFBSRU9QVCA6PSB0cnVlCi0gICAgV0lUSF9ERVhQUkVPUFRfUElDIDo9IHRydWUKLSAgICBpZm5lcSAoJChUQVJHRVRfQlVJTERfVkFSSUFOVCksdXNlcikKLSAgICAgICMgUmV0YWluIGNsYXNzZXMuZGV4IGluIEFQSydzIGZvciBub24tdXNlciBidWlsZHMKLSAgICAgIERFWF9QUkVPUFRfREVGQVVMVCA6PSBub3N0cmlwcGluZwotICAgIGVuZGlmCi0gIGVuZGlmCi1lbmRpZgotCi0jIEdlbmVyaWMgQU9TUCBpbWFnZSBhbHdheXMgcmVxdWlyZXMgc2VwYXJhdGUgdmVuZG9yLmltZwotQk9BUkRfVVNFU19WRU5ET1JJTUFHRSA6PSB0cnVlCi1UQVJHRVRfQ09QWV9PVVRfVkVORE9SIDo9IHZlbmRvcgotCi0jIEdlbmVyaWMgQU9TUCBpbWFnZSBkb2VzIE5PVCBzdXBwb3J0IEhXQzEKLVRBUkdFVF9VU0VTX0hXQzIgOj0gdHJ1ZQoraW5jbHVkZSBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC90cmVibGVfY29tbW9uXzY0Lm1rCiAKIFRBUkdFVF9BUkNIIDo9IGFybTY0CiBUQVJHRVRfQVJDSF9WQVJJQU5UIDo9IGFybXY4LWEKQEAgLTU0LDE2ICsyMyw3IEBACiBUQVJHRVRfQ1BVX1ZBUklBTlQgOj0gZ2VuZXJpYwogCiBUQVJHRVRfMk5EX0FSQ0ggOj0gYXJtCi1UQVJHRVRfMk5EX0FSQ0hfVkFSSUFOVCA6PSBhcm12Ny1hLW5lb24KK1RBUkdFVF8yTkRfQVJDSF9WQVJJQU5UIDo9IGFybXY4LWEKIFRBUkdFVF8yTkRfQ1BVX0FCSSA6PSBhcm1lYWJpLXY3YQogVEFSR0VUXzJORF9DUFVfQUJJMiA6PSBhcm1lYWJpCiBUQVJHRVRfMk5EX0NQVV9WQVJJQU5UIDo9IGdlbmVyaWMKLQotVEFSR0VUX1VTRVNfNjRfQklUX0JJTkRFUiA6PSB0cnVlCi0KLUJPQVJEX1NZU1RFTUlNQUdFX1BBUlRJVElPTl9TSVpFIDo9IDE2MTA2MTI3MzYJIyAxLjUgR0IKLQotQk9BUkRfRkxBU0hfQkxPQ0tfU0laRSA6PSA1MTIKLQotQk9BUkRfUFJPUEVSVFlfT1ZFUlJJREVTX1NQTElUX0VOQUJMRUQgOj0gdHJ1ZQotCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NF9hL3N5c3RlbS5wcm9wIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYS9zeXN0ZW0ucHJvcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NF9hL3N5c3RlbS5wcm9wCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybTY0X2FiL0JvYXJkQ29uZmlnLm1rIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvQm9hcmRDb25maWcubWsKaW5kZXggMGMwNzU2Ni4uMDBhZmVlNiAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvQm9hcmRDb25maWcubWsKKysrIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvQm9hcmRDb25maWcubWsKQEAgLTE0LDM5ICsxNCw3IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIwogCi0jIENvbW1vbiBib2FyZGNvbmZpZyBzZXR0aW5ncyBmb3IgZ2VuZXJpYyBBT1NQIHByb2R1Y3RzIHRhcmdldHRpbmcgbW9iaWxlCi0jIChwaG9uZS90YWJsZSkgZGV2aWNlcy4KLQotIyBCb290bG9hZGVyIGlzIG5vdCBwYXJ0IG9mIGdlbmVyaWMgQU9TUCBpbWFnZQotVEFSR0VUX05PX0JPT1RMT0FERVIgOj0gdHJ1ZQotCi0jIEtlcm5lbCBpcyBhbHNvIG5vdCBwYXJ0IG9mIGdlbmVyaWMgQU9TUCBpbWFnZQotVEFSR0VUX05PX0tFUk5FTCA6PSB0cnVlCi0KLSMgc3lzdGVtLmltZyBpcyBhbHdheXMgZXh0NCB3aXRoIHNwYXJzZSBvcHRpb24KLVRBUkdFVF9VU0VSSU1BR0VTX1VTRV9FWFQ0IDo9IHRydWUKLVRBUkdFVF9VU0VSSU1BR0VTX1NQQVJTRV9FWFRfRElTQUJMRUQgOj0gZmFsc2UKLVRBUkdFVF9VU0VTX01LRTJGUyA6PSB0cnVlCi0KLSMgRW5hYmxlIGRleCBwcmUtb3B0IHRvIHNwZWVkIHVwIGluaXRpYWwgYm9vdAotaWZlcSAoJChIT1NUX09TKSxsaW51eCkKLSAgaWZlcSAoJChXSVRIX0RFWFBSRU9QVCksKQotICAgIFdJVEhfREVYUFJFT1BUIDo9IHRydWUKLSAgICBXSVRIX0RFWFBSRU9QVF9QSUMgOj0gdHJ1ZQotICAgIGlmbmVxICgkKFRBUkdFVF9CVUlMRF9WQVJJQU5UKSx1c2VyKQotICAgICAgIyBSZXRhaW4gY2xhc3Nlcy5kZXggaW4gQVBLJ3MgZm9yIG5vbi11c2VyIGJ1aWxkcwotICAgICAgREVYX1BSRU9QVF9ERUZBVUxUIDo9IG5vc3RyaXBwaW5nCi0gICAgZW5kaWYKLSAgZW5kaWYKLWVuZGlmCi0KLSMgR2VuZXJpYyBBT1NQIGltYWdlIGFsd2F5cyByZXF1aXJlcyBzZXBhcmF0ZSB2ZW5kb3IuaW1nCi1CT0FSRF9VU0VTX1ZFTkRPUklNQUdFIDo9IHRydWUKLVRBUkdFVF9DT1BZX09VVF9WRU5ET1IgOj0gdmVuZG9yCi0KLSMgR2VuZXJpYyBBT1NQIGltYWdlIGRvZXMgTk9UIHN1cHBvcnQgSFdDMQotVEFSR0VUX1VTRVNfSFdDMiA6PSB0cnVlCi1OVU1fRlJBTUVCVUZGRVJfU1VSRkFDRV9CVUZGRVJTIDo9IDMKK2luY2x1ZGUgYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvdHJlYmxlX2NvbW1vbl82NC5tawogCiBUQVJHRVRfQVJDSCA6PSBhcm02NAogVEFSR0VUX0FSQ0hfVkFSSUFOVCA6PSBhcm12OC1hCkBAIC01NSwzMCArMjMsMTkgQEAKIFRBUkdFVF9DUFVfVkFSSUFOVCA6PSBnZW5lcmljCiAKIFRBUkdFVF8yTkRfQVJDSCA6PSBhcm0KLVRBUkdFVF8yTkRfQVJDSF9WQVJJQU5UIDo9IGFybXY3LWEtbmVvbgorVEFSR0VUXzJORF9BUkNIX1ZBUklBTlQgOj0gYXJtdjgtYQogVEFSR0VUXzJORF9DUFVfQUJJIDo9IGFybWVhYmktdjdhCiBUQVJHRVRfMk5EX0NQVV9BQkkyIDo9IGFybWVhYmkKLSMgVE9ETyhqaXlvbmcpIGNhbiB3ZSBzZXQga3JhaXQgaGVyZT8KLVRBUkdFVF8yTkRfQ1BVX1ZBUklBTlQgOj0gY29ydGV4LWExNQotCi1UQVJHRVRfVVNFU182NF9CSVRfQklOREVSIDo9IHRydWUKK1RBUkdFVF8yTkRfQ1BVX1ZBUklBTlQgOj0gZ2VuZXJpYwogCiAjIEVuYWJsZSBBL0IgdXBkYXRlCiBUQVJHRVRfTk9fUkVDT1ZFUlkgOj0gdHJ1ZQogQk9BUkRfQlVJTERfU1lTVEVNX1JPT1RfSU1BR0UgOj0gdHJ1ZQogCiAjIFRPRE8oaml5b25nKSBUaGVzZSBtaWdodCBiZSBTb0Mgc3BlY2lmaWMuCi1CT0FSRF9ST09UX0VYVFJBX0ZPTERFUlMgOj0gYnRfZmlybXdhcmUgZmlybXdhcmUgZmlybXdhcmUvcmFkaW8gcGVyc2lzdAorQk9BUkRfUk9PVF9FWFRSQV9GT0xERVJTICs9IGZpcm13YXJlIGZpcm13YXJlL3JhZGlvIHBlcnNpc3QKIEJPQVJEX1JPT1RfRVhUUkFfU1lNTElOS1MgOj0gL3ZlbmRvci9saWIvZHNwOi9kc3AKIAotIyBUT0RPKGIvMzU2MDM1NDkpOiB0aGlzIGlzIGN1cnJlbnRseSBzZXQgdG8gMi41R0IgdG8gc3VwcG9ydCBzYWlsZmlzaC9tYXJsaW4KLSMgRml4IHRoaXMhCi1CT0FSRF9TWVNURU1JTUFHRV9QQVJUSVRJT05fU0laRSA6PSAyMTQ3NDgzNjQ4Ci0KLUJPQVJEX0ZMQVNIX0JMT0NLX1NJWkUgOj0gNTEyCi0KLUJPQVJEX1BST1BFUlRZX09WRVJSSURFU19TUExJVF9FTkFCTEVEIDo9IHRydWUKLQogIyBUT0RPKGIvMzY3NjQyMTUpOiByZW1vdmUgdGhpcyBzZXR0aW5nIHdoZW4gdGhlIGdlbmVyaWMgc3lzdGVtIGltYWdlCiAjIG5vIGxvbmdlciBoYXMgUUNPTS1zcGVjaWZpYyBkaXJlY3RvcmllcyB1bmRlciAvLgogQk9BUkRfU0VQT0xJQ1lfRElSUyArPSBidWlsZC90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NF9hYi9zZXBvbGljeQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvc2Vwb2xpY3kvT1dORVJTIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvc2Vwb2xpY3kvT1dORVJTCmluZGV4IDRiZDdlMzQuLjM4Mjg5ODggMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybTY0X2FiL3NlcG9saWN5L09XTkVSUworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NF9hYi9zZXBvbGljeS9PV05FUlMKQEAgLTEsNiArMSw0IEBACi1ubmtAZ29vZ2xlLmNvbQogamVmZnZAZ29vZ2xlLmNvbQota2x5dWJpbkBnb29nbGUuY29tCiBkY2FzaG1hbkBnb29nbGUuY29tCiBqYmlyZXNAZ29vZ2xlLmNvbQogc3NwYXRpbEBnb29nbGUuY29tCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NF9hYi9zZXBvbGljeS9maWxlLnRlIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvc2Vwb2xpY3kvZmlsZS50ZQppbmRleCA0NjQ1NTMzLi43YWRmZGZhIDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NF9hYi9zZXBvbGljeS9maWxlLnRlCisrKyBiL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybTY0X2FiL3NlcG9saWN5L2ZpbGUudGUKQEAgLTEsNiArMSw1IEBACiAjIFRPRE8oYi8zNjc2NDIxNSk6IHJlbW92ZSB0aGlzIGZpbGUgd2hlbiB0aGUgZ2VuZXJpYyBzeXN0ZW0gaW1hZ2UKICMgbm8gbG9uZ2VyIGhhcyB0aGVzZSBkaXJlY3RvcmllcwotdHlwZSBidF9maXJtd2FyZV9maWxlLCBmaWxlX3R5cGU7CiB0eXBlIHBlcnNpc3RfZmlsZSwgZmlsZV90eXBlOwogCiAjIERlZmF1bHQgdHlwZSBmb3IgYW55dGhpbmcgdW5kZXIgL2Zpcm13YXJlLgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvc2Vwb2xpY3kvZmlsZV9jb250ZXh0cyBiL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybTY0X2FiL3NlcG9saWN5L2ZpbGVfY29udGV4dHMKaW5kZXggOTJhNGZmOC4uMGE4MDU1OSAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvc2Vwb2xpY3kvZmlsZV9jb250ZXh0cworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NF9hYi9zZXBvbGljeS9maWxlX2NvbnRleHRzCkBAIC0yLDcgKzIsNiBAQAogIyBubyBsb25nZXIgaGFzIHRoZXNlIGRpcmVjdG9yaWVzLiBUaGV5IGFyZSBzcGVjaWZpYyB0byBRQ09NLgogCiAjIC8KLS9idF9maXJtd2FyZSgvLiopPyAgICAgIHU6b2JqZWN0X3I6YnRfZmlybXdhcmVfZmlsZTpzMAogL3RvbWJzdG9uZXMgICAgICAgICAgICAgdTpvYmplY3Rfcjpyb290ZnM6czAKIC9kc3AgICAgICAgICAgICAgICAgICAgIHU6b2JqZWN0X3I6cm9vdGZzOnMwCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybTY0X2FiL3N5c3RlbS5wcm9wIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvc3lzdGVtLnByb3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvc3lzdGVtLnByb3AKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtX2EvQm9hcmRDb25maWcubWsgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm1fYS9Cb2FyZENvbmZpZy5tawppbmRleCA2NTMwZTZlLi5kOTMwNzQ5IDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm1fYS9Cb2FyZENvbmZpZy5taworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm1fYS9Cb2FyZENvbmZpZy5tawpAQCAtMTQsNDggKzE0LDEzIEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIwogCi0jIENvbW1vbiBib2FyZGNvbmZpZyBzZXR0aW5ncyBmb3IgZ2VuZXJpYyBBT1NQIHByb2R1Y3RzIHRhcmdldHRpbmcgbW9iaWxlCi0jIChwaG9uZS90YWJsZSkgZGV2aWNlcy4KK2luY2x1ZGUgYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvdHJlYmxlX2NvbW1vbl8zMi5tawogCi0jIEJvb3Rsb2FkZXIgaXMgbm90IHBhcnQgb2YgZ2VuZXJpYyBBT1NQIGltYWdlCi1UQVJHRVRfTk9fQk9PVExPQURFUiA6PSB0cnVlCi0KLSMgS2VybmVsIGlzIGFsc28gbm90IHBhcnQgb2YgZ2VuZXJpYyBBT1NQIGltYWdlCi1UQVJHRVRfTk9fS0VSTkVMIDo9IHRydWUKLQotIyBzeXN0ZW0uaW1nIGlzIGFsd2F5cyBleHQ0IHdpdGggc3BhcnNlIG9wdGlvbgotVEFSR0VUX1VTRVJJTUFHRVNfVVNFX0VYVDQgOj0gdHJ1ZQotVEFSR0VUX1VTRVJJTUFHRVNfU1BBUlNFX0VYVF9ESVNBQkxFRCA6PSBmYWxzZQotVEFSR0VUX1VTRVNfTUtFMkZTIDo9IHRydWUKLQotIyBFbmFibGUgZGV4IHByZS1vcHQgdG8gc3BlZWQgdXAgaW5pdGlhbCBib290Ci1pZmVxICgkKEhPU1RfT1MpLGxpbnV4KQotICBpZmVxICgkKFdJVEhfREVYUFJFT1BUKSwpCi0gICAgV0lUSF9ERVhQUkVPUFQgOj0gdHJ1ZQotICAgIFdJVEhfREVYUFJFT1BUX1BJQyA6PSB0cnVlCi0gICAgaWZuZXEgKCQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpLHVzZXIpCi0gICAgICAjIFJldGFpbiBjbGFzc2VzLmRleCBpbiBBUEsncyBmb3Igbm9uLXVzZXIgYnVpbGRzCi0gICAgICBERVhfUFJFT1BUX0RFRkFVTFQgOj0gbm9zdHJpcHBpbmcKLSAgICBlbmRpZgotICBlbmRpZgotZW5kaWYKLQotIyBHZW5lcmljIEFPU1AgaW1hZ2UgYWx3YXlzIHJlcXVpcmVzIHNlcGFyYXRlIHZlbmRvci5pbWcKLUJPQVJEX1VTRVNfVkVORE9SSU1BR0UgOj0gdHJ1ZQotVEFSR0VUX0NPUFlfT1VUX1ZFTkRPUiA6PSB2ZW5kb3IKLQotIyBHZW5lcmljIEFPU1AgaW1hZ2UgZG9lcyBOT1Qgc3VwcG9ydCBIV0MxCi1UQVJHRVRfVVNFU19IV0MyIDo9IHRydWUKKyMgT3ZlcndyaXRlIHRoZSBzZXR0aW5nIGluIHRyZWJsZV9jb21tb25fMzIubWsgZm9yIG5vbi1BL0IgYXJtIEdTSQorQk9BUkRfU1lTVEVNSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gODA1MzA2MzY4ICMgNzY4TUIKIAogVEFSR0VUX0FSQ0ggOj0gYXJtCiBUQVJHRVRfQVJDSF9WQVJJQU5UIDo9IGFybXY3LWEtbmVvbgogVEFSR0VUX0NQVV9BQkkgOj0gYXJtZWFiaS12N2EKIFRBUkdFVF9DUFVfQUJJMiA6PSBhcm1lYWJpCiBUQVJHRVRfQ1BVX1ZBUklBTlQgOj0gZ2VuZXJpYwotCi1CT0FSRF9TWVNURU1JTUFHRV9QQVJUSVRJT05fU0laRSA6PSAxNjEwNjEyNzM2Ci0KLUJPQVJEX0ZMQVNIX0JMT0NLX1NJWkUgOj0gNTEyCi0KLUJPQVJEX1BST1BFUlRZX09WRVJSSURFU19TUExJVF9FTkFCTEVEIDo9IHRydWUKLQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtX2Evc3lzdGVtLnByb3AgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm1fYS9zeXN0ZW0ucHJvcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm1fYS9zeXN0ZW0ucHJvcAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm1fYWIvQm9hcmRDb25maWcubWsgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm1fYWIvQm9hcmRDb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxZTkwNwotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybV9hYi9Cb2FyZENvbmZpZy5tawpAQCAtMCwwICsxLDM4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCitpbmNsdWRlIGJ1aWxkL21ha2UvdGFyZ2V0L2JvYXJkL3RyZWJsZV9jb21tb25fMzIubWsKKworIyBPdmVyd3JpdGUgdGhlIHNldHRpbmcgaW4gdHJlYmxlX2NvbW1vbl8zMi5tayBmb3Igbm9uLUEvQiBhcm0gR1NJCitCT0FSRF9TWVNURU1JTUFHRV9QQVJUSVRJT05fU0laRSA6PSA4MDUzMDYzNjggIyA3NjhNQgorCitUQVJHRVRfQVJDSCA6PSBhcm0KK1RBUkdFVF9BUkNIX1ZBUklBTlQgOj0gYXJtdjctYS1uZW9uCitUQVJHRVRfQ1BVX0FCSSA6PSBhcm1lYWJpLXY3YQorVEFSR0VUX0NQVV9BQkkyIDo9IGFybWVhYmkKK1RBUkdFVF9DUFVfVkFSSUFOVCA6PSBnZW5lcmljCisKKyMgRW5hYmxlIEEvQiB1cGRhdGUKK1RBUkdFVF9OT19SRUNPVkVSWSA6PSB0cnVlCitCT0FSRF9CVUlMRF9TWVNURU1fUk9PVF9JTUFHRSA6PSB0cnVlCisKKyMgVE9ETyhqaXlvbmcpIFRoZXNlIG1pZ2h0IGJlIFNvQyBzcGVjaWZpYy4KK0JPQVJEX1JPT1RfRVhUUkFfRk9MREVSUyArPSBmaXJtd2FyZSBmaXJtd2FyZS9yYWRpbyBwZXJzaXN0CitCT0FSRF9ST09UX0VYVFJBX1NZTUxJTktTIDo9IC92ZW5kb3IvbGliL2RzcDovZHNwCisKKyMgVE9ETyhiLzM2NzY0MjE1KTogcmVtb3ZlIHRoaXMgc2V0dGluZyB3aGVuIHRoZSBnZW5lcmljIHN5c3RlbSBpbWFnZQorIyBubyBsb25nZXIgaGFzIFFDT00tc3BlY2lmaWMgZGlyZWN0b3JpZXMgdW5kZXIgLy4KK0JPQVJEX1NFUE9MSUNZX0RJUlMgKz0gYnVpbGQvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtNjRfYWIvc2Vwb2xpY3kKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L0FuZHJvaWRCb2FyZC5tayBiL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L0FuZHJvaWRCb2FyZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RhZmYyNy4uMDAwMDAwMAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9BbmRyb2lkQm9hcmQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi0taW5jbHVkZSBidWlsZC90YXJnZXQvYm9hcmQvZ2VuZXJpYy9BbmRyb2lkQm9hcmQubWsKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L1JFQURNRS50eHQgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWQ1OTBhLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVRoZSAiZ2VuZXJpY19hcm12NSIgcHJvZHVjdCBkZWZpbmVzIGEgbm9uLWhhcmR3YXJlLXNwZWNpZmljIHRhcmdldAotd2l0aG91dCBhIGtlcm5lbCBvciBib290bG9hZGVyLgotCi1JdCBpcyBub3QgYSBwcm9kdWN0ICJiYXNlIGNsYXNzIjsgbm8gb3RoZXIgcHJvZHVjdHMgaW5oZXJpdAotZnJvbSBpdCBvciB1c2UgaXQgaW4gYW55IHdheS4KZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L3N5c3RlbS5wcm9wIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtdjUvc3lzdGVtLnByb3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzN2EwZjkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtdjUvc3lzdGVtLnByb3AKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMKLSMgc3lzdGVtLnByb3AgZm9yIGdlbmVyaWMgc2RrCi0jCi0KLXJpbGQubGlicGF0aD0vc3lzdGVtL2xpYi9saWJyZWZlcmVuY2UtcmlsLnNvCi1yaWxkLmxpYmFyZ3M9LWQgL2Rldi90dHlTMApkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfbWlwcy9Cb2FyZENvbmZpZy5tayBiL3RhcmdldC9ib2FyZC9nZW5lcmljX21pcHMvQm9hcmRDb25maWcubWsKaW5kZXggZmI2NmQyMS4uNTIzNDA4YiAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfbWlwcy9Cb2FyZENvbmZpZy5taworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19taXBzL0JvYXJkQ29uZmlnLm1rCkBAIC02NSwxMCArNjUsMTIgQEAKICMgd2hlbiBmaW5hbGl6aW5nIHRoZW0uCiBCT0FSRF9WRU5ET1JJTUFHRV9QQVJUSVRJT05fU0laRSA6PSAxMDAwMDAwMDAKIEJPQVJEX1ZFTkRPUklNQUdFX0ZJTEVfU1lTVEVNX1RZUEUgOj0gZXh0NAotQk9BUkRfQ0FDSEVJTUFHRV9QQVJUSVRJT05fU0laRSA6PSA2OTIwNjAxNgotQk9BUkRfQ0FDSEVJTUFHRV9GSUxFX1NZU1RFTV9UWVBFIDo9IGV4dDQKIEJPQVJEX0ZMQVNIX0JMT0NLX1NJWkUgOj0gNTEyCiBUQVJHRVRfVVNFUklNQUdFU19TUEFSU0VfRVhUX0RJU0FCTEVEIDo9IHRydWUKIERFVklDRV9NQVRSSVhfRklMRSAgIDo9IGRldmljZS9nZW5lcmljL2dvbGRmaXNoL2NvbXBhdGliaWxpdHlfbWF0cml4LnhtbAogCiBCT0FSRF9TRVBPTElDWV9ESVJTICs9IGJ1aWxkL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5CisKKyMgRW5hYmxlIEEvQiB1cGRhdGUKK1RBUkdFVF9OT19SRUNPVkVSWSA6PSB0cnVlCitCT0FSRF9CVUlMRF9TWVNURU1fUk9PVF9JTUFHRSA6PSB0cnVlCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19taXBzL3N5c3RlbS5wcm9wIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfbWlwcy9zeXN0ZW0ucHJvcAppbmRleCAxMzdhMGY5Li45NzNkYjJjIDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19taXBzL3N5c3RlbS5wcm9wCisrKyBiL3RhcmdldC9ib2FyZC9nZW5lcmljX21pcHMvc3lzdGVtLnByb3AKQEAgLTIsNSArMiw1IEBACiAjIHN5c3RlbS5wcm9wIGZvciBnZW5lcmljIHNkawogIwogCi1yaWxkLmxpYnBhdGg9L3N5c3RlbS9saWIvbGlicmVmZXJlbmNlLXJpbC5zbworcmlsZC5saWJwYXRoPS92ZW5kb3IvbGliL2xpYnJlZmVyZW5jZS1yaWwuc28KIHJpbGQubGliYXJncz0tZCAvZGV2L3R0eVMwCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19taXBzNjQvQm9hcmRDb25maWcubWsgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY19taXBzNjQvQm9hcmRDb25maWcubWsKaW5kZXggNjdiYjUxZi4uMjA1MmQ3YiAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfbWlwczY0L0JvYXJkQ29uZmlnLm1rCisrKyBiL3RhcmdldC9ib2FyZC9nZW5lcmljX21pcHM2NC9Cb2FyZENvbmZpZy5tawpAQCAtODAsOCArODAsNiBAQAogIyB3aGVuIGZpbmFsaXppbmcgdGhlbS4KIEJPQVJEX1ZFTkRPUklNQUdFX1BBUlRJVElPTl9TSVpFIDo9IDEwMDAwMDAwMAogQk9BUkRfVkVORE9SSU1BR0VfRklMRV9TWVNURU1fVFlQRSA6PSBleHQ0Ci1CT0FSRF9DQUNIRUlNQUdFX1BBUlRJVElPTl9TSVpFIDo9IDY5MjA2MDE2Ci1CT0FSRF9DQUNIRUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUgOj0gZXh0NAogQk9BUkRfRkxBU0hfQkxPQ0tfU0laRSA6PSA1MTIKIFRBUkdFVF9VU0VSSU1BR0VTX1NQQVJTRV9FWFRfRElTQUJMRUQgOj0gdHJ1ZQogREVWSUNFX01BVFJJWF9GSUxFICAgOj0gZGV2aWNlL2dlbmVyaWMvZ29sZGZpc2gvY29tcGF0aWJpbGl0eV9tYXRyaXgueG1sCkBAIC04OSwzICs4Nyw3IEBACiBCT0FSRF9TRVBPTElDWV9ESVJTICs9IGJ1aWxkL3RhcmdldC9ib2FyZC9nZW5lcmljL3NlcG9saWN5CiAKIERFWF9QUkVPUFRfREVGQVVMVCA6PSBub3N0cmlwcGluZworCisjIEVuYWJsZSBBL0IgdXBkYXRlCitUQVJHRVRfTk9fUkVDT1ZFUlkgOj0gdHJ1ZQorQk9BUkRfQlVJTERfU1lTVEVNX1JPT1RfSU1BR0UgOj0gdHJ1ZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2L0JvYXJkQ29uZmlnLm1rIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2L0JvYXJkQ29uZmlnLm1rCmluZGV4IDAwMGE5YTMuLmY3MWU3MmIgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljX3g4Ni9Cb2FyZENvbmZpZy5taworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY194ODYvQm9hcmRDb25maWcubWsKQEAgLTEwLDYgKzEwLDExIEBACiBUQVJHRVRfQVJDSCA6PSB4ODYKIFRBUkdFVF9BUkNIX1ZBUklBTlQgOj0geDg2CiBUQVJHRVRfUFJFTElOS19NT0RVTEUgOj0gZmFsc2UKK1RBUkdFVF9CT09UTE9BREVSX0JPQVJEX05BTUUgOj0gZ29sZGZpc2hfJChUQVJHRVRfQVJDSCkKKworI2VtdWxhdG9yIG5vdyB1c2VzIDY0Yml0IGtlcm5lbCB0byBydW4gMzJiaXQgeDg2IGltYWdlCisjCitUQVJHRVRfVVNFU182NF9CSVRfQklOREVSIDo9IHRydWUKIAogIyBUaGUgSUEgZW11bGF0b3IgKHFlbXUpIHVzZXMgdGhlIEdvbGRmaXNoIGRldmljZXMKIEhBVkVfSFRDX0FVRElPX0RSSVZFUiA6PSB0cnVlCkBAIC00OCw4ICs1Myw2IEBACiAjIHdoZW4gZmluYWxpemluZyB0aGVtLgogQk9BUkRfVkVORE9SSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gMTAwMDAwMDAwCiBCT0FSRF9WRU5ET1JJTUFHRV9GSUxFX1NZU1RFTV9UWVBFIDo9IGV4dDQKLUJPQVJEX0NBQ0hFSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gNjkyMDYwMTYKLUJPQVJEX0NBQ0hFSU1BR0VfRklMRV9TWVNURU1fVFlQRSA6PSBleHQ0CiBCT0FSRF9GTEFTSF9CTE9DS19TSVpFIDo9IDUxMgogVEFSR0VUX1VTRVJJTUFHRVNfU1BBUlNFX0VYVF9ESVNBQkxFRCA6PSB0cnVlCiBERVZJQ0VfTUFUUklYX0ZJTEUgICA6PSBkZXZpY2UvZ2VuZXJpYy9nb2xkZmlzaC9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwKQEAgLTU3LDMgKzYwLDkgQEAKIEJPQVJEX1NFUE9MSUNZX0RJUlMgKz0gXAogICAgICAgICBidWlsZC90YXJnZXQvYm9hcmQvZ2VuZXJpYy9zZXBvbGljeSBcCiAgICAgICAgIGJ1aWxkL3RhcmdldC9ib2FyZC9nZW5lcmljX3g4Ni9zZXBvbGljeQorCitCT0FSRF9WTkRLX1ZFUlNJT04gOj0gY3VycmVudAorCisjIEVuYWJsZSBBL0IgdXBkYXRlCitUQVJHRVRfTk9fUkVDT1ZFUlkgOj0gdHJ1ZQorQk9BUkRfQlVJTERfU1lTVEVNX1JPT1RfSU1BR0UgOj0gdHJ1ZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2L3NlcG9saWN5L09XTkVSUyBiL3RhcmdldC9ib2FyZC9nZW5lcmljX3g4Ni9zZXBvbGljeS9PV05FUlMKaW5kZXggNGJkN2UzNC4uMzgyODk4OCAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2L3NlcG9saWN5L09XTkVSUworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY194ODYvc2Vwb2xpY3kvT1dORVJTCkBAIC0xLDYgKzEsNCBAQAotbm5rQGdvb2dsZS5jb20KIGplZmZ2QGdvb2dsZS5jb20KLWtseXViaW5AZ29vZ2xlLmNvbQogZGNhc2htYW5AZ29vZ2xlLmNvbQogamJpcmVzQGdvb2dsZS5jb20KIHNzcGF0aWxAZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2XzY0L0JvYXJkQ29uZmlnLm1rIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2XzY0L0JvYXJkQ29uZmlnLm1rCmluZGV4IDg4M2RkMmUuLmE5YzUxNDIgMTAwNzU1Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljX3g4Nl82NC9Cb2FyZENvbmZpZy5taworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY194ODZfNjQvQm9hcmRDb25maWcubWsKQEAgLTEwLDYgKzEwLDcgQEAKIFRBUkdFVF9BUkNIIDo9IHg4Nl82NAogVEFSR0VUX0FSQ0hfVkFSSUFOVCA6PSB4ODZfNjQKIFRBUkdFVF9QUkVMSU5LX01PRFVMRSA6PSBmYWxzZQorVEFSR0VUX0JPT1RMT0FERVJfQk9BUkRfTkFNRSA6PSBnb2xkZmlzaF8kKFRBUkdFVF9BUkNIKQogCiBUQVJHRVRfMk5EX0NQVV9BQkkgOj0geDg2CiBUQVJHRVRfMk5EX0FSQ0ggOj0geDg2CkBAIC01MCw4ICs1MSw2IEBACiAjIHdoZW4gZmluYWxpemluZyB0aGVtLgogQk9BUkRfVkVORE9SSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gMTAwMDAwMDAwCiBCT0FSRF9WRU5ET1JJTUFHRV9GSUxFX1NZU1RFTV9UWVBFIDo9IGV4dDQKLUJPQVJEX0NBQ0hFSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gNjkyMDYwMTYKLUJPQVJEX0NBQ0hFSU1BR0VfRklMRV9TWVNURU1fVFlQRSA6PSBleHQ0CiBCT0FSRF9GTEFTSF9CTE9DS19TSVpFIDo9IDUxMgogVEFSR0VUX1VTRVJJTUFHRVNfU1BBUlNFX0VYVF9ESVNBQkxFRCA6PSB0cnVlCiBCT0FSRF9QUk9QRVJUWV9PVkVSUklERVNfU1BMSVRfRU5BQkxFRCA6PSB0cnVlCkBAIC02MCwzICs1OSw5IEBACiBCT0FSRF9TRVBPTElDWV9ESVJTICs9IFwKICAgICAgICAgYnVpbGQvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvc2Vwb2xpY3kgXAogICAgICAgICBidWlsZC90YXJnZXQvYm9hcmQvZ2VuZXJpY194ODYvc2Vwb2xpY3kKKworQk9BUkRfVk5ES19WRVJTSU9OIDo9IGN1cnJlbnQKKworIyBFbmFibGUgQS9CIHVwZGF0ZQorVEFSR0VUX05PX1JFQ09WRVJZIDo9IHRydWUKK0JPQVJEX0JVSUxEX1NZU1RFTV9ST09UX0lNQUdFIDo9IHRydWUKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L0JvYXJkQ29uZmlnLm1rIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2XzY0X2EvQm9hcmRDb25maWcubWsKc2ltaWxhcml0eSBpbmRleCA2NyUKY29weSBmcm9tIHRhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L0JvYXJkQ29uZmlnLm1rCmNvcHkgdG8gdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2XzY0X2EvQm9hcmRDb25maWcubWsKaW5kZXggMDE2OTM3YS4uMmMwMjYwNCAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtdjUvQm9hcmRDb25maWcubWsKKysrIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2XzY0X2EvQm9hcmRDb25maWcubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCwxMCArMTQsMTIgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAjCiAKLWluY2x1ZGUgYnVpbGQvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvQm9hcmRDb25maWcubWsKK2luY2x1ZGUgYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvdHJlYmxlX2NvbW1vbl82NC5tawogCi1UQVJHRVRfQVJDSF9WQVJJQU5UIDo9IGFybXY1dGUKLVRBUkdFVF9DUFVfQUJJIDo9IGFybWVhYmkKLVRBUkdFVF9DUFVfQUJJMiA6PQorVEFSR0VUX0NQVV9BQkkgOj0geDg2XzY0CitUQVJHRVRfQVJDSCA6PSB4ODZfNjQKK1RBUkdFVF9BUkNIX1ZBUklBTlQgOj0geDg2XzY0CiAKLVdJVEhfREVYUFJFT1BUIDo9IGZhbHNlCitUQVJHRVRfMk5EX0NQVV9BQkkgOj0geDg2CitUQVJHRVRfMk5EX0FSQ0ggOj0geDg2CitUQVJHRVRfMk5EX0FSQ0hfVkFSSUFOVCA6PSB4ODZfNjQKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L0JvYXJkQ29uZmlnLm1rIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2XzY0X2FiL0JvYXJkQ29uZmlnLm1rCnNpbWlsYXJpdHkgaW5kZXggNjElCmNvcHkgZnJvbSB0YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9Cb2FyZENvbmZpZy5tawpjb3B5IHRvIHRhcmdldC9ib2FyZC9nZW5lcmljX3g4Nl82NF9hYi9Cb2FyZENvbmZpZy5tawppbmRleCAwMTY5MzdhLi5lNDk4NjNhIDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9Cb2FyZENvbmZpZy5taworKysgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY194ODZfNjRfYWIvQm9hcmRDb25maWcubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCwxMCArMTQsMTYgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAjCiAKLWluY2x1ZGUgYnVpbGQvdGFyZ2V0L2JvYXJkL2dlbmVyaWMvQm9hcmRDb25maWcubWsKK2luY2x1ZGUgYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvdHJlYmxlX2NvbW1vbl82NC5tawogCi1UQVJHRVRfQVJDSF9WQVJJQU5UIDo9IGFybXY1dGUKLVRBUkdFVF9DUFVfQUJJIDo9IGFybWVhYmkKLVRBUkdFVF9DUFVfQUJJMiA6PQorVEFSR0VUX0NQVV9BQkkgOj0geDg2XzY0CitUQVJHRVRfQVJDSCA6PSB4ODZfNjQKK1RBUkdFVF9BUkNIX1ZBUklBTlQgOj0geDg2XzY0CiAKLVdJVEhfREVYUFJFT1BUIDo9IGZhbHNlCitUQVJHRVRfMk5EX0NQVV9BQkkgOj0geDg2CitUQVJHRVRfMk5EX0FSQ0ggOj0geDg2CitUQVJHRVRfMk5EX0FSQ0hfVkFSSUFOVCA6PSB4ODZfNjQKKworIyBFbmFibGUgQS9CIHVwZGF0ZQorVEFSR0VUX05PX1JFQ09WRVJZIDo9IHRydWUKK0JPQVJEX0JVSUxEX1NZU1RFTV9ST09UX0lNQUdFIDo9IHRydWUKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L2RldmljZS5tayBiL3RhcmdldC9ib2FyZC9nZW5lcmljX3g4Nl9hL0JvYXJkQ29uZmlnLm1rCnNpbWlsYXJpdHkgaW5kZXggNzUlCmNvcHkgZnJvbSB0YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9kZXZpY2UubWsKY29weSB0byB0YXJnZXQvYm9hcmQvZ2VuZXJpY194ODZfYS9Cb2FyZENvbmZpZy5tawppbmRleCA3YzRhYWYyLi42N2NiMDdkIDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9kZXZpY2UubWsKKysrIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2X2EvQm9hcmRDb25maWcubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCw0ICsxNCw4IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIwogCi1pbmNsdWRlIGJ1aWxkL3RhcmdldC9ib2FyZC9nZW5lcmljL2RldmljZS5taworaW5jbHVkZSBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC90cmVibGVfY29tbW9uXzMyLm1rCisKK1RBUkdFVF9DUFVfQUJJIDo9IHg4NgorVEFSR0VUX0FSQ0ggOj0geDg2CitUQVJHRVRfQVJDSF9WQVJJQU5UIDo9IHg4NgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtdjUvQm9hcmRDb25maWcubWsgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY194ODZfYWIvQm9hcmRDb25maWcubWsKc2ltaWxhcml0eSBpbmRleCA2OCUKY29weSBmcm9tIHRhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L0JvYXJkQ29uZmlnLm1rCmNvcHkgdG8gdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2X2FiL0JvYXJkQ29uZmlnLm1rCmluZGV4IDAxNjkzN2EuLjZlNTExMDIgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L0JvYXJkQ29uZmlnLm1rCisrKyBiL3RhcmdldC9ib2FyZC9nZW5lcmljX3g4Nl9hYi9Cb2FyZENvbmZpZy5tawpAQCAtMSw1ICsxLDUgQEAKICMKLSMgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4tU291cmNlIFByb2plY3QKICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTE0LDEwICsxNCwxMiBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICMKIAotaW5jbHVkZSBidWlsZC90YXJnZXQvYm9hcmQvZ2VuZXJpYy9Cb2FyZENvbmZpZy5taworaW5jbHVkZSBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC90cmVibGVfY29tbW9uXzMyLm1rCiAKLVRBUkdFVF9BUkNIX1ZBUklBTlQgOj0gYXJtdjV0ZQotVEFSR0VUX0NQVV9BQkkgOj0gYXJtZWFiaQotVEFSR0VUX0NQVV9BQkkyIDo9CitUQVJHRVRfQ1BVX0FCSSA6PSB4ODYKK1RBUkdFVF9BUkNIIDo9IHg4NgorVEFSR0VUX0FSQ0hfVkFSSUFOVCA6PSB4ODYKIAotV0lUSF9ERVhQUkVPUFQgOj0gZmFsc2UKKyMgRW5hYmxlIEEvQiB1cGRhdGUKK1RBUkdFVF9OT19SRUNPVkVSWSA6PSB0cnVlCitCT0FSRF9CVUlMRF9TWVNURU1fUk9PVF9JTUFHRSA6PSB0cnVlCmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvdHJlYmxlX2NvbW1vbi5tayBiL3RhcmdldC9ib2FyZC90cmVibGVfY29tbW9uLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YzliYzUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvYm9hcmQvdHJlYmxlX2NvbW1vbi5tawpAQCAtMCwwICsxLDYwIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjIENvbW1vbiBib2FyZGNvbmZpZyBzZXR0aW5ncyBmb3IgZ2VuZXJpYyBBT1NQIHByb2R1Y3RzIHRhcmdldHRpbmcgbW9iaWxlCisjIChwaG9uZS90YWJsZSkgZGV2aWNlcy4KKworIyBWTkRLCitCT0FSRF9WTkRLX1ZFUlNJT04gOj0gY3VycmVudAorCisjIFByb3BlcnRpZXMKK1RBUkdFVF9TWVNURU1fUFJPUCA6PSBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC90cmVibGVfc3lzdGVtLnByb3AKK0JPQVJEX1BST1BFUlRZX09WRVJSSURFU19TUExJVF9FTkFCTEVEIDo9IHRydWUKKworIyBCb290bG9hZGVyLCBrZXJuZWwgYW5kIHJlY292ZXJ5IGFyZSBub3QgcGFydCBvZiBnZW5lcmljIEFPU1AgaW1hZ2UKK1RBUkdFVF9OT19CT09UTE9BREVSIDo9IHRydWUKK1RBUkdFVF9OT19LRVJORUwgOj0gdHJ1ZQorCisjIHN5c3RlbS5pbWcgaXMgYWx3YXlzIGV4dDQgd2l0aCBzcGFyc2Ugb3B0aW9uCitUQVJHRVRfVVNFUklNQUdFU19VU0VfRVhUNCA6PSB0cnVlCitUQVJHRVRfVVNFUklNQUdFU19TUEFSU0VfRVhUX0RJU0FCTEVEIDo9IGZhbHNlCitUQVJHRVRfVVNFU19NS0UyRlMgOj0gdHJ1ZQorCisjIEdlbmVyaWMgQU9TUCBpbWFnZSBhbHdheXMgcmVxdWlyZXMgc2VwYXJhdGUgdmVuZG9yLmltZworVEFSR0VUX0NPUFlfT1VUX1ZFTkRPUiA6PSB2ZW5kb3IKKworIyBHZW5lcmljIEFPU1AgaW1hZ2UgZG9lcyBOT1Qgc3VwcG9ydCBIV0MxCitUQVJHRVRfVVNFU19IV0MyIDo9IHRydWUKKyMgU2V0IGVtdWxhdG9yIGZyYW1lYnVmZmVyIGRpc3BsYXkgZGV2aWNlIGJ1ZmZlciBjb3VudCB0byAzCitOVU1fRlJBTUVCVUZGRVJfU1VSRkFDRV9CVUZGRVJTIDo9IDMKKworIyBBdWRpbworVVNFX1hNTF9BVURJT19QT0xJQ1lfQ09ORiA6PSAxCisKKyMgYi82NDcwMDE5NTogYWRkIG1pbmltdW0gc3VwcG9ydCBmb3Igb2RtLmltZworIyBDdXJyZW50bHkgb2RtLmltZyBjYW4gb25seSBiZSBidWlsdCBieSBgbWFrZSBjdXN0b21faW1hZ2VzYC4KKyMgQWRkaW5nIC9vZG0gbW91bnQgcG9pbnQgdW5kZXIgcm9vdCBkaXJlY3RvcnkuCitCT0FSRF9ST09UX0VYVFJBX0ZPTERFUlMgKz0gb2RtCisKKyMgQW5kcm9pZCBWZXJpZmllZCBCb290IChBVkIpOgorIyAgIEJ1aWxkcyBhIHNwZWNpYWwgdmJtZXRhLmltZyB0aGF0IGRpc2FibGVzIEFWQiB2ZXJpZmljYXRpb24uCisjICAgT3RoZXJ3aXNlLCBBVkIgd2lsbCBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBib290aW5nIHRoZSBnZW5lcmljIHN5c3RlbS5pbWcuCisjICAgQWxzbyBjaGVja3MgdGhhdCBCT0FSRF9BVkJfRU5BQkxFIGlzIG5vdCBzZXQsIHRvIHByZXZlbnQgYWRkaW5nIHZlcml0eQorIyAgIG1ldGFkYXRhIGludG8gc3lzdGVtLmltZy4KK2lmZXEgKCQoQk9BUkRfQVZCX0VOQUJMRSksdHJ1ZSkKKyQoZXJyb3IgQk9BUkRfQVZCX0VOQUJMRSBjYW5ub3QgYmUgc2V0IGZvciBUcmVibGUgR1NJKQorZW5kaWYKK0JPQVJEX0JVSUxEX0RJU0FCTEVEX1ZCTUVUQUlNQUdFIDo9IHRydWUKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L2RldmljZS5tayBiL3RhcmdldC9ib2FyZC90cmVibGVfY29tbW9uXzMyLm1rCnNpbWlsYXJpdHkgaW5kZXggNjUlCmNvcHkgZnJvbSB0YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9kZXZpY2UubWsKY29weSB0byB0YXJnZXQvYm9hcmQvdHJlYmxlX2NvbW1vbl8zMi5tawppbmRleCA3YzRhYWYyLi5kYmUwODk5IDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9kZXZpY2UubWsKKysrIGIvdGFyZ2V0L2JvYXJkL3RyZWJsZV9jb21tb25fMzIubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCw0ICsxNCw4IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIwogCi1pbmNsdWRlIGJ1aWxkL3RhcmdldC9ib2FyZC9nZW5lcmljL2RldmljZS5taworaW5jbHVkZSBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC90cmVibGVfY29tbW9uLm1rCisKKyMgUGFydGl0aW9uIHNpemUgZGVmYXVsdHMgdG8gMSBHQiAoMTAyNCBNQikgZm9yIDMyLWJpdCBwcm9kdWN0cy4gSXQgY2FuCisjIGJlIG92ZXJ3cml0dGVuIGluIHNwZWNpZmljIEJvYXJkQ29uZmlnLm1rLCBpZiBzbyBkZXNpcmVkLgorQk9BUkRfU1lTVEVNSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gMTA3Mzc0MTgyNApkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtdjUvZGV2aWNlLm1rIGIvdGFyZ2V0L2JvYXJkL3RyZWJsZV9jb21tb25fNjQubWsKc2ltaWxhcml0eSBpbmRleCA2NiUKY29weSBmcm9tIHRhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L2RldmljZS5tawpjb3B5IHRvIHRhcmdldC9ib2FyZC90cmVibGVfY29tbW9uXzY0Lm1rCmluZGV4IDdjNGFhZjIuLjBhNmViMTcgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybXY1L2RldmljZS5taworKysgYi90YXJnZXQvYm9hcmQvdHJlYmxlX2NvbW1vbl82NC5tawpAQCAtMSw1ICsxLDUgQEAKICMKLSMgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4tU291cmNlIFByb2plY3QKICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTE0LDQgKzE0LDEwIEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIwogCi1pbmNsdWRlIGJ1aWxkL3RhcmdldC9ib2FyZC9nZW5lcmljL2RldmljZS5taworaW5jbHVkZSBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC90cmVibGVfY29tbW9uLm1rCisKKyMgRW5hYmxlIDY0LWJpdHMgYmluZGVyCitUQVJHRVRfVVNFU182NF9CSVRfQklOREVSIDo9IHRydWUKKworIyBQYXJ0aXRpb24gc2l6ZSBpcyBkZWZhdWx0IDEuNUdCICgxNTM2TUIpIGZvciA2NCBiaXRzIHByb2plY3RzCitCT0FSRF9TWVNURU1JTUFHRV9QQVJUSVRJT05fU0laRSA6PSAxNjEwNjEyNzM2CmRpZmYgLS1naXQgYS90YXJnZXQvYm9hcmQvdHJlYmxlX3N5c3RlbS5wcm9wIGIvdGFyZ2V0L2JvYXJkL3RyZWJsZV9zeXN0ZW0ucHJvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjU0YWFmCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2JvYXJkL3RyZWJsZV9zeXN0ZW0ucHJvcApAQCAtMCwwICsxLDUgQEAKKyMgR1NJIGFsd2F5cyBnZW5lcmF0ZSBkZXggcHJlLW9wdCBpbiBzeXN0ZW0gaW1hZ2UKK3JvLmNwX3N5c3RlbV9vdGhlcl9vZGV4PTAKKworIyBHU0kgYWx3YXlzIGRpc2FibGVzIGFkYiBhdXRoZW50aWNhdGlvbgorcm8uYWRiLnNlY3VyZT0wCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9BbmRyb2lkUHJvZHVjdHMubWsgYi90YXJnZXQvcHJvZHVjdC9BbmRyb2lkUHJvZHVjdHMubWsKaW5kZXggMjg1ZmMzOS4uODUzMzBiMyAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvQW5kcm9pZFByb2R1Y3RzLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L0FuZHJvaWRQcm9kdWN0cy5tawpAQCAtMzYsNyArMzYsNiBAQAogUFJPRFVDVF9NQUtFRklMRVMgOj0gXAogICAgICQoTE9DQUxfRElSKS9hb3NwX2FybS5tayBcCiAgICAgJChMT0NBTF9ESVIpL2Z1bGwubWsgXAotICAgICQoTE9DQUxfRElSKS9nZW5lcmljX2FybXY1Lm1rIFwKICAgICAkKExPQ0FMX0RJUikvYW9zcF94ODYubWsgXAogICAgICQoTE9DQUxfRElSKS9mdWxsX3g4Ni5tayBcCiAgICAgJChMT0NBTF9ESVIpL2Fvc3BfbWlwcy5tayBcCkBAIC01Miw4ICs1MSwxMSBAQAogICAgICQoTE9DQUxfRElSKS9nZW5lcmljX21pcHMubWsgXAogICAgICQoTE9DQUxfRElSKS9hb3NwX2FybS5tayBcCiAgICAgJChMT0NBTF9ESVIpL2Fvc3BfYXJtX2EubWsgXAorICAgICQoTE9DQUxfRElSKS9hb3NwX2FybV9hYi5tayBcCiAgICAgJChMT0NBTF9ESVIpL2Z1bGwubWsgXAogICAgICQoTE9DQUxfRElSKS9hb3NwX3g4Ni5tayBcCisgICAgJChMT0NBTF9ESVIpL2Fvc3BfeDg2X2EubWsgXAorICAgICQoTE9DQUxfRElSKS9hb3NwX3g4Nl9hYi5tayBcCiAgICAgJChMT0NBTF9ESVIpL2Fvc3BfeDg2X2FybS5tayBcCiAgICAgJChMT0NBTF9ESVIpL2Z1bGxfeDg2Lm1rIFwKICAgICAkKExPQ0FMX0RJUikvYW9zcF9taXBzLm1rIFwKQEAgLTYzLDYgKzY1LDggQEAKICAgICAkKExPQ0FMX0RJUikvYW9zcF9hcm02NF9hYi5tayBcCiAgICAgJChMT0NBTF9ESVIpL2Fvc3BfbWlwczY0Lm1rIFwKICAgICAkKExPQ0FMX0RJUikvYW9zcF94ODZfNjQubWsgXAorICAgICQoTE9DQUxfRElSKS9hb3NwX3g4Nl82NF9hLm1rIFwKKyAgICAkKExPQ0FMX0RJUikvYW9zcF94ODZfNjRfYWIubWsgXAogICAgICQoTE9DQUxfRElSKS9zZGtfcGhvbmVfYXJtdjcubWsgXAogICAgICQoTE9DQUxfRElSKS9zZGtfcGhvbmVfeDg2Lm1rIFwKICAgICAkKExPQ0FMX0RJUikvc2RrX3Bob25lX21pcHMubWsgXApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvYW9zcF9hcm02NF9hLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYW9zcF9hcm02NF9hLm1rCmluZGV4IDQyNThmMDQuLjNjN2FmMzMgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2Fvc3BfYXJtNjRfYS5taworKysgYi90YXJnZXQvcHJvZHVjdC9hb3NwX2FybTY0X2EubWsKQEAgLTE2LDEzICsxNiwxMCBAQAogCiAjIFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTIGNhbm5vdCBiZSB1c2VkIGhlcmUgYmVjYXVzZSBzeXNwcm9wcyB3aWxsIGJlIGF0CiAjIC92ZW5kb3IvW2J1aWxkfGRlZmF1bHRdLnByb3Agd2hlbiBidWlsZCBzcGxpdCBpcyBvbi4gSW4gb3JkZXIgdG8gaGF2ZSBzeXNwcm9wcwotIyBvbiB0aGUgZ2VuZXJpYyBzeXN0ZW0gaW1hZ2UsIHBsYWNlIHRoZW0gaW4gYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm02NF9hLwotIyBzeXN0ZW0ucHJvcC4KKyMgb24gdGhlIGdlbmVyaWMgc3lzdGVtIGltYWdlLCBwbGFjZSB0aGVtIGluIGJ1aWxkL21ha2UvdGFyZ2V0L2JvYXJkLworIyB0cmVibGVfc3lzdGVtLnByb3AuCiAKLWluY2x1ZGUgYnVpbGQvbWFrZS90YXJnZXQvcHJvZHVjdC90cmVibGVfY29tbW9uLm1rCi0KLSQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3QvY29yZV82NF9iaXQubWspCi0kKGNhbGwgaW5oZXJpdC1wcm9kdWN0LCAkKFNSQ19UQVJHRVRfRElSKS9wcm9kdWN0L2Fvc3BfYmFzZV90ZWxlcGhvbnkubWspCitpbmNsdWRlIGJ1aWxkL21ha2UvdGFyZ2V0L3Byb2R1Y3QvdHJlYmxlX2NvbW1vbl82NC5tawogCiBQUk9EVUNUX05BTUUgOj0gYW9zcF9hcm02NF9hCiBQUk9EVUNUX0RFVklDRSA6PSBnZW5lcmljX2FybTY0X2EKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2Fvc3BfYXJtNjRfYWIubWsgYi90YXJnZXQvcHJvZHVjdC9hb3NwX2FybTY0X2FiLm1rCmluZGV4IGFlNTBjNDIuLmM5NmNiOTEgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2Fvc3BfYXJtNjRfYWIubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYW9zcF9hcm02NF9hYi5tawpAQCAtMTYsMTAgKzE2LDEwIEBACiAKICMgUFJPRFVDVF9QUk9QRVJUWV9PVkVSUklERVMgY2Fubm90IGJlIHVzZWQgaGVyZSBiZWNhdXNlIHN5c3Byb3BzIHdpbGwgYmUgYXQKICMgL3ZlbmRvci9bYnVpbGR8ZGVmYXVsdF0ucHJvcCB3aGVuIGJ1aWxkIHNwbGl0IGlzIG9uLiBJbiBvcmRlciB0byBoYXZlIHN5c3Byb3BzCi0jIG9uIHRoZSBnZW5lcmljIHN5c3RlbSBpbWFnZSwgcGxhY2UgdGhlbSBpbiBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC9nZW5lcmljX2FybTY0X2EvCi0jIHN5c3RlbS5wcm9wLgorIyBvbiB0aGUgZ2VuZXJpYyBzeXN0ZW0gaW1hZ2UsIHBsYWNlIHRoZW0gaW4gYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvCisjIHRyZWJsZV9zeXN0ZW0ucHJvcC4KIAotaW5jbHVkZSBidWlsZC9tYWtlL3RhcmdldC9wcm9kdWN0L3RyZWJsZV9jb21tb24ubWsKK2luY2x1ZGUgYnVpbGQvbWFrZS90YXJnZXQvcHJvZHVjdC90cmVibGVfY29tbW9uXzY0Lm1rCiAKIEFCX09UQV9VUERBVEVSIDo9IHRydWUKIEFCX09UQV9QQVJUSVRJT05TIDo9IHN5c3RlbQpAQCAtMjcsOSArMjcsNiBAQAogICAgIHVwZGF0ZV9lbmdpbmUgXAogICAgIHVwZGF0ZV92ZXJpZmllcgogCi0kKGNhbGwgaW5oZXJpdC1wcm9kdWN0LCAkKFNSQ19UQVJHRVRfRElSKS9wcm9kdWN0L2NvcmVfNjRfYml0Lm1rKQotJChjYWxsIGluaGVyaXQtcHJvZHVjdCwgJChTUkNfVEFSR0VUX0RJUikvcHJvZHVjdC9hb3NwX2Jhc2VfdGVsZXBob255Lm1rKQotCiBQUk9EVUNUX05BTUUgOj0gYW9zcF9hcm02NF9hYgogUFJPRFVDVF9ERVZJQ0UgOj0gZ2VuZXJpY19hcm02NF9hYgogUFJPRFVDVF9CUkFORCA6PSBBbmRyb2lkCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9hb3NwX2FybV9hLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYW9zcF9hcm1fYS5tawppbmRleCA2YmU4ZTgyLi4zMDYwZmE5IDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9hb3NwX2FybV9hLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2Fvc3BfYXJtX2EubWsKQEAgLTE2LDEyICsxNiwxMCBAQAogCiAjIFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTIGNhbm5vdCBiZSB1c2VkIGhlcmUgYmVjYXVzZSBzeXNwcm9wcyB3aWxsIGJlIGF0CiAjIC92ZW5kb3IvW2J1aWxkfGRlZmF1bHRdLnByb3Agd2hlbiBidWlsZCBzcGxpdCBpcyBvbi4gSW4gb3JkZXIgdG8gaGF2ZSBzeXNwcm9wcwotIyBvbiB0aGUgZ2VuZXJpYyBzeXN0ZW0gaW1hZ2UsIHBsYWNlIHRoZW0gaW4gYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm1fYS8KLSMgc3lzdGVtLnByb3AuCisjIG9uIHRoZSBnZW5lcmljIHN5c3RlbSBpbWFnZSwgcGxhY2UgdGhlbSBpbiBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC8KKyMgdHJlYmxlX3N5c3RlbS5wcm9wLgogCi1pbmNsdWRlIGJ1aWxkL21ha2UvdGFyZ2V0L3Byb2R1Y3QvdHJlYmxlX2NvbW1vbi5tawotCi0kKGNhbGwgaW5oZXJpdC1wcm9kdWN0LCAkKFNSQ19UQVJHRVRfRElSKS9wcm9kdWN0L2Fvc3BfYmFzZV90ZWxlcGhvbnkubWspCitpbmNsdWRlIGJ1aWxkL21ha2UvdGFyZ2V0L3Byb2R1Y3QvdHJlYmxlX2NvbW1vbl8zMi5tawogCiBQUk9EVUNUX05BTUUgOj0gYW9zcF9hcm1fYQogUFJPRFVDVF9ERVZJQ0UgOj0gZ2VuZXJpY19hcm1fYQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvYW9zcF9hcm1fYWIubWsgYi90YXJnZXQvcHJvZHVjdC9hb3NwX2FybV9hYi5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGIyZjk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYW9zcF9hcm1fYWIubWsKQEAgLTAsMCArMSwzMyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3Blbi1Tb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIyBQUk9EVUNUX1BST1BFUlRZX09WRVJSSURFUyBjYW5ub3QgYmUgdXNlZCBoZXJlIGJlY2F1c2Ugc3lzcHJvcHMgd2lsbCBiZSBhdAorIyAvdmVuZG9yL1tidWlsZHxkZWZhdWx0XS5wcm9wIHdoZW4gYnVpbGQgc3BsaXQgaXMgb24uIEluIG9yZGVyIHRvIGhhdmUgc3lzcHJvcHMKKyMgb24gdGhlIGdlbmVyaWMgc3lzdGVtIGltYWdlLCBwbGFjZSB0aGVtIGluIGJ1aWxkL21ha2UvdGFyZ2V0L2JvYXJkLworIyB0cmVibGVfc3lzdGVtLnByb3AuCisKK2luY2x1ZGUgYnVpbGQvbWFrZS90YXJnZXQvcHJvZHVjdC90cmVibGVfY29tbW9uXzMyLm1rCisKK0FCX09UQV9VUERBVEVSIDo9IHRydWUKK0FCX09UQV9QQVJUSVRJT05TIDo9IHN5c3RlbQorUFJPRFVDVF9QQUNLQUdFUyArPSBcCisgICAgdXBkYXRlX2VuZ2luZSBcCisgICAgdXBkYXRlX3ZlcmlmaWVyCisKK1BST0RVQ1RfTkFNRSA6PSBhb3NwX2FybV9hYgorUFJPRFVDVF9ERVZJQ0UgOj0gZ2VuZXJpY19hcm1fYWIKK1BST0RVQ1RfQlJBTkQgOj0gQW5kcm9pZAorUFJPRFVDVF9NT0RFTCA6PSBBT1NQIG9uIEFSTTMyCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Ni5tayBiL3RhcmdldC9wcm9kdWN0L2Fvc3BfeDg2Lm1rCmluZGV4IDAzMjAzY2UuLjk2YzllMzMgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2Fvc3BfeDg2Lm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2Fvc3BfeDg2Lm1rCkBAIC0yNCw3ICsyNCw3IEBACiBQUk9EVUNUX0NPUFlfRklMRVMgKz0gXAogICAgIGRldmVsb3BtZW50L3N5cy1pbWcvYWR2YW5jZWRGZWF0dXJlcy5pbmk6YWR2YW5jZWRGZWF0dXJlcy5pbmkgXAogICAgIGRldmljZS9nZW5lcmljL2dvbGRmaXNoL2RhdGEvZXRjL2VuY3J5cHRpb25rZXkuaW1nOmVuY3J5cHRpb25rZXkuaW1nIFwKLSAgICBwcmVidWlsdHMvcWVtdS1rZXJuZWwveDg2LzMuMTgva2VybmVsLXFlbXUyOmtlcm5lbC1yYW5jaHUKKyAgICBwcmVidWlsdHMvcWVtdS1rZXJuZWwveDg2XzY0LzQuNC9rZXJuZWwtcWVtdTI6a2VybmVsLXJhbmNodS02NAogCiBpbmNsdWRlICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3QvZnVsbF94ODYubWsKIApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvYW9zcF94ODZfNjQubWsgYi90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Nl82NC5tawppbmRleCA2OTNiZGFmLi4wODZhNzZmIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Nl82NC5taworKysgYi90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Nl82NC5tawpAQCAtMjUsNyArMjUsNyBAQAogUFJPRFVDVF9DT1BZX0ZJTEVTICs9IFwKICAgICBkZXZlbG9wbWVudC9zeXMtaW1nL2FkdmFuY2VkRmVhdHVyZXMuaW5pOmFkdmFuY2VkRmVhdHVyZXMuaW5pIFwKICAgICBkZXZpY2UvZ2VuZXJpYy9nb2xkZmlzaC9kYXRhL2V0Yy9lbmNyeXB0aW9ua2V5LmltZzplbmNyeXB0aW9ua2V5LmltZyBcCi0gICAgcHJlYnVpbHRzL3FlbXUta2VybmVsL3g4Nl82NC8zLjE4L2tlcm5lbC1xZW11MjprZXJuZWwtcmFuY2h1CisgICAgcHJlYnVpbHRzL3FlbXUta2VybmVsL3g4Nl82NC80LjQva2VybmVsLXFlbXUyOmtlcm5lbC1yYW5jaHUKIAogJChjYWxsIGluaGVyaXQtcHJvZHVjdCwgJChTUkNfVEFSR0VUX0RJUikvcHJvZHVjdC9jb3JlXzY0X2JpdC5taykKICQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3QvYW9zcF9iYXNlX3RlbGVwaG9ueS5taykKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2Fvc3BfeDg2XzY0X2EubWsgYi90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Nl82NF9hLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZmI3NDAKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Nl82NF9hLm1rCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4tU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMgUFJPRFVDVF9QUk9QRVJUWV9PVkVSUklERVMgY2Fubm90IGJlIHVzZWQgaGVyZSBiZWNhdXNlIHN5c3Byb3BzIHdpbGwgYmUgYXQKKyMgL3ZlbmRvci9bYnVpbGR8ZGVmYXVsdF0ucHJvcCB3aGVuIGJ1aWxkIHNwbGl0IGlzIG9uLiBJbiBvcmRlciB0byBoYXZlIHN5c3Byb3BzCisjIG9uIHRoZSBnZW5lcmljIHN5c3RlbSBpbWFnZSwgcGxhY2UgdGhlbSBpbiBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC8KKyMgdHJlYmxlX3N5c3RlbS5wcm9wLgorCitpbmNsdWRlIGJ1aWxkL21ha2UvdGFyZ2V0L3Byb2R1Y3QvdHJlYmxlX2NvbW1vbl82NC5taworCitQUk9EVUNUX05BTUUgOj0gYW9zcF94ODZfNjRfYQorUFJPRFVDVF9ERVZJQ0UgOj0gZ2VuZXJpY194ODZfNjRfYQorUFJPRFVDVF9CUkFORCA6PSBBbmRyb2lkCitQUk9EVUNUX01PREVMIDo9IEFPU1Agb24geDg2XzY0CmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Nl82NF9hYi5tayBiL3RhcmdldC9wcm9kdWN0L2Fvc3BfeDg2XzY0X2FiLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTBkYzUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Nl82NF9hYi5tawpAQCAtMCwwICsxLDMzIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjIFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTIGNhbm5vdCBiZSB1c2VkIGhlcmUgYmVjYXVzZSBzeXNwcm9wcyB3aWxsIGJlIGF0CisjIC92ZW5kb3IvW2J1aWxkfGRlZmF1bHRdLnByb3Agd2hlbiBidWlsZCBzcGxpdCBpcyBvbi4gSW4gb3JkZXIgdG8gaGF2ZSBzeXNwcm9wcworIyBvbiB0aGUgZ2VuZXJpYyBzeXN0ZW0gaW1hZ2UsIHBsYWNlIHRoZW0gaW4gYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvCisjIHRyZWJsZV9zeXN0ZW0ucHJvcC4KKworaW5jbHVkZSBidWlsZC9tYWtlL3RhcmdldC9wcm9kdWN0L3RyZWJsZV9jb21tb25fNjQubWsKKworQUJfT1RBX1VQREFURVIgOj0gdHJ1ZQorQUJfT1RBX1BBUlRJVElPTlMgOj0gc3lzdGVtCitQUk9EVUNUX1BBQ0tBR0VTICs9IFwKKyAgICB1cGRhdGVfZW5naW5lIFwKKyAgICB1cGRhdGVfdmVyaWZpZXIKKworUFJPRFVDVF9OQU1FIDo9IGFvc3BfeDg2XzY0X2FiCitQUk9EVUNUX0RFVklDRSA6PSBnZW5lcmljX3g4Nl82NF9hYgorUFJPRFVDVF9CUkFORCA6PSBBbmRyb2lkCitQUk9EVUNUX01PREVMIDo9IEFPU1Agb24geDg2XzY0CmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Nl9hLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYW9zcF94ODZfYS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWQyOTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYW9zcF94ODZfYS5tawpAQCAtMCwwICsxLDI3IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjIFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTIGNhbm5vdCBiZSB1c2VkIGhlcmUgYmVjYXVzZSBzeXNwcm9wcyB3aWxsIGJlIGF0CisjIC92ZW5kb3IvW2J1aWxkfGRlZmF1bHRdLnByb3Agd2hlbiBidWlsZCBzcGxpdCBpcyBvbi4gSW4gb3JkZXIgdG8gaGF2ZSBzeXNwcm9wcworIyBvbiB0aGUgZ2VuZXJpYyBzeXN0ZW0gaW1hZ2UsIHBsYWNlIHRoZW0gaW4gYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvCisjIHRyZWJsZV9zeXN0ZW0ucHJvcC4KKworaW5jbHVkZSBidWlsZC9tYWtlL3RhcmdldC9wcm9kdWN0L3RyZWJsZV9jb21tb25fMzIubWsKKworUFJPRFVDVF9OQU1FIDo9IGFvc3BfeDg2X2EKK1BST0RVQ1RfREVWSUNFIDo9IGdlbmVyaWNfeDg2X2EKK1BST0RVQ1RfQlJBTkQgOj0gQW5kcm9pZAorUFJPRFVDVF9NT0RFTCA6PSBBT1NQIG9uIHg4NgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvYW9zcF94ODZfYWIubWsgYi90YXJnZXQvcHJvZHVjdC9hb3NwX3g4Nl9hYi5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDRhNGRhCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYW9zcF94ODZfYWIubWsKQEAgLTAsMCArMSwzMyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3Blbi1Tb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIyBQUk9EVUNUX1BST1BFUlRZX09WRVJSSURFUyBjYW5ub3QgYmUgdXNlZCBoZXJlIGJlY2F1c2Ugc3lzcHJvcHMgd2lsbCBiZSBhdAorIyAvdmVuZG9yL1tidWlsZHxkZWZhdWx0XS5wcm9wIHdoZW4gYnVpbGQgc3BsaXQgaXMgb24uIEluIG9yZGVyIHRvIGhhdmUgc3lzcHJvcHMKKyMgb24gdGhlIGdlbmVyaWMgc3lzdGVtIGltYWdlLCBwbGFjZSB0aGVtIGluIGJ1aWxkL21ha2UvdGFyZ2V0L2JvYXJkLworIyB0cmVibGVfc3lzdGVtLnByb3AuCisKK2luY2x1ZGUgYnVpbGQvbWFrZS90YXJnZXQvcHJvZHVjdC90cmVibGVfY29tbW9uXzMyLm1rCisKK0FCX09UQV9VUERBVEVSIDo9IHRydWUKK0FCX09UQV9QQVJUSVRJT05TIDo9IHN5c3RlbQorUFJPRFVDVF9QQUNLQUdFUyArPSBcCisgICAgdXBkYXRlX2VuZ2luZSBcCisgICAgdXBkYXRlX3ZlcmlmaWVyCisKK1BST0RVQ1RfTkFNRSA6PSBhb3NwX3g4Nl9hYgorUFJPRFVDVF9ERVZJQ0UgOj0gZ2VuZXJpY194ODZfYWIKK1BST0RVQ1RfQlJBTkQgOj0gQW5kcm9pZAorUFJPRFVDVF9NT0RFTCA6PSBBT1NQIG9uIHg4NgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZS5tayBiL3RhcmdldC9wcm9kdWN0L2Jhc2UubWsKaW5kZXggYTE4MmYxOC4uMTRmZjFjMiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZS5taworKysgYi90YXJnZXQvcHJvZHVjdC9iYXNlLm1rCkBAIC0zMSw2ICszMSw3IEBACiAgICAgYml0IFwKICAgICBibGtpZCBcCiAgICAgYm1nciBcCisgICAgYnBmbG9hZGVyIFwKICAgICBidWdyZXBvcnQgXAogICAgIGJ1Z3JlcG9ydHogXAogICAgIGNhbWVyYXNlcnZlciBcCkBAIC03Niw4ICs3Nyw2IEBACiAgICAgbGlibmV0bGluayBcCiAgICAgbGlibmV0dXRpbHMgXAogICAgIGxpYnBkZml1bSBcCi0gICAgbGlicmFkaW8gXAotICAgIGxpYnJhZGlvc2VydmljZSBcCiAgICAgbGlicmFkaW9fbWV0YWRhdGEgXAogICAgIGxpYnJlZmVyZW5jZS1yaWwgXAogICAgIGxpYnJldmVyYndyYXBwZXIgXApAQCAtMTE2LDYgKzExNSw3IEBACiAgICAgbXRwZCBcCiAgICAgbmRjIFwKICAgICBuZXRkIFwKKyAgICBwZXJmZXR0byBcCiAgICAgcGluZyBcCiAgICAgcGluZzYgXAogICAgIHBsYXRmb3JtLnhtbCBcCkBAIC0xMzQsMTIgKzEzNCwxNSBAQAogICAgIHN2YyBcCiAgICAgdGMgXAogICAgIHRlbGVjb20gXAorICAgIHRyYWNlZCBcCisgICAgdHJhY2VkX3Byb2JlcyBcCiAgICAgdmRjIFwKICAgICB2b2xkIFwKICAgICB3bQogCiAjIEVzc2VudGlhbCBIQUwgbW9kdWxlcwogUFJPRFVDVF9QQUNLQUdFUyArPSBcCisgICAgYW5kcm9pZC5oYXJkd2FyZS5jYXNAMS4wLXNlcnZpY2UgXAogICAgIGFuZHJvaWQuaGFyZHdhcmUubWVkaWEub214QDEuMC1zZXJ2aWNlCiAKICMgWE1MIHNjaGVtYSBmaWxlcwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvY29yZS5tayBiL3RhcmdldC9wcm9kdWN0L2NvcmUubWsKaW5kZXggY2FiOGQ5Ny4uYmJjMmI3NSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvY29yZS5taworKysgYi90YXJnZXQvcHJvZHVjdC9jb3JlLm1rCkBAIC01Niw2ICs1Niw3IEBACiAgICAgU3RvcmFnZU1hbmFnZXIgXAogICAgIFRlbGVjb20gXAogICAgIFRlbGVTZXJ2aWNlIFwKKyAgICBUcmFjZXVyIFwKICAgICBWcG5EaWFsb2dzIFwKICAgICB2ciBcCiAgICAgTW1zU2VydmljZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvY29yZV82NF9iaXRfb25seS5tayBiL3RhcmdldC9wcm9kdWN0L2NvcmVfNjRfYml0X29ubHkubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkMzBmNQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9wcm9kdWN0L2NvcmVfNjRfYml0X29ubHkubWsKQEAgLTAsMCArMSwzMCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIyBJbmhlcml0IGZyb20gdGhpcyBwcm9kdWN0IGZvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBvbmx5IDY0LWJpdCBhcHBzIHVzaW5nOgorIyAkKGNhbGwgaW5oZXJpdC1wcm9kdWN0LCAkKFNSQ19UQVJHRVRfRElSKS9wcm9kdWN0L2NvcmVfNjRfYml0X29ubHkubWspCisjIFRoZSBpbmhlcml0YW5jZSBmb3IgdGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSBpbmhlcml0YW5jZSBjaGFpbiB0aGF0IGxlYWRzCisjIHRvIGNvcmVfbWluaW1hbC5tay4KKworIyBDb3B5IHRoZSA2NC1iaXQgenlnb3RlIHN0YXJ0dXAgc2NyaXB0CitQUk9EVUNUX0NPUFlfRklMRVMgKz0gc3lzdGVtL2NvcmUvcm9vdGRpci9pbml0Lnp5Z290ZTY0LnJjOnJvb3QvaW5pdC56eWdvdGU2NC5yYworCisjIFNldCB0aGUgenlnb3RlIHByb3BlcnR5IHRvIHNlbGVjdCB0aGUgNjQtYml0IHNjcmlwdC4KKyMgVGhpcyBsaW5lIG11c3QgYmUgcGFyc2VkIGJlZm9yZSB0aGUgb25lIGluIGNvcmVfbWluaW1hbC5taworUFJPRFVDVF9ERUZBVUxUX1BST1BFUlRZX09WRVJSSURFUyArPSByby56eWdvdGU9enlnb3RlNjQKKworVEFSR0VUX1NVUFBPUlRTXzMyX0JJVF9BUFBTIDo9IGZhbHNlCitUQVJHRVRfU1VQUE9SVFNfNjRfQklUX0FQUFMgOj0gdHJ1ZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvY29yZV9iYXNlLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvY29yZV9iYXNlLm1rCmluZGV4IDE1MWU4ZGUuLjdkYzAwMTAgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2NvcmVfYmFzZS5taworKysgYi90YXJnZXQvcHJvZHVjdC9jb3JlX2Jhc2UubWsKQEAgLTYyLDkgKzYyLDQgQEAKICAgICBtZG5zZCBcCiAgICAgcmVxdWVzdHN5bmMgXAogCi0jIFdpZmkgbW9kdWxlcwotUFJPRFVDVF9QQUNLQUdFUyArPSBcCi0gICAgd2lmaS1zZXJ2aWNlIFwKLSAgICB3aWZpY29uZCBcCi0KICQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3QvY29yZV9taW5pbWFsLm1rKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvY29yZV9taW5pbWFsLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvY29yZV9taW5pbWFsLm1rCmluZGV4IDA1ZTNiNDUuLjE2NTk5Y2IgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2NvcmVfbWluaW1hbC5taworKysgYi90YXJnZXQvcHJvZHVjdC9jb3JlX21pbmltYWwubWsKQEAgLTcxLDYgKzcxLDcgQEAKICAgICBsaWJmaWx0ZXJmdyBcCiAgICAgbGlia2V5c3RvcmUgXAogICAgIGxpYmdhdGVrZWVwZXIgXAorICAgIGxpYm5ldXJhbG5ldHdvcmtzIFwKICAgICBsaWJ3ZWJ2aWV3Y2hyb21pdW1fbG9hZGVyIFwKICAgICBsaWJ3ZWJ2aWV3Y2hyb21pdW1fcGxhdF9zdXBwb3J0IFwKICAgICBsaWJ3aWxoZWxtIFwKQEAgLTg0LDYgKzg1LDcgQEAKICAgICB0ZWxlcGhvbnktY29tbW9uIFwKICAgICB1aWF1dG9tYXRvciBcCiAgICAgdW5jcnlwdCBcCisgICAgdm5ka19zbmFwc2hvdF9wYWNrYWdlIFwKICAgICB2b2lwLWNvbW1vbiBcCiAgICAgd2VidmlldyBcCiAgICAgd2Vidmlld196eWdvdGUgXApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvY29yZV90aW55Lm1rIGIvdGFyZ2V0L3Byb2R1Y3QvY29yZV90aW55Lm1rCmluZGV4IGM4NmI4NjIuLjEyMmY1YzcgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2NvcmVfdGlueS5taworKysgYi90YXJnZXQvcHJvZHVjdC9jb3JlX3RpbnkubWsKQEAgLTU5LDYgKzU5LDcgQEAKICAgICBpcHRhYmxlcyBcCiAgICAgZ2F0ZWtlZXBlcmQgXAogICAgIGtleXN0b3JlIFwKKyAgICBsZC5jb25maWcudHh0IFwKICAgICBsZC5tYyBcCiAgICAgbGliYWF1ZGlvIFwKICAgICBsaWJPcGVuTUFYQUwgXApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZW1iZWRkZWQubWsgYi90YXJnZXQvcHJvZHVjdC9lbWJlZGRlZC5tawppbmRleCA5ZTY4NGY3Li4zZjFkNmRmIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9lbWJlZGRlZC5taworKysgYi90YXJnZXQvcHJvZHVjdC9lbWJlZGRlZC5tawpAQCAtMjAsMTAgKzIwLDEzIEBACiBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKICAgICBhZGIgXAogICAgIGFkYmQgXAotICAgIGFuZHJvaWQuaGFyZHdhcmUuY29uZmlnc3RvcmVAMS4xLXNlcnZpY2UgXAorICAgIHVzYmQgXAorICAgIGFuZHJvaWQuaGFyZHdhcmUuY29uZmlnc3RvcmVAMS4wLXNlcnZpY2UgXAogICAgIGFuZHJvaWQuaGlkbC5hbGxvY2F0b3JAMS4wLXNlcnZpY2UgXAogICAgIGFuZHJvaWQuaGlkbC5tZW1vcnlAMS4wLWltcGwgXAorICAgIGFuZHJvaWQuaGlkbC5tZW1vcnlAMS4wLWltcGwudmVuZG9yIFwKICAgICBhdHJhY2UgXAorICAgIGJsYW5rX3NjcmVlbiBcCiAgICAgYm9vdGFuaW1hdGlvbiBcCiAgICAgYm9vdHN0YXQgXAogICAgIGNoYXJnZXIgXApAQCAtNDgsNiArNTEsNyBAQAogICAgIGxpYmJpbmRlciBcCiAgICAgbGliYyBcCiAgICAgbGliY19tYWxsb2NfZGVidWcgXAorICAgIGxpYmNfbWFsbG9jX2hvb2tzIFwKICAgICBsaWJjdXRpbHMgXAogICAgIGxpYmRsIFwKICAgICBsaWJndWkgXApAQCAtNzYsMTQgKzgwLDE4IEBACiAgICAgc2hlbGxfYW5kX3V0aWxpdGllcyBcCiAgICAgc3RvcmFnZWQgXAogICAgIHN1cmZhY2VmbGluZ2VyIFwKKyAgICB0aGVybWFsc2VydmljZWQgXAogICAgIHRvbWJzdG9uZWQgXAogICAgIHR6ZGF0YWNoZWNrIFwKICAgICB2bmRzZXJ2aWNlIFwKICAgICB2bmRzZXJ2aWNlbWFuYWdlciBcCi0gICAgY29tcGF0aWJpbGl0eV9tYXRyaXgueG1sIFwKLSAgICBtYW5pZmVzdC54bWwgXAotICAgIHN5c3RlbV9tYW5pZmVzdC54bWwgXAotICAgIHN5c3RlbV9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwgXAorCisjIFZJTlRGIGRhdGEKK1BST0RVQ1RfUEFDS0FHRVMgKz0gXAorICAgIGRldmljZV9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwgXAorICAgIGRldmljZV9tYW5pZmVzdC54bWwgXAorICAgIGZyYW1ld29ya19tYW5pZmVzdC54bWwgXAorICAgIGZyYW1ld29ya19jb21wYXRpYmlsaXR5X21hdHJpeC54bWwgXAogCiAjIFNFTGludXggcGFja2FnZXMgYXJlIGFkZGVkIGFzIGRlcGVuZGVuY2llcyBvZiB0aGUgc2VsaW51eF9wb2xpY3kKICMgcGhvbnkgcGFja2FnZS4KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2VtdWxhdG9yLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvZW11bGF0b3IubWsKaW5kZXggNTgyNDVjYi4uMGYzM2YzOCAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZW11bGF0b3IubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZW11bGF0b3IubWsKQEAgLTI2LDYgKzI2LDcgQEAKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIGVnbC5jZmcgXAogICAgIGdyYWxsb2MuZ29sZGZpc2ggXAorICAgIGdyYWxsb2MuZ29sZGZpc2guZGVmYXVsdCBcCiAgICAgZ3JhbGxvYy5yYW5jaHUgXAogICAgIGxpYkdMRVN2MV9DTV9lbXVsYXRpb24gXAogICAgIGxpYl9yZW5kZXJDb250cm9sX2VuYyBcCkBAIC0zNSw2ICszNiw5IEBACiAgICAgbGliT3BlbmdsU3lzdGVtQ29tbW9uIFwKICAgICBsaWJHTEVTdjJfZW11bGF0aW9uIFwKICAgICBsaWJHTEVTdjFfZW5jIFwKKyAgICBsaWJFR0xfc3dpZnRzaGFkZXIgXAorICAgIGxpYkdMRVN2MV9DTV9zd2lmdHNoYWRlciBcCisgICAgbGliR0xFU3YyX3N3aWZ0c2hhZGVyIFwKICAgICBxZW11LXByb3BzIFwKICAgICBjYW1lcmEuZ29sZGZpc2ggXAogICAgIGNhbWVyYS5nb2xkZmlzaC5qcGVnIFwKQEAgLTEyNywzICsxMzEsOSBAQAogUFJPRFVDVF9DSEFSQUNURVJJU1RJQ1MgOj0gZW11bGF0b3IKIAogUFJPRFVDVF9GVUxMX1RSRUJMRV9PVkVSUklERSA6PSB0cnVlCisKKworI3dhdGNoZG9nIHRpZ2dlcnMgcmVib290IGJlY2F1c2UgbG9jYXRpb24gc2VydmljZSBpcyBub3QKKyNyZXNwb25kaW5nLCBkaXNibGUgaXQgZm9yIG5vdworUFJPRFVDVF9ERUZBVUxUX1BST1BFUlRZX09WRVJSSURFUyArPSBcCitjb25maWcuZGlzYWJsZV9sb2NhdGlvbj10cnVlCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9mdWxsX2Jhc2VfdGVsZXBob255Lm1rIGIvdGFyZ2V0L3Byb2R1Y3QvZnVsbF9iYXNlX3RlbGVwaG9ueS5tawppbmRleCAzNzVjNjc5Li5hZjQwOTdkIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9mdWxsX2Jhc2VfdGVsZXBob255Lm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2Z1bGxfYmFzZV90ZWxlcGhvbnkubWsKQEAgLTI0LDcgKzI0LDcgQEAKICAgICByby5jb20uYW5kcm9pZC5kYXRhcm9hbWluZz10cnVlCiAKIFBST0RVQ1RfQ09QWV9GSUxFUyA6PSBcCi0gICAgZGV2aWNlL2dlbmVyaWMvZ29sZGZpc2gvZGF0YS9ldGMvYXBucy1jb25mLnhtbDpzeXN0ZW0vZXRjL2FwbnMtY29uZi54bWwgXAorICAgIGRldmljZS9zYW1wbGUvZXRjL2FwbnMtZnVsbC1jb25mLnhtbDpzeXN0ZW0vZXRjL2FwbnMtY29uZi54bWwgXAogICAgIGZyYW1ld29ya3MvbmF0aXZlL2RhdGEvZXRjL2hhbmRoZWxkX2NvcmVfaGFyZHdhcmUueG1sOiQoVEFSR0VUX0NPUFlfT1VUX1ZFTkRPUikvZXRjL3Blcm1pc3Npb25zL2hhbmRoZWxkX2NvcmVfaGFyZHdhcmUueG1sCiAKICQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3QvYW9zcF9iYXNlLm1rKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtdjUvZGV2aWNlLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvZ29fZGVmYXVsdHMubWsKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gdGFyZ2V0L2JvYXJkL2dlbmVyaWNfYXJtdjUvZGV2aWNlLm1rCnJlbmFtZSB0byB0YXJnZXQvcHJvZHVjdC9nb19kZWZhdWx0cy5tawppbmRleCA3YzRhYWYyLi5mYWExODUyIDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvZ2VuZXJpY19hcm12NS9kZXZpY2UubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ29fZGVmYXVsdHMubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCw0ICsxNCw2IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIwogCi1pbmNsdWRlIGJ1aWxkL3RhcmdldC9ib2FyZC9nZW5lcmljL2RldmljZS5taworIyBJbmhlcml0IGNvbW1vbiBBbmRyb2lkIEdvIGRlZmF1bHRzLgorJChjYWxsIGluaGVyaXQtcHJvZHVjdCwgYnVpbGQvdGFyZ2V0L3Byb2R1Y3QvZ29fZGVmYXVsdHNfY29tbW9uLm1rKQorCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9nb19kZWZhdWx0c181MTIubWsgYi90YXJnZXQvcHJvZHVjdC9nb19kZWZhdWx0c181MTIubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhYjI5YgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzXzUxMi5tawpAQCAtMCwwICsxLDI4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjIEluaGVyaXQgY29tbW9uIEFuZHJvaWQgR28gZGVmYXVsdHMuCiskKGNhbGwgaW5oZXJpdC1wcm9kdWN0LCBidWlsZC90YXJnZXQvcHJvZHVjdC9nb19kZWZhdWx0c19jb21tb24ubWspCisKKyMgNTEyTUIgc3BlY2lmaWMgcHJvcGVydGllcy4KKworIyBsbWtkIGNhbiBraWxsIG1vcmUgbm93LgorUFJPRFVDVF9QUk9QRVJUWV9PVkVSUklERVMgKz0gXAorICAgICByby5sbWsubWVkaXVtPTcwMCBcCisKKyMgbWFkdmlzZSByYW5kb20gaW4gQVJUIHRvIHJlZHVjZSBwYWdlIGNhY2hlIHRocmFzaGluZy4KK1BST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTICs9IFwKKyAgICAgZGFsdmlrLnZtLm1hZHZpc2UtcmFuZG9tPXRydWUKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzX2NvbW1vbi5tayBiL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzX2NvbW1vbi5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmI5NTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ29fZGVmYXVsdHNfY29tbW9uLm1rCkBAIC0wLDAgKzEsNTcgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMgU2V0cyBBbmRyb2lkIEdvIHJlY29tbWVuZGVkIGRlZmF1bHQgdmFsdWVzIGZvciBwcm9wcmV0aWVzLgorCisjIFNldCBsb3dyYW0gb3B0aW9ucworUFJPRFVDVF9QUk9QRVJUWV9PVkVSUklERVMgKz0gXAorICAgICByby5jb25maWcubG93X3JhbT10cnVlIFwKKyAgICAgcm8ubG1rLmNyaXRpY2FsX3VwZ3JhZGU9dHJ1ZSBcCisgICAgIHJvLmxtay51cGdyYWRlX3ByZXNzdXJlPTQwCisKKyMgc2V0IHRocmVzaG9sZCB0byBmaWx0ZXIgdW51c2VkIGFwcHMKK1BST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTICs9IFwKKyAgICAgcG0uZGV4b3B0LmRvd25ncmFkZV9hZnRlcl9pbmFjdGl2ZV9kYXlzPTEwCisKKworIyBTcGVlZCBwcm9maWxlIHNlcnZpY2VzIGFuZCB3aWZpLXNlcnZpY2UgdG8gcmVkdWNlIFJBTSBhbmQgc3RvcmFnZS4KK1BST0RVQ1RfU1lTVEVNX1NFUlZFUl9DT01QSUxFUl9GSUxURVIgOj0gc3BlZWQtcHJvZmlsZQorCisjIEFsd2F5cyBwcmVvcHQgZXh0cmFjdGVkIEFQS3MgdG8gcHJldmVudCBleHRyYWN0aW5nIG91dCBvZiB0aGUgQVBLIGZvciBnbXMKKyMgbW9kdWxlcy4KK1BST0RVQ1RfQUxXQVlTX1BSRU9QVF9FWFRSQUNURURfQVBLIDo9IHRydWUKKworIyBVc2UgYSBwcm9maWxlIGJhc2VkIGJvb3QgaW1hZ2UgZm9yIHRoaXMgZGV2aWNlLiBOb3RlIHRoYXQgdGhpcyBpcyBjdXJyZW50bHkgYQorIyBnZW5lcmljIHByb2ZpbGUgYW5kIG5vdCBBbmRyb2lkIEdvIG9wdGltaXplZC4KK1BST0RVQ1RfVVNFX1BST0ZJTEVfRk9SX0JPT1RfSU1BR0UgOj0gdHJ1ZQorUFJPRFVDVF9ERVhfUFJFT1BUX0JPT1RfSU1BR0VfUFJPRklMRV9MT0NBVElPTiA6PSBmcmFtZXdvcmtzL2Jhc2UvY29uZmlnL2Jvb3QtaW1hZ2UtcHJvZmlsZS50eHQKKworIyBzZXQgdGhlIGNvbXBpbGVyIGZpbHRlciBmb3Igc2hhcmVkIGFwa3MgdG8gcXVpY2tlbi4KKyMgUmF0aW9uYWxlOiBzcGVlZCBoYXMgYSBsb3Qgb2YgZGV4IGNvZGUgZXhwYW5zaW9uLCBpdCB1c2VzIG1vcmUgcmFtIGFuZCBzcGFjZQorIyBjb21wYXJlZCB0byBxdWlja2VuLiBVc2luZyBxdWlja2VuIGZvciBzaGFyZWQgQVBLcyBvbiBHbyBkZXZpY2VzIG1heSBzYXZlIFJBTS4KKyMgTm90ZSB0aGF0IHRoaXMgaXMgYSB0cmFkZS1vZmY6IGhlcmUgd2UgdHJhZGUgY2xlYW4gcGFnZXMgZm9yIGRpcnR5IHBhZ2VzLAorIyBleHRyYSBjcHUgYW5kIGJhdHRlcnkuIFRoYXQncyBiZWNhdXNlIHRoZSBxdWlja2VuIGZpbGVzIHdpbGwgYmUgaml0LWVkIGluIGFsbAorIyB0aGUgcHJvY2Vzc2VzIHRoYXQgbG9hZCBvZiBzaGFyZWQgYXBrIGFuZCB0aGUgY29kZSBjYWNoZSBpcyBub3Qgc2hhcmVkLgorIyBTb21lIG5vdGFibGUgYXBwcyB0aGF0IHdpbGwgYmUgYWZmZWN0ZWQgYnkgdGhpcyBhcmUgZ21zIGFuZCBjaHJvbWUuCisjIGIvNjU1OTE1OTUuCitQUk9EVUNUX1BST1BFUlRZX09WRVJSSURFUyArPSBcCisgICAgIHBtLmRleG9wdC5zaGFyZWQ9cXVpY2tlbgorCisjIERlZmF1bHQgaGVhcCBzaXplcy4gQWxsb3cgdXAgdG8gMjU2bSBmb3IgbGFyZ2UgaGVhcHMgdG8gbWFrZSBzdXJlIGEgc2luZ2xlIGFwcAorIyBkb2Vzbid0IHRha2UgYWxsIG9mIHRoZSBSQU0uCitQUk9EVUNUX1BST1BFUlRZX09WRVJSSURFUyArPSBkYWx2aWsudm0uaGVhcGdyb3d0aGxpbWl0PTEyOG0KK1BST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTICs9IGRhbHZpay52bS5oZWFwc2l6ZT0yNTZtCisKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2xhbmd1YWdlc19mdWxsLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvbGFuZ3VhZ2VzX2Z1bGwubWsKaW5kZXggMzZjM2RlOC4uODQ2Y2Q3MCAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvbGFuZ3VhZ2VzX2Z1bGwubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvbGFuZ3VhZ2VzX2Z1bGwubWsKQEAgLTE1LDEwICsxNSw5MSBAQAogIwogCiAjIFRoaXMgaXMgYSBidWlsZCBjb25maWd1cmF0aW9uIHRoYXQganVzdCBjb250YWlucyBhIGxpc3Qgb2YgbGFuZ3VhZ2VzLgotIyBJdCBoZWxwcyBpbiBzaXR1YXRpb25zIHdoZXJlIGxhbmd1YWdlcyBtdXN0IGNvbWUgZmlyc3QgaW4gdGhlIGxpc3QsCi0jIG1vc3RseSBiZWNhdXNlIHNjcmVlbiBkZW5zaXRpZXMgaW50ZXJmZXJlIHdpdGggdGhlIGxpc3Qgb2YgbG9jYWxlcyBhbmQKLSMgdGhlIHN5c3RlbSBtaXNiZWhhdmVzIHdoZW4gYSBkZW5zaXR5IGlzIHRoZSBmaXJzdCBsb2NhbGUuCi0KLSMgVGhlc2UgYXJlIGFsbCB0aGUgbG9jYWxlcyB0aGF0IGhhdmUgdHJhbnNsYXRpb25zIGFuZCBhcmUgZGlzcGxheWFibGUKLSMgYnkgVGV4dFZpZXcgaW4gdGhpcyBicmFuY2guCi1QUk9EVUNUX0xPQ0FMRVMgOj0gZW5fVVMgZW5fQVUgZW5fSU4gZnJfRlIgaXRfSVQgZXNfRVMgZXRfRUUgZGVfREUgbmxfTkwgY3NfQ1ogcGxfUEwgamFfSlAgemhfVFcgemhfQ04gemhfSEsgcnVfUlUga29fS1IgbmJfTk8gZXNfVVMgZGFfREsgZWxfR1IgdHJfVFIgcHRfUFQgcHRfQlIgc3ZfU0UgYmdfQkcgY2FfRVMgZW5fR0IgZmlfRkkgaGlfSU4gaHJfSFIgaHVfSFUgaW5fSUQgaXdfSUwgbHRfTFQgbHZfTFYgcm9fUk8gc2tfU0sgc2xfU0kgc3JfUlMgdWtfVUEgdmlfVk4gdGxfUEggYXJfRUcgZmFfSVIgdGhfVEggc3dfVFogbXNfTVkgYWZfWkEgenVfWkEgYW1fRVQgZW5fWEEgYXJfWEIgZnJfQ0Ega21fS0ggbG9fTEEgbmVfTlAgc2lfTEsgbW5fTU4gaHlfQU0gYXpfQVoga2FfR0UgbXlfTU0gbXJfSU4gbWxfSU4gaXNfSVMgbWtfTUsga3lfS0cgZXVfRVMgZ2xfRVMgYm5fQkQgdGFfSU4ga25fSU4gdGVfSU4gdXpfVVogdXJfUEsga2tfS1ogc3FfQUwgZ3VfSU4gcGFfSU4gYmVfQlkgYnNfQkEgc3JfTGF0bl9SUworIworIyBUaGVzZSBhcmUgYWxsIHRoZSBsb2NhbGVzIHRoYXQgaGF2ZSB0cmFuc2xhdGlvbnMuCitQUk9EVUNUX0xPQ0FMRVMgOj0gXAorICAgICAgICBlbl9VUyBcCisgICAgICAgIGFmX1pBIFwKKyAgICAgICAgYW1fRVQgXAorICAgICAgICBhcl9FRyBcCisgICAgICAgIGFyX1hCIFwKKyAgICAgICAgYXpfQVogXAorICAgICAgICBiZV9CWSBcCisgICAgICAgIGJnX0JHIFwKKyAgICAgICAgYm5fQkQgXAorICAgICAgICBic19CQSBcCisgICAgICAgIGNhX0VTIFwKKyAgICAgICAgY3NfQ1ogXAorICAgICAgICBkYV9ESyBcCisgICAgICAgIGRlX0RFIFwKKyAgICAgICAgZWxfR1IgXAorICAgICAgICBlbl9BVSBcCisgICAgICAgIGVuX0NBIFwKKyAgICAgICAgZW5fR0IgXAorICAgICAgICBlbl9JTiBcCisgICAgICAgIGVuX1hBIFwKKyAgICAgICAgZW5fWEMgXAorICAgICAgICBlc19FUyBcCisgICAgICAgIGVzX1VTIFwKKyAgICAgICAgZXRfRUUgXAorICAgICAgICBldV9FUyBcCisgICAgICAgIGZhX0lSIFwKKyAgICAgICAgZmlfRkkgXAorICAgICAgICBmcl9DQSBcCisgICAgICAgIGZyX0ZSIFwKKyAgICAgICAgZ2xfRVMgXAorICAgICAgICBndV9JTiBcCisgICAgICAgIGhpX0lOIFwKKyAgICAgICAgaHJfSFIgXAorICAgICAgICBodV9IVSBcCisgICAgICAgIGh5X0FNIFwKKyAgICAgICAgaW5fSUQgXAorICAgICAgICBpc19JUyBcCisgICAgICAgIGl0X0lUIFwKKyAgICAgICAgaXdfSUwgXAorICAgICAgICBqYV9KUCBcCisgICAgICAgIGthX0dFIFwKKyAgICAgICAga2tfS1ogXAorICAgICAgICBrbV9LSCBcCisgICAgICAgIGtuX0lOIFwKKyAgICAgICAga29fS1IgXAorICAgICAgICBreV9LRyBcCisgICAgICAgIGxvX0xBIFwKKyAgICAgICAgbHRfTFQgXAorICAgICAgICBsdl9MViBcCisgICAgICAgIG1rX01LIFwKKyAgICAgICAgbWxfSU4gXAorICAgICAgICBtbl9NTiBcCisgICAgICAgIG1yX0lOIFwKKyAgICAgICAgbXNfTVkgXAorICAgICAgICBteV9NTSBcCisgICAgICAgIG5iX05PIFwKKyAgICAgICAgbmVfTlAgXAorICAgICAgICBubF9OTCBcCisgICAgICAgIHBhX0lOIFwKKyAgICAgICAgcGxfUEwgXAorICAgICAgICBwdF9CUiBcCisgICAgICAgIHB0X1BUIFwKKyAgICAgICAgcm9fUk8gXAorICAgICAgICBydV9SVSBcCisgICAgICAgIHNpX0xLIFwKKyAgICAgICAgc2tfU0sgXAorICAgICAgICBzbF9TSSBcCisgICAgICAgIHNxX0FMIFwKKyAgICAgICAgc3JfTGF0bl9SUyBcCisgICAgICAgIHNyX1JTIFwKKyAgICAgICAgc3ZfU0UgXAorICAgICAgICBzd19UWiBcCisgICAgICAgIHRhX0lOIFwKKyAgICAgICAgdGVfSU4gXAorICAgICAgICB0aF9USCBcCisgICAgICAgIHRsX1BIIFwKKyAgICAgICAgdHJfVFIgXAorICAgICAgICB1a19VQSBcCisgICAgICAgIHVyX1BLIFwKKyAgICAgICAgdXpfVVogXAorICAgICAgICB2aV9WTiBcCisgICAgICAgIHpoX0NOIFwKKyAgICAgICAgemhfSEsgXAorICAgICAgICB6aF9UVyBcCisgICAgICAgIHp1X1pBCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9wcm9kdWN0X2xhdW5jaGVkX3dpdGhfb19tcjEubWsgYi90YXJnZXQvcHJvZHVjdC9wcm9kdWN0X2xhdW5jaGVkX3dpdGhfb19tcjEubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2MjBhYQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9wcm9kdWN0L3Byb2R1Y3RfbGF1bmNoZWRfd2l0aF9vX21yMS5tawpAQCAtMCwwICsxLDIgQEAKKyNQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCBpbmRpY2F0ZXMgdGhlIGZpcnN0IGFwaSBsZXZlbCwgZGV2aWNlIGhhcyBiZWVuIGNvbW1lcmNpYWxseSBsYXVuY2VkIG9uLgorUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwgOj0gMjcKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3J1bnRpbWVfbGliYXJ0Lm1rIGIvdGFyZ2V0L3Byb2R1Y3QvcnVudGltZV9saWJhcnQubWsKaW5kZXggNmU3MDM4ZS4uZjkwMzBjZiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvcnVudGltZV9saWJhcnQubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvcnVudGltZV9saWJhcnQubWsKQEAgLTU2LDYgKzU2LDkgQEAKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIGNhY2VydHMgXAogCitQUk9EVUNUX1BBQ0tBR0VTICs9IFwKKyAgICBoaWRkZW5hcGktcGFja2FnZS13aGl0ZWxpc3QueG1sIFwKKwogUFJPRFVDVF9TWVNURU1fREVGQVVMVF9QUk9QRVJUSUVTICs9IFwKICAgICBkYWx2aWsudm0uaW1hZ2UtZGV4Mm9hdC1YbXM9NjRtIFwKICAgICBkYWx2aWsudm0uaW1hZ2UtZGV4Mm9hdC1YbXg9NjRtIFwKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3Nka19iYXNlLm1rIGIvdGFyZ2V0L3Byb2R1Y3Qvc2RrX2Jhc2UubWsKaW5kZXggNzVhNjNlNi4uYjc5YjhjNiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3Qvc2RrX2Jhc2UubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3Qvc2RrX2Jhc2UubWsKQEAgLTE3LDcgKzE3LDYgQEAKIFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTIDo9CiAKIFBST0RVQ1RfUEFDS0FHRVMgOj0gXAotCUFwaURlbW9zIFwKIAlDZWxsQnJvYWRjYXN0UmVjZWl2ZXIgXAogCUN1YmVMaXZlV2FsbHBhcGVycyBcCiAJQ3VzdG9tTG9jYWxlIFwKQEAgLTI1LDcgKzI0LDYgQEAKIAlEaWFsZXIgXAogCUVtdWxhdG9yU21va2VUZXN0cyBcCiAJR2FsbGVyeTIgXAotCUdlc3R1cmVCdWlsZGVyIFwKIAlMYXVuY2hlcjMgXAogCUNhbWVyYTIgXAogCWxpYnJzX2puaSBcCkBAIC00MCw4ICszOCw2IEBACiAJcmlsZCBcCiAJc2NyZWVucmVjb3JkIFwKIAlTZGtTZXR1cCBcCi0JU21va2VUZXN0IFwKLQlTbW9rZVRlc3RBcHAgXAogCVNvZnRLZXlib2FyZCBcCiAJc3FsaXRlMyBcCiAJU3lzdGVtVUkgXApAQCAtOTIsNyArODgsNyBAQAogCWZyYW1ld29ya3MvYmFzZS9kYXRhL3NvdW5kcy9lZmZlY3RzL1ZpZGVvUmVjb3JkLm9nZzpzeXN0ZW0vbWVkaWEvYXVkaW8vdWkvVmlkZW9SZWNvcmQub2dnIFwKIAlmcmFtZXdvcmtzL2Jhc2UvZGF0YS9zb3VuZHMvZWZmZWN0cy9WaWRlb1N0b3Aub2dnOnN5c3RlbS9tZWRpYS9hdWRpby91aS9WaWRlb1N0b3Aub2dnIFwKIAlkZXZpY2UvZ2VuZXJpYy9nb2xkZmlzaC9kYXRhL2V0Yy9oYW5kaGVsZF9jb3JlX2hhcmR3YXJlLnhtbDokKFRBUkdFVF9DT1BZX09VVF9WRU5ET1IpL2V0Yy9wZXJtaXNzaW9ucy9oYW5kaGVsZF9jb3JlX2hhcmR3YXJlLnhtbCBcCi0JZGV2aWNlL2dlbmVyaWMvZ29sZGZpc2gvY2FtZXJhL21lZGlhX3Byb2ZpbGVzLnhtbDokKFRBUkdFVF9DT1BZX09VVF9WRU5ET1IpL2V0Yy9tZWRpYV9wcm9maWxlc19WMV8wLnhtbCBcCisJZGV2aWNlL2dlbmVyaWMvZ29sZGZpc2gvY2FtZXJhL21lZGlhX3Byb2ZpbGVzLnhtbDokKFRBUkdFVF9DT1BZX09VVF9WRU5ET1IpL2V0Yy9tZWRpYV9wcm9maWxlcy54bWwgXAogCWZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQvZGF0YS9tZWRpYV9jb2RlY3NfZ29vZ2xlX2F1ZGlvLnhtbDokKFRBUkdFVF9DT1BZX09VVF9WRU5ET1IpL2V0Yy9tZWRpYV9jb2RlY3NfZ29vZ2xlX2F1ZGlvLnhtbCBcCiAJZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodC9kYXRhL21lZGlhX2NvZGVjc19nb29nbGVfdGVsZXBob255LnhtbDokKFRBUkdFVF9DT1BZX09VVF9WRU5ET1IpL2V0Yy9tZWRpYV9jb2RlY3NfZ29vZ2xlX3RlbGVwaG9ueS54bWwgXAogCWRldmljZS9nZW5lcmljL2dvbGRmaXNoL2NhbWVyYS9tZWRpYV9jb2RlY3NfZ29vZ2xlX3ZpZGVvLnhtbDokKFRBUkdFVF9DT1BZX09VVF9WRU5ET1IpL2V0Yy9tZWRpYV9jb2RlY3NfZ29vZ2xlX3ZpZGVvLnhtbCBcCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9zZGtfcGhvbmVfeDg2Lm1rIGIvdGFyZ2V0L3Byb2R1Y3Qvc2RrX3Bob25lX3g4Ni5tawppbmRleCAxZTgyNzczLi4zMmQ3MWViIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9zZGtfcGhvbmVfeDg2Lm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L3Nka19waG9uZV94ODYubWsKQEAgLTI0LDcgKzI0LDcgQEAKIFBST0RVQ1RfQ09QWV9GSUxFUyArPSBcCiAgICAgZGV2ZWxvcG1lbnQvc3lzLWltZy9hZHZhbmNlZEZlYXR1cmVzLmluaTphZHZhbmNlZEZlYXR1cmVzLmluaSBcCiAgICAgZGV2aWNlL2dlbmVyaWMvZ29sZGZpc2gvZGF0YS9ldGMvZW5jcnlwdGlvbmtleS5pbWc6ZW5jcnlwdGlvbmtleS5pbWcgXAotICAgIHByZWJ1aWx0cy9xZW11LWtlcm5lbC94ODYvMy4xOC9rZXJuZWwtcWVtdTI6a2VybmVsLXJhbmNodQorICAgIHByZWJ1aWx0cy9xZW11LWtlcm5lbC94ODZfNjQvNC40L2tlcm5lbC1xZW11MjprZXJuZWwtcmFuY2h1LTY0CiAKICQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3Qvc2RrX2Jhc2UubWspCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3Nka19waG9uZV94ODZfNjQubWsgYi90YXJnZXQvcHJvZHVjdC9zZGtfcGhvbmVfeDg2XzY0Lm1rCmluZGV4IGExOGM0ZjguLmU0MGViYjUgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L3Nka19waG9uZV94ODZfNjQubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3Qvc2RrX3Bob25lX3g4Nl82NC5tawpAQCAtMjUsNyArMjUsNyBAQAogUFJPRFVDVF9DT1BZX0ZJTEVTICs9IFwKICAgICBkZXZlbG9wbWVudC9zeXMtaW1nL2FkdmFuY2VkRmVhdHVyZXMuaW5pOmFkdmFuY2VkRmVhdHVyZXMuaW5pIFwKICAgICBkZXZpY2UvZ2VuZXJpYy9nb2xkZmlzaC9kYXRhL2V0Yy9lbmNyeXB0aW9ua2V5LmltZzplbmNyeXB0aW9ua2V5LmltZyBcCi0gICAgcHJlYnVpbHRzL3FlbXUta2VybmVsL3g4Nl82NC8zLjE4L2tlcm5lbC1xZW11MjprZXJuZWwtcmFuY2h1CisgICAgcHJlYnVpbHRzL3FlbXUta2VybmVsL3g4Nl82NC80LjQva2VybmVsLXFlbXUyOmtlcm5lbC1yYW5jaHUKIAogJChjYWxsIGluaGVyaXQtcHJvZHVjdCwgJChTUkNfVEFSR0VUX0RJUikvcHJvZHVjdC9jb3JlXzY0X2JpdC5taykKICQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3Qvc2RrX2Jhc2UubWspCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC90cmVibGVfY29tbW9uLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvdHJlYmxlX2NvbW1vbi5tawppbmRleCA4MjlkNWYxLi41MzUyZTc3IDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC90cmVibGVfY29tbW9uLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L3RyZWJsZV9jb21tb24ubWsKQEAgLTE0LDkgKzE0LDI3IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIwogCisjIFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTIGNhbm5vdCBiZSB1c2VkIGhlcmUgYmVjYXVzZSBzeXNwcm9wcyB3aWxsIGJlIGF0CisjIC92ZW5kb3IvW2J1aWxkfGRlZmF1bHRdLnByb3Agd2hlbiBidWlsZCBzcGxpdCBpcyBvbi4gSW4gb3JkZXIgdG8gaGF2ZSBzeXNwcm9wcworIyBvbiB0aGUgZ2VuZXJpYyBzeXN0ZW0gaW1hZ2UsIHBsYWNlIHRoZW0gaW4gYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvCisjIHRyZWJsZV9zeXN0ZW0ucHJvcC4KKworIyBHZW5lcmljIHN5c3RlbSBpbWFnZSBpbmhlcml0cyBmcm9tIEFPU1Agd2l0aCB0ZWxlcGhvbnkKKyQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3QvYW9zcF9iYXNlLm1rKQorJChjYWxsIGluaGVyaXQtcHJvZHVjdCwgJChTUkNfVEFSR0VUX0RJUikvcHJvZHVjdC90ZWxlcGhvbnkubWspCisKICMgU3BsaXQgc2VsaW51eCBwb2xpY3kKIFBST0RVQ1RfRlVMTF9UUkVCTEVfT1ZFUlJJREUgOj0gdHJ1ZQogCisjIHZpbnRmIHV0aWxpdHk6CitQUk9EVUNUX1BBQ0tBR0VTICs9IFwKKyAgICB2aW50ZgorCisjIFRoZSBNZXNzYWdpbmcgYXBwOgorIyAgIE5lZWRlZCBmb3IgYW5kcm9pZC50ZWxlY29tLmN0cy5FeHRlbmRlZEluQ2FsbFNlcnZpY2VUZXN0I3Rlc3RPbkNhbm5lZFRleHRSZXNwb25zZXNMb2FkZWQKK1BST0RVQ1RfUEFDS0FHRVMgKz0gXAorICAgIG1lc3NhZ2luZworCiAjIEFsbCBWTkRLIGxpYnJhcmllcyAoSEFMIGludGVyZmFjZXMsIFZOREssIFZOREstU1AsIExMLU5ESykKIFBST0RVQ1RfUEFDS0FHRVMgKz0gdm5ka19wYWNrYWdlCiAKQEAgLTI0LDggKzQyLDYgQEAKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIGxpYnZ1bGthbiBcCiAKLSMgQXVkaW86Ci1VU0VfWE1MX0FVRElPX1BPTElDWV9DT05GIDo9IDEKICMgVGhlIGZvbGxvd2luZyBwb2xpY3kgWE1MIGZpbGVzIGFyZSB1c2VkIGFzIGZhbGxiYWNrIGZvcgogIyB2ZW5kb3JzL2RldmljZXMgbm90IHVzaW5nIFhNTCB0byBjb25maWd1cmUgYXVkaW8gcG9saWN5LgogUFJPRFVDVF9DT1BZX0ZJTEVTICs9IFwKQEAgLTQwLDMgKzU2LDM1IEBACiAjICAgYXVkaW8uYTJkcC5kZWZhdWx0IHRvIHN1cHBvcnQgQTJEUCBpZiBib2FyZCBoYXMgdGhlIGNhcGFiaWxpdHkuCiBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKICAgICBhdWRpby5hMmRwLmRlZmF1bHQKKworIyBOZXQ6CisjICAgVmVuZG9ycyBjYW4gdXNlIHRoZSBwbGF0Zm9ybS1wcm92aWRlZCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gdXRpbGl0aWVzIChpcCwKKyMgICBpcHRhYmxlLCBldGMuKSB0byBjb25maWd1cmUgdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2ssIGJ1dCB0aGVzZSB1dGlsaXRpZXMKKyMgICBkbyBub3QgeWV0IGluY2x1ZGUgYSBISURMIGludGVyZmFjZSB3cmFwcGVyLiBUaGlzIGlzIGEgc29sdXRpb24gb24KKyMgICBBbmRyb2lkIE8uCitQUk9EVUNUX1BBQ0tBR0VTICs9IFwKKyAgICBuZXR1dGlscy13cmFwcGVyLTEuMAorCisjIFRlbGVwaG9ueToKKyMgICBQcm92aWRlIGEgZGVmYXVsdCBBUE4gY29uZmlndXJhdGlvbgorUFJPRFVDVF9DT1BZX0ZJTEVTICs9IFwKKyAgICBkZXZpY2UvZ2VuZXJpYy9nb2xkZmlzaC9kYXRhL2V0Yy9hcG5zLWNvbmYueG1sOnN5c3RlbS9ldGMvYXBucy1jb25mLnhtbAorCisjIE5GQzoKKyMgICBQcm92aWRlIGRlZmF1bHQgbGlibmZjLW5jaS5jb25mIGZpbGUgZm9yIGRldmljZXMgdGhhdCBkb2VzIG5vdCBoYXZlIG9uZSBpbgorIyAgIHZlbmRvci9ldGMKK1BST0RVQ1RfQ09QWV9GSUxFUyArPSBcCisgICAgZGV2aWNlL2dlbmVyaWMvY29tbW9uL25mYy9saWJuZmMtbmNpLmNvbmY6c3lzdGVtL2V0Yy9saWJuZmMtbmNpLmNvbmYKKworIyBTdXBwb3J0IGZvciB0aGUgZGV2aWNlcyB3aXRoIG5vIFZOREsgZW5mb3JjaW5nCitQUk9EVUNUX0NPUFlfRklMRVMgKz0gXAorICAgIGJ1aWxkL21ha2UvdGFyZ2V0L3Byb2R1Y3Qvdm5kay9pbml0LmdzaS5yYzpzeXN0ZW0vZXRjL2luaXQvaW5pdC5nc2kucmMgXAorICAgIGJ1aWxkL21ha2UvdGFyZ2V0L3Byb2R1Y3Qvdm5kay9pbml0Lm5vZW5mb3JjZS5yYzpzeXN0ZW0vZXRjL2luaXQvZ3NpL2luaXQubm9lbmZvcmNlLnJjCisKKyMgTmFtZSBzcGFjZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIG5vbi1lbmZvcmNpbmcgVk5ESworUFJPRFVDVF9QQUNLQUdFUyArPSBcCisgICAgbGQuY29uZmlnLm5vZW5mb3JjZS50eHQKKworIyBTZXQgY3VycmVudCBWTkRLIHZlcnNpb24gZm9yIEdTSQorUFJPRFVDVF9TWVNURU1fREVGQVVMVF9QUk9QRVJUSUVTICs9IFwKKyAgICByby5nc2kudm5kay52ZXJzaW9uPSQoUExBVEZPUk1fVk5ES19WRVJTSU9OKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpY19hcm12NS5tayBiL3RhcmdldC9wcm9kdWN0L3RyZWJsZV9jb21tb25fMzIubWsKc2ltaWxhcml0eSBpbmRleCA2MCUKcmVuYW1lIGZyb20gdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpY19hcm12NS5tawpyZW5hbWUgdG8gdGFyZ2V0L3Byb2R1Y3QvdHJlYmxlX2NvbW1vbl8zMi5tawppbmRleCBkYWEzMjFhLi4wMDIzYzNiIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9nZW5lcmljX2FybXY1Lm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L3RyZWJsZV9jb21tb25fMzIubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCwxMiArMTQsOSBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICMKIAotIyBUaGlzIGlzIGEgZ2VuZXJpYyBwcm9kdWN0IHRoYXQgaXNuJ3Qgc3BlY2lhbGl6ZWQgZm9yIGEgc3BlY2lmaWMgZGV2aWNlLgotIyBJdCBpbmNsdWRlcyB0aGUgYmFzZSBBbmRyb2lkIHBsYXRmb3JtLgorIyBQUk9EVUNUX1BST1BFUlRZX09WRVJSSURFUyBjYW5ub3QgYmUgdXNlZCBoZXJlIGJlY2F1c2Ugc3lzcHJvcHMgd2lsbCBiZSBhdAorIyAvdmVuZG9yL1tidWlsZHxkZWZhdWx0XS5wcm9wIHdoZW4gYnVpbGQgc3BsaXQgaXMgb24uIEluIG9yZGVyIHRvIGhhdmUgc3lzcHJvcHMKKyMgb24gdGhlIGdlbmVyaWMgc3lzdGVtIGltYWdlLCBwbGFjZSB0aGVtIGluIGJ1aWxkL21ha2UvdGFyZ2V0L2JvYXJkLworIyB0cmVibGVfc3lzdGVtLnByb3AuCiAKLSQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3QvZ2VuZXJpYy5taykKLQotIyBPdmVycmlkZXMKLVBST0RVQ1RfQlJBTkQgOj0gZ2VuZXJpY19hcm12NQotUFJPRFVDVF9ERVZJQ0UgOj0gZ2VuZXJpY19hcm12NQotUFJPRFVDVF9OQU1FIDo9IGdlbmVyaWNfYXJtdjUKK2luY2x1ZGUgYnVpbGQvbWFrZS90YXJnZXQvcHJvZHVjdC90cmVibGVfY29tbW9uLm1rCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC90cmVibGVfY29tbW9uXzY0Lm1rIGIvdGFyZ2V0L3Byb2R1Y3QvdHJlYmxlX2NvbW1vbl82NC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzNjMTZmCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvdHJlYmxlX2NvbW1vbl82NC5tawpAQCAtMCwwICsxLDM3IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjIFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTIGNhbm5vdCBiZSB1c2VkIGhlcmUgYmVjYXVzZSBzeXNwcm9wcyB3aWxsIGJlIGF0CisjIC92ZW5kb3IvW2J1aWxkfGRlZmF1bHRdLnByb3Agd2hlbiBidWlsZCBzcGxpdCBpcyBvbi4gSW4gb3JkZXIgdG8gaGF2ZSBzeXNwcm9wcworIyBvbiB0aGUgZ2VuZXJpYyBzeXN0ZW0gaW1hZ2UsIHBsYWNlIHRoZW0gaW4gYnVpbGQvbWFrZS90YXJnZXQvYm9hcmQvCisjIHRyZWJsZV9zeXN0ZW0ucHJvcC4KKworaW5jbHVkZSBidWlsZC9tYWtlL3RhcmdldC9wcm9kdWN0L3RyZWJsZV9jb21tb24ubWsKKworIyBGb3Igbm93IHRoaXMgd2lsbCBhbGxvdyA2NC1iaXQgYXBwcywgYnV0IHN0aWxsIGNvbXBpbGUgYWxsIGFwcHMgd2l0aCBKTkkKKyMgZm9yIDMyLWJpdCBvbmx5LgorCisjIENvcHkgZGlmZmVyZW50IHp5Z290ZSBzZXR0aW5ncyBmb3IgdmVuZG9yLmltZyB0byBzZWxlY3QgYnkgc2V0dGluZyBwcm9wZXJ0eQorIyByby56eWdvdGU9enlnb3RlNjRfMzIgb3Igcm8uenlnb3RlPXp5Z290ZTMyXzY0OgorIyAgIDEuIDY0LWJpdCBwcmltYXJ5LCAzMi1iaXQgc2Vjb25kYXJ5IE9SCisjICAgMi4gMzItYml0IHByaW1hcnksIDY0LWJpdCBzZWNvbmRhcnkKKyMgICAzLiA2NC1iaXQgb25seSBpcyBjdXJyZW50bHkgZm9yYmlkZGVuIChiLzY0MjgwNDU5I2NvbW1lbnQ2KQorUFJPRFVDVF9DT1BZX0ZJTEVTICs9IFwKKyAgICBzeXN0ZW0vY29yZS9yb290ZGlyL2luaXQuenlnb3RlNjRfMzIucmM6cm9vdC9pbml0Lnp5Z290ZTY0XzMyLnJjIFwKKyAgICBzeXN0ZW0vY29yZS9yb290ZGlyL2luaXQuenlnb3RlMzJfNjQucmM6cm9vdC9pbml0Lnp5Z290ZTMyXzY0LnJjCisKK1RBUkdFVF9TVVBQT1JUU18zMl9CSVRfQVBQUyA6PSB0cnVlCitUQVJHRVRfU1VQUE9SVFNfNjRfQklUX0FQUFMgOj0gdHJ1ZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3Qvdm5kay9BbmRyb2lkLm1rIGIvdGFyZ2V0L3Byb2R1Y3Qvdm5kay9BbmRyb2lkLm1rCmluZGV4IDZlOGE4NWYuLjkzYWFmMzcgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L3ZuZGsvQW5kcm9pZC5taworKysgYi90YXJnZXQvcHJvZHVjdC92bmRrL0FuZHJvaWQubWsKQEAgLTIsMjUgKzIsNiBAQAogTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBTZXR0aW5nIHRoZSBWTkRLIHZlcnNpb24uIFZlcnNpb24gaXMgMTAwMDAuMCBmb3Igbm90LXlldC1wdWJsaXNoZWQKLSMgcGxhdGZvcm0gYW5kIHh4LnkgZm9yIHJlbGVhc2VkIHBsYXRmb3JtLgotdm5ka19tYWpvcl92ZXIgOj0gMTAwMDAKLXZuZGtfbWlub3JfdmVyIDo9IDAKLQotI1RPRE8oYi82ODAyNzI5MSk6IFJldml2ZSB0aGlzIGNoZWNrIHdoZW4gd2UgaGF2ZSBzdGFibGUgVk5ESyBpbiBQIG9yIGxhdGVyLgotI2lmbmVxICgkKHZuZGtfbWFqb3JfdmVyKSwgJChQTEFURk9STV9TREtfVkVSU0lPTikpCi0jJChlcnJvciB2bmRrX21ham9yX3ZlcnNpb24gZG9lcyBub3QgbWF0Y2ggUExBVEZPUk1fU0RLX1ZFUlNJT04sIHBsZWFzZSB1cGRhdGUuKQotI2VuZGlmCi0KLWlmbmVxIChSRUwsJChQTEFURk9STV9WRVJTSU9OX0NPREVOQU1FKSkKLSAgICB2bmRrX21ham9yX3ZlciA6PSAxMDAwMAotICAgIHZuZGtfbWlub3JfdmVyIDo9IDAKLWVuZGlmCi1QTEFURk9STV9WTkRLX1ZFUlNJT04gOj0gJCh2bmRrX21ham9yX3ZlcikuJCh2bmRrX21pbm9yX3ZlcikKLXZuZGtfbWFqb3JfdmVyIDo9Ci12bmRrX21pbm9yX3ZlciA6PQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQ3JlYXRlIHRoZSBsaXN0IG9mIHZuZGsgbGlicmFyaWVzIGZyb20gdGhlIHNvdXJjZSBjb2RlLgogSU5URVJOQUxfVk5ES19MSUJfTElTVCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyx2bmRrKS9saWJzLnR4dAogJChJTlRFUk5BTF9WTkRLX0xJQl9MSVNUKToKQEAgLTEwMyw2ICs4NCwxMiBAQAogICAgICQoTExOREtfTElCUkFSSUVTKSBcCiAgICAgbGxuZGsubGlicmFyaWVzLnR4dCBcCiAgICAgdm5ka3NwLmxpYnJhcmllcy50eHQKLQogaW5jbHVkZSAkKEJVSUxEX1BIT05ZX1BBQ0tBR0UpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IHZuZGtfc25hcHNob3RfcGFja2FnZQorTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSBcCisgICAgJChmb3JlYWNoIHZuZGtfdmVyLCQoUFJPRFVDVF9FWFRSQV9WTkRLX1ZFUlNJT05TKSx2bmRrX3YkKHZuZGtfdmVyKV8kKFRBUkdFVF9BUkNIKSkKK2luY2x1ZGUgJChCVUlMRF9QSE9OWV9QQUNLQUdFKQorCiBlbmRpZiAjIEJPQVJEX1ZOREtfVkVSU0lPTiBpcyBzZXQKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3ZuZGsvaW5pdC5nc2kucmMgYi90YXJnZXQvcHJvZHVjdC92bmRrL2luaXQuZ3NpLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNmIxZmIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvcHJvZHVjdC92bmRrL2luaXQuZ3NpLnJjCkBAIC0wLDAgKzEsMiBAQAorIyBJZiByby52bmRrLnZlcnNpb24gaXMgbm90IGRlZmluZWQsIGltcG9ydCBpbml0Lm5vZW5mb3JjZS5yYworaW1wb3J0IC9zeXN0ZW0vZXRjL2luaXQvZ3NpL2luaXQuJHtyby52bmRrLnZlcnNpb246LW5vZW5mb3JjZX0ucmMKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3ZuZGsvaW5pdC5ub2VuZm9yY2UucmMgYi90YXJnZXQvcHJvZHVjdC92bmRrL2luaXQubm9lbmZvcmNlLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjFkZjcKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvcHJvZHVjdC92bmRrL2luaXQubm9lbmZvcmNlLnJjCkBAIC0wLDAgKzEsNSBAQAorb24gZWFybHktaW5pdAorICAgICMgSWYgcm8udm5kay52ZXJzaW9uIGlzIG5vdCBzZXQsIHVzZSBsZC5jb25maWcubm9uZW5mb3JjZS50eHQKKyAgICBleHBvcnQgTERfQ09ORklHX0ZJTEUgL3N5c3RlbS9ldGMvbGQuY29uZmlnLm5vZW5mb3JjZS50eHQKKyAgICAjIFRvIHVzZSBjdXJyZW50IFZOREsgbGlicywgc2V0IHJvLnZuZGsudmVyc2lvbiB0byBzeXN0ZW0gdm5kayB2ZXJzaW9uCisgICAgc2V0cHJvcCByby52bmRrLnZlcnNpb24gJHtyby5nc2kudm5kay52ZXJzaW9ufQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWRicyBiL3Rvb2xzL2FkYnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE4ZjA2YzAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWRicworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1pbXBvcnQgb3MKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgcmUKLWltcG9ydCBzdHJpbmcKLWltcG9ydCBzeXMKLQotc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAiLy4uLy4uL2RldmVsb3BtZW50L3NjcmlwdHMiKQotaW1wb3J0IHN0YWNrX2NvcmUKLWltcG9ydCBzeW1ib2wKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgIyBwYXNzIHRoZSBvcHRpb25zIHRvIGFkYgotICBhZGJfY21kICA9ICJhZGIgIiArICcgJy5qb2luKHN5cy5hcmd2WzE6XSkKLQotICAjIGNyZWF0ZSB0cmFjZXIgZm9yIGxpbmUgcGFyc2luZwotICB0cmFjZXIgPSBzdGFja19jb3JlLlRyYWNlQ29udmVydGVyKCkKLQotICAjIGludm9rZSB0aGUgYWRiIGNvbW1hbmQgYW5kIGZpbHRlciBpdHMgb3V0cHV0Ci0gIHN0cmVhbSA9IG9zLnBvcGVuKGFkYl9jbWQpCi0gIHdoaWxlIChUcnVlKToKLSAgICBsaW5lID0gc3RyZWFtLnJlYWRsaW5lKCkKLSAgICBpZiAobGluZSA9PSAnJyk6Ci0gICAgICBicmVhawotICAgIGlmKHRyYWNlci5Qcm9jZXNzTGluZShsaW5lKSA9PSBGYWxzZSk6Ci0gICAgICBwcmludChsaW5lLnN0cmlwKCkpCi0gICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLQotICAjIGFkYiBpdHNlbGYgYWJvcnRzCi0gIHN0cmVhbS5jbG9zZSgpCmRpZmYgLS1naXQgYS90b29scy9hdXRvX2dlbl90ZXN0X2NvbmZpZy5weSBiL3Rvb2xzL2F1dG9fZ2VuX3Rlc3RfY29uZmlnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3YzViZGMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hdXRvX2dlbl90ZXN0X2NvbmZpZy5weQpAQCAtMCwwICsxLDg5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIkEgdG9vbCB0byBnZW5lcmF0ZSBUcmFkZUZlZCB0ZXN0IGNvbmZpZyBmaWxlLgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworZnJvbSB4bWwuZG9tLm1pbmlkb20gaW1wb3J0IHBhcnNlCisKK0FUVFJJQlVURV9MQUJFTCA9ICdhbmRyb2lkOmxhYmVsJworQVRUUklCVVRFX1JVTk5FUiA9ICdhbmRyb2lkOm5hbWUnCitBVFRSSUJVVEVfUEFDS0FHRSA9ICdwYWNrYWdlJworCitQTEFDRUhPTERFUl9MQUJFTCA9ICd7TEFCRUx9JworUExBQ0VIT0xERVJfTU9EVUxFID0gJ3tNT0RVTEV9JworUExBQ0VIT0xERVJfUEFDS0FHRSA9ICd7UEFDS0FHRX0nCitQTEFDRUhPTERFUl9SVU5ORVIgPSAne1JVTk5FUn0nCitQTEFDRUhPTERFUl9URVNUX1RZUEUgPSAne1RFU1RfVFlQRX0nCisKKworZGVmIG1haW4oYXJndik6CisgICIiIkVudHJ5IHBvaW50IG9mIGF1dG9fZ2VuX3Rlc3RfY29uZmlnLgorCisgIEFyZ3M6CisgICAgYXJndjogQSBsaXN0IG9mIGFyZ3VtZW50cy4KKyAgUmV0dXJuczoKKyAgICAwIGlmIG5vIGVycm9yLCBvdGhlcndpc2UgMS4KKyAgIiIiCisgIGlmIGxlbihhcmd2KSAhPSA0OgorICAgIHN5cy5zdGRlcnIud3JpdGUoCisgICAgICAgICdJbnZhbGlkIGFyZ3VlbWVudHMuIFRoZSBzY3JpcHQgcmVxdWlyZXMgNCBhcmd1bWVudHMgZm9yIGZpbGUgcGF0aHM6ICcKKyAgICAgICAgJ3RhcmdldF9jb25maWcgYW5kcm9pZF9tYW5pZmVzdCBlbXB0eV9jb25maWcgJworICAgICAgICAnaW5zdHJ1bWVudGF0aW9uX3Rlc3RfY29uZmlnX3RlbXBsYXRlLlxuJykKKyAgICByZXR1cm4gMQorICB0YXJnZXRfY29uZmlnID0gYXJndlswXQorICBhbmRyb2lkX21hbmlmZXN0ID0gYXJndlsxXQorICBlbXB0eV9jb25maWcgPSBhcmd2WzJdCisgIGluc3RydW1lbnRhdGlvbl90ZXN0X2NvbmZpZ190ZW1wbGF0ZSA9IGFyZ3ZbM10KKworICBtYW5pZmVzdCA9IHBhcnNlKGFuZHJvaWRfbWFuaWZlc3QpCisgIGluc3RydW1lbnRhdGlvbl9lbGVtZW50cyA9IG1hbmlmZXN0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnN0cnVtZW50YXRpb24nKQorICBtYW5pZmVzdF9lbGVtZW50cyA9IG1hbmlmZXN0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtYW5pZmVzdCcpCisgIGlmIGxlbihpbnN0cnVtZW50YXRpb25fZWxlbWVudHMpICE9IDEgb3IgbGVuKG1hbmlmZXN0X2VsZW1lbnRzKSAhPSAxOgorICAgICMgRmFpbGVkIHRvIGxvY2F0ZSBpbnN0cnVtZW50YXRpb24gb3IgbWFuaWZlc3QgZWxlbWVudCBpbiBBbmRyb2lkTWFuaWZlc3QuCisgICAgIyBmaWxlLiBFbXB0eSB0ZXN0IGNvbmZpZyBmaWxlIHdpbGwgYmUgY3JlYXRlZC4KKyAgICBzaHV0aWwuY29weWZpbGUoZW1wdHlfY29uZmlnLCB0YXJnZXRfY29uZmlnKQorICAgIHJldHVybiAwCisKKyAgbW9kdWxlID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHRhcmdldF9jb25maWcpKVswXQorICBpbnN0cnVtZW50YXRpb24gPSBpbnN0cnVtZW50YXRpb25fZWxlbWVudHNbMF0KKyAgbWFuaWZlc3QgPSBtYW5pZmVzdF9lbGVtZW50c1swXQorICBpZiBpbnN0cnVtZW50YXRpb24uYXR0cmlidXRlcy5oYXNfa2V5KEFUVFJJQlVURV9MQUJFTCk6CisgICAgbGFiZWwgPSBpbnN0cnVtZW50YXRpb24uYXR0cmlidXRlc1tBVFRSSUJVVEVfTEFCRUxdLnZhbHVlCisgIGVsc2U6CisgICAgbGFiZWwgPSBtb2R1bGUKKyAgcnVubmVyID0gaW5zdHJ1bWVudGF0aW9uLmF0dHJpYnV0ZXNbQVRUUklCVVRFX1JVTk5FUl0udmFsdWUKKyAgcGFja2FnZSA9IG1hbmlmZXN0LmF0dHJpYnV0ZXNbQVRUUklCVVRFX1BBQ0tBR0VdLnZhbHVlCisgIHRlc3RfdHlwZSA9ICgnSW5zdHJ1bWVudGF0aW9uVGVzdCcKKyAgICAgICAgICAgICAgIGlmIHJ1bm5lci5lbmRzd2l0aCgnLkluc3RydW1lbnRhdGlvblRlc3RSdW5uZXInKQorICAgICAgICAgICAgICAgZWxzZSAnQW5kcm9pZEpVbml0VGVzdCcpCisKKyAgd2l0aCBvcGVuKGluc3RydW1lbnRhdGlvbl90ZXN0X2NvbmZpZ190ZW1wbGF0ZSkgYXMgdGVtcGxhdGU6CisgICAgY29uZmlnID0gdGVtcGxhdGUucmVhZCgpCisgICAgY29uZmlnID0gY29uZmlnLnJlcGxhY2UoUExBQ0VIT0xERVJfTEFCRUwsIGxhYmVsKQorICAgIGNvbmZpZyA9IGNvbmZpZy5yZXBsYWNlKFBMQUNFSE9MREVSX01PRFVMRSwgbW9kdWxlKQorICAgIGNvbmZpZyA9IGNvbmZpZy5yZXBsYWNlKFBMQUNFSE9MREVSX1BBQ0tBR0UsIHBhY2thZ2UpCisgICAgY29uZmlnID0gY29uZmlnLnJlcGxhY2UoUExBQ0VIT0xERVJfVEVTVF9UWVBFLCB0ZXN0X3R5cGUpCisgICAgY29uZmlnID0gY29uZmlnLnJlcGxhY2UoUExBQ0VIT0xERVJfUlVOTkVSLCBydW5uZXIpCisgICAgd2l0aCBvcGVuKHRhcmdldF9jb25maWcsICd3JykgYXMgY29uZmlnX2ZpbGU6CisgICAgICBjb25maWdfZmlsZS53cml0ZShjb25maWcpCisgIHJldHVybiAwCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2F1dG9fZ2VuX3Rlc3RfY29uZmlnX3Rlc3QucHkgYi90b29scy9hdXRvX2dlbl90ZXN0X2NvbmZpZ190ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OGMyN2YKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hdXRvX2dlbl90ZXN0X2NvbmZpZ190ZXN0LnB5CkBAIC0wLDAgKzEsMTczIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiVW5pdHRlc3RzIGZvciBhdXRvX2dlbl90ZXN0X2NvbmZpZy4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgYXV0b19nZW5fdGVzdF9jb25maWcKKworVEVTVF9NT0RVTEUgPSAnVGVzdE1vZHVsZScKKworTUFOSUZFU1RfSU5WQUxJRCA9ICIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KKzwvbWFuaWZlc3Q+CisiIiIKKworTUFOSUZFU1RfSlVOSVRfVEVTVCA9ICIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICBwYWNrYWdlPSJjb20uYW5kcm9pZC5teS50ZXN0cy54Ij4KKyAgICA8aW5zdHJ1bWVudGF0aW9uCisgICAgICAgIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5zdXBwb3J0LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lciIKKyAgICAgICAgYW5kcm9pZDp0YXJnZXRQYWNrYWdlPSJjb20uYW5kcm9pZC5teS50ZXN0cyIgLz4KKzwvbWFuaWZlc3Q+CisiIiIKKworTUFOSUZFU1RfSU5TVFJVTUVOVEFUSU9OX1RFU1QgPSAiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgcGFja2FnZT0iY29tLmFuZHJvaWQubXkudGVzdHMueCI+CisgICAgPGluc3RydW1lbnRhdGlvbgorICAgICAgICBhbmRyb2lkOm5hbWU9ImFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0UnVubmVyIgorICAgICAgICBhbmRyb2lkOnRhcmdldFBhY2thZ2U9ImNvbS5hbmRyb2lkLm15LnRlc3RzIgorICAgICAgICBhbmRyb2lkOmxhYmVsPSJNeSBUZXN0cyIgLz4KKzwvbWFuaWZlc3Q+CisiIiIKKworRVhQRUNURURfSlVOSVRfVEVTVF9DT05GSUcgPSAiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPCEtLSBUaGlzIHRlc3QgY29uZmlnIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQuIC0tPgorPGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRpb249IlJ1bnMgVGVzdE1vZHVsZS4iPgorICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRhcmdldHByZXAuc3VpdGUuU3VpdGVBcGtJbnN0YWxsZXIiPgorICAgICAgICA8b3B0aW9uIG5hbWU9InRlc3QtZmlsZS1uYW1lIiB2YWx1ZT0iVGVzdE1vZHVsZS5hcGsiIC8+CisgICAgPC90YXJnZXRfcHJlcGFyZXI+CisKKyAgICA8dGVzdCBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGVzdHR5cGUuQW5kcm9pZEpVbml0VGVzdCIgPgorICAgICAgICA8b3B0aW9uIG5hbWU9InBhY2thZ2UiIHZhbHVlPSJjb20uYW5kcm9pZC5teS50ZXN0cy54IiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InJ1bm5lciIgdmFsdWU9ImFuZHJvaWQuc3VwcG9ydC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXIiIC8+CisgICAgPC90ZXN0PgorPC9jb25maWd1cmF0aW9uPgorIiIiCisKK0VYUEVDVEVEX0lOU1RSVU1FTlRBVElPTl9URVNUX0NPTkZJRyA9ICIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIFRoaXMgdGVzdCBjb25maWcgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZC4gLS0+Cis8Y29uZmlndXJhdGlvbiBkZXNjcmlwdGlvbj0iUnVucyBNeSBUZXN0cy4iPgorICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRhcmdldHByZXAuc3VpdGUuU3VpdGVBcGtJbnN0YWxsZXIiPgorICAgICAgICA8b3B0aW9uIG5hbWU9InRlc3QtZmlsZS1uYW1lIiB2YWx1ZT0iVGVzdE1vZHVsZS5hcGsiIC8+CisgICAgPC90YXJnZXRfcHJlcGFyZXI+CisKKyAgICA8dGVzdCBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGVzdHR5cGUuSW5zdHJ1bWVudGF0aW9uVGVzdCIgPgorICAgICAgICA8b3B0aW9uIG5hbWU9InBhY2thZ2UiIHZhbHVlPSJjb20uYW5kcm9pZC5teS50ZXN0cy54IiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InJ1bm5lciIgdmFsdWU9ImFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0UnVubmVyIiAvPgorICAgIDwvdGVzdD4KKzwvY29uZmlndXJhdGlvbj4KKyIiIgorCitUT09MU19ESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKK0VNUFRZX1RFU1RfQ09ORklHID0gb3MucGF0aC5qb2luKAorICAgIFRPT0xTX0RJUiwgJy4uJywgJ2NvcmUnLCAnZW1wdHlfdGVzdF9jb25maWcueG1sJykKK0lOU1RSVU1FTlRBVElPTl9URVNUX0NPTkZJR19URU1QTEFURSA9IG9zLnBhdGguam9pbigKKyAgICBUT09MU19ESVIsICcuLicsICdjb3JlJywgJ2luc3RydW1lbnRhdGlvbl90ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwnKQorCisKK2NsYXNzIEF1dG9HZW5UZXN0Q29uZmlnVW5pdHRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVW5pdHRlc3RzIGZvciBhdXRvX2dlbl90ZXN0X2NvbmZpZy4iIiIKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgIiIiU2V0dXAgZGlyZWN0b3J5IGZvciB0ZXN0LiIiIgorICAgIHNlbGYudGVzdF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICBzZWxmLmNvbmZpZ19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdF9kaXIsIFRFU1RfTU9EVUxFICsgJy5jb25maWcnKQorICAgIHNlbGYubWFuaWZlc3RfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RfZGlyLCAnQW5kcm9pZE1hbmlmZXN0LnhtbCcpCisKKyAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICIiIkNsZWFudXAgdGhlIHRlc3QgZGlyZWN0b3J5LiIiIgorICAgIHNodXRpbC5ybXRyZWUoc2VsZi50ZXN0X2RpciwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgIGRlZiB0ZXN0SW52YWxpZE1hbmlmZXN0KHNlbGYpOgorICAgICIiIkFuIGVtcHR5IHRlc3QgY29uZmlnIHNob3VsZCBiZSBnZW5lcmF0ZWQgaWYgQW5kcm9pZE1hbmlmZXN0IGlzIGludmFsaWQuCisgICAgIiIiCisgICAgd2l0aCBvcGVuKHNlbGYubWFuaWZlc3RfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgZi53cml0ZShNQU5JRkVTVF9JTlZBTElEKQorCisgICAgYXJndiA9IFtzZWxmLmNvbmZpZ19maWxlLAorICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9maWxlLAorICAgICAgICAgICAgRU1QVFlfVEVTVF9DT05GSUcsCisgICAgICAgICAgICBJTlNUUlVNRU5UQVRJT05fVEVTVF9DT05GSUdfVEVNUExBVEVdCisgICAgYXV0b19nZW5fdGVzdF9jb25maWcubWFpbihhcmd2KQorICAgIHdpdGggb3BlbihzZWxmLmNvbmZpZ19maWxlKSBhcyBjb25maWdfZmlsZToKKyAgICAgIHdpdGggb3BlbihFTVBUWV9URVNUX0NPTkZJRykgYXMgZW1wdHlfY29uZmlnOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmZpZ19maWxlLnJlYWQoKSwgZW1wdHlfY29uZmlnLnJlYWQoKSkKKworICBkZWYgdGVzdENyZWF0ZUpVbml0VGVzdENvbmZpZyhzZWxmKToKKyAgICAiIiJUZXN0IGNyZWF0aW5nIHRlc3QgY29uZmlnIGZvciBBbmRyb2lkSlVuaXRUZXN0LgorICAgICIiIgorICAgIHdpdGggb3BlbihzZWxmLm1hbmlmZXN0X2ZpbGUsICd3JykgYXMgZjoKKyAgICAgIGYud3JpdGUoTUFOSUZFU1RfSlVOSVRfVEVTVCkKKworICAgIGFyZ3YgPSBbc2VsZi5jb25maWdfZmlsZSwKKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZmlsZSwKKyAgICAgICAgICAgIEVNUFRZX1RFU1RfQ09ORklHLAorICAgICAgICAgICAgSU5TVFJVTUVOVEFUSU9OX1RFU1RfQ09ORklHX1RFTVBMQVRFXQorICAgIGF1dG9fZ2VuX3Rlc3RfY29uZmlnLm1haW4oYXJndikKKyAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSkgYXMgY29uZmlnX2ZpbGU6CisgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmZpZ19maWxlLnJlYWQoKSwgRVhQRUNURURfSlVOSVRfVEVTVF9DT05GSUcpCisKKyAgZGVmIHRlc3RDcmVhdGVJbnN0cnVtZW50YXRpb25UZXN0Q29uZmlnKHNlbGYpOgorICAgICIiIlRlc3QgY3JlYXRpbmcgdGVzdCBjb25maWcgZm9yIEluc3RydW1lbnRhdGlvblRlc3QuCisgICAgIiIiCisgICAgd2l0aCBvcGVuKHNlbGYubWFuaWZlc3RfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgZi53cml0ZShNQU5JRkVTVF9JTlNUUlVNRU5UQVRJT05fVEVTVCkKKworICAgIGFyZ3YgPSBbc2VsZi5jb25maWdfZmlsZSwKKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZmlsZSwKKyAgICAgICAgICAgIEVNUFRZX1RFU1RfQ09ORklHLAorICAgICAgICAgICAgSU5TVFJVTUVOVEFUSU9OX1RFU1RfQ09ORklHX1RFTVBMQVRFXQorICAgIGF1dG9fZ2VuX3Rlc3RfY29uZmlnLm1haW4oYXJndikKKyAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSkgYXMgY29uZmlnX2ZpbGU6CisgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgIGNvbmZpZ19maWxlLnJlYWQoKSwgRVhQRUNURURfSU5TVFJVTUVOVEFUSU9OX1RFU1RfQ09ORklHKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2NoZWNrX2J1aWxkcy5zaCBiL3Rvb2xzL2NoZWNrX2J1aWxkcy5zaAppbmRleCBjMjU1YmYwLi43ZTRlYTdjIDEwMDY0NAotLS0gYS90b29scy9jaGVja19idWlsZHMuc2gKKysrIGIvdG9vbHMvY2hlY2tfYnVpbGRzLnNoCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIGlucHV0cz0iJGlucHV0cyAkVEVTVF9CVUlMRF9ESVIvZGlzdC0kMS9pbnN0YWxsZWQtZmlsZXMudHh0IgogICAgICAgICBzaGlmdAogICAgIGRvbmUKLSAgICBidWlsZC90b29scy9jb21wYXJlX2ZpbGVzbGlzdC5weSAkaW5wdXRzID4gJFRFU1RfQlVJTERfRElSL3NpemVzLmh0bWwKKyAgICBidWlsZC9tYWtlL3Rvb2xzL2NvbXBhcmVfZmlsZXNsaXN0LnB5ICRpbnB1dHMgPiAkVEVTVF9CVUlMRF9ESVIvc2l6ZXMuaHRtbAogfQogCiBmdW5jdGlvbiBjaGVja19idWlsZHMKQEAgLTg3LDYgKzg3LDYgQEAKICAgICAgICAgZmkKICAgICAgICAgc2hpZnQKICAgICBkb25lCi0gICAgYnVpbGQvdG9vbHMvY29tcGFyZV9maWxlc2xpc3QucHkgJGlucHV0cyA+ICRURVNUX0JVSUxEX0RJUi9zaXplcy5odG1sCisgICAgYnVpbGQvbWFrZS90b29scy9jb21wYXJlX2ZpbGVzbGlzdC5weSAkaW5wdXRzID4gJFRFU1RfQlVJTERfRElSL3NpemVzLmh0bWwKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvZG9ja2VyLy5naXRpZ25vcmUgYi90b29scy9kb2NrZXIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjBiMzY3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZG9ja2VyLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorZ2l0Y29uZmlnCmRpZmYgLS1naXQgYS90b29scy9kb2NrZXIvRG9ja2VyZmlsZSBiL3Rvb2xzL2RvY2tlci9Eb2NrZXJmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjVhYWYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9kb2NrZXIvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDI1IEBACitGUk9NIHVidW50dToxNC4wNAorQVJHIHVzZXJpZAorQVJHIGdyb3VwaWQKK0FSRyB1c2VybmFtZQorCitSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IGdpdC1jb3JlIGdudXBnIGZsZXggYmlzb24gZ3BlcmYgYnVpbGQtZXNzZW50aWFsIHppcCBjdXJsIHpsaWIxZy1kZXYgZ2NjLW11bHRpbGliIGcrKy1tdWx0aWxpYiBsaWJjNi1kZXYtaTM4NiBsaWIzMm5jdXJzZXM1LWRldiB4MTFwcm90by1jb3JlLWRldiBsaWJ4MTEtZGV2IGxpYjMyei1kZXYgY2NhY2hlIGxpYmdsMS1tZXNhLWRldiBsaWJ4bWwyLXV0aWxzIHhzbHRwcm9jIHVuemlwIHB5dGhvbiBvcGVuamRrLTctamRrCisKK1JVTiBjdXJsIC1vIGpkazgudGd6IGh0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL3ByZWJ1aWx0cy9qZGsvamRrOC8rYXJjaGl2ZS9tYXN0ZXIudGFyLmd6IFwKKyAmJiB0YXIgLXp4ZiBqZGs4LnRneiBsaW51eC14ODYgXAorICYmIG12IGxpbnV4LXg4NiAvdXNyL2xpYi9qdm0vamF2YS04LW9wZW5qZGstYW1kNjQgXAorICYmIHJtIC1yZiBqZGs4LnRnegorCitSVU4gY3VybCAtbyAvdXNyL2xvY2FsL2Jpbi9yZXBvIGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9naXQtcmVwby1kb3dubG9hZHMvcmVwbyBcCisgJiYgZWNobyAiZTE0N2YwMzkyNjg2YzQwY2ZkN2Q1ZTZmMzMyYzZlZTc0YzRlYWI0ZDI0ZTI2OTRiM2IwYTBjMDM3YmY1MWRjNSAgL3Vzci9sb2NhbC9iaW4vcmVwbyIgfCBzaGEyNTZzdW0gLS1zdHJpY3QgLWMgLSBcCisgJiYgY2htb2QgYSt4IC91c3IvbG9jYWwvYmluL3JlcG8KKworUlVOIGdyb3VwYWRkIC1nICRncm91cGlkICR1c2VybmFtZSBcCisgJiYgdXNlcmFkZCAtbSAtdSAkdXNlcmlkIC1nICRncm91cGlkICR1c2VybmFtZSBcCisgJiYgZWNobyAkdXNlcm5hbWUgPi9yb290L3VzZXJuYW1lIFwKKyAmJiBlY2hvICJleHBvcnQgVVNFUj0iJHVzZXJuYW1lID4+L2hvbWUvJHVzZXJuYW1lLy5naXRjb25maWcKK0NPUFkgZ2l0Y29uZmlnIC9ob21lLyR1c2VybmFtZS8uZ2l0Y29uZmlnCitSVU4gY2hvd24gJHVzZXJpZDokZ3JvdXBpZCAvaG9tZS8kdXNlcm5hbWUvLmdpdGNvbmZpZworRU5WIEhPTUU9L2hvbWUvJHVzZXJuYW1lCisKK0VOVFJZUE9JTlQgY2hyb290IC0tdXNlcnNwZWM9JChjYXQgL3Jvb3QvdXNlcm5hbWUpOiQoY2F0IC9yb290L3VzZXJuYW1lKSAvIC9iaW4vYmFzaCAtaQpkaWZmIC0tZ2l0IGEvdG9vbHMvZG9ja2VyL1JFQURNRS5tZCBiL3Rvb2xzL2RvY2tlci9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZmQxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2RvY2tlci9SRUFETUUubWQKQEAgLTAsMCArMSwxOCBAQAorVGhlIERvY2tlcmZpbGUgaW4gdGhpcyBkaXJlY3Rvcnkgc2V0cyB1cCBhbiBVYnVudHUgVHJ1c3R5IGltYWdlIHJlYWR5IHRvIGJ1aWxkCithIHZhcmlldHkgb2YgQW5kcm9pZCBicmFuY2hlcyAoPj0gTG9sbGlwb3ApLiBJdCdzIHBhcnRpY3VsYXJ5IHVzZWZ1bCB0byBidWlsZAorb2xkZXIgYnJhbmNoZXMgdGhhdCByZXF1aXJlZCAxNC4wNCBpZiB5b3UndmUgdXBncmFkZWQgdG8gc29tZXRoaW5nIG5ld2VyLgorCitGaXJzdCwgYnVpbGQgdGhlIGltYWdlOgorYGBgCisjIENvcHkgeW91ciBob3N0IGdpdGNvbmZpZywgb3IgY3JlYXRlIGEgc3RyaXBwZWQgZG93biB2ZXJzaW9uCiskIGNwIH4vLmdpdGNvbmZpZyBnaXRjb25maWcKKyQgZG9ja2VyIGJ1aWxkIC0tYnVpbGQtYXJnIHVzZXJpZD0kKGlkIC11KSAtLWJ1aWxkLWFyZyBncm91cGlkPSQoaWQgLWcpIC0tYnVpbGQtYXJnIHVzZXJuYW1lPSQoaWQgLXVuKSAtdCBhbmRyb2lkLWJ1aWxkLXRydXN0eSAuCitgYGAKKworVGhlbiB5b3UgY2FuIHN0YXJ0IHVwIG5ldyBpbnN0YW5jZXMgd2l0aDoKK2BgYAorJCBkb2NrZXIgcnVuIC1pdCAtLXJtIC12ICRBTkRST0lEX0JVSUxEX1RPUDovc3JjIGFuZHJvaWQtYnVpbGQtdHJ1c3R5Cis+IGNkIC9zcmM7IHNvdXJjZSBidWlsZC9lbnZzZXR1cC5zaAorPiBsdW5jaCBhb3NwX2FybS1lbmcKKz4gbSAtajUwCitgYGAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Ryb2lkZG9jL3Rlc3Qvc3R1YnMvcnVuLnNoIGIvdG9vbHMvZHJvaWRkb2MvdGVzdC9zdHVicy9ydW4uc2gKaW5kZXggMmVhMTVhNi4uN2M4YTg5NCAxMDA3NTUKLS0tIGEvdG9vbHMvZHJvaWRkb2MvdGVzdC9zdHVicy9ydW4uc2gKKysrIGIvdG9vbHMvZHJvaWRkb2MvdGVzdC9zdHVicy9ydW4uc2gKQEAgLTE0LDcgKzE0LDcgQEAKICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotRElSPWJ1aWxkL3Rvb2xzL2Ryb2lkZG9jL3Rlc3Qvc3R1YnMKK0RJUj1idWlsZC9tYWtlL3Rvb2xzL2Ryb2lkZG9jL3Rlc3Qvc3R1YnMKIAogcHVzaGQgJFRPUAogCmRpZmYgLS1naXQgYS90b29scy9mc19jb25maWcvQW5kcm9pZC5tayBiL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLm1rCmluZGV4IDM3NzNkMzguLjEyNDc4OTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLm1rCisrKyBiL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLm1rCkBAIC0yNjEsNiArMjYxLDcgQEAKIAogTE9DQUxfTU9EVUxFIDo9IHBhc3N3ZAogTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQworTE9DQUxfVkVORE9SX01PRFVMRSA6PSB0cnVlCiAKIGluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKIApAQCAtMjc5LDYgKzI4MCw3IEBACiAKIExPQ0FMX01PRFVMRSA6PSBncm91cAogTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQworTE9DQUxfVkVORE9SX01PRFVMRSA6PSB0cnVlCiAKIGluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvZnNfY29uZmlnL2ZzX2NvbmZpZy5jIGIvdG9vbHMvZnNfY29uZmlnL2ZzX2NvbmZpZy5jCmluZGV4IDQ4ZjMwMGIuLjI5NTI4NzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZzX2NvbmZpZy9mc19jb25maWcuYworKysgYi90b29scy9mc19jb25maWcvZnNfY29uZmlnLmMKQEAgLTY3LDE3ICs2NywxOCBAQAogfQogCiBzdGF0aWMgdm9pZCB1c2FnZSgpIHsKLSAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogZnNfY29uZmlnIFstRCBwcm9kdWN0X291dF9wYXRoXSBbLVMgY29udGV4dF9maWxlXSBbLUNdXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogZnNfY29uZmlnIFstRCBwcm9kdWN0X291dF9wYXRoXSBbLVMgY29udGV4dF9maWxlXSBbLVIgcm9vdF0gWy1DXVxuIik7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewogICBjaGFyIGJ1ZmZlclsxMDI0XTsKICAgY29uc3QgY2hhciogY29udGV4dF9maWxlID0gTlVMTDsKICAgY29uc3QgY2hhciogcHJvZHVjdF9vdXRfcGF0aCA9IE5VTEw7CisgIGNoYXIqIHJvb3RfcGF0aCA9IE5VTEw7CiAgIHN0cnVjdCBzZWxhYmVsX2hhbmRsZSogc2VobmQgPSBOVUxMOwogICBpbnQgcHJpbnRfY2FwYWJpbGl0aWVzID0gMDsKICAgaW50IG9wdDsKLSAgd2hpbGUoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiQ1M6RDoiKSkgIT0gLTEpIHsKKyAgd2hpbGUoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiQ1M6UjpEOiIpKSAhPSAtMSkgewogICAgIHN3aXRjaChvcHQpIHsKICAgICBjYXNlICdDJzoKICAgICAgIHByaW50X2NhcGFiaWxpdGllcyA9IDE7CkBAIC04NSw2ICs4Niw5IEBACiAgICAgY2FzZSAnUyc6CiAgICAgICBjb250ZXh0X2ZpbGUgPSBvcHRhcmc7CiAgICAgICBicmVhazsKKyAgICBjYXNlICdSJzoKKyAgICAgIHJvb3RfcGF0aCA9IG9wdGFyZzsKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgJ0QnOgogICAgICAgcHJvZHVjdF9vdXRfcGF0aCA9IG9wdGFyZzsKICAgICAgIGJyZWFrOwpAQCAtOTgsNiArMTAyLDE0IEBACiAgICAgc2VobmQgPSBnZXRfc2VobmQoY29udGV4dF9maWxlKTsKICAgfQogCisgIGlmIChyb290X3BhdGggIT0gTlVMTCkgeworICAgIHNpemVfdCByb290X2xlbiA9IHN0cmxlbihyb290X3BhdGgpOworICAgIC8qIFRyaW0gYW55IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSB0aGUgcm9vdCBwYXRoLiAqLworICAgIHdoaWxlIChyb290X2xlbiAmJiByb290X3BhdGhbLS1yb290X2xlbl0gPT0gJy8nKSB7CisgICAgICByb290X3BhdGhbcm9vdF9sZW5dID0gJ1wwJzsKKyAgICB9CisgIH0KKwogICB3aGlsZSAoZmdldHMoYnVmZmVyLCAxMDIzLCBzdGRpbikgIT0gTlVMTCkgewogICAgIGludCBpc19kaXIgPSAwOwogICAgIGludCBpOwpAQCAtMTIyLDYgKzEzNCwxMCBAQAogICAgIHVuc2lnbmVkIHVpZCA9IDAsIGdpZCA9IDAsIG1vZGUgPSAwOwogICAgIHVpbnQ2NF90IGNhcGFiaWxpdGllczsKICAgICBmc19jb25maWcoYnVmZmVyLCBpc19kaXIsIHByb2R1Y3Rfb3V0X3BhdGgsICZ1aWQsICZnaWQsICZtb2RlLCAmY2FwYWJpbGl0aWVzKTsKKyAgICBpZiAocm9vdF9wYXRoICE9IE5VTEwgJiYgc3RyY21wKGJ1ZmZlciwgcm9vdF9wYXRoKSA9PSAwKSB7CisgICAgICAvKiBUaGUgcm9vdCBvZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyB0byBiZSBhbiBlbXB0eSBzdHJpbmcuICovCisgICAgICBzdHJjcHkoYnVmZmVyLCAiIik7CisgICAgfQogICAgIHByaW50ZigiJXMgJWQgJWQgJW8iLCBidWZmZXIsIHVpZCwgZ2lkLCBtb2RlKTsKIAogICAgIGlmIChzZWhuZCAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS90b29scy9mc19jb25maWcvZnNfY29uZmlnX2dlbmVyYXRvci5weSBiL3Rvb2xzL2ZzX2NvbmZpZy9mc19jb25maWdfZ2VuZXJhdG9yLnB5CmluZGV4IGM4ZDFkZDMuLmQ1MWQwNzUgMTAwNzU1Ci0tLSBhL3Rvb2xzL2ZzX2NvbmZpZy9mc19jb25maWdfZ2VuZXJhdG9yLnB5CisrKyBiL3Rvb2xzL2ZzX2NvbmZpZy9mc19jb25maWdfZ2VuZXJhdG9yLnB5CkBAIC0xNDYsMTggKzE0NiwyNyBAQAogICAgICAgICAgICAgZm91bmQgKHN0cik6IFRoZSBmaWxlIGZvdW5kIGluLCBub3QgcmVxdWlyZWQgdG8gYmUgc3BlY2lmaWVkLgogCiAgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIFZhbHVlRXJyb3I6IGlmIHRoZSBmcmllbmRseSBuYW1lIGlzIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMgYXMKKyAgICAgICAgICAgICAgICB0aGF0IGlzIGJpb25pYydzIGludGVybmFsIGJ1ZmZlciBzaXplIGZvciBuYW1lLgogICAgICAgICAgICAgVmFsdWVFcnJvcjogaWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgc3RyaW5nIG51bWJlciBhcyBwcm9jZXNzZWQgYnkKICAgICAgICAgICAgICAgICBpbnQoeCwgMCkKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXIKICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgIHNlbGYuZm91bmQgPSBmb3VuZAotICAgICAgICBzZWxmLm5vcm1hbGl6ZWRfdmFsdWUgPSBzdHIoaW50KHZhbHVlLCAwKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5ub3JtYWxpemVkX3ZhbHVlID0gc3RyKGludCh2YWx1ZSwgMCkpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgInZhbHVlIiwgbm90IGFpZCBudW1iZXIsIGdvdDogXCIlc1wiJyAlIHZhbHVlKQogCiAgICAgICAgICMgV2hlcmUgd2UgY2FsY3VsYXRlIHRoZSBmcmllbmRseSBuYW1lCiAgICAgICAgIGZyaWVuZGx5ID0gaWRlbnRpZmllcltsZW4oQUlELlBSRUZJWCk6XS5sb3dlcigpCiAgICAgICAgIHNlbGYuZnJpZW5kbHkgPSBBSUQuX2ZpeHVwX2ZyaWVuZGx5KGZyaWVuZGx5KQogCisgICAgICAgIGlmIGxlbihzZWxmLmZyaWVuZGx5KSA+IDMxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQUlEIG5hbWVzIG11c3QgYmUgdW5kZXIgMzIgY2hhcmFjdGVycyAiJXMiJyAlIHNlbGYuZnJpZW5kbHkpCisKKwogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogCiAgICAgICAgIHJldHVybiBzZWxmLmlkZW50aWZpZXIgPT0gb3RoZXIuaWRlbnRpZmllciBcCkBAIC02MzksMTAgKzY0OCw4IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYWlkID0gQUlEKHNlY3Rpb25fbmFtZSwgdmFsdWUsIGZpbGVfbmFtZSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBzeXMuZXhpdCgKLSAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKCdJbnZhbGlkICJ2YWx1ZSIsIG5vdCBhaWQgbnVtYmVyLCBnb3Q6IFwiJXNcIicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleGNlcHRpb246CisgICAgICAgICAgICBzeXMuZXhpdChlcnJvcl9tZXNzYWdlKGV4Y2VwdGlvbikpCiAKICAgICAgICAgIyBWYWx1ZXMgbXVzdCBiZSB3aXRoaW4gT0VNIHJhbmdlCiAgICAgICAgIGlmIG5vdCBVdGlscy5pbl9hbnlfcmFuZ2UoaW50KGFpZC52YWx1ZSwgMCksIHNlbGYuX29lbV9yYW5nZXMpOgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliaG9zdC9BbmRyb2lkLmJwIGIvdG9vbHMvbGliaG9zdC9BbmRyb2lkLmJwCmluZGV4IGU1YTVlY2YuLjRjOTEwMGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYmhvc3QvQW5kcm9pZC5icAorKysgYi90b29scy9saWJob3N0L0FuZHJvaWQuYnAKQEAgLTEwLDYgKzEwLDcgQEAKICAgICBuYW1lOiAibGliaG9zdCIsCiAgICAgdGFyZ2V0OiB7CiAgICAgICAgIHdpbmRvd3M6IHsKKyAgICAgICAgICAgIGNmbGFnczogWyItV25vLXVudXNlZC1wYXJhbWV0ZXIiXSwKICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgICAgIH0sCiAgICAgfSwKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYmhvc3QvQ29weUZpbGUuYyBiL3Rvb2xzL2xpYmhvc3QvQ29weUZpbGUuYwppbmRleCBiZDY1ZjFlLi5mOWJkYTg2IDEwMDY0NAotLS0gYS90b29scy9saWJob3N0L0NvcHlGaWxlLmMKKysrIGIvdG9vbHMvbGliaG9zdC9Db3B5RmlsZS5jCkBAIC0zNTIsNyArMzUyLDEyIEBACiAgKiBuZWVkIHRvIHRyYXNoIGl0IHNvIHdlIGNhbiBjcmVhdGUgb25lLgogICovCiAjaWYgZGVmaW5lZChfV0lOMzIpCi1leHRlcm4gaW50IGNvcHlTeW1saW5rKGNvbnN0IGNoYXIqIHNyYywgY29uc3QgY2hhciogZHN0LCBjb25zdCBzdHJ1Y3Qgc3RhdCogcFNyY1N0YXQsIHVuc2lnbmVkIGludCBvcHRpb25zKSBfX2F0dHJpYnV0ZV9fKChlcnJvcigibm8gc3ltbGlua3Mgb24gV2luZG93cyIpKSk7CitleHRlcm4gaW50IGNvcHlTeW1saW5rKGNvbnN0IGNoYXIqIHNyYywgY29uc3QgY2hhciogZHN0LCBjb25zdCBzdHJ1Y3Qgc3RhdCogcFNyY1N0YXQsIHVuc2lnbmVkIGludCBvcHRpb25zKQorI2lmZGVmIF9fY2xhbmdfXworICBfX2F0dHJpYnV0ZV9fKCh1bmF2YWlsYWJsZSgibm8gc3ltbGlua3Mgb24gV2luZG93cyIpKSk7CisjZWxzZQorICBfX2F0dHJpYnV0ZV9fKChlcnJvcigibm8gc3ltbGlua3Mgb24gV2luZG93cyIpKSk7CisjZW5kaWYKICNlbHNlCiBzdGF0aWMgaW50IGNvcHlTeW1saW5rKGNvbnN0IGNoYXIqIHNyYywgY29uc3QgY2hhciogZHN0LCBjb25zdCBzdHJ1Y3Qgc3RhdCogcFNyY1N0YXQsIHVuc2lnbmVkIGludCBvcHRpb25zKQogewpAQCAtNTc0LDggKzU3OSwxMCBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmV0VmFsID0gY29weURpcmVjdG9yeShzcmMsIGRzdCwgJnNyY1N0YXQsIG9wdGlvbnMpOwogICAgICAgICB9CisjaWYgIWRlZmluZWQoX1dJTjMyKQogICAgIH0gZWxzZSBpZiAoU19JU0xOSyhzcmNTdGF0LnN0X21vZGUpKSB7CiAgICAgICAgIHJldFZhbCA9IGNvcHlTeW1saW5rKHNyYywgZHN0LCAmc3JjU3RhdCwgb3B0aW9ucyk7CisjZW5kaWYKICAgICB9IGVsc2UgaWYgKFNfSVNSRUcoc3JjU3RhdC5zdF9tb2RlKSkgewogICAgICAgICByZXRWYWwgPSBjb3B5UmVndWxhcihzcmMsIGRzdCwgJnNyY1N0YXQsIG9wdGlvbnMpOwogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvYWRkX2ltZ190b190YXJnZXRfZmlsZXMucHkgYi90b29scy9yZWxlYXNldG9vbHMvYWRkX2ltZ190b190YXJnZXRfZmlsZXMucHkKaW5kZXggYTg4MjY4NS4uZjY4OTc2ZSAxMDA3NTUKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL2FkZF9pbWdfdG9fdGFyZ2V0X2ZpbGVzLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9hZGRfaW1nX3RvX3RhcmdldF9maWxlcy5weQpAQCAtNDUsMTkgKzQ1LDEyIEBACiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IHN5cwotCi1pZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwNzAwMDA6Ci0gIHByaW50KCJQeXRob24gMi43IG9yIG5ld2VyIGlzIHJlcXVpcmVkLiIsIGZpbGU9c3lzLnN0ZGVycikKLSAgc3lzLmV4aXQoMSkKLQogaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQgaGFzaGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgc2hsZXgKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzeXMKIGltcG9ydCB1dWlkCiBpbXBvcnQgemlwZmlsZQogCkBAIC02Niw2ICs1OSwxMCBAQAogaW1wb3J0IHJhbmdlbGliCiBpbXBvcnQgc3BhcnNlX2ltZwogCitpZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwNzAwMDA6CisgIHByaW50KCJQeXRob24gMi43IG9yIG5ld2VyIGlzIHJlcXVpcmVkLiIsIGZpbGU9c3lzLnN0ZGVycikKKyAgc3lzLmV4aXQoMSkKKwogT1BUSU9OUyA9IGNvbW1vbi5PUFRJT05TCiAKIE9QVElPTlMuYWRkX21pc3NpbmcgPSBGYWxzZQpAQCAtNzYsNiArNzMsMTAgQEAKIE9QVElPTlMuaXNfc2lnbmluZyA9IEZhbHNlCiAKIAorIyBQYXJ0aXRpb25zIHRoYXQgc2hvdWxkIGhhdmUgdGhlaXIgY2FyZV9tYXAgYWRkZWQgdG8gTUVUQS9jYXJlX21hcC50eHQuCitQQVJUSVRJT05TX1dJVEhfQ0FSRV9NQVAgPSAoJ3N5c3RlbScsICd2ZW5kb3InLCAncHJvZHVjdCcpCisKKwogY2xhc3MgT3V0cHV0RmlsZShvYmplY3QpOgogICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0X3ppcCwgaW5wdXRfZGlyLCBwcmVmaXgsIG5hbWUpOgogICAgIHNlbGYuX291dHB1dF96aXAgPSBvdXRwdXRfemlwCkBAIC05NSwxMyArOTYsMTkgQEAKIAogCiBkZWYgR2V0Q2FyZU1hcCh3aGljaCwgaW1nbmFtZSk6Ci0gICIiIkdlbmVyYXRlIGNhcmVfbWFwIG9mIHN5c3RlbSAob3IgdmVuZG9yKSBwYXJ0aXRpb24iIiIKKyAgIiIiUmV0dXJucyB0aGUgY2FyZV9tYXAgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gcGFydGl0aW9uLgogCi0gIGFzc2VydCB3aGljaCBpbiAoInN5c3RlbSIsICJ2ZW5kb3IiKQorICBBcmdzOgorICAgIHdoaWNoOiBUaGUgcGFydGl0aW9uIG5hbWUsIG11c3QgYmUgbGlzdGVkIGluIFBBUlRJVElPTlNfV0lUSF9DQVJFX01BUC4KKyAgICBpbWduYW1lOiBUaGUgZmlsZW5hbWUgb2YgdGhlIGltYWdlLgorCisgIFJldHVybnM6CisgICAgKHdoaWNoLCBjYXJlX21hcF9yYW5nZXMpOiBjYXJlX21hcF9yYW5nZXMgaXMgdGhlIHJhdyBzdHJpbmcgb2YgdGhlIGNhcmVfbWFwCisgICAgUmFuZ2VTZXQuCisgICIiIgorICBhc3NlcnQgd2hpY2ggaW4gUEFSVElUSU9OU19XSVRIX0NBUkVfTUFQCiAKICAgc2ltZyA9IHNwYXJzZV9pbWcuU3BhcnNlSW1hZ2UoaW1nbmFtZSkKLSAgY2FyZV9tYXBfbGlzdCA9IFt3aGljaF0KLQogICBjYXJlX21hcF9yYW5nZXMgPSBzaW1nLmNhcmVfbWFwCiAgIGtleSA9IHdoaWNoICsgIl9hZGp1c3RlZF9wYXJ0aXRpb25fc2l6ZSIKICAgYWRqdXN0ZWRfYmxvY2tzID0gT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KGtleSkKQEAgLTExMCwxNyArMTE3LDE2IEBACiAgICAgY2FyZV9tYXBfcmFuZ2VzID0gY2FyZV9tYXBfcmFuZ2VzLmludGVyc2VjdChyYW5nZWxpYi5SYW5nZVNldCgKICAgICAgICAgIjAtJWQiICUgKGFkanVzdGVkX2Jsb2NrcywpKSkKIAotICBjYXJlX21hcF9saXN0LmFwcGVuZChjYXJlX21hcF9yYW5nZXMudG9fc3RyaW5nX3JhdygpKQotICByZXR1cm4gY2FyZV9tYXBfbGlzdAorICByZXR1cm4gW3doaWNoLCBjYXJlX21hcF9yYW5nZXMudG9fc3RyaW5nX3JhdygpXQogCiAKLWRlZiBBZGRTeXN0ZW0ob3V0cHV0X3ppcCwgcHJlZml4PSJJTUFHRVMvIiwgcmVjb3ZlcnlfaW1nPU5vbmUsIGJvb3RfaW1nPU5vbmUpOgorZGVmIEFkZFN5c3RlbShvdXRwdXRfemlwLCByZWNvdmVyeV9pbWc9Tm9uZSwgYm9vdF9pbWc9Tm9uZSk6CiAgICIiIlR1cm4gdGhlIGNvbnRlbnRzIG9mIFNZU1RFTSBpbnRvIGEgc3lzdGVtIGltYWdlIGFuZCBzdG9yZSBpdCBpbgogICBvdXRwdXRfemlwLiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gaW1hZ2UgZmlsZS4iIiIKIAotICBpbWcgPSBPdXRwdXRGaWxlKG91dHB1dF96aXAsIE9QVElPTlMuaW5wdXRfdG1wLCBwcmVmaXgsICJzeXN0ZW0uaW1nIikKKyAgaW1nID0gT3V0cHV0RmlsZShvdXRwdXRfemlwLCBPUFRJT05TLmlucHV0X3RtcCwgIklNQUdFUyIsICJzeXN0ZW0uaW1nIikKICAgaWYgb3MucGF0aC5leGlzdHMoaW1nLmlucHV0X25hbWUpOgotICAgIHByaW50KCJzeXN0ZW0uaW1nIGFscmVhZHkgZXhpc3RzIGluICVzLCBubyBuZWVkIHRvIHJlYnVpbGQuLi4iICUgKHByZWZpeCwpKQorICAgIHByaW50KCJzeXN0ZW0uaW1nIGFscmVhZHkgZXhpc3RzOyBubyBuZWVkIHRvIHJlYnVpbGQuLi4iKQogICAgIHJldHVybiBpbWcuaW5wdXRfbmFtZQogCiAgIGRlZiBvdXRwdXRfc2luayhmbiwgZGF0YSk6CkBAIC0xMzksNTEgKzE0NSw2NiBAQAogICAgIGNvbW1vbi5NYWtlUmVjb3ZlcnlQYXRjaChPUFRJT05TLmlucHV0X3RtcCwgb3V0cHV0X3NpbmssIHJlY292ZXJ5X2ltZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdF9pbWcsIGluZm9fZGljdD1PUFRJT05TLmluZm9fZGljdCkKIAotICBibG9ja19saXN0ID0gT3V0cHV0RmlsZShvdXRwdXRfemlwLCBPUFRJT05TLmlucHV0X3RtcCwgcHJlZml4LCAic3lzdGVtLm1hcCIpCisgIGJsb2NrX2xpc3QgPSBPdXRwdXRGaWxlKG91dHB1dF96aXAsIE9QVElPTlMuaW5wdXRfdG1wLCAiSU1BR0VTIiwgInN5c3RlbS5tYXAiKQogICBDcmVhdGVJbWFnZShPUFRJT05TLmlucHV0X3RtcCwgT1BUSU9OUy5pbmZvX2RpY3QsICJzeXN0ZW0iLCBpbWcsCiAgICAgICAgICAgICAgIGJsb2NrX2xpc3Q9YmxvY2tfbGlzdCkKIAogICByZXR1cm4gaW1nLm5hbWUKIAogCi1kZWYgQWRkU3lzdGVtT3RoZXIob3V0cHV0X3ppcCwgcHJlZml4PSJJTUFHRVMvIik6CitkZWYgQWRkU3lzdGVtT3RoZXIob3V0cHV0X3ppcCk6CiAgICIiIlR1cm4gdGhlIGNvbnRlbnRzIG9mIFNZU1RFTV9PVEhFUiBpbnRvIGEgc3lzdGVtX290aGVyIGltYWdlCiAgIGFuZCBzdG9yZSBpdCBpbiBvdXRwdXRfemlwLiIiIgogCi0gIGltZyA9IE91dHB1dEZpbGUob3V0cHV0X3ppcCwgT1BUSU9OUy5pbnB1dF90bXAsIHByZWZpeCwgInN5c3RlbV9vdGhlci5pbWciKQorICBpbWcgPSBPdXRwdXRGaWxlKG91dHB1dF96aXAsIE9QVElPTlMuaW5wdXRfdG1wLCAiSU1BR0VTIiwgInN5c3RlbV9vdGhlci5pbWciKQogICBpZiBvcy5wYXRoLmV4aXN0cyhpbWcuaW5wdXRfbmFtZSk6Ci0gICAgcHJpbnQoInN5c3RlbV9vdGhlci5pbWcgYWxyZWFkeSBleGlzdHMgaW4gJXMsIG5vIG5lZWQgdG8gcmVidWlsZC4uLiIgJSAoCi0gICAgICAgIHByZWZpeCwpKQorICAgIHByaW50KCJzeXN0ZW1fb3RoZXIuaW1nIGFscmVhZHkgZXhpc3RzOyBubyBuZWVkIHRvIHJlYnVpbGQuLi4iKQogICAgIHJldHVybgogCiAgIENyZWF0ZUltYWdlKE9QVElPTlMuaW5wdXRfdG1wLCBPUFRJT05TLmluZm9fZGljdCwgInN5c3RlbV9vdGhlciIsIGltZykKIAogCi1kZWYgQWRkVmVuZG9yKG91dHB1dF96aXAsIHByZWZpeD0iSU1BR0VTLyIpOgorZGVmIEFkZFZlbmRvcihvdXRwdXRfemlwKToKICAgIiIiVHVybiB0aGUgY29udGVudHMgb2YgVkVORE9SIGludG8gYSB2ZW5kb3IgaW1hZ2UgYW5kIHN0b3JlIGluIGl0CiAgIG91dHB1dF96aXAuIiIiCiAKLSAgaW1nID0gT3V0cHV0RmlsZShvdXRwdXRfemlwLCBPUFRJT05TLmlucHV0X3RtcCwgcHJlZml4LCAidmVuZG9yLmltZyIpCisgIGltZyA9IE91dHB1dEZpbGUob3V0cHV0X3ppcCwgT1BUSU9OUy5pbnB1dF90bXAsICJJTUFHRVMiLCAidmVuZG9yLmltZyIpCiAgIGlmIG9zLnBhdGguZXhpc3RzKGltZy5pbnB1dF9uYW1lKToKLSAgICBwcmludCgidmVuZG9yLmltZyBhbHJlYWR5IGV4aXN0cyBpbiAlcywgbm8gbmVlZCB0byByZWJ1aWxkLi4uIiAlIChwcmVmaXgsKSkKKyAgICBwcmludCgidmVuZG9yLmltZyBhbHJlYWR5IGV4aXN0czsgbm8gbmVlZCB0byByZWJ1aWxkLi4uIikKICAgICByZXR1cm4gaW1nLmlucHV0X25hbWUKIAotICBibG9ja19saXN0ID0gT3V0cHV0RmlsZShvdXRwdXRfemlwLCBPUFRJT05TLmlucHV0X3RtcCwgcHJlZml4LCAidmVuZG9yLm1hcCIpCisgIGJsb2NrX2xpc3QgPSBPdXRwdXRGaWxlKG91dHB1dF96aXAsIE9QVElPTlMuaW5wdXRfdG1wLCAiSU1BR0VTIiwgInZlbmRvci5tYXAiKQogICBDcmVhdGVJbWFnZShPUFRJT05TLmlucHV0X3RtcCwgT1BUSU9OUy5pbmZvX2RpY3QsICJ2ZW5kb3IiLCBpbWcsCiAgICAgICAgICAgICAgIGJsb2NrX2xpc3Q9YmxvY2tfbGlzdCkKICAgcmV0dXJuIGltZy5uYW1lCiAKIAotZGVmIEFkZER0Ym8ob3V0cHV0X3ppcCwgcHJlZml4PSJJTUFHRVMvIik6CitkZWYgQWRkUHJvZHVjdChvdXRwdXRfemlwKToKKyAgIiIiVHVybiB0aGUgY29udGVudHMgb2YgUFJPRFVDVCBpbnRvIGEgcHJvZHVjdCBpbWFnZSBhbmQgc3RvcmUgaXQgaW4KKyAgb3V0cHV0X3ppcC4iIiIKKworICBpbWcgPSBPdXRwdXRGaWxlKG91dHB1dF96aXAsIE9QVElPTlMuaW5wdXRfdG1wLCAiSU1BR0VTIiwgInByb2R1Y3QuaW1nIikKKyAgaWYgb3MucGF0aC5leGlzdHMoaW1nLmlucHV0X25hbWUpOgorICAgIHByaW50KCJwcm9kdWN0LmltZyBhbHJlYWR5IGV4aXN0czsgbm8gbmVlZCB0byByZWJ1aWxkLi4uIikKKyAgICByZXR1cm4gaW1nLmlucHV0X25hbWUKKworICBibG9ja19saXN0ID0gT3V0cHV0RmlsZSgKKyAgICAgIG91dHB1dF96aXAsIE9QVElPTlMuaW5wdXRfdG1wLCAiSU1BR0VTIiwgInByb2R1Y3QubWFwIikKKyAgQ3JlYXRlSW1hZ2UoCisgICAgICBPUFRJT05TLmlucHV0X3RtcCwgT1BUSU9OUy5pbmZvX2RpY3QsICJwcm9kdWN0IiwgaW1nLAorICAgICAgYmxvY2tfbGlzdD1ibG9ja19saXN0KQorICByZXR1cm4gaW1nLm5hbWUKKworCitkZWYgQWRkRHRibyhvdXRwdXRfemlwKToKICAgIiIiQWRkcyB0aGUgRFRCTyBpbWFnZS4KIAotICBVc2VzIHRoZSBpbWFnZSB1bmRlciBwcmVmaXggaWYgaXQgYWxyZWFkeSBleGlzdHMuIE90aGVyd2lzZSBsb29rcyBmb3IgdGhlCisgIFVzZXMgdGhlIGltYWdlIHVuZGVyIElNQUdFUy8gaWYgaXQgYWxyZWFkeSBleGlzdHMuIE90aGVyd2lzZSBsb29rcyBmb3IgdGhlCiAgIGltYWdlIHVuZGVyIFBSRUJVSUxUX0lNQUdFUy8sIHNpZ25zIGl0IGFzIG5lZWRlZCwgYW5kIHJldHVybnMgdGhlIGltYWdlIG5hbWUuCiAgICIiIgotCi0gIGltZyA9IE91dHB1dEZpbGUob3V0cHV0X3ppcCwgT1BUSU9OUy5pbnB1dF90bXAsIHByZWZpeCwgImR0Ym8uaW1nIikKKyAgaW1nID0gT3V0cHV0RmlsZShvdXRwdXRfemlwLCBPUFRJT05TLmlucHV0X3RtcCwgIklNQUdFUyIsICJkdGJvLmltZyIpCiAgIGlmIG9zLnBhdGguZXhpc3RzKGltZy5pbnB1dF9uYW1lKToKLSAgICBwcmludCgiZHRiby5pbWcgYWxyZWFkeSBleGlzdHMgaW4gJXMsIG5vIG5lZWQgdG8gcmVidWlsZC4uLiIgJSAocHJlZml4LCkpCisgICAgcHJpbnQoImR0Ym8uaW1nIGFscmVhZHkgZXhpc3RzOyBubyBuZWVkIHRvIHJlYnVpbGQuLi4iKQogICAgIHJldHVybiBpbWcuaW5wdXRfbmFtZQogCiAgIGR0Ym9fcHJlYnVpbHRfcGF0aCA9IG9zLnBhdGguam9pbigKQEAgLTI3Nyw3ICsyOTgsNyBAQAogICAgICAgaW5mb19kaWN0W2FkanVzdGVkX2Jsb2Nrc19rZXldID0gaW50KGFkanVzdGVkX2Jsb2Nrc192YWx1ZSkvNDA5NiAtIDEKIAogCi1kZWYgQWRkVXNlcmRhdGEob3V0cHV0X3ppcCwgcHJlZml4PSJJTUFHRVMvIik6CitkZWYgQWRkVXNlcmRhdGEob3V0cHV0X3ppcCk6CiAgICIiIkNyZWF0ZSBhIHVzZXJkYXRhIGltYWdlIGFuZCBzdG9yZSBpdCBpbiBvdXRwdXRfemlwLgogCiAgIEluIG1vc3QgY2FzZSB3ZSBqdXN0IGNyZWF0ZSBhbmQgc3RvcmUgYW4gZW1wdHkgdXNlcmRhdGEuaW1nOwpAQCAtMjg2LDEwICszMDcsOSBAQAogICBpbiBPUFRJT05TLmluZm9fZGljdC4KICAgIiIiCiAKLSAgaW1nID0gT3V0cHV0RmlsZShvdXRwdXRfemlwLCBPUFRJT05TLmlucHV0X3RtcCwgcHJlZml4LCAidXNlcmRhdGEuaW1nIikKKyAgaW1nID0gT3V0cHV0RmlsZShvdXRwdXRfemlwLCBPUFRJT05TLmlucHV0X3RtcCwgIklNQUdFUyIsICJ1c2VyZGF0YS5pbWciKQogICBpZiBvcy5wYXRoLmV4aXN0cyhpbWcuaW5wdXRfbmFtZSk6Ci0gICAgcHJpbnQoInVzZXJkYXRhLmltZyBhbHJlYWR5IGV4aXN0cyBpbiAlcywgbm8gbmVlZCB0byByZWJ1aWxkLi4uIiAlICgKLSAgICAgICAgcHJlZml4LCkpCisgICAgcHJpbnQoInVzZXJkYXRhLmltZyBhbHJlYWR5IGV4aXN0czsgbm8gbmVlZCB0byByZWJ1aWxkLi4uIikKICAgICByZXR1cm4KIAogICAjIFNraXAgdXNlcmRhdGEuaW1nIGlmIG5vIHNpemUuCkBAIC0zMDgsOCArMzI4LDcgQEAKICAgaWYgT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJ1c2VyZGF0YV9pbWdfd2l0aF9kYXRhIikgPT0gInRydWUiOgogICAgIHVzZXJfZGlyID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAiREFUQSIpCiAgIGVsc2U6Ci0gICAgdXNlcl9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICBPUFRJT05TLnRlbXBmaWxlcy5hcHBlbmQodXNlcl9kaXIpCisgICAgdXNlcl9kaXIgPSBjb21tb24uTWFrZVRlbXBEaXIoKQogCiAgIGZzdGFiID0gT1BUSU9OUy5pbmZvX2RpY3RbImZzdGFiIl0KICAgaWYgZnN0YWI6CkBAIC0zNDYsNyArMzY1LDcgQEAKICAgICBjbWQuZXh0ZW5kKFsiLS1pbmNsdWRlX2Rlc2NyaXB0b3JzX2Zyb21faW1hZ2UiLCBpbWdfcGF0aF0pCiAKIAotZGVmIEFkZFZCTWV0YShvdXRwdXRfemlwLCBwYXJ0aXRpb25zLCBwcmVmaXg9IklNQUdFUy8iKToKK2RlZiBBZGRWQk1ldGEob3V0cHV0X3ppcCwgcGFydGl0aW9ucyk6CiAgICIiIkNyZWF0ZXMgYSBWQk1ldGEgaW1hZ2UgYW5kIHN0b3JlIGl0IGluIG91dHB1dF96aXAuCiAKICAgQXJnczoKQEAgLTM1NSwxOCArMzc0LDE2IEBACiAgICAgICAgIHZhbHVlcy4gT25seSB2YWxpZCBwYXJ0aXRpb24gbmFtZXMgYXJlIGFjY2VwdGVkLCB3aGljaCBpbmNsdWRlICdib290JywKICAgICAgICAgJ3JlY292ZXJ5JywgJ3N5c3RlbScsICd2ZW5kb3InLCAnZHRibycuCiAgICIiIgotICBpbWcgPSBPdXRwdXRGaWxlKG91dHB1dF96aXAsIE9QVElPTlMuaW5wdXRfdG1wLCBwcmVmaXgsICJ2Ym1ldGEuaW1nIikKKyAgaW1nID0gT3V0cHV0RmlsZShvdXRwdXRfemlwLCBPUFRJT05TLmlucHV0X3RtcCwgIklNQUdFUyIsICJ2Ym1ldGEuaW1nIikKICAgaWYgb3MucGF0aC5leGlzdHMoaW1nLmlucHV0X25hbWUpOgotICAgIHByaW50KCJ2Ym1ldGEuaW1nIGFscmVhZHkgZXhpc3RzIGluICVzOyBub3QgcmVidWlsZGluZy4uLiIgJSAocHJlZml4LCkpCisgICAgcHJpbnQoInZibWV0YS5pbWcgYWxyZWFkeSBleGlzdHM7IG5vdCByZWJ1aWxkaW5nLi4uIikKICAgICByZXR1cm4gaW1nLmlucHV0X25hbWUKIAogICBhdmJ0b29sID0gb3MuZ2V0ZW52KCdBVkJUT09MJykgb3IgT1BUSU9OUy5pbmZvX2RpY3RbImF2Yl9hdmJ0b29sIl0KICAgY21kID0gW2F2YnRvb2wsICJtYWtlX3ZibWV0YV9pbWFnZSIsICItLW91dHB1dCIsIGltZy5uYW1lXQogICBjb21tb24uQXBwZW5kQVZCU2lnbmluZ0FyZ3MoY21kLCAidmJtZXRhIikKIAotICBwdWJsaWNfa2V5X2RpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSJhdmJwdWJrZXktIikKLSAgT1BUSU9OUy50ZW1wZmlsZXMuYXBwZW5kKHB1YmxpY19rZXlfZGlyKQotCisgIHB1YmxpY19rZXlfZGlyID0gY29tbW9uLk1ha2VUZW1wRGlyKHByZWZpeD0iYXZicHVia2V5LSIpCiAgIGZvciBwYXJ0aXRpb24sIHBhdGggaW4gcGFydGl0aW9ucy5pdGVtcygpOgogICAgIGFzc2VydCBwYXJ0aXRpb24gaW4gY29tbW9uLkFWQl9QQVJUSVRJT05TLCAnVW5rbm93biBwYXJ0aXRpb246ICVzJyAlICgKICAgICAgICAgcGFydGl0aW9uLCkKQEAgLTM4OCw5ICs0MDUsOSBAQAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbWFnZV9wYXRoKToKICAgICAgICAgICBjb250aW51ZQogICAgICAgICBmb3VuZCA9IEZhbHNlCi0gICAgICAgIGZvciBkaXIgaW4gWydJTUFHRVMnLCAnUkFESU8nLCAnVkVORE9SX0lNQUdFUycsICdQUkVCVUlMVF9JTUFHRVMnXToKKyAgICAgICAgZm9yIGRpcl9uYW1lIGluIFsnSU1BR0VTJywgJ1JBRElPJywgJ1ZFTkRPUl9JTUFHRVMnLCAnUFJFQlVJTFRfSU1BR0VTJ106CiAgICAgICAgICAgYWx0X3BhdGggPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgICAgIE9QVElPTlMuaW5wdXRfdG1wLCBkaXIsIG9zLnBhdGguYmFzZW5hbWUoaW1hZ2VfcGF0aCkpCisgICAgICAgICAgICAgIE9QVElPTlMuaW5wdXRfdG1wLCBkaXJfbmFtZSwgb3MucGF0aC5iYXNlbmFtZShpbWFnZV9wYXRoKSkKICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhbHRfcGF0aCk6CiAgICAgICAgICAgICBzcGxpdF9hcmdzW2luZGV4ICsgMV0gPSBhbHRfcGF0aAogICAgICAgICAgICAgZm91bmQgPSBUcnVlCkBAIC00MDQsMTEgKzQyMSwxMyBAQAogICBpbWcuV3JpdGUoKQogCiAKLWRlZiBBZGRQYXJ0aXRpb25UYWJsZShvdXRwdXRfemlwLCBwcmVmaXg9IklNQUdFUy8iKToKK2RlZiBBZGRQYXJ0aXRpb25UYWJsZShvdXRwdXRfemlwKToKICAgIiIiQ3JlYXRlIGEgcGFydGl0aW9uIHRhYmxlIGltYWdlIGFuZCBzdG9yZSBpdCBpbiBvdXRwdXRfemlwLiIiIgogCi0gIGltZyA9IE91dHB1dEZpbGUob3V0cHV0X3ppcCwgT1BUSU9OUy5pbnB1dF90bXAsIHByZWZpeCwgInBhcnRpdGlvbi10YWJsZS5pbWciKQotICBicHQgPSBPdXRwdXRGaWxlKG91dHB1dF96aXAsIE9QVElPTlMuaW5wdXRfdG1wLCBwcmVmaXgsICJwYXJ0aXRpb24tdGFibGUuYnB0IikKKyAgaW1nID0gT3V0cHV0RmlsZSgKKyAgICAgIG91dHB1dF96aXAsIE9QVElPTlMuaW5wdXRfdG1wLCAiSU1BR0VTIiwgInBhcnRpdGlvbi10YWJsZS5pbWciKQorICBicHQgPSBPdXRwdXRGaWxlKAorICAgICAgb3V0cHV0X3ppcCwgT1BUSU9OUy5pbnB1dF90bXAsICJJTUFHRVMiLCAicGFydGl0aW9uLXRhYmxlLmJwdCIpCiAKICAgIyB1c2UgQlBUVE9PTCBmcm9tIGVudmlyb24sIG9yICJicHR0b29sIiBpZiBlbXB0eSBvciBub3Qgc2V0LgogICBicHR0b29sID0gb3MuZ2V0ZW52KCJCUFRUT09MIikgb3IgImJwdHRvb2wiCkBAIC00MzMsMTIgKzQ1MiwxMiBAQAogICBicHQuV3JpdGUoKQogCiAKLWRlZiBBZGRDYWNoZShvdXRwdXRfemlwLCBwcmVmaXg9IklNQUdFUy8iKToKK2RlZiBBZGRDYWNoZShvdXRwdXRfemlwKToKICAgIiIiQ3JlYXRlIGFuIGVtcHR5IGNhY2hlIGltYWdlIGFuZCBzdG9yZSBpdCBpbiBvdXRwdXRfemlwLiIiIgogCi0gIGltZyA9IE91dHB1dEZpbGUob3V0cHV0X3ppcCwgT1BUSU9OUy5pbnB1dF90bXAsIHByZWZpeCwgImNhY2hlLmltZyIpCisgIGltZyA9IE91dHB1dEZpbGUob3V0cHV0X3ppcCwgT1BUSU9OUy5pbnB1dF90bXAsICJJTUFHRVMiLCAiY2FjaGUuaW1nIikKICAgaWYgb3MucGF0aC5leGlzdHMoaW1nLmlucHV0X25hbWUpOgotICAgIHByaW50KCJjYWNoZS5pbWcgYWxyZWFkeSBleGlzdHMgaW4gJXMsIG5vIG5lZWQgdG8gcmVidWlsZC4uLiIgJSAocHJlZml4LCkpCisgICAgcHJpbnQoImNhY2hlLmltZyBhbHJlYWR5IGV4aXN0czsgbm8gbmVlZCB0byByZWJ1aWxkLi4uIikKICAgICByZXR1cm4KIAogICBpbWFnZV9wcm9wcyA9IGJ1aWxkX2ltYWdlLkltYWdlUHJvcEZyb21HbG9iYWxEaWN0KE9QVElPTlMuaW5mb19kaWN0LCAiY2FjaGUiKQpAQCAtNDU0LDggKzQ3Myw3IEBACiAgIHRpbWVzdGFtcCA9IChkYXRldGltZS5kYXRldGltZSgyMDA5LCAxLCAxKSAtIGVwb2NoKS50b3RhbF9zZWNvbmRzKCkKICAgaW1hZ2VfcHJvcHNbInRpbWVzdGFtcCJdID0gaW50KHRpbWVzdGFtcCkKIAotICB1c2VyX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICBPUFRJT05TLnRlbXBmaWxlcy5hcHBlbmQodXNlcl9kaXIpCisgIHVzZXJfZGlyID0gY29tbW9uLk1ha2VUZW1wRGlyKCkKIAogICBmc3RhYiA9IE9QVElPTlMuaW5mb19kaWN0WyJmc3RhYiJdCiAgIGlmIGZzdGFiOgpAQCAtNDY3LDE3ICs0ODUsMTMzIEBACiAgIGltZy5Xcml0ZSgpCiAKIAorZGVmIEFkZFJhZGlvSW1hZ2VzRm9yQWJPdGEob3V0cHV0X3ppcCwgYWJfcGFydGl0aW9ucyk6CisgICIiIkFkZHMgdGhlIHJhZGlvIGltYWdlcyBuZWVkZWQgZm9yIEEvQiBPVEEgdG8gdGhlIG91dHB1dCBmaWxlLgorCisgIEl0IHBhcnNlcyB0aGUgbGlzdCBvZiBBL0IgcGFydGl0aW9ucywgbG9va3MgZm9yIHRoZSBtaXNzaW5nIG9uZXMgZnJvbSBSQURJTy8KKyAgb3IgVkVORE9SX0lNQUdFUy8gZGlycywgYW5kIGNvcGllcyB0aGVtIHRvIElNQUdFUy8gb2YgdGhlIG91dHB1dCBmaWxlIChvcgorICBkaXIpLgorCisgIEl0IGFsc28gZW5zdXJlcyB0aGF0IG9uIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbiBhbGwgdGhlIGxpc3RlZCBBL0IKKyAgcGFydGl0aW9ucyBtdXN0IGhhdmUgdGhlaXIgaW1hZ2VzIGF2YWlsYWJsZSB1bmRlciBJTUFHRVMvLgorCisgIEFyZ3M6CisgICAgb3V0cHV0X3ppcDogVGhlIG91dHB1dCB6aXAgZmlsZSAobmVlZHMgdG8gYmUgYWxyZWFkeSBvcGVuKSwgb3IgTm9uZSB0bworICAgICAgICB3cml0ZSBpbWFnZXMgdG8gT1BUSU9OUy5pbnB1dF90bXAvLgorICAgIGFiX3BhcnRpdGlvbnM6IFRoZSBsaXN0IG9mIEEvQiBwYXJ0aXRpb25zLgorCisgIFJhaXNlczoKKyAgICBBc3NlcnRpb25FcnJvcjogSWYgaXQgY2FuJ3QgZmluZCBhbiBpbWFnZS4KKyAgIiIiCisgIGZvciBwYXJ0aXRpb24gaW4gYWJfcGFydGl0aW9uczoKKyAgICBpbWdfbmFtZSA9IHBhcnRpdGlvbi5zdHJpcCgpICsgIi5pbWciCisgICAgcHJlYnVpbHRfcGF0aCA9IG9zLnBhdGguam9pbihPUFRJT05TLmlucHV0X3RtcCwgIklNQUdFUyIsIGltZ19uYW1lKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKHByZWJ1aWx0X3BhdGgpOgorICAgICAgcHJpbnQoIiVzIGFscmVhZHkgZXhpc3RzLCBubyBuZWVkIHRvIG92ZXJ3cml0ZS4uLiIgJSAoaW1nX25hbWUsKSkKKyAgICAgIGNvbnRpbnVlCisKKyAgICBpbWdfcmFkaW9fcGF0aCA9IG9zLnBhdGguam9pbihPUFRJT05TLmlucHV0X3RtcCwgIlJBRElPIiwgaW1nX25hbWUpCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW1nX3JhZGlvX3BhdGgpOgorICAgICAgaWYgb3V0cHV0X3ppcDoKKyAgICAgICAgY29tbW9uLlppcFdyaXRlKG91dHB1dF96aXAsIGltZ19yYWRpb19wYXRoLCAiSU1BR0VTLyIgKyBpbWdfbmFtZSkKKyAgICAgIGVsc2U6CisgICAgICAgIHNodXRpbC5jb3B5KGltZ19yYWRpb19wYXRoLCBwcmVidWlsdF9wYXRoKQorICAgICAgY29udGludWUKKworICAgICMgV2FsayB0aHJvdWdoIFZFTkRPUl9JTUFHRVMvIHNpbmNlIGZpbGVzIGNvdWxkIGJlIHVuZGVyIHN1YmRpcnMuCisgICAgaW1nX3ZlbmRvcl9kaXIgPSBvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICJWRU5ET1JfSU1BR0VTIikKKyAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhpbWdfdmVuZG9yX2Rpcik6CisgICAgICBpZiBpbWdfbmFtZSBpbiBmaWxlczoKKyAgICAgICAgaWYgb3V0cHV0X3ppcDoKKyAgICAgICAgICBjb21tb24uWmlwV3JpdGUob3V0cHV0X3ppcCwgb3MucGF0aC5qb2luKHJvb3QsIGltZ19uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIklNQUdFUy8iICsgaW1nX25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgc2h1dGlsLmNvcHkob3MucGF0aC5qb2luKHJvb3QsIGltZ19uYW1lKSwgcHJlYnVpbHRfcGF0aCkKKyAgICAgICAgYnJlYWsKKworICAgICMgQXNzZXJ0IHRoYXQgdGhlIGltYWdlIGlzIHByZXNlbnQgdW5kZXIgSU1BR0VTLyBub3cuCisgICAgaWYgb3V0cHV0X3ppcDoKKyAgICAgICMgWmlwIHNwZWMgc2F5czogQWxsIHNsYXNoZXMgTVVTVCBiZSBmb3J3YXJkIHNsYXNoZXMuCisgICAgICBpbWdfcGF0aCA9ICdJTUFHRVMvJyArIGltZ19uYW1lCisgICAgICBhc3NlcnQgaW1nX3BhdGggaW4gb3V0cHV0X3ppcC5uYW1lbGlzdCgpLCAiY2Fubm90IGZpbmQgIiArIGltZ19uYW1lCisgICAgZWxzZToKKyAgICAgIGltZ19wYXRoID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAiSU1BR0VTIiwgaW1nX25hbWUpCisgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoaW1nX3BhdGgpLCAiY2Fubm90IGZpbmQgIiArIGltZ19uYW1lCisKKworZGVmIEFkZENhcmVNYXBUeHRGb3JBYk90YShvdXRwdXRfemlwLCBhYl9wYXJ0aXRpb25zLCBpbWFnZV9wYXRocyk6CisgICIiIkdlbmVyYXRlcyBhbmQgYWRkcyBjYXJlX21hcC50eHQgZm9yIHN5c3RlbSBhbmQgdmVuZG9yIHBhcnRpdGlvbnMuCisKKyAgQXJnczoKKyAgICBvdXRwdXRfemlwOiBUaGUgb3V0cHV0IHppcCBmaWxlIChuZWVkcyB0byBiZSBhbHJlYWR5IG9wZW4pLCBvciBOb25lIHRvCisgICAgICAgIHdyaXRlIGltYWdlcyB0byBPUFRJT05TLmlucHV0X3RtcC8uCisgICAgYWJfcGFydGl0aW9uczogVGhlIGxpc3Qgb2YgQS9CIHBhcnRpdGlvbnMuCisgICAgaW1hZ2VfcGF0aHM6IEEgbWFwIGZyb20gdGhlIHBhcnRpdGlvbiBuYW1lIHRvIHRoZSBpbWFnZSBwYXRoLgorICAiIiIKKyAgY2FyZV9tYXBfbGlzdCA9IFtdCisgIGZvciBwYXJ0aXRpb24gaW4gYWJfcGFydGl0aW9uczoKKyAgICBwYXJ0aXRpb24gPSBwYXJ0aXRpb24uc3RyaXAoKQorICAgIGlmIHBhcnRpdGlvbiBub3QgaW4gUEFSVElUSU9OU19XSVRIX0NBUkVfTUFQOgorICAgICAgY29udGludWUKKworICAgIHZlcml0eV9ibG9ja19kZXZpY2UgPSAie31fdmVyaXR5X2Jsb2NrX2RldmljZSIuZm9ybWF0KHBhcnRpdGlvbikKKyAgICBhdmJfaGFzaHRyZWVfZW5hYmxlID0gImF2Yl97fV9oYXNodHJlZV9lbmFibGUiLmZvcm1hdChwYXJ0aXRpb24pCisgICAgaWYgKHZlcml0eV9ibG9ja19kZXZpY2UgaW4gT1BUSU9OUy5pbmZvX2RpY3Qgb3IKKyAgICAgICAgT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KGF2Yl9oYXNodHJlZV9lbmFibGUpID09ICJ0cnVlIik6CisgICAgICBpbWFnZV9wYXRoID0gaW1hZ2VfcGF0aHNbcGFydGl0aW9uXQorICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGltYWdlX3BhdGgpCisgICAgICBjYXJlX21hcF9saXN0ICs9IEdldENhcmVNYXAocGFydGl0aW9uLCBpbWFnZV9wYXRoKQorCisgIGlmIGNhcmVfbWFwX2xpc3Q6CisgICAgY2FyZV9tYXBfcGF0aCA9ICJNRVRBL2NhcmVfbWFwLnR4dCIKKyAgICBpZiBvdXRwdXRfemlwIGFuZCBjYXJlX21hcF9wYXRoIG5vdCBpbiBvdXRwdXRfemlwLm5hbWVsaXN0KCk6CisgICAgICBjb21tb24uWmlwV3JpdGVTdHIob3V0cHV0X3ppcCwgY2FyZV9tYXBfcGF0aCwgJ1xuJy5qb2luKGNhcmVfbWFwX2xpc3QpKQorICAgIGVsc2U6CisgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCBjYXJlX21hcF9wYXRoKSwgJ3cnKSBhcyBmcDoKKyAgICAgICAgZnAud3JpdGUoJ1xuJy5qb2luKGNhcmVfbWFwX2xpc3QpKQorICAgICAgaWYgb3V0cHV0X3ppcDoKKyAgICAgICAgT1BUSU9OUy5yZXBsYWNlX3VwZGF0ZWRfZmlsZXNfbGlzdC5hcHBlbmQoY2FyZV9tYXBfcGF0aCkKKworCitkZWYgQWRkUGFja1JhZGlvSW1hZ2VzKG91dHB1dF96aXAsIGltYWdlcyk6CisgICIiIkNvcGllcyBpbWFnZXMgbGlzdGVkIGluIE1FVEEvcGFja19yYWRpb2ltYWdlcy50eHQgZnJvbSBSQURJTy8gdG8gSU1BR0VTLy4KKworICBBcmdzOgorICAgIG91dHB1dF96aXA6IFRoZSBvdXRwdXQgemlwIGZpbGUgKG5lZWRzIHRvIGJlIGFscmVhZHkgb3BlbiksIG9yIE5vbmUgdG8KKyAgICAgICAgd3JpdGUgaW1hZ2VzIHRvIE9QVElPTlMuaW5wdXRfdG1wLy4KKyAgICBpbWFnZXM6IEEgbGlzdCBvZiBpbWFnZSBuYW1lcy4KKworICBSYWlzZXM6CisgICAgQXNzZXJ0aW9uRXJyb3I6IElmIGEgbGlzdGVkIGltYWdlIGNhbid0IGJlIGZvdW5kLgorICAiIiIKKyAgZm9yIGltYWdlIGluIGltYWdlczoKKyAgICBpbWdfbmFtZSA9IGltYWdlLnN0cmlwKCkKKyAgICBfLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGltZ19uYW1lKQorICAgIGlmIG5vdCBleHQ6CisgICAgICBpbWdfbmFtZSArPSAiLmltZyIKKworICAgIHByZWJ1aWx0X3BhdGggPSBvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICJJTUFHRVMiLCBpbWdfbmFtZSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwcmVidWlsdF9wYXRoKToKKyAgICAgIHByaW50KCIlcyBhbHJlYWR5IGV4aXN0cywgbm8gbmVlZCB0byBvdmVyd3JpdGUuLi4iICUgKGltZ19uYW1lLCkpCisgICAgICBjb250aW51ZQorCisgICAgaW1nX3JhZGlvX3BhdGggPSBvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICJSQURJTyIsIGltZ19uYW1lKQorICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhpbWdfcmFkaW9fcGF0aCksIFwKKyAgICAgICAgIkZhaWxlZCB0byBmaW5kICVzIGF0ICVzIiAlIChpbWdfbmFtZSwgaW1nX3JhZGlvX3BhdGgpCisKKyAgICBpZiBvdXRwdXRfemlwOgorICAgICAgY29tbW9uLlppcFdyaXRlKG91dHB1dF96aXAsIGltZ19yYWRpb19wYXRoLCAiSU1BR0VTLyIgKyBpbWdfbmFtZSkKKyAgICBlbHNlOgorICAgICAgc2h1dGlsLmNvcHkoaW1nX3JhZGlvX3BhdGgsIHByZWJ1aWx0X3BhdGgpCisKKwogZGVmIFJlcGxhY2VVcGRhdGVkRmlsZXMoemlwX2ZpbGVuYW1lLCBmaWxlc19saXN0KToKLSAgIiIiVXBkYXRlIGFsbCB0aGUgemlwIGVudHJpZXMgbGlzdGVkIGluIHRoZSBmaWxlc19saXN0LgorICAiIiJVcGRhdGVzIGFsbCB0aGUgWklQIGVudHJpZXMgbGlzdGVkIGluIGZpbGVzX2xpc3QuCiAKICAgRm9yIG5vdyB0aGUgbGlzdCBpbmNsdWRlcyBNRVRBL2NhcmVfbWFwLnR4dCwgYW5kIHRoZSByZWxhdGVkIGZpbGVzIHVuZGVyCiAgIFNZU1RFTS8gYWZ0ZXIgcmVidWlsZGluZyByZWNvdmVyeS4KICAgIiIiCi0KLSAgY21kID0gWyJ6aXAiLCAiLWQiLCB6aXBfZmlsZW5hbWVdICsgZmlsZXNfbGlzdAotICBwID0gY29tbW9uLlJ1bihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgcC5jb21tdW5pY2F0ZSgpCi0KKyAgY29tbW9uLlppcERlbGV0ZSh6aXBfZmlsZW5hbWUsIGZpbGVzX2xpc3QpCiAgIG91dHB1dF96aXAgPSB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGVuYW1lLCAiYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1UcnVlKQpAQCAtNDk4LDM5ICs2MzIsNDMgQEAKICAgVGhlIGltYWdlcyB3aWxsIGJlIGNyZWF0ZWQgdW5kZXIgSU1BR0VTLyBpbiB0aGUgaW5wdXQgdGFyZ2V0X2ZpbGVzLnppcC4KIAogICBBcmdzOgotICAgICAgZmlsZW5hbWU6IHRoZSB0YXJnZXRfZmlsZXMuemlwLCBvciB0aGUgemlwIHJvb3QgZGlyZWN0b3J5LgorICAgIGZpbGVuYW1lOiB0aGUgdGFyZ2V0X2ZpbGVzLnppcCwgb3IgdGhlIHppcCByb290IGRpcmVjdG9yeS4KICAgIiIiCiAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZW5hbWUpOgogICAgIE9QVElPTlMuaW5wdXRfdG1wID0gb3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKQotICAgIGlucHV0X3ppcCA9IE5vbmUKICAgZWxzZToKLSAgICBPUFRJT05TLmlucHV0X3RtcCwgaW5wdXRfemlwID0gY29tbW9uLlVuemlwVGVtcChmaWxlbmFtZSkKKyAgICBPUFRJT05TLmlucHV0X3RtcCA9IGNvbW1vbi5VbnppcFRlbXAoZmlsZW5hbWUpCiAKICAgaWYgbm90IE9QVElPTlMuYWRkX21pc3Npbmc6CiAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICJJTUFHRVMiKSk6CiAgICAgICBwcmludCgidGFyZ2V0X2ZpbGVzIGFwcGVhcnMgdG8gYWxyZWFkeSBjb250YWluIGltYWdlcy4iKQogICAgICAgc3lzLmV4aXQoMSkKIAotICAjIHZlbmRvci5pbWcgaXMgdW5saWtlIHN5c3RlbS5pbWcgb3Igc3lzdGVtX290aGVyLmltZy4gQmVjYXVzZSBpdCBjb3VsZCBiZQotICAjIGJ1aWx0IGZyb20gc291cmNlLCBvciBkcm9wcGVkIGludG8gdGFyZ2V0X2ZpbGVzLnppcCBhcyBhIHByZWJ1aWx0IGJsb2IuIFdlCi0gICMgY29uc2lkZXIgZWl0aGVyIG9mIHRoZW0gYXMgdmVuZG9yLmltZyBiZWluZyBhdmFpbGFibGUsIHdoaWNoIGNvdWxkIGJlIHVzZWQKLSAgIyB3aGVuIGdlbmVyYXRpbmcgdmJtZXRhLmltZyBmb3IgQVZCLgorICBPUFRJT05TLmluZm9fZGljdCA9IGNvbW1vbi5Mb2FkSW5mb0RpY3QoT1BUSU9OUy5pbnB1dF90bXAsIE9QVElPTlMuaW5wdXRfdG1wKQorCisgIGhhc19yZWNvdmVyeSA9IE9QVElPTlMuaW5mb19kaWN0LmdldCgibm9fcmVjb3ZlcnkiKSAhPSAidHJ1ZSIKKworICAjIHt2ZW5kb3IscHJvZHVjdH0uaW1nIGlzIHVubGlrZSBzeXN0ZW0uaW1nIG9yIHN5c3RlbV9vdGhlci5pbWcuIEJlY2F1c2UgaXQKKyAgIyBjb3VsZCBiZSBidWlsdCBmcm9tIHNvdXJjZSwgb3IgZHJvcHBlZCBpbnRvIHRhcmdldF9maWxlcy56aXAgYXMgYSBwcmVidWlsdAorICAjIGJsb2IuIFdlIGNvbnNpZGVyIGVpdGhlciBvZiB0aGVtIGFzIHt2ZW5kb3IscHJvZHVjdH0uaW1nIGJlaW5nIGF2YWlsYWJsZSwKKyAgIyB3aGljaCBjb3VsZCBiZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyB2Ym1ldGEuaW1nIGZvciBBVkIuCiAgIGhhc192ZW5kb3IgPSAob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICJWRU5ET1IiKSkgb3IKICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICJJTUFHRVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVuZG9yLmltZyIpKSkKKyAgaGFzX3Byb2R1Y3QgPSAob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICJQUk9EVUNUIikpIG9yCisgICAgICAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihPUFRJT05TLmlucHV0X3RtcCwgIklNQUdFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvZHVjdC5pbWciKSkpCiAgIGhhc19zeXN0ZW1fb3RoZXIgPSBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihPUFRJT05TLmlucHV0X3RtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTWVNURU1fT1RIRVIiKSkKIAotICBpZiBpbnB1dF96aXA6Ci0gICAgT1BUSU9OUy5pbmZvX2RpY3QgPSBjb21tb24uTG9hZEluZm9EaWN0KGlucHV0X3ppcCwgT1BUSU9OUy5pbnB1dF90bXApCi0KLSAgICBjb21tb24uWmlwQ2xvc2UoaW5wdXRfemlwKQorICAjIFNldCB1cCB0aGUgb3V0cHV0IGRlc3RpbmF0aW9uLiBJdCB3cml0ZXMgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeSBmb3IgZGlyCisgICMgbW9kZTsgb3RoZXJ3aXNlIGFwcGVuZHMgdG8gdGhlIGdpdmVuIFpJUC4KKyAgaWYgb3MucGF0aC5pc2RpcihmaWxlbmFtZSk6CisgICAgb3V0cHV0X3ppcCA9IE5vbmUKKyAgZWxzZToKICAgICBvdXRwdXRfemlwID0gemlwZmlsZS5aaXBGaWxlKGZpbGVuYW1lLCAiYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9VHJ1ZSkKLSAgZWxzZToKLSAgICBPUFRJT05TLmluZm9fZGljdCA9IGNvbW1vbi5Mb2FkSW5mb0RpY3QoZmlsZW5hbWUsIGZpbGVuYW1lKQotICAgIG91dHB1dF96aXAgPSBOb25lCiAKICAgIyBBbHdheXMgbWFrZSBpbnB1dF90bXAvSU1BR0VTIGF2YWlsYWJsZSwgc2luY2Ugd2UgbWF5IHN0YWdlIGJvb3QgLyByZWNvdmVyeQogICAjIGltYWdlcyB0aGVyZSBldmVuIHVuZGVyIHppcCBtb2RlLiBUaGUgZGlyZWN0b3J5IHdpbGwgYmUgY2xlYW5lZCB1cCBhcyBwYXJ0CkBAIC01MzksMTkgKzY3Nyw2IEBACiAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGltYWdlc19kaXIpOgogICAgIG9zLm1ha2VkaXJzKGltYWdlc19kaXIpCiAKLSAgaGFzX3JlY292ZXJ5ID0gKE9QVElPTlMuaW5mb19kaWN0LmdldCgibm9fcmVjb3ZlcnkiKSAhPSAidHJ1ZSIpCi0KLSAgaWYgT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJhdmJfZW5hYmxlIikgPT0gInRydWUiOgotICAgIGZwID0gTm9uZQotICAgIGlmICJidWlsZC5wcm9wIiBpbiBPUFRJT05TLmluZm9fZGljdDoKLSAgICAgIGJ1aWxkX3Byb3AgPSBPUFRJT05TLmluZm9fZGljdFsiYnVpbGQucHJvcCJdCi0gICAgICBpZiAicm8uYnVpbGQuZmluZ2VycHJpbnQiIGluIGJ1aWxkX3Byb3A6Ci0gICAgICAgIGZwID0gYnVpbGRfcHJvcFsicm8uYnVpbGQuZmluZ2VycHJpbnQiXQotICAgICAgZWxpZiAicm8uYnVpbGQudGh1bWJwcmludCIgaW4gYnVpbGRfcHJvcDoKLSAgICAgICAgZnAgPSBidWlsZF9wcm9wWyJyby5idWlsZC50aHVtYnByaW50Il0KLSAgICBpZiBmcDoKLSAgICAgIE9QVElPTlMuaW5mb19kaWN0WyJhdmJfc2FsdCJdID0gaGFzaGxpYi5zaGEyNTYoZnApLmhleGRpZ2VzdCgpCi0KICAgIyBBIG1hcCBiZXR3ZWVuIHBhcnRpdGlvbiBuYW1lcyBhbmQgdGhlaXIgcGF0aHMsIHdoaWNoIGNvdWxkIGJlIHVzZWQgd2hlbgogICAjIGdlbmVyYXRpbmcgQVZCIHZibWV0YSBpbWFnZS4KICAgcGFydGl0aW9ucyA9IGRpY3QoKQpAQCAtNTk4LDEyICs3MjMsMTYgQEAKICAgICAgICAgICByZWNvdmVyeV90d29fc3RlcF9pbWFnZS5BZGRUb1ppcChvdXRwdXRfemlwKQogCiAgIGJhbm5lcigic3lzdGVtIikKLSAgcGFydGl0aW9uc1snc3lzdGVtJ10gPSBzeXN0ZW1faW1nX3BhdGggPSBBZGRTeXN0ZW0oCisgIHBhcnRpdGlvbnNbJ3N5c3RlbSddID0gQWRkU3lzdGVtKAogICAgICAgb3V0cHV0X3ppcCwgcmVjb3ZlcnlfaW1nPXJlY292ZXJ5X2ltYWdlLCBib290X2ltZz1ib290X2ltYWdlKQogCiAgIGlmIGhhc192ZW5kb3I6CiAgICAgYmFubmVyKCJ2ZW5kb3IiKQotICAgIHBhcnRpdGlvbnNbJ3ZlbmRvciddID0gdmVuZG9yX2ltZ19wYXRoID0gQWRkVmVuZG9yKG91dHB1dF96aXApCisgICAgcGFydGl0aW9uc1sndmVuZG9yJ10gPSBBZGRWZW5kb3Iob3V0cHV0X3ppcCkKKworICBpZiBoYXNfcHJvZHVjdDoKKyAgICBiYW5uZXIoInByb2R1Y3QiKQorICAgIHBhcnRpdGlvbnNbJ3Byb2R1Y3QnXSA9IEFkZFByb2R1Y3Qob3V0cHV0X3ppcCkKIAogICBpZiBoYXNfc3lzdGVtX290aGVyOgogICAgIGJhbm5lcigic3lzdGVtX290aGVyIikKQEAgLTYyNyw5NiArNzU2LDI4IEBACiAgICAgYmFubmVyKCJ2Ym1ldGEiKQogICAgIEFkZFZCTWV0YShvdXRwdXRfemlwLCBwYXJ0aXRpb25zKQogCi0gICMgRm9yIGRldmljZXMgdXNpbmcgQS9CIHVwZGF0ZSwgY29weSBvdmVyIGltYWdlcyBmcm9tIFJBRElPLyBhbmQvb3IKLSAgIyBWRU5ET1JfSU1BR0VTLyB0byBJTUFHRVMvIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgdGhlIG5lZWRlZAotICAjIGltYWdlcyByZWFkeSB1bmRlciBJTUFHRVMvLiBBbGwgaW1hZ2VzIHNob3VsZCBoYXZlICcuaW1nJyBhcyBleHRlbnNpb24uCiAgIGJhbm5lcigicmFkaW8iKQotICBhYl9wYXJ0aXRpb25zID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAiTUVUQSIsICJhYl9wYXJ0aXRpb25zLnR4dCIpCi0gIGlmIG9zLnBhdGguZXhpc3RzKGFiX3BhcnRpdGlvbnMpOgotICAgIHdpdGggb3BlbihhYl9wYXJ0aXRpb25zLCAncicpIGFzIGY6Ci0gICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKLSAgICAjIEZvciBkZXZpY2VzIHVzaW5nIEEvQiB1cGRhdGUsIGdlbmVyYXRlIGNhcmVfbWFwIGZvciBzeXN0ZW0gYW5kIHZlbmRvcgotICAgICMgcGFydGl0aW9ucyAoaWYgcHJlc2VudCksIHRoZW4gd3JpdGUgdGhpcyBmaWxlIHRvIHRhcmdldF9maWxlcyBwYWNrYWdlLgotICAgIGNhcmVfbWFwX2xpc3QgPSBbXQotICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgaWYgbGluZS5zdHJpcCgpID09ICJzeXN0ZW0iIGFuZCAoCi0gICAgICAgICAgInN5c3RlbV92ZXJpdHlfYmxvY2tfZGV2aWNlIiBpbiBPUFRJT05TLmluZm9fZGljdCBvcgotICAgICAgICAgIE9QVElPTlMuaW5mb19kaWN0LmdldCgiYXZiX3N5c3RlbV9oYXNodHJlZV9lbmFibGUiKSA9PSAidHJ1ZSIpOgotICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoc3lzdGVtX2ltZ19wYXRoKQotICAgICAgICBjYXJlX21hcF9saXN0ICs9IEdldENhcmVNYXAoInN5c3RlbSIsIHN5c3RlbV9pbWdfcGF0aCkKLSAgICAgIGlmIGxpbmUuc3RyaXAoKSA9PSAidmVuZG9yIiBhbmQgKAotICAgICAgICAgICJ2ZW5kb3JfdmVyaXR5X2Jsb2NrX2RldmljZSIgaW4gT1BUSU9OUy5pbmZvX2RpY3Qgb3IKLSAgICAgICAgICBPUFRJT05TLmluZm9fZGljdC5nZXQoImF2Yl92ZW5kb3JfaGFzaHRyZWVfZW5hYmxlIikgPT0gInRydWUiKToKLSAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKHZlbmRvcl9pbWdfcGF0aCkKLSAgICAgICAgY2FyZV9tYXBfbGlzdCArPSBHZXRDYXJlTWFwKCJ2ZW5kb3IiLCB2ZW5kb3JfaW1nX3BhdGgpCisgIGFiX3BhcnRpdGlvbnNfdHh0ID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAiTUVUQSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYl9wYXJ0aXRpb25zLnR4dCIpCisgIGlmIG9zLnBhdGguZXhpc3RzKGFiX3BhcnRpdGlvbnNfdHh0KToKKyAgICB3aXRoIG9wZW4oYWJfcGFydGl0aW9uc190eHQsICdyJykgYXMgZjoKKyAgICAgIGFiX3BhcnRpdGlvbnMgPSBmLnJlYWRsaW5lcygpCiAKLSAgICAgIGltZ19uYW1lID0gbGluZS5zdHJpcCgpICsgIi5pbWciCi0gICAgICBwcmVidWlsdF9wYXRoID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAiSU1BR0VTIiwgaW1nX25hbWUpCi0gICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwcmVidWlsdF9wYXRoKToKLSAgICAgICAgcHJpbnQoIiVzIGFscmVhZHkgZXhpc3RzLCBubyBuZWVkIHRvIG92ZXJ3cml0ZS4uLiIgJSAoaW1nX25hbWUsKSkKLSAgICAgICAgY29udGludWUKKyAgICAjIEZvciBkZXZpY2VzIHVzaW5nIEEvQiB1cGRhdGUsIGNvcHkgb3ZlciBpbWFnZXMgZnJvbSBSQURJTy8gYW5kL29yCisgICAgIyBWRU5ET1JfSU1BR0VTLyB0byBJTUFHRVMvIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgdGhlIG5lZWRlZAorICAgICMgaW1hZ2VzIHJlYWR5IHVuZGVyIElNQUdFUy8uIEFsbCBpbWFnZXMgc2hvdWxkIGhhdmUgJy5pbWcnIGFzIGV4dGVuc2lvbi4KKyAgICBBZGRSYWRpb0ltYWdlc0ZvckFiT3RhKG91dHB1dF96aXAsIGFiX3BhcnRpdGlvbnMpCiAKLSAgICAgIGltZ19yYWRpb19wYXRoID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAiUkFESU8iLCBpbWdfbmFtZSkKLSAgICAgIGltZ192ZW5kb3JfZGlyID0gb3MucGF0aC5qb2luKAotICAgICAgICBPUFRJT05TLmlucHV0X3RtcCwgIlZFTkRPUl9JTUFHRVMiKQotICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW1nX3JhZGlvX3BhdGgpOgotICAgICAgICBpZiBvdXRwdXRfemlwOgotICAgICAgICAgIGNvbW1vbi5aaXBXcml0ZShvdXRwdXRfemlwLCBpbWdfcmFkaW9fcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKCJJTUFHRVMiLCBpbWdfbmFtZSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgc2h1dGlsLmNvcHkoaW1nX3JhZGlvX3BhdGgsIHByZWJ1aWx0X3BhdGgpCi0gICAgICBlbHNlOgotICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhpbWdfdmVuZG9yX2Rpcik6Ci0gICAgICAgICAgaWYgaW1nX25hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBpZiBvdXRwdXRfemlwOgotICAgICAgICAgICAgICBjb21tb24uWmlwV3JpdGUob3V0cHV0X3ppcCwgb3MucGF0aC5qb2luKHJvb3QsIGltZ19uYW1lKSwKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oIklNQUdFUyIsIGltZ19uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgIHNodXRpbC5jb3B5KG9zLnBhdGguam9pbihyb290LCBpbWdfbmFtZSksIHByZWJ1aWx0X3BhdGgpCi0gICAgICAgICAgICBicmVhawotCi0gICAgICBpZiBvdXRwdXRfemlwOgotICAgICAgICAjIFppcCBzcGVjIHNheXM6IEFsbCBzbGFzaGVzIE1VU1QgYmUgZm9yd2FyZCBzbGFzaGVzLgotICAgICAgICBpbWdfcGF0aCA9ICdJTUFHRVMvJyArIGltZ19uYW1lCi0gICAgICAgIGFzc2VydCBpbWdfcGF0aCBpbiBvdXRwdXRfemlwLm5hbWVsaXN0KCksICJjYW5ub3QgZmluZCAiICsgaW1nX25hbWUKLSAgICAgIGVsc2U6Ci0gICAgICAgIGltZ19wYXRoID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAiSU1BR0VTIiwgaW1nX25hbWUpCi0gICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhpbWdfcGF0aCksICJjYW5ub3QgZmluZCAiICsgaW1nX25hbWUKLQotICAgIGlmIGNhcmVfbWFwX2xpc3Q6Ci0gICAgICBjYXJlX21hcF9wYXRoID0gIk1FVEEvY2FyZV9tYXAudHh0IgotICAgICAgaWYgb3V0cHV0X3ppcCBhbmQgY2FyZV9tYXBfcGF0aCBub3QgaW4gb3V0cHV0X3ppcC5uYW1lbGlzdCgpOgotICAgICAgICBjb21tb24uWmlwV3JpdGVTdHIob3V0cHV0X3ppcCwgY2FyZV9tYXBfcGF0aCwgJ1xuJy5qb2luKGNhcmVfbWFwX2xpc3QpKQotICAgICAgZWxzZToKLSAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihPUFRJT05TLmlucHV0X3RtcCwgY2FyZV9tYXBfcGF0aCksICd3JykgYXMgZnA6Ci0gICAgICAgICAgZnAud3JpdGUoJ1xuJy5qb2luKGNhcmVfbWFwX2xpc3QpKQotICAgICAgICBpZiBvdXRwdXRfemlwOgotICAgICAgICAgIE9QVElPTlMucmVwbGFjZV91cGRhdGVkX2ZpbGVzX2xpc3QuYXBwZW5kKGNhcmVfbWFwX3BhdGgpCisgICAgIyBHZW5lcmF0ZSBjYXJlX21hcC50eHQgZm9yIHN5c3RlbSBhbmQgdmVuZG9yIHBhcnRpdGlvbnMgKGlmIHByZXNlbnQpLCB0aGVuCisgICAgIyB3cml0ZSB0aGlzIGZpbGUgdG8gdGFyZ2V0X2ZpbGVzIHBhY2thZ2UuCisgICAgQWRkQ2FyZU1hcFR4dEZvckFiT3RhKG91dHB1dF96aXAsIGFiX3BhcnRpdGlvbnMsIHBhcnRpdGlvbnMpCiAKICAgIyBSYWRpbyBpbWFnZXMgdGhhdCBuZWVkIHRvIGJlIHBhY2tlZCBpbnRvIElNQUdFUy8sIGFuZCBwcm9kdWN0LWltZy56aXAuCi0gIHBhY2tfcmFkaW9pbWFnZXMgPSBvcy5wYXRoLmpvaW4oCisgIHBhY2tfcmFkaW9pbWFnZXNfdHh0ID0gb3MucGF0aC5qb2luKAogICAgICAgT1BUSU9OUy5pbnB1dF90bXAsICJNRVRBIiwgInBhY2tfcmFkaW9pbWFnZXMudHh0IikKLSAgaWYgb3MucGF0aC5leGlzdHMocGFja19yYWRpb2ltYWdlcyk6Ci0gICAgd2l0aCBvcGVuKHBhY2tfcmFkaW9pbWFnZXMsICdyJykgYXMgZjoKLSAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQotICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgaW1nX25hbWUgPSBsaW5lLnN0cmlwKCkKLSAgICAgIF8sIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoaW1nX25hbWUpCi0gICAgICBpZiBub3QgZXh0OgotICAgICAgICBpbWdfbmFtZSArPSAiLmltZyIKLSAgICAgIHByZWJ1aWx0X3BhdGggPSBvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICJJTUFHRVMiLCBpbWdfbmFtZSkKLSAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHByZWJ1aWx0X3BhdGgpOgotICAgICAgICBwcmludCgiJXMgYWxyZWFkeSBleGlzdHMsIG5vIG5lZWQgdG8gb3ZlcndyaXRlLi4uIiAlIChpbWdfbmFtZSwpKQotICAgICAgICBjb250aW51ZQotCi0gICAgICBpbWdfcmFkaW9fcGF0aCA9IG9zLnBhdGguam9pbihPUFRJT05TLmlucHV0X3RtcCwgIlJBRElPIiwgaW1nX25hbWUpCi0gICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoaW1nX3JhZGlvX3BhdGgpLCBcCi0gICAgICAgICAgIkZhaWxlZCB0byBmaW5kICVzIGF0ICVzIiAlIChpbWdfbmFtZSwgaW1nX3JhZGlvX3BhdGgpCi0gICAgICBpZiBvdXRwdXRfemlwOgotICAgICAgICBjb21tb24uWmlwV3JpdGUob3V0cHV0X3ppcCwgaW1nX3JhZGlvX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oIklNQUdFUyIsIGltZ19uYW1lKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHNodXRpbC5jb3B5KGltZ19yYWRpb19wYXRoLCBwcmVidWlsdF9wYXRoKQorICBpZiBvcy5wYXRoLmV4aXN0cyhwYWNrX3JhZGlvaW1hZ2VzX3R4dCk6CisgICAgd2l0aCBvcGVuKHBhY2tfcmFkaW9pbWFnZXNfdHh0LCAncicpIGFzIGY6CisgICAgICBBZGRQYWNrUmFkaW9JbWFnZXMob3V0cHV0X3ppcCwgZi5yZWFkbGluZXMoKSkKIAogICBpZiBvdXRwdXRfemlwOgogICAgIGNvbW1vbi5aaXBDbG9zZShvdXRwdXRfemlwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL2Jsb2NraW1nZGlmZi5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy9ibG9ja2ltZ2RpZmYucHkKaW5kZXggMWVmNTVmZi4uMjRjNWIyZCAxMDA2NDQKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL2Jsb2NraW1nZGlmZi5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvYmxvY2tpbWdkaWZmLnB5CkBAIC0xNSw3ICsxNSw2IEBACiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKIGltcG9ydCBhcnJheQotaW1wb3J0IGNvbW1vbgogaW1wb3J0IGNvcHkKIGltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBoZWFwcQpAQCAtMjcsOSArMjYsMTAgQEAKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGhyZWFkaW5nCi0KIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlLCBPcmRlcmVkRGljdAogZnJvbSBoYXNobGliIGltcG9ydCBzaGExCisKK2ltcG9ydCBjb21tb24KIGZyb20gcmFuZ2VsaWIgaW1wb3J0IFJhbmdlU2V0CiAKIApAQCAtMTkxLDggKzE5MSw2IEBACiAgICAgc2VsZi50Z3Rfc2hhMSA9IHRndF9zaGExCiAgICAgc2VsZi5zcmNfc2hhMSA9IHNyY19zaGExCiAgICAgc2VsZi5zdHlsZSA9IHN0eWxlCi0gICAgc2VsZi5pbnRhY3QgPSAoZ2V0YXR0cih0Z3RfcmFuZ2VzLCAibW9ub3RvbmljIiwgRmFsc2UpIGFuZAotICAgICAgICAgICAgICAgICAgIGdldGF0dHIoc3JjX3JhbmdlcywgIm1vbm90b25pYyIsIEZhbHNlKSkKIAogICAgICMgV2UgdXNlIE9yZGVyZWREaWN0IHJhdGhlciB0aGFuIGRpY3Qgc28gdGhhdCB0aGUgb3V0cHV0IGlzIHJlcGVhdGFibGU7CiAgICAgIyBvdGhlcndpc2UgaXQgd291bGQgZGVwZW5kIG9uIHRoZSBoYXNoIHZhbHVlcyBvZiB0aGUgVHJhbnNmZXIgb2JqZWN0cy4KQEAgLTIzNywxOSArMjM1LDkzIEBACiBjbGFzcyBIZWFwSXRlbShvYmplY3QpOgogICBkZWYgX19pbml0X18oc2VsZiwgaXRlbSk6CiAgICAgc2VsZi5pdGVtID0gaXRlbQotICAgICMgTmVnYXRlIHRoZSBzY29yZSBzaW5jZSBweXRob24ncyBoZWFwIGlzIGEgbWluLWhlYXAgYW5kIHdlIHdhbnQKLSAgICAjIHRoZSBtYXhpbXVtIHNjb3JlLgorICAgICMgTmVnYXRlIHRoZSBzY29yZSBzaW5jZSBweXRob24ncyBoZWFwIGlzIGEgbWluLWhlYXAgYW5kIHdlIHdhbnQgdGhlCisgICAgIyBtYXhpbXVtIHNjb3JlLgogICAgIHNlbGYuc2NvcmUgPSAtaXRlbS5zY29yZQorCiAgIGRlZiBjbGVhcihzZWxmKToKICAgICBzZWxmLml0ZW0gPSBOb25lCisKICAgZGVmIF9fYm9vbF9fKHNlbGYpOgotICAgIHJldHVybiBzZWxmLml0ZW0gaXMgTm9uZQorICAgIHJldHVybiBzZWxmLml0ZW0gaXMgbm90IE5vbmUKKworICAjIFB5dGhvbiAyIHVzZXMgX19ub256ZXJvX18sIHdoaWxlIFB5dGhvbiAzIHVzZXMgX19ib29sX18uCisgIF9fbm9uemVyb19fID0gX19ib29sX18KKworICAjIFRoZSByZXN0IG9wZXJhdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcgZGVjb3JhdG9yLgogICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICByZXR1cm4gc2VsZi5zY29yZSA9PSBvdGhlci5zY29yZQorCiAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgogICAgIHJldHVybiBzZWxmLnNjb3JlIDw9IG90aGVyLnNjb3JlCiAKIAorY2xhc3MgSW1nZGlmZlN0YXRzKG9iamVjdCk6CisgICIiIkEgY2xhc3MgdGhhdCBjb2xsZWN0cyBpbWdkaWZmIHN0YXRzLgorCisgIEl0IGtlZXBzIHRyYWNrIG9mIHRoZSBmaWxlcyB0aGF0IHdpbGwgYmUgYXBwbGllZCBpbWdkaWZmIHdoaWxlIGdlbmVyYXRpbmcKKyAgQmxvY2tJbWFnZURpZmYuIEl0IGFsc28gbG9ncyB0aGUgb25lcyB0aGF0IGNhbm5vdCB1c2UgaW1nZGlmZiwgd2l0aCBzcGVjaWZpYworICByZWFzb25zLiBUaGUgc3RhdHMgaXMgb25seSBtZWFuaW5nZnVsIHdoZW4gaW1nZGlmZiBub3QgYmVpbmcgZGlzYWJsZWQgYnkgdGhlCisgIGNhbGxlciBvZiBCbG9ja0ltYWdlRGlmZi4gSW4gYWRkaXRpb24sIG9ubHkgZmlsZXMgd2l0aCBzdXBwb3J0ZWQgdHlwZXMKKyAgKEJsb2NrSW1hZ2VEaWZmLkZpbGVUeXBlU3VwcG9ydGVkQnlJbWdkaWZmKCkpIGFyZSBhbGxvd2VkIHRvIGJlIGxvZ2dlZC4KKyAgIiIiCisKKyAgVVNFRF9JTUdESUZGID0gIkFQSyBmaWxlcyBkaWZmJ2Qgd2l0aCBpbWdkaWZmIgorICBVU0VEX0lNR0RJRkZfTEFSR0VfQVBLID0gIkxhcmdlIEFQSyBmaWxlcyBzcGxpdCBhbmQgZGlmZidkIHdpdGggaW1nZGlmZiIKKworICAjIFJlYXNvbnMgZm9yIG5vdCBhcHBseWluZyBpbWdkaWZmIG9uIEFQS3MuCisgIFNLSVBQRURfVFJJTU1FRCA9ICJOb3QgdXNlZCBpbWdkaWZmIGR1ZSB0byB0cmltbWVkIFJhbmdlU2V0IgorICBTS0lQUEVEX05PTk1PTk9UT05JQyA9ICJOb3QgdXNlZCBpbWdkaWZmIGR1ZSB0byBoYXZpbmcgbm9uLW1vbm90b25pYyByYW5nZXMiCisgIFNLSVBQRURfU0hBUkVEX0JMT0NLUyA9ICJOb3QgdXNlZCBpbWdkaWZmIGR1ZSB0byB1c2luZyBzaGFyZWQgYmxvY2tzIgorICBTS0lQUEVEX0lOQ09NUExFVEUgPSAiTm90IHVzZWQgaW1nZGlmZiBkdWUgdG8gaW5jb21wbGV0ZSBSYW5nZVNldCIKKworICAjIFRoZSBsaXN0IG9mIHZhbGlkIHJlYXNvbnMsIHdoaWNoIHdpbGwgYWxzbyBiZSB0aGUgZHVtcGVkIG9yZGVyIGluIGEgcmVwb3J0LgorICBSRUFTT05TID0gKAorICAgICAgVVNFRF9JTUdESUZGLAorICAgICAgVVNFRF9JTUdESUZGX0xBUkdFX0FQSywKKyAgICAgIFNLSVBQRURfVFJJTU1FRCwKKyAgICAgIFNLSVBQRURfTk9OTU9OT1RPTklDLAorICAgICAgU0tJUFBFRF9TSEFSRURfQkxPQ0tTLAorICAgICAgU0tJUFBFRF9JTkNPTVBMRVRFLAorICApCisKKyAgZGVmICBfX2luaXRfXyhzZWxmKToKKyAgICBzZWxmLnN0YXRzID0ge30KKworICBkZWYgTG9nKHNlbGYsIGZpbGVuYW1lLCByZWFzb24pOgorICAgICIiIkxvZ3Mgd2h5IGltZ2RpZmYgY2FuIG9yIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBnaXZlbiBmaWxlbmFtZS4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHN0cmluZy4KKyAgICAgIHJlYXNvbjogT25lIG9mIHRoZSByZWFzb24gY29uc3RhbnRzIGxpc3RlZCBpbiBSRUFTT05TLgorCisgICAgUmFpc2VzOgorICAgICAgQXNzZXJ0aW9uRXJyb3I6IE9uIHVuc3VwcG9ydGVkIGZpbGV0eXBlcyBvciBpbnZhbGlkIHJlYXNvbi4KKyAgICAiIiIKKyAgICBhc3NlcnQgQmxvY2tJbWFnZURpZmYuRmlsZVR5cGVTdXBwb3J0ZWRCeUltZ2RpZmYoZmlsZW5hbWUpCisgICAgYXNzZXJ0IHJlYXNvbiBpbiBzZWxmLlJFQVNPTlMKKworICAgIGlmIHJlYXNvbiBub3QgaW4gc2VsZi5zdGF0czoKKyAgICAgIHNlbGYuc3RhdHNbcmVhc29uXSA9IHNldCgpCisgICAgc2VsZi5zdGF0c1tyZWFzb25dLmFkZChmaWxlbmFtZSkKKworICBkZWYgUmVwb3J0KHNlbGYpOgorICAgICIiIlByaW50cyBhIHJlcG9ydCBvZiB0aGUgY29sbGVjdGVkIGltZ2RpZmYgc3RhdHMuIiIiCisKKyAgICBkZWYgcHJpbnRfaGVhZGVyKGhlYWRlciwgc2VwYXJhdG9yKToKKyAgICAgIHByaW50KGhlYWRlcikKKyAgICAgIHByaW50KHNlcGFyYXRvciAqIGxlbihoZWFkZXIpICsgJ1xuJykKKworICAgIHByaW50X2hlYWRlcignICBJbWdkaWZmIFN0YXRzIFJlcG9ydCAgJywgJz0nKQorICAgIGZvciBrZXkgaW4gc2VsZi5SRUFTT05TOgorICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLnN0YXRzOgorICAgICAgICBjb250aW51ZQorICAgICAgdmFsdWVzID0gc2VsZi5zdGF0c1trZXldCisgICAgICBzZWN0aW9uX2hlYWRlciA9ICcge30gKGNvdW50OiB7fSkgJy5mb3JtYXQoa2V5LCBsZW4odmFsdWVzKSkKKyAgICAgIHByaW50X2hlYWRlcihzZWN0aW9uX2hlYWRlciwgJy0nKQorICAgICAgcHJpbnQoJycuam9pbihbJyAge31cbicuZm9ybWF0KG5hbWUpIGZvciBuYW1lIGluIHZhbHVlc10pKQorCisKICMgQmxvY2tJbWFnZURpZmYgd29ya3Mgb24gdHdvIGltYWdlIG9iamVjdHMuICBBbiBpbWFnZSBvYmplY3QgaXMKICMgYW55dGhpbmcgdGhhdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CiAjCkBAIC0zMDUsNiArMzc3LDcgQEAKICAgICBzZWxmLnRvdWNoZWRfc3JjX3JhbmdlcyA9IFJhbmdlU2V0KCkKICAgICBzZWxmLnRvdWNoZWRfc3JjX3NoYTEgPSBOb25lCiAgICAgc2VsZi5kaXNhYmxlX2ltZ2RpZmYgPSBkaXNhYmxlX2ltZ2RpZmYKKyAgICBzZWxmLmltZ2RpZmZfc3RhdHMgPSBJbWdkaWZmU3RhdHMoKSBpZiBub3QgZGlzYWJsZV9pbWdkaWZmIGVsc2UgTm9uZQogCiAgICAgYXNzZXJ0IHZlcnNpb24gaW4gKDMsIDQpCiAKQEAgLTMyNiw2ICszOTksNjUgQEAKICAgZGVmIG1heF9zdGFzaGVkX3NpemUoc2VsZik6CiAgICAgcmV0dXJuIHNlbGYuX21heF9zdGFzaGVkX3NpemUKIAorICBAc3RhdGljbWV0aG9kCisgIGRlZiBGaWxlVHlwZVN1cHBvcnRlZEJ5SW1nZGlmZihmaWxlbmFtZSk6CisgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBmaWxlIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IGltZ2RpZmYuIiIiCisgICAgcmV0dXJuIGZpbGVuYW1lLmxvd2VyKCkuZW5kc3dpdGgoKCcuYXBrJywgJy5qYXInLCAnLnppcCcpKQorCisgIGRlZiBDYW5Vc2VJbWdkaWZmKHNlbGYsIG5hbWUsIHRndF9yYW5nZXMsIHNyY19yYW5nZXMsIGxhcmdlX2Fwaz1GYWxzZSk6CisgICAgIiIiQ2hlY2tzIHdoZXRoZXIgd2UgY2FuIGFwcGx5IGltZ2RpZmYgZm9yIHRoZSBnaXZlbiBSYW5nZVNldHMuCisKKyAgICBGb3IgZmlsZXMgaW4gWklQIGZvcm1hdCAoZS5nLiwgQVBLcywgSkFScywgZXRjLikgd2Ugd291bGQgbGlrZSB0byB1c2UKKyAgICAnaW1nZGlmZiAteicgaWYgcG9zc2libGUuIEJlY2F1c2UgaXQgdXN1YWxseSBwcm9kdWNlcyBzaWduaWZpY2FudGx5IHNtYWxsZXIKKyAgICBwYXRjaGVzIHRoYW4gYnNkaWZmLgorCisgICAgVGhpcyBpcyBwZXJtaXNzaWJsZSBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQuCisgICAgICAtIFRoZSBpbWdkaWZmIGhhc24ndCBiZWVuIGRpc2FibGVkIGJ5IHRoZSBjYWxsZXIgKGUuZy4gc3F1YXNoZnMpOworICAgICAgLSBUaGUgZmlsZSB0eXBlIGlzIHN1cHBvcnRlZCBieSBpbWdkaWZmOworICAgICAgLSBUaGUgc291cmNlIGFuZCB0YXJnZXQgYmxvY2tzIGFyZSBtb25vdG9uaWMgKGkuZS4gdGhlIGRhdGEgaXMgc3RvcmVkIHdpdGgKKyAgICAgICAgYmxvY2tzIGluIGluY3JlYXNpbmcgb3JkZXIpOworICAgICAgLSBCb3RoIGZpbGVzIGRvbid0IGNvbnRhaW4gc2hhcmVkIGJsb2NrczsKKyAgICAgIC0gQm90aCBmaWxlcyBoYXZlIGNvbXBsZXRlIGxpc3RzIG9mIGJsb2NrczsKKyAgICAgIC0gV2UgaGF2ZW4ndCByZW1vdmVkIGFueSBibG9ja3MgZnJvbSB0aGUgc291cmNlIHNldC4KKworICAgIElmIGFsbCB0aGVzZSBjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQsIGNvbmNhdGVuYXRpbmcgYWxsIHRoZSBibG9ja3MgaW4gdGhlCisgICAgUmFuZ2VTZXQgaW4gb3JkZXIgd2lsbCBwcm9kdWNlIGEgdmFsaWQgWklQIGZpbGUgKHBsdXMgcG9zc2libHkgZXh0cmEgemVyb3MKKyAgICBpbiB0aGUgbGFzdCBibG9jaykuIGltZ2RpZmYgaXMgZmluZSB3aXRoIGV4dHJhIHplcm9zIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisKKyAgICBBcmdzOgorICAgICAgbmFtZTogVGhlIGZpbGVuYW1lIHRvIGJlIGRpZmYnZC4KKyAgICAgIHRndF9yYW5nZXM6IFRoZSB0YXJnZXQgUmFuZ2VTZXQuCisgICAgICBzcmNfcmFuZ2VzOiBUaGUgc291cmNlIFJhbmdlU2V0LgorICAgICAgbGFyZ2VfYXBrOiBXaGV0aGVyIHRoaXMgaXMgdG8gc3BsaXQgYSBsYXJnZSBBUEsuCisKKyAgICBSZXR1cm5zOgorICAgICAgQSBib29sZWFuIHJlc3VsdC4KKyAgICAiIiIKKyAgICBpZiBzZWxmLmRpc2FibGVfaW1nZGlmZiBvciBub3Qgc2VsZi5GaWxlVHlwZVN1cHBvcnRlZEJ5SW1nZGlmZihuYW1lKToKKyAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgbm90IHRndF9yYW5nZXMubW9ub3RvbmljIG9yIG5vdCBzcmNfcmFuZ2VzLm1vbm90b25pYzoKKyAgICAgIHNlbGYuaW1nZGlmZl9zdGF0cy5Mb2cobmFtZSwgSW1nZGlmZlN0YXRzLlNLSVBQRURfTk9OTU9OT1RPTklDKQorICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiAodGd0X3Jhbmdlcy5leHRyYS5nZXQoJ3VzZXNfc2hhcmVkX2Jsb2NrcycpIG9yCisgICAgICAgIHNyY19yYW5nZXMuZXh0cmEuZ2V0KCd1c2VzX3NoYXJlZF9ibG9ja3MnKSk6CisgICAgICBzZWxmLmltZ2RpZmZfc3RhdHMuTG9nKG5hbWUsIEltZ2RpZmZTdGF0cy5TS0lQUEVEX1NIQVJFRF9CTE9DS1MpCisgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIHRndF9yYW5nZXMuZXh0cmEuZ2V0KCdpbmNvbXBsZXRlJykgb3Igc3JjX3Jhbmdlcy5leHRyYS5nZXQoJ2luY29tcGxldGUnKToKKyAgICAgIHNlbGYuaW1nZGlmZl9zdGF0cy5Mb2cobmFtZSwgSW1nZGlmZlN0YXRzLlNLSVBQRURfSU5DT01QTEVURSkKKyAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgdGd0X3Jhbmdlcy5leHRyYS5nZXQoJ3RyaW1tZWQnKSBvciBzcmNfcmFuZ2VzLmV4dHJhLmdldCgndHJpbW1lZCcpOgorICAgICAgc2VsZi5pbWdkaWZmX3N0YXRzLkxvZyhuYW1lLCBJbWdkaWZmU3RhdHMuU0tJUFBFRF9UUklNTUVEKQorICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZWFzb24gPSAoSW1nZGlmZlN0YXRzLlVTRURfSU1HRElGRl9MQVJHRV9BUEsgaWYgbGFyZ2VfYXBrCisgICAgICAgICAgICAgIGVsc2UgSW1nZGlmZlN0YXRzLlVTRURfSU1HRElGRikKKyAgICBzZWxmLmltZ2RpZmZfc3RhdHMuTG9nKG5hbWUsIHJlYXNvbikKKyAgICByZXR1cm4gVHJ1ZQorCiAgIGRlZiBDb21wdXRlKHNlbGYsIHByZWZpeCk6CiAgICAgIyBXaGVuIGxvb2tpbmcgZm9yIGEgc291cmNlIGZpbGUgdG8gdXNlIGFzIHRoZSBkaWZmIGlucHV0IGZvciBhCiAgICAgIyB0YXJnZXQgZmlsZSwgd2UgdHJ5OgpAQCAtMzU0LDEwICs0ODYsMTUgQEAKIAogICAgICMgRG91YmxlLWNoZWNrIG91ciB3b3JrLgogICAgIHNlbGYuQXNzZXJ0U2VxdWVuY2VHb29kKCkKKyAgICBzZWxmLkFzc2VydFNoYTFHb29kKCkKIAogICAgIHNlbGYuQ29tcHV0ZVBhdGNoZXMocHJlZml4KQogICAgIHNlbGYuV3JpdGVUcmFuc2ZlcnMocHJlZml4KQogCisgICAgIyBSZXBvcnQgdGhlIGltZ2RpZmYgc3RhdHMuCisgICAgaWYgY29tbW9uLk9QVElPTlMudmVyYm9zZSBhbmQgbm90IHNlbGYuZGlzYWJsZV9pbWdkaWZmOgorICAgICAgc2VsZi5pbWdkaWZmX3N0YXRzLlJlcG9ydCgpCisKICAgZGVmIFdyaXRlVHJhbnNmZXJzKHNlbGYsIHByZWZpeCk6CiAgICAgZGVmIFdyaXRlU3BsaXRUcmFuc2ZlcnMob3V0LCBzdHlsZSwgdGFyZ2V0X2Jsb2Nrcyk6CiAgICAgICAiIiJMaW1pdCB0aGUgc2l6ZSBvZiBvcGVyYW5kIGluIGNvbW1hbmQgJ25ldycgYW5kICd6ZXJvJyB0byAxMDI0IGJsb2Nrcy4KQEAgLTQxMCw3ICs1NDcsNyBAQAogICAgICAgIyAgIDwjIGJsb2Nrcz4gLSA8c3Rhc2ggcmVmcy4uLj4KIAogICAgICAgc2l6ZSA9IHhmLnNyY19yYW5nZXMuc2l6ZSgpCi0gICAgICBzcmNfc3RyID0gW3N0cihzaXplKV0KKyAgICAgIHNyY19zdHJfYnVmZmVyID0gW3N0cihzaXplKV0KIAogICAgICAgdW5zdGFzaGVkX3NyY19yYW5nZXMgPSB4Zi5zcmNfcmFuZ2VzCiAgICAgICBtYXBwZWRfc3Rhc2hlcyA9IFtdCkBAIC00MjAsNyArNTU3LDcgQEAKICAgICAgICAgc3IgPSB4Zi5zcmNfcmFuZ2VzLm1hcF93aXRoaW4oc3IpCiAgICAgICAgIG1hcHBlZF9zdGFzaGVzLmFwcGVuZChzcikKICAgICAgICAgYXNzZXJ0IHNoIGluIHN0YXNoZXMKLSAgICAgICAgc3JjX3N0ci5hcHBlbmQoIiVzOiVzIiAlIChzaCwgc3IudG9fc3RyaW5nX3JhdygpKSkKKyAgICAgICAgc3JjX3N0cl9idWZmZXIuYXBwZW5kKCIlczolcyIgJSAoc2gsIHNyLnRvX3N0cmluZ19yYXcoKSkpCiAgICAgICAgIHN0YXNoZXNbc2hdIC09IDEKICAgICAgICAgaWYgc3Rhc2hlc1tzaF0gPT0gMDoKICAgICAgICAgICBmcmVlX3N0cmluZy5hcHBlbmQoImZyZWUgJXNcbiIgJSAoc2gsKSkKQEAgLTQyOCwxNyArNTY1LDE3IEBACiAgICAgICAgICAgc3Rhc2hlcy5wb3Aoc2gpCiAKICAgICAgIGlmIHVuc3Rhc2hlZF9zcmNfcmFuZ2VzOgotICAgICAgICBzcmNfc3RyLmluc2VydCgxLCB1bnN0YXNoZWRfc3JjX3Jhbmdlcy50b19zdHJpbmdfcmF3KCkpCisgICAgICAgIHNyY19zdHJfYnVmZmVyLmluc2VydCgxLCB1bnN0YXNoZWRfc3JjX3Jhbmdlcy50b19zdHJpbmdfcmF3KCkpCiAgICAgICAgIGlmIHhmLnVzZV9zdGFzaDoKICAgICAgICAgICBtYXBwZWRfdW5zdGFzaGVkID0geGYuc3JjX3Jhbmdlcy5tYXBfd2l0aGluKHVuc3Rhc2hlZF9zcmNfcmFuZ2VzKQotICAgICAgICAgIHNyY19zdHIuaW5zZXJ0KDIsIG1hcHBlZF91bnN0YXNoZWQudG9fc3RyaW5nX3JhdygpKQorICAgICAgICAgIHNyY19zdHJfYnVmZmVyLmluc2VydCgyLCBtYXBwZWRfdW5zdGFzaGVkLnRvX3N0cmluZ19yYXcoKSkKICAgICAgICAgICBtYXBwZWRfc3Rhc2hlcy5hcHBlbmQobWFwcGVkX3Vuc3Rhc2hlZCkKICAgICAgICAgICBzZWxmLkFzc2VydFBhcnRpdGlvbihSYW5nZVNldChkYXRhPSgwLCBzaXplKSksIG1hcHBlZF9zdGFzaGVzKQogICAgICAgZWxzZToKLSAgICAgICAgc3JjX3N0ci5pbnNlcnQoMSwgIi0iKQorICAgICAgICBzcmNfc3RyX2J1ZmZlci5pbnNlcnQoMSwgIi0iKQogICAgICAgICBzZWxmLkFzc2VydFBhcnRpdGlvbihSYW5nZVNldChkYXRhPSgwLCBzaXplKSksIG1hcHBlZF9zdGFzaGVzKQogCi0gICAgICBzcmNfc3RyID0gIiAiLmpvaW4oc3JjX3N0cikKKyAgICAgIHNyY19zdHIgPSAiICIuam9pbihzcmNfc3RyX2J1ZmZlcikKIAogICAgICAgIyB2ZXJzaW9uIDMrOgogICAgICAgIyAgIHplcm8gPHJhbmdlc2V0PgpAQCAtNTU5LDExICs2OTYsMTEgQEAKICAgICAgIG1heF9hbGxvd2VkID0gT1BUSU9OUy5jYWNoZV9zaXplICogT1BUSU9OUy5zdGFzaF90aHJlc2hvbGQKICAgICAgIHByaW50KCJtYXggc3Rhc2hlZCBibG9ja3M6ICVkICAoJWQgYnl0ZXMpLCAiCiAgICAgICAgICAgICAibGltaXQ6ICVkIGJ5dGVzICglLjJmJSUpXG4iICUgKAotICAgICAgICAgICAgbWF4X3N0YXNoZWRfYmxvY2tzLCBzZWxmLl9tYXhfc3Rhc2hlZF9zaXplLCBtYXhfYWxsb3dlZCwKLSAgICAgICAgICAgIHNlbGYuX21heF9zdGFzaGVkX3NpemUgKiAxMDAuMCAvIG1heF9hbGxvd2VkKSkKKyAgICAgICAgICAgICAgICBtYXhfc3Rhc2hlZF9ibG9ja3MsIHNlbGYuX21heF9zdGFzaGVkX3NpemUsIG1heF9hbGxvd2VkLAorICAgICAgICAgICAgICAgIHNlbGYuX21heF9zdGFzaGVkX3NpemUgKiAxMDAuMCAvIG1heF9hbGxvd2VkKSkKICAgICBlbHNlOgogICAgICAgcHJpbnQoIm1heCBzdGFzaGVkIGJsb2NrczogJWQgICglZCBieXRlcyksIGxpbWl0OiA8dW5rbm93bj5cbiIgJSAoCi0gICAgICAgICAgICBtYXhfc3Rhc2hlZF9ibG9ja3MsIHNlbGYuX21heF9zdGFzaGVkX3NpemUpKQorICAgICAgICAgIG1heF9zdGFzaGVkX2Jsb2Nrcywgc2VsZi5fbWF4X3N0YXNoZWRfc2l6ZSkpCiAKICAgZGVmIFJldmlzZVN0YXNoU2l6ZShzZWxmKToKICAgICBwcmludCgiUmV2aXNpbmcgc3Rhc2ggc2l6ZS4uLiIpCkBAIC03MDMsMjggKzg0MCwxMyBAQAogICAgICAgICAgICAgICAjIHRyYW5zZmVyIGlzIGludGFjdC4KICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmRpc2FibGVfaW1nZGlmZgogICAgICAgICAgICAgICBpbWdkaWZmID0gVHJ1ZQotICAgICAgICAgICAgICBpZiBub3QgeGYuaW50YWN0OgorICAgICAgICAgICAgICBpZiAoeGYuc3JjX3Jhbmdlcy5leHRyYS5nZXQoJ3RyaW1tZWQnKSBvcgorICAgICAgICAgICAgICAgICAgeGYudGd0X3Jhbmdlcy5leHRyYS5nZXQoJ3RyaW1tZWQnKSk6CiAgICAgICAgICAgICAgICAgaW1nZGlmZiA9IEZhbHNlCiAgICAgICAgICAgICAgICAgeGYucGF0Y2ggPSBOb25lCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAjIEZvciBmaWxlcyBpbiB6aXAgZm9ybWF0IChlZywgQVBLcywgSkFScywgZXRjLikgd2Ugd291bGQKLSAgICAgICAgICAgICAgIyBsaWtlIHRvIHVzZSBpbWdkaWZmIC16IGlmIHBvc3NpYmxlIChiZWNhdXNlIGl0IHVzdWFsbHkKLSAgICAgICAgICAgICAgIyBwcm9kdWNlcyBzaWduaWZpY2FudGx5IHNtYWxsZXIgcGF0Y2hlcyB0aGFuIGJzZGlmZikuCi0gICAgICAgICAgICAgICMgVGhpcyBpcyBwZXJtaXNzaWJsZSBpZjoKLSAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAjICAtIGltZ2RpZmYgaXMgbm90IGRpc2FibGVkLCBhbmQKLSAgICAgICAgICAgICAgIyAgLSB0aGUgc291cmNlIGFuZCB0YXJnZXQgZmlsZXMgYXJlIG1vbm90b25pYyAoaWUsIHRoZQotICAgICAgICAgICAgICAjICAgIGRhdGEgaXMgc3RvcmVkIHdpdGggYmxvY2tzIGluIGluY3JlYXNpbmcgb3JkZXIpLCBhbmQKLSAgICAgICAgICAgICAgIyAgLSB3ZSBoYXZlbid0IHJlbW92ZWQgYW55IGJsb2NrcyBmcm9tIHRoZSBzb3VyY2Ugc2V0LgotICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICMgSWYgdGhlc2UgY29uZGl0aW9ucyBhcmUgc2F0aXNmaWVkIHRoZW4gYXBwZW5kaW5nIGFsbCB0aGUKLSAgICAgICAgICAgICAgIyBibG9ja3MgaW4gdGhlIHNldCB0b2dldGhlciBpbiBvcmRlciB3aWxsIHByb2R1Y2UgYSB2YWxpZAotICAgICAgICAgICAgICAjIHppcCBmaWxlIChwbHVzIHBvc3NpYmx5IGV4dHJhIHplcm9zIGluIHRoZSBsYXN0IGJsb2NrKSwKLSAgICAgICAgICAgICAgIyB3aGljaCBpcyB3aGF0IGltZ2RpZmYgbmVlZHMgdG8gb3BlcmF0ZS4gIChpbWdkaWZmIGlzCi0gICAgICAgICAgICAgICMgZmluZSB3aXRoIGV4dHJhIHplcm9zIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuKQotICAgICAgICAgICAgICBpbWdkaWZmID0gKG5vdCBzZWxmLmRpc2FibGVfaW1nZGlmZiBhbmQgeGYuaW50YWN0IGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgIHhmLnRndF9uYW1lLnNwbGl0KCIuIilbLTFdLmxvd2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbiAoImFwayIsICJqYXIiLCAiemlwIikpCisgICAgICAgICAgICAgIGltZ2RpZmYgPSBzZWxmLkNhblVzZUltZ2RpZmYoCisgICAgICAgICAgICAgICAgICB4Zi50Z3RfbmFtZSwgeGYudGd0X3JhbmdlcywgeGYuc3JjX3JhbmdlcykKICAgICAgICAgICAgIHhmLnN0eWxlID0gImltZ2RpZmYiIGlmIGltZ2RpZmYgZWxzZSAiYnNkaWZmIgogICAgICAgICAgICAgZGlmZl9xdWV1ZS5hcHBlbmQoKGluZGV4LCBpbWdkaWZmLCBwYXRjaF9udW0pKQogICAgICAgICAgICAgcGF0Y2hfbnVtICs9IDEKQEAgLTc0MSwxMCArODYzLDYgQEAKICAgICAgIGRpZmZfdG90YWwgPSBsZW4oZGlmZl9xdWV1ZSkKICAgICAgIHBhdGNoZXMgPSBbTm9uZV0gKiBkaWZmX3RvdGFsCiAgICAgICBlcnJvcl9tZXNzYWdlcyA9IFtdCi0gICAgICB3YXJuaW5nX21lc3NhZ2VzID0gW10KLSAgICAgIGlmIHN5cy5zdGRvdXQuaXNhdHR5KCk6Ci0gICAgICAgIGdsb2JhbCBkaWZmX2RvbmUKLSAgICAgICAgZGlmZl9kb25lID0gMAogCiAgICAgICAjIFVzaW5nIG11bHRpcHJvY2Vzc2luZyBkb2Vzbid0IGdpdmUgYWRkaXRpb25hbCBiZW5lZml0cywgZHVlIHRvIHRoZQogICAgICAgIyBwYXR0ZXJuIG9mIHRoZSBjb2RlLiBUaGUgZGlmZmluZyB3b3JrIGlzIGRvbmUgYnkgc3VicHJvY2Vzcy5jYWxsLCB3aGljaApAQCAtNzYwLDIyICs4NzgsMjcgQEAKICAgICAgICAgICAgIGlmIG5vdCBkaWZmX3F1ZXVlOgogICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIHhmX2luZGV4LCBpbWdkaWZmLCBwYXRjaF9pbmRleCA9IGRpZmZfcXVldWUucG9wKCkKKyAgICAgICAgICAgIHhmID0gc2VsZi50cmFuc2ZlcnNbeGZfaW5kZXhdCiAKLSAgICAgICAgICB4ZiA9IHNlbGYudHJhbnNmZXJzW3hmX2luZGV4XQorICAgICAgICAgICAgaWYgc3lzLnN0ZG91dC5pc2F0dHkoKToKKyAgICAgICAgICAgICAgZGlmZl9sZWZ0ID0gbGVuKGRpZmZfcXVldWUpCisgICAgICAgICAgICAgIHByb2dyZXNzID0gKGRpZmZfdG90YWwgLSBkaWZmX2xlZnQpICogMTAwIC8gZGlmZl90b3RhbAorICAgICAgICAgICAgICAjICdcMDMzW0snIGlzIHRvIGNsZWFyIHRvIEVPTC4KKyAgICAgICAgICAgICAgcHJpbnQoJyBbJTNkJSVdICVzXDAzM1tLJyAlIChwcm9ncmVzcywgeGYudGd0X25hbWUpLCBlbmQ9J1xyJykKKyAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisKICAgICAgICAgICBwYXRjaCA9IHhmLnBhdGNoCiAgICAgICAgICAgaWYgbm90IHBhdGNoOgogICAgICAgICAgICAgc3JjX3JhbmdlcyA9IHhmLnNyY19yYW5nZXMKICAgICAgICAgICAgIHRndF9yYW5nZXMgPSB4Zi50Z3RfcmFuZ2VzCiAKLSAgICAgICAgICAgICMgTmVlZHMgbG9jayBzaW5jZSBXcml0ZVJhbmdlRGF0YVRvRmQoKSBpcyBzdGF0ZWZ1bCAoY2FsbGluZyBzZWVrKS4KLSAgICAgICAgICAgIHdpdGggbG9jazoKLSAgICAgICAgICAgICAgc3JjX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ic3JjLSIpCi0gICAgICAgICAgICAgIHdpdGggb3BlbihzcmNfZmlsZSwgIndiIikgYXMgZmQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5zcmMuV3JpdGVSYW5nZURhdGFUb0ZkKHNyY19yYW5nZXMsIGZkKQorICAgICAgICAgICAgc3JjX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ic3JjLSIpCisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjX2ZpbGUsICJ3YiIpIGFzIGZkOgorICAgICAgICAgICAgICBzZWxmLnNyYy5Xcml0ZVJhbmdlRGF0YVRvRmQoc3JjX3JhbmdlcywgZmQpCiAKLSAgICAgICAgICAgICAgdGd0X2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0idGd0LSIpCi0gICAgICAgICAgICAgIHdpdGggb3Blbih0Z3RfZmlsZSwgIndiIikgYXMgZmQ6Ci0gICAgICAgICAgICAgICAgc2VsZi50Z3QuV3JpdGVSYW5nZURhdGFUb0ZkKHRndF9yYW5nZXMsIGZkKQorICAgICAgICAgICAgdGd0X2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0idGd0LSIpCisgICAgICAgICAgICB3aXRoIG9wZW4odGd0X2ZpbGUsICJ3YiIpIGFzIGZkOgorICAgICAgICAgICAgICBzZWxmLnRndC5Xcml0ZVJhbmdlRGF0YVRvRmQodGd0X3JhbmdlcywgZmQpCiAKICAgICAgICAgICAgIG1lc3NhZ2UgPSBbXQogICAgICAgICAgICAgdHJ5OgpAQCAtNzgzLDQwICs5MDYsMTYgQEAKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBnZW5lcmF0ZSAlcyBmb3IgJXM6IHRndD0lcywgc3JjPSVzOlxuJXMiICUgKAotICAgICAgICAgICAgICAgICAgImltZ2RpZmYiIGlmIGltZ2RpZmYgZWxzZSAiYnNkaWZmIiwKLSAgICAgICAgICAgICAgICAgIHhmLnRndF9uYW1lIGlmIHhmLnRndF9uYW1lID09IHhmLnNyY19uYW1lIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAiaW1nZGlmZiIgaWYgaW1nZGlmZiBlbHNlICJic2RpZmYiLAorICAgICAgICAgICAgICAgICAgICAgIHhmLnRndF9uYW1lIGlmIHhmLnRndF9uYW1lID09IHhmLnNyY19uYW1lIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICB4Zi50Z3RfbmFtZSArICIgKGZyb20gIiArIHhmLnNyY19uYW1lICsgIikiLAotICAgICAgICAgICAgICAgICAgeGYudGd0X3JhbmdlcywgeGYuc3JjX3JhbmdlcywgZS5tZXNzYWdlKSkKLSAgICAgICAgICAgICAgIyBUT0RPKGIvNjgwMTY3NjEpOiBCZXR0ZXIgaGFuZGxlIHRoZSBob2xlcyBpbiBta2UyZnMgY3JlYXRlZAotICAgICAgICAgICAgICAjIGltYWdlcy4KLSAgICAgICAgICAgICAgaWYgaW1nZGlmZjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICBwYXRjaCA9IGNvbXB1dGVfcGF0Y2goc3JjX2ZpbGUsIHRndF9maWxlLCBpbWdkaWZmPUZhbHNlKQotICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgIkZlbGwgYmFjayBhbmQgZ2VuZXJhdGVkIHdpdGggYnNkaWZmIGluc3RlYWQgZm9yICVzIiAlICgKLSAgICAgICAgICAgICAgICAgICAgICB4Zi50Z3RfbmFtZSwpKQotICAgICAgICAgICAgICAgICAgeGYuc3R5bGUgPSAiYnNkaWZmIgotICAgICAgICAgICAgICAgICAgd2l0aCBsb2NrOgotICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX21lc3NhZ2VzLmV4dGVuZChtZXNzYWdlKQotICAgICAgICAgICAgICAgICAgZGVsIG1lc3NhZ2VbOl0KLSAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgIkFsc28gZmFpbGVkIHRvIGdlbmVyYXRlIHdpdGggYnNkaWZmIGZvciAlczpcbiVzIiAlICgKLSAgICAgICAgICAgICAgICAgICAgICB4Zi50Z3RfbmFtZSwgZS5tZXNzYWdlKSkKLQorICAgICAgICAgICAgICAgICAgICAgIHhmLnRndF9yYW5nZXMsIHhmLnNyY19yYW5nZXMsIGUubWVzc2FnZSkpCiAgICAgICAgICAgICBpZiBtZXNzYWdlOgogICAgICAgICAgICAgICB3aXRoIGxvY2s6CiAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZXMuZXh0ZW5kKG1lc3NhZ2UpCiAKICAgICAgICAgICB3aXRoIGxvY2s6CiAgICAgICAgICAgICBwYXRjaGVzW3BhdGNoX2luZGV4XSA9ICh4Zl9pbmRleCwgcGF0Y2gpCi0gICAgICAgICAgICBpZiBzeXMuc3Rkb3V0LmlzYXR0eSgpOgotICAgICAgICAgICAgICBnbG9iYWwgZGlmZl9kb25lCi0gICAgICAgICAgICAgIGRpZmZfZG9uZSArPSAxCi0gICAgICAgICAgICAgIHByb2dyZXNzID0gZGlmZl9kb25lICogMTAwIC8gZGlmZl90b3RhbAotICAgICAgICAgICAgICAjICdcMDMzW0snIGlzIHRvIGNsZWFyIHRvIEVPTC4KLSAgICAgICAgICAgICAgcHJpbnQoJyBbJWQlJV0gJXNcMDMzW0snICUgKHByb2dyZXNzLCB4Zi50Z3RfbmFtZSksIGVuZD0nXHInKQotICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1kaWZmX3dvcmtlcikKICAgICAgICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi50aHJlYWRzKV0KQEAgLTgyOCwxMSArOTI3LDYgQEAKICAgICAgIGlmIHN5cy5zdGRvdXQuaXNhdHR5KCk6CiAgICAgICAgIHByaW50KCdcbicpCiAKLSAgICAgIGlmIHdhcm5pbmdfbWVzc2FnZXM6Ci0gICAgICAgIHByaW50KCdXQVJOSU5HOicpCi0gICAgICAgIHByaW50KCdcbicuam9pbih3YXJuaW5nX21lc3NhZ2VzKSkKLSAgICAgICAgcHJpbnQoJ1xuXG5cbicpCi0KICAgICAgIGlmIGVycm9yX21lc3NhZ2VzOgogICAgICAgICBwcmludCgnRVJST1I6JykKICAgICAgICAgcHJpbnQoJ1xuJy5qb2luKGVycm9yX21lc3NhZ2VzKSkKQEAgLTg1MywxMSArOTQ3LDI2IEBACiAgICAgICAgIGlmIGNvbW1vbi5PUFRJT05TLnZlcmJvc2U6CiAgICAgICAgICAgdGd0X3NpemUgPSB4Zi50Z3RfcmFuZ2VzLnNpemUoKSAqIHNlbGYudGd0LmJsb2Nrc2l6ZQogICAgICAgICAgIHByaW50KCIlMTBkICUxMGQgKCU2LjJmJSUpICU3cyAlcyAlcyAlcyIgJSAoCi0gICAgICAgICAgICAgICAgeGYucGF0Y2hfbGVuLCB0Z3Rfc2l6ZSwgeGYucGF0Y2hfbGVuICogMTAwLjAgLyB0Z3Rfc2l6ZSwKLSAgICAgICAgICAgICAgICB4Zi5zdHlsZSwKLSAgICAgICAgICAgICAgICB4Zi50Z3RfbmFtZSBpZiB4Zi50Z3RfbmFtZSA9PSB4Zi5zcmNfbmFtZSBlbHNlICgKLSAgICAgICAgICAgICAgICAgICAgeGYudGd0X25hbWUgKyAiIChmcm9tICIgKyB4Zi5zcmNfbmFtZSArICIpIiksCi0gICAgICAgICAgICAgICAgeGYudGd0X3JhbmdlcywgeGYuc3JjX3JhbmdlcykpCisgICAgICAgICAgICAgIHhmLnBhdGNoX2xlbiwgdGd0X3NpemUsIHhmLnBhdGNoX2xlbiAqIDEwMC4wIC8gdGd0X3NpemUsCisgICAgICAgICAgICAgIHhmLnN0eWxlLAorICAgICAgICAgICAgICB4Zi50Z3RfbmFtZSBpZiB4Zi50Z3RfbmFtZSA9PSB4Zi5zcmNfbmFtZSBlbHNlICgKKyAgICAgICAgICAgICAgICAgIHhmLnRndF9uYW1lICsgIiAoZnJvbSAiICsgeGYuc3JjX25hbWUgKyAiKSIpLAorICAgICAgICAgICAgICB4Zi50Z3RfcmFuZ2VzLCB4Zi5zcmNfcmFuZ2VzKSkKKworICBkZWYgQXNzZXJ0U2hhMUdvb2Qoc2VsZik6CisgICAgIiIiQ2hlY2sgdGhlIFNIQS0xIG9mIHRoZSBzcmMgJiB0Z3QgYmxvY2tzIGluIHRoZSB0cmFuc2ZlciBsaXN0LgorCisgICAgRG91YmxlIGNoZWNrIHRoZSBTSEEtMSB2YWx1ZSB0byBhdm9pZCB0aGUgaXNzdWUgaW4gYi83MTkwODcxMywgd2hlcmUKKyAgICBTcGFyc2VJbWFnZS5SYW5nZVNoYTEoKSBtZXNzZWQgdXAgd2l0aCB0aGUgaGFzaCBjYWxjdWxhdGlvbiBpbiBtdWx0aS10aHJlYWQKKyAgICBlbnZpcm9ubWVudC4gVGhhdCBzcGVjaWZpYyBwcm9ibGVtIGhhcyBiZWVuIGZpeGVkIGJ5IHByb3RlY3RpbmcgdGhlCisgICAgdW5kZXJseWluZyBnZW5lcmF0b3IgZnVuY3Rpb24gJ1NwYXJzZUltYWdlLl9HZXRSYW5nZURhdGEoKScgd2l0aCBsb2NrLgorICAgICIiIgorICAgIGZvciB4ZiBpbiBzZWxmLnRyYW5zZmVyczoKKyAgICAgIHRndF9zaGExID0gc2VsZi50Z3QuUmFuZ2VTaGExKHhmLnRndF9yYW5nZXMpCisgICAgICBhc3NlcnQgeGYudGd0X3NoYTEgPT0gdGd0X3NoYTEKKyAgICAgIGlmIHhmLnN0eWxlID09ICJkaWZmIjoKKyAgICAgICAgc3JjX3NoYTEgPSBzZWxmLnNyYy5SYW5nZVNoYTEoeGYuc3JjX3JhbmdlcykKKyAgICAgICAgYXNzZXJ0IHhmLnNyY19zaGExID09IHNyY19zaGExCiAKICAgZGVmIEFzc2VydFNlcXVlbmNlR29vZChzZWxmKToKICAgICAjIFNpbXVsYXRlIHRoZSBzZXF1ZW5jZXMgb2YgdHJhbnNmZXJzIHdlIHdpbGwgb3V0cHV0LCBhbmQgY2hlY2sgdGhhdDoKQEAgLTk1Niw3ICsxMDY1LDcgQEAKICAgICAgICAgICBvdXRfb2Zfb3JkZXIgKz0gMQogICAgICAgICAgIGFzc2VydCB4Zi5zcmNfcmFuZ2VzLm92ZXJsYXBzKHUudGd0X3JhbmdlcykKICAgICAgICAgICB4Zi5zcmNfcmFuZ2VzID0geGYuc3JjX3Jhbmdlcy5zdWJ0cmFjdCh1LnRndF9yYW5nZXMpCi0gICAgICAgICAgeGYuaW50YWN0ID0gRmFsc2UKKyAgICAgICAgICB4Zi5zcmNfcmFuZ2VzLmV4dHJhWyd0cmltbWVkJ10gPSBUcnVlCiAKICAgICAgIGlmIHhmLnN0eWxlID09ICJkaWZmIiBhbmQgbm90IHhmLnNyY19yYW5nZXM6CiAgICAgICAgICMgbm90aGluZyBsZWZ0IHRvIGRpZmYgZnJvbTsgdHJlYXQgYXMgbmV3IGRhdGEKQEAgLTEwNzUsNyArMTE4NCw4IEBACiAgICAgICB3aGlsZSBzaW5rczoKICAgICAgICAgbmV3X3NpbmtzID0gT3JkZXJlZERpY3QoKQogICAgICAgICBmb3IgdSBpbiBzaW5rczoKLSAgICAgICAgICBpZiB1IG5vdCBpbiBHOiBjb250aW51ZQorICAgICAgICAgIGlmIHUgbm90IGluIEc6CisgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgIHMyLmFwcGVuZGxlZnQodSkKICAgICAgICAgICBkZWwgR1t1XQogICAgICAgICAgIGZvciBpdSBpbiB1LmluY29taW5nOgpAQCAtMTA4OCw3ICsxMTk4LDggQEAKICAgICAgIHdoaWxlIHNvdXJjZXM6CiAgICAgICAgIG5ld19zb3VyY2VzID0gT3JkZXJlZERpY3QoKQogICAgICAgICBmb3IgdSBpbiBzb3VyY2VzOgotICAgICAgICAgIGlmIHUgbm90IGluIEc6IGNvbnRpbnVlCisgICAgICAgICAgaWYgdSBub3QgaW4gRzoKKyAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgczEuYXBwZW5kKHUpCiAgICAgICAgICAgZGVsIEdbdV0KICAgICAgICAgICBmb3IgaXUgaW4gdS5vdXRnb2luZzoKQEAgLTEwOTcsNyArMTIwOCw4IEBACiAgICAgICAgICAgICAgIG5ld19zb3VyY2VzW2l1XSA9IE5vbmUKICAgICAgICAgc291cmNlcyA9IG5ld19zb3VyY2VzCiAKLSAgICAgIGlmIG5vdCBHOiBicmVhaworICAgICAgaWYgbm90IEc6CisgICAgICAgIGJyZWFrCiAKICAgICAgICMgRmluZCB0aGUgImJlc3QiIHZlcnRleCB0byBwdXQgbmV4dC4gICJCZXN0IiBpcyB0aGUgb25lIHRoYXQKICAgICAgICMgbWF4aW1pemVzIHRoZSBuZXQgZGlmZmVyZW5jZSBpbiBzb3VyY2UgYmxvY2tzIHNhdmVkIHdlIGdldCBieQpAQCAtMTE1NCwxNCArMTI2NiwxNiBAQAogICAgICAgaW50ZXJzZWN0aW9ucyA9IE9yZGVyZWREaWN0KCkKICAgICAgIGZvciBzLCBlIGluIGEudGd0X3JhbmdlczoKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UocywgZSk6Ci0gICAgICAgICAgaWYgaSA+PSBsZW4oc291cmNlX3Jhbmdlcyk6IGJyZWFrCisgICAgICAgICAgaWYgaSA+PSBsZW4oc291cmNlX3Jhbmdlcyk6CisgICAgICAgICAgICBicmVhawogICAgICAgICAgICMgQWRkIGFsbCB0aGUgVHJhbnNmZXJzIGluIHNvdXJjZV9yYW5nZXNbaV0gdG8gdGhlIChvcmRlcmVkKSBzZXQuCiAgICAgICAgICAgaWYgc291cmNlX3Jhbmdlc1tpXSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGZvciBqIGluIHNvdXJjZV9yYW5nZXNbaV06CiAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnNbal0gPSBOb25lCiAKICAgICAgIGZvciBiIGluIGludGVyc2VjdGlvbnM6Ci0gICAgICAgIGlmIGEgaXMgYjogY29udGludWUKKyAgICAgICAgaWYgYSBpcyBiOgorICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgIyBJZiB0aGUgYmxvY2tzIHdyaXR0ZW4gYnkgQSBhcmUgcmVhZCBieSBCLCB0aGVuIEIgbmVlZHMgdG8gZ28gYmVmb3JlIEEuCiAgICAgICAgIGkgPSBhLnRndF9yYW5nZXMuaW50ZXJzZWN0KGIuc3JjX3JhbmdlcykKQEAgLTExNzgsOSArMTI5MiwyMiBAQAogICBkZWYgRmluZFRyYW5zZmVycyhzZWxmKToKICAgICAiIiJQYXJzZSB0aGUgZmlsZV9tYXAgdG8gZ2VuZXJhdGUgYWxsIHRoZSB0cmFuc2ZlcnMuIiIiCiAKLSAgICBkZWYgQWRkU3BsaXRUcmFuc2ZlcnModGd0X25hbWUsIHNyY19uYW1lLCB0Z3RfcmFuZ2VzLCBzcmNfcmFuZ2VzLCBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnlfaWQpOgotICAgICAgIiIiQWRkIG9uZSBvciBtdWx0aXBsZSBUcmFuc2ZlcigpcyBieSBzcGxpdHRpbmcgbGFyZ2UgZmlsZXMuIiIiCisgICAgZGVmIEFkZFNwbGl0VHJhbnNmZXJzV2l0aEZpeGVkU2l6ZUNodW5rcyh0Z3RfbmFtZSwgc3JjX25hbWUsIHRndF9yYW5nZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcmFuZ2VzLCBzdHlsZSwgYnlfaWQpOgorICAgICAgIiIiQWRkIG9uZSBvciBtdWx0aXBsZSBUcmFuc2ZlcigpcyBieSBzcGxpdHRpbmcgbGFyZ2UgZmlsZXMuCisKKyAgICAgIEZvciBCQk9UQSB2Mywgd2UgbmVlZCB0byBzdGFzaCBzb3VyY2UgYmxvY2tzIGZvciByZXN1bWFibGUgZmVhdHVyZS4KKyAgICAgIEhvd2V2ZXIsIHdpdGggdGhlIGdyb3d0aCBvZiBmaWxlIHNpemUgYW5kIHRoZSBzaHJpbmsgb2YgdGhlIGNhY2hlCisgICAgICBwYXJ0aXRpb24gc291cmNlIGJsb2NrcyBhcmUgdG9vIGxhcmdlIHRvIGJlIHN0YXNoZWQuIElmIGEgZmlsZSBvY2N1cGllcworICAgICAgdG9vIG1hbnkgYmxvY2tzLCB3ZSBzcGxpdCBpdCBpbnRvIHNtYWxsZXIgcGllY2VzIGJ5IGdldHRpbmcgbXVsdGlwbGUKKyAgICAgIFRyYW5zZmVyKClzLgorCisgICAgICBUaGUgZG93bnNpZGUgaXMgdGhhdCBhZnRlciBzcGxpdHRpbmcsIHdlIG1heSBpbmNyZWFzZSB0aGUgcGFja2FnZSBzaXplCisgICAgICBzaW5jZSB0aGUgc3BsaXQgcGllY2VzIGRvbid0IGFsaWduIHdlbGwuIEFjY29yZGluZyB0byBvdXIgZXhwZXJpbWVudHMsCisgICAgICAxLzggb2YgdGhlIGNhY2hlIHNpemUgYXMgdGhlIHBlci1waWVjZSBsaW1pdCBhcHBlYXJzIHRvIGJlIG9wdGltYWwuCisgICAgICBDb21wYXJlZCB0byB0aGUgZml4ZWQgMTAyNC1ibG9jayBsaW1pdCwgaXQgcmVkdWNlcyB0aGUgb3ZlcmFsbCBwYWNrYWdlCisgICAgICBzaXplIGJ5IDMwJSBmb3Igdm9sYW50aXMsIGFuZCAyMCUgZm9yIGFuZ2xlciBhbmQgYnVsbGhlYWQuIiIiCisKICAgICAgIHBpZWNlcyA9IDAKICAgICAgIHdoaWxlICh0Z3RfcmFuZ2VzLnNpemUoKSA+IG1heF9ibG9ja3NfcGVyX3RyYW5zZmVyIGFuZAogICAgICAgICAgICAgIHNyY19yYW5nZXMuc2l6ZSgpID4gbWF4X2Jsb2Nrc19wZXJfdHJhbnNmZXIpOgpAQCAtMTIwNywyMSArMTMzNCwxNSBAQAogICAgICAgICAgICAgICAgICBzZWxmLnRndC5SYW5nZVNoYTEodGd0X3JhbmdlcyksIHNlbGYuc3JjLlJhbmdlU2hhMShzcmNfcmFuZ2VzKSwKICAgICAgICAgICAgICAgICAgc3R5bGUsIGJ5X2lkKQogCi0gICAgZGVmIEZpbmRaaXBzQW5kQWRkU3BsaXRUcmFuc2ZlcnModGd0X25hbWUsIHNyY19uYW1lLCB0Z3RfcmFuZ2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yYW5nZXMsIHN0eWxlLCBieV9pZCk6Ci0gICAgICAiIiJGaW5kIGFsbCB0aGUgemlwIGFyY2hpdmVzIGFuZCBhZGQgc3BsaXQgdHJhbnNmZXJzIGZvciB0aGUgb3RoZXIgZmlsZXMuCisgICAgZGVmIEFkZFNwbGl0VHJhbnNmZXJzKHRndF9uYW1lLCBzcmNfbmFtZSwgdGd0X3Jhbmdlcywgc3JjX3Jhbmdlcywgc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5X2lkKToKKyAgICAgICIiIkZpbmQgYWxsIHRoZSB6aXAgZmlsZXMgYW5kIHNwbGl0IHRoZSBvdGhlcnMgd2l0aCBhIGZpeGVkIGNodW5rIHNpemUuCiAKLSAgICAgIEZvciBCQk9UQSB2Mywgd2UgbmVlZCB0byBzdGFzaCBzb3VyY2UgYmxvY2tzIGZvciByZXN1bWFibGUgZmVhdHVyZS4KLSAgICAgIEhvd2V2ZXIsIHdpdGggdGhlIGdyb3d0aCBvZiBmaWxlIHNpemUgYW5kIHRoZSBzaHJpbmsgb2YgdGhlIGNhY2hlCi0gICAgICBwYXJ0aXRpb24gc291cmNlIGJsb2NrcyBhcmUgdG9vIGxhcmdlIHRvIGJlIHN0YXNoZWQuIElmIGEgZmlsZSBvY2N1cGllcwotICAgICAgdG9vIG1hbnkgYmxvY2tzLCB3ZSBzcGxpdCBpdCBpbnRvIHNtYWxsZXIgcGllY2VzIGJ5IGdldHRpbmcgbXVsdGlwbGUKLSAgICAgIFRyYW5zZmVyKClzLgotCi0gICAgICBUaGUgZG93bnNpZGUgaXMgdGhhdCBhZnRlciBzcGxpdHRpbmcsIHdlIG1heSBpbmNyZWFzZSB0aGUgcGFja2FnZSBzaXplCi0gICAgICBzaW5jZSB0aGUgc3BsaXQgcGllY2VzIGRvbid0IGFsaWduIHdlbGwuIEFjY29yZGluZyB0byBvdXIgZXhwZXJpbWVudHMsCi0gICAgICAxLzggb2YgdGhlIGNhY2hlIHNpemUgYXMgdGhlIHBlci1waWVjZSBsaW1pdCBhcHBlYXJzIHRvIGJlIG9wdGltYWwuCi0gICAgICBDb21wYXJlZCB0byB0aGUgZml4ZWQgMTAyNC1ibG9jayBsaW1pdCwgaXQgcmVkdWNlcyB0aGUgb3ZlcmFsbCBwYWNrYWdlCi0gICAgICBzaXplIGJ5IDMwJSBmb3Igdm9sYW50aXMsIGFuZCAyMCUgZm9yIGFuZ2xlciBhbmQgYnVsbGhlYWQuIiIiCisgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uc3RydWN0IGEgbGlzdCBvZiB6aXAgYXJjaGl2ZXMsIHdoaWNoIHdpbGwgbGF0ZXIgYmUKKyAgICAgIHNwbGl0IGJ5IGltZ2RpZmYgdG8gcmVkdWNlIHRoZSBmaW5hbCBwYXRjaCBzaXplLiBGb3IgdGhlIG90aGVyIGZpbGVzLAorICAgICAgd2Ugd2lsbCBwbGFpbmx5IHNwbGl0IHRoZW0gYmFzZWQgb24gYSBmaXhlZCBjaHVuayBzaXplIHdpdGggdGhlIHBvdGVudGlhbAorICAgICAgcGF0Y2ggc2l6ZSBwZW5hbHR5LgorICAgICAgIiIiCiAKICAgICAgIGFzc2VydCBzdHlsZSA9PSAiZGlmZiIKIApAQCAtMTIzMywxNiArMTM1NCwxNyBAQAogICAgICAgICAgICAgICAgICBzdHlsZSwgYnlfaWQpCiAgICAgICAgIHJldHVybgogCi0gICAgICBpZiB0Z3RfbmFtZS5zcGxpdCgiLiIpWy0xXS5sb3dlcigpIGluICgiYXBrIiwgImphciIsICJ6aXAiKToKLSAgICAgICAgc3BsaXRfZW5hYmxlID0gKG5vdCBzZWxmLmRpc2FibGVfaW1nZGlmZiBhbmQgc3JjX3Jhbmdlcy5tb25vdG9uaWMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICB0Z3RfcmFuZ2VzLm1vbm90b25pYykKLSAgICAgICAgaWYgc3BsaXRfZW5hYmxlIGFuZCAoc2VsZi50Z3QuUmFuZ2VTaGExKHRndF9yYW5nZXMpICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3JjLlJhbmdlU2hhMShzcmNfcmFuZ2VzKSk6CisgICAgICAjIFNwbGl0IGxhcmdlIEFQS3Mgd2l0aCBpbWdkaWZmLCBpZiBwb3NzaWJsZS4gV2UncmUgaW50ZW50aW9uYWxseSBjaGVja2luZworICAgICAgIyBmaWxlIHR5cGVzIG9uZSBtb3JlIHRpbWUgKENhblVzZUltZ2RpZmYoKSBjaGVja3MgdGhhdCBhcyB3ZWxsKSwgYmVmb3JlCisgICAgICAjIGNhbGxpbmcgdGhlIGNvc3RseSBSYW5nZVNoYTEoKXMuCisgICAgICBpZiAoc2VsZi5GaWxlVHlwZVN1cHBvcnRlZEJ5SW1nZGlmZih0Z3RfbmFtZSkgYW5kCisgICAgICAgICAgc2VsZi50Z3QuUmFuZ2VTaGExKHRndF9yYW5nZXMpICE9IHNlbGYuc3JjLlJhbmdlU2hhMShzcmNfcmFuZ2VzKSk6CisgICAgICAgIGlmIHNlbGYuQ2FuVXNlSW1nZGlmZih0Z3RfbmFtZSwgdGd0X3Jhbmdlcywgc3JjX3JhbmdlcywgVHJ1ZSk6CiAgICAgICAgICAgbGFyZ2VfYXBrcy5hcHBlbmQoKHRndF9uYW1lLCBzcmNfbmFtZSwgdGd0X3Jhbmdlcywgc3JjX3JhbmdlcykpCiAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgIEFkZFNwbGl0VHJhbnNmZXJzKHRndF9uYW1lLCBzcmNfbmFtZSwgdGd0X3Jhbmdlcywgc3JjX3JhbmdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLCBieV9pZCkKKyAgICAgIEFkZFNwbGl0VHJhbnNmZXJzV2l0aEZpeGVkU2l6ZUNodW5rcyh0Z3RfbmFtZSwgc3JjX25hbWUsIHRndF9yYW5nZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3Jhbmdlcywgc3R5bGUsIGJ5X2lkKQogCiAgICAgZGVmIEFkZFRyYW5zZmVyKHRndF9uYW1lLCBzcmNfbmFtZSwgdGd0X3Jhbmdlcywgc3JjX3Jhbmdlcywgc3R5bGUsIGJ5X2lkLAogICAgICAgICAgICAgICAgICAgICBzcGxpdD1GYWxzZSk6CkBAIC0xMjkwLDkgKzE0MTIsMTAgQEAKIAogICAgICAgICBpZiB0Z3RfY2hhbmdlZCA8IHRndF9zaXplICogY3JvcF90aHJlc2hvbGQ6CiAgICAgICAgICAgYXNzZXJ0IHRndF9jaGFuZ2VkICsgdGd0X3NraXBwZWQuc2l6ZSgpID09IHRndF9zaXplCi0gICAgICAgICAgcHJpbnQoJyUxMGQgJTEwZCAoJTYuMmYlJSkgJXMnICUgKHRndF9za2lwcGVkLnNpemUoKSwgdGd0X3NpemUsCi0gICAgICAgICAgICAgICAgdGd0X3NraXBwZWQuc2l6ZSgpICogMTAwLjAgLyB0Z3Rfc2l6ZSwgdGd0X25hbWUpKQotICAgICAgICAgIEZpbmRaaXBzQW5kQWRkU3BsaXRUcmFuc2ZlcnMoCisgICAgICAgICAgcHJpbnQoJyUxMGQgJTEwZCAoJTYuMmYlJSkgJXMnICUgKAorICAgICAgICAgICAgICB0Z3Rfc2tpcHBlZC5zaXplKCksIHRndF9zaXplLAorICAgICAgICAgICAgICB0Z3Rfc2tpcHBlZC5zaXplKCkgKiAxMDAuMCAvIHRndF9zaXplLCB0Z3RfbmFtZSkpCisgICAgICAgICAgQWRkU3BsaXRUcmFuc2ZlcnMoCiAgICAgICAgICAgICAgICIlcy1za2lwcGVkIiAlICh0Z3RfbmFtZSwpLAogICAgICAgICAgICAgICAiJXMtc2tpcHBlZCIgJSAoc3JjX25hbWUsKSwKICAgICAgICAgICAgICAgdGd0X3NraXBwZWQsIHNyY19za2lwcGVkLCBzdHlsZSwgYnlfaWQpCkBAIC0xMzA5LDcgKzE0MzIsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICMgQWRkIHRoZSB0cmFuc2ZlcihzKS4KLSAgICAgIEZpbmRaaXBzQW5kQWRkU3BsaXRUcmFuc2ZlcnMoCisgICAgICBBZGRTcGxpdFRyYW5zZmVycygKICAgICAgICAgICB0Z3RfbmFtZSwgc3JjX25hbWUsIHRndF9yYW5nZXMsIHNyY19yYW5nZXMsIHN0eWxlLCBieV9pZCkKIAogICAgIGRlZiBQYXJzZUFuZFZhbGlkYXRlU3BsaXRJbmZvKHBhdGNoX3NpemUsIHRndF9yYW5nZXMsIHNyY19yYW5nZXMsCkBAIC0xMzcwLDggKzE0OTMsOCBAQAogICAgICAgYXNzZXJ0IHBhdGNoX3N0YXJ0ID09IHBhdGNoX3NpemUKICAgICAgIHJldHVybiBzcGxpdF9pbmZvX2xpc3QKIAotICAgIGRlZiBBZGRTcGxpdFRyYW5zZmVyRm9yTGFyZ2VBcGtzKCk6Ci0gICAgICAiIiJDcmVhdGUgc3BsaXQgdHJhbnNmZXJzIGZvciBsYXJnZSBhcGsgZmlsZXMuCisgICAgZGVmIFNwbGl0TGFyZ2VBcGtzKCk6CisgICAgICAiIiJTcGxpdCB0aGUgbGFyZ2UgYXBrcyBmaWxlcy4KIAogICAgICAgRXhhbXBsZTogQ2hyb21lLmFwayB3aWxsIGJlIHNwbGl0IGludG8KICAgICAgICAgc3JjLTA6IENocm9tZS5hcGstMCwgdGd0LTA6IENocm9tZS5hcGstMApAQCAtMTM5NCwxMSArMTUxNywxMCBAQAogCiAgICAgICAgIHNyY19maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InNyYy0iKQogICAgICAgICB0Z3RfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUocHJlZml4PSJ0Z3QtIikKLSAgICAgICAgd2l0aCB0cmFuc2Zlcl9sb2NrOgotICAgICAgICAgIHdpdGggb3BlbihzcmNfZmlsZSwgIndiIikgYXMgc3JjX2ZkOgotICAgICAgICAgICAgc2VsZi5zcmMuV3JpdGVSYW5nZURhdGFUb0ZkKHNyY19yYW5nZXMsIHNyY19mZCkKLSAgICAgICAgICB3aXRoIG9wZW4odGd0X2ZpbGUsICJ3YiIpIGFzIHRndF9mZDoKLSAgICAgICAgICAgIHNlbGYudGd0LldyaXRlUmFuZ2VEYXRhVG9GZCh0Z3RfcmFuZ2VzLCB0Z3RfZmQpCisgICAgICAgIHdpdGggb3BlbihzcmNfZmlsZSwgIndiIikgYXMgc3JjX2ZkOgorICAgICAgICAgIHNlbGYuc3JjLldyaXRlUmFuZ2VEYXRhVG9GZChzcmNfcmFuZ2VzLCBzcmNfZmQpCisgICAgICAgIHdpdGggb3Blbih0Z3RfZmlsZSwgIndiIikgYXMgdGd0X2ZkOgorICAgICAgICAgIHNlbGYudGd0LldyaXRlUmFuZ2VEYXRhVG9GZCh0Z3RfcmFuZ2VzLCB0Z3RfZmQpCiAKICAgICAgICAgcGF0Y2hfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUocHJlZml4PSJwYXRjaC0iKQogICAgICAgICBwYXRjaF9pbmZvX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ic3BsaXRfaW5mby0iKQpAQCAtMTQwNiwxNSArMTUyOCwxMSBAQAogICAgICAgICAgICAgICAgIi0tYmxvY2stbGltaXQ9e30iLmZvcm1hdChtYXhfYmxvY2tzX3Blcl90cmFuc2ZlciksCiAgICAgICAgICAgICAgICAiLS1zcGxpdC1pbmZvPSIgKyBwYXRjaF9pbmZvX2ZpbGUsCiAgICAgICAgICAgICAgICBzcmNfZmlsZSwgdGd0X2ZpbGUsIHBhdGNoX2ZpbGVdCi0gICAgICAgIHAgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgcC5jb21tdW5pY2F0ZSgpCi0gICAgICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgotICAgICAgICAgIHByaW50KCJGYWlsZWQgdG8gY3JlYXRlIHBhdGNoIGJldHdlZW4ge30gYW5kIHt9LCIKLSAgICAgICAgICAgICAgICAiIGZhbGxpbmcgYmFjayB0byBic2RpZmYiLmZvcm1hdChzcmNfbmFtZSwgdGd0X25hbWUpKQotICAgICAgICAgIHdpdGggdHJhbnNmZXJfbG9jazoKLSAgICAgICAgICAgIEFkZFNwbGl0VHJhbnNmZXJzKHRndF9uYW1lLCBzcmNfbmFtZSwgdGd0X3Jhbmdlcywgc3JjX3JhbmdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWZmIiwgc2VsZi50cmFuc2ZlcnMpCi0gICAgICAgICAgY29udGludWUKKyAgICAgICAgcCA9IGNvbW1vbi5SdW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGltZ2RpZmZfb3V0cHV0LCBfID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGFzc2VydCBwLnJldHVybmNvZGUgPT0gMCwgXAorICAgICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgaW1nZGlmZiBwYXRjaCBiZXR3ZWVuIHt9IGFuZCB7fTpcbnt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgc3JjX25hbWUsIHRndF9uYW1lLCBpbWdkaWZmX291dHB1dCkKIAogICAgICAgICB3aXRoIG9wZW4ocGF0Y2hfaW5mb19maWxlKSBhcyBwYXRjaF9pbmZvOgogICAgICAgICAgIGxpbmVzID0gcGF0Y2hfaW5mby5yZWFkbGluZXMoKQpAQCAtMTQyNCwyOSArMTU0MiwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRndF9yYW5nZXMsIHNyY19yYW5nZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMpCiAgICAgICAgIGZvciBpbmRleCwgKHBhdGNoX3N0YXJ0LCBwYXRjaF9sZW5ndGgsIHNwbGl0X3RndF9yYW5nZXMsCi0gICAgICAgICAgICBzcGxpdF9zcmNfcmFuZ2VzKSBpbiBlbnVtZXJhdGUoc3BsaXRfaW5mb19saXN0KToKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRfc3JjX3JhbmdlcykgaW4gZW51bWVyYXRlKHNwbGl0X2luZm9fbGlzdCk6CiAgICAgICAgICAgd2l0aCBvcGVuKHBhdGNoX2ZpbGUpIGFzIGY6CiAgICAgICAgICAgICBmLnNlZWsocGF0Y2hfc3RhcnQpCiAgICAgICAgICAgICBwYXRjaF9jb250ZW50ID0gZi5yZWFkKHBhdGNoX2xlbmd0aCkKIAogICAgICAgICAgIHNwbGl0X3NyY19uYW1lID0gInt9LXt9Ii5mb3JtYXQoc3JjX25hbWUsIGluZGV4KQogICAgICAgICAgIHNwbGl0X3RndF9uYW1lID0gInt9LXt9Ii5mb3JtYXQodGd0X25hbWUsIGluZGV4KQotICAgICAgICAgIHRyYW5zZmVyX3NwbGl0ID0gVHJhbnNmZXIoc3BsaXRfdGd0X25hbWUsIHNwbGl0X3NyY19uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRfdGd0X3Jhbmdlcywgc3BsaXRfc3JjX3JhbmdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGd0LlJhbmdlU2hhMShzcGxpdF90Z3RfcmFuZ2VzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3JjLlJhbmdlU2hhMShzcGxpdF9zcmNfcmFuZ2VzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWZmIiwgc2VsZi50cmFuc2ZlcnMpCi0gICAgICAgICAgdHJhbnNmZXJfc3BsaXQucGF0Y2ggPSBwYXRjaF9jb250ZW50CisgICAgICAgICAgc3BsaXRfbGFyZ2VfYXBrcy5hcHBlbmQoKHNwbGl0X3RndF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdF9zcmNfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRfdGd0X3JhbmdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRfc3JjX3JhbmdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hfY29udGVudCkpCiAKICAgICBwcmludCgiRmluZGluZyB0cmFuc2ZlcnMuLi4iKQogCiAgICAgbGFyZ2VfYXBrcyA9IFtdCisgICAgc3BsaXRfbGFyZ2VfYXBrcyA9IFtdCiAgICAgY2FjaGVfc2l6ZSA9IGNvbW1vbi5PUFRJT05TLmNhY2hlX3NpemUKICAgICBzcGxpdF90aHJlc2hvbGQgPSAwLjEyNQogICAgIG1heF9ibG9ja3NfcGVyX3RyYW5zZmVyID0gaW50KGNhY2hlX3NpemUgKiBzcGxpdF90aHJlc2hvbGQgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGd0LmJsb2Nrc2l6ZSkKICAgICBlbXB0eSA9IFJhbmdlU2V0KCkKLSAgICBmb3IgdGd0X2ZuLCB0Z3RfcmFuZ2VzIGluIHNlbGYudGd0LmZpbGVfbWFwLml0ZW1zKCk6CisgICAgZm9yIHRndF9mbiwgdGd0X3JhbmdlcyBpbiBzb3J0ZWQoc2VsZi50Z3QuZmlsZV9tYXAuaXRlbXMoKSk6CiAgICAgICBpZiB0Z3RfZm4gPT0gIl9fWkVSTyI6CiAgICAgICAgICMgdGhlIHNwZWNpYWwgIl9fWkVSTyIgZG9tYWluIGlzIGFsbCB0aGUgYmxvY2tzIG5vdCBjb250YWluZWQKICAgICAgICAgIyBpbiBhbnkgZmlsZSBhbmQgdGhhdCBhcmUgZmlsbGVkIHdpdGggemVyb3MuICBXZSBoYXZlIGEKQEAgLTE0OTAsMTMgKzE2MDgsMjMgQEAKICAgICAgIEFkZFRyYW5zZmVyKHRndF9mbiwgTm9uZSwgdGd0X3JhbmdlcywgZW1wdHksICJuZXciLCBzZWxmLnRyYW5zZmVycykKIAogICAgIHRyYW5zZmVyX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1BZGRTcGxpdFRyYW5zZmVyRm9yTGFyZ2VBcGtzKQorICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9U3BsaXRMYXJnZUFwa3MpCiAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShzZWxmLnRocmVhZHMpXQogICAgIGZvciB0aCBpbiB0aHJlYWRzOgogICAgICAgdGguc3RhcnQoKQogICAgIHdoaWxlIHRocmVhZHM6CiAgICAgICB0aHJlYWRzLnBvcCgpLmpvaW4oKQogCisgICAgIyBTb3J0IHRoZSBzcGxpdCB0cmFuc2ZlcnMgZm9yIGxhcmdlIGFwa3MgdG8gZ2VuZXJhdGUgYSBkZXRlcm1pbmF0ZSBwYWNrYWdlLgorICAgIHNwbGl0X2xhcmdlX2Fwa3Muc29ydCgpCisgICAgZm9yICh0Z3RfbmFtZSwgc3JjX25hbWUsIHRndF9yYW5nZXMsIHNyY19yYW5nZXMsCisgICAgICAgICBwYXRjaCkgaW4gc3BsaXRfbGFyZ2VfYXBrczoKKyAgICAgIHRyYW5zZmVyX3NwbGl0ID0gVHJhbnNmZXIodGd0X25hbWUsIHNyY19uYW1lLCB0Z3RfcmFuZ2VzLCBzcmNfcmFuZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRndC5SYW5nZVNoYTEodGd0X3JhbmdlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3JjLlJhbmdlU2hhMShzcmNfcmFuZ2VzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpZmYiLCBzZWxmLnRyYW5zZmVycykKKyAgICAgIHRyYW5zZmVyX3NwbGl0LnBhdGNoID0gcGF0Y2gKKwogICBkZWYgQWJicmV2aWF0ZVNvdXJjZU5hbWVzKHNlbGYpOgogICAgIGZvciBrIGluIHNlbGYuc3JjLmZpbGVfbWFwLmtleXMoKToKICAgICAgIGIgPSBvcy5wYXRoLmJhc2VuYW1lKGspCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkgYi90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkKaW5kZXggZTExZjVhNi4uMTIzZWM3YyAxMDA3NTUKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9idWlsZF9pbWFnZS5weQpAQCAtMTUsMjcgKzE1LDMzIEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAiIiIKLUJ1aWxkIGltYWdlIG91dHB1dF9pbWFnZV9maWxlIGZyb20gaW5wdXRfZGlyZWN0b3J5LCBwcm9wZXJ0aWVzX2ZpbGUsIGFuZCB0YXJnZXRfb3V0X2RpcgorQnVpbGRzIG91dHB1dF9pbWFnZSBmcm9tIHRoZSBnaXZlbiBpbnB1dF9kaXJlY3RvcnksIHByb3BlcnRpZXNfZmlsZSwKK2FuZCB3cml0ZXMgdGhlIGltYWdlIHRvIHRhcmdldF9vdXRwdXRfZGlyZWN0b3J5LgogCi1Vc2FnZTogIGJ1aWxkX2ltYWdlIGlucHV0X2RpcmVjdG9yeSBwcm9wZXJ0aWVzX2ZpbGUgb3V0cHV0X2ltYWdlX2ZpbGUgdGFyZ2V0X291dF9kaXIKLQorVXNhZ2U6ICBidWlsZF9pbWFnZS5weSBpbnB1dF9kaXJlY3RvcnkgcHJvcGVydGllc19maWxlIG91dHB1dF9pbWFnZSBcXAorICAgICAgICAgICAgdGFyZ2V0X291dHB1dF9kaXJlY3RvcnkKICIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCByZQotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLWltcG9ydCBjb21tb24KIGltcG9ydCBzaGxleAogaW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGNvbW1vbgogaW1wb3J0IHNwYXJzZV9pbWcKLWltcG9ydCB0ZW1wZmlsZQorCiAKIE9QVElPTlMgPSBjb21tb24uT1BUSU9OUwogCiBGSVhFRF9TQUxUID0gImFlZTA4N2E1YmUzYjk4Mjk3OGM5MjNmNTY2YTk0NjEzNDk2YjQxN2YyYWY1OTI2MzliYzgwZDE0MWUzNGRmZTciCiBCTE9DS19TSVpFID0gNDA5NgogCisKIGRlZiBSdW5Db21tYW5kKGNtZCwgdmVyYm9zZT1Ob25lKToKICAgIiIiRWNobyBhbmQgcnVuIHRoZSBnaXZlbiBjb21tYW5kLgogCkBAIC01Niw2ICs2Miw3IEBACiAgICAgcHJpbnQob3V0cHV0LnJzdHJpcCgpKQogICByZXR1cm4gKG91dHB1dCwgcC5yZXR1cm5jb2RlKQogCisKIGRlZiBHZXRWZXJpdHlGRUNTaXplKHBhcnRpdGlvbl9zaXplKToKICAgY21kID0gWyJmZWMiLCAiLXMiLCBzdHIocGFydGl0aW9uX3NpemUpXQogICBvdXRwdXQsIGV4aXRfY29kZSA9IFJ1bkNvbW1hbmQoY21kLCBGYWxzZSkKQEAgLTYzLDYgKzcwLDcgQEAKICAgICByZXR1cm4gRmFsc2UsIDAKICAgcmV0dXJuIFRydWUsIGludChvdXRwdXQpCiAKKwogZGVmIEdldFZlcml0eVRyZWVTaXplKHBhcnRpdGlvbl9zaXplKToKICAgY21kID0gWyJidWlsZF92ZXJpdHlfdHJlZSIsICItcyIsIHN0cihwYXJ0aXRpb25fc2l6ZSldCiAgIG91dHB1dCwgZXhpdF9jb2RlID0gUnVuQ29tbWFuZChjbWQsIEZhbHNlKQpAQCAtNzAsNiArNzgsNyBAQAogICAgIHJldHVybiBGYWxzZSwgMAogICByZXR1cm4gVHJ1ZSwgaW50KG91dHB1dCkKIAorCiBkZWYgR2V0VmVyaXR5TWV0YWRhdGFTaXplKHBhcnRpdGlvbl9zaXplKToKICAgY21kID0gWyJzeXN0ZW0vZXh0cmFzL3Zlcml0eS9idWlsZF92ZXJpdHlfbWV0YWRhdGEucHkiLCAic2l6ZSIsCiAgICAgICAgICBzdHIocGFydGl0aW9uX3NpemUpXQpAQCAtNzgsNiArODcsNyBAQAogICAgIHJldHVybiBGYWxzZSwgMAogICByZXR1cm4gVHJ1ZSwgaW50KG91dHB1dCkKIAorCiBkZWYgR2V0VmVyaXR5U2l6ZShwYXJ0aXRpb25fc2l6ZSwgZmVjX3N1cHBvcnRlZCk6CiAgIHN1Y2Nlc3MsIHZlcml0eV90cmVlX3NpemUgPSBHZXRWZXJpdHlUcmVlU2l6ZShwYXJ0aXRpb25fc2l6ZSkKICAgaWYgbm90IHN1Y2Nlc3M6CkBAIC05MywxNiArMTAzLDE5IEBACiAgICAgcmV0dXJuIHZlcml0eV9zaXplICsgZmVjX3NpemUKICAgcmV0dXJuIHZlcml0eV9zaXplCiAKKwogZGVmIEdldFNpbWdTaXplKGltYWdlX2ZpbGUpOgogICBzaW1nID0gc3BhcnNlX2ltZy5TcGFyc2VJbWFnZShpbWFnZV9maWxlLCBidWlsZF9tYXA9RmFsc2UpCiAgIHJldHVybiBzaW1nLmJsb2Nrc2l6ZSAqIHNpbWcudG90YWxfYmxvY2tzCiAKKwogZGVmIFplcm9QYWRTaW1nKGltYWdlX2ZpbGUsIHBhZF9zaXplKToKICAgYmxvY2tzID0gcGFkX3NpemUgLy8gQkxPQ0tfU0laRQogICBwcmludCgiUGFkZGluZyAlZCBibG9ja3MgKCVkIGJ5dGVzKSIgJSAoYmxvY2tzLCBwYWRfc2l6ZSkpCiAgIHNpbWcgPSBzcGFyc2VfaW1nLlNwYXJzZUltYWdlKGltYWdlX2ZpbGUsIG1vZGU9InIrYiIsIGJ1aWxkX21hcD1GYWxzZSkKICAgc2ltZy5BcHBlbmRGaWxsQ2h1bmsoMCwgYmxvY2tzKQogCisKIGRlZiBBVkJDYWxjTWF4SW1hZ2VTaXplKGF2YnRvb2wsIGZvb3Rlcl90eXBlLCBwYXJ0aXRpb25fc2l6ZSwgYWRkaXRpb25hbF9hcmdzKToKICAgIiIiQ2FsY3VsYXRlcyBtYXggaW1hZ2Ugc2l6ZSBmb3IgYSBnaXZlbiBwYXJ0aXRpb24gc2l6ZS4KIApAQCAtMTE1LDggKzEyOCw4IEBACiAgIFJldHVybnM6CiAgICAgVGhlIG1heGltdW0gaW1hZ2Ugc2l6ZSBvciAwIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICAiIiIKLSAgY21kID1bYXZidG9vbCwgImFkZF8lc19mb290ZXIiICUgZm9vdGVyX3R5cGUsCi0gICAgICAgICItLXBhcnRpdGlvbl9zaXplIiwgcGFydGl0aW9uX3NpemUsICItLWNhbGNfbWF4X2ltYWdlX3NpemUiXQorICBjbWQgPSBbYXZidG9vbCwgImFkZF8lc19mb290ZXIiICUgZm9vdGVyX3R5cGUsCisgICAgICAgICAiLS1wYXJ0aXRpb25fc2l6ZSIsIHBhcnRpdGlvbl9zaXplLCAiLS1jYWxjX21heF9pbWFnZV9zaXplIl0KICAgY21kLmV4dGVuZChzaGxleC5zcGxpdChhZGRpdGlvbmFsX2FyZ3MpKQogCiAgIChvdXRwdXQsIGV4aXRfY29kZSkgPSBSdW5Db21tYW5kKGNtZCkKQEAgLTEyNSw2ICsxMzgsNyBAQAogICBlbHNlOgogICAgIHJldHVybiBpbnQob3V0cHV0KQogCisKIGRlZiBBVkJBZGRGb290ZXIoaW1hZ2VfcGF0aCwgYXZidG9vbCwgZm9vdGVyX3R5cGUsIHBhcnRpdGlvbl9zaXplLAogICAgICAgICAgICAgICAgICBwYXJ0aXRpb25fbmFtZSwga2V5X3BhdGgsIGFsZ29yaXRobSwgc2FsdCwKICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9hcmdzKToKQEAgLTE0MCwxNCArMTU0LDE1IEBACiAgICAgYWxnb3JpdGhtOiBOYW1lIG9mIGFsZ29yaXRobSB0byB1c2Ugb3IgTm9uZS4KICAgICBzYWx0OiBUaGUgc2FsdCB0byB1c2UgKGEgaGV4YWRlY2ltYWwgc3RyaW5nKSBvciBOb25lLgogICAgIGFkZGl0aW9uYWxfYXJnczogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byAnYXZidG9vbAotICAgICAgYWRkX2hhc2h0cmVlX2ltYWdlJy4KKyAgICAgICAgYWRkX2hhc2h0cmVlX2ltYWdlJy4KKwogICBSZXR1cm5zOgogICAgIFRydWUgaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQuCiAgICIiIgotICBjbWQgPVthdmJ0b29sLCAiYWRkXyVzX2Zvb3RlciIgJSBmb290ZXJfdHlwZSwKLSAgICAgICAgIi0tcGFydGl0aW9uX3NpemUiLCBwYXJ0aXRpb25fc2l6ZSwKLSAgICAgICAgIi0tcGFydGl0aW9uX25hbWUiLCBwYXJ0aXRpb25fbmFtZSwKLSAgICAgICAgIi0taW1hZ2UiLCBpbWFnZV9wYXRoXQorICBjbWQgPSBbYXZidG9vbCwgImFkZF8lc19mb290ZXIiICUgZm9vdGVyX3R5cGUsCisgICAgICAgICAiLS1wYXJ0aXRpb25fc2l6ZSIsIHBhcnRpdGlvbl9zaXplLAorICAgICAgICAgIi0tcGFydGl0aW9uX25hbWUiLCBwYXJ0aXRpb25fbmFtZSwKKyAgICAgICAgICItLWltYWdlIiwgaW1hZ2VfcGF0aF0KIAogICBpZiBrZXlfcGF0aCBhbmQgYWxnb3JpdGhtOgogICAgIGNtZC5leHRlbmQoWyItLWtleSIsIGtleV9wYXRoLCAiLS1hbGdvcml0aG0iLCBhbGdvcml0aG1dKQpAQCAtMTU5LDEyICsxNzQsMTUgQEAKICAgKF8sIGV4aXRfY29kZSkgPSBSdW5Db21tYW5kKGNtZCkKICAgcmV0dXJuIGV4aXRfY29kZSA9PSAwCiAKKwogZGVmIEFkanVzdFBhcnRpdGlvblNpemVGb3JWZXJpdHkocGFydGl0aW9uX3NpemUsIGZlY19zdXBwb3J0ZWQpOgogICAiIiJNb2RpZmllcyB0aGUgcHJvdmlkZWQgcGFydGl0aW9uIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIHZlcml0eSBtZXRhZGF0YS4KIAogICBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gc2l6ZSB0aGUgY3JlYXRlZCBpbWFnZSBhcHByb3ByaWF0ZWx5LgorCiAgIEFyZ3M6CiAgICAgcGFydGl0aW9uX3NpemU6IHRoZSBzaXplIG9mIHRoZSBwYXJ0aXRpb24gdG8gYmUgdmVyaWZpZWQuCisKICAgUmV0dXJuczoKICAgICBBIHR1cGxlIG9mIHRoZSBzaXplIG9mIHRoZSBwYXJ0aXRpb24gYWRqdXN0ZWQgZm9yIHZlcml0eSBtZXRhZGF0YSwgYW5kCiAgICAgdGhlIHNpemUgb2YgdmVyaXR5IG1ldGFkYXRhLgpAQCAtMjAxLDMwICsyMTksMzQgQEAKICAgQWRqdXN0UGFydGl0aW9uU2l6ZUZvclZlcml0eS5yZXN1bHRzW2tleV0gPSAocmVzdWx0LCB2ZXJpdHlfc2l6ZSkKICAgcmV0dXJuIChyZXN1bHQsIHZlcml0eV9zaXplKQogCisKIEFkanVzdFBhcnRpdGlvblNpemVGb3JWZXJpdHkucmVzdWx0cyA9IHt9CiAKKwogZGVmIEJ1aWxkVmVyaXR5RkVDKHNwYXJzZV9pbWFnZV9wYXRoLCB2ZXJpdHlfcGF0aCwgdmVyaXR5X2ZlY19wYXRoLAogICAgICAgICAgICAgICAgICAgIHBhZGRpbmdfc2l6ZSk6CiAgIGNtZCA9IFsiZmVjIiwgIi1lIiwgIi1wIiwgc3RyKHBhZGRpbmdfc2l6ZSksIHNwYXJzZV9pbWFnZV9wYXRoLAogICAgICAgICAgdmVyaXR5X3BhdGgsIHZlcml0eV9mZWNfcGF0aF0KICAgb3V0cHV0LCBleGl0X2NvZGUgPSBSdW5Db21tYW5kKGNtZCkKICAgaWYgZXhpdF9jb2RlICE9IDA6Ci0gICAgcHJpbnQgIkNvdWxkIG5vdCBidWlsZCBGRUMgZGF0YSEgRXJyb3I6ICVzIiAlIG91dHB1dAorICAgIHByaW50KCJDb3VsZCBub3QgYnVpbGQgRkVDIGRhdGEhIEVycm9yOiAlcyIgJSBvdXRwdXQpCiAgICAgcmV0dXJuIEZhbHNlCiAgIHJldHVybiBUcnVlCiAKKwogZGVmIEJ1aWxkVmVyaXR5VHJlZShzcGFyc2VfaW1hZ2VfcGF0aCwgdmVyaXR5X2ltYWdlX3BhdGgsIHByb3BfZGljdCk6CiAgIGNtZCA9IFsiYnVpbGRfdmVyaXR5X3RyZWUiLCAiLUEiLCBGSVhFRF9TQUxULCBzcGFyc2VfaW1hZ2VfcGF0aCwKICAgICAgICAgIHZlcml0eV9pbWFnZV9wYXRoXQogICBvdXRwdXQsIGV4aXRfY29kZSA9IFJ1bkNvbW1hbmQoY21kKQogICBpZiBleGl0X2NvZGUgIT0gMDoKLSAgICBwcmludCAiQ291bGQgbm90IGJ1aWxkIHZlcml0eSB0cmVlISBFcnJvcjogJXMiICUgb3V0cHV0CisgICAgcHJpbnQoIkNvdWxkIG5vdCBidWlsZCB2ZXJpdHkgdHJlZSEgRXJyb3I6ICVzIiAlIG91dHB1dCkKICAgICByZXR1cm4gRmFsc2UKICAgcm9vdCwgc2FsdCA9IG91dHB1dC5zcGxpdCgpCiAgIHByb3BfZGljdFsidmVyaXR5X3Jvb3RfaGFzaCJdID0gcm9vdAogICBwcm9wX2RpY3RbInZlcml0eV9zYWx0Il0gPSBzYWx0CiAgIHJldHVybiBUcnVlCiAKKwogZGVmIEJ1aWxkVmVyaXR5TWV0YWRhdGEoaW1hZ2Vfc2l6ZSwgdmVyaXR5X21ldGFkYXRhX3BhdGgsIHJvb3RfaGFzaCwgc2FsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX2RldmljZSwgc2lnbmVyX3BhdGgsIGtleSwgc2lnbmVyX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpdHlfZGlzYWJsZSk6CkBAIC0yMzcsMTAgKzI1OSwxMSBAQAogICAgIGNtZC5hcHBlbmQoIi0tdmVyaXR5X2Rpc2FibGUiKQogICBvdXRwdXQsIGV4aXRfY29kZSA9IFJ1bkNvbW1hbmQoY21kKQogICBpZiBleGl0X2NvZGUgIT0gMDoKLSAgICBwcmludCAiQ291bGQgbm90IGJ1aWxkIHZlcml0eSBtZXRhZGF0YSEgRXJyb3I6ICVzIiAlIG91dHB1dAorICAgIHByaW50KCJDb3VsZCBub3QgYnVpbGQgdmVyaXR5IG1ldGFkYXRhISBFcnJvcjogJXMiICUgb3V0cHV0KQogICAgIHJldHVybiBGYWxzZQogICByZXR1cm4gVHJ1ZQogCisKIGRlZiBBcHBlbmQyU2ltZyhzcGFyc2VfaW1hZ2VfcGF0aCwgdW5zcGFyc2VfaW1hZ2VfcGF0aCwgZXJyb3JfbWVzc2FnZSk6CiAgICIiIkFwcGVuZHMgdGhlIHVuc3BhcnNlIGltYWdlIHRvIHRoZSBnaXZlbiBzcGFyc2UgaW1hZ2UuCiAKQEAgLTI1MywxOCArMjc2LDIzIEBACiAgIGNtZCA9IFsiYXBwZW5kMnNpbWciLCBzcGFyc2VfaW1hZ2VfcGF0aCwgdW5zcGFyc2VfaW1hZ2VfcGF0aF0KICAgb3V0cHV0LCBleGl0X2NvZGUgPSBSdW5Db21tYW5kKGNtZCkKICAgaWYgZXhpdF9jb2RlICE9IDA6Ci0gICAgcHJpbnQgIiVzOiAlcyIgJSAoZXJyb3JfbWVzc2FnZSwgb3V0cHV0KQorICAgIHByaW50KCIlczogJXMiICUgKGVycm9yX21lc3NhZ2UsIG91dHB1dCkpCiAgICAgcmV0dXJuIEZhbHNlCiAgIHJldHVybiBUcnVlCiAKKwogZGVmIEFwcGVuZCh0YXJnZXQsIGZpbGVfdG9fYXBwZW5kLCBlcnJvcl9tZXNzYWdlKToKLSAgIyBhcHBlbmRpbmcgZmlsZV90b19hcHBlbmQgdG8gdGFyZ2V0Ci0gIHdpdGggb3Blbih0YXJnZXQsICJhIikgYXMgb3V0X2ZpbGU6Ci0gICAgd2l0aCBvcGVuKGZpbGVfdG9fYXBwZW5kLCAiciIpIGFzIGlucHV0X2ZpbGU6CisgICIiIkFwcGVuZHMgZmlsZV90b19hcHBlbmQgdG8gdGFyZ2V0LiIiIgorICB0cnk6CisgICAgd2l0aCBvcGVuKHRhcmdldCwgImEiKSBhcyBvdXRfZmlsZSwgb3BlbihmaWxlX3RvX2FwcGVuZCwgInIiKSBhcyBpbnB1dF9maWxlOgogICAgICAgZm9yIGxpbmUgaW4gaW5wdXRfZmlsZToKICAgICAgICAgb3V0X2ZpbGUud3JpdGUobGluZSkKKyAgZXhjZXB0IElPRXJyb3I6CisgICAgcHJpbnQoZXJyb3JfbWVzc2FnZSkKKyAgICByZXR1cm4gRmFsc2UKICAgcmV0dXJuIFRydWUKIAorCiBkZWYgQnVpbGRWZXJpZmllZEltYWdlKGRhdGFfaW1hZ2VfcGF0aCwgdmVyaXR5X2ltYWdlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIHZlcml0eV9tZXRhZGF0YV9wYXRoLCB2ZXJpdHlfZmVjX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdfc2l6ZSwgZmVjX3N1cHBvcnRlZCk6CkBAIC0yODYsNiArMzE0LDcgQEAKICAgICByZXR1cm4gRmFsc2UKICAgcmV0dXJuIFRydWUKIAorCiBkZWYgVW5zcGFyc2VJbWFnZShzcGFyc2VfaW1hZ2VfcGF0aCwgcmVwbGFjZT1UcnVlKToKICAgaW1nX2RpciA9IG9zLnBhdGguZGlybmFtZShzcGFyc2VfaW1hZ2VfcGF0aCkKICAgdW5zcGFyc2VfaW1hZ2VfcGF0aCA9ICJ1bnNwYXJzZV8iICsgb3MucGF0aC5iYXNlbmFtZShzcGFyc2VfaW1hZ2VfcGF0aCkKQEAgLTI5NiwxMiArMzI1LDE1IEBACiAgICAgZWxzZToKICAgICAgIHJldHVybiBUcnVlLCB1bnNwYXJzZV9pbWFnZV9wYXRoCiAgIGluZmxhdGVfY29tbWFuZCA9IFsic2ltZzJpbWciLCBzcGFyc2VfaW1hZ2VfcGF0aCwgdW5zcGFyc2VfaW1hZ2VfcGF0aF0KLSAgKF8sIGV4aXRfY29kZSkgPSBSdW5Db21tYW5kKGluZmxhdGVfY29tbWFuZCkKKyAgKGluZmxhdGVfb3V0cHV0LCBleGl0X2NvZGUpID0gUnVuQ29tbWFuZChpbmZsYXRlX2NvbW1hbmQpCiAgIGlmIGV4aXRfY29kZSAhPSAwOgorICAgIHByaW50KCJFcnJvcjogJyVzJyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJWQ6XG4lcyIgJSAoCisgICAgICAgIGluZmxhdGVfY29tbWFuZCwgZXhpdF9jb2RlLCBpbmZsYXRlX291dHB1dCkpCiAgICAgb3MucmVtb3ZlKHVuc3BhcnNlX2ltYWdlX3BhdGgpCiAgICAgcmV0dXJuIEZhbHNlLCBOb25lCiAgIHJldHVybiBUcnVlLCB1bnNwYXJzZV9pbWFnZV9wYXRoCiAKKwogZGVmIE1ha2VWZXJpdHlFbmFibGVkSW1hZ2Uob3V0X2ZpbGUsIGZlY19zdXBwb3J0ZWQsIHByb3BfZGljdCk6CiAgICIiIkNyZWF0ZXMgYW4gaW1hZ2UgdGhhdCBpcyB2ZXJpZmlhYmxlIHVzaW5nIGRtLXZlcml0eS4KIApAQCAtMzIzLDcgKzM1NSw3IEBACiAgIHNpZ25lcl9hcmdzID0gT1BUSU9OUy52ZXJpdHlfc2lnbmVyX2FyZ3MKIAogICAjIG1ha2UgYSB0ZW1wZGlyCi0gIHRlbXBkaXJfbmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoc3VmZml4PSJfdmVyaXR5X2ltYWdlcyIpCisgIHRlbXBkaXJfbmFtZSA9IGNvbW1vbi5NYWtlVGVtcERpcihzdWZmaXg9Il92ZXJpdHlfaW1hZ2VzIikKIAogICAjIGdldCBwYXJ0aWFsIGltYWdlIHBhdGhzCiAgIHZlcml0eV9pbWFnZV9wYXRoID0gb3MucGF0aC5qb2luKHRlbXBkaXJfbmFtZSwgInZlcml0eS5pbWciKQpAQCAtMzMyLDcgKzM2NCw2IEBACiAKICAgIyBidWlsZCB0aGUgdmVyaXR5IHRyZWUgYW5kIGdldCB0aGUgcm9vdCBoYXNoIGFuZCBzYWx0CiAgIGlmIG5vdCBCdWlsZFZlcml0eVRyZWUob3V0X2ZpbGUsIHZlcml0eV9pbWFnZV9wYXRoLCBwcm9wX2RpY3QpOgotICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcl9uYW1lLCBpZ25vcmVfZXJyb3JzPVRydWUpCiAgICAgcmV0dXJuIEZhbHNlCiAKICAgIyBidWlsZCB0aGUgbWV0YWRhdGEgYmxvY2tzCkBAIC0zNDIsNyArMzczLDYgQEAKICAgaWYgbm90IEJ1aWxkVmVyaXR5TWV0YWRhdGEoaW1hZ2Vfc2l6ZSwgdmVyaXR5X21ldGFkYXRhX3BhdGgsIHJvb3RfaGFzaCwgc2FsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfZGV2LCBzaWduZXJfcGF0aCwgc2lnbmVyX2tleSwgc2lnbmVyX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcml0eV9kaXNhYmxlKToKLSAgICBzaHV0aWwucm10cmVlKHRlbXBkaXJfbmFtZSwgaWdub3JlX2Vycm9ycz1UcnVlKQogICAgIHJldHVybiBGYWxzZQogCiAgICMgYnVpbGQgdGhlIGZ1bGwgdmVyaWZpZWQgaW1hZ2UKQEAgLTM1OCwyMyArMzg4LDU5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyaXR5X2ZlY19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWNfc3VwcG9ydGVkKToKLSAgICBzaHV0aWwucm10cmVlKHRlbXBkaXJfbmFtZSwgaWdub3JlX2Vycm9ycz1UcnVlKQogICAgIHJldHVybiBGYWxzZQogCi0gIHNodXRpbC5ybXRyZWUodGVtcGRpcl9uYW1lLCBpZ25vcmVfZXJyb3JzPVRydWUpCiAgIHJldHVybiBUcnVlCiAKLWRlZiBDb252ZXJ0QmxvY2tNYXBUb0Jhc2VGcyhibG9ja19tYXBfZmlsZSk6Ci0gIGZkLCBiYXNlX2ZzX2ZpbGUgPSB0ZW1wZmlsZS5ta3N0ZW1wKHByZWZpeD0ic2NyaXB0X2dlbl8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9Ii5iYXNlX2ZzIikKLSAgb3MuY2xvc2UoZmQpCiAKK2RlZiBDb252ZXJ0QmxvY2tNYXBUb0Jhc2VGcyhibG9ja19tYXBfZmlsZSk6CisgIGJhc2VfZnNfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUocHJlZml4PSJzY3JpcHRfZ2VuXyIsIHN1ZmZpeD0iLmJhc2VfZnMiKQogICBjb252ZXJ0X2NvbW1hbmQgPSBbImJsa19hbGxvY190b19iYXNlX2ZzIiwgYmxvY2tfbWFwX2ZpbGUsIGJhc2VfZnNfZmlsZV0KICAgKF8sIGV4aXRfY29kZSkgPSBSdW5Db21tYW5kKGNvbnZlcnRfY29tbWFuZCkKLSAgaWYgZXhpdF9jb2RlICE9IDA6Ci0gICAgb3MucmVtb3ZlKGJhc2VfZnNfZmlsZSkKLSAgICByZXR1cm4gTm9uZQotICByZXR1cm4gYmFzZV9mc19maWxlCisgIHJldHVybiBiYXNlX2ZzX2ZpbGUgaWYgZXhpdF9jb2RlID09IDAgZWxzZSBOb25lCisKKworZGVmIENoZWNrSGVhZHJvb20oZXh0NGZzX291dHB1dCwgcHJvcF9kaWN0KToKKyAgIiIiQ2hlY2tzIGlmIHRoZXJlJ3MgZW5vdWdoIGhlYWRyb29tIHNwYWNlIGF2YWlsYWJsZS4KKworICBIZWFkcm9vbSBpcyB0aGUgcmVzZXJ2ZWQgc3BhY2Ugb24gc3lzdGVtIGltYWdlICh2aWEgUFJPRFVDVF9TWVNURU1fSEVBRFJPT00pLAorICB3aGljaCBpcyB1c2VmdWwgZm9yIGRldmljZXMgd2l0aCBsb3cgZGlzayBzcGFjZSB0aGF0IGhhdmUgc3lzdGVtIGltYWdlCisgIHZhcmlhdGlvbiBiZXR3ZWVuIGJ1aWxkcy4gVGhlICdwYXJ0aXRpb25faGVhZHJvb20nIGluIHByb3BfZGljdCBpcyB0aGUgc2l6ZQorICBpbiBieXRlcywgd2hpbGUgdGhlIG51bWJlcnMgaW4gJ2V4dDRmc19vdXRwdXQnIGFyZSBmb3IgNEstYmxvY2tzLgorCisgIEFyZ3M6CisgICAgZXh0NGZzX291dHB1dDogVGhlIG91dHB1dCBzdHJpbmcgZnJvbSBta2UyZnMgY29tbWFuZC4KKyAgICBwcm9wX2RpY3Q6IFRoZSBwcm9wZXJ0eSBkaWN0LgorCisgIFJldHVybnM6CisgICAgVGhlIGNoZWNrIHJlc3VsdC4KKworICBSYWlzZXM6CisgICAgQXNzZXJ0aW9uRXJyb3I6IE9uIGludmFsaWQgaW5wdXQuCisgICIiIgorICBhc3NlcnQgZXh0NGZzX291dHB1dCBpcyBub3QgTm9uZQorICBhc3NlcnQgcHJvcF9kaWN0LmdldCgnZnNfdHlwZScsICcnKS5zdGFydHN3aXRoKCdleHQ0JykKKyAgYXNzZXJ0ICdwYXJ0aXRpb25faGVhZHJvb20nIGluIHByb3BfZGljdAorICBhc3NlcnQgJ21vdW50X3BvaW50JyBpbiBwcm9wX2RpY3QKKworICBleHQ0ZnNfc3RhdHMgPSByZS5jb21waWxlKAorICAgICAgcidDcmVhdGVkIGZpbGVzeXN0ZW0gd2l0aCAuKiAoP1A8dXNlZF9ibG9ja3M+WzAtOV0rKS8nCisgICAgICByJyg/UDx0b3RhbF9ibG9ja3M+WzAtOV0rKSBibG9ja3MnKQorICBsYXN0X2xpbmUgPSBleHQ0ZnNfb3V0cHV0LnN0cmlwKCkuc3BsaXQoJ1xuJylbLTFdCisgIG0gPSBleHQ0ZnNfc3RhdHMubWF0Y2gobGFzdF9saW5lKQorICB1c2VkX2Jsb2NrcyA9IGludChtLmdyb3VwZGljdCgpLmdldCgndXNlZF9ibG9ja3MnKSkKKyAgdG90YWxfYmxvY2tzID0gaW50KG0uZ3JvdXBkaWN0KCkuZ2V0KCd0b3RhbF9ibG9ja3MnKSkKKyAgaGVhZHJvb21fYmxvY2tzID0gaW50KHByb3BfZGljdFsncGFydGl0aW9uX2hlYWRyb29tJ10pIC8gQkxPQ0tfU0laRQorICBhZGp1c3RlZF9ibG9ja3MgPSB0b3RhbF9ibG9ja3MgLSBoZWFkcm9vbV9ibG9ja3MKKyAgaWYgdXNlZF9ibG9ja3MgPiBhZGp1c3RlZF9ibG9ja3M6CisgICAgbW91bnRfcG9pbnQgPSBwcm9wX2RpY3RbIm1vdW50X3BvaW50Il0KKyAgICBwcmludCgiRXJyb3I6IE5vdCBlbm91Z2ggcm9vbSBvbiAlcyAodG90YWw6ICVkIGJsb2NrcywgdXNlZDogJWQgYmxvY2tzLCAiCisgICAgICAgICAgImhlYWRyb29tOiAlZCBibG9ja3MsIGF2YWlsYWJsZTogJWQgYmxvY2tzKSIgJSAoCisgICAgICAgICAgICAgIG1vdW50X3BvaW50LCB0b3RhbF9ibG9ja3MsIHVzZWRfYmxvY2tzLCBoZWFkcm9vbV9ibG9ja3MsCisgICAgICAgICAgICAgIGFkanVzdGVkX2Jsb2NrcykpCisgICAgcmV0dXJuIEZhbHNlCisgIHJldHVybiBUcnVlCisKIAogZGVmIEJ1aWxkSW1hZ2UoaW5fZGlyLCBwcm9wX2RpY3QsIG91dF9maWxlLCB0YXJnZXRfb3V0PU5vbmUpOgogICAiIiJCdWlsZCBhbiBpbWFnZSB0byBvdXRfZmlsZSBmcm9tIGluX2RpciB3aXRoIHByb3BlcnR5IHByb3BfZGljdC4KQEAgLTM4Myw3ICs0NDksOCBAQAogICAgIGluX2RpcjogcGF0aCBvZiBpbnB1dCBkaXJlY3RvcnkuCiAgICAgcHJvcF9kaWN0OiBwcm9wZXJ0eSBkaWN0aW9uYXJ5LgogICAgIG91dF9maWxlOiBwYXRoIG9mIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZS4KLSAgICB0YXJnZXRfb3V0OiBwYXRoIG9mIHRoZSBwcm9kdWN0IG91dCBkaXJlY3RvcnkgdG8gcmVhZCBkZXZpY2Ugc3BlY2lmaWMgRlMgY29uZmlnIGZpbGVzLgorICAgIHRhcmdldF9vdXQ6IHBhdGggb2YgdGhlIHByb2R1Y3Qgb3V0IGRpcmVjdG9yeSB0byByZWFkIGRldmljZSBzcGVjaWZpYyBGUworICAgICAgICBjb25maWcgZmlsZXMuCiAKICAgUmV0dXJuczoKICAgICBUcnVlIGlmZiB0aGUgaW1hZ2UgaXMgYnVpbHQgc3VjY2Vzc2Z1bGx5LgpAQCAtMzkyLDE3ICs0NTksMTUgQEAKICAgIyAvc3lzdGVtIGFuZCB0aGUgcmFtZGlzaywgYW5kIGNhbiBiZSBtb3VudGVkIGF0IHRoZSByb290IG9mIHRoZSBmaWxlIHN5c3RlbS4KICAgb3JpZ2luX2luID0gaW5fZGlyCiAgIGZzX2NvbmZpZyA9IHByb3BfZGljdC5nZXQoImZzX2NvbmZpZyIpCi0gIGJhc2VfZnNfZmlsZSA9IE5vbmUKLSAgaWYgKHByb3BfZGljdC5nZXQoInN5c3RlbV9yb290X2ltYWdlIikgPT0gInRydWUiCi0gICAgICBhbmQgcHJvcF9kaWN0WyJtb3VudF9wb2ludCJdID09ICJzeXN0ZW0iKToKLSAgICBpbl9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICAjIENoYW5nZSB0aGUgbW91bnQgcG9pbnQgdG8gIi8iCisgIGlmIChwcm9wX2RpY3QuZ2V0KCJzeXN0ZW1fcm9vdF9pbWFnZSIpID09ICJ0cnVlIiBhbmQKKyAgICAgIHByb3BfZGljdFsibW91bnRfcG9pbnQiXSA9PSAic3lzdGVtIik6CisgICAgaW5fZGlyID0gY29tbW9uLk1ha2VUZW1wRGlyKCkKKyAgICAjIENoYW5nZSB0aGUgbW91bnQgcG9pbnQgdG8gIi8iLgogICAgIHByb3BfZGljdFsibW91bnRfcG9pbnQiXSA9ICIvIgogICAgIGlmIGZzX2NvbmZpZzoKICAgICAgICMgV2UgbmVlZCB0byBtZXJnZSB0aGUgZnNfY29uZmlnIGZpbGVzIG9mIHN5c3RlbSBhbmQgcmFtZGlzay4KLSAgICAgIGZkLCBtZXJnZWRfZnNfY29uZmlnID0gdGVtcGZpbGUubWtzdGVtcChwcmVmaXg9InJvb3RfZnNfY29uZmlnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9Ii50eHQiKQotICAgICAgb3MuY2xvc2UoZmQpCisgICAgICBtZXJnZWRfZnNfY29uZmlnID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InJvb3RfZnNfY29uZmlnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD0iLnR4dCIpCiAgICAgICB3aXRoIG9wZW4obWVyZ2VkX2ZzX2NvbmZpZywgInciKSBhcyBmdzoKICAgICAgICAgaWYgInJhbWRpc2tfZnNfY29uZmlnIiBpbiBwcm9wX2RpY3Q6CiAgICAgICAgICAgd2l0aCBvcGVuKHByb3BfZGljdFsicmFtZGlza19mc19jb25maWciXSkgYXMgZnI6CkBAIC00MTMsNyArNDc4LDcgQEAKIAogICBidWlsZF9jb21tYW5kID0gW10KICAgZnNfdHlwZSA9IHByb3BfZGljdC5nZXQoImZzX3R5cGUiLCAiIikKLSAgcnVuX2ZzY2sgPSBGYWxzZQorICBydW5fZTJmc2NrID0gRmFsc2UKIAogICBmc19zcGFuc19wYXJ0aXRpb24gPSBUcnVlCiAgIGlmIGZzX3R5cGUuc3RhcnRzd2l0aCgic3F1YXNoIik6CkBAIC00MjcsOCArNDkyLDggQEAKICAgIyB2ZXJpZmllZC4KICAgaWYgdmVyaXR5X3N1cHBvcnRlZCBhbmQgaXNfdmVyaXR5X3BhcnRpdGlvbjoKICAgICBwYXJ0aXRpb25fc2l6ZSA9IGludChwcm9wX2RpY3QuZ2V0KCJwYXJ0aXRpb25fc2l6ZSIpKQotICAgIChhZGp1c3RlZF9zaXplLCB2ZXJpdHlfc2l6ZSkgPSBBZGp1c3RQYXJ0aXRpb25TaXplRm9yVmVyaXR5KHBhcnRpdGlvbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcml0eV9mZWNfc3VwcG9ydGVkKQorICAgIChhZGp1c3RlZF9zaXplLCB2ZXJpdHlfc2l6ZSkgPSBBZGp1c3RQYXJ0aXRpb25TaXplRm9yVmVyaXR5KAorICAgICAgICBwYXJ0aXRpb25fc2l6ZSwgdmVyaXR5X2ZlY19zdXBwb3J0ZWQpCiAgICAgaWYgbm90IGFkanVzdGVkX3NpemU6CiAgICAgICByZXR1cm4gRmFsc2UKICAgICBwcm9wX2RpY3RbInBhcnRpdGlvbl9zaXplIl0gPSBzdHIoYWRqdXN0ZWRfc2l6ZSkKQEAgLTQ0Nyw4ICs1MTIsOCBAQAogICAgIHBhcnRpdGlvbl9zaXplID0gcHJvcF9kaWN0WyJwYXJ0aXRpb25fc2l6ZSJdCiAgICAgIyBhdmJfYWRkX2hhc2hfZm9vdGVyX2FyZ3Mgb3IgYXZiX2FkZF9oYXNodHJlZV9mb290ZXJfYXJncy4KICAgICBhZGRpdGlvbmFsX2FyZ3MgPSBwcm9wX2RpY3RbImF2Yl9hZGRfIiArIGF2Yl9mb290ZXJfdHlwZSArICJfZm9vdGVyX2FyZ3MiXQotICAgIG1heF9pbWFnZV9zaXplID0gQVZCQ2FsY01heEltYWdlU2l6ZShhdmJ0b29sLCBhdmJfZm9vdGVyX3R5cGUsIHBhcnRpdGlvbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2FyZ3MpCisgICAgbWF4X2ltYWdlX3NpemUgPSBBVkJDYWxjTWF4SW1hZ2VTaXplKGF2YnRvb2wsIGF2Yl9mb290ZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uX3NpemUsIGFkZGl0aW9uYWxfYXJncykKICAgICBpZiBtYXhfaW1hZ2Vfc2l6ZSA9PSAwOgogICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcHJvcF9kaWN0WyJwYXJ0aXRpb25fc2l6ZSJdID0gc3RyKG1heF9pbWFnZV9zaXplKQpAQCAtNDU4LDcgKzUyMyw3IEBACiAgICAgYnVpbGRfY29tbWFuZCA9IFtwcm9wX2RpY3RbImV4dF9ta3VzZXJpbWciXV0KICAgICBpZiAiZXh0ZnNfc3BhcnNlX2ZsYWciIGluIHByb3BfZGljdDoKICAgICAgIGJ1aWxkX2NvbW1hbmQuYXBwZW5kKHByb3BfZGljdFsiZXh0ZnNfc3BhcnNlX2ZsYWciXSkKLSAgICAgIHJ1bl9mc2NrID0gVHJ1ZQorICAgICAgcnVuX2UyZnNjayA9IFRydWUKICAgICBidWlsZF9jb21tYW5kLmV4dGVuZChbaW5fZGlyLCBvdXRfZmlsZSwgZnNfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9kaWN0WyJtb3VudF9wb2ludCJdXSkKICAgICBidWlsZF9jb21tYW5kLmFwcGVuZChwcm9wX2RpY3RbInBhcnRpdGlvbl9zaXplIl0pCkBAIC00OTAsNiArNTU1LDggQEAKICAgICAgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyItVSIsIHByb3BfZGljdFsidXVpZCJdXSkKICAgICAgIGlmICJoYXNoX3NlZWQiIGluIHByb3BfZGljdDoKICAgICAgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyItUyIsIHByb3BfZGljdFsiaGFzaF9zZWVkIl1dKQorICAgIGlmICJleHQ0X3NoYXJlX2R1cF9ibG9ja3MiIGluIHByb3BfZGljdDoKKyAgICAgIGJ1aWxkX2NvbW1hbmQuYXBwZW5kKCItYyIpCiAgICAgaWYgInNlbGludXhfZmMiIGluIHByb3BfZGljdDoKICAgICAgIGJ1aWxkX2NvbW1hbmQuYXBwZW5kKHByb3BfZGljdFsic2VsaW51eF9mYyJdKQogICBlbGlmIGZzX3R5cGUuc3RhcnRzd2l0aCgic3F1YXNoIik6CkBAIC01MDYsMTcgKzU3MywyOCBAQAogICAgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyItYyIsIHByb3BfZGljdFsic2VsaW51eF9mYyJdXSkKICAgICBpZiAiYmxvY2tfbGlzdCIgaW4gcHJvcF9kaWN0OgogICAgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyItQiIsIHByb3BfZGljdFsiYmxvY2tfbGlzdCJdXSkKKyAgICBpZiAic3F1YXNoZnNfYmxvY2tfc2l6ZSIgaW4gcHJvcF9kaWN0OgorICAgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyItYiIsIHByb3BfZGljdFsic3F1YXNoZnNfYmxvY2tfc2l6ZSJdXSkKICAgICBpZiAic3F1YXNoZnNfY29tcHJlc3NvciIgaW4gcHJvcF9kaWN0OgogICAgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyIteiIsIHByb3BfZGljdFsic3F1YXNoZnNfY29tcHJlc3NvciJdXSkKICAgICBpZiAic3F1YXNoZnNfY29tcHJlc3Nvcl9vcHQiIGluIHByb3BfZGljdDoKICAgICAgIGJ1aWxkX2NvbW1hbmQuZXh0ZW5kKFsiLXpvIiwgcHJvcF9kaWN0WyJzcXVhc2hmc19jb21wcmVzc29yX29wdCJdXSkKLSAgICBpZiAic3F1YXNoZnNfYmxvY2tfc2l6ZSIgaW4gcHJvcF9kaWN0OgotICAgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyItYiIsIHByb3BfZGljdFsic3F1YXNoZnNfYmxvY2tfc2l6ZSJdXSkKLSAgICBpZiAic3F1YXNoZnNfZGlzYWJsZV80a19hbGlnbiIgaW4gcHJvcF9kaWN0IGFuZCBwcm9wX2RpY3QuZ2V0KCJzcXVhc2hmc19kaXNhYmxlXzRrX2FsaWduIikgPT0gInRydWUiOgorICAgIGlmIHByb3BfZGljdC5nZXQoInNxdWFzaGZzX2Rpc2FibGVfNGtfYWxpZ24iKSA9PSAidHJ1ZSI6CiAgICAgICBidWlsZF9jb21tYW5kLmV4dGVuZChbIi1hIl0pCiAgIGVsaWYgZnNfdHlwZS5zdGFydHN3aXRoKCJmMmZzIik6CiAgICAgYnVpbGRfY29tbWFuZCA9IFsibWtmMmZzdXNlcmltZy5zaCJdCiAgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoW291dF9maWxlLCBwcm9wX2RpY3RbInBhcnRpdGlvbl9zaXplIl1dKQorICAgIGlmIGZzX2NvbmZpZzoKKyAgICAgIGJ1aWxkX2NvbW1hbmQuZXh0ZW5kKFsiLUMiLCBmc19jb25maWddKQorICAgIGJ1aWxkX2NvbW1hbmQuZXh0ZW5kKFsiLWYiLCBpbl9kaXJdKQorICAgIGlmIHRhcmdldF9vdXQ6CisgICAgICBidWlsZF9jb21tYW5kLmV4dGVuZChbIi1EIiwgdGFyZ2V0X291dF0pCisgICAgaWYgInNlbGludXhfZmMiIGluIHByb3BfZGljdDoKKyAgICAgIGJ1aWxkX2NvbW1hbmQuZXh0ZW5kKFsiLXMiLCBwcm9wX2RpY3RbInNlbGludXhfZmMiXV0pCisgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyItdCIsIHByb3BfZGljdFsibW91bnRfcG9pbnQiXV0pCisgICAgaWYgInRpbWVzdGFtcCIgaW4gcHJvcF9kaWN0OgorICAgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyItVCIsIHN0cihwcm9wX2RpY3RbInRpbWVzdGFtcCJdKV0pCisgICAgYnVpbGRfY29tbWFuZC5leHRlbmQoWyItTCIsIHByb3BfZGljdFsibW91bnRfcG9pbnQiXV0pCiAgIGVsc2U6CiAgICAgcHJpbnQoIkVycm9yOiB1bmtub3duIGZpbGVzeXN0ZW0gdHlwZSAnJXMnIiAlIChmc190eXBlKSkKICAgICByZXR1cm4gRmFsc2UKQEAgLTUzMSw1NiArNjA5LDE1IEBACiAgICAgc2h1dGlsLnJtdHJlZShzdGFnaW5nX3N5c3RlbSwgaWdub3JlX2Vycm9ycz1UcnVlKQogICAgIHNodXRpbC5jb3B5dHJlZShvcmlnaW5faW4sIHN0YWdpbmdfc3lzdGVtLCBzeW1saW5rcz1UcnVlKQogCi0gIGhhc19yZXNlcnZlZF9ibG9ja3MgPSBwcm9wX2RpY3QuZ2V0KCJoYXNfZXh0NF9yZXNlcnZlZF9ibG9ja3MiKSA9PSAidHJ1ZSIKLSAgZXh0NGZzX291dHB1dCA9IE5vbmUKLQotICB0cnk6Ci0gICAgaWYgZnNfdHlwZS5zdGFydHN3aXRoKCJleHQ0Iik6Ci0gICAgICAoZXh0NGZzX291dHB1dCwgZXhpdF9jb2RlKSA9IFJ1bkNvbW1hbmQoYnVpbGRfY29tbWFuZCkKLSAgICBlbHNlOgotICAgICAgKF8sIGV4aXRfY29kZSkgPSBSdW5Db21tYW5kKGJ1aWxkX2NvbW1hbmQpCi0gIGZpbmFsbHk6Ci0gICAgaWYgaW5fZGlyICE9IG9yaWdpbl9pbjoKLSAgICAgICMgQ2xlYW4gdXAgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIGFuZCBmaWxlcy4KLSAgICAgIHNodXRpbC5ybXRyZWUoaW5fZGlyLCBpZ25vcmVfZXJyb3JzPVRydWUpCi0gICAgICBpZiBmc19jb25maWc6Ci0gICAgICAgIG9zLnJlbW92ZShmc19jb25maWcpCi0gICAgaWYgYmFzZV9mc19maWxlIGlzIG5vdCBOb25lOgotICAgICAgb3MucmVtb3ZlKGJhc2VfZnNfZmlsZSkKKyAgKG1rZnNfb3V0cHV0LCBleGl0X2NvZGUpID0gUnVuQ29tbWFuZChidWlsZF9jb21tYW5kKQogICBpZiBleGl0X2NvZGUgIT0gMDoKKyAgICBwcmludCgiRXJyb3I6ICclcycgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVkOlxuJXMiICUgKAorICAgICAgICBidWlsZF9jb21tYW5kLCBleGl0X2NvZGUsIG1rZnNfb3V0cHV0KSkKICAgICByZXR1cm4gRmFsc2UKIAotICAjIEJ1ZzogMjE1MjI3MTksIDIyMDIzNDY1Ci0gICMgVGhlcmUgYXJlIHNvbWUgcmVzZXJ2ZWQgYmxvY2tzIG9uIGV4dDQgRlMgKGxlc3NlciBvZiA0MDk2IGJsb2NrcyBhbmQgMiUpLgotICAjIFdlIG5lZWQgdG8gZGVkdWN0IHRob3NlIGJsb2NrcyBmcm9tIHRoZSBhdmFpbGFibGUgc3BhY2UsIHNpbmNlIHRoZXkgYXJlCi0gICMgbm90IHdyaXRhYmxlIGV2ZW4gd2l0aCByb290IHByaXZpbGVnZS4gSXQgb25seSBhZmZlY3RzIGRldmljZXMgdXNpbmcKLSAgIyBmaWxlLWJhc2VkIE9UQSBhbmQgYSBrZXJuZWwgdmVyc2lvbiBvZiAzLjEwIG9yIGdyZWF0ZXIgKGN1cnJlbnRseSBqdXN0Ci0gICMgc3Byb3V0KS4KLSAgIyBTZXBhcmF0ZWx5LCBjaGVjayBpZiB0aGVyZSdzIGVub3VnaCBoZWFkcm9vbSBzcGFjZSBhdmFpbGFibGUuIFRoaXMgaXMgdXNlZnVsIGZvcgotICAjIGRldmljZXMgd2l0aCBsb3cgZGlzayBzcGFjZSB0aGF0IGhhdmUgc3lzdGVtIGltYWdlIHZhcmlhdGlvbiBiZXR3ZWVuIGJ1aWxkcy4KLSAgaWYgKGhhc19yZXNlcnZlZF9ibG9ja3Mgb3IgInBhcnRpdGlvbl9oZWFkcm9vbSIgaW4gcHJvcF9kaWN0KSBhbmQgZnNfdHlwZS5zdGFydHN3aXRoKCJleHQ0Iik6Ci0gICAgYXNzZXJ0IGV4dDRmc19vdXRwdXQgaXMgbm90IE5vbmUKLSAgICBleHQ0ZnNfc3RhdHMgPSByZS5jb21waWxlKAotICAgICAgICByJ0NyZWF0ZWQgZmlsZXN5c3RlbSB3aXRoIC4qICg/UDx1c2VkX2Jsb2Nrcz5bMC05XSspLycKLSAgICAgICAgcicoP1A8dG90YWxfYmxvY2tzPlswLTldKykgYmxvY2tzJykKLSAgICBtID0gZXh0NGZzX3N0YXRzLm1hdGNoKGV4dDRmc19vdXRwdXQuc3RyaXAoKS5zcGxpdCgnXG4nKVstMV0pCi0gICAgdXNlZF9ibG9ja3MgPSBpbnQobS5ncm91cGRpY3QoKS5nZXQoJ3VzZWRfYmxvY2tzJykpCi0gICAgdG90YWxfYmxvY2tzID0gaW50KG0uZ3JvdXBkaWN0KCkuZ2V0KCd0b3RhbF9ibG9ja3MnKSkKLSAgICByZXNlcnZlZF9ibG9ja3MgPSAwCi0gICAgaGVhZHJvb21fYmxvY2tzID0gMAotICAgIGFkanVzdGVkX2Jsb2NrcyA9IHRvdGFsX2Jsb2NrcwotICAgIGlmIGhhc19yZXNlcnZlZF9ibG9ja3M6Ci0gICAgICByZXNlcnZlZF9ibG9ja3MgPSBtaW4oNDA5NiwgaW50KHRvdGFsX2Jsb2NrcyAqIDAuMDIpKQotICAgICAgYWRqdXN0ZWRfYmxvY2tzIC09IHJlc2VydmVkX2Jsb2NrcwotICAgIGlmICJwYXJ0aXRpb25faGVhZHJvb20iIGluIHByb3BfZGljdDoKLSAgICAgIGhlYWRyb29tX2Jsb2NrcyA9IGludChwcm9wX2RpY3QuZ2V0KCdwYXJ0aXRpb25faGVhZHJvb20nKSkgLyBCTE9DS19TSVpFCi0gICAgICBhZGp1c3RlZF9ibG9ja3MgLT0gaGVhZHJvb21fYmxvY2tzCi0gICAgaWYgdXNlZF9ibG9ja3MgPiBhZGp1c3RlZF9ibG9ja3M6Ci0gICAgICBtb3VudF9wb2ludCA9IHByb3BfZGljdC5nZXQoIm1vdW50X3BvaW50IikKLSAgICAgIHByaW50KCJFcnJvcjogTm90IGVub3VnaCByb29tIG9uICVzICh0b3RhbDogJWQgYmxvY2tzLCB1c2VkOiAlZCBibG9ja3MsICIKLSAgICAgICAgICAgICJyZXNlcnZlZDogJWQgYmxvY2tzLCBoZWFkcm9vbTogJWQgYmxvY2tzLCBhdmFpbGFibGU6ICVkIGJsb2NrcykiICUgKAotICAgICAgICAgICAgICAgIG1vdW50X3BvaW50LCB0b3RhbF9ibG9ja3MsIHVzZWRfYmxvY2tzLCByZXNlcnZlZF9ibG9ja3MsCi0gICAgICAgICAgICAgICAgaGVhZHJvb21fYmxvY2tzLCBhZGp1c3RlZF9ibG9ja3MpKQorICAjIENoZWNrIGlmIHRoZXJlJ3MgZW5vdWdoIGhlYWRyb29tIHNwYWNlIGF2YWlsYWJsZSBmb3IgZXh0NCBpbWFnZS4KKyAgaWYgInBhcnRpdGlvbl9oZWFkcm9vbSIgaW4gcHJvcF9kaWN0IGFuZCBmc190eXBlLnN0YXJ0c3dpdGgoImV4dDQiKToKKyAgICBpZiBub3QgQ2hlY2tIZWFkcm9vbShta2ZzX291dHB1dCwgcHJvcF9kaWN0KToKICAgICAgIHJldHVybiBGYWxzZQogCiAgIGlmIG5vdCBmc19zcGFuc19wYXJ0aXRpb246CkBAIC01OTQsNyArNjMxLDcgQEAKICAgICBpZiB2ZXJpdHlfc3VwcG9ydGVkIGFuZCBpc192ZXJpdHlfcGFydGl0aW9uOgogICAgICAgWmVyb1BhZFNpbWcob3V0X2ZpbGUsIHBhcnRpdGlvbl9zaXplIC0gaW1hZ2Vfc2l6ZSkKIAotICAjIGNyZWF0ZSB0aGUgdmVyaWZpZWQgaW1hZ2UgaWYgdGhpcyBpcyB0byBiZSB2ZXJpZmllZAorICAjIENyZWF0ZSB0aGUgdmVyaWZpZWQgaW1hZ2UgaWYgdGhpcyBpcyB0byBiZSB2ZXJpZmllZC4KICAgaWYgdmVyaXR5X3N1cHBvcnRlZCBhbmQgaXNfdmVyaXR5X3BhcnRpdGlvbjoKICAgICBpZiBub3QgTWFrZVZlcml0eUVuYWJsZWRJbWFnZShvdXRfZmlsZSwgdmVyaXR5X2ZlY19zdXBwb3J0ZWQsIHByb3BfZGljdCk6CiAgICAgICByZXR1cm4gRmFsc2UKQEAgLTYxMCwyMiArNjQ3LDI4IEBACiAgICAgc2FsdCA9IHByb3BfZGljdC5nZXQoImF2Yl9zYWx0IikKICAgICAjIGF2Yl9hZGRfaGFzaF9mb290ZXJfYXJncyBvciBhdmJfYWRkX2hhc2h0cmVlX2Zvb3Rlcl9hcmdzCiAgICAgYWRkaXRpb25hbF9hcmdzID0gcHJvcF9kaWN0WyJhdmJfYWRkXyIgKyBhdmJfZm9vdGVyX3R5cGUgKyAiX2Zvb3Rlcl9hcmdzIl0KLSAgICBpZiBub3QgQVZCQWRkRm9vdGVyKG91dF9maWxlLCBhdmJ0b29sLCBhdmJfZm9vdGVyX3R5cGUsIG9yaWdpbmFsX3BhcnRpdGlvbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uX25hbWUsIGtleV9wYXRoLCBhbGdvcml0aG0sIHNhbHQsIGFkZGl0aW9uYWxfYXJncyk6CisgICAgaWYgbm90IEFWQkFkZEZvb3RlcihvdXRfZmlsZSwgYXZidG9vbCwgYXZiX2Zvb3Rlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxfcGFydGl0aW9uX3NpemUsIHBhcnRpdGlvbl9uYW1lLCBrZXlfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsZ29yaXRobSwgc2FsdCwgYWRkaXRpb25hbF9hcmdzKToKICAgICAgIHJldHVybiBGYWxzZQogCi0gIGlmIHJ1bl9mc2NrIGFuZCBwcm9wX2RpY3QuZ2V0KCJza2lwX2ZzY2siKSAhPSAidHJ1ZSI6CisgIGlmIHJ1bl9lMmZzY2sgYW5kIHByb3BfZGljdC5nZXQoInNraXBfZnNjayIpICE9ICJ0cnVlIjoKICAgICBzdWNjZXNzLCB1bnNwYXJzZV9pbWFnZSA9IFVuc3BhcnNlSW1hZ2Uob3V0X2ZpbGUsIHJlcGxhY2U9RmFsc2UpCiAgICAgaWYgbm90IHN1Y2Nlc3M6CiAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICMgUnVuIGUyZnNjayBvbiB0aGUgaW5mbGF0ZWQgaW1hZ2UgZmlsZQogICAgIGUyZnNja19jb21tYW5kID0gWyJlMmZzY2siLCAiLWYiLCAiLW4iLCB1bnNwYXJzZV9pbWFnZV0KLSAgICAoXywgZXhpdF9jb2RlKSA9IFJ1bkNvbW1hbmQoZTJmc2NrX2NvbW1hbmQpCisgICAgKGUyZnNja19vdXRwdXQsIGV4aXRfY29kZSkgPSBSdW5Db21tYW5kKGUyZnNja19jb21tYW5kKQogCiAgICAgb3MucmVtb3ZlKHVuc3BhcnNlX2ltYWdlKQogCi0gIHJldHVybiBleGl0X2NvZGUgPT0gMAorICAgIGlmIGV4aXRfY29kZSAhPSAwOgorICAgICAgcHJpbnQoIkVycm9yOiAnJXMnIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlZDpcbiVzIiAlICgKKyAgICAgICAgICBlMmZzY2tfY29tbWFuZCwgZXhpdF9jb2RlLCBlMmZzY2tfb3V0cHV0KSkKKyAgICAgIHJldHVybiBGYWxzZQorCisgIHJldHVybiBUcnVlCiAKIAogZGVmIEltYWdlUHJvcEZyb21HbG9iYWxEaWN0KGdsb2JfZGljdCwgbW91bnRfcG9pbnQpOgpAQCAtNjgyLDcgKzcyNSw3IEBACiAgICAgY29weV9wcm9wKCJzeXN0ZW1fcm9vdF9pbWFnZSIsICJzeXN0ZW1fcm9vdF9pbWFnZSIpCiAgICAgY29weV9wcm9wKCJyYW1kaXNrX2RpciIsICJyYW1kaXNrX2RpciIpCiAgICAgY29weV9wcm9wKCJyYW1kaXNrX2ZzX2NvbmZpZyIsICJyYW1kaXNrX2ZzX2NvbmZpZyIpCi0gICAgY29weV9wcm9wKCJoYXNfZXh0NF9yZXNlcnZlZF9ibG9ja3MiLCAiaGFzX2V4dDRfcmVzZXJ2ZWRfYmxvY2tzIikKKyAgICBjb3B5X3Byb3AoImV4dDRfc2hhcmVfZHVwX2Jsb2NrcyIsICJleHQ0X3NoYXJlX2R1cF9ibG9ja3MiKQogICAgIGNvcHlfcHJvcCgic3lzdGVtX3NxdWFzaGZzX2NvbXByZXNzb3IiLCAic3F1YXNoZnNfY29tcHJlc3NvciIpCiAgICAgY29weV9wcm9wKCJzeXN0ZW1fc3F1YXNoZnNfY29tcHJlc3Nvcl9vcHQiLCAic3F1YXNoZnNfY29tcHJlc3Nvcl9vcHQiKQogICAgIGNvcHlfcHJvcCgic3lzdGVtX3NxdWFzaGZzX2Jsb2NrX3NpemUiLCAic3F1YXNoZnNfYmxvY2tfc2l6ZSIpCkBAIC02OTAsNyArNzMzLDggQEAKICAgICBjb3B5X3Byb3AoInN5c3RlbV9iYXNlX2ZzX2ZpbGUiLCAiYmFzZV9mc19maWxlIikKICAgICBjb3B5X3Byb3AoInN5c3RlbV9leHRmc19pbm9kZV9jb3VudCIsICJleHRmc19pbm9kZV9jb3VudCIpCiAgIGVsaWYgbW91bnRfcG9pbnQgPT0gInN5c3RlbV9vdGhlciI6Ci0gICAgIyBXZSBpbmhlcml0IHRoZSBzZWxpbnV4IHBvbGljaWVzIG9mIC9zeXN0ZW0gc2luY2Ugd2UgY29udGFpbiBzb21lIG9mIGl0cyBmaWxlcy4KKyAgICAjIFdlIGluaGVyaXQgdGhlIHNlbGludXggcG9saWNpZXMgb2YgL3N5c3RlbSBzaW5jZSB3ZSBjb250YWluIHNvbWUgb2YgaXRzCisgICAgIyBmaWxlcy4KICAgICBkWyJtb3VudF9wb2ludCJdID0gInN5c3RlbSIKICAgICBjb3B5X3Byb3AoImF2Yl9zeXN0ZW1faGFzaHRyZWVfZW5hYmxlIiwgImF2Yl9oYXNodHJlZV9lbmFibGUiKQogICAgIGNvcHlfcHJvcCgiYXZiX3N5c3RlbV9hZGRfaGFzaHRyZWVfZm9vdGVyX2FyZ3MiLApAQCAtNzAyLDcgKzc0Niw2IEBACiAgICAgY29weV9wcm9wKCJzeXN0ZW1fc2l6ZSIsICJwYXJ0aXRpb25fc2l6ZSIpCiAgICAgY29weV9wcm9wKCJzeXN0ZW1fam91cm5hbF9zaXplIiwgImpvdXJuYWxfc2l6ZSIpCiAgICAgY29weV9wcm9wKCJzeXN0ZW1fdmVyaXR5X2Jsb2NrX2RldmljZSIsICJ2ZXJpdHlfYmxvY2tfZGV2aWNlIikKLSAgICBjb3B5X3Byb3AoImhhc19leHQ0X3Jlc2VydmVkX2Jsb2NrcyIsICJoYXNfZXh0NF9yZXNlcnZlZF9ibG9ja3MiKQogICAgIGNvcHlfcHJvcCgic3lzdGVtX3NxdWFzaGZzX2NvbXByZXNzb3IiLCAic3F1YXNoZnNfY29tcHJlc3NvciIpCiAgICAgY29weV9wcm9wKCJzeXN0ZW1fc3F1YXNoZnNfY29tcHJlc3Nvcl9vcHQiLCAic3F1YXNoZnNfY29tcHJlc3Nvcl9vcHQiKQogICAgIGNvcHlfcHJvcCgic3lzdGVtX3NxdWFzaGZzX2Jsb2NrX3NpemUiLCAic3F1YXNoZnNfYmxvY2tfc2l6ZSIpCkBAIC03MTMsNyArNzU2LDcgQEAKICAgICBjb3B5X3Byb3AoImZzX3R5cGUiLCAiZnNfdHlwZSIpCiAgICAgY29weV9wcm9wKCJ1c2VyZGF0YV9mc190eXBlIiwgImZzX3R5cGUiKQogICAgIGNvcHlfcHJvcCgidXNlcmRhdGFfc2l6ZSIsICJwYXJ0aXRpb25fc2l6ZSIpCi0gICAgY29weV9wcm9wKCJmbGFzaF9sb2dpY2FsX2Jsb2NrX3NpemUiLCJmbGFzaF9sb2dpY2FsX2Jsb2NrX3NpemUiKQorICAgIGNvcHlfcHJvcCgiZmxhc2hfbG9naWNhbF9ibG9ja19zaXplIiwgImZsYXNoX2xvZ2ljYWxfYmxvY2tfc2l6ZSIpCiAgICAgY29weV9wcm9wKCJmbGFzaF9lcmFzZV9ibG9ja19zaXplIiwgImZsYXNoX2VyYXNlX2Jsb2NrX3NpemUiKQogICBlbGlmIG1vdW50X3BvaW50ID09ICJjYWNoZSI6CiAgICAgY29weV9wcm9wKCJjYWNoZV9mc190eXBlIiwgImZzX3R5cGUiKQpAQCAtNzI4LDE4ICs3NzEsMzMgQEAKICAgICBjb3B5X3Byb3AoInZlbmRvcl9zaXplIiwgInBhcnRpdGlvbl9zaXplIikKICAgICBjb3B5X3Byb3AoInZlbmRvcl9qb3VybmFsX3NpemUiLCAiam91cm5hbF9zaXplIikKICAgICBjb3B5X3Byb3AoInZlbmRvcl92ZXJpdHlfYmxvY2tfZGV2aWNlIiwgInZlcml0eV9ibG9ja19kZXZpY2UiKQotICAgIGNvcHlfcHJvcCgiaGFzX2V4dDRfcmVzZXJ2ZWRfYmxvY2tzIiwgImhhc19leHQ0X3Jlc2VydmVkX2Jsb2NrcyIpCisgICAgY29weV9wcm9wKCJleHQ0X3NoYXJlX2R1cF9ibG9ja3MiLCAiZXh0NF9zaGFyZV9kdXBfYmxvY2tzIikKICAgICBjb3B5X3Byb3AoInZlbmRvcl9zcXVhc2hmc19jb21wcmVzc29yIiwgInNxdWFzaGZzX2NvbXByZXNzb3IiKQogICAgIGNvcHlfcHJvcCgidmVuZG9yX3NxdWFzaGZzX2NvbXByZXNzb3Jfb3B0IiwgInNxdWFzaGZzX2NvbXByZXNzb3Jfb3B0IikKICAgICBjb3B5X3Byb3AoInZlbmRvcl9zcXVhc2hmc19ibG9ja19zaXplIiwgInNxdWFzaGZzX2Jsb2NrX3NpemUiKQogICAgIGNvcHlfcHJvcCgidmVuZG9yX3NxdWFzaGZzX2Rpc2FibGVfNGtfYWxpZ24iLCAic3F1YXNoZnNfZGlzYWJsZV80a19hbGlnbiIpCiAgICAgY29weV9wcm9wKCJ2ZW5kb3JfYmFzZV9mc19maWxlIiwgImJhc2VfZnNfZmlsZSIpCiAgICAgY29weV9wcm9wKCJ2ZW5kb3JfZXh0ZnNfaW5vZGVfY291bnQiLCAiZXh0ZnNfaW5vZGVfY291bnQiKQorICBlbGlmIG1vdW50X3BvaW50ID09ICJwcm9kdWN0IjoKKyAgICBjb3B5X3Byb3AoImF2Yl9wcm9kdWN0X2hhc2h0cmVlX2VuYWJsZSIsICJhdmJfaGFzaHRyZWVfZW5hYmxlIikKKyAgICBjb3B5X3Byb3AoImF2Yl9wcm9kdWN0X2FkZF9oYXNodHJlZV9mb290ZXJfYXJncyIsCisgICAgICAgICAgICAgICJhdmJfYWRkX2hhc2h0cmVlX2Zvb3Rlcl9hcmdzIikKKyAgICBjb3B5X3Byb3AoImF2Yl9wcm9kdWN0X2tleV9wYXRoIiwgImF2Yl9rZXlfcGF0aCIpCisgICAgY29weV9wcm9wKCJhdmJfcHJvZHVjdF9hbGdvcml0aG0iLCAiYXZiX2FsZ29yaXRobSIpCisgICAgY29weV9wcm9wKCJwcm9kdWN0X2ZzX3R5cGUiLCAiZnNfdHlwZSIpCisgICAgY29weV9wcm9wKCJwcm9kdWN0X3NpemUiLCAicGFydGl0aW9uX3NpemUiKQorICAgIGNvcHlfcHJvcCgicHJvZHVjdF9qb3VybmFsX3NpemUiLCAiam91cm5hbF9zaXplIikKKyAgICBjb3B5X3Byb3AoInByb2R1Y3RfdmVyaXR5X2Jsb2NrX2RldmljZSIsICJ2ZXJpdHlfYmxvY2tfZGV2aWNlIikKKyAgICBjb3B5X3Byb3AoInByb2R1Y3Rfc3F1YXNoZnNfY29tcHJlc3NvciIsICJzcXVhc2hmc19jb21wcmVzc29yIikKKyAgICBjb3B5X3Byb3AoInByb2R1Y3Rfc3F1YXNoZnNfY29tcHJlc3Nvcl9vcHQiLCAic3F1YXNoZnNfY29tcHJlc3Nvcl9vcHQiKQorICAgIGNvcHlfcHJvcCgicHJvZHVjdF9zcXVhc2hmc19ibG9ja19zaXplIiwgInNxdWFzaGZzX2Jsb2NrX3NpemUiKQorICAgIGNvcHlfcHJvcCgicHJvZHVjdF9zcXVhc2hmc19kaXNhYmxlXzRrX2FsaWduIiwgInNxdWFzaGZzX2Rpc2FibGVfNGtfYWxpZ24iKQorICAgIGNvcHlfcHJvcCgicHJvZHVjdF9iYXNlX2ZzX2ZpbGUiLCAiYmFzZV9mc19maWxlIikKKyAgICBjb3B5X3Byb3AoInByb2R1Y3RfZXh0ZnNfaW5vZGVfY291bnQiLCAiZXh0ZnNfaW5vZGVfY291bnQiKQogICBlbGlmIG1vdW50X3BvaW50ID09ICJvZW0iOgogICAgIGNvcHlfcHJvcCgiZnNfdHlwZSIsICJmc190eXBlIikKICAgICBjb3B5X3Byb3AoIm9lbV9zaXplIiwgInBhcnRpdGlvbl9zaXplIikKICAgICBjb3B5X3Byb3AoIm9lbV9qb3VybmFsX3NpemUiLCAiam91cm5hbF9zaXplIikKLSAgICBjb3B5X3Byb3AoImhhc19leHQ0X3Jlc2VydmVkX2Jsb2NrcyIsICJoYXNfZXh0NF9yZXNlcnZlZF9ibG9ja3MiKQogICAgIGNvcHlfcHJvcCgib2VtX2V4dGZzX2lub2RlX2NvdW50IiwgImV4dGZzX2lub2RlX2NvdW50IikKICAgZFsicGFydGl0aW9uX25hbWUiXSA9IG1vdW50X3BvaW50CiAgIHJldHVybiBkCkBAIC03NjEsNyArODE5LDcgQEAKIAogZGVmIG1haW4oYXJndik6CiAgIGlmIGxlbihhcmd2KSAhPSA0OgotICAgIHByaW50IF9fZG9jX18KKyAgICBwcmludChfX2RvY19fKQogICAgIHN5cy5leGl0KDEpCiAKICAgaW5fZGlyID0gYXJndlswXQpAQCAtNzg5LDE3ICs4NDcsMjIgQEAKICAgICAgIG1vdW50X3BvaW50ID0gInZlbmRvciIKICAgICBlbGlmIGltYWdlX2ZpbGVuYW1lID09ICJvZW0uaW1nIjoKICAgICAgIG1vdW50X3BvaW50ID0gIm9lbSIKKyAgICBlbGlmIGltYWdlX2ZpbGVuYW1lID09ICJwcm9kdWN0LmltZyI6CisgICAgICBtb3VudF9wb2ludCA9ICJwcm9kdWN0IgogICAgIGVsc2U6Ci0gICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiZXJyb3I6IHVua25vd24gaW1hZ2UgZmlsZSBuYW1lICIsIGltYWdlX2ZpbGVuYW1lCi0gICAgICBleGl0KDEpCisgICAgICBwcmludCgiZXJyb3I6IHVua25vd24gaW1hZ2UgZmlsZSBuYW1lICIsIGltYWdlX2ZpbGVuYW1lLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICBzeXMuZXhpdCgxKQogCiAgICAgaW1hZ2VfcHJvcGVydGllcyA9IEltYWdlUHJvcEZyb21HbG9iYWxEaWN0KGdsb2JfZGljdCwgbW91bnRfcG9pbnQpCiAKICAgaWYgbm90IEJ1aWxkSW1hZ2UoaW5fZGlyLCBpbWFnZV9wcm9wZXJ0aWVzLCBvdXRfZmlsZSwgdGFyZ2V0X291dCk6Ci0gICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgImVycm9yOiBmYWlsZWQgdG8gYnVpbGQgJXMgZnJvbSAlcyIgJSAob3V0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fZGlyKQotICAgIGV4aXQoMSkKKyAgICBwcmludCgiZXJyb3I6IGZhaWxlZCB0byBidWlsZCAlcyBmcm9tICVzIiAlIChvdXRfZmlsZSwgaW5fZGlyKSwKKyAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCisgICAgc3lzLmV4aXQoMSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBtYWluKHN5cy5hcmd2WzE6XSkKKyAgdHJ5OgorICAgIG1haW4oc3lzLmFyZ3ZbMTpdKQorICBmaW5hbGx5OgorICAgIGNvbW1vbi5DbGVhbnVwKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9jaGVja19vdGFfcGFja2FnZV9zaWduYXR1cmUucHkgYi90b29scy9yZWxlYXNldG9vbHMvY2hlY2tfb3RhX3BhY2thZ2Vfc2lnbmF0dXJlLnB5CmluZGV4IDgxMDZkMDYuLjNjYWM5MGEgMTAwNzU1Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9jaGVja19vdGFfcGFja2FnZV9zaWduYXR1cmUucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL2NoZWNrX290YV9wYWNrYWdlX3NpZ25hdHVyZS5weQpAQCAtMjEsMTEgKzIxLDcgQEAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAogaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgY29tbW9uCi1pbXBvcnQgb3MKLWltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcmUKLWltcG9ydCBzaXRlCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCkBAIC0zNCwxNSArMzAsNyBAQAogZnJvbSBoYXNobGliIGltcG9ydCBzaGExCiBmcm9tIGhhc2hsaWIgaW1wb3J0IHNoYTI1NgogCi0jICd1cGRhdGVfcGF5bG9hZCcgcGFja2FnZSBpcyB1bmRlciAnc3lzdGVtL3VwZGF0ZV9lbmdpbmUvc2NyaXB0cy8nLCB3aGljaAotIyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gUFlUSE9OUEFUSC4gVHJ5IHRvIHNldCBpdCB1cCBhdXRvbWF0aWNhbGx5IGlmCi0jIGlmIEFORFJPSURfQlVJTERfVE9QIGlzIGF2YWlsYWJsZS4KLXRvcCA9IG9zLmdldGVudignQU5EUk9JRF9CVUlMRF9UT1AnKQotaWYgdG9wOgotICBzaXRlLmFkZHNpdGVkaXIob3MucGF0aC5qb2luKHRvcCwgJ3N5c3RlbScsICd1cGRhdGVfZW5naW5lJywgJ3NjcmlwdHMnKSkKLQotZnJvbSB1cGRhdGVfcGF5bG9hZC5wYXlsb2FkIGltcG9ydCBQYXlsb2FkCi1mcm9tIHVwZGF0ZV9wYXlsb2FkLnVwZGF0ZV9tZXRhZGF0YV9wYjIgaW1wb3J0IFNpZ25hdHVyZXMKK2ltcG9ydCBjb21tb24KIAogCiBkZWYgQ2VydFVzZXNTaGEyNTYoY2VydCk6CkBAIC0xMDgsMTAgKzk2LDcgQEAKICAgdXNlX3NoYTI1NiA9IENlcnRVc2VzU2hhMjU2KGNlcnQpCiAgIHByaW50KCdVc2UgU0hBLTI1NjogJXMnICUgKHVzZV9zaGEyNTYsKSkKIAotICBpZiB1c2Vfc2hhMjU2OgotICAgIGggPSBzaGEyNTYoKQotICBlbHNlOgotICAgIGggPSBzaGExKCkKKyAgaCA9IHNoYTI1NigpIGlmIHVzZV9zaGEyNTYgZWxzZSBzaGExKCkKICAgaC51cGRhdGUocGFja2FnZV9ieXRlc1s6c2lnbmVkX2xlbl0pCiAgIHBhY2thZ2VfZGlnZXN0ID0gaC5oZXhkaWdlc3QoKS5sb3dlcigpCiAKQEAgLTE2MSw0MCArMTQ2LDYgQEAKIAogZGVmIFZlcmlmeUFiT3RhUGF5bG9hZChjZXJ0LCBwYWNrYWdlKToKICAgIiIiVmVyaWZpZXMgdGhlIHBheWxvYWQgYW5kIG1ldGFkYXRhIHNpZ25hdHVyZXMgaW4gYW4gQS9CIE9UQSBwYXlsb2FkLiIiIgotCi0gIGRlZiBWZXJpZnlTaWduYXR1cmVCbG9iKGhhc2hfZmlsZSwgYmxvYik6Ci0gICAgIiIiVmVyaWZpZXMgdGhlIGlucHV0IGhhc2hfZmlsZSBhZ2FpbnN0IHRoZSBzaWduYXR1cmUgYmxvYi4iIiIKLSAgICBzaWduYXR1cmVzID0gU2lnbmF0dXJlcygpCi0gICAgc2lnbmF0dXJlcy5QYXJzZUZyb21TdHJpbmcoYmxvYikKLQotICAgIGV4dHJhY3RlZF9zaWdfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUoCi0gICAgICAgIHByZWZpeD0nZXh0cmFjdGVkLXNpZy0nLCBzdWZmaXg9Jy5iaW4nKQotICAgICMgSW4gQW5kcm9pZCwgd2Ugb25seSBleHBlY3Qgb25lIHNpZ25hdHVyZS4KLSAgICBhc3NlcnQgbGVuKHNpZ25hdHVyZXMuc2lnbmF0dXJlcykgPT0gMSwgXAotICAgICAgICAnSW52YWxpZCBudW1iZXIgb2Ygc2lnbmF0dXJlczogJWQnICUgbGVuKHNpZ25hdHVyZXMuc2lnbmF0dXJlcykKLSAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVzLnNpZ25hdHVyZXNbMF0KLSAgICBsZW5ndGggPSBsZW4oc2lnbmF0dXJlLmRhdGEpCi0gICAgYXNzZXJ0IGxlbmd0aCA9PSAyNTYsICdJbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGggJWQnICUgKGxlbmd0aCwpCi0gICAgd2l0aCBvcGVuKGV4dHJhY3RlZF9zaWdfZmlsZSwgJ3cnKSBhcyBmOgotICAgICAgZi53cml0ZShzaWduYXR1cmUuZGF0YSkKLQotICAgICMgVmVyaWZ5IHRoZSBzaWduYXR1cmUgZmlsZSBleHRyYWN0ZWQgZnJvbSB0aGUgcGF5bG9hZCwgYnkgcmV2ZXJzaW5nIHRoZQotICAgICMgc2lnbmluZyBvcGVyYXRpb24uIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIGRvbmUgYnkgY2FsbGluZyAnb3BlbnNzbAotICAgICMgcnNhdXRsIC12ZXJpZnkgLWNlcnRpbiAtaW5rZXkgPGNlcnQucGVtPiAtaW4gPGV4dHJhY3RlZF9zaWdfZmlsZT4gLW91dAotICAgICMgPG91dHB1dD4nLCB0aGVuIHRvIGFzc2VydCB0aGF0Ci0gICAgIyA8b3V0cHV0PiA9PSBTSEEtMjU2IERpZ2VzdEluZm8gcHJlZml4IHx8IDxoYXNoX2ZpbGU+LgotICAgIGNtZCA9IFsnb3BlbnNzbCcsICdwa2V5dXRsJywgJy12ZXJpZnknLCAnLWNlcnRpbicsICctaW5rZXknLCBjZXJ0LAotICAgICAgICAgICAnLXBrZXlvcHQnLCAnZGlnZXN0OnNoYTI1NicsICctaW4nLCBoYXNoX2ZpbGUsCi0gICAgICAgICAgICctc2lnZmlsZScsIGV4dHJhY3RlZF9zaWdfZmlsZV0KLSAgICBwID0gY29tbW9uLlJ1bihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgcmVzdWx0LCBfID0gcC5jb21tdW5pY2F0ZSgpCi0KLSAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NsL29wZW5zc2wvcHVsbC8zMjEzCi0gICAgIyAnb3BlbnNzbCBwa2V5dXRsIC12ZXJpZnknIChwcmlvciB0byAxLjEuMCkgcmV0dXJucyBub24temVybyByZXR1cm4gY29kZSwKLSAgICAjIGV2ZW4gb24gc3VjY2Vzc2Z1bCB2ZXJpZmljYXRpb24uIFRvIGF2b2lkIHRoZSBmYWxzZSBhbGFybSB3aXRoIG9sZGVyCi0gICAgIyBvcGVuc3NsLCBjaGVjayB0aGUgb3V0cHV0IGRpcmVjdGx5LgotICAgIGFzc2VydCByZXN1bHQuc3RyaXAoKSA9PSAnU2lnbmF0dXJlIFZlcmlmaWVkIFN1Y2Nlc3NmdWxseScsIHJlc3VsdC5zdHJpcCgpCi0KICAgcGFja2FnZV96aXAgPSB6aXBmaWxlLlppcEZpbGUocGFja2FnZSwgJ3InKQogICBpZiAncGF5bG9hZC5iaW4nIG5vdCBpbiBwYWNrYWdlX3ppcC5uYW1lbGlzdCgpOgogICAgIGNvbW1vbi5aaXBDbG9zZShwYWNrYWdlX3ppcCkKQEAgLTIwMiwzNyArMTUzLDIzIEBACiAKICAgcHJpbnQoJ1ZlcmlmeWluZyBBL0IgT1RBIHBheWxvYWQgc2lnbmF0dXJlcy4uLicpCiAKLSAgcGFja2FnZV9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncGFja2FnZS0nKQotICBjb21tb24uT1BUSU9OUy50ZW1wZmlsZXMuYXBwZW5kKHBhY2thZ2VfZGlyKQorICAjIER1bXAgcHVia2V5IGZyb20gdGhlIGNlcnRpZmljYXRlLgorICBwdWJrZXkgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ia2V5LSIsIHN1ZmZpeD0iLnBlbSIpCisgIHdpdGggb3BlbihwdWJrZXksICd3YicpIGFzIHB1YmtleV9mcDoKKyAgICBwdWJrZXlfZnAud3JpdGUoY29tbW9uLkV4dHJhY3RQdWJsaWNLZXkoY2VydCkpCiAKKyAgcGFja2FnZV9kaXIgPSBjb21tb24uTWFrZVRlbXBEaXIocHJlZml4PSdwYWNrYWdlLScpCisKKyAgIyBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHdpdGggZGVsdGFfZ2VuZXJhdG9yLgogICBwYXlsb2FkX2ZpbGUgPSBwYWNrYWdlX3ppcC5leHRyYWN0KCdwYXlsb2FkLmJpbicsIHBhY2thZ2VfZGlyKQotICBwYXlsb2FkID0gUGF5bG9hZChvcGVuKHBheWxvYWRfZmlsZSwgJ3JiJykpCi0gIHBheWxvYWQuSW5pdCgpCi0KLSAgIyBFeHRyYWN0IHRoZSBwYXlsb2FkIGhhc2ggYW5kIG1ldGFkYXRhIGhhc2ggZnJvbSB0aGUgcGF5bG9hZC5iaW4uCi0gIHBheWxvYWRfaGFzaF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9J2hhc2gtJywgc3VmZml4PScuYmluJykKLSAgbWV0YWRhdGFfaGFzaF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9J2hhc2gtJywgc3VmZml4PScuYmluJykKLSAgY21kID0gWydicmlsbG9fdXBkYXRlX3BheWxvYWQnLCAnaGFzaCcsCi0gICAgICAgICAnLS11bnNpZ25lZF9wYXlsb2FkJywgcGF5bG9hZF9maWxlLAotICAgICAgICAgJy0tc2lnbmF0dXJlX3NpemUnLCAnMjU2JywKLSAgICAgICAgICctLW1ldGFkYXRhX2hhc2hfZmlsZScsIG1ldGFkYXRhX2hhc2hfZmlsZSwKLSAgICAgICAgICctLXBheWxvYWRfaGFzaF9maWxlJywgcGF5bG9hZF9oYXNoX2ZpbGVdCi0gIHAgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgcC5jb21tdW5pY2F0ZSgpCi0gIGFzc2VydCBwLnJldHVybmNvZGUgPT0gMCwgJ2JyaWxsb191cGRhdGVfcGF5bG9hZCBoYXNoIGZhaWxlZCcKLQotICAjIFBheWxvYWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi4KLSAgYXNzZXJ0IHBheWxvYWQubWFuaWZlc3QuSGFzRmllbGQoJ3NpZ25hdHVyZXNfb2Zmc2V0JykKLSAgcGF5bG9hZF9zaWduYXR1cmUgPSBwYXlsb2FkLlJlYWREYXRhQmxvYigKLSAgICAgIHBheWxvYWQubWFuaWZlc3Quc2lnbmF0dXJlc19vZmZzZXQsIHBheWxvYWQubWFuaWZlc3Quc2lnbmF0dXJlc19zaXplKQotICBWZXJpZnlTaWduYXR1cmVCbG9iKHBheWxvYWRfaGFzaF9maWxlLCBwYXlsb2FkX3NpZ25hdHVyZSkKLQotICAjIE1ldGFkYXRhIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uCi0gIG1ldGFkYXRhX3NpZ25hdHVyZSA9IHBheWxvYWQuUmVhZERhdGFCbG9iKAotICAgICAgLXBheWxvYWQuaGVhZGVyLm1ldGFkYXRhX3NpZ25hdHVyZV9sZW4sCi0gICAgICBwYXlsb2FkLmhlYWRlci5tZXRhZGF0YV9zaWduYXR1cmVfbGVuKQotICBWZXJpZnlTaWduYXR1cmVCbG9iKG1ldGFkYXRhX2hhc2hfZmlsZSwgbWV0YWRhdGFfc2lnbmF0dXJlKQotCisgIGNtZCA9IFsnZGVsdGFfZ2VuZXJhdG9yJywKKyAgICAgICAgICctLWluX2ZpbGU9JyArIHBheWxvYWRfZmlsZSwKKyAgICAgICAgICctLXB1YmxpY19rZXk9JyArIHB1YmtleV0KKyAgcHJvYyA9IGNvbW1vbi5SdW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgIHN0ZG91dGRhdGEsIF8gPSBwcm9jLmNvbW11bmljYXRlKCkKKyAgYXNzZXJ0IHByb2MucmV0dXJuY29kZSA9PSAwLCBcCisgICAgICAnRmFpbGVkIHRvIHZlcmlmeSBwYXlsb2FkIHdpdGggZGVsdGFfZ2VuZXJhdG9yOiAlc1xuJXMnICUgKHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dGRhdGEpCiAgIGNvbW1vbi5aaXBDbG9zZShwYWNrYWdlX3ppcCkKIAogICAjIFZlcmlmaWVkIHN1Y2Nlc3NmdWxseSB1cG9uIHJlYWNoaW5nIGhlcmUuCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvY2hlY2tfdGFyZ2V0X2ZpbGVzX3NpZ25hdHVyZXMucHkgYi90b29scy9yZWxlYXNldG9vbHMvY2hlY2tfdGFyZ2V0X2ZpbGVzX3NpZ25hdHVyZXMucHkKaW5kZXggZjlhYTRmYS4uYjlmMzlhNiAxMDA3NTUKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL2NoZWNrX3RhcmdldF9maWxlc19zaWduYXR1cmVzLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9jaGVja190YXJnZXRfZmlsZXNfc2lnbmF0dXJlcy5weQpAQCAtMzksMjUgKzM5LDI2IEBACiAKICIiIgogCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKK2ltcG9ydCB6aXBmaWxlCisKK2ltcG9ydCBjb21tb24KIAogaWYgc3lzLmhleHZlcnNpb24gPCAweDAyMDcwMDAwOgogICBwcmludCA+PiBzeXMuc3RkZXJyLCAiUHl0aG9uIDIuNyBvciBuZXdlciBpcyByZXF1aXJlZC4iCiAgIHN5cy5leGl0KDEpCiAKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHppcGZpbGUKIAotaW1wb3J0IGNvbW1vbgotCi0jIFdvcmsgYXJvdW5kIGEgYnVnIGluIHB5dGhvbidzIHppcGZpbGUgbW9kdWxlIHRoYXQgcHJldmVudHMgb3BlbmluZwotIyBvZiB6aXBmaWxlcyBpZiBhbnkgZW50cnkgaGFzIGFuIGV4dHJhIGZpZWxkIG9mIGJldHdlZW4gMSBhbmQgMyBieXRlcwotIyAod2hpY2ggaXMgY29tbW9uIHdpdGggemlwYWxpZ25lZCBBUEtzKS4gIFRoaXMgb3ZlcnJpZGVzIHRoZQotIyBaaXBJbmZvLl9kZWNvZGVFeHRyYSgpIG1ldGhvZCAod2hpY2ggY29udGFpbnMgdGhlIGJ1Zykgd2l0aCBhbiBlbXB0eQotIyB2ZXJzaW9uIChzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGRlY29kZSB0aGUgZXh0cmEgZmllbGQgYW55d2F5KS4KKyMgV29yayBhcm91bmQgYSBidWcgaW4gUHl0aG9uJ3MgemlwZmlsZSBtb2R1bGUgdGhhdCBwcmV2ZW50cyBvcGVuaW5nIG9mIHppcGZpbGVzCisjIGlmIGFueSBlbnRyeSBoYXMgYW4gZXh0cmEgZmllbGQgb2YgYmV0d2VlbiAxIGFuZCAzIGJ5dGVzICh3aGljaCBpcyBjb21tb24gd2l0aAorIyB6aXBhbGlnbmVkIEFQS3MpLiBUaGlzIG92ZXJyaWRlcyB0aGUgWmlwSW5mby5fZGVjb2RlRXh0cmEoKSBtZXRob2QgKHdoaWNoCisjIGNvbnRhaW5zIHRoZSBidWcpIHdpdGggYW4gZW1wdHkgdmVyc2lvbiAoc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBkZWNvZGUgdGhlCisjIGV4dHJhIGZpZWxkIGFueXdheSkuCisjIElzc3VlICMxNDMxNTogaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNDMxNSwgZml4ZWQgaW4gUHl0aG9uIDIuNy44IGFuZAorIyBQeXRob24gMy41LjAgYWxwaGEgMS4KIGNsYXNzIE15WmlwSW5mbyh6aXBmaWxlLlppcEluZm8pOgogICBkZWYgX2RlY29kZUV4dHJhKHNlbGYpOgogICAgIHBhc3MKQEAgLTIzNSwyNiArMjM2LDQ4IEBACiAgICAgc2VsZi5jZXJ0bWFwID0gTm9uZQogCiAgIGRlZiBMb2FkWmlwRmlsZShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgZCwgeiA9IGNvbW1vbi5VbnppcFRlbXAoZmlsZW5hbWUsIFsnKi5hcGsnXSkKLSAgICB0cnk6Ci0gICAgICBzZWxmLmFwa3MgPSB7fQotICAgICAgc2VsZi5hcGtzX2J5X2Jhc2VuYW1lID0ge30KLSAgICAgIGZvciBkaXJwYXRoLCBfLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhkKToKLSAgICAgICAgZm9yIGZuIGluIGZpbGVuYW1lczoKLSAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgiLmFwayIpOgotICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCi0gICAgICAgICAgICBkaXNwbGF5bmFtZSA9IGZ1bGxuYW1lW2xlbihkKSsxOl0KLSAgICAgICAgICAgIGFwayA9IEFQSyhmdWxsbmFtZSwgZGlzcGxheW5hbWUpCi0gICAgICAgICAgICBzZWxmLmFwa3NbYXBrLmZpbGVuYW1lXSA9IGFwawotICAgICAgICAgICAgc2VsZi5hcGtzX2J5X2Jhc2VuYW1lW29zLnBhdGguYmFzZW5hbWUoYXBrLmZpbGVuYW1lKV0gPSBhcGsKKyAgICAjIEZpcnN0IHJlYWQgdGhlIEFQSyBjZXJ0cyBmaWxlIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGVyZSBhcmUgY29tcHJlc3NlZAorICAgICMgQVBLcyBpbiB0aGUgYXJjaGl2ZS4gSWYgd2UgZG8gaGF2ZSBjb21wcmVzc2VkIEFQS3MgaW4gdGhlIGFyY2hpdmUsIHRoZW4gd2UKKyAgICAjIG11c3QgZGVjb21wcmVzcyB0aGVtIGluZGl2aWR1YWxseSBiZWZvcmUgd2UgcGVyZm9ybSBhbnkgYW5hbHlzaXMuCiAKLSAgICAgICAgICAgIHNlbGYubWF4X3BrZ19sZW4gPSBtYXgoc2VsZi5tYXhfcGtnX2xlbiwgbGVuKGFway5wYWNrYWdlKSkKLSAgICAgICAgICAgIHNlbGYubWF4X2ZuX2xlbiA9IG1heChzZWxmLm1heF9mbl9sZW4sIGxlbihhcGsuZmlsZW5hbWUpKQotICAgIGZpbmFsbHk6Ci0gICAgICBzaHV0aWwucm10cmVlKGQpCisgICAgIyBUaGlzIGlzIHRoZSBsaXN0IG9mIHdpbGRjYXJkcyBvZiBmaWxlcyB3ZSBleHRyYWN0IGZyb20gfGZpbGVuYW1lfC4KKyAgICBhcGtfZXh0ZW5zaW9ucyA9IFsnKi5hcGsnXQogCi0gICAgc2VsZi5jZXJ0bWFwID0gY29tbW9uLlJlYWRBcGtDZXJ0cyh6KQotICAgIHouY2xvc2UoKQorICAgIHNlbGYuY2VydG1hcCwgY29tcHJlc3NlZF9leHRlbnNpb24gPSBjb21tb24uUmVhZEFwa0NlcnRzKAorICAgICAgICB6aXBmaWxlLlppcEZpbGUoZmlsZW5hbWUsICJyIikpCisgICAgaWYgY29tcHJlc3NlZF9leHRlbnNpb246CisgICAgICBhcGtfZXh0ZW5zaW9ucy5hcHBlbmQoIiouYXBrIiArIGNvbXByZXNzZWRfZXh0ZW5zaW9uKQorCisgICAgZCA9IGNvbW1vbi5VbnppcFRlbXAoZmlsZW5hbWUsIGFwa19leHRlbnNpb25zKQorICAgIHNlbGYuYXBrcyA9IHt9CisgICAgc2VsZi5hcGtzX2J5X2Jhc2VuYW1lID0ge30KKyAgICBmb3IgZGlycGF0aCwgXywgZmlsZW5hbWVzIGluIG9zLndhbGsoZCk6CisgICAgICBmb3IgZm4gaW4gZmlsZW5hbWVzOgorICAgICAgICAjIERlY29tcHJlc3MgY29tcHJlc3NlZCBBUEtzIGJlZm9yZSB3ZSBiZWdpbiBwcm9jZXNzaW5nIHRoZW0uCisgICAgICAgIGlmIGNvbXByZXNzZWRfZXh0ZW5zaW9uIGFuZCBmbi5lbmRzd2l0aChjb21wcmVzc2VkX2V4dGVuc2lvbik6CisgICAgICAgICAgIyBGaXJzdCBzdHJpcCB0aGUgY29tcHJlc3NlZCBleHRlbnNpb24gZnJvbSB0aGUgZmlsZS4KKyAgICAgICAgICB1bmNvbXByZXNzZWRfZm4gPSBmbls6LWxlbihjb21wcmVzc2VkX2V4dGVuc2lvbildCisKKyAgICAgICAgICAjIERlY29tcHJlc3MgdGhlIGNvbXByZXNzZWQgZmlsZSB0byB0aGUgb3V0cHV0IGZpbGUuCisgICAgICAgICAgY29tbW9uLkd1bnppcChvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pLAorICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRpcnBhdGgsIHVuY29tcHJlc3NlZF9mbikpCisKKyAgICAgICAgICAjIEZpbmFsbHksIGRlbGV0ZSB0aGUgY29tcHJlc3NlZCBmaWxlIGFuZCB1c2UgdGhlIHVuY29tcHJlc3NlZCBmaWxlCisgICAgICAgICAgIyBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBOb3RlIHRoYXQgdGhlIGRlbGV0aW9uIGlzIG5vdCBzdHJpY3RseQorICAgICAgICAgICMgcmVxdWlyZWQsIGJ1dCBpcyBkb25lIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UncmUgbm90IHVzaW5nIHRvbyBtdWNoCisgICAgICAgICAgIyBzcGFjZSBpbiB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKGRpcnBhdGgsIGZuKSkKKyAgICAgICAgICBmbiA9IHVuY29tcHJlc3NlZF9mbgorCisgICAgICAgIGlmIGZuLmVuZHN3aXRoKCIuYXBrIik6CisgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCisgICAgICAgICAgZGlzcGxheW5hbWUgPSBmdWxsbmFtZVtsZW4oZCkrMTpdCisgICAgICAgICAgYXBrID0gQVBLKGZ1bGxuYW1lLCBkaXNwbGF5bmFtZSkKKyAgICAgICAgICBzZWxmLmFwa3NbYXBrLmZpbGVuYW1lXSA9IGFwaworICAgICAgICAgIHNlbGYuYXBrc19ieV9iYXNlbmFtZVtvcy5wYXRoLmJhc2VuYW1lKGFway5maWxlbmFtZSldID0gYXBrCisKKyAgICAgICAgICBzZWxmLm1heF9wa2dfbGVuID0gbWF4KHNlbGYubWF4X3BrZ19sZW4sIGxlbihhcGsucGFja2FnZSkpCisgICAgICAgICAgc2VsZi5tYXhfZm5fbGVuID0gbWF4KHNlbGYubWF4X2ZuX2xlbiwgbGVuKGFway5maWxlbmFtZSkpCiAKICAgZGVmIENoZWNrU2hhcmVkVWlkcyhzZWxmKToKICAgICAiIiJMb29rIGZvciBhbnkgaW5zdGFuY2VzIHdoZXJlIHBhY2thZ2VzIHNpZ25lZCB3aXRoIGRpZmZlcmVudApAQCAtMjY0LDcgKzI4Nyw3IEBACiAgICAgICBpZiBhcGsuc2hhcmVkX3VpZDoKICAgICAgICAgYXBrc19ieV91aWQuc2V0ZGVmYXVsdChhcGsuc2hhcmVkX3VpZCwgW10pLmFwcGVuZChhcGspCiAKLSAgICBmb3IgdWlkIGluIHNvcnRlZChhcGtzX2J5X3VpZC5rZXlzKCkpOgorICAgIGZvciB1aWQgaW4gc29ydGVkKGFwa3NfYnlfdWlkKToKICAgICAgIGFwa3MgPSBhcGtzX2J5X3VpZFt1aWRdCiAgICAgICBmb3IgYXBrIGluIGFwa3NbMTpdOgogICAgICAgICBpZiBhcGsuY2VydHMgIT0gYXBrc1swXS5jZXJ0czoKQEAgLTQzOSwzICs0NjIsNSBAQAogICAgIHByaW50ICIgICBFUlJPUjogJXMiICUgKGUsKQogICAgIHByaW50CiAgICAgc3lzLmV4aXQoMSkKKyAgZmluYWxseToKKyAgICBjb21tb24uQ2xlYW51cCgpCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvY29tbW9uLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL2NvbW1vbi5weQppbmRleCA3NWM4NmNjLi43ODdkZTk4IDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvY29tbW9uLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9jb21tb24ucHkKQEAgLTE4LDIzICsxOCwyNCBAQAogaW1wb3J0IGVycm5vCiBpbXBvcnQgZ2V0b3B0CiBpbXBvcnQgZ2V0cGFzcworaW1wb3J0IGd6aXAKIGltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgcmUKIGltcG9ydCBzaGxleAogaW1wb3J0IHNodXRpbAoraW1wb3J0IHN0cmluZwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9ydCB6aXBmaWxlCitmcm9tIGhhc2hsaWIgaW1wb3J0IHNoYTEsIHNoYTI1NgogCiBpbXBvcnQgYmxvY2tpbWdkaWZmCi0KLWZyb20gaGFzaGxpYiBpbXBvcnQgc2hhMSBhcyBzaGExCi0KK2ltcG9ydCBzcGFyc2VfaW1nCiAKIGNsYXNzIE9wdGlvbnMob2JqZWN0KToKICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtNzcsNyArNzgsNyBAQAogCiAKICMgVGhlIHBhcnRpdGlvbnMgYWxsb3dlZCB0byBiZSBzaWduZWQgYnkgQVZCIChBbmRyb2lkIHZlcmlmaWVkIGJvb3QgMi4wKS4KLUFWQl9QQVJUSVRJT05TID0gKCdib290JywgJ3JlY292ZXJ5JywgJ3N5c3RlbScsICd2ZW5kb3InLCAnZHRibycpCitBVkJfUEFSVElUSU9OUyA9ICgnYm9vdCcsICdyZWNvdmVyeScsICdzeXN0ZW0nLCAndmVuZG9yJywgJ3Byb2R1Y3QnLCAnZHRibycpCiAKIAogY2xhc3MgRXJyb3JDb2RlKG9iamVjdCk6CkBAIC0xMjUsNiArMTI2LDExIEBACiAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsICoqa3dhcmdzKQogCiAKK2RlZiBSb3VuZFVwVG80Syh2YWx1ZSk6CisgIHJvdW5kZWRfdXAgPSB2YWx1ZSArIDQwOTUKKyAgcmV0dXJuIHJvdW5kZWRfdXAgLSAocm91bmRlZF91cCAlIDQwOTYpCisKKwogZGVmIENsb3NlSW5oZXJpdGVkUGlwZXMoKToKICAgIiIiIEdtYWtlIGluIE1BQyBPUyBoYXMgZmlsZSBkZXNjcmlwdG9yIChQSVBFKSBsZWFrLiBXZSBjbG9zZSB0aG9zZSBmZHMKICAgYmVmb3JlIGRvaW5nIG90aGVyIHdvcmsuIiIiCkBAIC0yMTUsMjEgKzIyMSw2IEBACiAgICAgICAgICAgICB2ZW5kb3JfYmFzZV9mc19maWxlLCkpCiAgICAgICAgIGRlbCBkWyJ2ZW5kb3JfYmFzZV9mc19maWxlIl0KIAotICB0cnk6Ci0gICAgZGF0YSA9IHJlYWRfaGVscGVyKCJNRVRBL2ltYWdlc2l6ZXMudHh0IikKLSAgICBmb3IgbGluZSBpbiBkYXRhLnNwbGl0KCJcbiIpOgotICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBuYW1lLCB2YWx1ZSA9IGxpbmUuc3BsaXQoIiAiLCAxKQotICAgICAgaWYgbm90IHZhbHVlOgotICAgICAgICBjb250aW51ZQotICAgICAgaWYgbmFtZSA9PSAiYmxvY2tzaXplIjoKLSAgICAgICAgZFtuYW1lXSA9IHZhbHVlCi0gICAgICBlbHNlOgotICAgICAgICBkW25hbWUgKyAiX3NpemUiXSA9IHZhbHVlCi0gIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICBwYXNzCi0KICAgZGVmIG1ha2VpbnQoa2V5KToKICAgICBpZiBrZXkgaW4gZDoKICAgICAgIGRba2V5XSA9IGludChkW2tleV0sIDApCkBAIC0yNTgsNiArMjQ5LDIwIEBACiAKICAgZFsiYnVpbGQucHJvcCJdID0gTG9hZEJ1aWxkUHJvcChyZWFkX2hlbHBlciwgJ1NZU1RFTS9idWlsZC5wcm9wJykKICAgZFsidmVuZG9yLmJ1aWxkLnByb3AiXSA9IExvYWRCdWlsZFByb3AocmVhZF9oZWxwZXIsICdWRU5ET1IvYnVpbGQucHJvcCcpCisKKyAgIyBTZXQgdXAgdGhlIHNhbHQgKGJhc2VkIG9uIGZpbmdlcnByaW50IG9yIHRodW1icHJpbnQpIHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4KKyAgIyBhZGRpbmcgQVZCIGZvb3Rlci4KKyAgaWYgZC5nZXQoImF2Yl9lbmFibGUiKSA9PSAidHJ1ZSI6CisgICAgZnAgPSBOb25lCisgICAgaWYgImJ1aWxkLnByb3AiIGluIGQ6CisgICAgICBidWlsZF9wcm9wID0gZFsiYnVpbGQucHJvcCJdCisgICAgICBpZiAicm8uYnVpbGQuZmluZ2VycHJpbnQiIGluIGJ1aWxkX3Byb3A6CisgICAgICAgIGZwID0gYnVpbGRfcHJvcFsicm8uYnVpbGQuZmluZ2VycHJpbnQiXQorICAgICAgZWxpZiAicm8uYnVpbGQudGh1bWJwcmludCIgaW4gYnVpbGRfcHJvcDoKKyAgICAgICAgZnAgPSBidWlsZF9wcm9wWyJyby5idWlsZC50aHVtYnByaW50Il0KKyAgICBpZiBmcDoKKyAgICAgIGRbImF2Yl9zYWx0Il0gPSBzaGEyNTYoZnApLmhleGRpZ2VzdCgpCisKICAgcmV0dXJuIGQKIAogCkBAIC01MDAsMTUgKzUwNSwxNSBAQAogICAgIGltZ191bnNpZ25lZC5jbG9zZSgpCiAgICAgaW1nX2tleWJsb2NrLmNsb3NlKCkKIAotICAjIEFWQjogaWYgZW5hYmxlZCwgY2FsY3VsYXRlIGFuZCBhZGQgaGFzaCB0byBib290LmltZy4KKyAgIyBBVkI6IGlmIGVuYWJsZWQsIGNhbGN1bGF0ZSBhbmQgYWRkIGhhc2ggdG8gYm9vdC5pbWcgb3IgcmVjb3ZlcnkuaW1nLgogICBpZiBpbmZvX2RpY3QuZ2V0KCJhdmJfZW5hYmxlIikgPT0gInRydWUiOgogICAgIGF2YnRvb2wgPSBvcy5nZXRlbnYoJ0FWQlRPT0wnKSBvciBpbmZvX2RpY3RbImF2Yl9hdmJ0b29sIl0KLSAgICBwYXJ0X3NpemUgPSBpbmZvX2RpY3RbImJvb3Rfc2l6ZSJdCisgICAgcGFydF9zaXplID0gaW5mb19kaWN0W3BhcnRpdGlvbl9uYW1lICsgIl9zaXplIl0KICAgICBjbWQgPSBbYXZidG9vbCwgImFkZF9oYXNoX2Zvb3RlciIsICItLWltYWdlIiwgaW1nLm5hbWUsCiAgICAgICAgICAgICItLXBhcnRpdGlvbl9zaXplIiwgc3RyKHBhcnRfc2l6ZSksICItLXBhcnRpdGlvbl9uYW1lIiwKICAgICAgICAgICAgcGFydGl0aW9uX25hbWVdCiAgICAgQXBwZW5kQVZCU2lnbmluZ0FyZ3MoY21kLCBwYXJ0aXRpb25fbmFtZSkKLSAgICBhcmdzID0gaW5mb19kaWN0LmdldCgiYXZiX2Jvb3RfYWRkX2hhc2hfZm9vdGVyX2FyZ3MiKQorICAgIGFyZ3MgPSBpbmZvX2RpY3QuZ2V0KCJhdmJfIiArIHBhcnRpdGlvbl9uYW1lICsgIl9hZGRfaGFzaF9mb290ZXJfYXJncyIpCiAgICAgaWYgYXJncyBhbmQgYXJncy5zdHJpcCgpOgogICAgICAgY21kLmV4dGVuZChzaGxleC5zcGxpdChhcmdzKSkKICAgICBwID0gUnVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKQEAgLTU2NSwxOCArNTcwLDIyIEBACiAgIHJldHVybiBOb25lCiAKIAotZGVmIFVuemlwVGVtcChmaWxlbmFtZSwgcGF0dGVybj1Ob25lKToKLSAgIiIiVW56aXAgdGhlIGdpdmVuIGFyY2hpdmUgaW50byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIHJldHVybiB0aGUgbmFtZS4KLQotICBJZiBmaWxlbmFtZSBpcyBvZiB0aGUgZm9ybSAiZm9vLnppcCtiYXIuemlwIiwgdW56aXAgZm9vLnppcCBpbnRvIGEKLSAgdGVtcCBkaXIsIHRoZW4gdW56aXAgYmFyLnppcCBpbnRvIHRoYXRfZGlyL0JPT1RBQkxFX0lNQUdFUy4KLQotICBSZXR1cm5zICh0ZW1wZGlyLCB6aXBvYmopIHdoZXJlIHppcG9iaiBpcyBhIHppcGZpbGUuWmlwRmlsZSAob2YgdGhlCi0gIG1haW4gZmlsZSksIG9wZW4gZm9yIHJlYWRpbmcuCitkZWYgR3VuemlwKGluX2ZpbGVuYW1lLCBvdXRfZmlsZW5hbWUpOgorICAiIiJHdW56aXAgdGhlIGdpdmVuIGd6aXAgY29tcHJlc3NlZCBmaWxlIHRvIGEgZ2l2ZW4gb3V0cHV0IGZpbGUuCiAgICIiIgorICB3aXRoIGd6aXAub3Blbihpbl9maWxlbmFtZSwgInJiIikgYXMgaW5fZmlsZSwgb3BlbihvdXRfZmlsZW5hbWUsICJ3YiIpIGFzIG91dF9maWxlOgorICAgIHNodXRpbC5jb3B5ZmlsZW9iaihpbl9maWxlLCBvdXRfZmlsZSkKIAotICB0bXAgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0idGFyZ2V0ZmlsZXMtIikKLSAgT1BUSU9OUy50ZW1wZmlsZXMuYXBwZW5kKHRtcCkKKworZGVmIFVuemlwVGVtcChmaWxlbmFtZSwgcGF0dGVybj1Ob25lKToKKyAgIiIiVW56aXBzIHRoZSBnaXZlbiBhcmNoaXZlIGludG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCByZXR1cm5zIHRoZSBuYW1lLgorCisgIElmIGZpbGVuYW1lIGlzIG9mIHRoZSBmb3JtICJmb28uemlwK2Jhci56aXAiLCB1bnppcCBmb28uemlwIGludG8gYSB0ZW1wIGRpciwKKyAgdGhlbiB1bnppcCBiYXIuemlwIGludG8gdGhhdF9kaXIvQk9PVEFCTEVfSU1BR0VTLgorCisgIFJldHVybnM6CisgICAgVGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCisgICIiIgogCiAgIGRlZiB1bnppcF90b19kaXIoZmlsZW5hbWUsIGRpcm5hbWUpOgogICAgIGNtZCA9IFsidW56aXAiLCAiLW8iLCAiLXEiLCBmaWxlbmFtZSwgIi1kIiwgZGlybmFtZV0KQEAgLTU4OCw2ICs1OTcsNyBAQAogICAgICAgcmFpc2UgRXh0ZXJuYWxFcnJvcigiZmFpbGVkIHRvIHVuemlwIGlucHV0IHRhcmdldC1maWxlcyBcIiVzXCIiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVuYW1lLCkpCiAKKyAgdG1wID0gTWFrZVRlbXBEaXIocHJlZml4PSJ0YXJnZXRmaWxlcy0iKQogICBtID0gcmUubWF0Y2gociJeKC4qWy5demlwKVwrKC4qWy5demlwKSQiLCBmaWxlbmFtZSwgcmUuSUdOT1JFQ0FTRSkKICAgaWYgbToKICAgICB1bnppcF90b19kaXIobS5ncm91cCgxKSwgdG1wKQpAQCAtNTk2LDcgKzYwNiw2NiBAQAogICBlbHNlOgogICAgIHVuemlwX3RvX2RpcihmaWxlbmFtZSwgdG1wKQogCi0gIHJldHVybiB0bXAsIHppcGZpbGUuWmlwRmlsZShmaWxlbmFtZSwgInIiKQorICByZXR1cm4gdG1wCisKKworZGVmIEdldFNwYXJzZUltYWdlKHdoaWNoLCB0bXBkaXIsIGlucHV0X3ppcCwgYWxsb3dfc2hhcmVkX2Jsb2Nrcyk6CisgICIiIlJldHVybnMgYSBTcGFyc2VJbWFnZSBvYmplY3Qgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gQmxvY2tJbWFnZURpZmYuCisKKyAgVGhpcyBmdW5jdGlvbiBsb2FkcyB0aGUgc3BlY2lmaWVkIHNwYXJzZSBpbWFnZSBmcm9tIHRoZSBnaXZlbiBwYXRoLCBhbmQKKyAgcGVyZm9ybXMgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGZvciBPVEEgcHVycG9zZS4gRm9yIGV4YW1wbGUsIGl0IGFsd2F5cyBhZGRzCisgIGJsb2NrIDAgdG8gY2xvYmJlcmVkIGJsb2NrcyBsaXN0LiBJdCBhbHNvIGRldGVjdHMgZmlsZXMgdGhhdCBjYW5ub3QgYmUKKyAgcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSBibG9jayBsaXN0LCBmb3Igd2hvbSB3ZSBzaG91bGQgYXZvaWQgYXBwbHlpbmcgaW1nZGlmZi4KKworICBBcmdzOgorICAgIHdoaWNoOiBUaGUgcGFydGl0aW9uIG5hbWUsIHdoaWNoIG11c3QgYmUgInN5c3RlbSIgb3IgInZlbmRvciIuCisgICAgdG1wZGlyOiBUaGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIHByZWJ1aWx0IGltYWdlIGFuZCBibG9jayBtYXAgZmlsZS4KKyAgICBpbnB1dF96aXA6IFRoZSB0YXJnZXQtZmlsZXMgWklQIGFyY2hpdmUuCisgICAgYWxsb3dfc2hhcmVkX2Jsb2NrczogV2hldGhlciBoYXZpbmcgc2hhcmVkIGJsb2NrcyBpcyBhbGxvd2VkLgorCisgIFJldHVybnM6CisgICAgQSBTcGFyc2VJbWFnZSBvYmplY3QsIHdpdGggZmlsZV9tYXAgaW5mbyBsb2FkZWQuCisgICIiIgorICBhc3NlcnQgd2hpY2ggaW4gKCJzeXN0ZW0iLCAidmVuZG9yIikKKworICBwYXRoID0gb3MucGF0aC5qb2luKHRtcGRpciwgIklNQUdFUyIsIHdoaWNoICsgIi5pbWciKQorICBtYXBwYXRoID0gb3MucGF0aC5qb2luKHRtcGRpciwgIklNQUdFUyIsIHdoaWNoICsgIi5tYXAiKQorCisgICMgVGhlIGltYWdlIGFuZCBtYXAgZmlsZXMgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBwcmlvciB0byBjYWxsaW5nCisgICMgb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5IChzaW5jZSBMTVApLgorICBhc3NlcnQgb3MucGF0aC5leGlzdHMocGF0aCkgYW5kIG9zLnBhdGguZXhpc3RzKG1hcHBhdGgpCisKKyAgIyBJbiBleHQ0IGZpbGVzeXN0ZW1zLCBibG9jayAwIG1pZ2h0IGJlIGNoYW5nZWQgZXZlbiBiZWluZyBtb3VudGVkIFIvTy4gV2UgYWRkCisgICMgaXQgdG8gY2xvYmJlcmVkX2Jsb2NrcyBzbyB0aGF0IGl0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgdGFyZ2V0CisgICMgdW5jb25kaXRpb25hbGx5LiBOb3RlIHRoYXQgdGhleSBhcmUgc3RpbGwgcGFydCBvZiBjYXJlX21hcC4gKEJ1ZzogMjA5MzkxMzEpCisgIGNsb2JiZXJlZF9ibG9ja3MgPSAiMCIKKworICBpbWFnZSA9IHNwYXJzZV9pbWcuU3BhcnNlSW1hZ2UocGF0aCwgbWFwcGF0aCwgY2xvYmJlcmVkX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3NoYXJlZF9ibG9ja3M9YWxsb3dfc2hhcmVkX2Jsb2NrcykKKworICAjIGJsb2NrLm1hcCBtYXkgY29udGFpbiBsZXNzIGJsb2NrcywgYmVjYXVzZSBta2UyZnMgbWF5IHNraXAgYWxsb2NhdGluZyBibG9ja3MKKyAgIyBpZiB0aGV5IGNvbnRhaW4gYWxsIHplcm9zLiBXZSBjYW4ndCByZWNvbnN0cnVjdCBzdWNoIGEgZmlsZSBmcm9tIGl0cyBibG9jaworICAjIGxpc3QuIFRhZyBzdWNoIGVudHJpZXMgYWNjb3JkaW5nbHkuIChCdWc6IDY1MjEzNjE2KQorICBmb3IgZW50cnkgaW4gaW1hZ2UuZmlsZV9tYXA6CisgICAgIyAiL3N5c3RlbS9mcmFtZXdvcmsvYW0uamFyIiA9PiAiU1lTVEVNL2ZyYW1ld29yay9hbS5qYXIiLgorICAgIGFyY25hbWUgPSBzdHJpbmcucmVwbGFjZShlbnRyeSwgd2hpY2gsIHdoaWNoLnVwcGVyKCksIDEpWzE6XQorICAgICMgU2tpcCBhcnRpZmljaWFsIG5hbWVzLCBzdWNoIGFzICJfX1pFUk8iLCAiX19OT05aRVJPLTEiLgorICAgIGlmIGFyY25hbWUgbm90IGluIGlucHV0X3ppcC5uYW1lbGlzdCgpOgorICAgICAgY29udGludWUKKworICAgIGluZm8gPSBpbnB1dF96aXAuZ2V0aW5mbyhhcmNuYW1lKQorICAgIHJhbmdlcyA9IGltYWdlLmZpbGVfbWFwW2VudHJ5XQorCisgICAgIyBJZiBhIFJhbmdlU2V0IGhhcyBiZWVuIHRhZ2dlZCBhcyB1c2luZyBzaGFyZWQgYmxvY2tzIHdoaWxlIGxvYWRpbmcgdGhlCisgICAgIyBpbWFnZSwgaXRzIGJsb2NrIGxpc3QgbXVzdCBiZSBhbHJlYWR5IGluY29tcGxldGUgZHVlIHRvIHRoYXQgcmVhc29uLiBEb24ndAorICAgICMgZ2l2ZSBpdCAnaW5jb21wbGV0ZScgdGFnIHRvIGF2b2lkIG1lc3NpbmcgdXAgdGhlIGltZ2RpZmYgc3RhdHMuCisgICAgaWYgcmFuZ2VzLmV4dHJhLmdldCgndXNlc19zaGFyZWRfYmxvY2tzJyk6CisgICAgICBjb250aW51ZQorCisgICAgaWYgUm91bmRVcFRvNEsoaW5mby5maWxlX3NpemUpID4gcmFuZ2VzLnNpemUoKSAqIDQwOTY6CisgICAgICByYW5nZXMuZXh0cmFbJ2luY29tcGxldGUnXSA9IFRydWUKKworICByZXR1cm4gaW1hZ2UKIAogCiBkZWYgR2V0S2V5UGFzc3dvcmRzKGtleWxpc3QpOgpAQCAtNzg1LDI4ICs4NTQsODIgQEAKIAogCiBkZWYgUmVhZEFwa0NlcnRzKHRmX3ppcCk6Ci0gICIiIkdpdmVuIGEgdGFyZ2V0X2ZpbGVzIFppcEZpbGUsIHBhcnNlIHRoZSBNRVRBL2Fwa2NlcnRzLnR4dCBmaWxlCi0gIGFuZCByZXR1cm4gYSB7cGFja2FnZTogY2VydH0gZGljdC4iIiIKKyAgIiIiUGFyc2VzIHRoZSBBUEsgY2VydHMgaW5mbyBmcm9tIGEgZ2l2ZW4gdGFyZ2V0LWZpbGVzIHppcC4KKworICBHaXZlbiBhIHRhcmdldC1maWxlcyBaaXBGaWxlLCBwYXJzZXMgdGhlIE1FVEEvYXBrY2VydHMudHh0IGVudHJ5IGFuZCByZXR1cm5zIGEKKyAgdHVwbGUgd2l0aCB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOiAoMSkgYSBkaWN0aW9uYXJ5IHRoYXQgbWFwcyBwYWNrYWdlcyB0bworICBjZXJ0cyAoYmFzZWQgb24gdGhlICJjZXJ0aWZpY2F0ZSIgYW5kICJwcml2YXRlX2tleSIgYXR0cmlidXRlcyBpbiB0aGUgZmlsZTsKKyAgKDIpIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXh0ZW5zaW9uIG9mIGNvbXByZXNzZWQgQVBLcyBpbiB0aGUgdGFyZ2V0IGZpbGVzCisgIChlLmcgIi5neiIsICIuYnJvIikuCisKKyAgQXJnczoKKyAgICB0Zl96aXA6IFRoZSBpbnB1dCB0YXJnZXRfZmlsZXMgWmlwRmlsZSAoYWxyZWFkeSBvcGVuKS4KKworICBSZXR1cm5zOgorICAgIChjZXJ0bWFwLCBleHQpOiBjZXJ0bWFwIGlzIGEgZGljdGlvbmFyeSB0aGF0IG1hcHMgcGFja2FnZXMgdG8gY2VydHM7IGV4dCBpcworICAgICAgICB0aGUgZXh0ZW5zaW9uIHN0cmluZyBvZiBjb21wcmVzc2VkIEFQS3MgKGUuZy4gIi5neiIpLCBvciBOb25lIGlmIHRoZXJlJ3MKKyAgICAgICAgbm8gY29tcHJlc3NlZCBBUEtzLgorICAiIiIKICAgY2VydG1hcCA9IHt9CisgIGNvbXByZXNzZWRfZXh0ZW5zaW9uID0gTm9uZQorCisgICMgTUVUQS9hcGtjZXJ0cy50eHQgY29udGFpbnMgdGhlIGluZm8gZm9yIF9hbGxfIHRoZSBwYWNrYWdlcyBrbm93biBhdCBidWlsZAorICAjIHRpbWUuIEZpbHRlciBvdXQgdGhlIG9uZXMgdGhhdCBhcmUgbm90IGluc3RhbGxlZC4KKyAgaW5zdGFsbGVkX2ZpbGVzID0gc2V0KCkKKyAgZm9yIG5hbWUgaW4gdGZfemlwLm5hbWVsaXN0KCk6CisgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG5hbWUpCisgICAgaWYgYmFzZW5hbWU6CisgICAgICBpbnN0YWxsZWRfZmlsZXMuYWRkKGJhc2VuYW1lKQorCiAgIGZvciBsaW5lIGluIHRmX3ppcC5yZWFkKCJNRVRBL2Fwa2NlcnRzLnR4dCIpLnNwbGl0KCJcbiIpOgogICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKICAgICBpZiBub3QgbGluZToKICAgICAgIGNvbnRpbnVlCi0gICAgbSA9IHJlLm1hdGNoKHInXm5hbWU9IiguKikiXHMrY2VydGlmaWNhdGU9IiguKikiXHMrJwotICAgICAgICAgICAgICAgICByJ3ByaXZhdGVfa2V5PSIoLiopIiQnLCBsaW5lKQotICAgIGlmIG06Ci0gICAgICBuYW1lLCBjZXJ0LCBwcml2a2V5ID0gbS5ncm91cHMoKQotICAgICAgcHVibGljX2tleV9zdWZmaXhfbGVuID0gbGVuKE9QVElPTlMucHVibGljX2tleV9zdWZmaXgpCi0gICAgICBwcml2YXRlX2tleV9zdWZmaXhfbGVuID0gbGVuKE9QVElPTlMucHJpdmF0ZV9rZXlfc3VmZml4KQotICAgICAgaWYgY2VydCBpbiBTUEVDSUFMX0NFUlRfU1RSSU5HUyBhbmQgbm90IHByaXZrZXk6Ci0gICAgICAgIGNlcnRtYXBbbmFtZV0gPSBjZXJ0Ci0gICAgICBlbGlmIChjZXJ0LmVuZHN3aXRoKE9QVElPTlMucHVibGljX2tleV9zdWZmaXgpIGFuZAotICAgICAgICAgICAgcHJpdmtleS5lbmRzd2l0aChPUFRJT05TLnByaXZhdGVfa2V5X3N1ZmZpeCkgYW5kCi0gICAgICAgICAgICBjZXJ0WzotcHVibGljX2tleV9zdWZmaXhfbGVuXSA9PSBwcml2a2V5WzotcHJpdmF0ZV9rZXlfc3VmZml4X2xlbl0pOgotICAgICAgICBjZXJ0bWFwW25hbWVdID0gY2VydFs6LXB1YmxpY19rZXlfc3VmZml4X2xlbl0KLSAgICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZhaWxlZCB0byBwYXJzZSBsaW5lIGZyb20gYXBrY2VydHMudHh0OlxuIiArIGxpbmUpCi0gIHJldHVybiBjZXJ0bWFwCisgICAgbSA9IHJlLm1hdGNoKAorICAgICAgICByJ15uYW1lPSIoP1A8TkFNRT4uKikiXHMrY2VydGlmaWNhdGU9Iig/UDxDRVJUPi4qKSJccysnCisgICAgICAgIHIncHJpdmF0ZV9rZXk9Iig/UDxQUklWS0VZPi4qPykiKFxzK2NvbXByZXNzZWQ9Iig/UDxDT01QUkVTU0VEPi4qKSIpPyQnLAorICAgICAgICBsaW5lKQorICAgIGlmIG5vdCBtOgorICAgICAgY29udGludWUKKworICAgIG1hdGNoZXMgPSBtLmdyb3VwZGljdCgpCisgICAgY2VydCA9IG1hdGNoZXNbIkNFUlQiXQorICAgIHByaXZrZXkgPSBtYXRjaGVzWyJQUklWS0VZIl0KKyAgICBuYW1lID0gbWF0Y2hlc1siTkFNRSJdCisgICAgdGhpc19jb21wcmVzc2VkX2V4dGVuc2lvbiA9IG1hdGNoZXNbIkNPTVBSRVNTRUQiXQorCisgICAgcHVibGljX2tleV9zdWZmaXhfbGVuID0gbGVuKE9QVElPTlMucHVibGljX2tleV9zdWZmaXgpCisgICAgcHJpdmF0ZV9rZXlfc3VmZml4X2xlbiA9IGxlbihPUFRJT05TLnByaXZhdGVfa2V5X3N1ZmZpeCkKKyAgICBpZiBjZXJ0IGluIFNQRUNJQUxfQ0VSVF9TVFJJTkdTIGFuZCBub3QgcHJpdmtleToKKyAgICAgIGNlcnRtYXBbbmFtZV0gPSBjZXJ0CisgICAgZWxpZiAoY2VydC5lbmRzd2l0aChPUFRJT05TLnB1YmxpY19rZXlfc3VmZml4KSBhbmQKKyAgICAgICAgICBwcml2a2V5LmVuZHN3aXRoKE9QVElPTlMucHJpdmF0ZV9rZXlfc3VmZml4KSBhbmQKKyAgICAgICAgICBjZXJ0WzotcHVibGljX2tleV9zdWZmaXhfbGVuXSA9PSBwcml2a2V5WzotcHJpdmF0ZV9rZXlfc3VmZml4X2xlbl0pOgorICAgICAgY2VydG1hcFtuYW1lXSA9IGNlcnRbOi1wdWJsaWNfa2V5X3N1ZmZpeF9sZW5dCisgICAgZWxzZToKKyAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkZhaWxlZCB0byBwYXJzZSBsaW5lIGZyb20gYXBrY2VydHMudHh0OlxuIiArIGxpbmUpCisKKyAgICBpZiBub3QgdGhpc19jb21wcmVzc2VkX2V4dGVuc2lvbjoKKyAgICAgIGNvbnRpbnVlCisKKyAgICAjIE9ubHkgY291bnQgdGhlIGluc3RhbGxlZCBmaWxlcy4KKyAgICBmaWxlbmFtZSA9IG5hbWUgKyAnLicgKyB0aGlzX2NvbXByZXNzZWRfZXh0ZW5zaW9uCisgICAgaWYgZmlsZW5hbWUgbm90IGluIGluc3RhbGxlZF9maWxlczoKKyAgICAgIGNvbnRpbnVlCisKKyAgICAjIE1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBjb21wcmVzc2lvbiBtYXAgaGF2ZSB0aGUgc2FtZQorICAgICMgZXh0ZW5zaW9uLiBXZSBkb24ndCBzdXBwb3J0IG11bHRpcGxlIGNvbXByZXNzaW9uIG1ldGhvZHMgaW4gdGhlIHNhbWUKKyAgICAjIHN5c3RlbSBpbWFnZS4KKyAgICBpZiBjb21wcmVzc2VkX2V4dGVuc2lvbjoKKyAgICAgIGlmIHRoaXNfY29tcHJlc3NlZF9leHRlbnNpb24gIT0gY29tcHJlc3NlZF9leHRlbnNpb246CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAiTXVsdGlwbGUgY29tcHJlc3NlZCBleHRlbnNpb25zOiB7fSB2cyB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIGNvbXByZXNzZWRfZXh0ZW5zaW9uLCB0aGlzX2NvbXByZXNzZWRfZXh0ZW5zaW9uKSkKKyAgICBlbHNlOgorICAgICAgY29tcHJlc3NlZF9leHRlbnNpb24gPSB0aGlzX2NvbXByZXNzZWRfZXh0ZW5zaW9uCisKKyAgcmV0dXJuIChjZXJ0bWFwLAorICAgICAgICAgICgiLiIgKyBjb21wcmVzc2VkX2V4dGVuc2lvbikgaWYgY29tcHJlc3NlZF9leHRlbnNpb24gZWxzZSBOb25lKQogCiAKIENPTU1PTl9ET0NTVFJJTkcgPSAiIiIKQEAgLTkxNCwxMiArMTAzNywyNCBAQAogICByZXR1cm4gZm4KIAogCitkZWYgTWFrZVRlbXBEaXIocHJlZml4PSd0bXAnLCBzdWZmaXg9JycpOgorICAiIiJNYWtlcyBhIHRlbXBvcmFyeSBkaXIgdGhhdCB3aWxsIGJlIGNsZWFuZWQgdXAgd2l0aCBhIGNhbGwgdG8gQ2xlYW51cCgpLgorCisgIFJldHVybnM6CisgICAgVGhlIGFic29sdXRlIHBhdGhuYW1lIG9mIHRoZSBuZXcgZGlyZWN0b3J5LgorICAiIiIKKyAgZGlyX25hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKHN1ZmZpeD1zdWZmaXgsIHByZWZpeD1wcmVmaXgpCisgIE9QVElPTlMudGVtcGZpbGVzLmFwcGVuZChkaXJfbmFtZSkKKyAgcmV0dXJuIGRpcl9uYW1lCisKKwogZGVmIENsZWFudXAoKToKICAgZm9yIGkgaW4gT1BUSU9OUy50ZW1wZmlsZXM6CiAgICAgaWYgb3MucGF0aC5pc2RpcihpKToKLSAgICAgIHNodXRpbC5ybXRyZWUoaSkKKyAgICAgIHNodXRpbC5ybXRyZWUoaSwgaWdub3JlX2Vycm9ycz1UcnVlKQogICAgIGVsc2U6CiAgICAgICBvcy5yZW1vdmUoaSkKKyAgZGVsIE9QVElPTlMudGVtcGZpbGVzWzpdCiAKIAogY2xhc3MgUGFzc3dvcmRNYW5hZ2VyKG9iamVjdCk6CkBAIC0xMTA2LDYgKzEyNDEsMjggQEAKICAgemlwZmlsZS5aSVA2NF9MSU1JVCA9IHNhdmVkX3ppcDY0X2xpbWl0CiAKIAorZGVmIFppcERlbGV0ZSh6aXBfZmlsZW5hbWUsIGVudHJpZXMpOgorICAiIiJEZWxldGVzIGVudHJpZXMgZnJvbSBhIFpJUCBmaWxlLgorCisgIFNpbmNlIGRlbGV0aW5nIGVudHJpZXMgZnJvbSBhIFpJUCBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQsIGl0IHNoZWxscyBvdXQgdG8KKyAgJ3ppcCAtZCcuCisKKyAgQXJnczoKKyAgICB6aXBfZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBaSVAgZmlsZS4KKyAgICBlbnRyaWVzOiBUaGUgbmFtZSBvZiB0aGUgZW50cnksIG9yIHRoZSBsaXN0IG9mIG5hbWVzIHRvIGJlIGRlbGV0ZWQuCisKKyAgUmFpc2VzOgorICAgIEFzc2VydGlvbkVycm9yOiBJbiBjYXNlIG9mIG5vbi16ZXJvIHJldHVybiBmcm9tICd6aXAnLgorICAiIiIKKyAgaWYgaXNpbnN0YW5jZShlbnRyaWVzLCBiYXNlc3RyaW5nKToKKyAgICBlbnRyaWVzID0gW2VudHJpZXNdCisgIGNtZCA9IFsiemlwIiwgIi1kIiwgemlwX2ZpbGVuYW1lXSArIGVudHJpZXMKKyAgcHJvYyA9IFJ1bihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgc3Rkb3V0ZGF0YSwgXyA9IHByb2MuY29tbXVuaWNhdGUoKQorICBhc3NlcnQgcHJvYy5yZXR1cm5jb2RlID09IDAsICJGYWlsZWQgdG8gZGVsZXRlICVzOlxuJXMiICUgKGVudHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ZGF0YSkKKworCiBkZWYgWmlwQ2xvc2UoemlwX2ZpbGUpOgogICAjIGh0dHA6Ly9iLzE4MDE1MjQ2CiAgICMgemlwZmlsZSBhbHNvIHJlZmVycyB0byBaSVA2NF9MSU1JVCBkdXJpbmcgY2xvc2UoKSB3aGVuIGl0IHdyaXRlcyBvdXQgdGhlCkBAIC0xMjkwLDcgKzE0NDcsNyBAQAogICAgICAgICAgIHAua2lsbCgpCiAgICAgICAgICAgdGguam9pbigpCiAKLSAgICAgIGlmIGVyciBvciBwLnJldHVybmNvZGUgIT0gMDoKKyAgICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgogICAgICAgICBwcmludCgiV0FSTklORzogZmFpbHVyZSBydW5uaW5nICVzOlxuJXNcbiIgJSAoCiAgICAgICAgICAgICBkaWZmX3Byb2dyYW0sICIiLmpvaW4oZXJyKSkpCiAgICAgICAgIHNlbGYucGF0Y2ggPSBOb25lCkBAIC0xMzY4LDIwICsxNTI1LDE2IEBACiAgICAgc2VsZi5kaXNhYmxlX2ltZ2RpZmYgPSBkaXNhYmxlX2ltZ2RpZmYKIAogICAgIGlmIHZlcnNpb24gaXMgTm9uZToKLSAgICAgIHZlcnNpb24gPSAxCi0gICAgICBpZiBPUFRJT05TLmluZm9fZGljdDoKLSAgICAgICAgdmVyc2lvbiA9IG1heCgKLSAgICAgICAgICAgIGludChpKSBmb3IgaSBpbgotICAgICAgICAgICAgT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJibG9ja2ltZ2RpZmZfdmVyc2lvbnMiLCAiMSIpLnNwbGl0KCIsIikpCisgICAgICB2ZXJzaW9uID0gbWF4KAorICAgICAgICAgIGludChpKSBmb3IgaSBpbgorICAgICAgICAgIE9QVElPTlMuaW5mb19kaWN0LmdldCgiYmxvY2tpbWdkaWZmX3ZlcnNpb25zIiwgIjEiKS5zcGxpdCgiLCIpKQogICAgIGFzc2VydCB2ZXJzaW9uID49IDMKICAgICBzZWxmLnZlcnNpb24gPSB2ZXJzaW9uCiAKICAgICBiID0gYmxvY2tpbWdkaWZmLkJsb2NrSW1hZ2VEaWZmKHRndCwgc3JjLCB0aHJlYWRzPU9QVElPTlMud29ya2VyX3RocmVhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPXNlbGYudmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVfaW1nZGlmZj1zZWxmLmRpc2FibGVfaW1nZGlmZikKLSAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICBPUFRJT05TLnRlbXBmaWxlcy5hcHBlbmQodG1wZGlyKQotICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbih0bXBkaXIsIHBhcnRpdGlvbikKKyAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oTWFrZVRlbXBEaXIoKSwgcGFydGl0aW9uKQogICAgIGIuQ29tcHV0ZShzZWxmLnBhdGgpCiAgICAgc2VsZi5fcmVxdWlyZWRfY2FjaGUgPSBiLm1heF9zdGFzaGVkX3NpemUKICAgICBzZWxmLnRvdWNoZWRfc3JjX3JhbmdlcyA9IGIudG91Y2hlZF9zcmNfcmFuZ2VzCkBAIC0xNjI5LDUwICsxNzgyLDkzIEBACiAKIAogZGVmIFBhcnNlQ2VydGlmaWNhdGUoZGF0YSk6Ci0gICIiIlBhcnNlIGEgUEVNLWZvcm1hdCBjZXJ0aWZpY2F0ZS4iIiIKLSAgY2VydCA9IFtdCisgICIiIlBhcnNlcyBhbmQgY29udmVydHMgYSBQRU0tZW5jb2RlZCBjZXJ0aWZpY2F0ZSBpbnRvIERFUi1lbmNvZGVkLgorCisgIFRoaXMgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0IGFzIGBvcGVuc3NsIHg1MDkgLWluIDxmaWxlbmFtZT4gLW91dGZvcm0gREVSYC4KKworICBSZXR1cm5zOgorICAgIFRoZSBkZWNvZGVkIGNlcnRpZmljYXRlIHN0cmluZy4KKyAgIiIiCisgIGNlcnRfYnVmZmVyID0gW10KICAgc2F2ZSA9IEZhbHNlCiAgIGZvciBsaW5lIGluIGRhdGEuc3BsaXQoIlxuIik6CiAgICAgaWYgIi0tRU5EIENFUlRJRklDQVRFLS0iIGluIGxpbmU6CiAgICAgICBicmVhawogICAgIGlmIHNhdmU6Ci0gICAgICBjZXJ0LmFwcGVuZChsaW5lKQorICAgICAgY2VydF9idWZmZXIuYXBwZW5kKGxpbmUpCiAgICAgaWYgIi0tQkVHSU4gQ0VSVElGSUNBVEUtLSIgaW4gbGluZToKICAgICAgIHNhdmUgPSBUcnVlCi0gIGNlcnQgPSAiIi5qb2luKGNlcnQpLmRlY29kZSgnYmFzZTY0JykKKyAgY2VydCA9ICIiLmpvaW4oY2VydF9idWZmZXIpLmRlY29kZSgnYmFzZTY0JykKICAgcmV0dXJuIGNlcnQKIAorCitkZWYgRXh0cmFjdFB1YmxpY0tleShjZXJ0KToKKyAgIiIiRXh0cmFjdHMgdGhlIHB1YmxpYyBrZXkgKFBFTS1lbmNvZGVkKSBmcm9tIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBmaWxlLgorCisgIEFyZ3M6CisgICAgY2VydDogVGhlIGNlcnRpZmljYXRlIGZpbGVuYW1lLgorCisgIFJldHVybnM6CisgICAgVGhlIHB1YmxpYyBrZXkgc3RyaW5nLgorCisgIFJhaXNlczoKKyAgICBBc3NlcnRpb25FcnJvcjogT24gbm9uLXplcm8gcmV0dXJuIGZyb20gJ29wZW5zc2wnLgorICAiIiIKKyAgIyBUaGUgYmVoYXZpb3Igd2l0aCAnLW91dCcgaXMgZGlmZmVyZW50IGJldHdlZW4gb3BlbnNzbCAxLjEgYW5kIG9wZW5zc2wgMS4wLgorICAjIFdoaWxlIG9wZW5zc2wgMS4xIHdyaXRlcyB0aGUga2V5IGludG8gdGhlIGdpdmVuIGZpbGVuYW1lIGZvbGxvd2VkIGJ5ICctb3V0JywKKyAgIyBvcGVuc3NsIDEuMCAoYm90aCBvZiAxLjAuMSBhbmQgMS4wLjIpIGRvZXNuJ3QuIFNvIHdlIGNvbGxlY3QgdGhlIG91dHB1dCBmcm9tCisgICMgc3Rkb3V0IGluc3RlYWQuCisgIGNtZCA9IFsnb3BlbnNzbCcsICd4NTA5JywgJy1wdWJrZXknLCAnLW5vb3V0JywgJy1pbicsIGNlcnRdCisgIHByb2MgPSBSdW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICBwdWJrZXksIHN0ZGVycmRhdGEgPSBwcm9jLmNvbW11bmljYXRlKCkKKyAgYXNzZXJ0IHByb2MucmV0dXJuY29kZSA9PSAwLCBcCisgICAgICAnRmFpbGVkIHRvIGR1bXAgcHVibGljIGtleSBmcm9tIGNlcnRpZmljYXRlOiAlc1xuJXMnICUgKGNlcnQsIHN0ZGVycmRhdGEpCisgIHJldHVybiBwdWJrZXkKKworCiBkZWYgTWFrZVJlY292ZXJ5UGF0Y2goaW5wdXRfZGlyLCBvdXRwdXRfc2luaywgcmVjb3ZlcnlfaW1nLCBib290X2ltZywKICAgICAgICAgICAgICAgICAgICAgICBpbmZvX2RpY3Q9Tm9uZSk6Ci0gICIiIkdlbmVyYXRlIGEgYmluYXJ5IHBhdGNoIHRoYXQgY3JlYXRlcyB0aGUgcmVjb3ZlcnkgaW1hZ2Ugc3RhcnRpbmcKLSAgd2l0aCB0aGUgYm9vdCBpbWFnZS4gIChNb3N0IG9mIHRoZSBzcGFjZSBpbiB0aGVzZSBpbWFnZXMgaXMganVzdCB0aGUKLSAga2VybmVsLCB3aGljaCBpcyBpZGVudGljYWwgZm9yIHRoZSB0d28sIHNvIHRoZSByZXN1bHRpbmcgcGF0Y2gKLSAgc2hvdWxkIGJlIGVmZmljaWVudC4pICBBZGQgaXQgdG8gdGhlIG91dHB1dCB6aXAsIGFsb25nIHdpdGggYSBzaGVsbAotICBzY3JpcHQgdGhhdCBpcyBydW4gZnJvbSBpbml0LnJjIG9uIGZpcnN0IGJvb3QgdG8gYWN0dWFsbHkgZG8gdGhlCi0gIHBhdGNoaW5nIGFuZCBpbnN0YWxsIHRoZSBuZXcgcmVjb3ZlcnkgaW1hZ2UuCisgICIiIkdlbmVyYXRlcyB0aGUgcmVjb3ZlcnktZnJvbS1ib290IHBhdGNoIGFuZCB3cml0ZXMgdGhlIHNjcmlwdCB0byBvdXRwdXQuCiAKLSAgcmVjb3ZlcnlfaW1nIGFuZCBib290X2ltZyBzaG91bGQgYmUgRmlsZSBvYmplY3RzIGZvciB0aGUKLSAgY29ycmVzcG9uZGluZyBpbWFnZXMuICBpbmZvIHNob3VsZCBiZSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCBieQotICBjb21tb24uTG9hZEluZm9EaWN0KCkgb24gdGhlIGlucHV0IHRhcmdldF9maWxlcy4KKyAgTW9zdCBvZiB0aGUgc3BhY2UgaW4gdGhlIGJvb3QgYW5kIHJlY292ZXJ5IGltYWdlcyBpcyBqdXN0IHRoZSBrZXJuZWwsIHdoaWNoIGlzCisgIGlkZW50aWNhbCBmb3IgdGhlIHR3bywgc28gdGhlIHJlc3VsdGluZyBwYXRjaCBzaG91bGQgYmUgZWZmaWNpZW50LiBBZGQgaXQgdG8KKyAgdGhlIG91dHB1dCB6aXAsIGFsb25nIHdpdGggYSBzaGVsbCBzY3JpcHQgdGhhdCBpcyBydW4gZnJvbSBpbml0LnJjIG9uIGZpcnN0CisgIGJvb3QgdG8gYWN0dWFsbHkgZG8gdGhlIHBhdGNoaW5nIGFuZCBpbnN0YWxsIHRoZSBuZXcgcmVjb3ZlcnkgaW1hZ2UuCisKKyAgQXJnczoKKyAgICBpbnB1dF9kaXI6IFRoZSB0b3AtbGV2ZWwgaW5wdXQgZGlyZWN0b3J5IG9mIHRoZSB0YXJnZXQtZmlsZXMuemlwLgorICAgIG91dHB1dF9zaW5rOiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3cml0ZXMgdGhlIHJlc3VsdC4KKyAgICByZWNvdmVyeV9pbWc6IEZpbGUgb2JqZWN0IGZvciB0aGUgcmVjb3ZlcnkgaW1hZ2UuCisgICAgYm9vdF9pbWc6IEZpbGUgb2JqZWN0cyBmb3IgdGhlIGJvb3QgaW1hZ2UuCisgICAgaW5mb19kaWN0OiBBIGRpY3QgcmV0dXJuZWQgYnkgY29tbW9uLkxvYWRJbmZvRGljdCgpIG9uIHRoZSBpbnB1dAorICAgICAgICB0YXJnZXRfZmlsZXMuIFdpbGwgdXNlIE9QVElPTlMuaW5mb19kaWN0IGlmIE5vbmUgaGFzIGJlZW4gZ2l2ZW4uCiAgICIiIgotCiAgIGlmIGluZm9fZGljdCBpcyBOb25lOgogICAgIGluZm9fZGljdCA9IE9QVElPTlMuaW5mb19kaWN0CiAKLSAgZnVsbF9yZWNvdmVyeV9pbWFnZSA9IGluZm9fZGljdC5nZXQoImZ1bGxfcmVjb3ZlcnlfaW1hZ2UiLCBOb25lKSA9PSAidHJ1ZSIKKyAgZnVsbF9yZWNvdmVyeV9pbWFnZSA9IGluZm9fZGljdC5nZXQoImZ1bGxfcmVjb3ZlcnlfaW1hZ2UiKSA9PSAidHJ1ZSIKIAogICBpZiBmdWxsX3JlY292ZXJ5X2ltYWdlOgogICAgIG91dHB1dF9zaW5rKCJldGMvcmVjb3ZlcnkuaW1nIiwgcmVjb3ZlcnlfaW1nLmRhdGEpCiAKICAgZWxzZToKLSAgICBkaWZmX3Byb2dyYW0gPSBbImltZ2RpZmYiXQorICAgIHN5c3RlbV9yb290X2ltYWdlID0gaW5mb19kaWN0LmdldCgic3lzdGVtX3Jvb3RfaW1hZ2UiKSA9PSAidHJ1ZSIKICAgICBwYXRoID0gb3MucGF0aC5qb2luKGlucHV0X2RpciwgIlNZU1RFTSIsICJldGMiLCAicmVjb3ZlcnktcmVzb3VyY2UuZGF0IikKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgIGRpZmZfcHJvZ3JhbS5hcHBlbmQoIi1iIikKLSAgICAgIGRpZmZfcHJvZ3JhbS5hcHBlbmQocGF0aCkKLSAgICAgIGJvbnVzX2FyZ3MgPSAiLWIgL3N5c3RlbS9ldGMvcmVjb3ZlcnktcmVzb3VyY2UuZGF0IgotICAgIGVsc2U6CisgICAgIyBXaXRoIHN5c3RlbS1yb290LWltYWdlLCBib290IGFuZCByZWNvdmVyeSBpbWFnZXMgd2lsbCBoYXZlIG1pc21hdGNoaW5nCisgICAgIyBlbnRyaWVzIChvbmx5IHJlY292ZXJ5IGhhcyB0aGUgcmFtZGlzayBlbnRyeSkgKEJ1ZzogNzI3MzE1MDYpLiBVc2UgYnNkaWZmCisgICAgIyB0byBoYW5kbGUgc3VjaCBhIGNhc2UuCisgICAgaWYgc3lzdGVtX3Jvb3RfaW1hZ2U6CisgICAgICBkaWZmX3Byb2dyYW0gPSBbImJzZGlmZiJdCiAgICAgICBib251c19hcmdzID0gIiIKKyAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHMocGF0aCkKKyAgICBlbHNlOgorICAgICAgZGlmZl9wcm9ncmFtID0gWyJpbWdkaWZmIl0KKyAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICBkaWZmX3Byb2dyYW0uYXBwZW5kKCItYiIpCisgICAgICAgIGRpZmZfcHJvZ3JhbS5hcHBlbmQocGF0aCkKKyAgICAgICAgYm9udXNfYXJncyA9ICItYiAvc3lzdGVtL2V0Yy9yZWNvdmVyeS1yZXNvdXJjZS5kYXQiCisgICAgICBlbHNlOgorICAgICAgICBib251c19hcmdzID0gIiIKIAogICAgIGQgPSBEaWZmZXJlbmNlKHJlY292ZXJ5X2ltZywgYm9vdF9pbWcsIGRpZmZfcHJvZ3JhbT1kaWZmX3Byb2dyYW0pCiAgICAgXywgXywgcGF0Y2ggPSBkLkNvbXB1dGVQYXRjaCgpCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvZWRpZnlfZ2VuZXJhdG9yLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL2VkaWZ5X2dlbmVyYXRvci5weQppbmRleCAwYzQ0ZmFmLi43YTgxOTI4IDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvZWRpZnlfZ2VuZXJhdG9yLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9lZGlmeV9nZW5lcmF0b3IucHkKQEAgLTc3LDE0ICs3NywxNCBAQAogICAgIHdpdGggdGVtcG9yYXJ5PVRydWUpIHRvIHRoaXMgb25lLiIiIgogICAgIHNlbGYuc2NyaXB0LmV4dGVuZChvdGhlci5zY3JpcHQpCiAKLSAgZGVmIEFzc2VydE9lbVByb3BlcnR5KHNlbGYsIG5hbWUsIHZhbHVlcyk6CisgIGRlZiBBc3NlcnRPZW1Qcm9wZXJ0eShzZWxmLCBuYW1lLCB2YWx1ZXMsIG9lbV9ub19tb3VudCk6CiAgICAgIiIiQXNzZXJ0IHRoYXQgYSBwcm9wZXJ0eSBvbiB0aGUgT0VNIHBhcml0aXRpb24gbWF0Y2hlcyBhbGxvd2VkIHZhbHVlcy4iIiIKICAgICBpZiBub3QgbmFtZToKICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm11c3Qgc3BlY2lmeSBhbiBPRU0gcHJvcGVydHkiKQogICAgIGlmIG5vdCB2YWx1ZXM6CiAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtdXN0IHNwZWNpZnkgdGhlIE9FTSB2YWx1ZSIpCi0gICAgZ2V0X3Byb3BfY29tbWFuZCA9IE5vbmUKLSAgICBpZiBjb21tb24uT1BUSU9OUy5vZW1fbm9fbW91bnQ6CisKKyAgICBpZiBvZW1fbm9fbW91bnQ6CiAgICAgICBnZXRfcHJvcF9jb21tYW5kID0gJ2dldHByb3AoIiVzIiknICUgbmFtZQogICAgIGVsc2U6CiAgICAgICBnZXRfcHJvcF9jb21tYW5kID0gJ2ZpbGVfZ2V0cHJvcCgiL29lbS9vZW0ucHJvcCIsICIlcyIpJyAlIG5hbWUKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9pbWdfZnJvbV90YXJnZXRfZmlsZXMucHkgYi90b29scy9yZWxlYXNldG9vbHMvaW1nX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5CmluZGV4IDQ0MjJiNTMuLmU2ZThjOWYgMTAwNzU1Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9pbWdfZnJvbV90YXJnZXRfZmlsZXMucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL2ltZ19mcm9tX3RhcmdldF9maWxlcy5weQpAQCAtNzEsOCArNzEsNyBAQAogICAgIGNvbW1vbi5Vc2FnZShfX2RvY19fKQogICAgIHN5cy5leGl0KDEpCiAKLSAgT1BUSU9OUy5pbnB1dF90bXAsIGlucHV0X3ppcCA9IGNvbW1vbi5VbnppcFRlbXAoCi0gICAgICBhcmdzWzBdLCBbIklNQUdFUy8qIiwgIk9UQS8qIl0pCisgIE9QVElPTlMuaW5wdXRfdG1wID0gY29tbW9uLlVuemlwVGVtcChhcmdzWzBdLCBbIklNQUdFUy8qIiwgIk9UQS8qIl0pCiAgIG91dHB1dF96aXAgPSB6aXBmaWxlLlppcEZpbGUoYXJnc1sxXSwgInciLCBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkKICAgQ29weUluZm8ob3V0cHV0X3ppcCkKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL290YV9mcm9tX3RhcmdldF9maWxlcy5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfZnJvbV90YXJnZXRfZmlsZXMucHkKaW5kZXggNjBhYTg0ZS4uYWJhNDNlMiAxMDA3NTUKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL290YV9mcm9tX3RhcmdldF9maWxlcy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5CkBAIC00OSw4ICs0OSwxMCBAQAogCiAgIC1vICAoLS1vZW1fc2V0dGluZ3MpICA8bWFpbl9maWxlWyxhZGRpdGlvbmFsX2ZpbGVzLi4uXT4KICAgICAgIENvbW1hIHNlcGVyYXRlZCBsaXN0IG9mIGZpbGVzIHVzZWQgdG8gc3BlY2lmeSB0aGUgZXhwZWN0ZWQgT0VNLXNwZWNpZmljCi0gICAgICBwcm9wZXJ0aWVzIG9uIHRoZSBPRU0gcGFydGl0aW9uIG9mIHRoZSBpbnRlbmRlZCBkZXZpY2UuCi0gICAgICBNdWx0aXBsZSBleHBlY3RlZCB2YWx1ZXMgY2FuIGJlIHVzZWQgYnkgcHJvdmlkaW5nIG11bHRpcGxlIGZpbGVzLgorICAgICAgcHJvcGVydGllcyBvbiB0aGUgT0VNIHBhcnRpdGlvbiBvZiB0aGUgaW50ZW5kZWQgZGV2aWNlLiBNdWx0aXBsZSBleHBlY3RlZAorICAgICAgdmFsdWVzIGNhbiBiZSB1c2VkIGJ5IHByb3ZpZGluZyBtdWx0aXBsZSBmaWxlcy4gT25seSB0aGUgZmlyc3QgZGljdCB3aWxsCisgICAgICBiZSB1c2VkIHRvIGNvbXB1dGUgZmluZ2VycHJpbnQsIHdoaWxlIHRoZSByZXN0IHdpbGwgYmUgdXNlZCB0byBhc3NlcnQKKyAgICAgIE9FTS1zcGVjaWZpYyBwcm9wZXJ0aWVzLgogCiAgIC0tb2VtX25vX21vdW50CiAgICAgICBGb3IgZGV2aWNlcyB3aXRoIE9FTS1zcGVjaWZpYyBwcm9wZXJ0aWVzIGJ1dCB3aXRob3V0IGFuIE9FTSBwYXJ0aXRpb24sCkBAIC01OCw3ICs2MCw3IEBACiAgICAgICB2ZXJ5IHJhcmVseSB1c2VkLCBzaW5jZSBpdCdzIGV4cGVjdGVkIHRvIGhhdmUgYSBkZWRpY2F0ZWQgT0VNIHBhcnRpdGlvbgogICAgICAgZm9yIE9FTS1zcGVjaWZpYyBwcm9wZXJ0aWVzLiBPbmx5IG1lYW5pbmdmdWwgd2hlbiAtbyBpcyBzcGVjaWZpZWQuCiAKLSAgLXcgICgtLXdpcGVfdXNlcl9kYXRhKQorICAtLXdpcGVfdXNlcl9kYXRhCiAgICAgICBHZW5lcmF0ZSBhbiBPVEEgcGFja2FnZSB0aGF0IHdpbGwgd2lwZSB0aGUgdXNlciBkYXRhIHBhcnRpdGlvbgogICAgICAgd2hlbiBpbnN0YWxsZWQuCiAKQEAgLTkwLDYgKzkyLDI0IEBACiAgICAgICBmaXJzdCwgc28gdGhhdCBhbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBzeXN0ZW0gcGFydGl0aW9uIGFyZSBkb25lCiAgICAgICB1c2luZyB0aGUgbmV3IHJlY292ZXJ5IChuZXcga2VybmVsLCBldGMuKS4KIAorICAtLWluY2x1ZGVfc2Vjb25kYXJ5CisgICAgICBBZGRpdGlvbmFsbHkgaW5jbHVkZSB0aGUgcGF5bG9hZCBmb3Igc2Vjb25kYXJ5IHNsb3QgaW1hZ2VzIChkZWZhdWx0OgorICAgICAgRmFsc2UpLiBPbmx5IG1lYW5pbmdmdWwgd2hlbiBnZW5lcmF0aW5nIEEvQiBPVEFzLgorCisgICAgICBCeSBkZWZhdWx0LCBhbiBBL0IgT1RBIHBhY2thZ2UgZG9lc24ndCBjb250YWluIHRoZSBpbWFnZXMgZm9yIHRoZQorICAgICAgc2Vjb25kYXJ5IHNsb3QgKGUuZy4gc3lzdGVtX290aGVyLmltZykuIFNwZWNpZnlpbmcgdGhpcyBmbGFnIGFsbG93cworICAgICAgZ2VuZXJhdGluZyBhIHNlcGFyYXRlIHBheWxvYWQgdGhhdCB3aWxsIGluc3RhbGwgc2Vjb25kYXJ5IHNsb3QgaW1hZ2VzLgorCisgICAgICBTdWNoIGEgcGFja2FnZSBuZWVkcyB0byBiZSBhcHBsaWVkIGluIGEgdHdvLXN0YWdlIG1hbm5lciwgd2l0aCBhIHJlYm9vdAorICAgICAgaW4tYmV0d2Vlbi4gRHVyaW5nIHRoZSBmaXJzdCBzdGFnZSwgdGhlIHVwZGF0ZXIgYXBwbGllcyB0aGUgcHJpbWFyeQorICAgICAgcGF5bG9hZCBvbmx5LiBVcG9uIGZpbmlzaGluZywgaXQgcmVib290cyB0aGUgZGV2aWNlIGludG8gdGhlIG5ld2x5IHVwZGF0ZWQKKyAgICAgIHNsb3QuIEl0IHRoZW4gY29udGludWVzIHRvIGluc3RhbGwgdGhlIHNlY29uZGFyeSBwYXlsb2FkIHRvIHRoZSBpbmFjdGl2ZQorICAgICAgc2xvdCwgYnV0IHdpdGhvdXQgc3dpdGNoaW5nIHRoZSBhY3RpdmUgc2xvdCBhdCB0aGUgZW5kIChuZWVkcyB0aGUgbWF0Y2hpbmcKKyAgICAgIHN1cHBvcnQgaW4gdXBkYXRlX2VuZ2luZSwgaS5lLiBTV0lUQ0hfU0xPVF9PTl9SRUJPT1QgZmxhZykuCisKKyAgICAgIER1ZSB0byB0aGUgc3BlY2lhbCBpbnN0YWxsIHByb2NlZHVyZSwgdGhlIHNlY29uZGFyeSBwYXlsb2FkIHdpbGwgYmUgYWx3YXlzCisgICAgICBnZW5lcmF0ZWQgYXMgYSBmdWxsIHBheWxvYWQuCisKICAgLS1ibG9jawogICAgICAgR2VuZXJhdGUgYSBibG9jay1iYXNlZCBPVEEgZm9yIG5vbi1BL0IgZGV2aWNlLiBXZSBoYXZlIGRlcHJlY2F0ZWQgdGhlCiAgICAgICBzdXBwb3J0IGZvciBmaWxlLWJhc2VkIE9UQSBzaW5jZSBPLiBCbG9jay1iYXNlZCBPVEEgd2lsbCBiZSB1c2VkIGJ5CkBAIC0xMDksOSArMTI5LDYgQEAKICAgICAgIFNwZWNpZmllcyB0aGUgdGhyZXNob2xkIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlIG1heGltdW0KICAgICAgIGFsbG93ZWQgc3Rhc2ggc2l6ZSAoZGVmYXVsdHMgdG8gMC44KS4KIAotICAtLWdlbl92ZXJpZnkKLSAgICAgIEdlbmVyYXRlIGFuIE9UQSBwYWNrYWdlIHRoYXQgdmVyaWZpZXMgdGhlIHBhcnRpdGlvbnMuCi0KICAgLS1sb2dfZGlmZiA8ZmlsZT4KICAgICAgIEdlbmVyYXRlIGEgbG9nIGZpbGUgdGhhdCBzaG93cyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIHNvdXJjZSBhbmQgdGFyZ2V0CiAgICAgICBidWlsZHMgZm9yIGFuIGluY3JlbWVudGFsIHBhY2thZ2UuIFRoaXMgb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuCkBAIC0xMjcsMjcgKzE0NCwzNCBAQAogCiAgIC0tcGF5bG9hZF9zaWduZXJfYXJncyA8YXJncz4KICAgICAgIFNwZWNpZnkgdGhlIGFyZ3VtZW50cyBuZWVkZWQgZm9yIHBheWxvYWQgc2lnbmVyLgorCisgIC0tc2tpcF9wb3N0aW5zdGFsbAorICAgICAgU2tpcCB0aGUgcG9zdGluc3RhbGwgaG9va3Mgd2hlbiBnZW5lcmF0aW5nIGFuIEEvQiBPVEEgcGFja2FnZSAoZGVmYXVsdDoKKyAgICAgIEZhbHNlKS4gTm90ZSB0aGF0IHRoaXMgZGlzY2FyZHMgQUxMIHRoZSBob29rcywgaW5jbHVkaW5nIG5vbi1vcHRpb25hbAorICAgICAgb25lcy4gU2hvdWxkIG9ubHkgYmUgdXNlZCBpZiBjYWxsZXIga25vd3MgaXQncyBzYWZlIHRvIGRvIHNvIChlLmcuIGFsbCB0aGUKKyAgICAgIHBvc3RpbnN0YWxsIHdvcmsgaXMgdG8gZGV4b3B0IGFwcHMgYW5kIGEgZGF0YSB3aXBlIHdpbGwgaGFwcGVuIGltbWVkaWF0ZWx5CisgICAgICBhZnRlcikuIE9ubHkgbWVhbmluZ2Z1bCB3aGVuIGdlbmVyYXRpbmcgQS9CIE9UQXMuCiAiIiIKIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogCi1pbXBvcnQgc3lzCi0KLWlmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjA3MDAwMDoKLSAgcHJpbnQoIlB5dGhvbiAyLjcgb3IgbmV3ZXIgaXMgcmVxdWlyZWQuIiwgZmlsZT1zeXMuc3RkZXJyKQotICBzeXMuZXhpdCgxKQotCi1pbXBvcnQgY29weQogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc2hsZXgKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB6aXBmaWxlCiAKIGltcG9ydCBjb21tb24KIGltcG9ydCBlZGlmeV9nZW5lcmF0b3IKLWltcG9ydCBzcGFyc2VfaW1nCisKK2lmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjA3MDAwMDoKKyAgcHJpbnQoIlB5dGhvbiAyLjcgb3IgbmV3ZXIgaXMgcmVxdWlyZWQuIiwgZmlsZT1zeXMuc3RkZXJyKQorICBzeXMuZXhpdCgxKQorCiAKIE9QVElPTlMgPSBjb21tb24uT1BUSU9OUwogT1BUSU9OUy5wYWNrYWdlX2tleSA9IE5vbmUKQEAgLTE2MiwyOCArMTg2LDM0NSBAQAogaWYgT1BUSU9OUy53b3JrZXJfdGhyZWFkcyA9PSAwOgogICBPUFRJT05TLndvcmtlcl90aHJlYWRzID0gMQogT1BUSU9OUy50d29fc3RlcCA9IEZhbHNlCitPUFRJT05TLmluY2x1ZGVfc2Vjb25kYXJ5ID0gRmFsc2UKIE9QVElPTlMubm9fc2lnbmluZyA9IEZhbHNlCiBPUFRJT05TLmJsb2NrX2Jhc2VkID0gVHJ1ZQogT1BUSU9OUy51cGRhdGVyX2JpbmFyeSA9IE5vbmUKIE9QVElPTlMub2VtX3NvdXJjZSA9IE5vbmUKIE9QVElPTlMub2VtX25vX21vdW50ID0gRmFsc2UKLU9QVElPTlMuZmFsbGJhY2tfdG9fZnVsbCA9IFRydWUKIE9QVElPTlMuZnVsbF9yYWRpbyA9IEZhbHNlCiBPUFRJT05TLmZ1bGxfYm9vdGxvYWRlciA9IEZhbHNlCiAjIFN0YXNoIHNpemUgY2Fubm90IGV4Y2VlZCBjYWNoZV9zaXplICogdGhyZXNob2xkLgogT1BUSU9OUy5jYWNoZV9zaXplID0gTm9uZQogT1BUSU9OUy5zdGFzaF90aHJlc2hvbGQgPSAwLjgKLU9QVElPTlMuZ2VuX3ZlcmlmeSA9IEZhbHNlCiBPUFRJT05TLmxvZ19kaWZmID0gTm9uZQogT1BUSU9OUy5wYXlsb2FkX3NpZ25lciA9IE5vbmUKIE9QVElPTlMucGF5bG9hZF9zaWduZXJfYXJncyA9IFtdCiBPUFRJT05TLmV4dHJhY3RlZF9pbnB1dCA9IE5vbmUKIE9QVElPTlMua2V5X3Bhc3N3b3JkcyA9IFtdCitPUFRJT05TLnNraXBfcG9zdGluc3RhbGwgPSBGYWxzZQorCiAKIE1FVEFEQVRBX05BTUUgPSAnTUVUQS1JTkYvY29tL2FuZHJvaWQvbWV0YWRhdGEnCitQT1NUSU5TVEFMTF9DT05GSUcgPSAnTUVUQS9wb3N0aW5zdGFsbF9jb25maWcudHh0JwogVU5aSVBfUEFUVEVSTiA9IFsnSU1BR0VTLyonLCAnTUVUQS8qJ10KIAogCitjbGFzcyBCdWlsZEluZm8ob2JqZWN0KToKKyAgIiIiQSBjbGFzcyB0aGF0IGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBidWlsZC4KKworICBUaGlzIGNsYXNzIHdyYXBzIHVwIHRoZSBwcm9wZXJ0eSBxdWVyeWluZyBmb3IgYSBnaXZlbiBzb3VyY2Ugb3IgdGFyZ2V0IGJ1aWxkLgorICBJdCBhYnN0cmFjdHMgYXdheSB0aGUgbG9naWMgb2YgaGFuZGxpbmcgT0VNLXNwZWNpZmljIHByb3BlcnRpZXMsIGFuZCBjYWNoZXMKKyAgdGhlIGNvbW1vbmx5IHVzZWQgcHJvcGVydGllcyBzdWNoIGFzIGZpbmdlcnByaW50LgorCisgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW5mbyBkaWN0czogYSkgYnVpbGQtdGltZSBpbmZvIGRpY3QsIHdoaWNoIGlzIGdlbmVyYXRlZAorICBhdCBidWlsZCB0aW1lIChpLmUuIGluY2x1ZGVkIGluIGEgdGFyZ2V0X2ZpbGVzIHppcCk7IGIpIE9FTSBpbmZvIGRpY3QgdGhhdCBpcworICBzcGVjaWZpZWQgYXQgcGFja2FnZSBnZW5lcmF0aW9uIHRpbWUgKHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnQKKyAgJy0tb2VtX3NldHRpbmdzJykuIElmIGEgYnVpbGQgZG9lc24ndCB1c2UgT0VNLXNwZWNpZmljIHByb3BlcnRpZXMgKGkuZS4gbm90CisgIGhhdmluZyAib2VtX2ZpbmdlcnByaW50X3Byb3BlcnRpZXMiIGluIGJ1aWxkLXRpbWUgaW5mbyBkaWN0KSwgYWxsIHRoZSBxdWVyaWVzCisgIHdvdWxkIGJlIGFuc3dlcmVkIGJhc2VkIG9uIGJ1aWxkLXRpbWUgaW5mbyBkaWN0IG9ubHkuIE90aGVyd2lzZSBpZiB1c2luZworICBPRU0tc3BlY2lmaWMgcHJvcGVydGllcywgc29tZSBvZiB0aGVtIHdpbGwgYmUgY2FsY3VsYXRlZCBmcm9tIHR3byBpbmZvIGRpY3RzLgorCisgIFVzZXJzIGNhbiBxdWVyeSBwcm9wZXJ0aWVzIHNpbWlsYXJseSBhcyB1c2luZyBhIGRpY3QoKSAoZS5nLiBpbmZvWydmc3RhYiddKSwKKyAgb3IgdG8gcXVlcnkgYnVpbGQgcHJvcGVydGllcyB2aWEgR2V0QnVpbGRQcm9wKCkgb3IgR2V0VmVuZG9yQnVpbGRQcm9wKCkuCisKKyAgQXR0cmlidXRlczoKKyAgICBpbmZvX2RpY3Q6IFRoZSBidWlsZC10aW1lIGluZm8gZGljdC4KKyAgICBpc19hYjogV2hldGhlciBpdCdzIGEgYnVpbGQgdGhhdCB1c2VzIEEvQiBPVEEuCisgICAgb2VtX2RpY3RzOiBBIGxpc3Qgb2YgT0VNIGRpY3RzLgorICAgIG9lbV9wcm9wczogQSBsaXN0IG9mIE9FTSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlIHJlYWQgZnJvbSBPRU0gZGljdHM7IE5vbmUKKyAgICAgICAgaWYgdGhlIGJ1aWxkIGRvZXNuJ3QgdXNlIGFueSBPRU0tc3BlY2lmaWMgcHJvcGVydHkuCisgICAgZmluZ2VycHJpbnQ6IFRoZSBmaW5nZXJwcmludCBvZiB0aGUgYnVpbGQsIHdoaWNoIHdvdWxkIGJlIGNhbGN1bGF0ZWQgYmFzZWQKKyAgICAgICAgb24gT0VNIHByb3BlcnRpZXMgaWYgYXBwbGljYWJsZS4KKyAgICBkZXZpY2U6IFRoZSBkZXZpY2UgbmFtZSwgd2hpY2ggY291bGQgY29tZSBmcm9tIE9FTSBkaWN0cyBpZiBhcHBsaWNhYmxlLgorICAiIiIKKworICBkZWYgX19pbml0X18oc2VsZiwgaW5mb19kaWN0LCBvZW1fZGljdHMpOgorICAgICIiIkluaXRpYWxpemVzIGEgQnVpbGRJbmZvIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIGRpY3RzLgorCisgICAgQXJndW1lbnRzOgorICAgICAgaW5mb19kaWN0OiBUaGUgYnVpbGQtdGltZSBpbmZvIGRpY3QuCisgICAgICBvZW1fZGljdHM6IEEgbGlzdCBvZiBPRU0gZGljdHMgKHdoaWNoIGlzIHBhcnNlZCBmcm9tIC0tb2VtX3NldHRpbmdzKS4gTm90ZQorICAgICAgICAgIHRoYXQgaXQgYWx3YXlzIHVzZXMgdGhlIGZpcnN0IGRpY3QgdG8gY2FsY3VsYXRlIHRoZSBmaW5nZXJwcmludCBvciB0aGUKKyAgICAgICAgICBkZXZpY2UgbmFtZS4gVGhlIHJlc3Qgd291bGQgYmUgdXNlZCBmb3IgYXNzZXJ0aW5nIE9FTSBwcm9wZXJ0aWVzIG9ubHkKKyAgICAgICAgICAoZS5nLiAgb25lIHBhY2thZ2UgY2FuIGJlIGluc3RhbGxlZCBvbiBvbmUgb2YgdGhlc2UgZGV2aWNlcykuCisgICAgIiIiCisgICAgc2VsZi5pbmZvX2RpY3QgPSBpbmZvX2RpY3QKKyAgICBzZWxmLm9lbV9kaWN0cyA9IG9lbV9kaWN0cworCisgICAgc2VsZi5faXNfYWIgPSBpbmZvX2RpY3QuZ2V0KCJhYl91cGRhdGUiKSA9PSAidHJ1ZSIKKyAgICBzZWxmLl9vZW1fcHJvcHMgPSBpbmZvX2RpY3QuZ2V0KCJvZW1fZmluZ2VycHJpbnRfcHJvcGVydGllcyIpCisKKyAgICBpZiBzZWxmLl9vZW1fcHJvcHM6CisgICAgICBhc3NlcnQgb2VtX2RpY3RzLCAiT0VNIHNvdXJjZSByZXF1aXJlZCBmb3IgdGhpcyBidWlsZCIKKworICAgICMgVGhlc2UgdHdvIHNob3VsZCBiZSBjb21wdXRlZCBvbmx5IGFmdGVyIHNldHRpbmcgc2VsZi5fb2VtX3Byb3BzLgorICAgIHNlbGYuX2RldmljZSA9IHNlbGYuR2V0T2VtUHJvcGVydHkoInJvLnByb2R1Y3QuZGV2aWNlIikKKyAgICBzZWxmLl9maW5nZXJwcmludCA9IHNlbGYuQ2FsY3VsYXRlRmluZ2VycHJpbnQoKQorCisgIEBwcm9wZXJ0eQorICBkZWYgaXNfYWIoc2VsZik6CisgICAgcmV0dXJuIHNlbGYuX2lzX2FiCisKKyAgQHByb3BlcnR5CisgIGRlZiBkZXZpY2Uoc2VsZik6CisgICAgcmV0dXJuIHNlbGYuX2RldmljZQorCisgIEBwcm9wZXJ0eQorICBkZWYgZmluZ2VycHJpbnQoc2VsZik6CisgICAgcmV0dXJuIHNlbGYuX2ZpbmdlcnByaW50CisKKyAgQHByb3BlcnR5CisgIGRlZiBvZW1fcHJvcHMoc2VsZik6CisgICAgcmV0dXJuIHNlbGYuX29lbV9wcm9wcworCisgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgIHJldHVybiBzZWxmLmluZm9fZGljdFtrZXldCisKKyAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgcmV0dXJuIHNlbGYuaW5mb19kaWN0LmdldChrZXksIGRlZmF1bHQpCisKKyAgZGVmIEdldEJ1aWxkUHJvcChzZWxmLCBwcm9wKToKKyAgICAiIiJSZXR1cm5zIHRoZSBpbnF1aXJlZCBidWlsZCBwcm9wZXJ0eS4iIiIKKyAgICB0cnk6CisgICAgICByZXR1cm4gc2VsZi5pbmZvX2RpY3QuZ2V0KCJidWlsZC5wcm9wIiwge30pW3Byb3BdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgcmFpc2UgY29tbW9uLkV4dGVybmFsRXJyb3IoImNvdWxkbid0IGZpbmQgJXMgaW4gYnVpbGQucHJvcCIgJSAocHJvcCwpKQorCisgIGRlZiBHZXRWZW5kb3JCdWlsZFByb3Aoc2VsZiwgcHJvcCk6CisgICAgIiIiUmV0dXJucyB0aGUgaW5xdWlyZWQgdmVuZG9yIGJ1aWxkIHByb3BlcnR5LiIiIgorICAgIHRyeToKKyAgICAgIHJldHVybiBzZWxmLmluZm9fZGljdC5nZXQoInZlbmRvci5idWlsZC5wcm9wIiwge30pW3Byb3BdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgcmFpc2UgY29tbW9uLkV4dGVybmFsRXJyb3IoCisgICAgICAgICAgImNvdWxkbid0IGZpbmQgJXMgaW4gdmVuZG9yLmJ1aWxkLnByb3AiICUgKHByb3AsKSkKKworICBkZWYgR2V0T2VtUHJvcGVydHkoc2VsZiwga2V5KToKKyAgICBpZiBzZWxmLm9lbV9wcm9wcyBpcyBub3QgTm9uZSBhbmQga2V5IGluIHNlbGYub2VtX3Byb3BzOgorICAgICAgcmV0dXJuIHNlbGYub2VtX2RpY3RzWzBdW2tleV0KKyAgICByZXR1cm4gc2VsZi5HZXRCdWlsZFByb3Aoa2V5KQorCisgIGRlZiBDYWxjdWxhdGVGaW5nZXJwcmludChzZWxmKToKKyAgICBpZiBzZWxmLm9lbV9wcm9wcyBpcyBOb25lOgorICAgICAgcmV0dXJuIHNlbGYuR2V0QnVpbGRQcm9wKCJyby5idWlsZC5maW5nZXJwcmludCIpCisgICAgcmV0dXJuICIlcy8lcy8lczolcyIgJSAoCisgICAgICAgIHNlbGYuR2V0T2VtUHJvcGVydHkoInJvLnByb2R1Y3QuYnJhbmQiKSwKKyAgICAgICAgc2VsZi5HZXRPZW1Qcm9wZXJ0eSgicm8ucHJvZHVjdC5uYW1lIiksCisgICAgICAgIHNlbGYuR2V0T2VtUHJvcGVydHkoInJvLnByb2R1Y3QuZGV2aWNlIiksCisgICAgICAgIHNlbGYuR2V0QnVpbGRQcm9wKCJyby5idWlsZC50aHVtYnByaW50IikpCisKKyAgZGVmIFdyaXRlTW91bnRPZW1TY3JpcHQoc2VsZiwgc2NyaXB0KToKKyAgICBhc3NlcnQgc2VsZi5vZW1fcHJvcHMgaXMgbm90IE5vbmUKKyAgICByZWNvdmVyeV9tb3VudF9vcHRpb25zID0gc2VsZi5pbmZvX2RpY3QuZ2V0KCJyZWNvdmVyeV9tb3VudF9vcHRpb25zIikKKyAgICBzY3JpcHQuTW91bnQoIi9vZW0iLCByZWNvdmVyeV9tb3VudF9vcHRpb25zKQorCisgIGRlZiBXcml0ZURldmljZUFzc2VydGlvbnMoc2VsZiwgc2NyaXB0LCBvZW1fbm9fbW91bnQpOgorICAgICMgUmVhZCB0aGUgcHJvcGVydHkgZGlyZWN0bHkgaWYgbm90IHVzaW5nIE9FTSBwcm9wZXJ0aWVzLgorICAgIGlmIG5vdCBzZWxmLm9lbV9wcm9wczoKKyAgICAgIHNjcmlwdC5Bc3NlcnREZXZpY2Uoc2VsZi5kZXZpY2UpCisgICAgICByZXR1cm4KKworICAgICMgT3RoZXJ3aXNlIGFzc2VydCBPRU0gcHJvcGVydGllcy4KKyAgICBpZiBub3Qgc2VsZi5vZW1fZGljdHM6CisgICAgICByYWlzZSBjb21tb24uRXh0ZXJuYWxFcnJvcigKKyAgICAgICAgICAiTm8gT0VNIGZpbGUgcHJvdmlkZWQgdG8gYW5zd2VyIGV4cGVjdGVkIGFzc2VydGlvbnMiKQorCisgICAgZm9yIHByb3AgaW4gc2VsZi5vZW1fcHJvcHMuc3BsaXQoKToKKyAgICAgIHZhbHVlcyA9IFtdCisgICAgICBmb3Igb2VtX2RpY3QgaW4gc2VsZi5vZW1fZGljdHM6CisgICAgICAgIGlmIHByb3AgaW4gb2VtX2RpY3Q6CisgICAgICAgICAgdmFsdWVzLmFwcGVuZChvZW1fZGljdFtwcm9wXSkKKyAgICAgIGlmIG5vdCB2YWx1ZXM6CisgICAgICAgIHJhaXNlIGNvbW1vbi5FeHRlcm5hbEVycm9yKAorICAgICAgICAgICAgIlRoZSBPRU0gZmlsZSBpcyBtaXNzaW5nIHRoZSBwcm9wZXJ0eSAlcyIgJSAocHJvcCwpKQorICAgICAgc2NyaXB0LkFzc2VydE9lbVByb3BlcnR5KHByb3AsIHZhbHVlcywgb2VtX25vX21vdW50KQorCisKK2NsYXNzIFBheWxvYWRTaWduZXIob2JqZWN0KToKKyAgIiIiQSBjbGFzcyB0aGF0IHdyYXBzIHRoZSBwYXlsb2FkIHNpZ25pbmcgd29ya3MuCisKKyAgV2hlbiBnZW5lcmF0aW5nIGEgUGF5bG9hZCwgaGFzaGVzIG9mIHRoZSBwYXlsb2FkIGFuZCBtZXRhZGF0YSBmaWxlcyB3aWxsIGJlCisgIHNpZ25lZCB3aXRoIHRoZSBkZXZpY2Uga2V5LCBlaXRoZXIgYnkgY2FsbGluZyBhbiBleHRlcm5hbCBwYXlsb2FkIHNpZ25lciBvcgorICBieSBjYWxsaW5nIG9wZW5zc2wgd2l0aCB0aGUgcGFja2FnZSBrZXkuIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB1bmlmaWVkCisgIGludGVyZmFjZSwgc28gdGhhdCBjYWxsZXJzIGNhbiBqdXN0IGNhbGwgUGF5bG9hZFNpZ25lci5TaWduKCkuCisKKyAgSWYgYW4gZXh0ZXJuYWwgcGF5bG9hZCBzaWduZXIgaGFzIGJlZW4gc3BlY2lmaWVkIChPUFRJT05TLnBheWxvYWRfc2lnbmVyKSwgaXQKKyAgY2FsbHMgdGhlIHNpZ25lciB3aXRoIHRoZSBwcm92aWRlZCBhcmdzIChPUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MpLiBOb3RlCisgIHRoYXQgdGhlIHNpZ25pbmcga2V5IHNob3VsZCBiZSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkX3NpZ25lcl9hcmdzLgorICBPdGhlcndpc2Ugd2l0aG91dCBhbiBleHRlcm5hbCBzaWduZXIsIGl0IHVzZXMgdGhlIHBhY2thZ2Uga2V5CisgIChPUFRJT05TLnBhY2thZ2Vfa2V5KSBhbmQgY2FsbHMgb3BlbnNzbCBmb3IgdGhlIHNpZ25pbmcgd29ya3MuCisgICIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBpZiBPUFRJT05TLnBheWxvYWRfc2lnbmVyIGlzIE5vbmU6CisgICAgICAjIFByZXBhcmUgdGhlIHBheWxvYWQgc2lnbmluZyBrZXkuCisgICAgICBwcml2YXRlX2tleSA9IE9QVElPTlMucGFja2FnZV9rZXkgKyBPUFRJT05TLnByaXZhdGVfa2V5X3N1ZmZpeAorICAgICAgcHcgPSBPUFRJT05TLmtleV9wYXNzd29yZHNbT1BUSU9OUy5wYWNrYWdlX2tleV0KKworICAgICAgY21kID0gWyJvcGVuc3NsIiwgInBrY3M4IiwgIi1pbiIsIHByaXZhdGVfa2V5LCAiLWluZm9ybSIsICJERVIiXQorICAgICAgY21kLmV4dGVuZChbIi1wYXNzaW4iLCAicGFzczoiICsgcHddIGlmIHB3IGVsc2UgWyItbm9jcnlwdCJdKQorICAgICAgc2lnbmluZ19rZXkgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ia2V5LSIsIHN1ZmZpeD0iLmtleSIpCisgICAgICBjbWQuZXh0ZW5kKFsiLW91dCIsIHNpZ25pbmdfa2V5XSkKKworICAgICAgZ2V0X3NpZ25pbmdfa2V5ID0gY29tbW9uLlJ1bihjbWQsIHZlcmJvc2U9RmFsc2UsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgIHN0ZG91dGRhdGEsIF8gPSBnZXRfc2lnbmluZ19rZXkuY29tbXVuaWNhdGUoKQorICAgICAgYXNzZXJ0IGdldF9zaWduaW5nX2tleS5yZXR1cm5jb2RlID09IDAsIFwKKyAgICAgICAgICAiRmFpbGVkIHRvIGdldCBzaWduaW5nIGtleToge30iLmZvcm1hdChzdGRvdXRkYXRhKQorCisgICAgICBzZWxmLnNpZ25lciA9ICJvcGVuc3NsIgorICAgICAgc2VsZi5zaWduZXJfYXJncyA9IFsicGtleXV0bCIsICItc2lnbiIsICItaW5rZXkiLCBzaWduaW5nX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi1wa2V5b3B0IiwgImRpZ2VzdDpzaGEyNTYiXQorICAgIGVsc2U6CisgICAgICBzZWxmLnNpZ25lciA9IE9QVElPTlMucGF5bG9hZF9zaWduZXIKKyAgICAgIHNlbGYuc2lnbmVyX2FyZ3MgPSBPUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MKKworICBkZWYgU2lnbihzZWxmLCBpbl9maWxlKToKKyAgICAiIiJTaWducyB0aGUgZ2l2ZW4gaW5wdXQgZmlsZS4gUmV0dXJucyB0aGUgb3V0cHV0IGZpbGVuYW1lLiIiIgorICAgIG91dF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InNpZ25lZC0iLCBzdWZmaXg9Ii5iaW4iKQorICAgIGNtZCA9IFtzZWxmLnNpZ25lcl0gKyBzZWxmLnNpZ25lcl9hcmdzICsgWyctaW4nLCBpbl9maWxlLCAnLW91dCcsIG91dF9maWxlXQorICAgIHNpZ25pbmcgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIHN0ZG91dGRhdGEsIF8gPSBzaWduaW5nLmNvbW11bmljYXRlKCkKKyAgICBhc3NlcnQgc2lnbmluZy5yZXR1cm5jb2RlID09IDAsIFwKKyAgICAgICAgIkZhaWxlZCB0byBzaWduIHRoZSBpbnB1dCBmaWxlOiB7fSIuZm9ybWF0KHN0ZG91dGRhdGEpCisgICAgcmV0dXJuIG91dF9maWxlCisKKworY2xhc3MgUGF5bG9hZChvYmplY3QpOgorICAiIiJNYW5hZ2VzIHRoZSBjcmVhdGlvbiBhbmQgdGhlIHNpZ25pbmcgb2YgYW4gQS9CIE9UQSBQYXlsb2FkLiIiIgorCisgIFBBWUxPQURfQklOID0gJ3BheWxvYWQuYmluJworICBQQVlMT0FEX1BST1BFUlRJRVNfVFhUID0gJ3BheWxvYWRfcHJvcGVydGllcy50eHQnCisgIFNFQ09OREFSWV9QQVlMT0FEX0JJTiA9ICdzZWNvbmRhcnkvcGF5bG9hZC5iaW4nCisgIFNFQ09OREFSWV9QQVlMT0FEX1BST1BFUlRJRVNfVFhUID0gJ3NlY29uZGFyeS9wYXlsb2FkX3Byb3BlcnRpZXMudHh0JworCisgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWNvbmRhcnk9RmFsc2UpOgorICAgICIiIkluaXRpYWxpemVzIGEgUGF5bG9hZCBpbnN0YW5jZS4KKworICAgIEFyZ3M6CisgICAgICBzZWNvbmRhcnk6IFdoZXRoZXIgaXQncyBnZW5lcmF0aW5nIGEgc2Vjb25kYXJ5IHBheWxvYWQgKGRlZmF1bHQ6IEZhbHNlKS4KKyAgICAiIiIKKyAgICAjIFRoZSBwbGFjZSB3aGVyZSB0aGUgb3V0cHV0IGZyb20gdGhlIHN1YnByb2Nlc3Mgc2hvdWxkIGdvLgorICAgIHNlbGYuX2xvZ19maWxlID0gc3lzLnN0ZG91dCBpZiBPUFRJT05TLnZlcmJvc2UgZWxzZSBzdWJwcm9jZXNzLlBJUEUKKyAgICBzZWxmLnBheWxvYWRfZmlsZSA9IE5vbmUKKyAgICBzZWxmLnBheWxvYWRfcHJvcGVydGllcyA9IE5vbmUKKyAgICBzZWxmLnNlY29uZGFyeSA9IHNlY29uZGFyeQorCisgIGRlZiBHZW5lcmF0ZShzZWxmLCB0YXJnZXRfZmlsZSwgc291cmNlX2ZpbGU9Tm9uZSwgYWRkaXRpb25hbF9hcmdzPU5vbmUpOgorICAgICIiIkdlbmVyYXRlcyBhIHBheWxvYWQgZnJvbSB0aGUgZ2l2ZW4gdGFyZ2V0LWZpbGVzIHppcChzKS4KKworICAgIEFyZ3M6CisgICAgICB0YXJnZXRfZmlsZTogVGhlIGZpbGVuYW1lIG9mIHRoZSB0YXJnZXQgYnVpbGQgdGFyZ2V0LWZpbGVzIHppcC4KKyAgICAgIHNvdXJjZV9maWxlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIHNvdXJjZSBidWlsZCB0YXJnZXQtZmlsZXMgemlwOyBvciBOb25lIGlmCisgICAgICAgICAgZ2VuZXJhdGluZyBhIGZ1bGwgT1RBLgorICAgICAgYWRkaXRpb25hbF9hcmdzOiBBIGxpc3Qgb2YgYWRkaXRpb25hbCBhcmdzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0bworICAgICAgICAgIGJyaWxsb191cGRhdGVfcGF5bG9hZCBzY3JpcHQ7IG9yIE5vbmUuCisgICAgIiIiCisgICAgaWYgYWRkaXRpb25hbF9hcmdzIGlzIE5vbmU6CisgICAgICBhZGRpdGlvbmFsX2FyZ3MgPSBbXQorCisgICAgcGF5bG9hZF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InBheWxvYWQtIiwgc3VmZml4PSIuYmluIikKKyAgICBjbWQgPSBbImJyaWxsb191cGRhdGVfcGF5bG9hZCIsICJnZW5lcmF0ZSIsCisgICAgICAgICAgICItLXBheWxvYWQiLCBwYXlsb2FkX2ZpbGUsCisgICAgICAgICAgICItLXRhcmdldF9pbWFnZSIsIHRhcmdldF9maWxlXQorICAgIGlmIHNvdXJjZV9maWxlIGlzIG5vdCBOb25lOgorICAgICAgY21kLmV4dGVuZChbIi0tc291cmNlX2ltYWdlIiwgc291cmNlX2ZpbGVdKQorICAgIGNtZC5leHRlbmQoYWRkaXRpb25hbF9hcmdzKQorICAgIHAgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXNlbGYuX2xvZ19maWxlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgc3Rkb3V0ZGF0YSwgXyA9IHAuY29tbXVuaWNhdGUoKQorICAgIGFzc2VydCBwLnJldHVybmNvZGUgPT0gMCwgXAorICAgICAgICAiYnJpbGxvX3VwZGF0ZV9wYXlsb2FkIGdlbmVyYXRlIGZhaWxlZDoge30iLmZvcm1hdChzdGRvdXRkYXRhKQorCisgICAgc2VsZi5wYXlsb2FkX2ZpbGUgPSBwYXlsb2FkX2ZpbGUKKyAgICBzZWxmLnBheWxvYWRfcHJvcGVydGllcyA9IE5vbmUKKworICBkZWYgU2lnbihzZWxmLCBwYXlsb2FkX3NpZ25lcik6CisgICAgIiIiR2VuZXJhdGVzIGFuZCBzaWducyB0aGUgaGFzaGVzIG9mIHRoZSBwYXlsb2FkIGFuZCBtZXRhZGF0YS4KKworICAgIEFyZ3M6CisgICAgICBwYXlsb2FkX3NpZ25lcjogQSBQYXlsb2FkU2lnbmVyKCkgaW5zdGFuY2UgdGhhdCBzZXJ2ZXMgdGhlIHNpZ25pbmcgd29yay4KKworICAgIFJhaXNlczoKKyAgICAgIEFzc2VydGlvbkVycm9yOiBPbiBhbnkgZmFpbHVyZSB3aGVuIGNhbGxpbmcgYnJpbGxvX3VwZGF0ZV9wYXlsb2FkIHNjcmlwdC4KKyAgICAiIiIKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXlsb2FkX3NpZ25lciwgUGF5bG9hZFNpZ25lcikKKworICAgICMgMS4gR2VuZXJhdGUgaGFzaGVzIG9mIHRoZSBwYXlsb2FkIGFuZCBtZXRhZGF0YSBmaWxlcy4KKyAgICBwYXlsb2FkX3NpZ19maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InNpZy0iLCBzdWZmaXg9Ii5iaW4iKQorICAgIG1ldGFkYXRhX3NpZ19maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InNpZy0iLCBzdWZmaXg9Ii5iaW4iKQorICAgIGNtZCA9IFsiYnJpbGxvX3VwZGF0ZV9wYXlsb2FkIiwgImhhc2giLAorICAgICAgICAgICAiLS11bnNpZ25lZF9wYXlsb2FkIiwgc2VsZi5wYXlsb2FkX2ZpbGUsCisgICAgICAgICAgICItLXNpZ25hdHVyZV9zaXplIiwgIjI1NiIsCisgICAgICAgICAgICItLW1ldGFkYXRhX2hhc2hfZmlsZSIsIG1ldGFkYXRhX3NpZ19maWxlLAorICAgICAgICAgICAiLS1wYXlsb2FkX2hhc2hfZmlsZSIsIHBheWxvYWRfc2lnX2ZpbGVdCisgICAgcDEgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXNlbGYuX2xvZ19maWxlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgcDEuY29tbXVuaWNhdGUoKQorICAgIGFzc2VydCBwMS5yZXR1cm5jb2RlID09IDAsICJicmlsbG9fdXBkYXRlX3BheWxvYWQgaGFzaCBmYWlsZWQiCisKKyAgICAjIDIuIFNpZ24gdGhlIGhhc2hlcy4KKyAgICBzaWduZWRfcGF5bG9hZF9zaWdfZmlsZSA9IHBheWxvYWRfc2lnbmVyLlNpZ24ocGF5bG9hZF9zaWdfZmlsZSkKKyAgICBzaWduZWRfbWV0YWRhdGFfc2lnX2ZpbGUgPSBwYXlsb2FkX3NpZ25lci5TaWduKG1ldGFkYXRhX3NpZ19maWxlKQorCisgICAgIyAzLiBJbnNlcnQgdGhlIHNpZ25hdHVyZXMgYmFjayBpbnRvIHRoZSBwYXlsb2FkIGZpbGUuCisgICAgc2lnbmVkX3BheWxvYWRfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUocHJlZml4PSJzaWduZWQtcGF5bG9hZC0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD0iLmJpbiIpCisgICAgY21kID0gWyJicmlsbG9fdXBkYXRlX3BheWxvYWQiLCAic2lnbiIsCisgICAgICAgICAgICItLXVuc2lnbmVkX3BheWxvYWQiLCBzZWxmLnBheWxvYWRfZmlsZSwKKyAgICAgICAgICAgIi0tcGF5bG9hZCIsIHNpZ25lZF9wYXlsb2FkX2ZpbGUsCisgICAgICAgICAgICItLXNpZ25hdHVyZV9zaXplIiwgIjI1NiIsCisgICAgICAgICAgICItLW1ldGFkYXRhX3NpZ25hdHVyZV9maWxlIiwgc2lnbmVkX21ldGFkYXRhX3NpZ19maWxlLAorICAgICAgICAgICAiLS1wYXlsb2FkX3NpZ25hdHVyZV9maWxlIiwgc2lnbmVkX3BheWxvYWRfc2lnX2ZpbGVdCisgICAgcDEgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXNlbGYuX2xvZ19maWxlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgcDEuY29tbXVuaWNhdGUoKQorICAgIGFzc2VydCBwMS5yZXR1cm5jb2RlID09IDAsICJicmlsbG9fdXBkYXRlX3BheWxvYWQgc2lnbiBmYWlsZWQiCisKKyAgICAjIDQuIER1bXAgdGhlIHNpZ25lZCBwYXlsb2FkIHByb3BlcnRpZXMuCisgICAgcHJvcGVydGllc19maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InBheWxvYWQtcHJvcGVydGllcy0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4PSIudHh0IikKKyAgICBjbWQgPSBbImJyaWxsb191cGRhdGVfcGF5bG9hZCIsICJwcm9wZXJ0aWVzIiwKKyAgICAgICAgICAgIi0tcGF5bG9hZCIsIHNpZ25lZF9wYXlsb2FkX2ZpbGUsCisgICAgICAgICAgICItLXByb3BlcnRpZXNfZmlsZSIsIHByb3BlcnRpZXNfZmlsZV0KKyAgICBwMSA9IGNvbW1vbi5SdW4oY21kLCBzdGRvdXQ9c2VsZi5fbG9nX2ZpbGUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICBwMS5jb21tdW5pY2F0ZSgpCisgICAgYXNzZXJ0IHAxLnJldHVybmNvZGUgPT0gMCwgImJyaWxsb191cGRhdGVfcGF5bG9hZCBwcm9wZXJ0aWVzIGZhaWxlZCIKKworICAgIGlmIHNlbGYuc2Vjb25kYXJ5OgorICAgICAgd2l0aCBvcGVuKHByb3BlcnRpZXNfZmlsZSwgImEiKSBhcyBmOgorICAgICAgICBmLndyaXRlKCJTV0lUQ0hfU0xPVF9PTl9SRUJPT1Q9MFxuIikKKworICAgIGlmIE9QVElPTlMud2lwZV91c2VyX2RhdGE6CisgICAgICB3aXRoIG9wZW4ocHJvcGVydGllc19maWxlLCAiYSIpIGFzIGY6CisgICAgICAgIGYud3JpdGUoIlBPV0VSV0FTSD0xXG4iKQorCisgICAgc2VsZi5wYXlsb2FkX2ZpbGUgPSBzaWduZWRfcGF5bG9hZF9maWxlCisgICAgc2VsZi5wYXlsb2FkX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzX2ZpbGUKKworICBkZWYgV3JpdGVUb1ppcChzZWxmLCBvdXRwdXRfemlwKToKKyAgICAiIiJXcml0ZXMgdGhlIHBheWxvYWQgdG8gdGhlIGdpdmVuIHppcC4KKworICAgIEFyZ3M6CisgICAgICBvdXRwdXRfemlwOiBUaGUgb3V0cHV0IFppcEZpbGUgaW5zdGFuY2UuCisgICAgIiIiCisgICAgYXNzZXJ0IHNlbGYucGF5bG9hZF9maWxlIGlzIG5vdCBOb25lCisgICAgYXNzZXJ0IHNlbGYucGF5bG9hZF9wcm9wZXJ0aWVzIGlzIG5vdCBOb25lCisKKyAgICBpZiBzZWxmLnNlY29uZGFyeToKKyAgICAgIHBheWxvYWRfYXJjbmFtZSA9IFBheWxvYWQuU0VDT05EQVJZX1BBWUxPQURfQklOCisgICAgICBwYXlsb2FkX3Byb3BlcnRpZXNfYXJjbmFtZSA9IFBheWxvYWQuU0VDT05EQVJZX1BBWUxPQURfUFJPUEVSVElFU19UWFQKKyAgICBlbHNlOgorICAgICAgcGF5bG9hZF9hcmNuYW1lID0gUGF5bG9hZC5QQVlMT0FEX0JJTgorICAgICAgcGF5bG9hZF9wcm9wZXJ0aWVzX2FyY25hbWUgPSBQYXlsb2FkLlBBWUxPQURfUFJPUEVSVElFU19UWFQKKworICAgICMgQWRkIHRoZSBzaWduZWQgcGF5bG9hZCBmaWxlIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIHppcC4gSW4gb3JkZXIgdG8KKyAgICAjIHN1cHBvcnQgc3RyZWFtaW5nLCB3ZSBwYWNrIHRoZW0gYXMgWklQX1NUT1JFRC4gU28gdGhlc2UgZW50cmllcyBjYW4gYmUKKyAgICAjIHJlYWQgZGlyZWN0bHkgd2l0aCB0aGUgb2Zmc2V0IGFuZCBsZW5ndGggcGFpcnMuCisgICAgY29tbW9uLlppcFdyaXRlKG91dHB1dF96aXAsIHNlbGYucGF5bG9hZF9maWxlLCBhcmNuYW1lPXBheWxvYWRfYXJjbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NfdHlwZT16aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgY29tbW9uLlppcFdyaXRlKG91dHB1dF96aXAsIHNlbGYucGF5bG9hZF9wcm9wZXJ0aWVzLAorICAgICAgICAgICAgICAgICAgICBhcmNuYW1lPXBheWxvYWRfcHJvcGVydGllc19hcmNuYW1lLAorICAgICAgICAgICAgICAgICAgICBjb21wcmVzc190eXBlPXppcGZpbGUuWklQX1NUT1JFRCkKKworCiBkZWYgU2lnbk91dHB1dCh0ZW1wX3ppcF9uYW1lLCBvdXRwdXRfemlwX25hbWUpOgogICBwdyA9IE9QVElPTlMua2V5X3Bhc3N3b3Jkc1tPUFRJT05TLnBhY2thZ2Vfa2V5XQogCkBAIC0xOTEsMzcgKzUzMiwxNSBAQAogICAgICAgICAgICAgICAgICAgd2hvbGVfZmlsZT1UcnVlKQogCiAKLWRlZiBBcHBlbmRBc3NlcnRpb25zKHNjcmlwdCwgaW5mb19kaWN0LCBvZW1fZGljdHM9Tm9uZSk6Ci0gIG9lbV9wcm9wcyA9IGluZm9fZGljdC5nZXQoIm9lbV9maW5nZXJwcmludF9wcm9wZXJ0aWVzIikKLSAgaWYgbm90IG9lbV9wcm9wczoKLSAgICBkZXZpY2UgPSBHZXRCdWlsZFByb3AoInJvLnByb2R1Y3QuZGV2aWNlIiwgaW5mb19kaWN0KQotICAgIHNjcmlwdC5Bc3NlcnREZXZpY2UoZGV2aWNlKQotICBlbHNlOgotICAgIGlmIG5vdCBvZW1fZGljdHM6Ci0gICAgICByYWlzZSBjb21tb24uRXh0ZXJuYWxFcnJvcigKLSAgICAgICAgICAiTm8gT0VNIGZpbGUgcHJvdmlkZWQgdG8gYW5zd2VyIGV4cGVjdGVkIGFzc2VydGlvbnMiKQotICAgIGZvciBwcm9wIGluIG9lbV9wcm9wcy5zcGxpdCgpOgotICAgICAgdmFsdWVzID0gW10KLSAgICAgIGZvciBvZW1fZGljdCBpbiBvZW1fZGljdHM6Ci0gICAgICAgIGlmIG9lbV9kaWN0LmdldChwcm9wKToKLSAgICAgICAgICB2YWx1ZXMuYXBwZW5kKG9lbV9kaWN0W3Byb3BdKQotICAgICAgaWYgbm90IHZhbHVlczoKLSAgICAgICAgcmFpc2UgY29tbW9uLkV4dGVybmFsRXJyb3IoCi0gICAgICAgICAgICAiVGhlIE9FTSBmaWxlIGlzIG1pc3NpbmcgdGhlIHByb3BlcnR5ICVzIiAlIHByb3ApCi0gICAgICBzY3JpcHQuQXNzZXJ0T2VtUHJvcGVydHkocHJvcCwgdmFsdWVzKQotCi0KLWRlZiBfTG9hZE9lbURpY3RzKHNjcmlwdCwgcmVjb3ZlcnlfbW91bnRfb3B0aW9ucz1Ob25lKToKK2RlZiBfTG9hZE9lbURpY3RzKG9lbV9zb3VyY2UpOgogICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGxvYWRlZCBPRU0gcHJvcGVydGllcyBkaWN0LiIiIgotICBvZW1fZGljdHMgPSBOb25lCi0gIGlmIE9QVElPTlMub2VtX3NvdXJjZSBpcyBOb25lOgotICAgIHJhaXNlIGNvbW1vbi5FeHRlcm5hbEVycm9yKCJPRU0gc291cmNlIHJlcXVpcmVkIGZvciB0aGlzIGJ1aWxkIikKLSAgaWYgbm90IE9QVElPTlMub2VtX25vX21vdW50IGFuZCBzY3JpcHQ6Ci0gICAgc2NyaXB0Lk1vdW50KCIvb2VtIiwgcmVjb3ZlcnlfbW91bnRfb3B0aW9ucykKKyAgaWYgbm90IG9lbV9zb3VyY2U6CisgICAgcmV0dXJuIE5vbmUKKwogICBvZW1fZGljdHMgPSBbXQotICBmb3Igb2VtX2ZpbGUgaW4gT1BUSU9OUy5vZW1fc291cmNlOgotICAgIG9lbV9kaWN0cy5hcHBlbmQoY29tbW9uLkxvYWREaWN0aW9uYXJ5RnJvbUxpbmVzKAotICAgICAgICBvcGVuKG9lbV9maWxlKS5yZWFkbGluZXMoKSkpCisgIGZvciBvZW1fZmlsZSBpbiBvZW1fc291cmNlOgorICAgIHdpdGggb3BlbihvZW1fZmlsZSkgYXMgZnA6CisgICAgICBvZW1fZGljdHMuYXBwZW5kKGNvbW1vbi5Mb2FkRGljdGlvbmFyeUZyb21MaW5lcyhmcC5yZWFkbGluZXMoKSkpCiAgIHJldHVybiBvZW1fZGljdHMKIAogCkBAIC0yNzIsNTUgKzU5MSwzNCBAQAogICAgIHJldHVybiBGYWxzZQogCiAKLWRlZiBIYXNUcmVibGVFbmFibGVkKHRhcmdldF9maWxlc196aXAsIGluZm9fZGljdCk6CitkZWYgSGFzVHJlYmxlRW5hYmxlZCh0YXJnZXRfZmlsZXNfemlwLCB0YXJnZXRfaW5mbyk6CiAgIHJldHVybiAoSGFzVmVuZG9yUGFydGl0aW9uKHRhcmdldF9maWxlc196aXApIGFuZAotICAgICAgICAgIEdldEJ1aWxkUHJvcCgicm8udHJlYmxlLmVuYWJsZWQiLCBpbmZvX2RpY3QpID09ICJ0cnVlIikKKyAgICAgICAgICB0YXJnZXRfaW5mby5HZXRCdWlsZFByb3AoInJvLnRyZWJsZS5lbmFibGVkIikgPT0gInRydWUiKQogCiAKLWRlZiBHZXRPZW1Qcm9wZXJ0eShuYW1lLCBvZW1fcHJvcHMsIG9lbV9kaWN0LCBpbmZvX2RpY3QpOgotICBpZiBvZW1fcHJvcHMgaXMgbm90IE5vbmUgYW5kIG5hbWUgaW4gb2VtX3Byb3BzOgotICAgIHJldHVybiBvZW1fZGljdFtuYW1lXQotICByZXR1cm4gR2V0QnVpbGRQcm9wKG5hbWUsIGluZm9fZGljdCkKK2RlZiBXcml0ZUZpbmdlcnByaW50QXNzZXJ0aW9uKHNjcmlwdCwgdGFyZ2V0X2luZm8sIHNvdXJjZV9pbmZvKToKKyAgc291cmNlX29lbV9wcm9wcyA9IHNvdXJjZV9pbmZvLm9lbV9wcm9wcworICB0YXJnZXRfb2VtX3Byb3BzID0gdGFyZ2V0X2luZm8ub2VtX3Byb3BzCisKKyAgaWYgc291cmNlX29lbV9wcm9wcyBpcyBOb25lIGFuZCB0YXJnZXRfb2VtX3Byb3BzIGlzIE5vbmU6CisgICAgc2NyaXB0LkFzc2VydFNvbWVGaW5nZXJwcmludCgKKyAgICAgICAgc291cmNlX2luZm8uZmluZ2VycHJpbnQsIHRhcmdldF9pbmZvLmZpbmdlcnByaW50KQorICBlbGlmIHNvdXJjZV9vZW1fcHJvcHMgaXMgbm90IE5vbmUgYW5kIHRhcmdldF9vZW1fcHJvcHMgaXMgbm90IE5vbmU6CisgICAgc2NyaXB0LkFzc2VydFNvbWVUaHVtYnByaW50KAorICAgICAgICB0YXJnZXRfaW5mby5HZXRCdWlsZFByb3AoInJvLmJ1aWxkLnRodW1icHJpbnQiKSwKKyAgICAgICAgc291cmNlX2luZm8uR2V0QnVpbGRQcm9wKCJyby5idWlsZC50aHVtYnByaW50IikpCisgIGVsaWYgc291cmNlX29lbV9wcm9wcyBpcyBOb25lIGFuZCB0YXJnZXRfb2VtX3Byb3BzIGlzIG5vdCBOb25lOgorICAgIHNjcmlwdC5Bc3NlcnRGaW5nZXJwcmludE9yVGh1bWJwcmludCgKKyAgICAgICAgc291cmNlX2luZm8uZmluZ2VycHJpbnQsCisgICAgICAgIHRhcmdldF9pbmZvLkdldEJ1aWxkUHJvcCgicm8uYnVpbGQudGh1bWJwcmludCIpKQorICBlbHNlOgorICAgIHNjcmlwdC5Bc3NlcnRGaW5nZXJwcmludE9yVGh1bWJwcmludCgKKyAgICAgICAgdGFyZ2V0X2luZm8uZmluZ2VycHJpbnQsCisgICAgICAgIHNvdXJjZV9pbmZvLkdldEJ1aWxkUHJvcCgicm8uYnVpbGQudGh1bWJwcmludCIpKQogCiAKLWRlZiBDYWxjdWxhdGVGaW5nZXJwcmludChvZW1fcHJvcHMsIG9lbV9kaWN0LCBpbmZvX2RpY3QpOgotICBpZiBvZW1fcHJvcHMgaXMgTm9uZToKLSAgICByZXR1cm4gR2V0QnVpbGRQcm9wKCJyby5idWlsZC5maW5nZXJwcmludCIsIGluZm9fZGljdCkKLSAgcmV0dXJuICIlcy8lcy8lczolcyIgJSAoCi0gICAgICBHZXRPZW1Qcm9wZXJ0eSgicm8ucHJvZHVjdC5icmFuZCIsIG9lbV9wcm9wcywgb2VtX2RpY3QsIGluZm9fZGljdCksCi0gICAgICBHZXRPZW1Qcm9wZXJ0eSgicm8ucHJvZHVjdC5uYW1lIiwgb2VtX3Byb3BzLCBvZW1fZGljdCwgaW5mb19kaWN0KSwKLSAgICAgIEdldE9lbVByb3BlcnR5KCJyby5wcm9kdWN0LmRldmljZSIsIG9lbV9wcm9wcywgb2VtX2RpY3QsIGluZm9fZGljdCksCi0gICAgICBHZXRCdWlsZFByb3AoInJvLmJ1aWxkLnRodW1icHJpbnQiLCBpbmZvX2RpY3QpKQotCi0KLWRlZiBHZXRJbWFnZSh3aGljaCwgdG1wZGlyKToKLSAgIiIiUmV0dXJucyBhbiBpbWFnZSBvYmplY3Qgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gQmxvY2tJbWFnZURpZmYuCi0KLSAgJ3doaWNoJyBwYXJ0aXRpb24gbXVzdCBiZSAic3lzdGVtIiBvciAidmVuZG9yIi4gQSBwcmVidWlsdCBpbWFnZSBhbmQgZmlsZQotICBtYXAgbXVzdCBhbHJlYWR5IGV4aXN0IGluIHRtcGRpci4KLSAgIiIiCi0KLSAgYXNzZXJ0IHdoaWNoIGluICgic3lzdGVtIiwgInZlbmRvciIpCi0KLSAgcGF0aCA9IG9zLnBhdGguam9pbih0bXBkaXIsICJJTUFHRVMiLCB3aGljaCArICIuaW1nIikKLSAgbWFwcGF0aCA9IG9zLnBhdGguam9pbih0bXBkaXIsICJJTUFHRVMiLCB3aGljaCArICIubWFwIikKLQotICAjIFRoZSBpbWFnZSBhbmQgbWFwIGZpbGVzIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgcHJpb3IgdG8gY2FsbGluZwotICAjIG90YV9mcm9tX3RhcmdldF9maWxlcy5weSAoc2luY2UgTE1QKS4KLSAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKHBhdGgpIGFuZCBvcy5wYXRoLmV4aXN0cyhtYXBwYXRoKQotCi0gICMgQnVnOiBodHRwOi8vYi8yMDkzOTEzMQotICAjIEluIGV4dDQgZmlsZXN5c3RlbXMsIGJsb2NrIDAgbWlnaHQgYmUgY2hhbmdlZCBldmVuIGJlaW5nIG1vdW50ZWQKLSAgIyBSL08uIFdlIGFkZCBpdCB0byBjbG9iYmVyZWRfYmxvY2tzIHNvIHRoYXQgaXQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZQotICAjIHRhcmdldCB1bmNvbmRpdGlvbmFsbHkuIE5vdGUgdGhhdCB0aGV5IGFyZSBzdGlsbCBwYXJ0IG9mIGNhcmVfbWFwLgotICBjbG9iYmVyZWRfYmxvY2tzID0gIjAiCi0KLSAgcmV0dXJuIHNwYXJzZV9pbWcuU3BhcnNlSW1hZ2UocGF0aCwgbWFwcGF0aCwgY2xvYmJlcmVkX2Jsb2NrcykKLQotCi1kZWYgQWRkQ29tcGF0aWJpbGl0eUFyY2hpdmVJZlRyZWJsZUVuYWJsZWQodGFyZ2V0X3ppcCwgb3V0cHV0X3ppcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaW5mb19kaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9pbmZvX2RpY3Q9Tm9uZSk6CitkZWYgQWRkQ29tcGF0aWJpbGl0eUFyY2hpdmVJZlRyZWJsZUVuYWJsZWQodGFyZ2V0X3ppcCwgb3V0cHV0X3ppcCwgdGFyZ2V0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2luZm89Tm9uZSk6CiAgICIiIkFkZHMgY29tcGF0aWJpbGl0eSBpbmZvIGludG8gdGhlIG91dHB1dCB6aXAgaWYgaXQncyBUcmVibGUtZW5hYmxlZCB0YXJnZXQuCiAKICAgTWV0YWRhdGEgdXNlZCBmb3Igb24tZGV2aWNlIGNvbXBhdGliaWxpdHkgdmVyaWZpY2F0aW9uIGlzIHJldHJpZXZlZCBmcm9tCkBAIC0zMzMsOSArNjMxLDkgQEAKICAgQXJnczoKICAgICB0YXJnZXRfemlwOiBaaXAgZmlsZSBjb250YWluaW5nIHRoZSBzb3VyY2UgZmlsZXMgdG8gYmUgaW5jbHVkZWQgZm9yIE9UQS4KICAgICBvdXRwdXRfemlwOiBaaXAgZmlsZSB0aGF0IHdpbGwgYmUgc2VudCBmb3IgT1RBLgotICAgIHRhcmdldF9pbmZvX2RpY3Q6IFRoZSBkaWN0IHRoYXQgaG9sZHMgdGhlIHRhcmdldCBidWlsZCBpbmZvLgotICAgIHNvdXJjZV9pbmZvX2RpY3Q6IFRoZSBkaWN0IHRoYXQgaG9sZHMgdGhlIHNvdXJjZSBidWlsZCBpbmZvLCBpZiBnZW5lcmF0aW5nCi0gICAgICAgIGFuIGluY3JlbWVudGFsIE9UQTsgTm9uZSBvdGhlcndpc2UuCisgICAgdGFyZ2V0X2luZm86IFRoZSBCdWlsZEluZm8gaW5zdGFuY2UgdGhhdCBob2xkcyB0aGUgdGFyZ2V0IGJ1aWxkIGluZm8uCisgICAgc291cmNlX2luZm86IFRoZSBCdWlsZEluZm8gaW5zdGFuY2UgdGhhdCBob2xkcyB0aGUgc291cmNlIGJ1aWxkIGluZm8sIGlmCisgICAgICAgIGdlbmVyYXRpbmcgYW4gaW5jcmVtZW50YWwgT1RBOyBOb25lIG90aGVyd2lzZS4KICAgIiIiCiAKICAgZGVmIEFkZENvbXBhdGliaWxpdHlBcmNoaXZlKHN5c3RlbV91cGRhdGVkLCB2ZW5kb3JfdXBkYXRlZCk6CkBAIC0zNTgsOCArNjU2LDggQEAKIAogICAgICMgQ3JlYXRlIG5ldyBhcmNoaXZlLgogICAgIGNvbXBhdGliaWxpdHlfYXJjaGl2ZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCi0gICAgY29tcGF0aWJpbGl0eV9hcmNoaXZlX3ppcCA9IHppcGZpbGUuWmlwRmlsZShjb21wYXRpYmlsaXR5X2FyY2hpdmUsICJ3IiwKLSAgICAgICAgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgY29tcGF0aWJpbGl0eV9hcmNoaXZlX3ppcCA9IHppcGZpbGUuWmlwRmlsZSgKKyAgICAgICAgY29tcGF0aWJpbGl0eV9hcmNoaXZlLCAidyIsIGNvbXByZXNzaW9uPXppcGZpbGUuWklQX0RFRkxBVEVEKQogCiAgICAgIyBBZGQgbWV0YWRhdGEuCiAgICAgZm9yIGZpbGVfbmFtZSBpbiBjb21wYXRpYmlsaXR5X2ZpbGVzOgpAQCAtMzgwLDU5ICs2NzgsNTggQEAKIAogICAjIFdpbGwgb25seSBwcm9jZWVkIGlmIHRoZSB0YXJnZXQgaGFzIGVuYWJsZWQgdGhlIFRyZWJsZSBzdXBwb3J0IChhcyB3ZWxsIGFzCiAgICMgaGF2aW5nIGEgL3ZlbmRvciBwYXJ0aXRpb24pLgotICBpZiBub3QgSGFzVHJlYmxlRW5hYmxlZCh0YXJnZXRfemlwLCB0YXJnZXRfaW5mb19kaWN0KToKKyAgaWYgbm90IEhhc1RyZWJsZUVuYWJsZWQodGFyZ2V0X3ppcCwgdGFyZ2V0X2luZm8pOgogICAgIHJldHVybgogCiAgICMgV2UgZG9uJ3Qgc3VwcG9ydCBPRU0gdGh1bWJwcmludCBpbiBUcmVibGUgd29ybGQgKHdoaWNoIGNhbGN1bGF0ZXMKICAgIyBmaW5nZXJwcmludHMgaW4gYSBkaWZmZXJlbnQgd2F5IGFzIHNob3duIGluIENhbGN1bGF0ZUZpbmdlcnByaW50KCkpLgotICBhc3NlcnQgbm90IHRhcmdldF9pbmZvX2RpY3QuZ2V0KCJvZW1fZmluZ2VycHJpbnRfcHJvcGVydGllcyIpCisgIGFzc2VydCBub3QgdGFyZ2V0X2luZm8ub2VtX3Byb3BzCiAKICAgIyBGdWxsIE9UQSBjYXJyaWVzIHRoZSBpbmZvIGZvciBzeXN0ZW0vdmVuZG9yIGJvdGguCi0gIGlmIHNvdXJjZV9pbmZvX2RpY3QgaXMgTm9uZToKKyAgaWYgc291cmNlX2luZm8gaXMgTm9uZToKICAgICBBZGRDb21wYXRpYmlsaXR5QXJjaGl2ZShUcnVlLCBUcnVlKQogICAgIHJldHVybgogCi0gIGFzc2VydCBub3Qgc291cmNlX2luZm9fZGljdC5nZXQoIm9lbV9maW5nZXJwcmludF9wcm9wZXJ0aWVzIikKKyAgYXNzZXJ0IG5vdCBzb3VyY2VfaW5mby5vZW1fcHJvcHMKIAotICBzb3VyY2VfZnAgPSBHZXRCdWlsZFByb3AoInJvLmJ1aWxkLmZpbmdlcnByaW50Iiwgc291cmNlX2luZm9fZGljdCkKLSAgdGFyZ2V0X2ZwID0gR2V0QnVpbGRQcm9wKCJyby5idWlsZC5maW5nZXJwcmludCIsIHRhcmdldF9pbmZvX2RpY3QpCisgIHNvdXJjZV9mcCA9IHNvdXJjZV9pbmZvLmZpbmdlcnByaW50CisgIHRhcmdldF9mcCA9IHRhcmdldF9pbmZvLmZpbmdlcnByaW50CiAgIHN5c3RlbV91cGRhdGVkID0gc291cmNlX2ZwICE9IHRhcmdldF9mcAogCi0gIHNvdXJjZV9mcF92ZW5kb3IgPSBHZXRWZW5kb3JCdWlsZFByb3AoInJvLnZlbmRvci5idWlsZC5maW5nZXJwcmludCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2luZm9fZGljdCkKLSAgdGFyZ2V0X2ZwX3ZlbmRvciA9IEdldFZlbmRvckJ1aWxkUHJvcCgicm8udmVuZG9yLmJ1aWxkLmZpbmdlcnByaW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaW5mb19kaWN0KQorICBzb3VyY2VfZnBfdmVuZG9yID0gc291cmNlX2luZm8uR2V0VmVuZG9yQnVpbGRQcm9wKAorICAgICAgInJvLnZlbmRvci5idWlsZC5maW5nZXJwcmludCIpCisgIHRhcmdldF9mcF92ZW5kb3IgPSB0YXJnZXRfaW5mby5HZXRWZW5kb3JCdWlsZFByb3AoCisgICAgICAicm8udmVuZG9yLmJ1aWxkLmZpbmdlcnByaW50IikKICAgdmVuZG9yX3VwZGF0ZWQgPSBzb3VyY2VfZnBfdmVuZG9yICE9IHRhcmdldF9mcF92ZW5kb3IKIAogICBBZGRDb21wYXRpYmlsaXR5QXJjaGl2ZShzeXN0ZW1fdXBkYXRlZCwgdmVuZG9yX3VwZGF0ZWQpCiAKIAotZGVmIFdyaXRlRnVsbE9UQVBhY2thZ2UoaW5wdXRfemlwLCBvdXRwdXRfemlwKToKLSAgIyBUT0RPOiBob3cgdG8gZGV0ZXJtaW5lIHRoaXM/ICBXZSBkb24ndCBrbm93IHdoYXQgdmVyc2lvbiBpdCB3aWxsCi0gICMgYmUgaW5zdGFsbGVkIG9uIHRvcCBvZi4gRm9yIG5vdywgd2UgZXhwZWN0IHRoZSBBUEkganVzdCB3b24ndAotICAjIGNoYW5nZSB2ZXJ5IG9mdGVuLiBTaW1pbGFybHkgZm9yIGZzdGFiLCBpdCBtaWdodCBoYXZlIGNoYW5nZWQKLSAgIyBpbiB0aGUgdGFyZ2V0IGJ1aWxkLgotICBzY3JpcHQgPSBlZGlmeV9nZW5lcmF0b3IuRWRpZnlHZW5lcmF0b3IoMywgT1BUSU9OUy5pbmZvX2RpY3QpCitkZWYgV3JpdGVGdWxsT1RBUGFja2FnZShpbnB1dF96aXAsIG91dHB1dF9maWxlKToKKyAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oT1BUSU9OUy5pbmZvX2RpY3QsIE9QVElPTlMub2VtX2RpY3RzKQogCi0gIHJlY292ZXJ5X21vdW50X29wdGlvbnMgPSBPUFRJT05TLmluZm9fZGljdC5nZXQoInJlY292ZXJ5X21vdW50X29wdGlvbnMiKQotICBvZW1fcHJvcHMgPSBPUFRJT05TLmluZm9fZGljdC5nZXQoIm9lbV9maW5nZXJwcmludF9wcm9wZXJ0aWVzIikKLSAgb2VtX2RpY3RzID0gTm9uZQotICBpZiBvZW1fcHJvcHM6Ci0gICAgb2VtX2RpY3RzID0gX0xvYWRPZW1EaWN0cyhzY3JpcHQsIHJlY292ZXJ5X21vdW50X29wdGlvbnMpCisgICMgV2UgZG9uJ3Qga25vdyB3aGF0IHZlcnNpb24gaXQgd2lsbCBiZSBpbnN0YWxsZWQgb24gdG9wIG9mLiBXZSBleHBlY3QgdGhlIEFQSQorICAjIGp1c3Qgd29uJ3QgY2hhbmdlIHZlcnkgb2Z0ZW4uIFNpbWlsYXJseSBmb3IgZnN0YWIsIGl0IG1pZ2h0IGhhdmUgY2hhbmdlZCBpbgorICAjIHRoZSB0YXJnZXQgYnVpbGQuCisgIHRhcmdldF9hcGlfdmVyc2lvbiA9IHRhcmdldF9pbmZvWyJyZWNvdmVyeV9hcGlfdmVyc2lvbiJdCisgIHNjcmlwdCA9IGVkaWZ5X2dlbmVyYXRvci5FZGlmeUdlbmVyYXRvcih0YXJnZXRfYXBpX3ZlcnNpb24sIHRhcmdldF9pbmZvKQogCi0gIHRhcmdldF9mcCA9IENhbGN1bGF0ZUZpbmdlcnByaW50KG9lbV9wcm9wcywgb2VtX2RpY3RzIGFuZCBvZW1fZGljdHNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVElPTlMuaW5mb19kaWN0KQotICBtZXRhZGF0YSA9IHsKLSAgICAgICJwb3N0LWJ1aWxkIjogdGFyZ2V0X2ZwLAotICAgICAgInByZS1kZXZpY2UiOiBHZXRPZW1Qcm9wZXJ0eSgicm8ucHJvZHVjdC5kZXZpY2UiLCBvZW1fcHJvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lbV9kaWN0cyBhbmQgb2VtX2RpY3RzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05TLmluZm9fZGljdCksCi0gICAgICAicG9zdC10aW1lc3RhbXAiOiBHZXRCdWlsZFByb3AoInJvLmJ1aWxkLmRhdGUudXRjIiwgT1BUSU9OUy5pbmZvX2RpY3QpLAotICB9CisgIGlmIHRhcmdldF9pbmZvLm9lbV9wcm9wcyBhbmQgbm90IE9QVElPTlMub2VtX25vX21vdW50OgorICAgIHRhcmdldF9pbmZvLldyaXRlTW91bnRPZW1TY3JpcHQoc2NyaXB0KQorCisgIG1ldGFkYXRhID0gR2V0UGFja2FnZU1ldGFkYXRhKHRhcmdldF9pbmZvKQorCisgIGlmIG5vdCBPUFRJT05TLm5vX3NpZ25pbmc6CisgICAgc3RhZ2luZ19maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy56aXAnKQorICBlbHNlOgorICAgIHN0YWdpbmdfZmlsZSA9IG91dHB1dF9maWxlCisKKyAgb3V0cHV0X3ppcCA9IHppcGZpbGUuWmlwRmlsZSgKKyAgICAgIHN0YWdpbmdfZmlsZSwgInciLCBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAogICBkZXZpY2Vfc3BlY2lmaWMgPSBjb21tb24uRGV2aWNlU3BlY2lmaWNQYXJhbXMoCiAgICAgICBpbnB1dF96aXA9aW5wdXRfemlwLAotICAgICAgaW5wdXRfdmVyc2lvbj1PUFRJT05TLmluZm9fZGljdFsicmVjb3ZlcnlfYXBpX3ZlcnNpb24iXSwKKyAgICAgIGlucHV0X3ZlcnNpb249dGFyZ2V0X2FwaV92ZXJzaW9uLAogICAgICAgb3V0cHV0X3ppcD1vdXRwdXRfemlwLAogICAgICAgc2NyaXB0PXNjcmlwdCwKICAgICAgIGlucHV0X3RtcD1PUFRJT05TLmlucHV0X3RtcCwKQEAgLTQ0MSwxMyArNzM4LDEyIEBACiAKICAgYXNzZXJ0IEhhc1JlY292ZXJ5UGF0Y2goaW5wdXRfemlwKQogCi0gIG1ldGFkYXRhWyJvdGEtdHlwZSJdID0gIkJMT0NLIgotCi0gIHRzID0gR2V0QnVpbGRQcm9wKCJyby5idWlsZC5kYXRlLnV0YyIsIE9QVElPTlMuaW5mb19kaWN0KQotICB0c190ZXh0ID0gR2V0QnVpbGRQcm9wKCJyby5idWlsZC5kYXRlIiwgT1BUSU9OUy5pbmZvX2RpY3QpCisgICMgQXNzZXJ0aW9ucyAoZS5nLiBkb3duZ3JhZGUgY2hlY2ssIGRldmljZSBwcm9wZXJ0aWVzIGNoZWNrKS4KKyAgdHMgPSB0YXJnZXRfaW5mby5HZXRCdWlsZFByb3AoInJvLmJ1aWxkLmRhdGUudXRjIikKKyAgdHNfdGV4dCA9IHRhcmdldF9pbmZvLkdldEJ1aWxkUHJvcCgicm8uYnVpbGQuZGF0ZSIpCiAgIHNjcmlwdC5Bc3NlcnRPbGRlckJ1aWxkKHRzLCB0c190ZXh0KQogCi0gIEFwcGVuZEFzc2VydGlvbnMoc2NyaXB0LCBPUFRJT05TLmluZm9fZGljdCwgb2VtX2RpY3RzKQorICB0YXJnZXRfaW5mby5Xcml0ZURldmljZUFzc2VydGlvbnMoc2NyaXB0LCBPUFRJT05TLm9lbV9ub19tb3VudCkKICAgZGV2aWNlX3NwZWNpZmljLkZ1bGxPVEFfQXNzZXJ0aW9ucygpCiAKICAgIyBUd28tc3RlcCBwYWNrYWdlIHN0cmF0ZWd5IChpbiBjaHJvbm9sb2dpY2FsIG9yZGVyLCB3aGljaCBpcyAqbm90KgpAQCAtNDczLDkgKzc2OSw5IEBACiAgIHJlY292ZXJ5X2ltZyA9IGNvbW1vbi5HZXRCb290YWJsZUltYWdlKCJyZWNvdmVyeS5pbWciLCAicmVjb3ZlcnkuaW1nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OUy5pbnB1dF90bXAsICJSRUNPVkVSWSIpCiAgIGlmIE9QVElPTlMudHdvX3N0ZXA6Ci0gICAgaWYgbm90IE9QVElPTlMuaW5mb19kaWN0LmdldCgibXVsdGlzdGFnZV9zdXBwb3J0IiwgTm9uZSk6CisgICAgaWYgbm90IHRhcmdldF9pbmZvLmdldCgibXVsdGlzdGFnZV9zdXBwb3J0Iik6CiAgICAgICBhc3NlcnQgRmFsc2UsICJ0d28tc3RlcCBwYWNrYWdlcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQiCi0gICAgZnMgPSBPUFRJT05TLmluZm9fZGljdFsiZnN0YWIiXVsiL21pc2MiXQorICAgIGZzID0gdGFyZ2V0X2luZm9bImZzdGFiIl1bIi9taXNjIl0KICAgICBhc3NlcnQgZnMuZnNfdHlwZS51cHBlcigpID09ICJFTU1DIiwgXAogICAgICAgICAidHdvLXN0ZXAgcGFja2FnZXMgb25seSBzdXBwb3J0ZWQgb24gZGV2aWNlcyB3aXRoIEVNTUMgL21pc2MgcGFydGl0aW9ucyIKICAgICBiY2JfZGV2ID0geyJiY2JfZGV2IjogZnMuZGV2aWNlfQpAQCAtNDk3LDcgKzc5Myw3IEBACiAgICAgc2NyaXB0LkNvbW1lbnQoIlN0YWdlIDMvMyIpCiAKICAgIyBEdW1wIGZpbmdlcnByaW50cwotICBzY3JpcHQuUHJpbnQoIlRhcmdldDogJXMiICUgdGFyZ2V0X2ZwKQorICBzY3JpcHQuUHJpbnQoIlRhcmdldDoge30iLmZvcm1hdCh0YXJnZXRfaW5mby5maW5nZXJwcmludCkpCiAKICAgZGV2aWNlX3NwZWNpZmljLkZ1bGxPVEFfSW5zdGFsbEJlZ2luKCkKIApAQCAtNTA4LDE1ICs4MDQsMTcgQEAKICAgaWYgSGFzVmVuZG9yUGFydGl0aW9uKGlucHV0X3ppcCk6CiAgICAgc3lzdGVtX3Byb2dyZXNzIC09IDAuMQogCi0gIHJlY292ZXJ5X21vdW50X29wdGlvbnMgPSBPUFRJT05TLmluZm9fZGljdC5nZXQoInJlY292ZXJ5X21vdW50X29wdGlvbnMiKQotCiAgIHNjcmlwdC5TaG93UHJvZ3Jlc3Moc3lzdGVtX3Byb2dyZXNzLCAwKQogCisgICMgU2VlIHRoZSBub3RlcyBpbiBXcml0ZUJsb2NrSW5jcmVtZW50YWxPVEFQYWNrYWdlKCkuCisgIGFsbG93X3NoYXJlZF9ibG9ja3MgPSB0YXJnZXRfaW5mby5nZXQoJ2V4dDRfc2hhcmVfZHVwX2Jsb2NrcycpID09ICJ0cnVlIgorCiAgICMgRnVsbCBPVEEgaXMgZG9uZSBhcyBhbiAiaW5jcmVtZW50YWwiIGFnYWluc3QgYW4gZW1wdHkgc291cmNlIGltYWdlLiBUaGlzCiAgICMgaGFzIHRoZSBlZmZlY3Qgb2Ygd3JpdGluZyBuZXcgZGF0YSBmcm9tIHRoZSBwYWNrYWdlIHRvIHRoZSBlbnRpcmUKICAgIyBwYXJ0aXRpb24sIGJ1dCBsZXRzIHVzIHJldXNlIHRoZSB1cGRhdGVyIGNvZGUgdGhhdCB3cml0ZXMgaW5jcmVtZW50YWxzIHRvCiAgICMgZG8gaXQuCi0gIHN5c3RlbV90Z3QgPSBHZXRJbWFnZSgic3lzdGVtIiwgT1BUSU9OUy5pbnB1dF90bXApCisgIHN5c3RlbV90Z3QgPSBjb21tb24uR2V0U3BhcnNlSW1hZ2UoInN5c3RlbSIsIE9QVElPTlMuaW5wdXRfdG1wLCBpbnB1dF96aXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfc2hhcmVkX2Jsb2NrcykKICAgc3lzdGVtX3RndC5SZXNldEZpbGVNYXAoKQogICBzeXN0ZW1fZGlmZiA9IGNvbW1vbi5CbG9ja0RpZmZlcmVuY2UoInN5c3RlbSIsIHN5c3RlbV90Z3QsIHNyYz1Ob25lKQogICBzeXN0ZW1fZGlmZi5Xcml0ZVNjcmlwdChzY3JpcHQsIG91dHB1dF96aXApCkBAIC01MjcsMTUgKzgyNSwxNSBAQAogICBpZiBIYXNWZW5kb3JQYXJ0aXRpb24oaW5wdXRfemlwKToKICAgICBzY3JpcHQuU2hvd1Byb2dyZXNzKDAuMSwgMCkKIAotICAgIHZlbmRvcl90Z3QgPSBHZXRJbWFnZSgidmVuZG9yIiwgT1BUSU9OUy5pbnB1dF90bXApCisgICAgdmVuZG9yX3RndCA9IGNvbW1vbi5HZXRTcGFyc2VJbWFnZSgidmVuZG9yIiwgT1BUSU9OUy5pbnB1dF90bXAsIGlucHV0X3ppcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3NoYXJlZF9ibG9ja3MpCiAgICAgdmVuZG9yX3RndC5SZXNldEZpbGVNYXAoKQogICAgIHZlbmRvcl9kaWZmID0gY29tbW9uLkJsb2NrRGlmZmVyZW5jZSgidmVuZG9yIiwgdmVuZG9yX3RndCkKICAgICB2ZW5kb3JfZGlmZi5Xcml0ZVNjcmlwdChzY3JpcHQsIG91dHB1dF96aXApCiAKLSAgQWRkQ29tcGF0aWJpbGl0eUFyY2hpdmVJZlRyZWJsZUVuYWJsZWQoaW5wdXRfemlwLCBvdXRwdXRfemlwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05TLmluZm9fZGljdCkKKyAgQWRkQ29tcGF0aWJpbGl0eUFyY2hpdmVJZlRyZWJsZUVuYWJsZWQoaW5wdXRfemlwLCBvdXRwdXRfemlwLCB0YXJnZXRfaW5mbykKIAotICBjb21tb24uQ2hlY2tTaXplKGJvb3RfaW1nLmRhdGEsICJib290LmltZyIsIE9QVElPTlMuaW5mb19kaWN0KQorICBjb21tb24uQ2hlY2tTaXplKGJvb3RfaW1nLmRhdGEsICJib290LmltZyIsIHRhcmdldF9pbmZvKQogICBjb21tb24uWmlwV3JpdGVTdHIob3V0cHV0X3ppcCwgImJvb3QuaW1nIiwgYm9vdF9pbWcuZGF0YSkKIAogICBzY3JpcHQuU2hvd1Byb2dyZXNzKDAuMDUsIDUpCkBAIC01NzMsNyArODcxLDE1IEBACiAgIHNjcmlwdC5TZXRQcm9ncmVzcygxKQogICBzY3JpcHQuQWRkVG9aaXAoaW5wdXRfemlwLCBvdXRwdXRfemlwLCBpbnB1dF9wYXRoPU9QVElPTlMudXBkYXRlcl9iaW5hcnkpCiAgIG1ldGFkYXRhWyJvdGEtcmVxdWlyZWQtY2FjaGUiXSA9IHN0cihzY3JpcHQucmVxdWlyZWRfY2FjaGUpCi0gIFdyaXRlTWV0YWRhdGEobWV0YWRhdGEsIG91dHB1dF96aXApCisKKyAgIyBXZSBoYXZlbid0IHdyaXR0ZW4gdGhlIG1ldGFkYXRhIGVudHJ5LCB3aGljaCB3aWxsIGJlIGRvbmUgaW4KKyAgIyBGaW5hbGl6ZU1ldGFkYXRhLgorICBjb21tb24uWmlwQ2xvc2Uob3V0cHV0X3ppcCkKKworICBuZWVkZWRfcHJvcGVydHlfZmlsZXMgPSAoCisgICAgICBOb25BYk90YVByb3BlcnR5RmlsZXMoKSwKKyAgKQorICBGaW5hbGl6ZU1ldGFkYXRhKG1ldGFkYXRhLCBzdGFnaW5nX2ZpbGUsIG91dHB1dF9maWxlLCBuZWVkZWRfcHJvcGVydHlfZmlsZXMpCiAKIAogZGVmIFdyaXRlTWV0YWRhdGEobWV0YWRhdGEsIG91dHB1dF96aXApOgpAQCAtNTgyLDI5ICs4ODgsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzX3R5cGU9emlwZmlsZS5aSVBfU1RPUkVEKQogCiAKLWRlZiBHZXRCdWlsZFByb3AocHJvcCwgaW5mb19kaWN0KToKLSAgIiIiUmV0dXJucyB0aGUgaW5xdWlyZWQgYnVpbGQgcHJvcGVydHkgZnJvbSBhIGdpdmVuIGluZm9fZGljdC4iIiIKLSAgdHJ5OgotICAgIHJldHVybiBpbmZvX2RpY3QuZ2V0KCJidWlsZC5wcm9wIiwge30pW3Byb3BdCi0gIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICByYWlzZSBjb21tb24uRXh0ZXJuYWxFcnJvcigiY291bGRuJ3QgZmluZCAlcyBpbiBidWlsZC5wcm9wIiAlIChwcm9wLCkpCi0KLQotZGVmIEdldFZlbmRvckJ1aWxkUHJvcChwcm9wLCBpbmZvX2RpY3QpOgotICAiIiJSZXR1cm5zIHRoZSBpbnF1aXJlZCB2ZW5kb3IgYnVpbGQgcHJvcGVydHkgZnJvbSBhIGdpdmVuIGluZm9fZGljdC4iIiIKLSAgdHJ5OgotICAgIHJldHVybiBpbmZvX2RpY3QuZ2V0KCJ2ZW5kb3IuYnVpbGQucHJvcCIsIHt9KVtwcm9wXQotICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgcmFpc2UgY29tbW9uLkV4dGVybmFsRXJyb3IoCi0gICAgICAgICJjb3VsZG4ndCBmaW5kICVzIGluIHZlbmRvci5idWlsZC5wcm9wIiAlIChwcm9wLCkpCi0KLQotZGVmIEhhbmRsZURvd25ncmFkZU1ldGFkYXRhKG1ldGFkYXRhKToKK2RlZiBIYW5kbGVEb3duZ3JhZGVNZXRhZGF0YShtZXRhZGF0YSwgdGFyZ2V0X2luZm8sIHNvdXJjZV9pbmZvKToKICAgIyBPbmx5IGluY3JlbWVudGFsIE9UQXMgYXJlIGFsbG93ZWQgdG8gcmVhY2ggaGVyZS4KICAgYXNzZXJ0IE9QVElPTlMuaW5jcmVtZW50YWxfc291cmNlIGlzIG5vdCBOb25lCiAKLSAgcG9zdF90aW1lc3RhbXAgPSBHZXRCdWlsZFByb3AoInJvLmJ1aWxkLmRhdGUudXRjIiwgT1BUSU9OUy50YXJnZXRfaW5mb19kaWN0KQotICBwcmVfdGltZXN0YW1wID0gR2V0QnVpbGRQcm9wKCJyby5idWlsZC5kYXRlLnV0YyIsIE9QVElPTlMuc291cmNlX2luZm9fZGljdCkKKyAgcG9zdF90aW1lc3RhbXAgPSB0YXJnZXRfaW5mby5HZXRCdWlsZFByb3AoInJvLmJ1aWxkLmRhdGUudXRjIikKKyAgcHJlX3RpbWVzdGFtcCA9IHNvdXJjZV9pbmZvLkdldEJ1aWxkUHJvcCgicm8uYnVpbGQuZGF0ZS51dGMiKQogICBpc19kb3duZ3JhZGUgPSBsb25nKHBvc3RfdGltZXN0YW1wKSA8IGxvbmcocHJlX3RpbWVzdGFtcCkKIAogICBpZiBPUFRJT05TLmRvd25ncmFkZToKQEAgLTYxNCw5NiArOTAzLDQ3MSBAQAogICAgIG1ldGFkYXRhWyJvdGEtZG93bmdyYWRlIl0gPSAieWVzIgogICBlbGlmIE9QVElPTlMudGltZXN0YW1wOgogICAgIGlmIG5vdCBpc19kb3duZ3JhZGU6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoIi0tdGltZXN0YW1wIHNwZWNpZmllZCBidXQgbm8gdGltZXN0YW1wIGhhY2sgbmVlZGVkOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgInByZTogJXMsIHBvc3Q6ICVzIiAlIChwcmVfdGltZXN0YW1wLCBwb3N0X3RpbWVzdGFtcCkpCisgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIi0tb3ZlcnJpZGVfdGltZXN0YW1wIHNwZWNpZmllZCBidXQgbm8gdGltZXN0YW1wIGhhY2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkZWQ6IHByZTogJXMsIHBvc3Q6ICVzIiAlIChwcmVfdGltZXN0YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0X3RpbWVzdGFtcCkpCiAgICAgbWV0YWRhdGFbInBvc3QtdGltZXN0YW1wIl0gPSBzdHIobG9uZyhwcmVfdGltZXN0YW1wKSArIDEpCiAgIGVsc2U6CiAgICAgaWYgaXNfZG93bmdyYWRlOgogICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJEb3duZ3JhZGUgZGV0ZWN0ZWQgYmFzZWQgb24gdGltZXN0YW1wIGNoZWNrOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgInByZTogJXMsIHBvc3Q6ICVzLiBOZWVkIHRvIHNwZWNpZnkgLS10aW1lc3RhbXAgT1IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICItLWRvd25ncmFkZSB0byBhbGxvdyBidWlsZGluZyB0aGUgaW5jcmVtZW50YWwuIiAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlX3RpbWVzdGFtcCwgcG9zdF90aW1lc3RhbXApKQorICAgICAgICAgICAgICAgICAgICAgICAgICJwcmU6ICVzLCBwb3N0OiAlcy4gTmVlZCB0byBzcGVjaWZ5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiLS1vdmVycmlkZV90aW1lc3RhbXAgT1IgLS1kb3duZ3JhZGUgdG8gYWxsb3cgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJidWlsZGluZyB0aGUgaW5jcmVtZW50YWwuIiAlIChwcmVfdGltZXN0YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0X3RpbWVzdGFtcCkpCiAgICAgbWV0YWRhdGFbInBvc3QtdGltZXN0YW1wIl0gPSBwb3N0X3RpbWVzdGFtcAogCiAKLWRlZiBXcml0ZUJsb2NrSW5jcmVtZW50YWxPVEFQYWNrYWdlKHRhcmdldF96aXAsIHNvdXJjZV96aXAsIG91dHB1dF96aXApOgotICBzb3VyY2VfdmVyc2lvbiA9IE9QVElPTlMuc291cmNlX2luZm9fZGljdFsicmVjb3ZlcnlfYXBpX3ZlcnNpb24iXQotICB0YXJnZXRfdmVyc2lvbiA9IE9QVElPTlMudGFyZ2V0X2luZm9fZGljdFsicmVjb3ZlcnlfYXBpX3ZlcnNpb24iXQorZGVmIEdldFBhY2thZ2VNZXRhZGF0YSh0YXJnZXRfaW5mbywgc291cmNlX2luZm89Tm9uZSk6CisgICIiIkdlbmVyYXRlcyBhbmQgcmV0dXJucyB0aGUgbWV0YWRhdGEgZGljdC4KIAotICBpZiBzb3VyY2VfdmVyc2lvbiA9PSAwOgotICAgIHByaW50KCJXQVJOSU5HOiBnZW5lcmF0aW5nIGVkaWZ5IHNjcmlwdCBmb3IgYSBzb3VyY2UgdGhhdCAiCi0gICAgICAgICAgImNhbid0IGluc3RhbGwgaXQuIikKLSAgc2NyaXB0ID0gZWRpZnlfZ2VuZXJhdG9yLkVkaWZ5R2VuZXJhdG9yKAotICAgICAgc291cmNlX3ZlcnNpb24sIE9QVElPTlMudGFyZ2V0X2luZm9fZGljdCwKLSAgICAgIGZzdGFiPU9QVElPTlMuc291cmNlX2luZm9fZGljdFsiZnN0YWIiXSkKKyAgSXQgZ2VuZXJhdGVzIGEgZGljdCgpIHRoYXQgY29udGFpbnMgdGhlIGluZm8gdG8gYmUgd3JpdHRlbiBpbnRvIGFuIE9UQQorICBwYWNrYWdlIChNRVRBLUlORi9jb20vYW5kcm9pZC9tZXRhZGF0YSkuIEl0IGFsc28gaGFuZGxlcyB0aGUgZGV0ZWN0aW9uIG9mCisgIGRvd25ncmFkZSAvIHRpbWVzdGFtcCBvdmVycmlkZSAvIGRhdGEgd2lwZSBiYXNlZCBvbiB0aGUgZ2xvYmFsIG9wdGlvbnMuCiAKLSAgcmVjb3ZlcnlfbW91bnRfb3B0aW9ucyA9IE9QVElPTlMuc291cmNlX2luZm9fZGljdC5nZXQoCi0gICAgICAicmVjb3ZlcnlfbW91bnRfb3B0aW9ucyIpCi0gIHNvdXJjZV9vZW1fcHJvcHMgPSBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QuZ2V0KCJvZW1fZmluZ2VycHJpbnRfcHJvcGVydGllcyIpCi0gIHRhcmdldF9vZW1fcHJvcHMgPSBPUFRJT05TLnRhcmdldF9pbmZvX2RpY3QuZ2V0KCJvZW1fZmluZ2VycHJpbnRfcHJvcGVydGllcyIpCi0gIG9lbV9kaWN0cyA9IE5vbmUKLSAgaWYgc291cmNlX29lbV9wcm9wcyBhbmQgdGFyZ2V0X29lbV9wcm9wczoKLSAgICBvZW1fZGljdHMgPSBfTG9hZE9lbURpY3RzKHNjcmlwdCwgcmVjb3ZlcnlfbW91bnRfb3B0aW9ucykKKyAgQXJnczoKKyAgICB0YXJnZXRfaW5mbzogVGhlIEJ1aWxkSW5mbyBpbnN0YW5jZSB0aGF0IGhvbGRzIHRoZSB0YXJnZXQgYnVpbGQgaW5mby4KKyAgICBzb3VyY2VfaW5mbzogVGhlIEJ1aWxkSW5mbyBpbnN0YW5jZSB0aGF0IGhvbGRzIHRoZSBzb3VyY2UgYnVpbGQgaW5mbywgb3IKKyAgICAgICAgTm9uZSBpZiBnZW5lcmF0aW5nIGZ1bGwgT1RBLgorCisgIFJldHVybnM6CisgICAgQSBkaWN0IHRvIGJlIHdyaXR0ZW4gaW50byBwYWNrYWdlIG1ldGFkYXRhIGVudHJ5LgorICAiIiIKKyAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0X2luZm8sIEJ1aWxkSW5mbykKKyAgYXNzZXJ0IHNvdXJjZV9pbmZvIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShzb3VyY2VfaW5mbywgQnVpbGRJbmZvKQogCiAgIG1ldGFkYXRhID0gewotICAgICAgInByZS1kZXZpY2UiOiBHZXRPZW1Qcm9wZXJ0eSgicm8ucHJvZHVjdC5kZXZpY2UiLCBzb3VyY2Vfb2VtX3Byb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZW1fZGljdHMgYW5kIG9lbV9kaWN0c1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0KSwKLSAgICAgICJvdGEtdHlwZSI6ICJCTE9DSyIsCisgICAgICAncG9zdC1idWlsZCcgOiB0YXJnZXRfaW5mby5maW5nZXJwcmludCwKKyAgICAgICdwb3N0LWJ1aWxkLWluY3JlbWVudGFsJyA6IHRhcmdldF9pbmZvLkdldEJ1aWxkUHJvcCgKKyAgICAgICAgICAncm8uYnVpbGQudmVyc2lvbi5pbmNyZW1lbnRhbCcpLAorICAgICAgJ3Bvc3Qtc2RrLWxldmVsJyA6IHRhcmdldF9pbmZvLkdldEJ1aWxkUHJvcCgKKyAgICAgICAgICAncm8uYnVpbGQudmVyc2lvbi5zZGsnKSwKKyAgICAgICdwb3N0LXNlY3VyaXR5LXBhdGNoLWxldmVsJyA6IHRhcmdldF9pbmZvLkdldEJ1aWxkUHJvcCgKKyAgICAgICAgICAncm8uYnVpbGQudmVyc2lvbi5zZWN1cml0eV9wYXRjaCcpLAogICB9CiAKLSAgSGFuZGxlRG93bmdyYWRlTWV0YWRhdGEobWV0YWRhdGEpCisgIGlmIHRhcmdldF9pbmZvLmlzX2FiOgorICAgIG1ldGFkYXRhWydvdGEtdHlwZSddID0gJ0FCJworICAgIG1ldGFkYXRhWydvdGEtcmVxdWlyZWQtY2FjaGUnXSA9ICcwJworICBlbHNlOgorICAgIG1ldGFkYXRhWydvdGEtdHlwZSddID0gJ0JMT0NLJworCisgIGlmIE9QVElPTlMud2lwZV91c2VyX2RhdGE6CisgICAgbWV0YWRhdGFbJ290YS13aXBlJ10gPSAneWVzJworCisgIGlzX2luY3JlbWVudGFsID0gc291cmNlX2luZm8gaXMgbm90IE5vbmUKKyAgaWYgaXNfaW5jcmVtZW50YWw6CisgICAgbWV0YWRhdGFbJ3ByZS1idWlsZCddID0gc291cmNlX2luZm8uZmluZ2VycHJpbnQKKyAgICBtZXRhZGF0YVsncHJlLWJ1aWxkLWluY3JlbWVudGFsJ10gPSBzb3VyY2VfaW5mby5HZXRCdWlsZFByb3AoCisgICAgICAgICdyby5idWlsZC52ZXJzaW9uLmluY3JlbWVudGFsJykKKyAgICBtZXRhZGF0YVsncHJlLWRldmljZSddID0gc291cmNlX2luZm8uZGV2aWNlCisgIGVsc2U6CisgICAgbWV0YWRhdGFbJ3ByZS1kZXZpY2UnXSA9IHRhcmdldF9pbmZvLmRldmljZQorCisgICMgRGV0ZWN0IGRvd25ncmFkZXMsIG9yIGZpbGwgaW4gdGhlIHBvc3QtdGltZXN0YW1wLgorICBpZiBpc19pbmNyZW1lbnRhbDoKKyAgICBIYW5kbGVEb3duZ3JhZGVNZXRhZGF0YShtZXRhZGF0YSwgdGFyZ2V0X2luZm8sIHNvdXJjZV9pbmZvKQorICBlbHNlOgorICAgIG1ldGFkYXRhWydwb3N0LXRpbWVzdGFtcCddID0gdGFyZ2V0X2luZm8uR2V0QnVpbGRQcm9wKCdyby5idWlsZC5kYXRlLnV0YycpCisKKyAgcmV0dXJuIG1ldGFkYXRhCisKKworY2xhc3MgUHJvcGVydHlGaWxlcyhvYmplY3QpOgorICAiIiJBIGNsYXNzIHRoYXQgY29tcHV0ZXMgdGhlIHByb3BlcnR5LWZpbGVzIHN0cmluZyBmb3IgYW4gT1RBIHBhY2thZ2UuCisKKyAgQSBwcm9wZXJ0eS1maWxlcyBzdHJpbmcgaXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlCisgIG9mZnNldC9zaXplIGluZm8gZm9yIGFuIE9UQSBwYWNrYWdlLiBUaGUgZW50cmllcywgd2hpY2ggbXVzdCBiZSBaSVBfU1RPUkVELAorICBjYW4gYmUgZmV0Y2hlZCBkaXJlY3RseSB3aXRoIHRoZSBwYWNrYWdlIFVSTCBhbG9uZyB3aXRoIHRoZSBvZmZzZXQvc2l6ZSBpbmZvLgorICBUaGVzZSBzdHJpbmdzIGNhbiBiZSB1c2VkIGZvciBzdHJlYW1pbmcgQS9CIE9UQXMsIG9yIGFsbG93aW5nIGFuIHVwZGF0ZXIgdG8KKyAgZG93bmxvYWQgcGFja2FnZSBtZXRhZGF0YSBlbnRyeSBkaXJlY3RseSwgd2l0aG91dCBwYXlpbmcgdGhlIGNvc3Qgb2YKKyAgZG93bmxvYWRpbmcgZW50aXJlIHBhY2thZ2UuCisKKyAgQ29tcHV0aW5nIHRoZSBmaW5hbCBwcm9wZXJ0eS1maWxlcyBzdHJpbmcgcmVxdWlyZXMgdHdvIHBhc3Nlcy4gQmVjYXVzZSBkb2luZworICB0aGUgd2hvbGUgcGFja2FnZSBzaWduaW5nICh3aXRoIHNpZ25hcGsuamFyKSB3aWxsIHBvc3NpYmx5IHJlb3JkZXIgdGhlIFpJUAorICBlbnRyaWVzLCB3aGljaCBtYXkgaW4gdHVybiBpbnZhbGlkYXRlIGVhcmxpZXIgY29tcHV0ZWQgWklQIGVudHJ5IG9mZnNldC9zaXplCisgIHZhbHVlcy4KKworICBUaGlzIGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgZm9yIGVhY2ggcGFzcy4gVGhlIGdlbmVyYWwgZmxvdyBpcworICBhcyBmb2xsb3dzLgorCisgICAgcHJvcGVydHlfZmlsZXMgPSBQcm9wZXJ0eUZpbGVzKCkKKyAgICAjIFRoZSBmaXJzdCBwYXNzLCB3aGljaCB3cml0ZXMgcGxhY2Vob2xkZXJzIGJlZm9yZSBkb2luZyBpbml0aWFsIHNpZ25pbmcuCisgICAgcHJvcGVydHlfZmlsZXMuQ29tcHV0ZSgpCisgICAgU2lnbk91dHB1dCgpCisKKyAgICAjIFRoZSBzZWNvbmQgcGFzcywgYnkgcmVwbGFjaW5nIHRoZSBwbGFjZWhvbGRlcnMgd2l0aCBhY3R1YWwgZGF0YS4KKyAgICBwcm9wZXJ0eV9maWxlcy5GaW5hbGl6ZSgpCisgICAgU2lnbk91dHB1dCgpCisKKyAgQW5kIHRoZSBjYWxsZXIgY2FuIGFkZGl0aW9uYWxseSB2ZXJpZnkgdGhlIGZpbmFsIHJlc3VsdC4KKworICAgIHByb3BlcnR5X2ZpbGVzLlZlcmlmeSgpCisgICIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBzZWxmLm5hbWUgPSBOb25lCisgICAgc2VsZi5yZXF1aXJlZCA9ICgpCisgICAgc2VsZi5vcHRpb25hbCA9ICgpCisKKyAgZGVmIENvbXB1dGUoc2VsZiwgaW5wdXRfemlwKToKKyAgICAiIiJDb21wdXRlcyBhbmQgcmV0dXJucyBhIHByb3BlcnR5LWZpbGVzIHN0cmluZyB3aXRoIHBsYWNlaG9sZGVycy4KKworICAgIFdlIHJlc2VydmUgZXh0cmEgc3BhY2UgZm9yIHRoZSBvZmZzZXQgYW5kIHNpemUgb2YgdGhlIG1ldGFkYXRhIGVudHJ5IGl0c2VsZiwKKyAgICBhbHRob3VnaCB3ZSBkb24ndCBrbm93IHRoZSBmaW5hbCB2YWx1ZXMgdW50aWwgdGhlIHBhY2thZ2UgZ2V0cyBzaWduZWQuCisKKyAgICBBcmdzOgorICAgICAgaW5wdXRfemlwOiBUaGUgaW5wdXQgWklQIGZpbGUuCisKKyAgICBSZXR1cm5zOgorICAgICAgQSBzdHJpbmcgd2l0aCBwbGFjZWhvbGRlcnMgZm9yIHRoZSBtZXRhZGF0YSBvZmZzZXQvc2l6ZSBpbmZvLCBlLmcuCisgICAgICAicGF5bG9hZC5iaW46Njc5OjM0MyxwYXlsb2FkX3Byb3BlcnRpZXMudHh0OjM3ODo0NSxtZXRhZGF0YTogICAgICAgICIuCisgICAgIiIiCisgICAgcmV0dXJuIHNlbGYuX0dldFByb3BlcnR5RmlsZXNTdHJpbmcoaW5wdXRfemlwLCByZXNlcnZlX3NwYWNlPVRydWUpCisKKyAgZGVmIEZpbmFsaXplKHNlbGYsIGlucHV0X3ppcCwgcmVzZXJ2ZWRfbGVuZ3RoKToKKyAgICAiIiJGaW5hbGl6ZXMgYSBwcm9wZXJ0eS1maWxlcyBzdHJpbmcgd2l0aCBhY3R1YWwgTUVUQURBVEEgb2Zmc2V0L3NpemUgaW5mby4KKworICAgIFRoZSBpbnB1dCBaSVAgZmlsZSBoYXMgYmVlbiBzaWduZWQsIHdpdGggdGhlIFpJUCBlbnRyaWVzIGluIHRoZSBkZXNpcmVkCisgICAgcGxhY2UgKHNpZ25hcGsuamFyIHdpbGwgcG9zc2libHkgcmVvcmRlciB0aGUgWklQIGVudHJpZXMpLiBOb3cgd2UgY29tcHV0ZQorICAgIHRoZSBaSVAgZW50cnkgb2Zmc2V0cyBhbmQgY29uc3RydWN0IHRoZSBwcm9wZXJ0eS1maWxlcyBzdHJpbmcgd2l0aCBhY3R1YWwKKyAgICBkYXRhLiBOb3RlIHRoYXQgZHVyaW5nIHRoaXMgcHJvY2Vzcywgd2UgbXVzdCBwYWQgdGhlIHByb3BlcnR5LWZpbGVzIHN0cmluZworICAgIHRvIHRoZSByZXNlcnZlZCBsZW5ndGgsIHNvIHRoYXQgdGhlIE1FVEFEQVRBIGVudHJ5IHNpemUgcmVtYWlucyB0aGUgc2FtZS4KKyAgICBPdGhlcndpc2UgdGhlIGVudHJpZXMnIG9mZnNldHMgYW5kIHNpemVzIG1heSBjaGFuZ2UgYWdhaW4uCisKKyAgICBBcmdzOgorICAgICAgaW5wdXRfemlwOiBUaGUgaW5wdXQgWklQIGZpbGUuCisgICAgICByZXNlcnZlZF9sZW5ndGg6IFRoZSByZXNlcnZlZCBsZW5ndGggb2YgdGhlIHByb3BlcnR5LWZpbGVzIHN0cmluZyBkdXJpbmcKKyAgICAgICAgICB0aGUgY2FsbCB0byBDb21wdXRlKCkuIFRoZSBmaW5hbCBzdHJpbmcgbXVzdCBiZSBubyBtb3JlIHRoYW4gdGhpcworICAgICAgICAgIHNpemUuCisKKyAgICBSZXR1cm5zOgorICAgICAgQSBwcm9wZXJ0eS1maWxlcyBzdHJpbmcgaW5jbHVkaW5nIHRoZSBtZXRhZGF0YSBvZmZzZXQvc2l6ZSBpbmZvLCBlLmcuCisgICAgICAicGF5bG9hZC5iaW46Njc5OjM0MyxwYXlsb2FkX3Byb3BlcnRpZXMudHh0OjM3ODo0NSxtZXRhZGF0YTo2OTozNzkgICIuCisKKyAgICBSYWlzZXM6CisgICAgICBBc3NlcnRpb25FcnJvcjogSWYgdGhlIHJlc2VydmVkIGxlbmd0aCBpcyBpbnN1ZmZpY2llbnQgdG8gaG9sZCB0aGUgZmluYWwKKyAgICAgICAgICBzdHJpbmcuCisgICAgIiIiCisgICAgcmVzdWx0ID0gc2VsZi5fR2V0UHJvcGVydHlGaWxlc1N0cmluZyhpbnB1dF96aXAsIHJlc2VydmVfc3BhY2U9RmFsc2UpCisgICAgYXNzZXJ0IGxlbihyZXN1bHQpIDw9IHJlc2VydmVkX2xlbmd0aCwgXAorICAgICAgICAnSW5zdWZmaWNpZW50IHJlc2VydmVkIHNwYWNlOiByZXNlcnZlZD17fSwgYWN0dWFsPXt9Jy5mb3JtYXQoCisgICAgICAgICAgICByZXNlcnZlZF9sZW5ndGgsIGxlbihyZXN1bHQpKQorICAgIHJlc3VsdCArPSAnICcgKiAocmVzZXJ2ZWRfbGVuZ3RoIC0gbGVuKHJlc3VsdCkpCisgICAgcmV0dXJuIHJlc3VsdAorCisgIGRlZiBWZXJpZnkoc2VsZiwgaW5wdXRfemlwLCBleHBlY3RlZCk6CisgICAgIiIiVmVyaWZpZXMgdGhlIGlucHV0IFpJUCBmaWxlIGNvbnRhaW5zIHRoZSBleHBlY3RlZCBwcm9wZXJ0eS1maWxlcyBzdHJpbmcuCisKKyAgICBBcmdzOgorICAgICAgaW5wdXRfemlwOiBUaGUgaW5wdXQgWklQIGZpbGUuCisgICAgICBleHBlY3RlZDogVGhlIHByb3BlcnR5LWZpbGVzIHN0cmluZyB0aGF0J3MgY29tcHV0ZWQgZnJvbSBGaW5hbGl6ZSgpLgorCisgICAgUmFpc2VzOgorICAgICAgQXNzZXJ0aW9uRXJyb3I6IE9uIGZpbmRpbmcgYSBtaXNtYXRjaC4KKyAgICAiIiIKKyAgICBhY3R1YWwgPSBzZWxmLl9HZXRQcm9wZXJ0eUZpbGVzU3RyaW5nKGlucHV0X3ppcCkKKyAgICBhc3NlcnQgYWN0dWFsID09IGV4cGVjdGVkLCBcCisgICAgICAgICJNaXNtYXRjaGluZyBzdHJlYW1pbmcgbWV0YWRhdGE6IHt9IHZzIHt9LiIuZm9ybWF0KGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgZGVmIF9HZXRQcm9wZXJ0eUZpbGVzU3RyaW5nKHNlbGYsIHppcF9maWxlLCByZXNlcnZlX3NwYWNlPUZhbHNlKToKKyAgICAiIiJDb25zdHJ1Y3RzIHRoZSBwcm9wZXJ0eS1maWxlcyBzdHJpbmcgcGVyIHJlcXVlc3QuIiIiCisKKyAgICBkZWYgQ29tcHV0ZUVudHJ5T2Zmc2V0U2l6ZShuYW1lKToKKyAgICAgICIiIkNvbXB1dGVzIHRoZSB6aXAgZW50cnkgb2Zmc2V0IGFuZCBzaXplLiIiIgorICAgICAgaW5mbyA9IHppcF9maWxlLmdldGluZm8obmFtZSkKKyAgICAgIG9mZnNldCA9IGluZm8uaGVhZGVyX29mZnNldCArIGxlbihpbmZvLkZpbGVIZWFkZXIoKSkKKyAgICAgIHNpemUgPSBpbmZvLmZpbGVfc2l6ZQorICAgICAgcmV0dXJuICclczolZDolZCcgJSAob3MucGF0aC5iYXNlbmFtZShuYW1lKSwgb2Zmc2V0LCBzaXplKQorCisgICAgdG9rZW5zID0gW10KKyAgICB0b2tlbnMuZXh0ZW5kKHNlbGYuX0dldFByZWNvbXB1dGVkKHppcF9maWxlKSkKKyAgICBmb3IgZW50cnkgaW4gc2VsZi5yZXF1aXJlZDoKKyAgICAgIHRva2Vucy5hcHBlbmQoQ29tcHV0ZUVudHJ5T2Zmc2V0U2l6ZShlbnRyeSkpCisgICAgZm9yIGVudHJ5IGluIHNlbGYub3B0aW9uYWw6CisgICAgICBpZiBlbnRyeSBpbiB6aXBfZmlsZS5uYW1lbGlzdCgpOgorICAgICAgICB0b2tlbnMuYXBwZW5kKENvbXB1dGVFbnRyeU9mZnNldFNpemUoZW50cnkpKQorCisgICAgIyAnTUVUQS1JTkYvY29tL2FuZHJvaWQvbWV0YWRhdGEnIGlzIHJlcXVpcmVkLiBXZSBkb24ndCBrbm93IGl0cyBhY3R1YWwKKyAgICAjIG9mZnNldCBhbmQgbGVuZ3RoIChhcyB3ZWxsIGFzIHRoZSB2YWx1ZXMgZm9yIG90aGVyIGVudHJpZXMpLiBTbyB3ZSByZXNlcnZlCisgICAgIyAxMC1ieXRlIGFzIGEgcGxhY2Vob2xkZXIsIHdoaWNoIGlzIHRvIGNvdmVyIHRoZSBzcGFjZSBmb3IgbWV0YWRhdGEgZW50cnkKKyAgICAjICgneHg6eHh4Jywgc2luY2UgaXQncyBaSVBfU1RPUkVEIHdoaWNoIHNob3VsZCBhcHBlYXIgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgICMgdGhlIHppcCksIGFzIHdlbGwgYXMgdGhlIHBvc3NpYmxlIHZhbHVlIGNoYW5nZXMgaW4gb3RoZXIgZW50cmllcy4KKyAgICBpZiByZXNlcnZlX3NwYWNlOgorICAgICAgdG9rZW5zLmFwcGVuZCgnbWV0YWRhdGE6JyArICcgJyAqIDEwKQorICAgIGVsc2U6CisgICAgICB0b2tlbnMuYXBwZW5kKENvbXB1dGVFbnRyeU9mZnNldFNpemUoTUVUQURBVEFfTkFNRSkpCisKKyAgICByZXR1cm4gJywnLmpvaW4odG9rZW5zKQorCisgIGRlZiBfR2V0UHJlY29tcHV0ZWQoc2VsZiwgaW5wdXRfemlwKToKKyAgICAiIiJDb21wdXRlcyB0aGUgYWRkaXRpb25hbCB0b2tlbnMgdG8gYmUgaW5jbHVkZWQgaW50byB0aGUgcHJvcGVydHktZmlsZXMuCisKKyAgICBUaGlzIGFwcGxpZXMgdG8gdG9rZW5zIHdpdGhvdXQgYWN0dWFsIFpJUCBlbnRyaWVzLCBzdWNoIGFzCisgICAgcGF5bG9hZF9tZXRhZGFkYXRhLmJpbi4gV2Ugd2FudCB0byBleHBvc2UgdGhlIG9mZnNldC9zaXplIHRvIHVwZGF0ZXJzLCBzbworICAgIHRoYXQgdGhleSBjYW4gZG93bmxvYWQgdGhlIHBheWxvYWQgbWV0YWRhdGEgZGlyZWN0bHkgd2l0aCB0aGUgaW5mby4KKworICAgIEFyZ3M6CisgICAgICBpbnB1dF96aXA6IFRoZSBpbnB1dCB6aXAgZmlsZS4KKworICAgIFJldHVybnM6CisgICAgICBBIGxpc3Qgb2Ygc3RyaW5ncyAodG9rZW5zKSB0byBiZSBhZGRlZCB0byB0aGUgcHJvcGVydHktZmlsZXMgc3RyaW5nLgorICAgICIiIgorICAgICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCisgICAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50CisgICAgcmV0dXJuIFtdCisKKworY2xhc3MgU3RyZWFtaW5nUHJvcGVydHlGaWxlcyhQcm9wZXJ0eUZpbGVzKToKKyAgIiIiQSBzdWJjbGFzcyBmb3IgY29tcHV0aW5nIHRoZSBwcm9wZXJ0eS1maWxlcyBmb3Igc3RyZWFtaW5nIEEvQiBPVEFzLiIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBzdXBlcihTdHJlYW1pbmdQcm9wZXJ0eUZpbGVzLCBzZWxmKS5fX2luaXRfXygpCisgICAgc2VsZi5uYW1lID0gJ290YS1zdHJlYW1pbmctcHJvcGVydHktZmlsZXMnCisgICAgc2VsZi5yZXF1aXJlZCA9ICgKKyAgICAgICAgIyBwYXlsb2FkLmJpbiBhbmQgcGF5bG9hZF9wcm9wZXJ0aWVzLnR4dCBtdXN0IGV4aXN0LgorICAgICAgICAncGF5bG9hZC5iaW4nLAorICAgICAgICAncGF5bG9hZF9wcm9wZXJ0aWVzLnR4dCcsCisgICAgKQorICAgIHNlbGYub3B0aW9uYWwgPSAoCisgICAgICAgICMgY2FyZV9tYXAudHh0IGlzIGF2YWlsYWJsZSBvbmx5IGlmIGRtLXZlcml0eSBpcyBlbmFibGVkLgorICAgICAgICAnY2FyZV9tYXAudHh0JywKKyAgICAgICAgIyBjb21wYXRpYmlsaXR5LnppcCBpcyBhdmFpbGFibGUgb25seSBpZiB0YXJnZXQgc3VwcG9ydHMgVHJlYmxlLgorICAgICAgICAnY29tcGF0aWJpbGl0eS56aXAnLAorICAgICkKKworCitjbGFzcyBBYk90YVByb3BlcnR5RmlsZXMoU3RyZWFtaW5nUHJvcGVydHlGaWxlcyk6CisgICIiIlRoZSBwcm9wZXJ0eS1maWxlcyBmb3IgQS9CIE9UQSB0aGF0IGluY2x1ZGVzIHBheWxvYWRfbWV0YWRhdGEuYmluIGluZm8uCisKKyAgU2luY2UgUCwgd2UgZXhwb3NlIG9uZSBtb3JlIHRva2VuIChha2EgcHJvcGVydHktZmlsZSksIGluIGFkZGl0aW9uIHRvIHRoZSBvbmVzCisgIGZvciBzdHJlYW1pbmcgQS9CIE9UQSwgZm9yIGEgdmlydHVhbCBlbnRyeSBvZiAncGF5bG9hZF9tZXRhZGF0YS5iaW4nLgorICAncGF5bG9hZF9tZXRhZGF0YS5iaW4nIGlzIHRoZSBoZWFkZXIgcGFydCBvZiBhIHBheWxvYWQgKCdwYXlsb2FkLmJpbicpLCB3aGljaAorICBkb2Vzbid0IGV4aXN0IGFzIGEgc2VwYXJhdGUgWklQIGVudHJ5LCBidXQgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IGlmIHRoZQorICBwYXlsb2FkIGNhbiBiZSBhcHBsaWVkIG9uIHRoZSBnaXZlbiBkZXZpY2UuCisKKyAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHdlIGtlZXAgYm90aCBvZiB0aGUgJ290YS1zdHJlYW1pbmctcHJvcGVydHktZmlsZXMnCisgIGFuZCB0aGUgbmV3bHkgYWRkZWQgJ290YS1wcm9wZXJ0eS1maWxlcycgaW4gUC4gVGhlIG5ldyB0b2tlbiB3aWxsIG9ubHkgYmUKKyAgYXZhaWxhYmxlIGluICdvdGEtcHJvcGVydHktZmlsZXMnLgorICAiIiIKKworICBkZWYgX19pbml0X18oc2VsZik6CisgICAgc3VwZXIoQWJPdGFQcm9wZXJ0eUZpbGVzLCBzZWxmKS5fX2luaXRfXygpCisgICAgc2VsZi5uYW1lID0gJ290YS1wcm9wZXJ0eS1maWxlcycKKworICBkZWYgX0dldFByZWNvbXB1dGVkKHNlbGYsIGlucHV0X3ppcCk6CisgICAgb2Zmc2V0LCBzaXplID0gc2VsZi5fR2V0UGF5bG9hZE1ldGFkYXRhT2Zmc2V0QW5kU2l6ZShpbnB1dF96aXApCisgICAgcmV0dXJuIFsncGF5bG9hZF9tZXRhZGF0YS5iaW46e306e30nLmZvcm1hdChvZmZzZXQsIHNpemUpXQorCisgIEBzdGF0aWNtZXRob2QKKyAgZGVmIF9HZXRQYXlsb2FkTWV0YWRhdGFPZmZzZXRBbmRTaXplKGlucHV0X3ppcCk6CisgICAgIiIiQ29tcHV0ZXMgdGhlIG9mZnNldCBhbmQgc2l6ZSBvZiB0aGUgcGF5bG9hZCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBwYWNrYWdlLgorCisgICAgKEZyb20gc3lzdGVtL3VwZGF0ZV9lbmdpbmUvdXBkYXRlX21ldGFkYXRhLnByb3RvKQorICAgIEEgZGVsdGEgdXBkYXRlIGZpbGUgY29udGFpbnMgYWxsIHRoZSBkZWx0YXMgbmVlZGVkIHRvIHVwZGF0ZSBhIHN5c3RlbSBmcm9tCisgICAgb25lIHNwZWNpZmljIHZlcnNpb24gdG8gYW5vdGhlciBzcGVjaWZpYyB2ZXJzaW9uLiBUaGUgdXBkYXRlIGZvcm1hdCBpcworICAgIHJlcHJlc2VudGVkIGJ5IHRoaXMgc3RydWN0IHBzZXVkb2NvZGU6CisKKyAgICBzdHJ1Y3QgZGVsdGFfdXBkYXRlX2ZpbGUgeworICAgICAgY2hhciBtYWdpY1s0XSA9ICJDckFVIjsKKyAgICAgIHVpbnQ2NCBmaWxlX2Zvcm1hdF92ZXJzaW9uOworICAgICAgdWludDY0IG1hbmlmZXN0X3NpemU7ICAvLyBTaXplIG9mIHByb3RvYnVmIERlbHRhQXJjaGl2ZU1hbmlmZXN0CisKKyAgICAgIC8vIE9ubHkgcHJlc2VudCBpZiBmb3JtYXRfdmVyc2lvbiA+IDE6CisgICAgICB1aW50MzIgbWV0YWRhdGFfc2lnbmF0dXJlX3NpemU7CisKKyAgICAgIC8vIFRoZSBCemlwMiBjb21wcmVzc2VkIERlbHRhQXJjaGl2ZU1hbmlmZXN0CisgICAgICBjaGFyIG1hbmlmZXN0W21ldGFkYXRhX3NpZ25hdHVyZV9zaXplXTsKKworICAgICAgLy8gVGhlIHNpZ25hdHVyZSBvZiB0aGUgbWV0YWRhdGEgKGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF5bG9hZCB1cCB0bworICAgICAgLy8gdGhpcyBsb2NhdGlvbiwgbm90IGluY2x1ZGluZyB0aGUgc2lnbmF0dXJlIGl0c2VsZikuIFRoaXMgaXMgYQorICAgICAgLy8gc2VyaWFsaXplZCBTaWduYXR1cmVzIG1lc3NhZ2UuCisgICAgICBjaGFyIG1lZGF0YWRhX3NpZ25hdHVyZV9tZXNzYWdlW21ldGFkYXRhX3NpZ25hdHVyZV9zaXplXTsKKworICAgICAgLy8gRGF0YSBibG9icyBmb3IgZmlsZXMsIG5vIHNwZWNpZmljIGZvcm1hdC4gVGhlIHNwZWNpZmljIG9mZnNldAorICAgICAgLy8gYW5kIGxlbmd0aCBvZiBlYWNoIGRhdGEgYmxvYiBpcyByZWNvcmRlZCBpbiB0aGUgRGVsdGFBcmNoaXZlTWFuaWZlc3QuCisgICAgICBzdHJ1Y3QgeworICAgICAgICBjaGFyIGRhdGFbXTsKKyAgICAgIH0gYmxvYnNbXTsKKworICAgICAgLy8gVGhlc2UgdHdvIGFyZSBub3Qgc2lnbmVkOgorICAgICAgdWludDY0IHBheWxvYWRfc2lnbmF0dXJlc19tZXNzYWdlX3NpemU7CisgICAgICBjaGFyIHBheWxvYWRfc2lnbmF0dXJlc19tZXNzYWdlW107CisgICAgfTsKKworICAgICdwYXlsb2FkLW1ldGFkYXRhLmJpbicgY29udGFpbnMgYWxsIHRoZSBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgcGF5bG9hZCwgdGlsbCB0aGUgZW5kIG9mICdtZWRhdGFkYV9zaWduYXR1cmVfbWVzc2FnZScuCisgICAgIiIiCisgICAgcGF5bG9hZF9pbmZvID0gaW5wdXRfemlwLmdldGluZm8oJ3BheWxvYWQuYmluJykKKyAgICBwYXlsb2FkX29mZnNldCA9IHBheWxvYWRfaW5mby5oZWFkZXJfb2Zmc2V0ICsgbGVuKHBheWxvYWRfaW5mby5GaWxlSGVhZGVyKCkpCisgICAgcGF5bG9hZF9zaXplID0gcGF5bG9hZF9pbmZvLmZpbGVfc2l6ZQorCisgICAgd2l0aCBpbnB1dF96aXAub3BlbigncGF5bG9hZC5iaW4nLCAncicpIGFzIHBheWxvYWRfZnA6CisgICAgICBoZWFkZXJfYmluID0gcGF5bG9hZF9mcC5yZWFkKDI0KQorCisgICAgIyBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZy1lbmRpYW4pCisgICAgaGVhZGVyID0gc3RydWN0LnVucGFjaygiIUlRUUwiLCBoZWFkZXJfYmluKQorCisgICAgIyAnQ3JBVScKKyAgICBtYWdpYyA9IGhlYWRlclswXQorICAgIGFzc2VydCBtYWdpYyA9PSAweDQzNzI0MTU1LCAiSW52YWxpZCBtYWdpYzogezp4fSIuZm9ybWF0KG1hZ2ljKQorCisgICAgbWFuaWZlc3Rfc2l6ZSA9IGhlYWRlclsyXQorICAgIG1ldGFkYXRhX3NpZ25hdHVyZV9zaXplID0gaGVhZGVyWzNdCisgICAgbWV0YWRhdGFfdG90YWwgPSAyNCArIG1hbmlmZXN0X3NpemUgKyBtZXRhZGF0YV9zaWduYXR1cmVfc2l6ZQorICAgIGFzc2VydCBtZXRhZGF0YV90b3RhbCA8IHBheWxvYWRfc2l6ZQorCisgICAgcmV0dXJuIChwYXlsb2FkX29mZnNldCwgbWV0YWRhdGFfdG90YWwpCisKKworY2xhc3MgTm9uQWJPdGFQcm9wZXJ0eUZpbGVzKFByb3BlcnR5RmlsZXMpOgorICAiIiJUaGUgcHJvcGVydHktZmlsZXMgZm9yIG5vbi1BL0IgT1RBLgorCisgIEZvciBub24tQS9CIE9UQSwgdGhlIHByb3BlcnR5LWZpbGVzIHN0cmluZyBjb250YWlucyB0aGUgaW5mbyBmb3IgTUVUQURBVEEKKyAgZW50cnksIHdpdGggd2hpY2ggYSBzeXN0ZW0gdXBkYXRlciBjYW4gYmUgZmV0Y2hlZCB0aGUgcGFja2FnZSBtZXRhZGF0YSBwcmlvcgorICB0byBkb3dubG9hZGluZyB0aGUgZW50aXJlIHBhY2thZ2UuCisgICIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBzdXBlcihOb25BYk90YVByb3BlcnR5RmlsZXMsIHNlbGYpLl9faW5pdF9fKCkKKyAgICBzZWxmLm5hbWUgPSAnb3RhLXByb3BlcnR5LWZpbGVzJworCisKK2RlZiBGaW5hbGl6ZU1ldGFkYXRhKG1ldGFkYXRhLCBpbnB1dF9maWxlLCBvdXRwdXRfZmlsZSwgbmVlZGVkX3Byb3BlcnR5X2ZpbGVzKToKKyAgIiIiRmluYWxpemVzIHRoZSBtZXRhZGF0YSBhbmQgc2lnbnMgYW4gQS9CIE9UQSBwYWNrYWdlLgorCisgIEluIG9yZGVyIHRvIHN0cmVhbSBhbiBBL0IgT1RBIHBhY2thZ2UsIHdlIG5lZWQgJ290YS1zdHJlYW1pbmctcHJvcGVydHktZmlsZXMnCisgIHRoYXQgY29udGFpbnMgdGhlIG9mZnNldHMgYW5kIHNpemVzIGZvciB0aGUgWklQIGVudHJpZXMuIEFuIGV4YW1wbGUKKyAgcHJvcGVydHktZmlsZXMgc3RyaW5nIGlzIGFzIGZvbGxvd3MuCisKKyAgICAicGF5bG9hZC5iaW46Njc5OjM0MyxwYXlsb2FkX3Byb3BlcnRpZXMudHh0OjM3ODo0NSxtZXRhZGF0YTo2OTozNzkiCisKKyAgT1RBIHNlcnZlciBjYW4gcGFzcyBkb3duIHRoaXMgc3RyaW5nLCBpbiBhZGRpdGlvbiB0byB0aGUgcGFja2FnZSBVUkwsIHRvIHRoZQorICBzeXN0ZW0gdXBkYXRlIGNsaWVudC4gU3lzdGVtIHVwZGF0ZSBjbGllbnQgY2FuIHRoZW4gZmV0Y2ggaW5kaXZpZHVhbCBaSVAKKyAgZW50cmllcyAoWklQX1NUT1JFRCkgZGlyZWN0bHkgYXQgdGhlIGdpdmVuIG9mZnNldCBvZiB0aGUgVVJMLgorCisgIEFyZ3M6CisgICAgbWV0YWRhdGE6IFRoZSBtZXRhZGF0YSBkaWN0IGZvciB0aGUgcGFja2FnZS4KKyAgICBpbnB1dF9maWxlOiBUaGUgaW5wdXQgWklQIGZpbGVuYW1lIHRoYXQgZG9lc24ndCBjb250YWluIHRoZSBwYWNrYWdlIE1FVEFEQVRBCisgICAgICAgIGVudHJ5IHlldC4KKyAgICBvdXRwdXRfZmlsZTogVGhlIGZpbmFsIG91dHB1dCBaSVAgZmlsZW5hbWUuCisgICAgbmVlZGVkX3Byb3BlcnR5X2ZpbGVzOiBUaGUgbGlzdCBvZiBQcm9wZXJ0eUZpbGVzJyB0byBiZSBnZW5lcmF0ZWQuCisgICIiIgorICBvdXRwdXRfemlwID0gemlwZmlsZS5aaXBGaWxlKAorICAgICAgaW5wdXRfZmlsZSwgJ2EnLCBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAjIFdyaXRlIHRoZSBjdXJyZW50IG1ldGFkYXRhIGVudHJ5IHdpdGggcGxhY2Vob2xkZXJzLgorICBmb3IgcHJvcGVydHlfZmlsZXMgaW4gbmVlZGVkX3Byb3BlcnR5X2ZpbGVzOgorICAgIG1ldGFkYXRhW3Byb3BlcnR5X2ZpbGVzLm5hbWVdID0gcHJvcGVydHlfZmlsZXMuQ29tcHV0ZShvdXRwdXRfemlwKQorICBXcml0ZU1ldGFkYXRhKG1ldGFkYXRhLCBvdXRwdXRfemlwKQorICBjb21tb24uWmlwQ2xvc2Uob3V0cHV0X3ppcCkKKworICAjIFNpZ25PdXRwdXQoKSwgd2hpY2ggaW4gdHVybiBjYWxscyBzaWduYXBrLmphciwgd2lsbCBwb3NzaWJseSByZW9yZGVyIHRoZQorICAjIFpJUCBlbnRyaWVzLCBhcyB3ZWxsIGFzIHBhZGRpbmcgdGhlIGVudHJ5IGhlYWRlcnMuIFdlIGRvIGEgcHJlbGltaW5hcnkKKyAgIyBzaWduaW5nICh3aXRoIGFuIGluY29tcGxldGUgbWV0YWRhdGEgZW50cnkpIHRvIGFsbG93IHRoYXQgdG8gaGFwcGVuLiBUaGVuCisgICMgY29tcHV0ZSB0aGUgWklQIGVudHJ5IG9mZnNldHMsIHdyaXRlIGJhY2sgdGhlIGZpbmFsIG1ldGFkYXRhIGFuZCBkbyB0aGUKKyAgIyBmaW5hbCBzaWduaW5nLgorICBpZiBPUFRJT05TLm5vX3NpZ25pbmc6CisgICAgcHJlbGltX3NpZ25pbmcgPSBpbnB1dF9maWxlCisgIGVsc2U6CisgICAgcHJlbGltX3NpZ25pbmcgPSBjb21tb24uTWFrZVRlbXBGaWxlKHN1ZmZpeD0nLnppcCcpCisgICAgU2lnbk91dHB1dChpbnB1dF9maWxlLCBwcmVsaW1fc2lnbmluZykKKworICAjIE9wZW4gdGhlIHNpZ25lZCB6aXAuIENvbXB1dGUgdGhlIGZpbmFsIG1ldGFkYXRhIHRoYXQncyBuZWVkZWQgZm9yIHN0cmVhbWluZy4KKyAgd2l0aCB6aXBmaWxlLlppcEZpbGUocHJlbGltX3NpZ25pbmcsICdyJykgYXMgcHJlbGltX3NpZ25pbmdfemlwOgorICAgIGZvciBwcm9wZXJ0eV9maWxlcyBpbiBuZWVkZWRfcHJvcGVydHlfZmlsZXM6CisgICAgICBtZXRhZGF0YVtwcm9wZXJ0eV9maWxlcy5uYW1lXSA9IHByb3BlcnR5X2ZpbGVzLkZpbmFsaXplKAorICAgICAgICAgIHByZWxpbV9zaWduaW5nX3ppcCwgbGVuKG1ldGFkYXRhW3Byb3BlcnR5X2ZpbGVzLm5hbWVdKSkKKworICAjIFJlcGxhY2UgdGhlIE1FVEFEQVRBIGVudHJ5LgorICBjb21tb24uWmlwRGVsZXRlKHByZWxpbV9zaWduaW5nLCBNRVRBREFUQV9OQU1FKQorICBvdXRwdXRfemlwID0gemlwZmlsZS5aaXBGaWxlKAorICAgICAgcHJlbGltX3NpZ25pbmcsICdhJywgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQpCisgIFdyaXRlTWV0YWRhdGEobWV0YWRhdGEsIG91dHB1dF96aXApCisgIGNvbW1vbi5aaXBDbG9zZShvdXRwdXRfemlwKQorCisgICMgUmUtc2lnbiB0aGUgcGFja2FnZSBhZnRlciB1cGRhdGluZyB0aGUgbWV0YWRhdGEgZW50cnkuCisgIGlmIE9QVElPTlMubm9fc2lnbmluZzoKKyAgICBvdXRwdXRfZmlsZSA9IHByZWxpbV9zaWduaW5nCisgIGVsc2U6CisgICAgU2lnbk91dHB1dChwcmVsaW1fc2lnbmluZywgb3V0cHV0X2ZpbGUpCisKKyAgIyBSZW9wZW4gdGhlIGZpbmFsIHNpZ25lZCB6aXAgdG8gZG91YmxlIGNoZWNrIHRoZSBzdHJlYW1pbmcgbWV0YWRhdGEuCisgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlLCAncicpIGFzIG91dHB1dF96aXA6CisgICAgZm9yIHByb3BlcnR5X2ZpbGVzIGluIG5lZWRlZF9wcm9wZXJ0eV9maWxlczoKKyAgICAgIHByb3BlcnR5X2ZpbGVzLlZlcmlmeShvdXRwdXRfemlwLCBtZXRhZGF0YVtwcm9wZXJ0eV9maWxlcy5uYW1lXS5zdHJpcCgpKQorCisKK2RlZiBXcml0ZUJsb2NrSW5jcmVtZW50YWxPVEFQYWNrYWdlKHRhcmdldF96aXAsIHNvdXJjZV96aXAsIG91dHB1dF9maWxlKToKKyAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oT1BUSU9OUy50YXJnZXRfaW5mb19kaWN0LCBPUFRJT05TLm9lbV9kaWN0cykKKyAgc291cmNlX2luZm8gPSBCdWlsZEluZm8oT1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0LCBPUFRJT05TLm9lbV9kaWN0cykKKworICB0YXJnZXRfYXBpX3ZlcnNpb24gPSB0YXJnZXRfaW5mb1sicmVjb3ZlcnlfYXBpX3ZlcnNpb24iXQorICBzb3VyY2VfYXBpX3ZlcnNpb24gPSBzb3VyY2VfaW5mb1sicmVjb3ZlcnlfYXBpX3ZlcnNpb24iXQorICBpZiBzb3VyY2VfYXBpX3ZlcnNpb24gPT0gMDoKKyAgICBwcmludCgiV0FSTklORzogZ2VuZXJhdGluZyBlZGlmeSBzY3JpcHQgZm9yIGEgc291cmNlIHRoYXQgIgorICAgICAgICAgICJjYW4ndCBpbnN0YWxsIGl0LiIpCisKKyAgc2NyaXB0ID0gZWRpZnlfZ2VuZXJhdG9yLkVkaWZ5R2VuZXJhdG9yKAorICAgICAgc291cmNlX2FwaV92ZXJzaW9uLCB0YXJnZXRfaW5mbywgZnN0YWI9c291cmNlX2luZm9bImZzdGFiIl0pCisKKyAgaWYgdGFyZ2V0X2luZm8ub2VtX3Byb3BzIG9yIHNvdXJjZV9pbmZvLm9lbV9wcm9wczoKKyAgICBpZiBub3QgT1BUSU9OUy5vZW1fbm9fbW91bnQ6CisgICAgICBzb3VyY2VfaW5mby5Xcml0ZU1vdW50T2VtU2NyaXB0KHNjcmlwdCkKKworICBtZXRhZGF0YSA9IEdldFBhY2thZ2VNZXRhZGF0YSh0YXJnZXRfaW5mbywgc291cmNlX2luZm8pCisKKyAgaWYgbm90IE9QVElPTlMubm9fc2lnbmluZzoKKyAgICBzdGFnaW5nX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHN1ZmZpeD0nLnppcCcpCisgIGVsc2U6CisgICAgc3RhZ2luZ19maWxlID0gb3V0cHV0X2ZpbGUKKworICBvdXRwdXRfemlwID0gemlwZmlsZS5aaXBGaWxlKAorICAgICAgc3RhZ2luZ19maWxlLCAidyIsIGNvbXByZXNzaW9uPXppcGZpbGUuWklQX0RFRkxBVEVEKQogCiAgIGRldmljZV9zcGVjaWZpYyA9IGNvbW1vbi5EZXZpY2VTcGVjaWZpY1BhcmFtcygKICAgICAgIHNvdXJjZV96aXA9c291cmNlX3ppcCwKLSAgICAgIHNvdXJjZV92ZXJzaW9uPXNvdXJjZV92ZXJzaW9uLAorICAgICAgc291cmNlX3ZlcnNpb249c291cmNlX2FwaV92ZXJzaW9uLAogICAgICAgdGFyZ2V0X3ppcD10YXJnZXRfemlwLAotICAgICAgdGFyZ2V0X3ZlcnNpb249dGFyZ2V0X3ZlcnNpb24sCisgICAgICB0YXJnZXRfdmVyc2lvbj10YXJnZXRfYXBpX3ZlcnNpb24sCiAgICAgICBvdXRwdXRfemlwPW91dHB1dF96aXAsCiAgICAgICBzY3JpcHQ9c2NyaXB0LAogICAgICAgbWV0YWRhdGE9bWV0YWRhdGEsCi0gICAgICBpbmZvX2RpY3Q9T1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0KQotCi0gIHNvdXJjZV9mcCA9IENhbGN1bGF0ZUZpbmdlcnByaW50KHNvdXJjZV9vZW1fcHJvcHMsIG9lbV9kaWN0cyBhbmQgb2VtX2RpY3RzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QpCi0gIHRhcmdldF9mcCA9IENhbGN1bGF0ZUZpbmdlcnByaW50KHRhcmdldF9vZW1fcHJvcHMsIG9lbV9kaWN0cyBhbmQgb2VtX2RpY3RzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05TLnRhcmdldF9pbmZvX2RpY3QpCi0gIG1ldGFkYXRhWyJwcmUtYnVpbGQiXSA9IHNvdXJjZV9mcAotICBtZXRhZGF0YVsicG9zdC1idWlsZCJdID0gdGFyZ2V0X2ZwCi0gIG1ldGFkYXRhWyJwcmUtYnVpbGQtaW5jcmVtZW50YWwiXSA9IEdldEJ1aWxkUHJvcCgKLSAgICAgICJyby5idWlsZC52ZXJzaW9uLmluY3JlbWVudGFsIiwgT1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0KQotICBtZXRhZGF0YVsicG9zdC1idWlsZC1pbmNyZW1lbnRhbCJdID0gR2V0QnVpbGRQcm9wKAotICAgICAgInJvLmJ1aWxkLnZlcnNpb24uaW5jcmVtZW50YWwiLCBPUFRJT05TLnRhcmdldF9pbmZvX2RpY3QpCisgICAgICBpbmZvX2RpY3Q9c291cmNlX2luZm8pCiAKICAgc291cmNlX2Jvb3QgPSBjb21tb24uR2V0Qm9vdGFibGVJbWFnZSgKLSAgICAgICIvdG1wL2Jvb3QuaW1nIiwgImJvb3QuaW1nIiwgT1BUSU9OUy5zb3VyY2VfdG1wLCAiQk9PVCIsCi0gICAgICBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QpCisgICAgICAiL3RtcC9ib290LmltZyIsICJib290LmltZyIsIE9QVElPTlMuc291cmNlX3RtcCwgIkJPT1QiLCBzb3VyY2VfaW5mbykKICAgdGFyZ2V0X2Jvb3QgPSBjb21tb24uR2V0Qm9vdGFibGVJbWFnZSgKLSAgICAgICIvdG1wL2Jvb3QuaW1nIiwgImJvb3QuaW1nIiwgT1BUSU9OUy50YXJnZXRfdG1wLCAiQk9PVCIpCisgICAgICAiL3RtcC9ib290LmltZyIsICJib290LmltZyIsIE9QVElPTlMudGFyZ2V0X3RtcCwgIkJPT1QiLCB0YXJnZXRfaW5mbykKICAgdXBkYXRpbmdfYm9vdCA9IChub3QgT1BUSU9OUy50d29fc3RlcCBhbmQKICAgICAgICAgICAgICAgICAgICAoc291cmNlX2Jvb3QuZGF0YSAhPSB0YXJnZXRfYm9vdC5kYXRhKSkKIAogICB0YXJnZXRfcmVjb3ZlcnkgPSBjb21tb24uR2V0Qm9vdGFibGVJbWFnZSgKICAgICAgICIvdG1wL3JlY292ZXJ5LmltZyIsICJyZWNvdmVyeS5pbWciLCBPUFRJT05TLnRhcmdldF90bXAsICJSRUNPVkVSWSIpCiAKLSAgc3lzdGVtX3NyYyA9IEdldEltYWdlKCJzeXN0ZW0iLCBPUFRJT05TLnNvdXJjZV90bXApCi0gIHN5c3RlbV90Z3QgPSBHZXRJbWFnZSgic3lzdGVtIiwgT1BUSU9OUy50YXJnZXRfdG1wKQorICAjIFdoZW4gdGFyZ2V0IHVzZXMgJ0JPQVJEX0VYVDRfU0hBUkVfRFVQX0JMT0NLUyA6PSB0cnVlJywgaW1hZ2VzIG1heSBjb250YWluCisgICMgc2hhcmVkIGJsb2NrcyAoaS5lLiBzb21lIGJsb2NrcyB3aWxsIHNob3cgdXAgaW4gbXVsdGlwbGUgZmlsZXMnIGJsb2NrCisgICMgbGlzdCkuIFdlIGNhbiBvbmx5IGFsbG9jYXRlIHN1Y2ggc2hhcmVkIGJsb2NrcyB0byB0aGUgZmlyc3QgIm93bmVyIiwgYW5kCisgICMgZGlzYWJsZSBpbWdkaWZmIGZvciBhbGwgbGF0ZXIgb2NjdXJyZW5jZXMuCisgIGFsbG93X3NoYXJlZF9ibG9ja3MgPSAoc291cmNlX2luZm8uZ2V0KCdleHQ0X3NoYXJlX2R1cF9ibG9ja3MnKSA9PSAidHJ1ZSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaW5mby5nZXQoJ2V4dDRfc2hhcmVfZHVwX2Jsb2NrcycpID09ICJ0cnVlIikKKyAgc3lzdGVtX3NyYyA9IGNvbW1vbi5HZXRTcGFyc2VJbWFnZSgic3lzdGVtIiwgT1BUSU9OUy5zb3VyY2VfdG1wLCBzb3VyY2VfemlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3NoYXJlZF9ibG9ja3MpCisgIHN5c3RlbV90Z3QgPSBjb21tb24uR2V0U3BhcnNlSW1hZ2UoInN5c3RlbSIsIE9QVElPTlMudGFyZ2V0X3RtcCwgdGFyZ2V0X3ppcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19zaGFyZWRfYmxvY2tzKQogCi0gIGJsb2NraW1nZGlmZl92ZXJzaW9uID0gMQotICBpZiBPUFRJT05TLmluZm9fZGljdDoKLSAgICBibG9ja2ltZ2RpZmZfdmVyc2lvbiA9IG1heCgKLSAgICAgICAgaW50KGkpIGZvciBpIGluCi0gICAgICAgIE9QVElPTlMuaW5mb19kaWN0LmdldCgiYmxvY2tpbWdkaWZmX3ZlcnNpb25zIiwgIjEiKS5zcGxpdCgiLCIpKQorICBibG9ja2ltZ2RpZmZfdmVyc2lvbiA9IG1heCgKKyAgICAgIGludChpKSBmb3IgaSBpbiB0YXJnZXRfaW5mby5nZXQoImJsb2NraW1nZGlmZl92ZXJzaW9ucyIsICIxIikuc3BsaXQoIiwiKSkKKyAgYXNzZXJ0IGJsb2NraW1nZGlmZl92ZXJzaW9uID49IDMKIAogICAjIENoZWNrIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgc291cmNlIHN5c3RlbSBwYXJ0aXRpb24gZm9yIHJlbW91bnQgUi9XIG9ubHkKICAgIyBpZiB0aGUgZmlsZXN5c3RlbSBpcyBleHQ0LgotICBzeXN0ZW1fc3JjX3BhcnRpdGlvbiA9IE9QVElPTlMuc291cmNlX2luZm9fZGljdFsiZnN0YWIiXVsiL3N5c3RlbSJdCisgIHN5c3RlbV9zcmNfcGFydGl0aW9uID0gc291cmNlX2luZm9bImZzdGFiIl1bIi9zeXN0ZW0iXQogICBjaGVja19maXJzdF9ibG9jayA9IHN5c3RlbV9zcmNfcGFydGl0aW9uLmZzX3R5cGUgPT0gImV4dDQiCiAgICMgRGlzYWJsZSB1c2luZyBpbWdkaWZmIGZvciBzcXVhc2hmcy4gJ2ltZ2RpZmYgLXonIGV4cGVjdHMgaW5wdXQgZmlsZXMgdG8gYmUKICAgIyBpbiB6aXAgZm9ybWF0cy4gSG93ZXZlciB3aXRoIHNxdWFzaGZzLCBhKSBhbGwgZmlsZXMgYXJlIGNvbXByZXNzZWQgaW4gTFo0OwogICAjIGIpIHRoZSBibG9ja3MgbGlzdGVkIGluIGJsb2NrIG1hcCBtYXkgbm90IGNvbnRhaW4gYWxsIHRoZSBieXRlcyBmb3IgYSBnaXZlbgogICAjIGZpbGUgKGJlY2F1c2UgdGhleSdyZSByb3VuZGVkIHRvIGJlIDRLLWFsaWduZWQpLgotICBzeXN0ZW1fdGd0X3BhcnRpdGlvbiA9IE9QVElPTlMudGFyZ2V0X2luZm9fZGljdFsiZnN0YWIiXVsiL3N5c3RlbSJdCisgIHN5c3RlbV90Z3RfcGFydGl0aW9uID0gdGFyZ2V0X2luZm9bImZzdGFiIl1bIi9zeXN0ZW0iXQogICBkaXNhYmxlX2ltZ2RpZmYgPSAoc3lzdGVtX3NyY19wYXJ0aXRpb24uZnNfdHlwZSA9PSAic3F1YXNoZnMiIG9yCiAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1fdGd0X3BhcnRpdGlvbi5mc190eXBlID09ICJzcXVhc2hmcyIpCiAgIHN5c3RlbV9kaWZmID0gY29tbW9uLkJsb2NrRGlmZmVyZW5jZSgic3lzdGVtIiwgc3lzdGVtX3RndCwgc3lzdGVtX3NyYywKQEAgLTcxNCwxMiArMTM3OCwxNCBAQAogICBpZiBIYXNWZW5kb3JQYXJ0aXRpb24odGFyZ2V0X3ppcCk6CiAgICAgaWYgbm90IEhhc1ZlbmRvclBhcnRpdGlvbihzb3VyY2VfemlwKToKICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2FuJ3QgZ2VuZXJhdGUgaW5jcmVtZW50YWwgdGhhdCBhZGRzIC92ZW5kb3IiKQotICAgIHZlbmRvcl9zcmMgPSBHZXRJbWFnZSgidmVuZG9yIiwgT1BUSU9OUy5zb3VyY2VfdG1wKQotICAgIHZlbmRvcl90Z3QgPSBHZXRJbWFnZSgidmVuZG9yIiwgT1BUSU9OUy50YXJnZXRfdG1wKQorICAgIHZlbmRvcl9zcmMgPSBjb21tb24uR2V0U3BhcnNlSW1hZ2UoInZlbmRvciIsIE9QVElPTlMuc291cmNlX3RtcCwgc291cmNlX3ppcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3NoYXJlZF9ibG9ja3MpCisgICAgdmVuZG9yX3RndCA9IGNvbW1vbi5HZXRTcGFyc2VJbWFnZSgidmVuZG9yIiwgT1BUSU9OUy50YXJnZXRfdG1wLCB0YXJnZXRfemlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfc2hhcmVkX2Jsb2NrcykKIAogICAgICMgQ2hlY2sgZmlyc3QgYmxvY2sgb2YgdmVuZG9yIHBhcnRpdGlvbiBmb3IgcmVtb3VudCBSL1cgb25seSBpZgogICAgICMgZGlzayB0eXBlIGlzIGV4dDQKLSAgICB2ZW5kb3JfcGFydGl0aW9uID0gT1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0WyJmc3RhYiJdWyIvdmVuZG9yIl0KKyAgICB2ZW5kb3JfcGFydGl0aW9uID0gc291cmNlX2luZm9bImZzdGFiIl1bIi92ZW5kb3IiXQogICAgIGNoZWNrX2ZpcnN0X2Jsb2NrID0gdmVuZG9yX3BhcnRpdGlvbi5mc190eXBlID09ICJleHQ0IgogICAgIGRpc2FibGVfaW1nZGlmZiA9IHZlbmRvcl9wYXJ0aXRpb24uZnNfdHlwZSA9PSAic3F1YXNoZnMiCiAgICAgdmVuZG9yX2RpZmYgPSBjb21tb24uQmxvY2tEaWZmZXJlbmNlKCJ2ZW5kb3IiLCB2ZW5kb3JfdGd0LCB2ZW5kb3Jfc3JjLApAQCAtNzMwLDEwICsxMzk2LDEwIEBACiAgICAgdmVuZG9yX2RpZmYgPSBOb25lCiAKICAgQWRkQ29tcGF0aWJpbGl0eUFyY2hpdmVJZlRyZWJsZUVuYWJsZWQoCi0gICAgICB0YXJnZXRfemlwLCBvdXRwdXRfemlwLCBPUFRJT05TLnRhcmdldF9pbmZvX2RpY3QsCi0gICAgICBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QpCisgICAgICB0YXJnZXRfemlwLCBvdXRwdXRfemlwLCB0YXJnZXRfaW5mbywgc291cmNlX2luZm8pCiAKLSAgQXBwZW5kQXNzZXJ0aW9ucyhzY3JpcHQsIE9QVElPTlMudGFyZ2V0X2luZm9fZGljdCwgb2VtX2RpY3RzKQorICAjIEFzc2VydGlvbnMgKGUuZy4gZGV2aWNlIHByb3BlcnRpZXMgY2hlY2spLgorICB0YXJnZXRfaW5mby5Xcml0ZURldmljZUFzc2VydGlvbnMoc2NyaXB0LCBPUFRJT05TLm9lbV9ub19tb3VudCkKICAgZGV2aWNlX3NwZWNpZmljLkluY3JlbWVudGFsT1RBX0Fzc2VydGlvbnMoKQogCiAgICMgVHdvLXN0ZXAgaW5jcmVtZW50YWwgcGFja2FnZSBzdHJhdGVneSAoaW4gY2hyb25vbG9naWNhbCBvcmRlciwKQEAgLTc1OSwxMiArMTQyNSwxMiBAQAogICAjICAgIChhbGxvdyByZWNvdmVyeSB0byBtYXJrIGl0c2VsZiBmaW5pc2hlZCBhbmQgcmVib290KQogCiAgIGlmIE9QVElPTlMudHdvX3N0ZXA6Ci0gICAgaWYgbm90IE9QVElPTlMuc291cmNlX2luZm9fZGljdC5nZXQoIm11bHRpc3RhZ2Vfc3VwcG9ydCIsIE5vbmUpOgorICAgIGlmIG5vdCBzb3VyY2VfaW5mby5nZXQoIm11bHRpc3RhZ2Vfc3VwcG9ydCIpOgogICAgICAgYXNzZXJ0IEZhbHNlLCAidHdvLXN0ZXAgcGFja2FnZXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkIgotICAgIGZzID0gT1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0WyJmc3RhYiJdWyIvbWlzYyJdCisgICAgZnMgPSBzb3VyY2VfaW5mb1siZnN0YWIiXVsiL21pc2MiXQogICAgIGFzc2VydCBmcy5mc190eXBlLnVwcGVyKCkgPT0gIkVNTUMiLCBcCiAgICAgICAgICJ0d28tc3RlcCBwYWNrYWdlcyBvbmx5IHN1cHBvcnRlZCBvbiBkZXZpY2VzIHdpdGggRU1NQyAvbWlzYyBwYXJ0aXRpb25zIgotICAgIGJjYl9kZXYgPSB7ImJjYl9kZXYiOiBmcy5kZXZpY2V9CisgICAgYmNiX2RldiA9IHsiYmNiX2RldiIgOiBmcy5kZXZpY2V9CiAgICAgY29tbW9uLlppcFdyaXRlU3RyKG91dHB1dF96aXAsICJyZWNvdmVyeS5pbWciLCB0YXJnZXRfcmVjb3ZlcnkuZGF0YSkKICAgICBzY3JpcHQuQXBwZW5kRXh0cmEoIiIiCiBpZiBnZXRfc3RhZ2UoIiUoYmNiX2RldilzIikgPT0gIjIvMyIgdGhlbgpAQCAtNzg0LDM5ICsxNDUwLDE0IEBACiAgICAgc2NyaXB0LkNvbW1lbnQoIlN0YWdlIDEvMyIpCiAKICAgIyBEdW1wIGZpbmdlcnByaW50cwotICBzY3JpcHQuUHJpbnQoIlNvdXJjZTogJXMiICUgKHNvdXJjZV9mcCwpKQotICBzY3JpcHQuUHJpbnQoIlRhcmdldDogJXMiICUgKHRhcmdldF9mcCwpKQorICBzY3JpcHQuUHJpbnQoIlNvdXJjZToge30iLmZvcm1hdChzb3VyY2VfaW5mby5maW5nZXJwcmludCkpCisgIHNjcmlwdC5QcmludCgiVGFyZ2V0OiB7fSIuZm9ybWF0KHRhcmdldF9pbmZvLmZpbmdlcnByaW50KSkKIAogICBzY3JpcHQuUHJpbnQoIlZlcmlmeWluZyBjdXJyZW50IHN5c3RlbS4uLiIpCiAKICAgZGV2aWNlX3NwZWNpZmljLkluY3JlbWVudGFsT1RBX1ZlcmlmeUJlZ2luKCkKIAotICAjIFdoZW4gYmxvY2tpbWdkaWZmIHZlcnNpb24gaXMgbGVzcyB0aGFuIDMgKG5vbi1yZXN1bWFibGUgYmxvY2stYmFzZWQgT1RBKSwKLSAgIyBwYXRjaGluZyBvbiBhIGRldmljZSB0aGF0J3MgYWxyZWFkeSBvbiB0aGUgdGFyZ2V0IGJ1aWxkIHdpbGwgZGFtYWdlIHRoZQotICAjIHN5c3RlbS4gQmVjYXVzZSBvcGVyYXRpb25zIGxpa2UgbW92ZSBkb24ndCBjaGVjayB0aGUgYmxvY2sgc3RhdGUsIHRoZXkKLSAgIyBhbHdheXMgYXBwbHkgdGhlIGNoYW5nZXMgdW5jb25kaXRpb25hbGx5LgotICBpZiBibG9ja2ltZ2RpZmZfdmVyc2lvbiA8PSAyOgotICAgIGlmIHNvdXJjZV9vZW1fcHJvcHMgaXMgTm9uZToKLSAgICAgIHNjcmlwdC5Bc3NlcnRTb21lRmluZ2VycHJpbnQoc291cmNlX2ZwKQotICAgIGVsc2U6Ci0gICAgICBzY3JpcHQuQXNzZXJ0U29tZVRodW1icHJpbnQoCi0gICAgICAgICAgR2V0QnVpbGRQcm9wKCJyby5idWlsZC50aHVtYnByaW50IiwgT1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0KSkKLQotICBlbHNlOiAjIGJsb2NraW1nZGlmZl92ZXJzaW9uID4gMgotICAgIGlmIHNvdXJjZV9vZW1fcHJvcHMgaXMgTm9uZSBhbmQgdGFyZ2V0X29lbV9wcm9wcyBpcyBOb25lOgotICAgICAgc2NyaXB0LkFzc2VydFNvbWVGaW5nZXJwcmludChzb3VyY2VfZnAsIHRhcmdldF9mcCkKLSAgICBlbGlmIHNvdXJjZV9vZW1fcHJvcHMgaXMgbm90IE5vbmUgYW5kIHRhcmdldF9vZW1fcHJvcHMgaXMgbm90IE5vbmU6Ci0gICAgICBzY3JpcHQuQXNzZXJ0U29tZVRodW1icHJpbnQoCi0gICAgICAgICAgR2V0QnVpbGRQcm9wKCJyby5idWlsZC50aHVtYnByaW50IiwgT1BUSU9OUy50YXJnZXRfaW5mb19kaWN0KSwKLSAgICAgICAgICBHZXRCdWlsZFByb3AoInJvLmJ1aWxkLnRodW1icHJpbnQiLCBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QpKQotICAgIGVsaWYgc291cmNlX29lbV9wcm9wcyBpcyBOb25lIGFuZCB0YXJnZXRfb2VtX3Byb3BzIGlzIG5vdCBOb25lOgotICAgICAgc2NyaXB0LkFzc2VydEZpbmdlcnByaW50T3JUaHVtYnByaW50KAotICAgICAgICAgIHNvdXJjZV9mcCwKLSAgICAgICAgICBHZXRCdWlsZFByb3AoInJvLmJ1aWxkLnRodW1icHJpbnQiLCBPUFRJT05TLnRhcmdldF9pbmZvX2RpY3QpKQotICAgIGVsc2U6Ci0gICAgICBzY3JpcHQuQXNzZXJ0RmluZ2VycHJpbnRPclRodW1icHJpbnQoCi0gICAgICAgICAgdGFyZ2V0X2ZwLAotICAgICAgICAgIEdldEJ1aWxkUHJvcCgicm8uYnVpbGQudGh1bWJwcmludCIsIE9QVElPTlMuc291cmNlX2luZm9fZGljdCkpCisgIFdyaXRlRmluZ2VycHJpbnRBc3NlcnRpb24oc2NyaXB0LCB0YXJnZXRfaW5mbywgc291cmNlX2luZm8pCiAKICAgIyBDaGVjayB0aGUgcmVxdWlyZWQgY2FjaGUgc2l6ZSAoaS5lLiBzdGFzaGVkIGJsb2NrcykuCiAgIHNpemUgPSBbXQpAQCAtODI2LDggKzE0NjcsNyBAQAogICAgIHNpemUuYXBwZW5kKHZlbmRvcl9kaWZmLnJlcXVpcmVkX2NhY2hlKQogCiAgIGlmIHVwZGF0aW5nX2Jvb3Q6Ci0gICAgYm9vdF90eXBlLCBib290X2RldmljZSA9IGNvbW1vbi5HZXRUeXBlQW5kRGV2aWNlKAotICAgICAgICAiL2Jvb3QiLCBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QpCisgICAgYm9vdF90eXBlLCBib290X2RldmljZSA9IGNvbW1vbi5HZXRUeXBlQW5kRGV2aWNlKCIvYm9vdCIsIHNvdXJjZV9pbmZvKQogICAgIGQgPSBjb21tb24uRGlmZmVyZW5jZSh0YXJnZXRfYm9vdCwgc291cmNlX2Jvb3QpCiAgICAgXywgXywgZCA9IGQuQ29tcHV0ZVBhdGNoKCkKICAgICBpZiBkIGlzIE5vbmU6CkBAIC05MTcsNyArMTU1Nyw2IEBACiAgIGlmIE9QVElPTlMud2lwZV91c2VyX2RhdGE6CiAgICAgc2NyaXB0LlByaW50KCJFcmFzaW5nIHVzZXIgZGF0YS4uLiIpCiAgICAgc2NyaXB0LkZvcm1hdFBhcnRpdGlvbigiL2RhdGEiKQotICAgIG1ldGFkYXRhWyJvdGEtd2lwZSJdID0gInllcyIKIAogICBpZiBPUFRJT05TLnR3b19zdGVwOgogICAgIHNjcmlwdC5BcHBlbmRFeHRyYSgiIiIKQEAgLTkzNCwzNTQgKzE1NzMsMTcyIEBACiAgIGVsc2U6CiAgICAgc2NyaXB0LkFkZFRvWmlwKHRhcmdldF96aXAsIG91dHB1dF96aXAsIGlucHV0X3BhdGg9T1BUSU9OUy51cGRhdGVyX2JpbmFyeSkKICAgbWV0YWRhdGFbIm90YS1yZXF1aXJlZC1jYWNoZSJdID0gc3RyKHNjcmlwdC5yZXF1aXJlZF9jYWNoZSkKLSAgV3JpdGVNZXRhZGF0YShtZXRhZGF0YSwgb3V0cHV0X3ppcCkKKworICAjIFdlIGhhdmVuJ3Qgd3JpdHRlbiB0aGUgbWV0YWRhdGEgZW50cnkgeWV0LCB3aGljaCB3aWxsIGJlIGhhbmRsZWQgaW4KKyAgIyBGaW5hbGl6ZU1ldGFkYXRhKCkuCisgIGNvbW1vbi5aaXBDbG9zZShvdXRwdXRfemlwKQorCisgICMgU2lnbiB0aGUgZ2VuZXJhdGVkIHppcCBwYWNrYWdlIHVubGVzcyBub19zaWduaW5nIGlzIHNwZWNpZmllZC4KKyAgbmVlZGVkX3Byb3BlcnR5X2ZpbGVzID0gKAorICAgICAgTm9uQWJPdGFQcm9wZXJ0eUZpbGVzKCksCisgICkKKyAgRmluYWxpemVNZXRhZGF0YShtZXRhZGF0YSwgc3RhZ2luZ19maWxlLCBvdXRwdXRfZmlsZSwgbmVlZGVkX3Byb3BlcnR5X2ZpbGVzKQogCiAKLWRlZiBXcml0ZVZlcmlmeVBhY2thZ2UoaW5wdXRfemlwLCBvdXRwdXRfemlwKToKLSAgc2NyaXB0ID0gZWRpZnlfZ2VuZXJhdG9yLkVkaWZ5R2VuZXJhdG9yKDMsIE9QVElPTlMuaW5mb19kaWN0KQorZGVmIEdldFRhcmdldEZpbGVzWmlwRm9yU2Vjb25kYXJ5SW1hZ2VzKGlucHV0X2ZpbGUsIHNraXBfcG9zdGluc3RhbGw9RmFsc2UpOgorICAiIiJSZXR1cm5zIGEgdGFyZ2V0LWZpbGVzLnppcCBmaWxlIGZvciBnZW5lcmF0aW5nIHNlY29uZGFyeSBwYXlsb2FkLgogCi0gIG9lbV9wcm9wcyA9IE9QVElPTlMuaW5mb19kaWN0LmdldCgib2VtX2ZpbmdlcnByaW50X3Byb3BlcnRpZXMiKQotICByZWNvdmVyeV9tb3VudF9vcHRpb25zID0gT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KAotICAgICAgInJlY292ZXJ5X21vdW50X29wdGlvbnMiKQotICBvZW1fZGljdHMgPSBOb25lCi0gIGlmIG9lbV9wcm9wczoKLSAgICBvZW1fZGljdHMgPSBfTG9hZE9lbURpY3RzKHNjcmlwdCwgcmVjb3ZlcnlfbW91bnRfb3B0aW9ucykKKyAgQWx0aG91Z2ggdGhlIG9yaWdpbmFsIHRhcmdldC1maWxlcy56aXAgYWxyZWFkeSBjb250YWlucyBzZWNvbmRhcnkgc2xvdAorICBpbWFnZXMgKGkuZS4gSU1BR0VTL3N5c3RlbV9vdGhlci5pbWcpLCB3ZSBuZWVkIHRvIHJlbmFtZSB0aGUgZmlsZXMgdG8gdGhlCisgIG9uZXMgd2l0aG91dCBfb3RoZXIgc3VmZml4LiBOb3RlIHRoYXQgd2UgY2Fubm90IGluc3RlYWQgbW9kaWZ5IHRoZSBuYW1lcyBpbgorICBNRVRBL2FiX3BhcnRpdGlvbnMudHh0LCBiZWNhdXNlIHRoZXJlIGFyZSBubyBtYXRjaGluZyBwYXJ0aXRpb25zIG9uIGRldmljZS4KIAotICB0YXJnZXRfZnAgPSBDYWxjdWxhdGVGaW5nZXJwcmludChvZW1fcHJvcHMsIG9lbV9kaWN0cyBhbmQgb2VtX2RpY3RzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05TLmluZm9fZGljdCkKLSAgbWV0YWRhdGEgPSB7Ci0gICAgICAicG9zdC1idWlsZCI6IHRhcmdldF9mcCwKLSAgICAgICJwcmUtZGV2aWNlIjogR2V0T2VtUHJvcGVydHkoInJvLnByb2R1Y3QuZGV2aWNlIiwgb2VtX3Byb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZW1fZGljdHMgYW5kIG9lbV9kaWN0c1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OUy5pbmZvX2RpY3QpLAotICAgICAgInBvc3QtdGltZXN0YW1wIjogR2V0QnVpbGRQcm9wKCJyby5idWlsZC5kYXRlLnV0YyIsIE9QVElPTlMuaW5mb19kaWN0KSwKLSAgfQorICBGb3IgdGhlIHBhcnRpdGlvbnMgdGhhdCBkb24ndCBoYXZlIHNlY29uZGFyeSBpbWFnZXMsIHRoZSBvbmVzIGZvciBwcmltYXJ5CisgIHNsb3Qgd2lsbCBiZSB1c2VkLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIHZhbGlkIGJvb3QsIHZibWV0YSwKKyAgYm9vdGxvYWRlciBpbWFnZXMgaW4gdGhlIGluYWN0aXZlIHNsb3QuCiAKLSAgZGV2aWNlX3NwZWNpZmljID0gY29tbW9uLkRldmljZVNwZWNpZmljUGFyYW1zKAotICAgICAgaW5wdXRfemlwPWlucHV0X3ppcCwKLSAgICAgIGlucHV0X3ZlcnNpb249T1BUSU9OUy5pbmZvX2RpY3RbInJlY292ZXJ5X2FwaV92ZXJzaW9uIl0sCi0gICAgICBvdXRwdXRfemlwPW91dHB1dF96aXAsCi0gICAgICBzY3JpcHQ9c2NyaXB0LAotICAgICAgaW5wdXRfdG1wPU9QVElPTlMuaW5wdXRfdG1wLAotICAgICAgbWV0YWRhdGE9bWV0YWRhdGEsCi0gICAgICBpbmZvX2RpY3Q9T1BUSU9OUy5pbmZvX2RpY3QpCisgIEFyZ3M6CisgICAgaW5wdXRfZmlsZTogVGhlIGlucHV0IHRhcmdldC1maWxlcy56aXAgZmlsZS4KKyAgICBza2lwX3Bvc3RpbnN0YWxsOiBXaGV0aGVyIHRvIHNraXAgY29weWluZyB0aGUgcG9zdGluc3RhbGwgY29uZmlnIGZpbGUuCiAKLSAgQXBwZW5kQXNzZXJ0aW9ucyhzY3JpcHQsIE9QVElPTlMuaW5mb19kaWN0LCBvZW1fZGljdHMpCisgIFJldHVybnM6CisgICAgVGhlIGZpbGVuYW1lIG9mIHRoZSB0YXJnZXQtZmlsZXMuemlwIGZvciBnZW5lcmF0aW5nIHNlY29uZGFyeSBwYXlsb2FkLgorICAiIiIKKyAgdGFyZ2V0X2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0idGFyZ2V0ZmlsZXMtIiwgc3VmZml4PSIuemlwIikKKyAgdGFyZ2V0X3ppcCA9IHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZSwgJ3cnLCBhbGxvd1ppcDY0PVRydWUpCiAKLSAgc2NyaXB0LlByaW50KCJWZXJpZnlpbmcgZGV2aWNlIGltYWdlcyBhZ2FpbnN0ICVzLi4uIiAlIHRhcmdldF9mcCkKLSAgc2NyaXB0LkFwcGVuZEV4dHJhKCIiKQorICBpbnB1dF90bXAgPSBjb21tb24uVW56aXBUZW1wKGlucHV0X2ZpbGUsIFVOWklQX1BBVFRFUk4pCisgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlucHV0X2ZpbGUsICdyJykgYXMgaW5wdXRfemlwOgorICAgIGluZm9saXN0ID0gaW5wdXRfemlwLmluZm9saXN0KCkKIAotICBzY3JpcHQuUHJpbnQoIlZlcmlmeWluZyBib290Li4uIikKLSAgYm9vdF9pbWcgPSBjb21tb24uR2V0Qm9vdGFibGVJbWFnZSgKLSAgICAgICJib290LmltZyIsICJib290LmltZyIsIE9QVElPTlMuaW5wdXRfdG1wLCAiQk9PVCIpCi0gIGJvb3RfdHlwZSwgYm9vdF9kZXZpY2UgPSBjb21tb24uR2V0VHlwZUFuZERldmljZSgKLSAgICAgICIvYm9vdCIsIE9QVElPTlMuaW5mb19kaWN0KQotICBzY3JpcHQuVmVyaWZ5KCIlczolczolZDolcyIgJSAoCi0gICAgICBib290X3R5cGUsIGJvb3RfZGV2aWNlLCBib290X2ltZy5zaXplLCBib290X2ltZy5zaGExKSkKLSAgc2NyaXB0LkFwcGVuZEV4dHJhKCIiKQorICBmb3IgaW5mbyBpbiBpbmZvbGlzdDoKKyAgICB1bnppcHBlZF9maWxlID0gb3MucGF0aC5qb2luKGlucHV0X3RtcCwgKmluZm8uZmlsZW5hbWUuc3BsaXQoJy8nKSkKKyAgICBpZiBpbmZvLmZpbGVuYW1lID09ICdJTUFHRVMvc3lzdGVtX290aGVyLmltZyc6CisgICAgICBjb21tb24uWmlwV3JpdGUodGFyZ2V0X3ppcCwgdW56aXBwZWRfZmlsZSwgYXJjbmFtZT0nSU1BR0VTL3N5c3RlbS5pbWcnKQogCi0gIHNjcmlwdC5QcmludCgiVmVyaWZ5aW5nIHJlY292ZXJ5Li4uIikKLSAgcmVjb3ZlcnlfaW1nID0gY29tbW9uLkdldEJvb3RhYmxlSW1hZ2UoCi0gICAgICAicmVjb3ZlcnkuaW1nIiwgInJlY292ZXJ5LmltZyIsIE9QVElPTlMuaW5wdXRfdG1wLCAiUkVDT1ZFUlkiKQotICByZWNvdmVyeV90eXBlLCByZWNvdmVyeV9kZXZpY2UgPSBjb21tb24uR2V0VHlwZUFuZERldmljZSgKLSAgICAgICIvcmVjb3ZlcnkiLCBPUFRJT05TLmluZm9fZGljdCkKLSAgc2NyaXB0LlZlcmlmeSgiJXM6JXM6JWQ6JXMiICUgKAotICAgICAgcmVjb3ZlcnlfdHlwZSwgcmVjb3ZlcnlfZGV2aWNlLCByZWNvdmVyeV9pbWcuc2l6ZSwgcmVjb3ZlcnlfaW1nLnNoYTEpKQotICBzY3JpcHQuQXBwZW5kRXh0cmEoIiIpCisgICAgIyBQcmltYXJ5IGltYWdlcyBhbmQgZnJpZW5kcyBuZWVkIHRvIGJlIHNraXBwZWQgZXhwbGljaXRseS4KKyAgICBlbGlmIGluZm8uZmlsZW5hbWUgaW4gKCdJTUFHRVMvc3lzdGVtLmltZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnSU1BR0VTL3N5c3RlbS5tYXAnKToKKyAgICAgIHBhc3MKIAotICBzeXN0ZW1fdGd0ID0gR2V0SW1hZ2UoInN5c3RlbSIsIE9QVElPTlMuaW5wdXRfdG1wKQotICBzeXN0ZW1fdGd0LlJlc2V0RmlsZU1hcCgpCi0gIHN5c3RlbV9kaWZmID0gY29tbW9uLkJsb2NrRGlmZmVyZW5jZSgic3lzdGVtIiwgc3lzdGVtX3RndCwgc3JjPU5vbmUpCi0gIHN5c3RlbV9kaWZmLldyaXRlU3RyaWN0VmVyaWZ5U2NyaXB0KHNjcmlwdCkKKyAgICAjIFNraXAgY29weWluZyB0aGUgcG9zdGluc3RhbGwgY29uZmlnIGlmIHJlcXVlc3RlZC4KKyAgICBlbGlmIHNraXBfcG9zdGluc3RhbGwgYW5kIGluZm8uZmlsZW5hbWUgPT0gUE9TVElOU1RBTExfQ09ORklHOgorICAgICAgcGFzcwogCi0gIGlmIEhhc1ZlbmRvclBhcnRpdGlvbihpbnB1dF96aXApOgotICAgIHZlbmRvcl90Z3QgPSBHZXRJbWFnZSgidmVuZG9yIiwgT1BUSU9OUy5pbnB1dF90bXApCi0gICAgdmVuZG9yX3RndC5SZXNldEZpbGVNYXAoKQotICAgIHZlbmRvcl9kaWZmID0gY29tbW9uLkJsb2NrRGlmZmVyZW5jZSgidmVuZG9yIiwgdmVuZG9yX3RndCwgc3JjPU5vbmUpCi0gICAgdmVuZG9yX2RpZmYuV3JpdGVTdHJpY3RWZXJpZnlTY3JpcHQoc2NyaXB0KQorICAgIGVsaWYgaW5mby5maWxlbmFtZS5zdGFydHN3aXRoKCgnTUVUQS8nLCAnSU1BR0VTLycpKToKKyAgICAgIGNvbW1vbi5aaXBXcml0ZSh0YXJnZXRfemlwLCB1bnppcHBlZF9maWxlLCBhcmNuYW1lPWluZm8uZmlsZW5hbWUpCiAKLSAgIyBEZXZpY2Ugc3BlY2lmaWMgcGFydGl0aW9ucywgc3VjaCBhcyByYWRpbywgYm9vdGxvYWRlciBhbmQgZXRjLgotICBkZXZpY2Vfc3BlY2lmaWMuVmVyaWZ5T1RBX0Fzc2VydGlvbnMoKQorICBjb21tb24uWmlwQ2xvc2UodGFyZ2V0X3ppcCkKIAotICBzY3JpcHQuU2V0UHJvZ3Jlc3MoMS4wKQotICBzY3JpcHQuQWRkVG9aaXAoaW5wdXRfemlwLCBvdXRwdXRfemlwLCBpbnB1dF9wYXRoPU9QVElPTlMudXBkYXRlcl9iaW5hcnkpCi0gIG1ldGFkYXRhWyJvdGEtcmVxdWlyZWQtY2FjaGUiXSA9IHN0cihzY3JpcHQucmVxdWlyZWRfY2FjaGUpCi0gIFdyaXRlTWV0YWRhdGEobWV0YWRhdGEsIG91dHB1dF96aXApCisgIHJldHVybiB0YXJnZXRfZmlsZQorCisKK2RlZiBHZXRUYXJnZXRGaWxlc1ppcFdpdGhvdXRQb3N0aW5zdGFsbENvbmZpZyhpbnB1dF9maWxlKToKKyAgIiIiUmV0dXJucyBhIHRhcmdldC1maWxlcy56aXAgdGhhdCdzIG5vdCBjb250YWluaW5nIHBvc3RpbnN0YWxsX2NvbmZpZy50eHQuCisKKyAgVGhpcyBhbGxvd3MgYnJpbGxvX3VwZGF0ZV9wYXlsb2FkIHNjcmlwdCB0byBza2lwIHdyaXRpbmcgYWxsIHRoZSBwb3N0aW5zdGFsbAorICBob29rcyBpbiB0aGUgZ2VuZXJhdGVkIHBheWxvYWQuIFRoZSBpbnB1dCB0YXJnZXQtZmlsZXMuemlwIGZpbGUgd2lsbCBiZQorICBkdXBsaWNhdGVkLCB3aXRoICdNRVRBL3Bvc3RpbnN0YWxsX2NvbmZpZy50eHQnIHNraXBwZWQuIElmIGlucHV0X2ZpbGUgZG9lc24ndAorICBjb250YWluIHRoZSBwb3N0aW5zdGFsbF9jb25maWcudHh0IGVudHJ5LCB0aGUgaW5wdXQgZmlsZSB3aWxsIGJlIHJldHVybmVkLgorCisgIEFyZ3M6CisgICAgaW5wdXRfZmlsZTogVGhlIGlucHV0IHRhcmdldC1maWxlcy56aXAgZmlsZW5hbWUuCisKKyAgUmV0dXJuczoKKyAgICBUaGUgZmlsZW5hbWUgb2YgdGFyZ2V0LWZpbGVzLnppcCB0aGF0IGRvZXNuJ3QgY29udGFpbiBwb3N0aW5zdGFsbCBjb25maWcuCisgICIiIgorICAjIFdlIHNob3VsZCBvbmx5IG1ha2UgYSBjb3B5IGlmIHBvc3RpbnN0YWxsX2NvbmZpZyBlbnRyeSBleGlzdHMuCisgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlucHV0X2ZpbGUsICdyJykgYXMgaW5wdXRfemlwOgorICAgIGlmIFBPU1RJTlNUQUxMX0NPTkZJRyBub3QgaW4gaW5wdXRfemlwLm5hbWVsaXN0KCk6CisgICAgICByZXR1cm4gaW5wdXRfZmlsZQorCisgIHRhcmdldF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InRhcmdldGZpbGVzLSIsIHN1ZmZpeD0iLnppcCIpCisgIHNodXRpbC5jb3B5ZmlsZShpbnB1dF9maWxlLCB0YXJnZXRfZmlsZSkKKyAgY29tbW9uLlppcERlbGV0ZSh0YXJnZXRfZmlsZSwgUE9TVElOU1RBTExfQ09ORklHKQorICByZXR1cm4gdGFyZ2V0X2ZpbGUKIAogCiBkZWYgV3JpdGVBQk9UQVBhY2thZ2VXaXRoQnJpbGxvU2NyaXB0KHRhcmdldF9maWxlLCBvdXRwdXRfZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2ZpbGU9Tm9uZSk6Ci0gICIiIkdlbmVyYXRlIGFuIEFuZHJvaWQgT1RBIHBhY2thZ2UgdGhhdCBoYXMgQS9CIHVwZGF0ZSBwYXlsb2FkLiIiIgotCi0gIGRlZiBDb21wdXRlU3RyZWFtaW5nTWV0YWRhdGEoemlwX2ZpbGUsIHJlc2VydmVfc3BhY2U9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbGVuZ3RoPU5vbmUpOgotICAgICIiIkNvbXB1dGUgdGhlIHN0cmVhbWluZyBtZXRhZGF0YSBmb3IgYSBnaXZlbiB6aXAuCi0KLSAgICBXaGVuICdyZXNlcnZlX3NwYWNlJyBpcyBUcnVlLCB3ZSByZXNlcnZlIGV4dHJhIHNwYWNlIGZvciB0aGUgb2Zmc2V0IGFuZAotICAgIGxlbmd0aCBvZiB0aGUgbWV0YWRhdGEgZW50cnkgaXRzZWxmLCBhbHRob3VnaCB3ZSBkb24ndCBrbm93IHRoZSBmaW5hbAotICAgIHZhbHVlcyB1bnRpbCB0aGUgcGFja2FnZSBnZXRzIHNpZ25lZC4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZ2FpbgotICAgIGFmdGVyIHNpZ25pbmcuIFdlIHRoZW4gd3JpdGUgdGhlIGFjdHVhbCB2YWx1ZXMgYW5kIHBhZCB0aGUgc3RyaW5nIHRvIHRoZQotICAgIGxlbmd0aCB3ZSBzZXQgZWFybGllci4gTm90ZSB0aGF0IHdlIGNhbid0IHVzZSB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUKLSAgICBtZXRhZGF0YSBlbnRyeSBpbiB0aGUgc2Vjb25kIHJ1bi4gT3RoZXJ3aXNlIHRoZSBvZmZzZXRzIGZvciBvdGhlciBlbnRyaWVzCi0gICAgd2lsbCBiZSBjaGFuZ2luZyBhZ2Fpbi4KLSAgICAiIiIKLQotICAgIGRlZiBDb21wdXRlRW50cnlPZmZzZXRTaXplKG5hbWUpOgotICAgICAgIiIiQ29tcHV0ZSB0aGUgemlwIGVudHJ5IG9mZnNldCBhbmQgc2l6ZS4iIiIKLSAgICAgIGluZm8gPSB6aXBfZmlsZS5nZXRpbmZvKG5hbWUpCi0gICAgICBvZmZzZXQgPSBpbmZvLmhlYWRlcl9vZmZzZXQgKyBsZW4oaW5mby5GaWxlSGVhZGVyKCkpCi0gICAgICBzaXplID0gaW5mby5maWxlX3NpemUKLSAgICAgIHJldHVybiAnJXM6JWQ6JWQnICUgKG9zLnBhdGguYmFzZW5hbWUobmFtZSksIG9mZnNldCwgc2l6ZSkKLQotICAgICMgcGF5bG9hZC5iaW4gYW5kIHBheWxvYWRfcHJvcGVydGllcy50eHQgbXVzdCBleGlzdC4KLSAgICBvZmZzZXRzID0gW0NvbXB1dGVFbnRyeU9mZnNldFNpemUoJ3BheWxvYWQuYmluJyksCi0gICAgICAgICAgICAgICBDb21wdXRlRW50cnlPZmZzZXRTaXplKCdwYXlsb2FkX3Byb3BlcnRpZXMudHh0JyldCi0KLSAgICAjIGNhcmVfbWFwLnR4dCBpcyBhdmFpbGFibGUgb25seSBpZiBkbS12ZXJpdHkgaXMgZW5hYmxlZC4KLSAgICBpZiAnY2FyZV9tYXAudHh0JyBpbiB6aXBfZmlsZS5uYW1lbGlzdCgpOgotICAgICAgb2Zmc2V0cy5hcHBlbmQoQ29tcHV0ZUVudHJ5T2Zmc2V0U2l6ZSgnY2FyZV9tYXAudHh0JykpCi0KLSAgICBpZiAnY29tcGF0aWJpbGl0eS56aXAnIGluIHppcF9maWxlLm5hbWVsaXN0KCk6Ci0gICAgICBvZmZzZXRzLmFwcGVuZChDb21wdXRlRW50cnlPZmZzZXRTaXplKCdjb21wYXRpYmlsaXR5LnppcCcpKQotCi0gICAgIyAnTUVUQS1JTkYvY29tL2FuZHJvaWQvbWV0YWRhdGEnIGlzIHJlcXVpcmVkLiBXZSBkb24ndCBrbm93IGl0cyBhY3R1YWwKLSAgICAjIG9mZnNldCBhbmQgbGVuZ3RoIChhcyB3ZWxsIGFzIHRoZSB2YWx1ZXMgZm9yIG90aGVyIGVudHJpZXMpLiBTbyB3ZQotICAgICMgcmVzZXJ2ZSAxMC1ieXRlIGFzIGEgcGxhY2Vob2xkZXIsIHdoaWNoIGlzIHRvIGNvdmVyIHRoZSBzcGFjZSBmb3IgbWV0YWRhdGEKLSAgICAjIGVudHJ5ICgneHg6eHh4Jywgc2luY2UgaXQncyBaSVBfU1RPUkVEIHdoaWNoIHNob3VsZCBhcHBlYXIgYXQgdGhlCi0gICAgIyBiZWdpbm5pbmcgb2YgdGhlIHppcCksIGFzIHdlbGwgYXMgdGhlIHBvc3NpYmxlIHZhbHVlIGNoYW5nZXMgaW4gb3RoZXIKLSAgICAjIGVudHJpZXMuCi0gICAgaWYgcmVzZXJ2ZV9zcGFjZToKLSAgICAgIG9mZnNldHMuYXBwZW5kKCdtZXRhZGF0YTonICsgJyAnICogMTApCi0gICAgZWxzZToKLSAgICAgIG9mZnNldHMuYXBwZW5kKENvbXB1dGVFbnRyeU9mZnNldFNpemUoTUVUQURBVEFfTkFNRSkpCi0KLSAgICB2YWx1ZSA9ICcsJy5qb2luKG9mZnNldHMpCi0gICAgaWYgZXhwZWN0ZWRfbGVuZ3RoIGlzIG5vdCBOb25lOgotICAgICAgYXNzZXJ0IGxlbih2YWx1ZSkgPD0gZXhwZWN0ZWRfbGVuZ3RoLCBcCi0gICAgICAgICAgJ0luc3VmZmljaWVudCByZXNlcnZlZCBzcGFjZTogcmVzZXJ2ZWQ9JWQsIGFjdHVhbD0lZCcgJSAoCi0gICAgICAgICAgICAgIGV4cGVjdGVkX2xlbmd0aCwgbGVuKHZhbHVlKSkKLSAgICAgIHZhbHVlICs9ICcgJyAqIChleHBlY3RlZF9sZW5ndGggLSBsZW4odmFsdWUpKQotICAgIHJldHVybiB2YWx1ZQotCi0gICMgVGhlIHBsYWNlIHdoZXJlIHRoZSBvdXRwdXQgZnJvbSB0aGUgc3VicHJvY2VzcyBzaG91bGQgZ28uCi0gIGxvZ19maWxlID0gc3lzLnN0ZG91dCBpZiBPUFRJT05TLnZlcmJvc2UgZWxzZSBzdWJwcm9jZXNzLlBJUEUKLQotICAjIEEvQiB1cGRhdGVyIGV4cGVjdHMgYSBzaWduaW5nIGtleSBpbiBSU0EgZm9ybWF0LiBHZXRzIHRoZSBrZXkgcmVhZHkgZm9yCi0gICMgbGF0ZXIgdXNlIGluIHN0ZXAgMywgdW5sZXNzIGEgcGF5bG9hZF9zaWduZXIgaGFzIGJlZW4gc3BlY2lmaWVkLgotICBpZiBPUFRJT05TLnBheWxvYWRfc2lnbmVyIGlzIE5vbmU6Ci0gICAgY21kID0gWyJvcGVuc3NsIiwgInBrY3M4IiwKLSAgICAgICAgICAgIi1pbiIsIE9QVElPTlMucGFja2FnZV9rZXkgKyBPUFRJT05TLnByaXZhdGVfa2V5X3N1ZmZpeCwKLSAgICAgICAgICAgIi1pbmZvcm0iLCAiREVSIl0KLSAgICBwdyA9IE9QVElPTlMua2V5X3Bhc3N3b3Jkc1tPUFRJT05TLnBhY2thZ2Vfa2V5XQotICAgIGNtZC5leHRlbmQoWyItcGFzc2luIiwgInBhc3M6IiArIHB3XSBpZiBwdyBlbHNlIFsiLW5vY3J5cHQiXSkKLSAgICByc2Ffa2V5ID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9ImtleS0iLCBzdWZmaXg9Ii5rZXkiKQotICAgIGNtZC5leHRlbmQoWyItb3V0IiwgcnNhX2tleV0pCi0gICAgcDEgPSBjb21tb24uUnVuKGNtZCwgdmVyYm9zZT1GYWxzZSwgc3Rkb3V0PWxvZ19maWxlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gICAgcDEuY29tbXVuaWNhdGUoKQotICAgIGFzc2VydCBwMS5yZXR1cm5jb2RlID09IDAsICJvcGVuc3NsIHBrY3M4IGZhaWxlZCIKLQorICAiIiJHZW5lcmF0ZXMgYW4gQW5kcm9pZCBPVEEgcGFja2FnZSB0aGF0IGhhcyBBL0IgdXBkYXRlIHBheWxvYWQuIiIiCiAgICMgU3RhZ2UgdGhlIG91dHB1dCB6aXAgcGFja2FnZSBmb3IgcGFja2FnZSBzaWduaW5nLgotICB0ZW1wX3ppcF9maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKLSAgb3V0cHV0X3ppcCA9IHppcGZpbGUuWmlwRmlsZSh0ZW1wX3ppcF9maWxlLCAidyIsCisgIGlmIG5vdCBPUFRJT05TLm5vX3NpZ25pbmc6CisgICAgc3RhZ2luZ19maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy56aXAnKQorICBlbHNlOgorICAgIHN0YWdpbmdfZmlsZSA9IG91dHB1dF9maWxlCisgIG91dHB1dF96aXAgPSB6aXBmaWxlLlppcEZpbGUoc3RhZ2luZ19maWxlLCAidyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQpCiAKKyAgaWYgc291cmNlX2ZpbGUgaXMgbm90IE5vbmU6CisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oT1BUSU9OUy50YXJnZXRfaW5mb19kaWN0LCBPUFRJT05TLm9lbV9kaWN0cykKKyAgICBzb3VyY2VfaW5mbyA9IEJ1aWxkSW5mbyhPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QsIE9QVElPTlMub2VtX2RpY3RzKQorICBlbHNlOgorICAgIHRhcmdldF9pbmZvID0gQnVpbGRJbmZvKE9QVElPTlMuaW5mb19kaWN0LCBPUFRJT05TLm9lbV9kaWN0cykKKyAgICBzb3VyY2VfaW5mbyA9IE5vbmUKKwogICAjIE1ldGFkYXRhIHRvIGNvbXBseSB3aXRoIEFuZHJvaWQgT1RBIHBhY2thZ2UgZm9ybWF0LgotICBvZW1fcHJvcHMgPSBPUFRJT05TLmluZm9fZGljdC5nZXQoIm9lbV9maW5nZXJwcmludF9wcm9wZXJ0aWVzIiwgTm9uZSkKLSAgb2VtX2RpY3RzID0gTm9uZQotICBpZiBvZW1fcHJvcHM6Ci0gICAgb2VtX2RpY3RzID0gX0xvYWRPZW1EaWN0cyhOb25lKQorICBtZXRhZGF0YSA9IEdldFBhY2thZ2VNZXRhZGF0YSh0YXJnZXRfaW5mbywgc291cmNlX2luZm8pCiAKLSAgbWV0YWRhdGEgPSB7Ci0gICAgICAicG9zdC1idWlsZCI6IENhbGN1bGF0ZUZpbmdlcnByaW50KG9lbV9wcm9wcywgb2VtX2RpY3RzIGFuZCBvZW1fZGljdHNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVElPTlMuaW5mb19kaWN0KSwKLSAgICAgICJwb3N0LWJ1aWxkLWluY3JlbWVudGFsIiA6IEdldEJ1aWxkUHJvcCgicm8uYnVpbGQudmVyc2lvbi5pbmNyZW1lbnRhbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OUy5pbmZvX2RpY3QpLAotICAgICAgInByZS1kZXZpY2UiOiBHZXRPZW1Qcm9wZXJ0eSgicm8ucHJvZHVjdC5kZXZpY2UiLCBvZW1fcHJvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lbV9kaWN0cyBhbmQgb2VtX2RpY3RzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05TLmluZm9fZGljdCksCi0gICAgICAib3RhLXJlcXVpcmVkLWNhY2hlIjogIjAiLAotICAgICAgIm90YS10eXBlIjogIkFCIiwKLSAgfQorICBpZiBPUFRJT05TLnNraXBfcG9zdGluc3RhbGw6CisgICAgdGFyZ2V0X2ZpbGUgPSBHZXRUYXJnZXRGaWxlc1ppcFdpdGhvdXRQb3N0aW5zdGFsbENvbmZpZyh0YXJnZXRfZmlsZSkKIAotICBpZiBzb3VyY2VfZmlsZSBpcyBub3QgTm9uZToKLSAgICBtZXRhZGF0YVsicHJlLWJ1aWxkIl0gPSBDYWxjdWxhdGVGaW5nZXJwcmludChvZW1fcHJvcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VtX2RpY3RzIGFuZCBvZW1fZGljdHNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0KQotICAgIG1ldGFkYXRhWyJwcmUtYnVpbGQtaW5jcmVtZW50YWwiXSA9IEdldEJ1aWxkUHJvcCgKLSAgICAgICAgInJvLmJ1aWxkLnZlcnNpb24uaW5jcmVtZW50YWwiLCBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QpCisgICMgR2VuZXJhdGUgcGF5bG9hZC4KKyAgcGF5bG9hZCA9IFBheWxvYWQoKQorICBwYXlsb2FkLkdlbmVyYXRlKHRhcmdldF9maWxlLCBzb3VyY2VfZmlsZSkKIAotICAgIEhhbmRsZURvd25ncmFkZU1ldGFkYXRhKG1ldGFkYXRhKQotICBlbHNlOgotICAgIG1ldGFkYXRhWyJwb3N0LXRpbWVzdGFtcCJdID0gR2V0QnVpbGRQcm9wKAotICAgICAgICAicm8uYnVpbGQuZGF0ZS51dGMiLCBPUFRJT05TLmluZm9fZGljdCkKKyAgIyBTaWduIHRoZSBwYXlsb2FkLgorICBwYXlsb2FkX3NpZ25lciA9IFBheWxvYWRTaWduZXIoKQorICBwYXlsb2FkLlNpZ24ocGF5bG9hZF9zaWduZXIpCiAKLSAgIyAxLiBHZW5lcmF0ZSBwYXlsb2FkLgotICBwYXlsb2FkX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0icGF5bG9hZC0iLCBzdWZmaXg9Ii5iaW4iKQotICBjbWQgPSBbImJyaWxsb191cGRhdGVfcGF5bG9hZCIsICJnZW5lcmF0ZSIsCi0gICAgICAgICAiLS1wYXlsb2FkIiwgcGF5bG9hZF9maWxlLAotICAgICAgICAgIi0tdGFyZ2V0X2ltYWdlIiwgdGFyZ2V0X2ZpbGVdCi0gIGlmIHNvdXJjZV9maWxlIGlzIG5vdCBOb25lOgotICAgIGNtZC5leHRlbmQoWyItLXNvdXJjZV9pbWFnZSIsIHNvdXJjZV9maWxlXSkKLSAgcDEgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PWxvZ19maWxlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gIHAxLmNvbW11bmljYXRlKCkKLSAgYXNzZXJ0IHAxLnJldHVybmNvZGUgPT0gMCwgImJyaWxsb191cGRhdGVfcGF5bG9hZCBnZW5lcmF0ZSBmYWlsZWQiCisgICMgV3JpdGUgdGhlIHBheWxvYWQgaW50byBvdXRwdXQgemlwLgorICBwYXlsb2FkLldyaXRlVG9aaXAob3V0cHV0X3ppcCkKIAotICAjIDIuIEdlbmVyYXRlIGhhc2hlcyBvZiB0aGUgcGF5bG9hZCBhbmQgbWV0YWRhdGEgZmlsZXMuCi0gIHBheWxvYWRfc2lnX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ic2lnLSIsIHN1ZmZpeD0iLmJpbiIpCi0gIG1ldGFkYXRhX3NpZ19maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InNpZy0iLCBzdWZmaXg9Ii5iaW4iKQotICBjbWQgPSBbImJyaWxsb191cGRhdGVfcGF5bG9hZCIsICJoYXNoIiwKLSAgICAgICAgICItLXVuc2lnbmVkX3BheWxvYWQiLCBwYXlsb2FkX2ZpbGUsCi0gICAgICAgICAiLS1zaWduYXR1cmVfc2l6ZSIsICIyNTYiLAotICAgICAgICAgIi0tbWV0YWRhdGFfaGFzaF9maWxlIiwgbWV0YWRhdGFfc2lnX2ZpbGUsCi0gICAgICAgICAiLS1wYXlsb2FkX2hhc2hfZmlsZSIsIHBheWxvYWRfc2lnX2ZpbGVdCi0gIHAxID0gY29tbW9uLlJ1bihjbWQsIHN0ZG91dD1sb2dfZmlsZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotICBwMS5jb21tdW5pY2F0ZSgpCi0gIGFzc2VydCBwMS5yZXR1cm5jb2RlID09IDAsICJicmlsbG9fdXBkYXRlX3BheWxvYWQgaGFzaCBmYWlsZWQiCi0KLSAgIyAzLiBTaWduIHRoZSBoYXNoZXMgYW5kIGluc2VydCB0aGVtIGJhY2sgaW50byB0aGUgcGF5bG9hZCBmaWxlLgotICBzaWduZWRfcGF5bG9hZF9zaWdfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUocHJlZml4PSJzaWduZWQtc2lnLSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9Ii5iaW4iKQotICBzaWduZWRfbWV0YWRhdGFfc2lnX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ic2lnbmVkLXNpZy0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD0iLmJpbiIpCi0gICMgM2EuIFNpZ24gdGhlIHBheWxvYWQgaGFzaC4KLSAgaWYgT1BUSU9OUy5wYXlsb2FkX3NpZ25lciBpcyBub3QgTm9uZToKLSAgICBjbWQgPSBbT1BUSU9OUy5wYXlsb2FkX3NpZ25lcl0KLSAgICBjbWQuZXh0ZW5kKE9QVElPTlMucGF5bG9hZF9zaWduZXJfYXJncykKLSAgZWxzZToKLSAgICBjbWQgPSBbIm9wZW5zc2wiLCAicGtleXV0bCIsICItc2lnbiIsCi0gICAgICAgICAgICItaW5rZXkiLCByc2Ffa2V5LAotICAgICAgICAgICAiLXBrZXlvcHQiLCAiZGlnZXN0OnNoYTI1NiJdCi0gIGNtZC5leHRlbmQoWyItaW4iLCBwYXlsb2FkX3NpZ19maWxlLAotICAgICAgICAgICAgICAiLW91dCIsIHNpZ25lZF9wYXlsb2FkX3NpZ19maWxlXSkKLSAgcDEgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PWxvZ19maWxlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gIHAxLmNvbW11bmljYXRlKCkKLSAgYXNzZXJ0IHAxLnJldHVybmNvZGUgPT0gMCwgIm9wZW5zc2wgc2lnbiBwYXlsb2FkIGZhaWxlZCIKLQotICAjIDNiLiBTaWduIHRoZSBtZXRhZGF0YSBoYXNoLgotICBpZiBPUFRJT05TLnBheWxvYWRfc2lnbmVyIGlzIG5vdCBOb25lOgotICAgIGNtZCA9IFtPUFRJT05TLnBheWxvYWRfc2lnbmVyXQotICAgIGNtZC5leHRlbmQoT1BUSU9OUy5wYXlsb2FkX3NpZ25lcl9hcmdzKQotICBlbHNlOgotICAgIGNtZCA9IFsib3BlbnNzbCIsICJwa2V5dXRsIiwgIi1zaWduIiwKLSAgICAgICAgICAgIi1pbmtleSIsIHJzYV9rZXksCi0gICAgICAgICAgICItcGtleW9wdCIsICJkaWdlc3Q6c2hhMjU2Il0KLSAgY21kLmV4dGVuZChbIi1pbiIsIG1ldGFkYXRhX3NpZ19maWxlLAotICAgICAgICAgICAgICAiLW91dCIsIHNpZ25lZF9tZXRhZGF0YV9zaWdfZmlsZV0pCi0gIHAxID0gY29tbW9uLlJ1bihjbWQsIHN0ZG91dD1sb2dfZmlsZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotICBwMS5jb21tdW5pY2F0ZSgpCi0gIGFzc2VydCBwMS5yZXR1cm5jb2RlID09IDAsICJvcGVuc3NsIHNpZ24gbWV0YWRhdGEgZmFpbGVkIgotCi0gICMgM2MuIEluc2VydCB0aGUgc2lnbmF0dXJlcyBiYWNrIGludG8gdGhlIHBheWxvYWQgZmlsZS4KLSAgc2lnbmVkX3BheWxvYWRfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUocHJlZml4PSJzaWduZWQtcGF5bG9hZC0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9Ii5iaW4iKQotICBjbWQgPSBbImJyaWxsb191cGRhdGVfcGF5bG9hZCIsICJzaWduIiwKLSAgICAgICAgICItLXVuc2lnbmVkX3BheWxvYWQiLCBwYXlsb2FkX2ZpbGUsCi0gICAgICAgICAiLS1wYXlsb2FkIiwgc2lnbmVkX3BheWxvYWRfZmlsZSwKLSAgICAgICAgICItLXNpZ25hdHVyZV9zaXplIiwgIjI1NiIsCi0gICAgICAgICAiLS1tZXRhZGF0YV9zaWduYXR1cmVfZmlsZSIsIHNpZ25lZF9tZXRhZGF0YV9zaWdfZmlsZSwKLSAgICAgICAgICItLXBheWxvYWRfc2lnbmF0dXJlX2ZpbGUiLCBzaWduZWRfcGF5bG9hZF9zaWdfZmlsZV0KLSAgcDEgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PWxvZ19maWxlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gIHAxLmNvbW11bmljYXRlKCkKLSAgYXNzZXJ0IHAxLnJldHVybmNvZGUgPT0gMCwgImJyaWxsb191cGRhdGVfcGF5bG9hZCBzaWduIGZhaWxlZCIKLQotICAjIDQuIER1bXAgdGhlIHNpZ25lZCBwYXlsb2FkIHByb3BlcnRpZXMuCi0gIHByb3BlcnRpZXNfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUocHJlZml4PSJwYXlsb2FkLXByb3BlcnRpZXMtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9Ii50eHQiKQotICBjbWQgPSBbImJyaWxsb191cGRhdGVfcGF5bG9hZCIsICJwcm9wZXJ0aWVzIiwKLSAgICAgICAgICItLXBheWxvYWQiLCBzaWduZWRfcGF5bG9hZF9maWxlLAotICAgICAgICAgIi0tcHJvcGVydGllc19maWxlIiwgcHJvcGVydGllc19maWxlXQotICBwMSA9IGNvbW1vbi5SdW4oY21kLCBzdGRvdXQ9bG9nX2ZpbGUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgcDEuY29tbXVuaWNhdGUoKQotICBhc3NlcnQgcDEucmV0dXJuY29kZSA9PSAwLCAiYnJpbGxvX3VwZGF0ZV9wYXlsb2FkIHByb3BlcnRpZXMgZmFpbGVkIgotCi0gIGlmIE9QVElPTlMud2lwZV91c2VyX2RhdGE6Ci0gICAgd2l0aCBvcGVuKHByb3BlcnRpZXNfZmlsZSwgImEiKSBhcyBmOgotICAgICAgZi53cml0ZSgiUE9XRVJXQVNIPTFcbiIpCi0gICAgbWV0YWRhdGFbIm90YS13aXBlIl0gPSAieWVzIgotCi0gICMgQWRkIHRoZSBzaWduZWQgcGF5bG9hZCBmaWxlIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIHppcC4gSW4gb3JkZXIgdG8KLSAgIyBzdXBwb3J0IHN0cmVhbWluZywgd2UgcGFjayBwYXlsb2FkLmJpbiwgcGF5bG9hZF9wcm9wZXJ0aWVzLnR4dCBhbmQKLSAgIyBjYXJlX21hcC50eHQgYXMgWklQX1NUT1JFRC4gU28gdGhlc2UgZW50cmllcyBjYW4gYmUgcmVhZCBkaXJlY3RseSB3aXRoCi0gICMgdGhlIG9mZnNldCBhbmQgbGVuZ3RoIHBhaXJzLgotICBjb21tb24uWmlwV3JpdGUob3V0cHV0X3ppcCwgc2lnbmVkX3BheWxvYWRfZmlsZSwgYXJjbmFtZT0icGF5bG9hZC5iaW4iLAotICAgICAgICAgICAgICAgICAgY29tcHJlc3NfdHlwZT16aXBmaWxlLlpJUF9TVE9SRUQpCi0gIGNvbW1vbi5aaXBXcml0ZShvdXRwdXRfemlwLCBwcm9wZXJ0aWVzX2ZpbGUsCi0gICAgICAgICAgICAgICAgICBhcmNuYW1lPSJwYXlsb2FkX3Byb3BlcnRpZXMudHh0IiwKLSAgICAgICAgICAgICAgICAgIGNvbXByZXNzX3R5cGU9emlwZmlsZS5aSVBfU1RPUkVEKQorICAjIEdlbmVyYXRlIGFuZCBpbmNsdWRlIHRoZSBzZWNvbmRhcnkgcGF5bG9hZCB0aGF0IGluc3RhbGxzIHNlY29uZGFyeSBpbWFnZXMKKyAgIyAoZS5nLiBzeXN0ZW1fb3RoZXIuaW1nKS4KKyAgaWYgT1BUSU9OUy5pbmNsdWRlX3NlY29uZGFyeToKKyAgICAjIFdlIGFsd2F5cyBpbmNsdWRlIGEgZnVsbCBwYXlsb2FkIGZvciB0aGUgc2Vjb25kYXJ5IHNsb3QsIGV2ZW4gd2hlbgorICAgICMgYnVpbGRpbmcgYW4gaW5jcmVtZW50YWwgT1RBLiBTZWUgdGhlIGNvbW1lbnRzIGZvciAiLS1pbmNsdWRlX3NlY29uZGFyeSIuCisgICAgc2Vjb25kYXJ5X3RhcmdldF9maWxlID0gR2V0VGFyZ2V0RmlsZXNaaXBGb3JTZWNvbmRhcnlJbWFnZXMoCisgICAgICAgIHRhcmdldF9maWxlLCBPUFRJT05TLnNraXBfcG9zdGluc3RhbGwpCisgICAgc2Vjb25kYXJ5X3BheWxvYWQgPSBQYXlsb2FkKHNlY29uZGFyeT1UcnVlKQorICAgIHNlY29uZGFyeV9wYXlsb2FkLkdlbmVyYXRlKHNlY29uZGFyeV90YXJnZXRfZmlsZSkKKyAgICBzZWNvbmRhcnlfcGF5bG9hZC5TaWduKHBheWxvYWRfc2lnbmVyKQorICAgIHNlY29uZGFyeV9wYXlsb2FkLldyaXRlVG9aaXAob3V0cHV0X3ppcCkKIAogICAjIElmIGRtLXZlcml0eSBpcyBzdXBwb3J0ZWQgZm9yIHRoZSBkZXZpY2UsIGNvcHkgY29udGVudHMgb2YgY2FyZV9tYXAKICAgIyBpbnRvIEEvQiBPVEEgcGFja2FnZS4KICAgdGFyZ2V0X3ppcCA9IHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZSwgInIiKQotICBpZiAoT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJ2ZXJpdHkiKSA9PSAidHJ1ZSIgb3IKLSAgICAgIE9QVElPTlMuaW5mb19kaWN0LmdldCgiYXZiX2VuYWJsZSIpID09ICJ0cnVlIik6CisgIGlmICh0YXJnZXRfaW5mby5nZXQoInZlcml0eSIpID09ICJ0cnVlIiBvcgorICAgICAgdGFyZ2V0X2luZm8uZ2V0KCJhdmJfZW5hYmxlIikgPT0gInRydWUiKToKICAgICBjYXJlX21hcF9wYXRoID0gIk1FVEEvY2FyZV9tYXAudHh0IgogICAgIG5hbWVsaXN0ID0gdGFyZ2V0X3ppcC5uYW1lbGlzdCgpCiAgICAgaWYgY2FyZV9tYXBfcGF0aCBpbiBuYW1lbGlzdDoKICAgICAgIGNhcmVfbWFwX2RhdGEgPSB0YXJnZXRfemlwLnJlYWQoY2FyZV9tYXBfcGF0aCkKKyAgICAgICMgSW4gb3JkZXIgdG8gc3VwcG9ydCBzdHJlYW1pbmcsIGNhcmVfbWFwLnR4dCBuZWVkcyB0byBiZSBwYWNrZWQgYXMKKyAgICAgICMgWklQX1NUT1JFRC4KICAgICAgIGNvbW1vbi5aaXBXcml0ZVN0cihvdXRwdXRfemlwLCAiY2FyZV9tYXAudHh0IiwgY2FyZV9tYXBfZGF0YSwKLSAgICAgICAgICBjb21wcmVzc190eXBlPXppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc190eXBlPXppcGZpbGUuWklQX1NUT1JFRCkKICAgICBlbHNlOgogICAgICAgcHJpbnQoIldhcm5pbmc6IGNhbm5vdCBmaW5kIGNhcmUgbWFwIGZpbGUgaW4gdGFyZ2V0X2ZpbGUgcGFja2FnZSIpCiAKLSAgIyBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QgbXVzdCBiZSBOb25lIGZvciBpbmNyZW1lbnRhbHMuCi0gIGlmIHNvdXJjZV9maWxlIGlzIE5vbmU6Ci0gICAgYXNzZXJ0IE9QVElPTlMuc291cmNlX2luZm9fZGljdCBpcyBOb25lCi0KICAgQWRkQ29tcGF0aWJpbGl0eUFyY2hpdmVJZlRyZWJsZUVuYWJsZWQoCi0gICAgICB0YXJnZXRfemlwLCBvdXRwdXRfemlwLCBPUFRJT05TLmluZm9fZGljdCwgT1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0KQorICAgICAgdGFyZ2V0X3ppcCwgb3V0cHV0X3ppcCwgdGFyZ2V0X2luZm8sIHNvdXJjZV9pbmZvKQogCiAgIGNvbW1vbi5aaXBDbG9zZSh0YXJnZXRfemlwKQogCi0gICMgV3JpdGUgdGhlIGN1cnJlbnQgbWV0YWRhdGEgZW50cnkgd2l0aCBwbGFjZWhvbGRlcnMuCi0gIG1ldGFkYXRhWydvdGEtc3RyZWFtaW5nLXByb3BlcnR5LWZpbGVzJ10gPSBDb21wdXRlU3RyZWFtaW5nTWV0YWRhdGEoCi0gICAgICBvdXRwdXRfemlwLCByZXNlcnZlX3NwYWNlPVRydWUpCi0gIFdyaXRlTWV0YWRhdGEobWV0YWRhdGEsIG91dHB1dF96aXApCisgICMgV2UgaGF2ZW4ndCB3cml0dGVuIHRoZSBtZXRhZGF0YSBlbnRyeSB5ZXQsIHdoaWNoIHdpbGwgYmUgaGFuZGxlZCBpbgorICAjIEZpbmFsaXplTWV0YWRhdGEoKS4KICAgY29tbW9uLlppcENsb3NlKG91dHB1dF96aXApCiAKLSAgIyBTaWduT3V0cHV0KCksIHdoaWNoIGluIHR1cm4gY2FsbHMgc2lnbmFway5qYXIsIHdpbGwgcG9zc2libHkgcmVvcmRlciB0aGUKLSAgIyB6aXAgZW50cmllcywgYXMgd2VsbCBhcyBwYWRkaW5nIHRoZSBlbnRyeSBoZWFkZXJzLiBXZSBkbyBhIHByZWxpbWluYXJ5Ci0gICMgc2lnbmluZyAod2l0aCBhbiBpbmNvbXBsZXRlIG1ldGFkYXRhIGVudHJ5KSB0byBhbGxvdyB0aGF0IHRvIGhhcHBlbi4gVGhlbgotICAjIGNvbXB1dGUgdGhlIHppcCBlbnRyeSBvZmZzZXRzLCB3cml0ZSBiYWNrIHRoZSBmaW5hbCBtZXRhZGF0YSBhbmQgZG8gdGhlCi0gICMgZmluYWwgc2lnbmluZy4KLSAgcHJlbGltX3NpZ25pbmcgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQotICBTaWduT3V0cHV0KHRlbXBfemlwX2ZpbGUubmFtZSwgcHJlbGltX3NpZ25pbmcubmFtZSkKLSAgY29tbW9uLlppcENsb3NlKHRlbXBfemlwX2ZpbGUpCi0KLSAgIyBPcGVuIHRoZSBzaWduZWQgemlwLiBDb21wdXRlIHRoZSBmaW5hbCBtZXRhZGF0YSB0aGF0J3MgbmVlZGVkIGZvciBzdHJlYW1pbmcuCi0gIHByZWxpbV96aXAgPSB6aXBmaWxlLlppcEZpbGUocHJlbGltX3NpZ25pbmcsICJyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkKLSAgZXhwZWN0ZWRfbGVuZ3RoID0gbGVuKG1ldGFkYXRhWydvdGEtc3RyZWFtaW5nLXByb3BlcnR5LWZpbGVzJ10pCi0gIG1ldGFkYXRhWydvdGEtc3RyZWFtaW5nLXByb3BlcnR5LWZpbGVzJ10gPSBDb21wdXRlU3RyZWFtaW5nTWV0YWRhdGEoCi0gICAgICBwcmVsaW1femlwLCByZXNlcnZlX3NwYWNlPUZhbHNlLCBleHBlY3RlZF9sZW5ndGg9ZXhwZWN0ZWRfbGVuZ3RoKQotCi0gICMgQ29weSB0aGUgemlwIGVudHJpZXMsIGFzIHdlIGNhbm5vdCB1cGRhdGUgLyBkZWxldGUgZW50cmllcyB3aXRoIHppcGZpbGUuCi0gIGZpbmFsX3NpZ25pbmcgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQotICBvdXRwdXRfemlwID0gemlwZmlsZS5aaXBGaWxlKGZpbmFsX3NpZ25pbmcsICJ3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkKLSAgZm9yIGl0ZW0gaW4gcHJlbGltX3ppcC5pbmZvbGlzdCgpOgotICAgIGlmIGl0ZW0uZmlsZW5hbWUgPT0gTUVUQURBVEFfTkFNRToKLSAgICAgIGNvbnRpbnVlCi0KLSAgICBkYXRhID0gcHJlbGltX3ppcC5yZWFkKGl0ZW0uZmlsZW5hbWUpCi0gICAgb3V0X2luZm8gPSBjb3B5LmNvcHkoaXRlbSkKLSAgICBjb21tb24uWmlwV3JpdGVTdHIob3V0cHV0X3ppcCwgb3V0X2luZm8sIGRhdGEpCi0KLSAgIyBOb3cgd3JpdGUgdGhlIGZpbmFsIG1ldGFkYXRhIGVudHJ5LgotICBXcml0ZU1ldGFkYXRhKG1ldGFkYXRhLCBvdXRwdXRfemlwKQotICBjb21tb24uWmlwQ2xvc2UocHJlbGltX3ppcCkKLSAgY29tbW9uLlppcENsb3NlKG91dHB1dF96aXApCi0KLSAgIyBSZS1zaWduIHRoZSBwYWNrYWdlIGFmdGVyIHVwZGF0aW5nIHRoZSBtZXRhZGF0YSBlbnRyeS4KLSAgU2lnbk91dHB1dChmaW5hbF9zaWduaW5nLm5hbWUsIG91dHB1dF9maWxlKQotICBmaW5hbF9zaWduaW5nLmNsb3NlKCkKLQotICAjIFJlb3BlbiB0aGUgZmluYWwgc2lnbmVkIHppcCB0byBkb3VibGUgY2hlY2sgdGhlIHN0cmVhbWluZyBtZXRhZGF0YS4KLSAgb3V0cHV0X3ppcCA9IHppcGZpbGUuWmlwRmlsZShvdXRwdXRfZmlsZSwgInIiKQotICBhY3R1YWwgPSBtZXRhZGF0YVsnb3RhLXN0cmVhbWluZy1wcm9wZXJ0eS1maWxlcyddLnN0cmlwKCkKLSAgZXhwZWN0ZWQgPSBDb21wdXRlU3RyZWFtaW5nTWV0YWRhdGEob3V0cHV0X3ppcCkKLSAgYXNzZXJ0IGFjdHVhbCA9PSBleHBlY3RlZCwgXAotICAgICAgIk1pc21hdGNoaW5nIHN0cmVhbWluZyBtZXRhZGF0YTogJXMgdnMgJXMuIiAlIChhY3R1YWwsIGV4cGVjdGVkKQotICBjb21tb24uWmlwQ2xvc2Uob3V0cHV0X3ppcCkKKyAgIyBBYk90YVByb3BlcnR5RmlsZXMgaW50ZW5kcyB0byByZXBsYWNlIFN0cmVhbWluZ1Byb3BlcnR5RmlsZXMsIGFzIGl0IGNvdmVycworICAjIGFsbCB0aGUgaW5mbyBvZiB0aGUgbGF0dGVyLiBIb3dldmVyLCBzeXN0ZW0gdXBkYXRlcnMgYW5kIE9UQSBzZXJ2ZXJzIG5lZWQgdG8KKyAgIyB0YWtlIHRpbWUgdG8gc3dpdGNoIHRvIHRoZSBuZXcgZmxhZy4gV2Uga2VlcCBib3RoIG9mIHRoZSBmbGFncyBmb3IKKyAgIyBQLXRpbWVmcmFtZSwgYW5kIHdpbGwgcmVtb3ZlIFN0cmVhbWluZ1Byb3BlcnR5RmlsZXMgaW4gbGF0ZXIgcmVsZWFzZS4KKyAgbmVlZGVkX3Byb3BlcnR5X2ZpbGVzID0gKAorICAgICAgQWJPdGFQcm9wZXJ0eUZpbGVzKCksCisgICAgICBTdHJlYW1pbmdQcm9wZXJ0eUZpbGVzKCksCisgICkKKyAgRmluYWxpemVNZXRhZGF0YShtZXRhZGF0YSwgc3RhZ2luZ19maWxlLCBvdXRwdXRfZmlsZSwgbmVlZGVkX3Byb3BlcnR5X2ZpbGVzKQogCiAKIGRlZiBtYWluKGFyZ3YpOgpAQCAtMTI5NSw3ICsxNzUyLDcgQEAKICAgICAgIE9QVElPTlMuZnVsbF9yYWRpbyA9IFRydWUKICAgICBlbGlmIG8gPT0gIi0tZnVsbF9ib290bG9hZGVyIjoKICAgICAgIE9QVElPTlMuZnVsbF9ib290bG9hZGVyID0gVHJ1ZQotICAgIGVsaWYgbyBpbiAoIi13IiwgIi0td2lwZV91c2VyX2RhdGEiKToKKyAgICBlbGlmIG8gPT0gIi0td2lwZV91c2VyX2RhdGEiOgogICAgICAgT1BUSU9OUy53aXBlX3VzZXJfZGF0YSA9IFRydWUKICAgICBlbGlmIG8gPT0gIi0tZG93bmdyYWRlIjoKICAgICAgIE9QVElPTlMuZG93bmdyYWRlID0gVHJ1ZQpAQCAtMTMxNiw2ICsxNzczLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZWdlcnMgYXJlIGFsbG93ZWQuIiAlIChhLCBvKSkKICAgICBlbGlmIG8gaW4gKCItMiIsICItLXR3b19zdGVwIik6CiAgICAgICBPUFRJT05TLnR3b19zdGVwID0gVHJ1ZQorICAgIGVsaWYgbyA9PSAiLS1pbmNsdWRlX3NlY29uZGFyeSI6CisgICAgICBPUFRJT05TLmluY2x1ZGVfc2Vjb25kYXJ5ID0gVHJ1ZQogICAgIGVsaWYgbyA9PSAiLS1ub19zaWduaW5nIjoKICAgICAgIE9QVElPTlMubm9fc2lnbmluZyA9IFRydWUKICAgICBlbGlmIG8gPT0gIi0tdmVyaWZ5IjoKQEAgLTEzMjQsMTYgKzE3ODMsMTIgQEAKICAgICAgIE9QVElPTlMuYmxvY2tfYmFzZWQgPSBUcnVlCiAgICAgZWxpZiBvIGluICgiLWIiLCAiLS1iaW5hcnkiKToKICAgICAgIE9QVElPTlMudXBkYXRlcl9iaW5hcnkgPSBhCi0gICAgZWxpZiBvIGluICgiLS1ub19mYWxsYmFja190b19mdWxsIiwpOgotICAgICAgT1BUSU9OUy5mYWxsYmFja190b19mdWxsID0gRmFsc2UKICAgICBlbGlmIG8gPT0gIi0tc3Rhc2hfdGhyZXNob2xkIjoKICAgICAgIHRyeToKICAgICAgICAgT1BUSU9OUy5zdGFzaF90aHJlc2hvbGQgPSBmbG9hdChhKQogICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBwYXJzZSB2YWx1ZSAlciBmb3Igb3B0aW9uICVyIC0gZXhwZWN0aW5nICIKICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBmbG9hdCIgJSAoYSwgbykpCi0gICAgZWxpZiBvID09ICItLWdlbl92ZXJpZnkiOgotICAgICAgT1BUSU9OUy5nZW5fdmVyaWZ5ID0gVHJ1ZQogICAgIGVsaWYgbyA9PSAiLS1sb2dfZGlmZiI6CiAgICAgICBPUFRJT05TLmxvZ19kaWZmID0gYQogICAgIGVsaWYgbyA9PSAiLS1wYXlsb2FkX3NpZ25lciI6CkBAIC0xMzQyLDEyICsxNzk3LDE0IEBACiAgICAgICBPUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MgPSBzaGxleC5zcGxpdChhKQogICAgIGVsaWYgbyA9PSAiLS1leHRyYWN0ZWRfaW5wdXRfdGFyZ2V0X2ZpbGVzIjoKICAgICAgIE9QVElPTlMuZXh0cmFjdGVkX2lucHV0ID0gYQorICAgIGVsaWYgbyA9PSAiLS1za2lwX3Bvc3RpbnN0YWxsIjoKKyAgICAgIE9QVElPTlMuc2tpcF9wb3N0aW5zdGFsbCA9IFRydWUKICAgICBlbHNlOgogICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIAogICBhcmdzID0gY29tbW9uLlBhcnNlT3B0aW9ucyhhcmd2LCBfX2RvY19fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9vcHRzPSJiOms6aTpkOndlOnQ6Mm86IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfb3B0cz0iYjprOmk6ZDplOnQ6Mm86IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbG9uZ19vcHRzPVsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlX2tleT0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY3JlbWVudGFsX2Zyb209IiwKQEAgLTEzNTksMTkgKzE4MTYsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRyYV9zY3JpcHQ9IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b3JrZXJfdGhyZWFkcz0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3b19zdGVwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlX3NlY29uZGFyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9fc2lnbmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmxvY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbmFyeT0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9lbV9zZXR0aW5ncz0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9lbV9ub19tb3VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyaWZ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub19mYWxsYmFja190b19mdWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFzaF90aHJlc2hvbGQ9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZW5fdmVyaWZ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2dfZGlmZj0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBheWxvYWRfc2lnbmVyPSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF5bG9hZF9zaWduZXJfYXJncz0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dHJhY3RlZF9pbnB1dF90YXJnZXRfZmlsZXM9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJza2lwX3Bvc3RpbnN0YWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgZXh0cmFfb3B0aW9uX2hhbmRsZXI9b3B0aW9uX2hhbmRsZXIpCiAKICAgaWYgbGVuKGFyZ3MpICE9IDI6CkBAIC0xMzkyLDE0ICsxODQ5LDM1IEBACiAgIGFzc2VydCBub3QgKE9QVElPTlMuZG93bmdyYWRlIGFuZCBPUFRJT05TLnRpbWVzdGFtcCksIFwKICAgICAgICJDYW5ub3QgaGF2ZSAtLWRvd25ncmFkZSBBTkQgLS1vdmVycmlkZV90aW1lc3RhbXAgYm90aCIKIAotICAjIExvYWQgdGhlIGRpY3QgZmlsZSBmcm9tIHRoZSB6aXAgZGlyZWN0bHkgdG8gaGF2ZSBhIHBlZWsgYXQgdGhlIE9UQSB0eXBlLgotICAjIEZvciBwYWNrYWdlcyB1c2luZyBBL0IgdXBkYXRlLCB1bnppcHBpbmcgaXMgbm90IG5lZWRlZC4KKyAgIyBMb2FkIHRoZSBidWlsZCBpbmZvIGRpY3RzIGZyb20gdGhlIHppcCBkaXJlY3RseSBvciB0aGUgZXh0cmFjdGVkIGlucHV0CisgICMgZGlyZWN0b3J5LiBXZSBkb24ndCBuZWVkIHRvIHVuemlwIHRoZSBlbnRpcmUgdGFyZ2V0LWZpbGVzIHppcHMsIGJlY2F1c2UgdGhleQorICAjIHdvbid0IGJlIG5lZWRlZCBmb3IgQS9CIE9UQXMgKGJyaWxsb191cGRhdGVfcGF5bG9hZCBkb2VzIHRoYXQgb24gaXRzIG93bikuCisgICMgV2hlbiBsb2FkaW5nIHRoZSBpbmZvIGRpY3RzLCB3ZSBkb24ndCBuZWVkIHRvIHByb3ZpZGUgdGhlIHNlY29uZCBwYXJhbWV0ZXIKKyAgIyB0byBjb21tb24uTG9hZEluZm9EaWN0KCkuIFNwZWNpZnlpbmcgdGhlIHNlY29uZCBwYXJhbWV0ZXIgYWxsb3dzIHJlcGxhY2luZworICAjIHNvbWUgcHJvcGVydGllcyB3aXRoIHRoZWlyIGFjdHVhbCBwYXRocywgc3VjaCBhcyAnc2VsaW51eF9mYycsCisgICMgJ3JhbWRpc2tfZGlyJywgd2hpY2ggd29uJ3QgYmUgdXNlZCBkdXJpbmcgT1RBIGdlbmVyYXRpb24uCiAgIGlmIE9QVElPTlMuZXh0cmFjdGVkX2lucHV0IGlzIG5vdCBOb25lOgotICAgIE9QVElPTlMuaW5mb19kaWN0ID0gY29tbW9uLkxvYWRJbmZvRGljdChPUFRJT05TLmV4dHJhY3RlZF9pbnB1dCwgT1BUSU9OUy5leHRyYWN0ZWRfaW5wdXQpCisgICAgT1BUSU9OUy5pbmZvX2RpY3QgPSBjb21tb24uTG9hZEluZm9EaWN0KE9QVElPTlMuZXh0cmFjdGVkX2lucHV0KQogICBlbHNlOgotICAgIGlucHV0X3ppcCA9IHppcGZpbGUuWmlwRmlsZShhcmdzWzBdLCAiciIpCi0gICAgT1BUSU9OUy5pbmZvX2RpY3QgPSBjb21tb24uTG9hZEluZm9EaWN0KGlucHV0X3ppcCkKLSAgICBjb21tb24uWmlwQ2xvc2UoaW5wdXRfemlwKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGFyZ3NbMF0sICdyJykgYXMgaW5wdXRfemlwOgorICAgICAgT1BUSU9OUy5pbmZvX2RpY3QgPSBjb21tb24uTG9hZEluZm9EaWN0KGlucHV0X3ppcCkKKworICBpZiBPUFRJT05TLnZlcmJvc2U6CisgICAgcHJpbnQoIi0tLSB0YXJnZXQgaW5mbyAtLS0iKQorICAgIGNvbW1vbi5EdW1wSW5mb0RpY3QoT1BUSU9OUy5pbmZvX2RpY3QpCisKKyAgIyBMb2FkIHRoZSBzb3VyY2UgYnVpbGQgZGljdCBpZiBhcHBsaWNhYmxlLgorICBpZiBPUFRJT05TLmluY3JlbWVudGFsX3NvdXJjZSBpcyBub3QgTm9uZToKKyAgICBPUFRJT05TLnRhcmdldF9pbmZvX2RpY3QgPSBPUFRJT05TLmluZm9fZGljdAorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKE9QVElPTlMuaW5jcmVtZW50YWxfc291cmNlLCAncicpIGFzIHNvdXJjZV96aXA6CisgICAgICBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QgPSBjb21tb24uTG9hZEluZm9EaWN0KHNvdXJjZV96aXApCisKKyAgICBpZiBPUFRJT05TLnZlcmJvc2U6CisgICAgICBwcmludCgiLS0tIHNvdXJjZSBpbmZvIC0tLSIpCisgICAgICBjb21tb24uRHVtcEluZm9EaWN0KE9QVElPTlMuc291cmNlX2luZm9fZGljdCkKKworICAjIExvYWQgT0VNIGRpY3RzIGlmIHByb3ZpZGVkLgorICBPUFRJT05TLm9lbV9kaWN0cyA9IF9Mb2FkT2VtRGljdHMoT1BUSU9OUy5vZW1fc291cmNlKQogCiAgIGFiX3VwZGF0ZSA9IE9QVElPTlMuaW5mb19kaWN0LmdldCgiYWJfdXBkYXRlIikgPT0gInRydWUiCiAKQEAgLTE0MTUsMjAgKzE4OTMsNiBAQAogICAgIE9QVElPTlMua2V5X3Bhc3N3b3JkcyA9IGNvbW1vbi5HZXRLZXlQYXNzd29yZHMoW09QVElPTlMucGFja2FnZV9rZXldKQogCiAgIGlmIGFiX3VwZGF0ZToKLSAgICBpZiBPUFRJT05TLmluY3JlbWVudGFsX3NvdXJjZSBpcyBub3QgTm9uZToKLSAgICAgIE9QVElPTlMudGFyZ2V0X2luZm9fZGljdCA9IE9QVElPTlMuaW5mb19kaWN0Ci0gICAgICBzb3VyY2VfemlwID0gemlwZmlsZS5aaXBGaWxlKE9QVElPTlMuaW5jcmVtZW50YWxfc291cmNlLCAiciIpCi0gICAgICBPUFRJT05TLnNvdXJjZV9pbmZvX2RpY3QgPSBjb21tb24uTG9hZEluZm9EaWN0KHNvdXJjZV96aXApCi0gICAgICBjb21tb24uWmlwQ2xvc2Uoc291cmNlX3ppcCkKLQotICAgIGlmIE9QVElPTlMudmVyYm9zZToKLSAgICAgIHByaW50KCItLS0gdGFyZ2V0IGluZm8gLS0tIikKLSAgICAgIGNvbW1vbi5EdW1wSW5mb0RpY3QoT1BUSU9OUy5pbmZvX2RpY3QpCi0KLSAgICAgIGlmIE9QVElPTlMuaW5jcmVtZW50YWxfc291cmNlIGlzIG5vdCBOb25lOgotICAgICAgICBwcmludCgiLS0tIHNvdXJjZSBpbmZvIC0tLSIpCi0gICAgICAgIGNvbW1vbi5EdW1wSW5mb0RpY3QoT1BUSU9OUy5zb3VyY2VfaW5mb19kaWN0KQotCiAgICAgV3JpdGVBQk9UQVBhY2thZ2VXaXRoQnJpbGxvU2NyaXB0KAogICAgICAgICB0YXJnZXRfZmlsZT1hcmdzWzBdLAogICAgICAgICBvdXRwdXRfZmlsZT1hcmdzWzFdLApAQCAtMTQzNywxMDkgKzE5MDEsNjcgQEAKICAgICBwcmludCgiZG9uZS4iKQogICAgIHJldHVybgogCisgICMgU2FuaXR5IGNoZWNrIHRoZSBsb2FkZWQgaW5mbyBkaWN0cyBmaXJzdC4KKyAgaWYgT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJub19yZWNvdmVyeSIpID09ICJ0cnVlIjoKKyAgICByYWlzZSBjb21tb24uRXh0ZXJuYWxFcnJvcigKKyAgICAgICAgIi0tLSB0YXJnZXQgYnVpbGQgaGFzIHNwZWNpZmllZCBubyByZWNvdmVyeSAtLS0iKQorCisgICMgTm9uLUEvQiBPVEFzIHJlbHkgb24gL2NhY2hlIHBhcnRpdGlvbiB0byBzdG9yZSB0ZW1wb3JhcnkgZmlsZXMuCisgIGNhY2hlX3NpemUgPSBPUFRJT05TLmluZm9fZGljdC5nZXQoImNhY2hlX3NpemUiKQorICBpZiBjYWNoZV9zaXplIGlzIE5vbmU6CisgICAgcHJpbnQoIi0tLSBjYW4ndCBkZXRlcm1pbmUgdGhlIGNhY2hlIHBhcnRpdGlvbiBzaXplIC0tLSIpCisgIE9QVElPTlMuY2FjaGVfc2l6ZSA9IGNhY2hlX3NpemUKKwogICBpZiBPUFRJT05TLmV4dHJhX3NjcmlwdCBpcyBub3QgTm9uZToKICAgICBPUFRJT05TLmV4dHJhX3NjcmlwdCA9IG9wZW4oT1BUSU9OUy5leHRyYV9zY3JpcHQpLnJlYWQoKQogCiAgIGlmIE9QVElPTlMuZXh0cmFjdGVkX2lucHV0IGlzIG5vdCBOb25lOgogICAgIE9QVElPTlMuaW5wdXRfdG1wID0gT1BUSU9OUy5leHRyYWN0ZWRfaW5wdXQKLSAgICBPUFRJT05TLnRhcmdldF90bXAgPSBPUFRJT05TLmlucHV0X3RtcAotICAgIE9QVElPTlMuaW5mb19kaWN0ID0gY29tbW9uLkxvYWRJbmZvRGljdChPUFRJT05TLmlucHV0X3RtcCwgT1BUSU9OUy5pbnB1dF90bXApCi0gICAgaW5wdXRfemlwID0gemlwZmlsZS5aaXBGaWxlKGFyZ3NbMF0sICJyIikKICAgZWxzZToKICAgICBwcmludCgidW56aXBwaW5nIHRhcmdldCB0YXJnZXQtZmlsZXMuLi4iKQotICAgIE9QVElPTlMuaW5wdXRfdG1wLCBpbnB1dF96aXAgPSBjb21tb24uVW56aXBUZW1wKAotICAgICAgICBhcmdzWzBdLCBVTlpJUF9QQVRURVJOKQorICAgIE9QVElPTlMuaW5wdXRfdG1wID0gY29tbW9uLlVuemlwVGVtcChhcmdzWzBdLCBVTlpJUF9QQVRURVJOKQorICBPUFRJT05TLnRhcmdldF90bXAgPSBPUFRJT05TLmlucHV0X3RtcAogCi0gICAgT1BUSU9OUy50YXJnZXRfdG1wID0gT1BUSU9OUy5pbnB1dF90bXAKLSAgICBPUFRJT05TLmluZm9fZGljdCA9IGNvbW1vbi5Mb2FkSW5mb0RpY3QoaW5wdXRfemlwLCBPUFRJT05TLnRhcmdldF90bXApCi0KLSAgaWYgT1BUSU9OUy52ZXJib3NlOgotICAgIHByaW50KCItLS0gdGFyZ2V0IGluZm8gLS0tIikKLSAgICBjb21tb24uRHVtcEluZm9EaWN0KE9QVElPTlMuaW5mb19kaWN0KQotCi0gICMgSWYgdGhlIGNhbGxlciBleHBsaWNpdGx5IHNwZWNpZmllZCB0aGUgZGV2aWNlLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgIyBwYXRoIHZpYSAtcy8tLWRldmljZV9zcGVjaWZpYywgdXNlIHRoYXQuICBPdGhlcndpc2UsIHVzZQotICAjIE1FVEEvcmVsZWFzZXRvb2xzLnB5IGlmIGl0IGlzIHByZXNlbnQgaW4gdGhlIHRhcmdldCB0YXJnZXRfZmlsZXMuCi0gICMgT3RoZXJ3aXNlLCB0YWtlIHRoZSBwYXRoIG9mIHRoZSBmaWxlIGZyb20gJ3Rvb2xfZXh0ZW5zaW9ucycgaW4gdGhlCi0gICMgaW5mbyBkaWN0IGFuZCBsb29rIGZvciB0aGF0IGluIHRoZSBsb2NhbCBmaWxlc3lzdGVtLCByZWxhdGl2ZSB0bwotICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLQorICAjIElmIHRoZSBjYWxsZXIgZXhwbGljaXRseSBzcGVjaWZpZWQgdGhlIGRldmljZS1zcGVjaWZpYyBleHRlbnNpb25zIHBhdGggdmlhCisgICMgLXMgLyAtLWRldmljZV9zcGVjaWZpYywgdXNlIHRoYXQuIE90aGVyd2lzZSwgdXNlIE1FVEEvcmVsZWFzZXRvb2xzLnB5IGlmIGl0CisgICMgaXMgcHJlc2VudCBpbiB0aGUgdGFyZ2V0IHRhcmdldF9maWxlcy4gT3RoZXJ3aXNlLCB0YWtlIHRoZSBwYXRoIG9mIHRoZSBmaWxlCisgICMgZnJvbSAndG9vbF9leHRlbnNpb25zJyBpbiB0aGUgaW5mbyBkaWN0IGFuZCBsb29rIGZvciB0aGF0IGluIHRoZSBsb2NhbAorICAjIGZpbGVzeXN0ZW0sIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAgaWYgT1BUSU9OUy5kZXZpY2Vfc3BlY2lmaWMgaXMgTm9uZToKICAgICBmcm9tX2lucHV0ID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAiTUVUQSIsICJyZWxlYXNldG9vbHMucHkiKQogICAgIGlmIG9zLnBhdGguZXhpc3RzKGZyb21faW5wdXQpOgogICAgICAgcHJpbnQoIih1c2luZyBkZXZpY2Utc3BlY2lmaWMgZXh0ZW5zaW9ucyBmcm9tIHRhcmdldF9maWxlcykiKQogICAgICAgT1BUSU9OUy5kZXZpY2Vfc3BlY2lmaWMgPSBmcm9tX2lucHV0CiAgICAgZWxzZToKLSAgICAgIE9QVElPTlMuZGV2aWNlX3NwZWNpZmljID0gT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJ0b29sX2V4dGVuc2lvbnMiLCBOb25lKQorICAgICAgT1BUSU9OUy5kZXZpY2Vfc3BlY2lmaWMgPSBPUFRJT05TLmluZm9fZGljdC5nZXQoInRvb2xfZXh0ZW5zaW9ucyIpCiAKICAgaWYgT1BUSU9OUy5kZXZpY2Vfc3BlY2lmaWMgaXMgbm90IE5vbmU6CiAgICAgT1BUSU9OUy5kZXZpY2Vfc3BlY2lmaWMgPSBvcy5wYXRoLmFic3BhdGgoT1BUSU9OUy5kZXZpY2Vfc3BlY2lmaWMpCiAKLSAgaWYgT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJub19yZWNvdmVyeSIpID09ICJ0cnVlIjoKLSAgICByYWlzZSBjb21tb24uRXh0ZXJuYWxFcnJvcigKLSAgICAgICAgIi0tLSB0YXJnZXQgYnVpbGQgaGFzIHNwZWNpZmllZCBubyByZWNvdmVyeSAtLS0iKQotCi0gICMgU2V0IHVwIHRoZSBvdXRwdXQgemlwLiBDcmVhdGUgYSB0ZW1wb3JhcnkgemlwIGZpbGUgaWYgc2lnbmluZyBpcyBuZWVkZWQuCi0gIGlmIE9QVElPTlMubm9fc2lnbmluZzoKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcmdzWzFdKToKLSAgICAgIG9zLnVubGluayhhcmdzWzFdKQotICAgIG91dHB1dF96aXAgPSB6aXBmaWxlLlppcEZpbGUoYXJnc1sxXSwgInciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQpCi0gIGVsc2U6Ci0gICAgdGVtcF96aXBfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCi0gICAgb3V0cHV0X3ppcCA9IHppcGZpbGUuWmlwRmlsZSh0ZW1wX3ppcF9maWxlLCAidyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkKLQotICAjIE5vbiBBL0IgT1RBcyByZWx5IG9uIC9jYWNoZSBwYXJ0aXRpb24gdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzLgotICBjYWNoZV9zaXplID0gT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJjYWNoZV9zaXplIiwgTm9uZSkKLSAgaWYgY2FjaGVfc2l6ZSBpcyBOb25lOgotICAgIHByaW50KCItLS0gY2FuJ3QgZGV0ZXJtaW5lIHRoZSBjYWNoZSBwYXJ0aXRpb24gc2l6ZSAtLS0iKQotICBPUFRJT05TLmNhY2hlX3NpemUgPSBjYWNoZV9zaXplCi0KLSAgIyBHZW5lcmF0ZSBhIHZlcmlmeSBwYWNrYWdlLgotICBpZiBPUFRJT05TLmdlbl92ZXJpZnk6Ci0gICAgV3JpdGVWZXJpZnlQYWNrYWdlKGlucHV0X3ppcCwgb3V0cHV0X3ppcCkKLQogICAjIEdlbmVyYXRlIGEgZnVsbCBPVEEuCi0gIGVsaWYgT1BUSU9OUy5pbmNyZW1lbnRhbF9zb3VyY2UgaXMgTm9uZToKLSAgICBXcml0ZUZ1bGxPVEFQYWNrYWdlKGlucHV0X3ppcCwgb3V0cHV0X3ppcCkKKyAgaWYgT1BUSU9OUy5pbmNyZW1lbnRhbF9zb3VyY2UgaXMgTm9uZToKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShhcmdzWzBdLCAncicpIGFzIGlucHV0X3ppcDoKKyAgICAgIFdyaXRlRnVsbE9UQVBhY2thZ2UoCisgICAgICAgICAgaW5wdXRfemlwLAorICAgICAgICAgIG91dHB1dF9maWxlPWFyZ3NbMV0pCiAKLSAgIyBHZW5lcmF0ZSBhbiBpbmNyZW1lbnRhbCBPVEEuIEl0IHdpbGwgZmFsbCBiYWNrIHRvIGdlbmVyYXRlIGEgZnVsbCBPVEEgb24KLSAgIyBmYWlsdXJlIHVubGVzcyBub19mYWxsYmFja190b19mdWxsIGlzIHNwZWNpZmllZC4KKyAgIyBHZW5lcmF0ZSBhbiBpbmNyZW1lbnRhbCBPVEEuCiAgIGVsc2U6CiAgICAgcHJpbnQoInVuemlwcGluZyBzb3VyY2UgdGFyZ2V0LWZpbGVzLi4uIikKLSAgICBPUFRJT05TLnNvdXJjZV90bXAsIHNvdXJjZV96aXAgPSBjb21tb24uVW56aXBUZW1wKAotICAgICAgICBPUFRJT05TLmluY3JlbWVudGFsX3NvdXJjZSwKLSAgICAgICAgVU5aSVBfUEFUVEVSTikKLSAgICBPUFRJT05TLnRhcmdldF9pbmZvX2RpY3QgPSBPUFRJT05TLmluZm9fZGljdAotICAgIE9QVElPTlMuc291cmNlX2luZm9fZGljdCA9IGNvbW1vbi5Mb2FkSW5mb0RpY3Qoc291cmNlX3ppcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVElPTlMuc291cmNlX3RtcCkKLSAgICBpZiBPUFRJT05TLnZlcmJvc2U6Ci0gICAgICBwcmludCgiLS0tIHNvdXJjZSBpbmZvIC0tLSIpCi0gICAgICBjb21tb24uRHVtcEluZm9EaWN0KE9QVElPTlMuc291cmNlX2luZm9fZGljdCkKLSAgICB0cnk6Ci0gICAgICBXcml0ZUJsb2NrSW5jcmVtZW50YWxPVEFQYWNrYWdlKGlucHV0X3ppcCwgc291cmNlX3ppcCwgb3V0cHV0X3ppcCkKLSAgICAgIGlmIE9QVElPTlMubG9nX2RpZmY6Ci0gICAgICAgIG91dF9maWxlID0gb3BlbihPUFRJT05TLmxvZ19kaWZmLCAndycpCisgICAgT1BUSU9OUy5zb3VyY2VfdG1wID0gY29tbW9uLlVuemlwVGVtcCgKKyAgICAgICAgT1BUSU9OUy5pbmNyZW1lbnRhbF9zb3VyY2UsIFVOWklQX1BBVFRFUk4pCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoYXJnc1swXSwgJ3InKSBhcyBpbnB1dF96aXAsIFwKKyAgICAgICAgemlwZmlsZS5aaXBGaWxlKE9QVElPTlMuaW5jcmVtZW50YWxfc291cmNlLCAncicpIGFzIHNvdXJjZV96aXA6CisgICAgICBXcml0ZUJsb2NrSW5jcmVtZW50YWxPVEFQYWNrYWdlKAorICAgICAgICAgIGlucHV0X3ppcCwKKyAgICAgICAgICBzb3VyY2VfemlwLAorICAgICAgICAgIG91dHB1dF9maWxlPWFyZ3NbMV0pCisKKyAgICBpZiBPUFRJT05TLmxvZ19kaWZmOgorICAgICAgd2l0aCBvcGVuKE9QVElPTlMubG9nX2RpZmYsICd3JykgYXMgb3V0X2ZpbGU6CiAgICAgICAgIGltcG9ydCB0YXJnZXRfZmlsZXNfZGlmZgotICAgICAgICB0YXJnZXRfZmlsZXNfZGlmZi5yZWN1cnNpdmVEaWZmKCcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVElPTlMuc291cmNlX3RtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05TLmlucHV0X3RtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZmlsZSkKLSAgICAgICAgb3V0X2ZpbGUuY2xvc2UoKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgaWYgbm90IE9QVElPTlMuZmFsbGJhY2tfdG9fZnVsbDoKLSAgICAgICAgcmFpc2UKLSAgICAgIHByaW50KCItLS0gZmFpbGVkIHRvIGJ1aWxkIGluY3JlbWVudGFsOyBmYWxsaW5nIGJhY2sgdG8gZnVsbCAtLS0iKQotICAgICAgT1BUSU9OUy5pbmNyZW1lbnRhbF9zb3VyY2UgPSBOb25lCi0gICAgICBXcml0ZUZ1bGxPVEFQYWNrYWdlKGlucHV0X3ppcCwgb3V0cHV0X3ppcCkKLQotICBjb21tb24uWmlwQ2xvc2Uob3V0cHV0X3ppcCkKLQotICAjIFNpZ24gdGhlIGdlbmVyYXRlZCB6aXAgcGFja2FnZSB1bmxlc3Mgbm9fc2lnbmluZyBpcyBzcGVjaWZpZWQuCi0gIGlmIG5vdCBPUFRJT05TLm5vX3NpZ25pbmc6Ci0gICAgU2lnbk91dHB1dCh0ZW1wX3ppcF9maWxlLm5hbWUsIGFyZ3NbMV0pCi0gICAgdGVtcF96aXBfZmlsZS5jbG9zZSgpCisgICAgICAgIHRhcmdldF9maWxlc19kaWZmLnJlY3Vyc2l2ZURpZmYoCisgICAgICAgICAgICAnJywgT1BUSU9OUy5zb3VyY2VfdG1wLCBPUFRJT05TLmlucHV0X3RtcCwgb3V0X2ZpbGUpCiAKICAgcHJpbnQoImRvbmUuIikKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3B5bGludHJjIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3B5bGludHJjCmluZGV4IDkwZGUxYWYuLjdiMzQwNWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9weWxpbnRyYworKysgYi90b29scy9yZWxlYXNldG9vbHMvcHlsaW50cmMKQEAgLTE0NCw5ICsxNDQsNiBAQAogCiBbQkFTSUNdCiAKLSMgUmVxdWlyZWQgYXR0cmlidXRlcyBmb3IgbW9kdWxlLCBzZXBhcmF0ZWQgYnkgYSBjb21tYQotcmVxdWlyZWQtYXR0cmlidXRlcz0KLQogIyBMaXN0IG9mIGJ1aWx0aW5zIGZ1bmN0aW9uIG5hbWVzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkLCBzZXBhcmF0ZWQgYnkgYSBjb21tYQogYmFkLWZ1bmN0aW9ucz1tYXAsZmlsdGVyLGlucHV0CiAKQEAgLTM1NywxMCArMzU0LDYgQEAKIAogW0NMQVNTRVNdCiAKLSMgTGlzdCBvZiBpbnRlcmZhY2UgbWV0aG9kcyB0byBpZ25vcmUsIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBUaGlzIGlzIHVzZWQgZm9yCi0jIGluc3RhbmNlIHRvIG5vdCBjaGVjayBtZXRob2RzIGRlZmluZXMgaW4gWm9wZSdzIEludGVyZmFjZSBiYXNlIGNsYXNzLgotaWdub3JlLWlmYWNlLW1ldGhvZHM9aXNJbXBsZW1lbnRlZEJ5LGRlZmVycmVkLGV4dGVuZHMsbmFtZXMsbmFtZXNBbmREZXNjcmlwdGlvbnMscXVlcnlEZXNjcmlwdGlvbkZvcixnZXRCYXNlcyxnZXREZXNjcmlwdGlvbkZvcixnZXREb2MsZ2V0TmFtZSxnZXRUYWdnZWRWYWx1ZSxnZXRUYWdnZWRWYWx1ZVRhZ3MsaXNFcXVhbE9yRXh0ZW5kZWRCeSxzZXRUYWdnZWRWYWx1ZSxpc0ltcGxlbWVudGVkQnlJbnN0YW5jZXNPZixhZGFwdFdpdGgsaXNfaW1wbGVtZW50ZWRfYnkKLQogIyBMaXN0IG9mIG1ldGhvZCBuYW1lcyB1c2VkIHRvIGRlY2xhcmUgKGkuZS4gYXNzaWduKSBpbnN0YW5jZSBhdHRyaWJ1dGVzLgogZGVmaW5pbmctYXR0ci1tZXRob2RzPV9faW5pdF9fLF9fbmV3X18sc2V0VXAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3JhbmdlbGliLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3JhbmdlbGliLnB5CmluZGV4IDg3MzgwYTUuLjM2YmVjZjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9yYW5nZWxpYi5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvcmFuZ2VsaWIucHkKQEAgLTEzLDE4ICsxMywyNiBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCiBpbXBvcnQgaGVhcHEKIGltcG9ydCBpdGVydG9vbHMKIAorCiBfX2FsbF9fID0gWyJSYW5nZVNldCJdCiAKKwogY2xhc3MgUmFuZ2VTZXQob2JqZWN0KToKLSAgIiIiQSBSYW5nZVNldCByZXByZXNlbnRzIGEgc2V0IG9mIG5vbm92ZXJsYXBwaW5nIHJhbmdlcyBvbiB0aGUKLSAgaW50ZWdlcnMgKGllLCBhIHNldCBvZiBpbnRlZ2VycywgYnV0IGVmZmljaWVudCB3aGVuIHRoZSBzZXQgY29udGFpbnMKLSAgbG90cyBvZiBydW5zLiIiIgorICAiIiJBIFJhbmdlU2V0IHJlcHJlc2VudHMgYSBzZXQgb2Ygbm9uLW92ZXJsYXBwaW5nIHJhbmdlcyBvbiBpbnRlZ2Vycy4KKworICBBdHRyaWJ1dGVzOgorICAgIG1vbm90b25pYzogV2hldGhlciB0aGUgaW5wdXQgaGFzIGFsbCBpdHMgaW50ZWdlcnMgaW4gaW5jcmVhc2luZyBvcmRlci4KKyAgICBleHRyYTogQSBkaWN0IHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGNhbGxlciwgZS5nLiB0byBzdG9yZSBpbmZvIHRoYXQncworICAgICAgICBvbmx5IG1lYW5pbmdmdWwgdG8gY2FsbGVyLgorICAiIiIKIAogICBkZWYgX19pbml0X18oc2VsZiwgZGF0YT1Ob25lKToKICAgICBzZWxmLm1vbm90b25pYyA9IEZhbHNlCisgICAgc2VsZi5fZXh0cmEgPSB7fQogICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKToKICAgICAgIHNlbGYuX3BhcnNlX2ludGVybmFsKGRhdGEpCiAgICAgZWxpZiBkYXRhOgpAQCAtNTYsMTggKzY0LDI0IEBACiAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICByZXR1cm4gJzxSYW5nZVNldCgiJyArIHNlbGYudG9fc3RyaW5nKCkgKyAnIik+JwogCisgIEBwcm9wZXJ0eQorICBkZWYgZXh0cmEoc2VsZik6CisgICAgcmV0dXJuIHNlbGYuX2V4dHJhCisKICAgQGNsYXNzbWV0aG9kCiAgIGRlZiBwYXJzZShjbHMsIHRleHQpOgotICAgICIiIlBhcnNlIGEgdGV4dCBzdHJpbmcgY29uc2lzdGluZyBvZiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mCi0gICAgYmxvY2tzIGFuZCByYW5nZXMsIGVnICIxMC0yMCAzMCAzNS00MCIuICBSYW5nZXMgYXJlIGludGVycHJldGVkIHRvCi0gICAgaW5jbHVkZSBib3RoIHRoZWlyIGVuZHMgKHNvIHRoZSBhYm92ZSBleGFtcGxlIHJlcHJlc2VudHMgMTgKLSAgICBpbmRpdmlkdWFsIGJsb2Nrcy4gIFJldHVybnMgYSBSYW5nZVNldCBvYmplY3QuCisgICAgIiIiUGFyc2VzIGEgdGV4dCBzdHJpbmcgaW50byBhIFJhbmdlU2V0LgogCi0gICAgSWYgdGhlIGlucHV0IGhhcyBhbGwgaXRzIGJsb2NrcyBpbiBpbmNyZWFzaW5nIG9yZGVyLCB0aGVuIHJldHVybmVkCi0gICAgUmFuZ2VTZXQgd2lsbCBoYXZlIGFuIGV4dHJhIGF0dHJpYnV0ZSAnbW9ub3RvbmljJyB0aGF0IGlzIHNldCB0bwotICAgIFRydWUuICBGb3IgZXhhbXBsZSB0aGUgaW5wdXQgIjEwLTIwIDMwIiBpcyBtb25vdG9uaWMsIGJ1dCB0aGUgaW5wdXQKLSAgICAiMTUtMjAgMzAgMTAtMTQiIGlzIG5vdCwgZXZlbiB0aG91Z2ggdGhleSByZXByZXNlbnQgdGhlIHNhbWUgc2V0Ci0gICAgb2YgYmxvY2tzIChhbmQgdGhlIHR3byBSYW5nZVNldHMgd2lsbCBjb21wYXJlIGVxdWFsIHdpdGggPT0pLgorICAgIFRoZSBpbnB1dCB0ZXh0IHN0cmluZyBjb25zaXN0cyBvZiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGJsb2NrcyBhbmQKKyAgICByYW5nZXMsIGUuZy4gIjEwLTIwIDMwIDM1LTQwIi4gUmFuZ2VzIGFyZSBpbnRlcnByZXRlZCB0byBpbmNsdWRlIGJvdGggdGhlaXIKKyAgICBlbmRzIChzbyB0aGUgYWJvdmUgZXhhbXBsZSByZXByZXNlbnRzIDE4IGluZGl2aWR1YWwgYmxvY2tzKS4gUmV0dXJucyBhCisgICAgUmFuZ2VTZXQgb2JqZWN0LgorCisgICAgSWYgdGhlIGlucHV0IGhhcyBhbGwgaXRzIGJsb2NrcyBpbiBpbmNyZWFzaW5nIG9yZGVyLCB0aGVuIHRoZSAnbW9ub3RvbmljJworICAgIGF0dHJpYnV0ZSBvZiB0aGUgcmV0dXJuZWQgUmFuZ2VTZXQgd2lsbCBiZSBzZXQgdG8gVHJ1ZS4gRm9yIGV4YW1wbGUgdGhlCisgICAgaW5wdXQgIjEwLTIwIDMwIiBpcyBtb25vdG9uaWMsIGJ1dCB0aGUgaW5wdXQgIjE1LTIwIDMwIDEwLTE0IiBpcyBub3QsIGV2ZW4KKyAgICB0aG91Z2ggdGhleSByZXByZXNlbnQgdGhlIHNhbWUgc2V0IG9mIGJsb2NrcyAoYW5kIHRoZSB0d28gUmFuZ2VTZXRzIHdpbGwKKyAgICBjb21wYXJlIGVxdWFsIHdpdGggPT0pLgogICAgICIiIgogICAgIHJldHVybiBjbHModGV4dCkKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3NpZ25fdGFyZ2V0X2ZpbGVzX2Fwa3MucHkgYi90b29scy9yZWxlYXNldG9vbHMvc2lnbl90YXJnZXRfZmlsZXNfYXBrcy5weQppbmRleCBlNGVmMmMxLi5mYTYyYzhmIDEwMDc1NQotLS0gYS90b29scy9yZWxlYXNldG9vbHMvc2lnbl90YXJnZXRfZmlsZXNfYXBrcy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvc2lnbl90YXJnZXRfZmlsZXNfYXBrcy5weQpAQCAtOTAsMjYgKzkwLDMxIEBACiAgICAgICB0aGUgZXhpc3Rpbmcgb25lcyBpbiBpbmZvIGRpY3QuCiAiIiIKIAotaW1wb3J0IHN5cwotCi1pZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwNzAwMDA6Ci0gIHByaW50ID4+IHN5cy5zdGRlcnIsICJQeXRob24gMi43IG9yIG5ld2VyIGlzIHJlcXVpcmVkLiIKLSAgc3lzLmV4aXQoMSkKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAogaW1wb3J0IGJhc2U2NAotaW1wb3J0IGNTdHJpbmdJTwogaW1wb3J0IGNvcHkKIGltcG9ydCBlcnJubworaW1wb3J0IGd6aXAKIGltcG9ydCBvcwogaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RhdAogaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHppcGZpbGUKK2Zyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQogCiBpbXBvcnQgYWRkX2ltZ190b190YXJnZXRfZmlsZXMKIGltcG9ydCBjb21tb24KIAorCitpZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwNzAwMDA6CisgIHByaW50KCJQeXRob24gMi43IG9yIG5ld2VyIGlzIHJlcXVpcmVkLiIsIGZpbGU9c3lzLnN0ZGVycikKKyAgc3lzLmV4aXQoMSkKKworCiBPUFRJT05TID0gY29tbW9uLk9QVElPTlMKIAogT1BUSU9OUy5leHRyYV9hcGtzID0ge30KQEAgLTEyNCw5ICsxMjksOCBAQAogT1BUSU9OUy5hdmJfYWxnb3JpdGhtcyA9IHt9CiBPUFRJT05TLmF2Yl9leHRyYV9hcmdzID0ge30KIAotZGVmIEdldEFwa0NlcnRzKHRmX3ppcCk6Ci0gIGNlcnRtYXAgPSBjb21tb24uUmVhZEFwa0NlcnRzKHRmX3ppcCkKIAorZGVmIEdldEFwa0NlcnRzKGNlcnRtYXApOgogICAjIGFwcGx5IHRoZSBrZXkgcmVtYXBwaW5nIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZQogICBmb3IgYXBrLCBjZXJ0IGluIGNlcnRtYXAuaXRlcml0ZW1zKCk6CiAgICAgY2VydG1hcFthcGtdID0gT1BUSU9OUy5rZXlfbWFwLmdldChjZXJ0LCBjZXJ0KQpAQCAtMTQwLDI4ICsxNDQsNTAgQEAKICAgcmV0dXJuIGNlcnRtYXAKIAogCi1kZWYgQ2hlY2tBbGxBcGtzU2lnbmVkKGlucHV0X3RmX3ppcCwgYXBrX2tleV9tYXApOgorZGVmIENoZWNrQWxsQXBrc1NpZ25lZChpbnB1dF90Zl96aXAsIGFwa19rZXlfbWFwLCBjb21wcmVzc2VkX2V4dGVuc2lvbik6CiAgICIiIkNoZWNrIHRoYXQgYWxsIHRoZSBBUEtzIHdlIHdhbnQgdG8gc2lnbiBoYXZlIGtleXMgc3BlY2lmaWVkLCBhbmQKICAgZXJyb3Igb3V0IGlmIHRoZXkgZG9uJ3QuIiIiCiAgIHVua25vd25fYXBrcyA9IFtdCisgIGNvbXByZXNzZWRfYXBrX2V4dGVuc2lvbiA9IE5vbmUKKyAgaWYgY29tcHJlc3NlZF9leHRlbnNpb246CisgICAgY29tcHJlc3NlZF9hcGtfZXh0ZW5zaW9uID0gIi5hcGsiICsgY29tcHJlc3NlZF9leHRlbnNpb24KICAgZm9yIGluZm8gaW4gaW5wdXRfdGZfemlwLmluZm9saXN0KCk6Ci0gICAgaWYgaW5mby5maWxlbmFtZS5lbmRzd2l0aCgiLmFwayIpOgorICAgIGlmIChpbmZvLmZpbGVuYW1lLmVuZHN3aXRoKCIuYXBrIikgb3IKKyAgICAgICAgKGNvbXByZXNzZWRfYXBrX2V4dGVuc2lvbiBhbmQKKyAgICAgICAgIGluZm8uZmlsZW5hbWUuZW5kc3dpdGgoY29tcHJlc3NlZF9hcGtfZXh0ZW5zaW9uKSkpOgogICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoaW5mby5maWxlbmFtZSkKKyAgICAgIGlmIGNvbXByZXNzZWRfYXBrX2V4dGVuc2lvbiBhbmQgbmFtZS5lbmRzd2l0aChjb21wcmVzc2VkX2Fwa19leHRlbnNpb24pOgorICAgICAgICBuYW1lID0gbmFtZVs6LWxlbihjb21wcmVzc2VkX2V4dGVuc2lvbildCiAgICAgICBpZiBuYW1lIG5vdCBpbiBhcGtfa2V5X21hcDoKICAgICAgICAgdW5rbm93bl9hcGtzLmFwcGVuZChuYW1lKQogICBpZiB1bmtub3duX2Fwa3M6Ci0gICAgcHJpbnQgIkVSUk9SOiBubyBrZXkgc3BlY2lmaWVkIGZvcjpcblxuICIsCi0gICAgcHJpbnQgIlxuICAiLmpvaW4odW5rbm93bl9hcGtzKQotICAgIHByaW50ICJcblVzZSAnLWUgPGFwa25hbWU+PScgdG8gc3BlY2lmeSBhIGtleSAod2hpY2ggbWF5IGJlIGFuIgotICAgIHByaW50ICJlbXB0eSBzdHJpbmcgdG8gbm90IHNpZ24gdGhpcyBhcGspLiIKKyAgICBwcmludCgiRVJST1I6IG5vIGtleSBzcGVjaWZpZWQgZm9yOlxuIikKKyAgICBwcmludCgiICAiICsgIlxuICAiLmpvaW4odW5rbm93bl9hcGtzKSkKKyAgICBwcmludCgiXG5Vc2UgJy1lIDxhcGtuYW1lPj0nIHRvIHNwZWNpZnkgYSBrZXkgKHdoaWNoIG1heSBiZSBhbiBlbXB0eSAiCisgICAgICAgICAgInN0cmluZyB0byBub3Qgc2lnbiB0aGlzIGFwaykuIikKICAgICBzeXMuZXhpdCgxKQogCiAKLWRlZiBTaWduQXBrKGRhdGEsIGtleW5hbWUsIHB3LCBwbGF0Zm9ybV9hcGlfbGV2ZWwsIGNvZGVuYW1lX3RvX2FwaV9sZXZlbF9tYXApOgorZGVmIFNpZ25BcGsoZGF0YSwga2V5bmFtZSwgcHcsIHBsYXRmb3JtX2FwaV9sZXZlbCwgY29kZW5hbWVfdG9fYXBpX2xldmVsX21hcCwKKyAgICAgICAgICAgIGlzX2NvbXByZXNzZWQpOgogICB1bnNpZ25lZCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCiAgIHVuc2lnbmVkLndyaXRlKGRhdGEpCiAgIHVuc2lnbmVkLmZsdXNoKCkKIAorICBpZiBpc19jb21wcmVzc2VkOgorICAgIHVuY29tcHJlc3NlZCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgd2l0aCBnemlwLm9wZW4odW5zaWduZWQubmFtZSwgInJiIikgYXMgaW5fZmlsZSwgXAorICAgICAgICAgb3Blbih1bmNvbXByZXNzZWQubmFtZSwgIndiIikgYXMgb3V0X2ZpbGU6CisgICAgICBzaHV0aWwuY29weWZpbGVvYmooaW5fZmlsZSwgb3V0X2ZpbGUpCisKKyAgICAjIEZpbmFsbHksIGNsb3NlIHRoZSAidW5zaWduZWQiIGZpbGUgKHdoaWNoIGlzIGd6aXAgY29tcHJlc3NlZCksIGFuZCB0aGVuCisgICAgIyByZXBsYWNlIGl0IHdpdGggdGhlIHVuY29tcHJlc3NlZCB2ZXJzaW9uLgorICAgICMKKyAgICAjIFRPRE8obmFyYXlhbik6IEFsbCB0aGlzIG5hc3RpbmVzcyBjYW4gYmUgYXZvaWRlZCBpZiBweXRob24gMy4yIGlzIGluIHVzZSwKKyAgICAjIHdlIGNvdWxkIGp1c3QgZ3ppcCAvIGd1bnppcCBpbi1tZW1vcnkgYnVmZmVycyBpbnN0ZWFkLgorICAgIHVuc2lnbmVkLmNsb3NlKCkKKyAgICB1bnNpZ25lZCA9IHVuY29tcHJlc3NlZAorCiAgIHNpZ25lZCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCiAKICAgIyBGb3IgcHJlLU4gYnVpbGRzLCBkb24ndCB1cGdyYWRlIHRvIFNIQS0yNTYgSkFSIHNpZ25hdHVyZXMgYmFzZWQgb24gdGhlIEFQSydzCkBAIC0xODMsMTAgKzIwOSwyMiBAQAogICAgIG1pbl9hcGlfbGV2ZWwgPSAxCiAKICAgY29tbW9uLlNpZ25GaWxlKHVuc2lnbmVkLm5hbWUsIHNpZ25lZC5uYW1lLCBrZXluYW1lLCBwdywKLSAgICAgIG1pbl9hcGlfbGV2ZWw9bWluX2FwaV9sZXZlbCwKLSAgICAgIGNvZGVuYW1lX3RvX2FwaV9sZXZlbF9tYXA9Y29kZW5hbWVfdG9fYXBpX2xldmVsX21hcCkKKyAgICAgICAgICAgICAgICAgIG1pbl9hcGlfbGV2ZWw9bWluX2FwaV9sZXZlbCwKKyAgICAgICAgICAgICAgICAgIGNvZGVuYW1lX3RvX2FwaV9sZXZlbF9tYXA9Y29kZW5hbWVfdG9fYXBpX2xldmVsX21hcCkKIAotICBkYXRhID0gc2lnbmVkLnJlYWQoKQorICBkYXRhID0gTm9uZQorICBpZiBpc19jb21wcmVzc2VkOgorICAgICMgUmVjb21wcmVzcyB0aGUgZmlsZSBhZnRlciBpdCBoYXMgYmVlbiBzaWduZWQuCisgICAgY29tcHJlc3NlZCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgd2l0aCBvcGVuKHNpZ25lZC5uYW1lLCAicmIiKSBhcyBpbl9maWxlLCBcCisgICAgICAgICBnemlwLm9wZW4oY29tcHJlc3NlZC5uYW1lLCAid2IiKSBhcyBvdXRfZmlsZToKKyAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihpbl9maWxlLCBvdXRfZmlsZSkKKworICAgIGRhdGEgPSBjb21wcmVzc2VkLnJlYWQoKQorICAgIGNvbXByZXNzZWQuY2xvc2UoKQorICBlbHNlOgorICAgIGRhdGEgPSBzaWduZWQucmVhZCgpCisKICAgdW5zaWduZWQuY2xvc2UoKQogICBzaWduZWQuY2xvc2UoKQogCkBAIC0xOTUsMTEgKzIzMywxOCBAQAogCiBkZWYgUHJvY2Vzc1RhcmdldEZpbGVzKGlucHV0X3RmX3ppcCwgb3V0cHV0X3RmX3ppcCwgbWlzY19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICBhcGtfa2V5X21hcCwga2V5X3Bhc3N3b3JkcywgcGxhdGZvcm1fYXBpX2xldmVsLAotICAgICAgICAgICAgICAgICAgICAgICBjb2RlbmFtZV90b19hcGlfbGV2ZWxfbWFwKToKKyAgICAgICAgICAgICAgICAgICAgICAgY29kZW5hbWVfdG9fYXBpX2xldmVsX21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZF9leHRlbnNpb24pOgogCi0gIG1heHNpemUgPSBtYXgoW2xlbihvcy5wYXRoLmJhc2VuYW1lKGkuZmlsZW5hbWUpKQotICAgICAgICAgICAgICAgICBmb3IgaSBpbiBpbnB1dF90Zl96aXAuaW5mb2xpc3QoKQotICAgICAgICAgICAgICAgICBpZiBpLmZpbGVuYW1lLmVuZHN3aXRoKCcuYXBrJyldKQorICBjb21wcmVzc2VkX2Fwa19leHRlbnNpb24gPSBOb25lCisgIGlmIGNvbXByZXNzZWRfZXh0ZW5zaW9uOgorICAgIGNvbXByZXNzZWRfYXBrX2V4dGVuc2lvbiA9ICIuYXBrIiArIGNvbXByZXNzZWRfZXh0ZW5zaW9uCisKKyAgbWF4c2l6ZSA9IG1heCgKKyAgICAgIFtsZW4ob3MucGF0aC5iYXNlbmFtZShpLmZpbGVuYW1lKSkgZm9yIGkgaW4gaW5wdXRfdGZfemlwLmluZm9saXN0KCkKKyAgICAgICBpZiAoaS5maWxlbmFtZS5lbmRzd2l0aCgnLmFwaycpIG9yCisgICAgICAgICAgIChjb21wcmVzc2VkX2Fwa19leHRlbnNpb24gYW5kCisgICAgICAgICAgICBpLmZpbGVuYW1lLmVuZHN3aXRoKGNvbXByZXNzZWRfYXBrX2V4dGVuc2lvbikpKV0pCiAgIHN5c3RlbV9yb290X2ltYWdlID0gbWlzY19pbmZvLmdldCgic3lzdGVtX3Jvb3RfaW1hZ2UiKSA9PSAidHJ1ZSIKIAogICBmb3IgaW5mbyBpbiBpbnB1dF90Zl96aXAuaW5mb2xpc3QoKToKQEAgLTIxMCwxNyArMjU1LDI0IEBACiAgICAgb3V0X2luZm8gPSBjb3B5LmNvcHkoaW5mbykKIAogICAgICMgU2lnbiBBUEtzLgotICAgIGlmIGluZm8uZmlsZW5hbWUuZW5kc3dpdGgoIi5hcGsiKToKKyAgICBpZiAoaW5mby5maWxlbmFtZS5lbmRzd2l0aCgiLmFwayIpIG9yCisgICAgICAgIChjb21wcmVzc2VkX2Fwa19leHRlbnNpb24gYW5kCisgICAgICAgICBpbmZvLmZpbGVuYW1lLmVuZHN3aXRoKGNvbXByZXNzZWRfYXBrX2V4dGVuc2lvbikpKToKKyAgICAgIGlzX2NvbXByZXNzZWQgPSAoY29tcHJlc3NlZF9leHRlbnNpb24gYW5kCisgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZmlsZW5hbWUuZW5kc3dpdGgoY29tcHJlc3NlZF9hcGtfZXh0ZW5zaW9uKSkKICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGluZm8uZmlsZW5hbWUpCisgICAgICBpZiBpc19jb21wcmVzc2VkOgorICAgICAgICBuYW1lID0gbmFtZVs6LWxlbihjb21wcmVzc2VkX2V4dGVuc2lvbildCisKICAgICAgIGtleSA9IGFwa19rZXlfbWFwW25hbWVdCiAgICAgICBpZiBrZXkgbm90IGluIGNvbW1vbi5TUEVDSUFMX0NFUlRfU1RSSU5HUzoKLSAgICAgICAgcHJpbnQgIiAgICBzaWduaW5nOiAlLSpzICglcykiICUgKG1heHNpemUsIG5hbWUsIGtleSkKKyAgICAgICAgcHJpbnQoIiAgICBzaWduaW5nOiAlLSpzICglcykiICUgKG1heHNpemUsIG5hbWUsIGtleSkpCiAgICAgICAgIHNpZ25lZF9kYXRhID0gU2lnbkFwayhkYXRhLCBrZXksIGtleV9wYXNzd29yZHNba2V5XSwgcGxhdGZvcm1fYXBpX2xldmVsLAotICAgICAgICAgICAgY29kZW5hbWVfdG9fYXBpX2xldmVsX21hcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVuYW1lX3RvX2FwaV9sZXZlbF9tYXAsIGlzX2NvbXByZXNzZWQpCiAgICAgICAgIGNvbW1vbi5aaXBXcml0ZVN0cihvdXRwdXRfdGZfemlwLCBvdXRfaW5mbywgc2lnbmVkX2RhdGEpCiAgICAgICBlbHNlOgogICAgICAgICAjIGFuIEFQSyB3ZSdyZSBub3Qgc3VwcG9zZWQgdG8gc2lnbi4KLSAgICAgICAgcHJpbnQgIk5PVCBzaWduaW5nOiAlcyIgJSAobmFtZSwpCisgICAgICAgIHByaW50KCJOT1Qgc2lnbmluZzogJXMiICUgKG5hbWUsKSkKICAgICAgICAgY29tbW9uLlppcFdyaXRlU3RyKG91dHB1dF90Zl96aXAsIG91dF9pbmZvLCBkYXRhKQogCiAgICAgIyBTeXN0ZW0gcHJvcGVydGllcy4KQEAgLTIzMiwxNSArMjg0LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUk9PVC9kZWZhdWx0LnByb3AiLCAgIyBsZWdhY3kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSRUNPVkVSWS9SQU1ESVNLL3Byb3AuZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUkVDT1ZFUlkvUkFNRElTSy9kZWZhdWx0LnByb3AiKTogICMgbGVnYWN5Ci0gICAgICBwcmludCAicmV3cml0aW5nICVzOiIgJSAoaW5mby5maWxlbmFtZSwpCisgICAgICBwcmludCgiUmV3cml0aW5nICVzOiIgJSAoaW5mby5maWxlbmFtZSwpKQogICAgICAgaWYgc3RhdC5TX0lTTE5LKGluZm8uZXh0ZXJuYWxfYXR0ciA+PiAxNik6CiAgICAgICAgIG5ld19kYXRhID0gZGF0YQogICAgICAgZWxzZToKLSAgICAgICAgbmV3X2RhdGEgPSBSZXdyaXRlUHJvcHMoZGF0YSwgbWlzY19pbmZvKQorICAgICAgICBuZXdfZGF0YSA9IFJld3JpdGVQcm9wcyhkYXRhKQogICAgICAgY29tbW9uLlppcFdyaXRlU3RyKG91dHB1dF90Zl96aXAsIG91dF9pbmZvLCBuZXdfZGF0YSkKIAorICAgICMgUmVwbGFjZSB0aGUgY2VydHMgaW4gKm1hY19wZXJtaXNzaW9ucy54bWwgKHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlLCBzdWNoCisgICAgIyBhcyB7c3lzdGVtLHZlbmRvcn0vZXRjL3NlbGludXgve3BsYXQsbm9ucGxhdH1fbWFjX3Blcm1pc3Npb25zLnhtbCkuCiAgICAgZWxpZiBpbmZvLmZpbGVuYW1lLmVuZHN3aXRoKCJtYWNfcGVybWlzc2lvbnMueG1sIik6Ci0gICAgICBwcmludCAicmV3cml0aW5nICVzIHdpdGggbmV3IGtleXMuIiAlIChpbmZvLmZpbGVuYW1lLCkKKyAgICAgIHByaW50KCJSZXdyaXRpbmcgJXMgd2l0aCBuZXcga2V5cy4iICUgKGluZm8uZmlsZW5hbWUsKSkKICAgICAgIG5ld19kYXRhID0gUmVwbGFjZUNlcnRzKGRhdGEpCiAgICAgICBjb21tb24uWmlwV3JpdGVTdHIob3V0cHV0X3RmX3ppcCwgb3V0X2luZm8sIG5ld19kYXRhKQogCkBAIC0yOTEsMTAgKzM0NSw3IEBACiAgICAgUmVwbGFjZVZlcml0eVByaXZhdGVLZXkobWlzY19pbmZvLCBPUFRJT05TLnJlcGxhY2VfdmVyaXR5X3ByaXZhdGVfa2V5WzFdKQogCiAgIGlmIE9QVElPTlMucmVwbGFjZV92ZXJpdHlfcHVibGljX2tleToKLSAgICBpZiBzeXN0ZW1fcm9vdF9pbWFnZToKLSAgICAgIGRlc3QgPSAiUk9PVC92ZXJpdHlfa2V5IgotICAgIGVsc2U6Ci0gICAgICBkZXN0ID0gIkJPT1QvUkFNRElTSy92ZXJpdHlfa2V5IgorICAgIGRlc3QgPSAiUk9PVC92ZXJpdHlfa2V5IiBpZiBzeXN0ZW1fcm9vdF9pbWFnZSBlbHNlICJCT09UL1JBTURJU0svdmVyaXR5X2tleSIKICAgICAjIFdlIGFyZSByZXBsYWNpbmcgdGhlIG9uZSBpbiBib290IGltYWdlIG9ubHksIHNpbmNlIHRoZSBvbmUgdW5kZXIKICAgICAjIHJlY292ZXJ5IHdvbid0IGV2ZXIgYmUgbmVlZGVkLgogICAgIFJlcGxhY2VWZXJpdHlQdWJsaWNLZXkoCkBAIC0zMTMsMzggKzM2NCw2NyBAQAogCiAKIGRlZiBSZXBsYWNlQ2VydHMoZGF0YSk6Ci0gICIiIkdpdmVuIGEgc3RyaW5nIG9mIGRhdGEsIHJlcGxhY2UgYWxsIG9jY3VyZW5jZXMgb2YgYSBzZXQKLSAgb2YgWDUwOSBjZXJ0cyB3aXRoIGEgbmV3ZXIgc2V0IG9mIFg1MDkgY2VydHMgYW5kIHJldHVybgotICB0aGUgdXBkYXRlZCBkYXRhIHN0cmluZy4iIiIKLSAgZm9yIG9sZCwgbmV3IGluIE9QVElPTlMua2V5X21hcC5pdGVyaXRlbXMoKToKLSAgICB0cnk6Ci0gICAgICBpZiBPUFRJT05TLnZlcmJvc2U6Ci0gICAgICAgIHByaW50ICIgICAgUmVwbGFjaW5nICVzLng1MDkucGVtIHdpdGggJXMueDUwOS5wZW0iICUgKG9sZCwgbmV3KQotICAgICAgZiA9IG9wZW4ob2xkICsgIi54NTA5LnBlbSIpCi0gICAgICBvbGRfY2VydDE2ID0gYmFzZTY0LmIxNmVuY29kZShjb21tb24uUGFyc2VDZXJ0aWZpY2F0ZShmLnJlYWQoKSkpLmxvd2VyKCkKLSAgICAgIGYuY2xvc2UoKQotICAgICAgZiA9IG9wZW4obmV3ICsgIi54NTA5LnBlbSIpCi0gICAgICBuZXdfY2VydDE2ID0gYmFzZTY0LmIxNmVuY29kZShjb21tb24uUGFyc2VDZXJ0aWZpY2F0ZShmLnJlYWQoKSkpLmxvd2VyKCkKLSAgICAgIGYuY2xvc2UoKQotICAgICAgIyBPbmx5IG1hdGNoIGVudGlyZSBjZXJ0cy4KLSAgICAgIHBhdHRlcm4gPSAiXFxiIitvbGRfY2VydDE2KyJcXGIiCi0gICAgICAoZGF0YSwgbnVtKSA9IHJlLnN1Ym4ocGF0dGVybiwgbmV3X2NlcnQxNiwgZGF0YSwgZmxhZ3M9cmUuSUdOT1JFQ0FTRSkKLSAgICAgIGlmIE9QVElPTlMudmVyYm9zZToKLSAgICAgICAgcHJpbnQgIiAgICBSZXBsYWNlZCAlZCBvY2N1cmVuY2Uocykgb2YgJXMueDUwOS5wZW0gd2l0aCAiIFwKLSAgICAgICAgICAgICIlcy54NTA5LnBlbSIgJSAobnVtLCBvbGQsIG5ldykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlOgotICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQgYW5kIG5vdCBPUFRJT05TLnZlcmJvc2U6Ci0gICAgICAgIGNvbnRpbnVlCisgICIiIlJlcGxhY2VzIGFsbCB0aGUgb2NjdXJlbmNlcyBvZiBYLjUwOSBjZXJ0cyB3aXRoIHRoZSBuZXcgb25lcy4KIAotICAgICAgcHJpbnQgIiAgICBFcnJvciBhY2Nlc3NpbmcgJXMuICVzLiBTa2lwIHJlcGxhY2luZyAlcy54NTA5LnBlbSAiIFwKLSAgICAgICAgICAid2l0aCAlcy54NTA5LnBlbS4iICUgKGUuZmlsZW5hbWUsIGUuc3RyZXJyb3IsIG9sZCwgbmV3KQorICBUaGUgbWFwcGluZyBpbmZvIGlzIHJlYWQgZnJvbSBPUFRJT05TLmtleV9tYXAuIE5vbi1leGlzdGVudCBjZXJ0aWZpY2F0ZSB3aWxsCisgIGJlIHNraXBwZWQuIEFmdGVyIHRoZSByZXBsYWNlbWVudCwgaXQgYWRkaXRpb25hbGx5IGNoZWNrcyBmb3IgZHVwbGljYXRlCisgIGVudHJpZXMsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBmYWlsIHRoZSBwb2xpY3kgbG9hZGluZyBjb2RlIGluCisgIGZyYW1ld29ya3MvYmFzZS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1NFTGludXhNTUFDLmphdmEuCisKKyAgQXJnczoKKyAgICBkYXRhOiBJbnB1dCBzdHJpbmcgdGhhdCBjb250YWlucyBhIHNldCBvZiBYLjUwOSBjZXJ0cy4KKworICBSZXR1cm5zOgorICAgIEEgc3RyaW5nIGFmdGVyIHRoZSByZXBsYWNlbWVudC4KKworICBSYWlzZXM6CisgICAgQXNzZXJ0aW9uRXJyb3I6IE9uIGZpbmRpbmcgZHVwbGljYXRlIGVudHJpZXMuCisgICIiIgorICBmb3Igb2xkLCBuZXcgaW4gT1BUSU9OUy5rZXlfbWFwLml0ZXJpdGVtcygpOgorICAgIGlmIE9QVElPTlMudmVyYm9zZToKKyAgICAgIHByaW50KCIgICAgUmVwbGFjaW5nICVzLng1MDkucGVtIHdpdGggJXMueDUwOS5wZW0iICUgKG9sZCwgbmV3KSkKKworICAgIHRyeToKKyAgICAgIHdpdGggb3BlbihvbGQgKyAiLng1MDkucGVtIikgYXMgb2xkX2ZwOgorICAgICAgICBvbGRfY2VydDE2ID0gYmFzZTY0LmIxNmVuY29kZSgKKyAgICAgICAgICAgIGNvbW1vbi5QYXJzZUNlcnRpZmljYXRlKG9sZF9mcC5yZWFkKCkpKS5sb3dlcigpCisgICAgICB3aXRoIG9wZW4obmV3ICsgIi54NTA5LnBlbSIpIGFzIG5ld19mcDoKKyAgICAgICAgbmV3X2NlcnQxNiA9IGJhc2U2NC5iMTZlbmNvZGUoCisgICAgICAgICAgICBjb21tb24uUGFyc2VDZXJ0aWZpY2F0ZShuZXdfZnAucmVhZCgpKSkubG93ZXIoKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICBpZiBPUFRJT05TLnZlcmJvc2Ugb3IgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgIHByaW50KCIgICAgRXJyb3IgYWNjZXNzaW5nICVzOiAlcy5cblNraXAgcmVwbGFjaW5nICVzLng1MDkucGVtIHdpdGggIgorICAgICAgICAgICAgICAiJXMueDUwOS5wZW0uIiAlIChlLmZpbGVuYW1lLCBlLnN0cmVycm9yLCBvbGQsIG5ldykpCisgICAgICBjb250aW51ZQorCisgICAgIyBPbmx5IG1hdGNoIGVudGlyZSBjZXJ0cy4KKyAgICBwYXR0ZXJuID0gIlxcYiIgKyBvbGRfY2VydDE2ICsgIlxcYiIKKyAgICAoZGF0YSwgbnVtKSA9IHJlLnN1Ym4ocGF0dGVybiwgbmV3X2NlcnQxNiwgZGF0YSwgZmxhZ3M9cmUuSUdOT1JFQ0FTRSkKKworICAgIGlmIE9QVElPTlMudmVyYm9zZToKKyAgICAgIHByaW50KCIgICAgUmVwbGFjZWQgJWQgb2NjdXJlbmNlKHMpIG9mICVzLng1MDkucGVtIHdpdGggJXMueDUwOS5wZW0iICUgKAorICAgICAgICAgIG51bSwgb2xkLCBuZXcpKQorCisgICMgVmVyaWZ5IHRoYXQgdGhlcmUncmUgbm8gZHVwbGljYXRlIGVudHJpZXMgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50LiBOb3RlIHRoYXQKKyAgIyBpdCdzIG9ubHkgY2hlY2tpbmcgZW50cmllcyB3aXRoIGdsb2JhbCBzZWluZm8gYXQgdGhlIG1vbWVudCAoaS5lLiBpZ25vcmluZworICAjIHRoZSBvbmVzIHdpdGggaW5uZXIgcGFja2FnZXMpLiAoQnVnOiA2OTQ3OTM2NikKKyAgcm9vdCA9IEVsZW1lbnRUcmVlLmZyb21zdHJpbmcoZGF0YSkKKyAgc2lnbmF0dXJlcyA9IFtzaWduZXIuYXR0cmliWydzaWduYXR1cmUnXSBmb3Igc2lnbmVyIGluIHJvb3QuZmluZGFsbCgnc2lnbmVyJyldCisgIGFzc2VydCBsZW4oc2lnbmF0dXJlcykgPT0gbGVuKHNldChzaWduYXR1cmVzKSksIFwKKyAgICAgICJGb3VuZCBkdXBsaWNhdGUgZW50cmllcyBhZnRlciBjZXJ0IHJlcGxhY2VtZW50OiB7fSIuZm9ybWF0KGRhdGEpCiAKICAgcmV0dXJuIGRhdGEKIAogCiBkZWYgRWRpdFRhZ3ModGFncyk6Ci0gICIiIkdpdmVuIGEgc3RyaW5nIGNvbnRhaW5pbmcgY29tbWEtc2VwYXJhdGVkIHRhZ3MsIGFwcGx5IHRoZSBlZGl0cwotICBzcGVjaWZpZWQgaW4gT1BUSU9OUy50YWdfY2hhbmdlcyBhbmQgcmV0dXJuIHRoZSB1cGRhdGVkIHN0cmluZy4iIiIKKyAgIiIiQXBwbGllcyB0aGUgZWRpdHMgdG8gdGhlIHRhZyBzdHJpbmcgYXMgc3BlY2lmaWVkIGluIE9QVElPTlMudGFnX2NoYW5nZXMuCisKKyAgQXJnczoKKyAgICB0YWdzOiBUaGUgaW5wdXQgc3RyaW5nIHRoYXQgY29udGFpbnMgY29tbWEtc2VwYXJhdGVkIHRhZ3MuCisKKyAgUmV0dXJuczoKKyAgICBUaGUgdXBkYXRlZCB0YWdzIChjb21tYS1zZXBhcmF0ZWQgYW5kIHNvcnRlZCkuCisgICIiIgogICB0YWdzID0gc2V0KHRhZ3Muc3BsaXQoIiwiKSkKICAgZm9yIGNoIGluIE9QVElPTlMudGFnX2NoYW5nZXM6CiAgICAgaWYgY2hbMF0gPT0gIi0iOgpAQCAtMzU0LDIwICs0MzQsMjcgQEAKICAgcmV0dXJuICIsIi5qb2luKHNvcnRlZCh0YWdzKSkKIAogCi1kZWYgUmV3cml0ZVByb3BzKGRhdGEsIG1pc2NfaW5mbyk6CitkZWYgUmV3cml0ZVByb3BzKGRhdGEpOgorICAiIiJSZXdyaXRlcyB0aGUgc3lzdGVtIHByb3BlcnRpZXMgaW4gdGhlIGdpdmVuIHN0cmluZy4KKworICBFYWNoIHByb3BlcnR5IGlzIGV4cGVjdGVkIGluICdrZXk9dmFsdWUnIGZvcm1hdC4gVGhlIHByb3BlcnRpZXMgdGhhdCBjb250YWluCisgIGJ1aWxkIHRhZ3MgKGkuZS4gdGVzdC1rZXlzLCBkZXYta2V5cykgd2lsbCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5IGJ5IGNhbGxpbmcKKyAgRWRpdFRhZ3MoKS4KKworICBBcmdzOgorICAgIGRhdGE6IElucHV0IHN0cmluZywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzLgorCisgIFJldHVybnM6CisgICAgVGhlIHN0cmluZyB3aXRoIG1vZGlmaWVkIHByb3BlcnRpZXMuCisgICIiIgogICBvdXRwdXQgPSBbXQogICBmb3IgbGluZSBpbiBkYXRhLnNwbGl0KCJcbiIpOgogICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKICAgICBvcmlnaW5hbF9saW5lID0gbGluZQogICAgIGlmIGxpbmUgYW5kIGxpbmVbMF0gIT0gJyMnIGFuZCAiPSIgaW4gbGluZToKICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI9IiwgMSkKLSAgICAgIGlmIChrZXkgaW4gKCJyby5idWlsZC5maW5nZXJwcmludCIsICJyby52ZW5kb3IuYnVpbGQuZmluZ2VycHJpbnQiKQotICAgICAgICAgIGFuZCBtaXNjX2luZm8uZ2V0KCJvZW1fZmluZ2VycHJpbnRfcHJvcGVydGllcyIpIGlzIE5vbmUpOgotICAgICAgICBwaWVjZXMgPSB2YWx1ZS5zcGxpdCgiLyIpCi0gICAgICAgIHBpZWNlc1stMV0gPSBFZGl0VGFncyhwaWVjZXNbLTFdKQotICAgICAgICB2YWx1ZSA9ICIvIi5qb2luKHBpZWNlcykKLSAgICAgIGVsaWYgKGtleSBpbiAoInJvLmJ1aWxkLnRodW1icHJpbnQiLCAicm8udmVuZG9yLmJ1aWxkLnRodW1icHJpbnQiKQotICAgICAgICAgICAgYW5kIG1pc2NfaW5mby5nZXQoIm9lbV9maW5nZXJwcmludF9wcm9wZXJ0aWVzIikgaXMgbm90IE5vbmUpOgorICAgICAgaWYga2V5IGluICgicm8uYnVpbGQuZmluZ2VycHJpbnQiLCAicm8uYnVpbGQudGh1bWJwcmludCIsCisgICAgICAgICAgICAgICAgICJyby52ZW5kb3IuYnVpbGQuZmluZ2VycHJpbnQiLCAicm8udmVuZG9yLmJ1aWxkLnRodW1icHJpbnQiKToKICAgICAgICAgcGllY2VzID0gdmFsdWUuc3BsaXQoIi8iKQogICAgICAgICBwaWVjZXNbLTFdID0gRWRpdFRhZ3MocGllY2VzWy0xXSkKICAgICAgICAgdmFsdWUgPSAiLyIuam9pbihwaWVjZXMpCkBAIC0zOTAsOCArNDc3LDggQEAKICAgICAgICAgdmFsdWUgPSAiICIuam9pbih2YWx1ZSkKICAgICAgIGxpbmUgPSBrZXkgKyAiPSIgKyB2YWx1ZQogICAgIGlmIGxpbmUgIT0gb3JpZ2luYWxfbGluZToKLSAgICAgIHByaW50ICIgIHJlcGxhY2U6ICIsIG9yaWdpbmFsX2xpbmUKLSAgICAgIHByaW50ICIgICAgIHdpdGg6ICIsIGxpbmUKKyAgICAgIHByaW50KCIgIHJlcGxhY2U6ICIsIG9yaWdpbmFsX2xpbmUpCisgICAgICBwcmludCgiICAgICB3aXRoOiAiLCBsaW5lKQogICAgIG91dHB1dC5hcHBlbmQobGluZSkKICAgcmV0dXJuICJcbiIuam9pbihvdXRwdXQpICsgIlxuIgogCkBAIC00MDcsNyArNDk0LDcgQEAKICAgICBleHRyYV9yZWNvdmVyeV9rZXlzID0gW09QVElPTlMua2V5X21hcC5nZXQoaywgaykgKyAiLng1MDkucGVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gZXh0cmFfcmVjb3Zlcnlfa2V5cy5zcGxpdCgpXQogICAgIGlmIGV4dHJhX3JlY292ZXJ5X2tleXM6Ci0gICAgICBwcmludCAiZXh0cmEgcmVjb3Zlcnktb25seSBrZXkocyk6ICIgKyAiLCAiLmpvaW4oZXh0cmFfcmVjb3Zlcnlfa2V5cykKKyAgICAgIHByaW50KCJleHRyYSByZWNvdmVyeS1vbmx5IGtleShzKTogIiArICIsICIuam9pbihleHRyYV9yZWNvdmVyeV9rZXlzKSkKICAgZWxzZToKICAgICBleHRyYV9yZWNvdmVyeV9rZXlzID0gW10KIApAQCAtNDIxLDggKzUwOCw4IEBACiAgICAgbWFwcGVkX2tleXMuYXBwZW5kKE9QVElPTlMua2V5X21hcC5nZXQoaywgaykgKyAiLng1MDkucGVtIikKIAogICBpZiBtYXBwZWRfa2V5czoKLSAgICBwcmludCAidXNpbmc6XG4gICAiLCAiXG4gICAiLmpvaW4obWFwcGVkX2tleXMpCi0gICAgcHJpbnQgImZvciBPVEEgcGFja2FnZSB2ZXJpZmljYXRpb24iCisgICAgcHJpbnQoInVzaW5nOlxuICAgIiwgIlxuICAgIi5qb2luKG1hcHBlZF9rZXlzKSkKKyAgICBwcmludCgiZm9yIE9UQSBwYWNrYWdlIHZlcmlmaWNhdGlvbiIpCiAgIGVsc2U6CiAgICAgZGV2a2V5ID0gbWlzY19pbmZvLmdldCgiZGVmYXVsdF9zeXN0ZW1fZGV2X2NlcnRpZmljYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWlsZC90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS90ZXN0a2V5IikKQEAgLTQ1Niw3ICs1NDMsMTEgQEAKICAgIyBwdXQgaW50byBhIHppcGZpbGUgc3lzdGVtL2V0Yy9zZWN1cml0eS9vdGFjZXJ0cy56aXAuCiAgICMgV2UgRE8gTk9UIGluY2x1ZGUgdGhlIGV4dHJhX3JlY292ZXJ5X2tleXMgKGlmIGFueSkgaGVyZS4KIAotICB0ZW1wX2ZpbGUgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICB0cnk6CisgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKyAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCisgIHRlbXBfZmlsZSA9IFN0cmluZ0lPKCkKICAgY2VydHNfemlwID0gemlwZmlsZS5aaXBGaWxlKHRlbXBfZmlsZSwgInciKQogICBmb3IgayBpbiBtYXBwZWRfa2V5czoKICAgICBjb21tb24uWmlwV3JpdGUoY2VydHNfemlwLCBrKQpAQCAtNDcyLDExICs1NjMsOCBAQAogICAgICAgcHJpbnQoIlxuICBXQVJOSU5HOiBGb3VuZCBtb3JlIHRoYW4gb25lIE9UQSBrZXlzOyBVc2luZyB0aGUgZmlyc3Qgb25lIgogICAgICAgICAgICAgIiBhcyBwYXlsb2FkIHZlcmlmaWNhdGlvbiBrZXkuXG5cbiIpCiAKLSAgICBwcmludCAiVXNpbmcgJXMgZm9yIHBheWxvYWQgdmVyaWZpY2F0aW9uLiIgJSAobWFwcGVkX2tleXNbMF0sKQotICAgIGNtZCA9IGNvbW1vbi5SdW4oCi0gICAgICAgIFsib3BlbnNzbCIsICJ4NTA5IiwgIi1wdWJrZXkiLCAiLW5vb3V0IiwgIi1pbiIsIG1hcHBlZF9rZXlzWzBdXSwKLSAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICBwdWJrZXksIF8gPSBjbWQuY29tbXVuaWNhdGUoKQorICAgIHByaW50KCJVc2luZyAlcyBmb3IgcGF5bG9hZCB2ZXJpZmljYXRpb24uIiAlIChtYXBwZWRfa2V5c1swXSwpKQorICAgIHB1YmtleSA9IGNvbW1vbi5FeHRyYWN0UHVibGljS2V5KG1hcHBlZF9rZXlzWzBdKQogICAgIGNvbW1vbi5aaXBXcml0ZVN0cigKICAgICAgICAgb3V0cHV0X3RmX3ppcCwKICAgICAgICAgIlNZU1RFTS9ldGMvdXBkYXRlX2VuZ2luZS91cGRhdGUtcGF5bG9hZC1rZXkucHViLnBlbSIsCkBAIC00ODksNDEgKzU3Nyw2MiBAQAogICByZXR1cm4gbmV3X3JlY292ZXJ5X2tleXMKIAogCi1kZWYgUmVwbGFjZVZlcml0eVB1YmxpY0tleSh0YXJnZXRmaWxlX3ppcCwgZmlsZW5hbWUsIGtleV9wYXRoKToKLSAgcHJpbnQgIlJlcGxhY2luZyB2ZXJpdHkgcHVibGljIGtleSB3aXRoICVzIiAlIChrZXlfcGF0aCwpCi0gIGNvbW1vbi5aaXBXcml0ZSh0YXJnZXRmaWxlX3ppcCwga2V5X3BhdGgsIGFyY25hbWU9ZmlsZW5hbWUpCitkZWYgUmVwbGFjZVZlcml0eVB1YmxpY0tleShvdXRwdXRfemlwLCBmaWxlbmFtZSwga2V5X3BhdGgpOgorICAiIiJSZXBsYWNlcyB0aGUgdmVyaXR5IHB1YmxpYyBrZXkgYXQgdGhlIGdpdmVuIHBhdGggaW4gdGhlIGdpdmVuIHppcC4KKworICBBcmdzOgorICAgIG91dHB1dF96aXA6IFRoZSBvdXRwdXQgdGFyZ2V0X2ZpbGVzIHppcC4KKyAgICBmaWxlbmFtZTogVGhlIGFyY2hpdmUgbmFtZSBpbiB0aGUgb3V0cHV0IHppcC4KKyAgICBrZXlfcGF0aDogVGhlIHBhdGggdG8gdGhlIHB1YmxpYyBrZXkuCisgICIiIgorICBwcmludCgiUmVwbGFjaW5nIHZlcml0eSBwdWJsaWMga2V5IHdpdGggJXMiICUgKGtleV9wYXRoLCkpCisgIGNvbW1vbi5aaXBXcml0ZShvdXRwdXRfemlwLCBrZXlfcGF0aCwgYXJjbmFtZT1maWxlbmFtZSkKIAogCiBkZWYgUmVwbGFjZVZlcml0eVByaXZhdGVLZXkobWlzY19pbmZvLCBrZXlfcGF0aCk6Ci0gIHByaW50ICJSZXBsYWNpbmcgdmVyaXR5IHByaXZhdGUga2V5IHdpdGggJXMiICUgKGtleV9wYXRoLCkKKyAgIiIiUmVwbGFjZXMgdGhlIHZlcml0eSBwcml2YXRlIGtleSBpbiBtaXNjX2luZm8gZGljdC4KKworICBBcmdzOgorICAgIG1pc2NfaW5mbzogVGhlIGluZm8gZGljdC4KKyAgICBrZXlfcGF0aDogVGhlIHBhdGggdG8gdGhlIHByaXZhdGUga2V5IGluIFBLQ1MjOCBmb3JtYXQuCisgICIiIgorICBwcmludCgiUmVwbGFjaW5nIHZlcml0eSBwcml2YXRlIGtleSB3aXRoICVzIiAlIChrZXlfcGF0aCwpKQogICBtaXNjX2luZm9bInZlcml0eV9rZXkiXSA9IGtleV9wYXRoCiAKIAotZGVmIFJlcGxhY2VWZXJpdHlLZXlJZCh0YXJnZXRmaWxlX2lucHV0X3ppcCwgdGFyZ2V0ZmlsZV9vdXRwdXRfemlwLCBrZXlwYXRoKToKLSAgaW5fY21kbGluZSA9IHRhcmdldGZpbGVfaW5wdXRfemlwLnJlYWQoIkJPT1QvY21kbGluZSIpCi0gICMgY29weSBpbl9jbWRsaW5lIHRvIG91dHB1dF96aXAgaWYgdmVyaXR5a2V5aWQgaXMgbm90IHByZXNlbnQgaW4gaW5fY21kbGluZQotICBpZiAidmVyaXR5a2V5aWQiIG5vdCBpbiBpbl9jbWRsaW5lOgotICAgIGNvbW1vbi5aaXBXcml0ZVN0cih0YXJnZXRmaWxlX291dHB1dF96aXAsICJCT09UL2NtZGxpbmUiLCBpbl9jbWRsaW5lKQotICAgIHJldHVybiBpbl9jbWRsaW5lCi0gIG91dF9jbWRsaW5lID0gW10KLSAgZm9yIHBhcmFtIGluIGluX2NtZGxpbmUuc3BsaXQoKToKLSAgICBpZiAidmVyaXR5a2V5aWQiIGluIHBhcmFtOgotICAgICAgIyBleHRyYWN0IGtleWlkIHVzaW5nIG9wZW5zc2wgY29tbWFuZAotICAgICAgcCA9IGNvbW1vbi5SdW4oCi0gICAgICAgICAgWyJvcGVuc3NsIiwgIng1MDkiLCAiLWluIiwga2V5cGF0aCwgIi10ZXh0Il0sCi0gICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICAgIGtleWlkLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKLSAgICAgIGtleWlkID0gcmUuc2VhcmNoKAotICAgICAgICAgIHIna2V5aWQ6KFswLTlhLWZBLUY6XSopJywga2V5aWQpLmdyb3VwKDEpLnJlcGxhY2UoJzonLCAnJykubG93ZXIoKQotICAgICAgcHJpbnQgIlJlcGxhY2luZyB2ZXJpdHkga2V5aWQgd2l0aCAlcyBlcnJvcj0lcyIgJSAoa2V5aWQsIHN0ZGVycikKLSAgICAgIG91dF9jbWRsaW5lLmFwcGVuZCgidmVyaXR5a2V5aWQ9aWQ6JXMiICUgKGtleWlkLCkpCi0gICAgZWxzZToKLSAgICAgIG91dF9jbWRsaW5lLmFwcGVuZChwYXJhbSkKK2RlZiBSZXBsYWNlVmVyaXR5S2V5SWQoaW5wdXRfemlwLCBvdXRwdXRfemlwLCBrZXlfcGF0aCk6CisgICIiIlJlcGxhY2VzIHRoZSB2ZXJpdHlrZXlpZCBwYXJhbWV0ZXIgaW4gQk9PVC9jbWRsaW5lLgogCi0gIG91dF9jbWRsaW5lID0gJyAnLmpvaW4ob3V0X2NtZGxpbmUpCi0gIG91dF9jbWRsaW5lID0gb3V0X2NtZGxpbmUuc3RyaXAoKQotICBwcmludCAib3V0X2NtZGxpbmUgJXMiICUgKG91dF9jbWRsaW5lKQotICBjb21tb24uWmlwV3JpdGVTdHIodGFyZ2V0ZmlsZV9vdXRwdXRfemlwLCAiQk9PVC9jbWRsaW5lIiwgb3V0X2NtZGxpbmUpCisgIEFyZ3M6CisgICAgaW5wdXRfemlwOiBUaGUgaW5wdXQgdGFyZ2V0X2ZpbGVzIHppcCwgd2hpY2ggc2hvdWxkIGJlIGFscmVhZHkgb3Blbi4KKyAgICBvdXRwdXRfemlwOiBUaGUgb3V0cHV0IHRhcmdldF9maWxlcyB6aXAsIHdoaWNoIHNob3VsZCBiZSBhbHJlYWR5IG9wZW4gYW5kCisgICAgICAgIHdyaXRhYmxlLgorICAgIGtleV9wYXRoOiBUaGUgcGF0aCB0byB0aGUgUEVNIGVuY29kZWQgWC41MDkgY2VydGlmaWNhdGUuCisgICIiIgorICBpbl9jbWRsaW5lID0gaW5wdXRfemlwLnJlYWQoIkJPT1QvY21kbGluZSIpCisgICMgQ29weSBpbl9jbWRsaW5lIHRvIG91dHB1dF96aXAgaWYgdmVyaXR5a2V5aWQgaXMgbm90IHByZXNlbnQuCisgIGlmICJ2ZXJpdHlrZXlpZCIgbm90IGluIGluX2NtZGxpbmU6CisgICAgY29tbW9uLlppcFdyaXRlU3RyKG91dHB1dF96aXAsICJCT09UL2NtZGxpbmUiLCBpbl9jbWRsaW5lKQorICAgIHJldHVybgorCisgIG91dF9idWZmZXIgPSBbXQorICBmb3IgcGFyYW0gaW4gaW5fY21kbGluZS5zcGxpdCgpOgorICAgIGlmICJ2ZXJpdHlrZXlpZCIgbm90IGluIHBhcmFtOgorICAgICAgb3V0X2J1ZmZlci5hcHBlbmQocGFyYW0pCisgICAgICBjb250aW51ZQorCisgICAgIyBFeHRyYWN0IGtleWlkIHVzaW5nIG9wZW5zc2wgY29tbWFuZC4KKyAgICBwID0gY29tbW9uLlJ1bihbIm9wZW5zc2wiLCAieDUwOSIsICItaW4iLCBrZXlfcGF0aCwgIi10ZXh0Il0sCisgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICBrZXlpZCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgYXNzZXJ0IHAucmV0dXJuY29kZSA9PSAwLCAiRmFpbGVkIHRvIGR1bXAgY2VydGlmaWNhdGU6IHt9Ii5mb3JtYXQoc3RkZXJyKQorICAgIGtleWlkID0gcmUuc2VhcmNoKAorICAgICAgICByJ2tleWlkOihbMC05YS1mQS1GOl0qKScsIGtleWlkKS5ncm91cCgxKS5yZXBsYWNlKCc6JywgJycpLmxvd2VyKCkKKyAgICBwcmludCgiUmVwbGFjaW5nIHZlcml0eSBrZXlpZCB3aXRoIHt9Ii5mb3JtYXQoa2V5aWQpKQorICAgIG91dF9idWZmZXIuYXBwZW5kKCJ2ZXJpdHlrZXlpZD1pZDolcyIgJSAoa2V5aWQsKSkKKworICBvdXRfY21kbGluZSA9ICcgJy5qb2luKG91dF9idWZmZXIpLnN0cmlwKCkgKyAnXG4nCisgIGNvbW1vbi5aaXBXcml0ZVN0cihvdXRwdXRfemlwLCAiQk9PVC9jbWRsaW5lIiwgb3V0X2NtZGxpbmUpCiAKIAogZGVmIFJlcGxhY2VNaXNjSW5mb1R4dChpbnB1dF96aXAsIG91dHB1dF96aXAsIG1pc2NfaW5mbyk6CkBAIC01NDUsMTEgKzY1NCwxMiBAQAogICAiIiJSZXBsYWNlcyB0aGUgQVZCIHNpZ25pbmcga2V5cy4iIiIKIAogICBBVkJfRk9PVEVSX0FSR1NfQllfUEFSVElUSU9OID0gewotICAgICdib290JyA6ICdhdmJfYm9vdF9hZGRfaGFzaF9mb290ZXJfYXJncycsCi0gICAgJ2R0Ym8nIDogJ2F2Yl9kdGJvX2FkZF9oYXNoX2Zvb3Rlcl9hcmdzJywKLSAgICAnc3lzdGVtJyA6ICdhdmJfc3lzdGVtX2FkZF9oYXNodHJlZV9mb290ZXJfYXJncycsCi0gICAgJ3ZlbmRvcicgOiAnYXZiX3ZlbmRvcl9hZGRfaGFzaHRyZWVfZm9vdGVyX2FyZ3MnLAotICAgICd2Ym1ldGEnIDogJ2F2Yl92Ym1ldGFfYXJncycsCisgICAgICAnYm9vdCcgOiAnYXZiX2Jvb3RfYWRkX2hhc2hfZm9vdGVyX2FyZ3MnLAorICAgICAgJ2R0Ym8nIDogJ2F2Yl9kdGJvX2FkZF9oYXNoX2Zvb3Rlcl9hcmdzJywKKyAgICAgICdyZWNvdmVyeScgOiAnYXZiX3JlY292ZXJ5X2FkZF9oYXNoX2Zvb3Rlcl9hcmdzJywKKyAgICAgICdzeXN0ZW0nIDogJ2F2Yl9zeXN0ZW1fYWRkX2hhc2h0cmVlX2Zvb3Rlcl9hcmdzJywKKyAgICAgICd2ZW5kb3InIDogJ2F2Yl92ZW5kb3JfYWRkX2hhc2h0cmVlX2Zvb3Rlcl9hcmdzJywKKyAgICAgICd2Ym1ldGEnIDogJ2F2Yl92Ym1ldGFfYXJncycsCiAgIH0KIAogICBkZWYgUmVwbGFjZUF2YlBhcnRpdGlvblNpZ25pbmdLZXkocGFydGl0aW9uKToKQEAgLTU2MCwxNSArNjcwLDE1IEBACiAgICAgYWxnb3JpdGhtID0gT1BUSU9OUy5hdmJfYWxnb3JpdGhtcy5nZXQocGFydGl0aW9uKQogICAgIGFzc2VydCBhbGdvcml0aG0sICdNaXNzaW5nIEFWQiBzaWduaW5nIGFsZ29yaXRobSBmb3IgJXMnICUgKHBhcnRpdGlvbiwpCiAKLSAgICBwcmludCAnUmVwbGFjaW5nIEFWQiBzaWduaW5nIGtleSBmb3IgJXMgd2l0aCAiJXMiICglcyknICUgKAotICAgICAgICBwYXJ0aXRpb24sIGtleSwgYWxnb3JpdGhtKQorICAgIHByaW50KCdSZXBsYWNpbmcgQVZCIHNpZ25pbmcga2V5IGZvciAlcyB3aXRoICIlcyIgKCVzKScgJSAoCisgICAgICAgIHBhcnRpdGlvbiwga2V5LCBhbGdvcml0aG0pKQogICAgIG1pc2NfaW5mb1snYXZiXycgKyBwYXJ0aXRpb24gKyAnX2FsZ29yaXRobSddID0gYWxnb3JpdGhtCiAgICAgbWlzY19pbmZvWydhdmJfJyArIHBhcnRpdGlvbiArICdfa2V5X3BhdGgnXSA9IGtleQogCiAgICAgZXh0cmFfYXJncyA9IE9QVElPTlMuYXZiX2V4dHJhX2FyZ3MuZ2V0KHBhcnRpdGlvbikKICAgICBpZiBleHRyYV9hcmdzOgotICAgICAgcHJpbnQgJ1NldHRpbmcgZXh0cmEgQVZCIHNpZ25pbmcgYXJncyBmb3IgJXMgdG8gIiVzIicgJSAoCi0gICAgICAgICAgcGFydGl0aW9uLCBleHRyYV9hcmdzKQorICAgICAgcHJpbnQoJ1NldHRpbmcgZXh0cmEgQVZCIHNpZ25pbmcgYXJncyBmb3IgJXMgdG8gIiVzIicgJSAoCisgICAgICAgICAgcGFydGl0aW9uLCBleHRyYV9hcmdzKSkKICAgICAgIGFyZ3Nfa2V5ID0gQVZCX0ZPT1RFUl9BUkdTX0JZX1BBUlRJVElPTltwYXJ0aXRpb25dCiAgICAgICBtaXNjX2luZm9bYXJnc19rZXldID0gKG1pc2NfaW5mby5nZXQoYXJnc19rZXksICcnKSArICcgJyArIGV4dHJhX2FyZ3MpCiAKQEAgLTcxMSwyOSArODIxLDI5IEBACiAgICAgICBhcmd2LCBfX2RvY19fLAogICAgICAgZXh0cmFfb3B0cz0iZTpkOms6b3Q6IiwKICAgICAgIGV4dHJhX2xvbmdfb3B0cz1bCi0gICAgICAgICJleHRyYV9hcGtzPSIsCi0gICAgICAgICJkZWZhdWx0X2tleV9tYXBwaW5ncz0iLAotICAgICAgICAia2V5X21hcHBpbmc9IiwKLSAgICAgICAgInJlcGxhY2Vfb3RhX2tleXMiLAotICAgICAgICAidGFnX2NoYW5nZXM9IiwKLSAgICAgICAgInJlcGxhY2VfdmVyaXR5X3B1YmxpY19rZXk9IiwKLSAgICAgICAgInJlcGxhY2VfdmVyaXR5X3ByaXZhdGVfa2V5PSIsCi0gICAgICAgICJyZXBsYWNlX3Zlcml0eV9rZXlpZD0iLAotICAgICAgICAiYXZiX3ZibWV0YV9hbGdvcml0aG09IiwKLSAgICAgICAgImF2Yl92Ym1ldGFfa2V5PSIsCi0gICAgICAgICJhdmJfdmJtZXRhX2V4dHJhX2FyZ3M9IiwKLSAgICAgICAgImF2Yl9ib290X2FsZ29yaXRobT0iLAotICAgICAgICAiYXZiX2Jvb3Rfa2V5PSIsCi0gICAgICAgICJhdmJfYm9vdF9leHRyYV9hcmdzPSIsCi0gICAgICAgICJhdmJfZHRib19hbGdvcml0aG09IiwKLSAgICAgICAgImF2Yl9kdGJvX2tleT0iLAotICAgICAgICAiYXZiX2R0Ym9fZXh0cmFfYXJncz0iLAotICAgICAgICAiYXZiX3N5c3RlbV9hbGdvcml0aG09IiwKLSAgICAgICAgImF2Yl9zeXN0ZW1fa2V5PSIsCi0gICAgICAgICJhdmJfc3lzdGVtX2V4dHJhX2FyZ3M9IiwKLSAgICAgICAgImF2Yl92ZW5kb3JfYWxnb3JpdGhtPSIsCi0gICAgICAgICJhdmJfdmVuZG9yX2tleT0iLAotICAgICAgICAiYXZiX3ZlbmRvcl9leHRyYV9hcmdzPSIsCisgICAgICAgICAgImV4dHJhX2Fwa3M9IiwKKyAgICAgICAgICAiZGVmYXVsdF9rZXlfbWFwcGluZ3M9IiwKKyAgICAgICAgICAia2V5X21hcHBpbmc9IiwKKyAgICAgICAgICAicmVwbGFjZV9vdGFfa2V5cyIsCisgICAgICAgICAgInRhZ19jaGFuZ2VzPSIsCisgICAgICAgICAgInJlcGxhY2VfdmVyaXR5X3B1YmxpY19rZXk9IiwKKyAgICAgICAgICAicmVwbGFjZV92ZXJpdHlfcHJpdmF0ZV9rZXk9IiwKKyAgICAgICAgICAicmVwbGFjZV92ZXJpdHlfa2V5aWQ9IiwKKyAgICAgICAgICAiYXZiX3ZibWV0YV9hbGdvcml0aG09IiwKKyAgICAgICAgICAiYXZiX3ZibWV0YV9rZXk9IiwKKyAgICAgICAgICAiYXZiX3ZibWV0YV9leHRyYV9hcmdzPSIsCisgICAgICAgICAgImF2Yl9ib290X2FsZ29yaXRobT0iLAorICAgICAgICAgICJhdmJfYm9vdF9rZXk9IiwKKyAgICAgICAgICAiYXZiX2Jvb3RfZXh0cmFfYXJncz0iLAorICAgICAgICAgICJhdmJfZHRib19hbGdvcml0aG09IiwKKyAgICAgICAgICAiYXZiX2R0Ym9fa2V5PSIsCisgICAgICAgICAgImF2Yl9kdGJvX2V4dHJhX2FyZ3M9IiwKKyAgICAgICAgICAiYXZiX3N5c3RlbV9hbGdvcml0aG09IiwKKyAgICAgICAgICAiYXZiX3N5c3RlbV9rZXk9IiwKKyAgICAgICAgICAiYXZiX3N5c3RlbV9leHRyYV9hcmdzPSIsCisgICAgICAgICAgImF2Yl92ZW5kb3JfYWxnb3JpdGhtPSIsCisgICAgICAgICAgImF2Yl92ZW5kb3Jfa2V5PSIsCisgICAgICAgICAgImF2Yl92ZW5kb3JfZXh0cmFfYXJncz0iLAogICAgICAgXSwKICAgICAgIGV4dHJhX29wdGlvbl9oYW5kbGVyPW9wdGlvbl9oYW5kbGVyKQogCkBAIC03NTAsOCArODYwLDkgQEAKIAogICBCdWlsZEtleU1hcChtaXNjX2luZm8sIGtleV9tYXBwaW5nX29wdGlvbnMpCiAKLSAgYXBrX2tleV9tYXAgPSBHZXRBcGtDZXJ0cyhpbnB1dF96aXApCi0gIENoZWNrQWxsQXBrc1NpZ25lZChpbnB1dF96aXAsIGFwa19rZXlfbWFwKQorICBjZXJ0bWFwLCBjb21wcmVzc2VkX2V4dGVuc2lvbiA9IGNvbW1vbi5SZWFkQXBrQ2VydHMoaW5wdXRfemlwKQorICBhcGtfa2V5X21hcCA9IEdldEFwa0NlcnRzKGNlcnRtYXApCisgIENoZWNrQWxsQXBrc1NpZ25lZChpbnB1dF96aXAsIGFwa19rZXlfbWFwLCBjb21wcmVzc2VkX2V4dGVuc2lvbikKIAogICBrZXlfcGFzc3dvcmRzID0gY29tbW9uLkdldEtleVBhc3N3b3JkcyhzZXQoYXBrX2tleV9tYXAudmFsdWVzKCkpKQogICBwbGF0Zm9ybV9hcGlfbGV2ZWwsIF8gPSBHZXRBcGlMZXZlbEFuZENvZGVuYW1lKGlucHV0X3ppcCkKQEAgLTc2MCw3ICs4NzEsOCBAQAogICBQcm9jZXNzVGFyZ2V0RmlsZXMoaW5wdXRfemlwLCBvdXRwdXRfemlwLCBtaXNjX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICBhcGtfa2V5X21hcCwga2V5X3Bhc3N3b3JkcywKICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2FwaV9sZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgIGNvZGVuYW1lX3RvX2FwaV9sZXZlbF9tYXApCisgICAgICAgICAgICAgICAgICAgICBjb2RlbmFtZV90b19hcGlfbGV2ZWxfbWFwLAorICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZF9leHRlbnNpb24pCiAKICAgY29tbW9uLlppcENsb3NlKGlucHV0X3ppcCkKICAgY29tbW9uLlppcENsb3NlKG91dHB1dF96aXApCkBAIC03NzQsMTYgKzg4NiwxNCBAQAogICBuZXdfYXJncy5hcHBlbmQoYXJnc1sxXSkKICAgYWRkX2ltZ190b190YXJnZXRfZmlsZXMubWFpbihuZXdfYXJncykKIAotICBwcmludCAiZG9uZS4iCisgIHByaW50KCJkb25lLiIpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgdHJ5OgogICAgIG1haW4oc3lzLmFyZ3ZbMTpdKQotICBleGNlcHQgY29tbW9uLkV4dGVybmFsRXJyb3IsIGU6Ci0gICAgcHJpbnQKLSAgICBwcmludCAiICAgRVJST1I6ICVzIiAlIChlLCkKLSAgICBwcmludAorICBleGNlcHQgY29tbW9uLkV4dGVybmFsRXJyb3IgYXMgZToKKyAgICBwcmludCgiXG4gICBFUlJPUjogJXNcbiIgJSAoZSwpKQogICAgIHN5cy5leGl0KDEpCiAgIGZpbmFsbHk6CiAgICAgY29tbW9uLkNsZWFudXAoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3NwYXJzZV9pbWcucHkgYi90b29scy9yZWxlYXNldG9vbHMvc3BhcnNlX2ltZy5weQppbmRleCA3ZWI2MGQ5Li4wODNkYTdhIDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvc3BhcnNlX2ltZy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvc3BhcnNlX2ltZy5weQpAQCAtMTUsNiArMTUsNyBAQAogaW1wb3J0IGJpc2VjdAogaW1wb3J0IG9zCiBpbXBvcnQgc3RydWN0CitpbXBvcnQgdGhyZWFkaW5nCiBmcm9tIGhhc2hsaWIgaW1wb3J0IHNoYTEKIAogaW1wb3J0IHJhbmdlbGliCkBAIC0zMiw3ICszMyw3IEBACiAgICIiIgogCiAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaW1nX2ZuLCBmaWxlX21hcF9mbj1Ob25lLCBjbG9iYmVyZWRfYmxvY2tzPU5vbmUsCi0gICAgICAgICAgICAgICBtb2RlPSJyYiIsIGJ1aWxkX21hcD1UcnVlKToKKyAgICAgICAgICAgICAgIG1vZGU9InJiIiwgYnVpbGRfbWFwPVRydWUsIGFsbG93X3NoYXJlZF9ibG9ja3M9RmFsc2UpOgogICAgIHNlbGYuc2ltZ19mID0gZiA9IG9wZW4oc2ltZ19mbiwgbW9kZSkKIAogICAgIGhlYWRlcl9iaW4gPSBmLnJlYWQoMjgpCkBAIC0xMTEsNiArMTEyLDggQEAKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBjaHVuayB0eXBlIDB4JTA0WCBub3Qgc3VwcG9ydGVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNodW5rX3R5cGUsKSkKIAorICAgIHNlbGYuZ2VuZXJhdG9yX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKICAgICBzZWxmLmNhcmVfbWFwID0gcmFuZ2VsaWIuUmFuZ2VTZXQoY2FyZV9kYXRhKQogICAgIHNlbGYub2Zmc2V0X2luZGV4ID0gW2lbMF0gZm9yIGkgaW4gb2Zmc2V0X21hcF0KIApAQCAtMTI2LDcgKzEyOSw4IEBACiAgICAgc2VsZi5leHRlbmRlZCA9IGV4dGVuZGVkCiAKICAgICBpZiBmaWxlX21hcF9mbjoKLSAgICAgIHNlbGYuTG9hZEZpbGVCbG9ja01hcChmaWxlX21hcF9mbiwgc2VsZi5jbG9iYmVyZWRfYmxvY2tzKQorICAgICAgc2VsZi5Mb2FkRmlsZUJsb2NrTWFwKGZpbGVfbWFwX2ZuLCBzZWxmLmNsb2JiZXJlZF9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfc2hhcmVkX2Jsb2NrcykKICAgICBlbHNlOgogICAgICAgc2VsZi5maWxlX21hcCA9IHsiX19EQVRBIjogc2VsZi5jYXJlX21hcH0KIApAQCAtMTczLDQwICsxNzcsNDcgQEAKICAgICBwYXJ0aWN1bGFyIGlzIG5vdCBuZWNlc3NhcmlseSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHJhbmdlcyBpbgogICAgICdyYW5nZXMnLgogCi0gICAgVGhpcyBnZW5lcmF0b3IgaXMgc3RhdGVmdWwgLS0gaXQgZGVwZW5kcyBvbiB0aGUgb3BlbiBmaWxlIG9iamVjdAotICAgIGNvbnRhaW5lZCBpbiB0aGlzIFNwYXJzZUltYWdlLCBzbyB5b3Ugc2hvdWxkIG5vdCB0cnkgdG8gcnVuIHR3bworICAgIFVzZSBhIGxvY2sgdG8gcHJvdGVjdCB0aGUgZ2VuZXJhdG9yIHNvIHRoYXQgd2Ugd2lsbCBub3QgcnVuIHR3bwogICAgIGluc3RhbmNlcyBvZiB0aGlzIGdlbmVyYXRvciBvbiB0aGUgc2FtZSBvYmplY3Qgc2ltdWx0YW5lb3VzbHkuIiIiCiAKICAgICBmID0gc2VsZi5zaW1nX2YKLSAgICBmb3IgcywgZSBpbiByYW5nZXM6Ci0gICAgICB0b19yZWFkID0gZS1zCi0gICAgICBpZHggPSBiaXNlY3QuYmlzZWN0X3JpZ2h0KHNlbGYub2Zmc2V0X2luZGV4LCBzKSAtIDEKLSAgICAgIGNodW5rX3N0YXJ0LCBjaHVua19sZW4sIGZpbGVwb3MsIGZpbGxfZGF0YSA9IHNlbGYub2Zmc2V0X21hcFtpZHhdCi0KLSAgICAgICMgZm9yIHRoZSBmaXJzdCBjaHVuayB3ZSBtYXkgYmUgc3RhcnRpbmcgcGFydHdheSB0aHJvdWdoIGl0LgotICAgICAgcmVtYWluID0gY2h1bmtfbGVuIC0gKHMgLSBjaHVua19zdGFydCkKLSAgICAgIHRoaXNfcmVhZCA9IG1pbihyZW1haW4sIHRvX3JlYWQpCi0gICAgICBpZiBmaWxlcG9zIGlzIG5vdCBOb25lOgotICAgICAgICBwID0gZmlsZXBvcyArICgocyAtIGNodW5rX3N0YXJ0KSAqIHNlbGYuYmxvY2tzaXplKQotICAgICAgICBmLnNlZWsocCwgb3MuU0VFS19TRVQpCi0gICAgICAgIHlpZWxkIGYucmVhZCh0aGlzX3JlYWQgKiBzZWxmLmJsb2Nrc2l6ZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHlpZWxkIGZpbGxfZGF0YSAqICh0aGlzX3JlYWQgKiAoc2VsZi5ibG9ja3NpemUgPj4gMikpCi0gICAgICB0b19yZWFkIC09IHRoaXNfcmVhZAotCi0gICAgICB3aGlsZSB0b19yZWFkID4gMDoKLSAgICAgICAgIyBjb250aW51ZSB3aXRoIGZvbGxvd2luZyBjaHVua3MgaWYgdGhpcyByYW5nZSBzcGFucyBtdWx0aXBsZSBjaHVua3MuCi0gICAgICAgIGlkeCArPSAxCisgICAgd2l0aCBzZWxmLmdlbmVyYXRvcl9sb2NrOgorICAgICAgZm9yIHMsIGUgaW4gcmFuZ2VzOgorICAgICAgICB0b19yZWFkID0gZS1zCisgICAgICAgIGlkeCA9IGJpc2VjdC5iaXNlY3RfcmlnaHQoc2VsZi5vZmZzZXRfaW5kZXgsIHMpIC0gMQogICAgICAgICBjaHVua19zdGFydCwgY2h1bmtfbGVuLCBmaWxlcG9zLCBmaWxsX2RhdGEgPSBzZWxmLm9mZnNldF9tYXBbaWR4XQotICAgICAgICB0aGlzX3JlYWQgPSBtaW4oY2h1bmtfbGVuLCB0b19yZWFkKQorCisgICAgICAgICMgZm9yIHRoZSBmaXJzdCBjaHVuayB3ZSBtYXkgYmUgc3RhcnRpbmcgcGFydHdheSB0aHJvdWdoIGl0LgorICAgICAgICByZW1haW4gPSBjaHVua19sZW4gLSAocyAtIGNodW5rX3N0YXJ0KQorICAgICAgICB0aGlzX3JlYWQgPSBtaW4ocmVtYWluLCB0b19yZWFkKQogICAgICAgICBpZiBmaWxlcG9zIGlzIG5vdCBOb25lOgotICAgICAgICAgIGYuc2VlayhmaWxlcG9zLCBvcy5TRUVLX1NFVCkKKyAgICAgICAgICBwID0gZmlsZXBvcyArICgocyAtIGNodW5rX3N0YXJ0KSAqIHNlbGYuYmxvY2tzaXplKQorICAgICAgICAgIGYuc2VlayhwLCBvcy5TRUVLX1NFVCkKICAgICAgICAgICB5aWVsZCBmLnJlYWQodGhpc19yZWFkICogc2VsZi5ibG9ja3NpemUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgeWllbGQgZmlsbF9kYXRhICogKHRoaXNfcmVhZCAqIChzZWxmLmJsb2Nrc2l6ZSA+PiAyKSkKICAgICAgICAgdG9fcmVhZCAtPSB0aGlzX3JlYWQKIAotICBkZWYgTG9hZEZpbGVCbG9ja01hcChzZWxmLCBmbiwgY2xvYmJlcmVkX2Jsb2Nrcyk6CisgICAgICAgIHdoaWxlIHRvX3JlYWQgPiAwOgorICAgICAgICAgICMgY29udGludWUgd2l0aCBmb2xsb3dpbmcgY2h1bmtzIGlmIHRoaXMgcmFuZ2Ugc3BhbnMgbXVsdGlwbGUgY2h1bmtzLgorICAgICAgICAgIGlkeCArPSAxCisgICAgICAgICAgY2h1bmtfc3RhcnQsIGNodW5rX2xlbiwgZmlsZXBvcywgZmlsbF9kYXRhID0gc2VsZi5vZmZzZXRfbWFwW2lkeF0KKyAgICAgICAgICB0aGlzX3JlYWQgPSBtaW4oY2h1bmtfbGVuLCB0b19yZWFkKQorICAgICAgICAgIGlmIGZpbGVwb3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmLnNlZWsoZmlsZXBvcywgb3MuU0VFS19TRVQpCisgICAgICAgICAgICB5aWVsZCBmLnJlYWQodGhpc19yZWFkICogc2VsZi5ibG9ja3NpemUpCisgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIGZpbGxfZGF0YSAqICh0aGlzX3JlYWQgKiAoc2VsZi5ibG9ja3NpemUgPj4gMikpCisgICAgICAgICAgdG9fcmVhZCAtPSB0aGlzX3JlYWQKKworICBkZWYgTG9hZEZpbGVCbG9ja01hcChzZWxmLCBmbiwgY2xvYmJlcmVkX2Jsb2NrcywgYWxsb3dfc2hhcmVkX2Jsb2Nrcyk6CisgICAgIiIiTG9hZHMgdGhlIGdpdmVuIGJsb2NrIG1hcCBmaWxlLgorCisgICAgQXJnczoKKyAgICAgIGZuOiBUaGUgZmlsZW5hbWUgb2YgdGhlIGJsb2NrIG1hcCBmaWxlLgorICAgICAgY2xvYmJlcmVkX2Jsb2NrczogQSBSYW5nZVNldCBpbnN0YW5jZSBmb3IgdGhlIGNsb2JiZXJlZCBibG9ja3MuCisgICAgICBhbGxvd19zaGFyZWRfYmxvY2tzOiBXaGV0aGVyIGhhdmluZyBzaGFyZWQgYmxvY2tzIGlzIGFsbG93ZWQuCisgICAgIiIiCiAgICAgcmVtYWluaW5nID0gc2VsZi5jYXJlX21hcAogICAgIHNlbGYuZmlsZV9tYXAgPSBvdXQgPSB7fQogCkBAIC0yMTQsNiArMjI1LDE4IEBACiAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICBmbiwgcmFuZ2VzID0gbGluZS5zcGxpdChOb25lLCAxKQogICAgICAgICByYW5nZXMgPSByYW5nZWxpYi5SYW5nZVNldC5wYXJzZShyYW5nZXMpCisKKyAgICAgICAgaWYgYWxsb3dfc2hhcmVkX2Jsb2NrczoKKyAgICAgICAgICAjIEZpbmQgdGhlIHNoYXJlZCBibG9ja3MgdGhhdCBoYXZlIGJlZW4gY2xhaW1lZCBieSBvdGhlcnMuCisgICAgICAgICAgc2hhcmVkX2Jsb2NrcyA9IHJhbmdlcy5zdWJ0cmFjdChyZW1haW5pbmcpCisgICAgICAgICAgaWYgc2hhcmVkX2Jsb2NrczoKKyAgICAgICAgICAgIHJhbmdlcyA9IHJhbmdlcy5zdWJ0cmFjdChzaGFyZWRfYmxvY2tzKQorICAgICAgICAgICAgaWYgbm90IHJhbmdlczoKKyAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBUYWcgdGhlIGVudHJ5IHNvIHRoYXQgd2UgY2FuIHNraXAgYXBwbHlpbmcgaW1nZGlmZiBvbiB0aGlzIGZpbGUuCisgICAgICAgICAgICByYW5nZXMuZXh0cmFbJ3VzZXNfc2hhcmVkX2Jsb2NrcyddID0gVHJ1ZQorCiAgICAgICAgIG91dFtmbl0gPSByYW5nZXMKICAgICAgICAgYXNzZXJ0IHJhbmdlcy5zaXplKCkgPT0gcmFuZ2VzLmludGVyc2VjdChyZW1haW5pbmcpLnNpemUoKQogCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdF9hZGRfaW1nX3RvX3RhcmdldF9maWxlcy5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X2FkZF9pbWdfdG9fdGFyZ2V0X2ZpbGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMGY3OGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdF9hZGRfaW1nX3RvX3RhcmdldF9maWxlcy5weQpAQCAtMCwwICsxLDMzOSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgemlwZmlsZQorCitpbXBvcnQgY29tbW9uCitpbXBvcnQgdGVzdF91dGlscworZnJvbSBhZGRfaW1nX3RvX3RhcmdldF9maWxlcyBpbXBvcnQgKAorICAgIEFkZENhcmVNYXBUeHRGb3JBYk90YSwgQWRkUGFja1JhZGlvSW1hZ2VzLCBBZGRSYWRpb0ltYWdlc0ZvckFiT3RhLAorICAgIEdldENhcmVNYXApCitmcm9tIHJhbmdlbGliIGltcG9ydCBSYW5nZVNldAorCisKK09QVElPTlMgPSBjb21tb24uT1BUSU9OUworCisKK2NsYXNzIEFkZEltYWdlc1RvVGFyZ2V0RmlsZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgT1BUSU9OUy5pbnB1dF90bXAgPSBjb21tb24uTWFrZVRlbXBEaXIoKQorCisgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICBjb21tb24uQ2xlYW51cCgpCisKKyAgQHN0YXRpY21ldGhvZAorICBkZWYgX2NyZWF0ZV9pbWFnZXMoaW1hZ2VzLCBwcmVmaXgpOgorICAgICIiIkNyZWF0ZXMgaW1hZ2VzIHVuZGVyIE9QVElPTlMuaW5wdXRfdG1wL3ByZWZpeC4iIiIKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCBwcmVmaXgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgb3MubWtkaXIocGF0aCkKKworICAgIGZvciBpbWFnZSBpbiBpbWFnZXM6CisgICAgICBpbWFnZV9wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIGltYWdlICsgJy5pbWcnKQorICAgICAgd2l0aCBvcGVuKGltYWdlX3BhdGgsICd3YicpIGFzIGltYWdlX2ZwOgorICAgICAgICBpbWFnZV9mcC53cml0ZShpbWFnZS5lbmNvZGUoKSkKKworICAgIGltYWdlc19wYXRoID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAnSU1BR0VTJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW1hZ2VzX3BhdGgpOgorICAgICAgb3MubWtkaXIoaW1hZ2VzX3BhdGgpCisgICAgcmV0dXJuIGltYWdlcywgaW1hZ2VzX3BhdGgKKworICBkZWYgdGVzdF9BZGRSYWRpb0ltYWdlc0ZvckFiT3RhX2ltYWdlRXhpc3RzKHNlbGYpOgorICAgICIiIlRlc3RzIHRoZSBjYXNlIHdpdGggZXhpc3RpbmcgaW1hZ2VzIHVuZGVyIElNQUdFUy8uIiIiCisgICAgaW1hZ2VzLCBpbWFnZXNfcGF0aCA9IHNlbGYuX2NyZWF0ZV9pbWFnZXMoWydhYm9vdCcsICd4YmwnXSwgJ0lNQUdFUycpCisgICAgQWRkUmFkaW9JbWFnZXNGb3JBYk90YShOb25lLCBpbWFnZXMpCisKKyAgICBmb3IgaW1hZ2UgaW4gaW1hZ2VzOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbWFnZXNfcGF0aCwgaW1hZ2UgKyAnLmltZycpKSkKKworICBkZWYgdGVzdF9BZGRSYWRpb0ltYWdlc0ZvckFiT3RhX2NvcHlGcm9tUmFkaW8oc2VsZik6CisgICAgIiIiVGVzdHMgdGhlIGNhc2UgdGhhdCBjb3BpZXMgaW1hZ2VzIGZyb20gUkFESU8vLiIiIgorICAgIGltYWdlcywgaW1hZ2VzX3BhdGggPSBzZWxmLl9jcmVhdGVfaW1hZ2VzKFsnYWJvb3QnLCAneGJsJ10sICdSQURJTycpCisgICAgQWRkUmFkaW9JbWFnZXNGb3JBYk90YShOb25lLCBpbWFnZXMpCisKKyAgICBmb3IgaW1hZ2UgaW4gaW1hZ2VzOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbWFnZXNfcGF0aCwgaW1hZ2UgKyAnLmltZycpKSkKKworICBkZWYgdGVzdF9BZGRSYWRpb0ltYWdlc0ZvckFiT3RhX2NvcHlGcm9tUmFkaW9femlwT3V0cHV0KHNlbGYpOgorICAgIGltYWdlcywgXyA9IHNlbGYuX2NyZWF0ZV9pbWFnZXMoWydhYm9vdCcsICd4YmwnXSwgJ1JBRElPJykKKworICAgICMgU2V0IHVwIHRoZSBvdXRwdXQgemlwLgorICAgIG91dHB1dF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy56aXAnKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlLCAndycpIGFzIG91dHB1dF96aXA6CisgICAgICBBZGRSYWRpb0ltYWdlc0ZvckFiT3RhKG91dHB1dF96aXAsIGltYWdlcykKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlLCAncicpIGFzIHZlcmlmeV96aXA6CisgICAgICBmb3IgaW1hZ2UgaW4gaW1hZ2VzOgorICAgICAgICBzZWxmLmFzc2VydEluKCdJTUFHRVMvJyArIGltYWdlICsgJy5pbWcnLCB2ZXJpZnlfemlwLm5hbWVsaXN0KCkpCisKKyAgZGVmIHRlc3RfQWRkUmFkaW9JbWFnZXNGb3JBYk90YV9jb3B5RnJvbVZlbmRvckltYWdlcyhzZWxmKToKKyAgICAiIiJUZXN0cyB0aGUgY2FzZSB0aGF0IGNvcGllcyBpbWFnZXMgZnJvbSBWRU5ET1JfSU1BR0VTLy4iIiIKKyAgICB2ZW5kb3JfaW1hZ2VzX3BhdGggPSBvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICdWRU5ET1JfSU1BR0VTJykKKyAgICBvcy5ta2Rpcih2ZW5kb3JfaW1hZ2VzX3BhdGgpCisKKyAgICBwYXJ0aXRpb25zID0gWydhYm9vdCcsICd4YmwnXQorICAgIGZvciBpbmRleCwgcGFydGl0aW9uIGluIGVudW1lcmF0ZShwYXJ0aXRpb25zKToKKyAgICAgIHN1YmRpciA9IG9zLnBhdGguam9pbih2ZW5kb3JfaW1hZ2VzX3BhdGgsICdzdWJkaXIte30nLmZvcm1hdChpbmRleCkpCisgICAgICBvcy5ta2RpcihzdWJkaXIpCisKKyAgICAgIHBhcnRpdGlvbl9pbWFnZV9wYXRoID0gb3MucGF0aC5qb2luKHN1YmRpciwgcGFydGl0aW9uICsgJy5pbWcnKQorICAgICAgd2l0aCBvcGVuKHBhcnRpdGlvbl9pbWFnZV9wYXRoLCAnd2InKSBhcyBwYXJ0aXRpb25fZnA6CisgICAgICAgIHBhcnRpdGlvbl9mcC53cml0ZShwYXJ0aXRpb24uZW5jb2RlKCkpCisKKyAgICAjIFNldCB1cCB0aGUgb3V0cHV0IGRpci4KKyAgICBpbWFnZXNfcGF0aCA9IG9zLnBhdGguam9pbihPUFRJT05TLmlucHV0X3RtcCwgJ0lNQUdFUycpCisgICAgb3MubWtkaXIoaW1hZ2VzX3BhdGgpCisKKyAgICBBZGRSYWRpb0ltYWdlc0ZvckFiT3RhKE5vbmUsIHBhcnRpdGlvbnMpCisKKyAgICBmb3IgcGFydGl0aW9uIGluIHBhcnRpdGlvbnM6CisgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGltYWdlc19wYXRoLCBwYXJ0aXRpb24gKyAnLmltZycpKSkKKworICBkZWYgdGVzdF9BZGRSYWRpb0ltYWdlc0ZvckFiT3RhX21pc3NpbmdJbWFnZXMoc2VsZik6CisgICAgaW1hZ2VzLCBfID0gc2VsZi5fY3JlYXRlX2ltYWdlcyhbJ2Fib290JywgJ3hibCddLCAnUkFESU8nKQorICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBBZGRSYWRpb0ltYWdlc0ZvckFiT3RhLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgIGltYWdlcyArIFsnYmF6J10pCisKKyAgZGVmIHRlc3RfQWRkUmFkaW9JbWFnZXNGb3JBYk90YV9taXNzaW5nSW1hZ2VzX3ppcE91dHB1dChzZWxmKToKKyAgICBpbWFnZXMsIF8gPSBzZWxmLl9jcmVhdGVfaW1hZ2VzKFsnYWJvb3QnLCAneGJsJ10sICdSQURJTycpCisKKyAgICAjIFNldCB1cCB0aGUgb3V0cHV0IHppcC4KKyAgICBvdXRwdXRfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUoc3VmZml4PScuemlwJykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShvdXRwdXRfZmlsZSwgJ3cnKSBhcyBvdXRwdXRfemlwOgorICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEFkZFJhZGlvSW1hZ2VzRm9yQWJPdGEsIG91dHB1dF96aXAsCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgKyBbJ2JheiddKQorCisgIGRlZiB0ZXN0X0FkZFBhY2tSYWRpb0ltYWdlcyhzZWxmKToKKyAgICBpbWFnZXMsIGltYWdlc19wYXRoID0gc2VsZi5fY3JlYXRlX2ltYWdlcyhbJ2ZvbycsICdiYXInXSwgJ1JBRElPJykKKyAgICBBZGRQYWNrUmFkaW9JbWFnZXMoTm9uZSwgaW1hZ2VzKQorCisgICAgZm9yIGltYWdlIGluIGltYWdlczoKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW1hZ2VzX3BhdGgsIGltYWdlICsgJy5pbWcnKSkpCisKKyAgZGVmIHRlc3RfQWRkUGFja1JhZGlvSW1hZ2VzX3dpdGhfc3VmZml4KHNlbGYpOgorICAgIGltYWdlcywgaW1hZ2VzX3BhdGggPSBzZWxmLl9jcmVhdGVfaW1hZ2VzKFsnZm9vJywgJ2JhciddLCAnUkFESU8nKQorICAgIGltYWdlc193aXRoX3N1ZmZpeCA9IFtpbWFnZSArICcuaW1nJyBmb3IgaW1hZ2UgaW4gaW1hZ2VzXQorICAgIEFkZFBhY2tSYWRpb0ltYWdlcyhOb25lLCBpbWFnZXNfd2l0aF9zdWZmaXgpCisKKyAgICBmb3IgaW1hZ2UgaW4gaW1hZ2VzOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbWFnZXNfcGF0aCwgaW1hZ2UgKyAnLmltZycpKSkKKworICBkZWYgdGVzdF9BZGRQYWNrUmFkaW9JbWFnZXNfemlwT3V0cHV0KHNlbGYpOgorICAgIGltYWdlcywgXyA9IHNlbGYuX2NyZWF0ZV9pbWFnZXMoWydmb28nLCAnYmFyJ10sICdSQURJTycpCisKKyAgICAjIFNldCB1cCB0aGUgb3V0cHV0IHppcC4KKyAgICBvdXRwdXRfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUoc3VmZml4PScuemlwJykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShvdXRwdXRfZmlsZSwgJ3cnKSBhcyBvdXRwdXRfemlwOgorICAgICAgQWRkUGFja1JhZGlvSW1hZ2VzKG91dHB1dF96aXAsIGltYWdlcykKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlLCAncicpIGFzIHZlcmlmeV96aXA6CisgICAgICBmb3IgaW1hZ2UgaW4gaW1hZ2VzOgorICAgICAgICBzZWxmLmFzc2VydEluKCdJTUFHRVMvJyArIGltYWdlICsgJy5pbWcnLCB2ZXJpZnlfemlwLm5hbWVsaXN0KCkpCisKKyAgZGVmIHRlc3RfQWRkUGFja1JhZGlvSW1hZ2VzX2ltYWdlRXhpc3RzKHNlbGYpOgorICAgIGltYWdlcywgaW1hZ2VzX3BhdGggPSBzZWxmLl9jcmVhdGVfaW1hZ2VzKFsnZm9vJywgJ2JhciddLCAnUkFESU8nKQorCisgICAgIyBBZGRpdGlvbmFsbHkgY3JlYXRlIGltYWdlcyB1bmRlciBJTUFHRVMvIHNvIHRoYXQgdGhleSBzaG91bGQgYmUgc2tpcHBlZC4KKyAgICBpbWFnZXMsIGltYWdlc19wYXRoID0gc2VsZi5fY3JlYXRlX2ltYWdlcyhbJ2ZvbycsICdiYXInXSwgJ0lNQUdFUycpCisKKyAgICBBZGRQYWNrUmFkaW9JbWFnZXMoTm9uZSwgaW1hZ2VzKQorCisgICAgZm9yIGltYWdlIGluIGltYWdlczoKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW1hZ2VzX3BhdGgsIGltYWdlICsgJy5pbWcnKSkpCisKKyAgZGVmIHRlc3RfQWRkUGFja1JhZGlvSW1hZ2VzX21pc3NpbmdJbWFnZXMoc2VsZik6CisgICAgaW1hZ2VzLCBfID0gc2VsZi5fY3JlYXRlX2ltYWdlcyhbJ2ZvbycsICdiYXInXSwgJ1JBRElPJykKKyAgICBBZGRQYWNrUmFkaW9JbWFnZXMoTm9uZSwgaW1hZ2VzKQorCisgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEFkZFBhY2tSYWRpb0ltYWdlcywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgKyBbJ2JheiddKQorCisgIEBzdGF0aWNtZXRob2QKKyAgZGVmIF90ZXN0X0FkZENhcmVNYXBUeHRGb3JBYk90YSgpOgorICAgICIiIkhlbHBlciBmdW5jdGlvbiB0byBzZXQgdXAgdGhlIHRlc3QgZm9yIHRlc3RfQWRkQ2FyZU1hcFR4dEZvckFiT3RhKCkuIiIiCisgICAgT1BUSU9OUy5pbmZvX2RpY3QgPSB7CisgICAgICAgICdzeXN0ZW1fdmVyaXR5X2Jsb2NrX2RldmljZScgOiAnL2Rldi9ibG9jay9zeXN0ZW0nLAorICAgICAgICAndmVuZG9yX3Zlcml0eV9ibG9ja19kZXZpY2UnIDogJy9kZXYvYmxvY2svdmVuZG9yJywKKyAgICB9CisKKyAgICAjIFByZXBhcmUgdGhlIE1FVEEvIGZvbGRlci4KKyAgICBtZXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICdNRVRBJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobWV0YV9wYXRoKToKKyAgICAgIG9zLm1rZGlyKG1ldGFfcGF0aCkKKworICAgIHN5c3RlbV9pbWFnZSA9IHRlc3RfdXRpbHMuY29uc3RydWN0X3NwYXJzZV9pbWFnZShbCisgICAgICAgICgweENBQzEsIDYpLAorICAgICAgICAoMHhDQUMzLCA0KSwKKyAgICAgICAgKDB4Q0FDMSwgNildKQorICAgIHZlbmRvcl9pbWFnZSA9IHRlc3RfdXRpbHMuY29uc3RydWN0X3NwYXJzZV9pbWFnZShbCisgICAgICAgICgweENBQzIsIDEwKV0pCisKKyAgICBpbWFnZV9wYXRocyA9IHsKKyAgICAgICAgJ3N5c3RlbScgOiBzeXN0ZW1faW1hZ2UsCisgICAgICAgICd2ZW5kb3InIDogdmVuZG9yX2ltYWdlLAorICAgIH0KKyAgICByZXR1cm4gaW1hZ2VfcGF0aHMKKworICBkZWYgdGVzdF9BZGRDYXJlTWFwVHh0Rm9yQWJPdGEoc2VsZik6CisgICAgaW1hZ2VfcGF0aHMgPSBzZWxmLl90ZXN0X0FkZENhcmVNYXBUeHRGb3JBYk90YSgpCisKKyAgICBBZGRDYXJlTWFwVHh0Rm9yQWJPdGEoTm9uZSwgWydzeXN0ZW0nLCAndmVuZG9yJ10sIGltYWdlX3BhdGhzKQorCisgICAgY2FyZV9tYXBfZmlsZSA9IG9zLnBhdGguam9pbihPUFRJT05TLmlucHV0X3RtcCwgJ01FVEEnLCAnY2FyZV9tYXAudHh0JykKKyAgICB3aXRoIG9wZW4oY2FyZV9tYXBfZmlsZSwgJ3InKSBhcyB2ZXJpZnlfZnA6CisgICAgICBjYXJlX21hcCA9IHZlcmlmeV9mcC5yZWFkKCkKKworICAgIGxpbmVzID0gY2FyZV9tYXAuc3BsaXQoJ1xuJykKKyAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGxlbihsaW5lcykpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3lzdGVtJywgbGluZXNbMF0pCisgICAgc2VsZi5hc3NlcnRFcXVhbChSYW5nZVNldCgiMC01IDEwLTE1IikudG9fc3RyaW5nX3JhdygpLCBsaW5lc1sxXSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCd2ZW5kb3InLCBsaW5lc1syXSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKFJhbmdlU2V0KCIwLTkiKS50b19zdHJpbmdfcmF3KCksIGxpbmVzWzNdKQorCisgIGRlZiB0ZXN0X0FkZENhcmVNYXBUeHRGb3JBYk90YV93aXRoTm9uQ2FyZU1hcFBhcnRpdGlvbnMoc2VsZik6CisgICAgIiIiUGFydGl0aW9ucyB3aXRob3V0IGNhcmVfbWFwIHNob3VsZCBiZSBpZ25vcmVkLiIiIgorICAgIGltYWdlX3BhdGhzID0gc2VsZi5fdGVzdF9BZGRDYXJlTWFwVHh0Rm9yQWJPdGEoKQorCisgICAgQWRkQ2FyZU1hcFR4dEZvckFiT3RhKAorICAgICAgICBOb25lLCBbJ2Jvb3QnLCAnc3lzdGVtJywgJ3ZlbmRvcicsICd2Ym1ldGEnXSwgaW1hZ2VfcGF0aHMpCisKKyAgICBjYXJlX21hcF9maWxlID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAnTUVUQScsICdjYXJlX21hcC50eHQnKQorICAgIHdpdGggb3BlbihjYXJlX21hcF9maWxlLCAncicpIGFzIHZlcmlmeV9mcDoKKyAgICAgIGNhcmVfbWFwID0gdmVyaWZ5X2ZwLnJlYWQoKQorCisgICAgbGluZXMgPSBjYXJlX21hcC5zcGxpdCgnXG4nKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgbGVuKGxpbmVzKSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdzeXN0ZW0nLCBsaW5lc1swXSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKFJhbmdlU2V0KCIwLTUgMTAtMTUiKS50b19zdHJpbmdfcmF3KCksIGxpbmVzWzFdKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3ZlbmRvcicsIGxpbmVzWzJdKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmFuZ2VTZXQoIjAtOSIpLnRvX3N0cmluZ19yYXcoKSwgbGluZXNbM10pCisKKyAgZGVmIHRlc3RfQWRkQ2FyZU1hcFR4dEZvckFiT3RhX3dpdGhBdmIoc2VsZik6CisgICAgIiIiVGVzdHMgdGhlIGNhc2UgZm9yIGRldmljZSB1c2luZyBBVkIuIiIiCisgICAgaW1hZ2VfcGF0aHMgPSBzZWxmLl90ZXN0X0FkZENhcmVNYXBUeHRGb3JBYk90YSgpCisgICAgT1BUSU9OUy5pbmZvX2RpY3QgPSB7CisgICAgICAgICdhdmJfc3lzdGVtX2hhc2h0cmVlX2VuYWJsZScgOiAndHJ1ZScsCisgICAgICAgICdhdmJfdmVuZG9yX2hhc2h0cmVlX2VuYWJsZScgOiAndHJ1ZScsCisgICAgfQorCisgICAgQWRkQ2FyZU1hcFR4dEZvckFiT3RhKE5vbmUsIFsnc3lzdGVtJywgJ3ZlbmRvciddLCBpbWFnZV9wYXRocykKKworICAgIGNhcmVfbWFwX2ZpbGUgPSBvcy5wYXRoLmpvaW4oT1BUSU9OUy5pbnB1dF90bXAsICdNRVRBJywgJ2NhcmVfbWFwLnR4dCcpCisgICAgd2l0aCBvcGVuKGNhcmVfbWFwX2ZpbGUsICdyJykgYXMgdmVyaWZ5X2ZwOgorICAgICAgY2FyZV9tYXAgPSB2ZXJpZnlfZnAucmVhZCgpCisKKyAgICBsaW5lcyA9IGNhcmVfbWFwLnNwbGl0KCdcbicpCisgICAgc2VsZi5hc3NlcnRFcXVhbCg0LCBsZW4obGluZXMpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3N5c3RlbScsIGxpbmVzWzBdKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmFuZ2VTZXQoIjAtNSAxMC0xNSIpLnRvX3N0cmluZ19yYXcoKSwgbGluZXNbMV0pCisgICAgc2VsZi5hc3NlcnRFcXVhbCgndmVuZG9yJywgbGluZXNbMl0pCisgICAgc2VsZi5hc3NlcnRFcXVhbChSYW5nZVNldCgiMC05IikudG9fc3RyaW5nX3JhdygpLCBsaW5lc1szXSkKKworICBkZWYgdGVzdF9BZGRDYXJlTWFwVHh0Rm9yQWJPdGFfdmVyaXR5Tm90RW5hYmxlZChzZWxmKToKKyAgICAiIiJObyBjYXJlX21hcC50eHQgc2hvdWxkIGJlIGdlbmVyYXRlZCBpZiB2ZXJpdHkgbm90IGVuYWJsZWQuIiIiCisgICAgaW1hZ2VfcGF0aHMgPSBzZWxmLl90ZXN0X0FkZENhcmVNYXBUeHRGb3JBYk90YSgpCisgICAgT1BUSU9OUy5pbmZvX2RpY3QgPSB7fQorICAgIEFkZENhcmVNYXBUeHRGb3JBYk90YShOb25lLCBbJ3N5c3RlbScsICd2ZW5kb3InXSwgaW1hZ2VfcGF0aHMpCisKKyAgICBjYXJlX21hcF9maWxlID0gb3MucGF0aC5qb2luKE9QVElPTlMuaW5wdXRfdG1wLCAnTUVUQScsICdjYXJlX21hcC50eHQnKQorICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoY2FyZV9tYXBfZmlsZSkpCisKKyAgZGVmIHRlc3RfQWRkQ2FyZU1hcFR4dEZvckFiT3RhX21pc3NpbmdJbWFnZUZpbGUoc2VsZik6CisgICAgIiIiTWlzc2luZyBpbWFnZSBmaWxlIHNob3VsZCBiZSBjb25zaWRlcmVkIGZhdGFsLiIiIgorICAgIGltYWdlX3BhdGhzID0gc2VsZi5fdGVzdF9BZGRDYXJlTWFwVHh0Rm9yQWJPdGEoKQorICAgIGltYWdlX3BhdGhzWyd2ZW5kb3InXSA9ICcnCisgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEFkZENhcmVNYXBUeHRGb3JBYk90YSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBbJ3N5c3RlbScsICd2ZW5kb3InXSwgaW1hZ2VfcGF0aHMpCisKKyAgZGVmIHRlc3RfQWRkQ2FyZU1hcFR4dEZvckFiT3RhX3ppcE91dHB1dChzZWxmKToKKyAgICAiIiJUZXN0cyB0aGUgY2FzZSB3aXRoIFpJUCBvdXRwdXQuIiIiCisgICAgaW1hZ2VfcGF0aHMgPSBzZWxmLl90ZXN0X0FkZENhcmVNYXBUeHRGb3JBYk90YSgpCisKKyAgICBvdXRwdXRfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUoc3VmZml4PScuemlwJykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShvdXRwdXRfZmlsZSwgJ3cnKSBhcyBvdXRwdXRfemlwOgorICAgICAgQWRkQ2FyZU1hcFR4dEZvckFiT3RhKG91dHB1dF96aXAsIFsnc3lzdGVtJywgJ3ZlbmRvciddLCBpbWFnZV9wYXRocykKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlLCAncicpIGFzIHZlcmlmeV96aXA6CisgICAgICBjYXJlX21hcCA9IHZlcmlmeV96aXAucmVhZCgnTUVUQS9jYXJlX21hcC50eHQnKS5kZWNvZGUoJ2FzY2lpJykKKworICAgIGxpbmVzID0gY2FyZV9tYXAuc3BsaXQoJ1xuJykKKyAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGxlbihsaW5lcykpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3lzdGVtJywgbGluZXNbMF0pCisgICAgc2VsZi5hc3NlcnRFcXVhbChSYW5nZVNldCgiMC01IDEwLTE1IikudG9fc3RyaW5nX3JhdygpLCBsaW5lc1sxXSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCd2ZW5kb3InLCBsaW5lc1syXSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKFJhbmdlU2V0KCIwLTkiKS50b19zdHJpbmdfcmF3KCksIGxpbmVzWzNdKQorCisgIGRlZiB0ZXN0X0FkZENhcmVNYXBUeHRGb3JBYk90YV96aXBPdXRwdXRfY2FyZU1hcEVudHJ5RXhpc3RzKHNlbGYpOgorICAgICIiIlRlc3RzIHRoZSBjYXNlIHdpdGggWklQIG91dHB1dCB3aGljaCBhbHJlYWR5IGhhcyBjYXJlX21hcCBlbnRyeS4iIiIKKyAgICBpbWFnZV9wYXRocyA9IHNlbGYuX3Rlc3RfQWRkQ2FyZU1hcFR4dEZvckFiT3RhKCkKKworICAgIG91dHB1dF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy56aXAnKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlLCAndycpIGFzIG91dHB1dF96aXA6CisgICAgICAjIENyZWF0ZSBhbiBleGlzdGluZyBNRVRBL2NhcmVfbWFwLnR4dCBlbnRyeS4KKyAgICAgIGNvbW1vbi5aaXBXcml0ZVN0cihvdXRwdXRfemlwLCAnTUVUQS9jYXJlX21hcC50eHQnLCAnZHVtbXkgY2FyZV9tYXAudHh0JykKKworICAgICAgIyBSZXF1ZXN0IHRvIGFkZCBNRVRBL2NhcmVfbWFwLnR4dCBhZ2Fpbi4KKyAgICAgIEFkZENhcmVNYXBUeHRGb3JBYk90YShvdXRwdXRfemlwLCBbJ3N5c3RlbScsICd2ZW5kb3InXSwgaW1hZ2VfcGF0aHMpCisKKyAgICAjIFRoZSBvbmUgdW5kZXIgT1BUSU9OUy5pbnB1dF90bXAgbXVzdCBoYXZlIGJlZW4gcmVwbGFjZWQuCisgICAgY2FyZV9tYXBfZmlsZSA9IG9zLnBhdGguam9pbihPUFRJT05TLmlucHV0X3RtcCwgJ01FVEEnLCAnY2FyZV9tYXAudHh0JykKKyAgICB3aXRoIG9wZW4oY2FyZV9tYXBfZmlsZSwgJ3InKSBhcyB2ZXJpZnlfZnA6CisgICAgICBjYXJlX21hcCA9IHZlcmlmeV9mcC5yZWFkKCkKKworICAgIGxpbmVzID0gY2FyZV9tYXAuc3BsaXQoJ1xuJykKKyAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGxlbihsaW5lcykpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3lzdGVtJywgbGluZXNbMF0pCisgICAgc2VsZi5hc3NlcnRFcXVhbChSYW5nZVNldCgiMC01IDEwLTE1IikudG9fc3RyaW5nX3JhdygpLCBsaW5lc1sxXSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCd2ZW5kb3InLCBsaW5lc1syXSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKFJhbmdlU2V0KCIwLTkiKS50b19zdHJpbmdfcmF3KCksIGxpbmVzWzNdKQorCisgICAgIyBUaGUgZXhpc3RpbmcgZW50cnkgc2hvdWxkIGJlIHNjaGVkdWxlZCB0byBiZSByZXBsYWNlZC4KKyAgICBzZWxmLmFzc2VydEluKCdNRVRBL2NhcmVfbWFwLnR4dCcsIE9QVElPTlMucmVwbGFjZV91cGRhdGVkX2ZpbGVzX2xpc3QpCisKKyAgZGVmIHRlc3RfR2V0Q2FyZU1hcChzZWxmKToKKyAgICBzcGFyc2VfaW1hZ2UgPSB0ZXN0X3V0aWxzLmNvbnN0cnVjdF9zcGFyc2VfaW1hZ2UoWworICAgICAgICAoMHhDQUMxLCA2KSwKKyAgICAgICAgKDB4Q0FDMywgNCksCisgICAgICAgICgweENBQzEsIDYpXSkKKyAgICBPUFRJT05TLmluZm9fZGljdCA9IHsKKyAgICAgICAgJ3N5c3RlbV9hZGp1c3RlZF9wYXJ0aXRpb25fc2l6ZScgOiAxMiwKKyAgICB9CisgICAgbmFtZSwgY2FyZV9tYXAgPSBHZXRDYXJlTWFwKCdzeXN0ZW0nLCBzcGFyc2VfaW1hZ2UpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3lzdGVtJywgbmFtZSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKFJhbmdlU2V0KCIwLTUgMTAtMTIiKS50b19zdHJpbmdfcmF3KCksIGNhcmVfbWFwKQorCisgIGRlZiB0ZXN0X0dldENhcmVNYXBfaW52YWxpZFBhcnRpdGlvbihzZWxmKToKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2V0Q2FyZU1hcCwgJ29lbScsIE5vbmUpCisKKyAgZGVmIHRlc3RfR2V0Q2FyZU1hcF9pbnZhbGlkQWRqdXN0ZWRQYXJ0aXRpb25TaXplKHNlbGYpOgorICAgIHNwYXJzZV9pbWFnZSA9IHRlc3RfdXRpbHMuY29uc3RydWN0X3NwYXJzZV9pbWFnZShbCisgICAgICAgICgweENBQzEsIDYpLAorICAgICAgICAoMHhDQUMzLCA0KSwKKyAgICAgICAgKDB4Q0FDMSwgNildKQorICAgIE9QVElPTlMuaW5mb19kaWN0ID0geworICAgICAgICAnc3lzdGVtX2FkanVzdGVkX3BhcnRpdGlvbl9zaXplJyA6IC0xMiwKKyAgICB9CisgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdldENhcmVNYXAsICdzeXN0ZW0nLCBzcGFyc2VfaW1hZ2UpCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdF9ibG9ja2ltZ2RpZmYucHkgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdF9ibG9ja2ltZ2RpZmYucHkKaW5kZXggZTVhMzY5NC4uY2VhZGExOCAxMDA2NDQKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RfYmxvY2tpbWdkaWZmLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X2Jsb2NraW1nZGlmZi5weQpAQCAtMTYsMTIgKzE2LDQ0IEBACiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IGNvbW1vbgogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gYmxvY2tpbWdkaWZmIGltcG9ydCBCbG9ja0ltYWdlRGlmZiwgRW1wdHlJbWFnZSwgVHJhbnNmZXIKK2ltcG9ydCBjb21tb24KK2Zyb20gYmxvY2tpbWdkaWZmIGltcG9ydCAoQmxvY2tJbWFnZURpZmYsIEVtcHR5SW1hZ2UsIEhlYXBJdGVtLCBJbWdkaWZmU3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyKQogZnJvbSByYW5nZWxpYiBpbXBvcnQgUmFuZ2VTZXQKIAorCitjbGFzcyBIZWFscEl0ZW1UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICBjbGFzcyBJdGVtKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjb3JlKToKKyAgICAgIHNlbGYuc2NvcmUgPSBzY29yZQorCisgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgaXRlbTEgPSBIZWFwSXRlbShzZWxmLkl0ZW0oMTUpKQorICAgIGl0ZW0yID0gSGVhcEl0ZW0oc2VsZi5JdGVtKDIwKSkKKyAgICBpdGVtMyA9IEhlYXBJdGVtKHNlbGYuSXRlbSgxNSkpCisgICAgc2VsZi5hc3NlcnRUcnVlKGl0ZW0xKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShpdGVtMikKKyAgICBzZWxmLmFzc2VydFRydWUoaXRlbTMpCisKKyAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGl0ZW0xLCBpdGVtMikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0xLCBpdGVtMykKKyAgICAjIEhlYXBJdGVtIHVzZXMgbmVnYXRlZCBzY29yZXMuCisgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGl0ZW0xLCBpdGVtMikKKyAgICBzZWxmLmFzc2VydExlc3NFcXVhbChpdGVtMSwgaXRlbTMpCisgICAgc2VsZi5hc3NlcnRUcnVlKGl0ZW0xIDw9IGl0ZW0zKQorICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXRlbTIgPj0gaXRlbTEpCisKKyAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgaXRlbSA9IEhlYXBJdGVtKHNlbGYuSXRlbSgxNSkpCisgICAgc2VsZi5hc3NlcnRUcnVlKGl0ZW0pCisKKyAgICBpdGVtLmNsZWFyKCkKKyAgICBzZWxmLmFzc2VydEZhbHNlKGl0ZW0pCisKKwogY2xhc3MgQmxvY2tJbWFnZURpZmZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICBkZWYgdGVzdF9HZW5lcmF0ZURpZ3JhcGhPcmRlcihzZWxmKToKQEAgLTE0MSwzICsxNzMsMTAyIEBACiAgICAgIyBJbnN1ZmZpY2llbnQgY2FjaGUgdG8gc3Rhc2ggMTUgYmxvY2tzIChzaXplICogMC44IDwgMTUpLgogICAgIGNvbW1vbi5PUFRJT05TLmNhY2hlX3NpemUgPSAxNSAqIDQwOTYKICAgICBzZWxmLmFzc2VydEVxdWFsKDE1LCBibG9ja19pbWFnZV9kaWZmLlJldmlzZVN0YXNoU2l6ZSgpKQorCisgIGRlZiB0ZXN0X0ZpbGVUeXBlU3VwcG9ydGVkQnlJbWdkaWZmKHNlbGYpOgorICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgQmxvY2tJbWFnZURpZmYuRmlsZVR5cGVTdXBwb3J0ZWRCeUltZ2RpZmYoCisgICAgICAgICAgICAiL3N5c3RlbS9wcml2LWFwcC9TZXR0aW5ncy9TZXR0aW5ncy5hcGsiKSkKKyAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgIEJsb2NrSW1hZ2VEaWZmLkZpbGVUeXBlU3VwcG9ydGVkQnlJbWdkaWZmKAorICAgICAgICAgICAgIi9zeXN0ZW0vZnJhbWV3b3JrL2FtLmphciIpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgQmxvY2tJbWFnZURpZmYuRmlsZVR5cGVTdXBwb3J0ZWRCeUltZ2RpZmYoCisgICAgICAgICAgICAiL3N5c3RlbS9ldGMvc2VjdXJpdHkvb3RhY2VydHMuemlwIikpCisKKyAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICBCbG9ja0ltYWdlRGlmZi5GaWxlVHlwZVN1cHBvcnRlZEJ5SW1nZGlmZigKKyAgICAgICAgICAgICIvc3lzdGVtL2ZyYW1ld29yay9hcm0vYm9vdC5vYXQiKSkKKyAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICBCbG9ja0ltYWdlRGlmZi5GaWxlVHlwZVN1cHBvcnRlZEJ5SW1nZGlmZigKKyAgICAgICAgICAgICIvc3lzdGVtL3ByaXYtYXBwL25vdGFuYXBrIikpCisKKyAgZGVmIHRlc3RfQ2FuVXNlSW1nZGlmZihzZWxmKToKKyAgICBibG9ja19pbWFnZV9kaWZmID0gQmxvY2tJbWFnZURpZmYoRW1wdHlJbWFnZSgpLCBFbXB0eUltYWdlKCkpCisgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICBibG9ja19pbWFnZV9kaWZmLkNhblVzZUltZ2RpZmYoCisgICAgICAgICAgICAiL3N5c3RlbS9hcHAvYXBwMS5hcGsiLCBSYW5nZVNldCgiMTAtMTUiKSwgUmFuZ2VTZXQoIjAtNSIpKSkKKyAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgIGJsb2NrX2ltYWdlX2RpZmYuQ2FuVXNlSW1nZGlmZigKKyAgICAgICAgICAgICIvdmVuZG9yL2FwcC9hcHAyLmFwayIsIFJhbmdlU2V0KCIyMCAyNSIpLCBSYW5nZVNldCgiMzAtMzEiKSwgVHJ1ZSkpCisKKyAgICBzZWxmLmFzc2VydERpY3RFcXVhbCgKKyAgICAgICAgeworICAgICAgICAgICAgSW1nZGlmZlN0YXRzLlVTRURfSU1HRElGRiA6IHsiL3N5c3RlbS9hcHAvYXBwMS5hcGsifSwKKyAgICAgICAgICAgIEltZ2RpZmZTdGF0cy5VU0VEX0lNR0RJRkZfTEFSR0VfQVBLIDogeyIvdmVuZG9yL2FwcC9hcHAyLmFwayJ9LAorICAgICAgICB9LAorICAgICAgICBibG9ja19pbWFnZV9kaWZmLmltZ2RpZmZfc3RhdHMuc3RhdHMpCisKKworICBkZWYgdGVzdF9DYW5Vc2VJbWdkaWZmX2luZWxpZ2libGUoc2VsZik6CisgICAgIyBEaXNhYmxlZCBieSBjYWxsZXIuCisgICAgYmxvY2tfaW1hZ2VfZGlmZiA9IEJsb2NrSW1hZ2VEaWZmKEVtcHR5SW1hZ2UoKSwgRW1wdHlJbWFnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlX2ltZ2RpZmY9VHJ1ZSkKKyAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICBibG9ja19pbWFnZV9kaWZmLkNhblVzZUltZ2RpZmYoCisgICAgICAgICAgICAiL3N5c3RlbS9hcHAvYXBwMS5hcGsiLCBSYW5nZVNldCgiMTAtMTUiKSwgUmFuZ2VTZXQoIjAtNSIpKSkKKworICAgICMgVW5zdXBwb3J0ZWQgZmlsZSB0eXBlLgorICAgIGJsb2NrX2ltYWdlX2RpZmYgPSBCbG9ja0ltYWdlRGlmZihFbXB0eUltYWdlKCksIEVtcHR5SW1hZ2UoKSkKKyAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICBibG9ja19pbWFnZV9kaWZmLkNhblVzZUltZ2RpZmYoCisgICAgICAgICAgICAiL3N5c3RlbS9iaW4vZ3ppcCIsIFJhbmdlU2V0KCIxMC0xNSIpLCBSYW5nZVNldCgiMC01IikpKQorCisgICAgIyBBdCBsZWFzdCBvbmUgb2YgdGhlIHJhbmdlcyBpcyBpbiBub24tbW9ub3RvbmljIG9yZGVyLgorICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgIGJsb2NrX2ltYWdlX2RpZmYuQ2FuVXNlSW1nZGlmZigKKyAgICAgICAgICAgICIvc3lzdGVtL2FwcC9hcHAyLmFwayIsIFJhbmdlU2V0KCIxMC0xNSIpLAorICAgICAgICAgICAgUmFuZ2VTZXQoIjE1LTIwIDMwIDEwLTE0IikpKQorCisgICAgIyBBdCBsZWFzdCBvbmUgb2YgdGhlIHJhbmdlcyBoYXMgYmVlbiBtb2RpZmllZC4KKyAgICBzcmNfcmFuZ2VzID0gUmFuZ2VTZXQoIjAtNSIpCisgICAgc3JjX3Jhbmdlcy5leHRyYVsndHJpbW1lZCddID0gVHJ1ZQorICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgIGJsb2NrX2ltYWdlX2RpZmYuQ2FuVXNlSW1nZGlmZigKKyAgICAgICAgICAgICIvdmVuZG9yL2FwcC9hcHAzLmFwayIsIFJhbmdlU2V0KCIxMC0xNSIpLCBzcmNfcmFuZ2VzKSkKKworICAgICMgQXQgbGVhc3Qgb25lIG9mIHRoZSByYW5nZXMgaXMgaW5jb21wbGV0ZS4KKyAgICBzcmNfcmFuZ2VzID0gUmFuZ2VTZXQoIjAtNSIpCisgICAgc3JjX3Jhbmdlcy5leHRyYVsnaW5jb21wbGV0ZSddID0gVHJ1ZQorICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgIGJsb2NrX2ltYWdlX2RpZmYuQ2FuVXNlSW1nZGlmZigKKyAgICAgICAgICAgICIvdmVuZG9yL2FwcC9hcHA0LmFwayIsIFJhbmdlU2V0KCIxMC0xNSIpLCBzcmNfcmFuZ2VzKSkKKworICAgICMgVGhlIHN0YXRzIGFyZSBjb3JyZWN0bHkgbG9nZ2VkLgorICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKAorICAgICAgICB7CisgICAgICAgICAgICBJbWdkaWZmU3RhdHMuU0tJUFBFRF9OT05NT05PVE9OSUMgOiB7Jy9zeXN0ZW0vYXBwL2FwcDIuYXBrJ30sCisgICAgICAgICAgICBJbWdkaWZmU3RhdHMuU0tJUFBFRF9UUklNTUVEIDogeycvdmVuZG9yL2FwcC9hcHAzLmFwayd9LAorICAgICAgICAgICAgSW1nZGlmZlN0YXRzLlNLSVBQRURfSU5DT01QTEVURTogeycvdmVuZG9yL2FwcC9hcHA0LmFwayd9LAorICAgICAgICB9LAorICAgICAgICBibG9ja19pbWFnZV9kaWZmLmltZ2RpZmZfc3RhdHMuc3RhdHMpCisKKworY2xhc3MgSW1nZGlmZlN0YXRzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgZGVmIHRlc3RfTG9nKHNlbGYpOgorICAgIGltZ2RpZmZfc3RhdHMgPSBJbWdkaWZmU3RhdHMoKQorICAgIGltZ2RpZmZfc3RhdHMuTG9nKCIvc3lzdGVtL2FwcC9hcHAyLmFwayIsIEltZ2RpZmZTdGF0cy5VU0VEX0lNR0RJRkYpCisgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoCisgICAgICAgIHsKKyAgICAgICAgICAgIEltZ2RpZmZTdGF0cy5VU0VEX0lNR0RJRkY6IHsnL3N5c3RlbS9hcHAvYXBwMi5hcGsnfSwKKyAgICAgICAgfSwKKyAgICAgICAgaW1nZGlmZl9zdGF0cy5zdGF0cykKKworICBkZWYgdGVzdF9Mb2dfaW52YWxpZElucHV0cyhzZWxmKToKKyAgICBpbWdkaWZmX3N0YXRzID0gSW1nZGlmZlN0YXRzKCkKKworICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBpbWdkaWZmX3N0YXRzLkxvZywgIi9zeXN0ZW0vYmluL2d6aXAiLAorICAgICAgICAgICAgICAgICAgICAgIEltZ2RpZmZTdGF0cy5VU0VEX0lNR0RJRkYpCisKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgaW1nZGlmZl9zdGF0cy5Mb2csICIvc3lzdGVtL2FwcC9hcHAxLmFwayIsCisgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcmVhc29uIikKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X2J1aWxkX2ltYWdlLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RfYnVpbGRfaW1hZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxZmFmZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X2J1aWxkX2ltYWdlLnB5CkBAIC0wLDAgKzEsOTQgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29tbW9uCitmcm9tIGJ1aWxkX2ltYWdlIGltcG9ydCBDaGVja0hlYWRyb29tLCBSdW5Db21tYW5kCisKKworY2xhc3MgQnVpbGRJbWFnZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICMgQXZhaWxhYmxlOiAxMDAwIGJsb2Nrcy4KKyAgRVhUNEZTX09VVFBVVCA9ICgKKyAgICAgICJDcmVhdGVkIGZpbGVzeXN0ZW0gd2l0aCAyNzc3LzEyOTAyNCBpbm9kZXMgYW5kIDUxNTA5OS81MTYwOTkgYmxvY2tzIikKKworICBkZWYgdGVzdF9DaGVja0hlYWRyb29tX1NpemVVbmRlckxpbWl0KHNlbGYpOgorICAgICMgUmVxdWlyZWQgaGVhZHJvb206IDEwMDAgYmxvY2tzLgorICAgIHByb3BfZGljdCA9IHsKKyAgICAgICAgJ2ZzX3R5cGUnIDogJ2V4dDQnLAorICAgICAgICAncGFydGl0aW9uX2hlYWRyb29tJyA6ICc0MDk2MDAwJywKKyAgICAgICAgJ21vdW50X3BvaW50JyA6ICdzeXN0ZW0nLAorICAgIH0KKyAgICBzZWxmLmFzc2VydFRydWUoQ2hlY2tIZWFkcm9vbShzZWxmLkVYVDRGU19PVVRQVVQsIHByb3BfZGljdCkpCisKKyAgZGVmIHRlc3RfQ2hlY2tIZWFkcm9vbV9JbnN1ZmZpY2llbnRIZWFkcm9vbShzZWxmKToKKyAgICAjIFJlcXVpcmVkIGhlYWRyb29tOiAxMDAxIGJsb2Nrcy4KKyAgICBwcm9wX2RpY3QgPSB7CisgICAgICAgICdmc190eXBlJyA6ICdleHQ0JywKKyAgICAgICAgJ3BhcnRpdGlvbl9oZWFkcm9vbScgOiAnNDEwMDA5NicsCisgICAgICAgICdtb3VudF9wb2ludCcgOiAnc3lzdGVtJywKKyAgICB9CisgICAgc2VsZi5hc3NlcnRGYWxzZShDaGVja0hlYWRyb29tKHNlbGYuRVhUNEZTX09VVFBVVCwgcHJvcF9kaWN0KSkKKworICBkZWYgdGVzdF9DaGVja0hlYWRyb29tX1dyb25nRnNUeXBlKHNlbGYpOgorICAgIHByb3BfZGljdCA9IHsKKyAgICAgICAgJ2ZzX3R5cGUnIDogJ2YyZnMnLAorICAgICAgICAncGFydGl0aW9uX2hlYWRyb29tJyA6ICc0MTAwMDk2JywKKyAgICAgICAgJ21vdW50X3BvaW50JyA6ICdzeXN0ZW0nLAorICAgIH0KKyAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIENoZWNrSGVhZHJvb20sIHNlbGYuRVhUNEZTX09VVFBVVCwgcHJvcF9kaWN0KQorCisgIGRlZiB0ZXN0X0NoZWNrSGVhZHJvb21fTWlzc2luZ1Byb3BlcnRpZXMoc2VsZik6CisgICAgcHJvcF9kaWN0ID0geworICAgICAgICAnZnNfdHlwZScgOiAnZXh0NCcsCisgICAgICAgICdwYXJ0aXRpb25faGVhZHJvb20nIDogJzQxMDAwOTYnLAorICAgIH0KKyAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIENoZWNrSGVhZHJvb20sIHNlbGYuRVhUNEZTX09VVFBVVCwgcHJvcF9kaWN0KQorCisgICAgcHJvcF9kaWN0ID0geworICAgICAgICAnZnNfdHlwZScgOiAnZXh0NCcsCisgICAgICAgICdtb3VudF9wb2ludCcgOiAnc3lzdGVtJywKKyAgICB9CisgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgIEFzc2VydGlvbkVycm9yLCBDaGVja0hlYWRyb29tLCBzZWxmLkVYVDRGU19PVVRQVVQsIHByb3BfZGljdCkKKworICBkZWYgdGVzdF9DaGVja0hlYWRyb29tX1dpdGhNa2UyZnNPdXRwdXQoc2VsZik6CisgICAgIiIiVGVzdHMgdGhlIHJlc3VsdCBwYXJzaW5nIGZyb20gYWN0dWFsIGNhbGwgdG8gbWtlMmZzLiIiIgorICAgIGlucHV0X2RpciA9IGNvbW1vbi5NYWtlVGVtcERpcigpCisgICAgb3V0cHV0X2ltYWdlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy5pbWcnKQorICAgIGNvbW1hbmQgPSBbJ21rdXNlcmltZ19ta2UyZnMuc2gnLCBpbnB1dF9kaXIsIG91dHB1dF9pbWFnZSwgJ2V4dDQnLAorICAgICAgICAgICAgICAgJy9zeXN0ZW0nLCAnNDA5NjAwJywgJy1qJywgJzAnXQorICAgIGV4dDRmc19vdXRwdXQsIGV4aXRfY29kZSA9IFJ1bkNvbW1hbmQoY29tbWFuZCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGV4aXRfY29kZSkKKworICAgIHByb3BfZGljdCA9IHsKKyAgICAgICAgJ2ZzX3R5cGUnIDogJ2V4dDQnLAorICAgICAgICAncGFydGl0aW9uX2hlYWRyb29tJyA6ICc0MDk2MCcsCisgICAgICAgICdtb3VudF9wb2ludCcgOiAnc3lzdGVtJywKKyAgICB9CisgICAgc2VsZi5hc3NlcnRUcnVlKENoZWNrSGVhZHJvb20oZXh0NGZzX291dHB1dCwgcHJvcF9kaWN0KSkKKworICAgIHByb3BfZGljdCA9IHsKKyAgICAgICAgJ2ZzX3R5cGUnIDogJ2V4dDQnLAorICAgICAgICAncGFydGl0aW9uX2hlYWRyb29tJyA6ICc0MTM2OTYnLAorICAgICAgICAnbW91bnRfcG9pbnQnIDogJ3N5c3RlbScsCisgICAgfQorICAgIHNlbGYuYXNzZXJ0RmFsc2UoQ2hlY2tIZWFkcm9vbShleHQ0ZnNfb3V0cHV0LCBwcm9wX2RpY3QpKQorCisgICAgY29tbW9uLkNsZWFudXAoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RfY29tbW9uLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RfY29tbW9uLnB5CmluZGV4IDEwZWMwZDMuLmZiMjZiNjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X2NvbW1vbi5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdF9jb21tb24ucHkKQEAgLTEzLDIyICsxMywyNiBAQAogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIworCiBpbXBvcnQgb3MKLWltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB6aXBmaWxlCi0KIGZyb20gaGFzaGxpYiBpbXBvcnQgc2hhMQogCiBpbXBvcnQgY29tbW9uCitpbXBvcnQgdGVzdF91dGlscwogaW1wb3J0IHZhbGlkYXRlX3RhcmdldF9maWxlcworZnJvbSByYW5nZWxpYiBpbXBvcnQgUmFuZ2VTZXQKKwogCiBLaUIgPSAxMDI0CiBNaUIgPSAxMDI0ICogS2lCCiBHaUIgPSAxMDI0ICogTWlCCiAKKwogZGVmIGdldF8yZ2Jfc3RyaW5nKCk6CiAgIHNpemUgPSBpbnQoMiAqIEdpQiArIDEpCiAgIGJsb2NrX3NpemUgPSA0ICogS2lCCkBAIC0zMDksMTggKzMxMywzNTIgQEAKICAgICBmaW5hbGx5OgogICAgICAgb3MucmVtb3ZlKHppcF9maWxlX25hbWUpCiAKLWNsYXNzIEluc3RhbGxSZWNvdmVyeVNjcmlwdEZvcm1hdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAiIiJDaGVjayB0aGUgZm9ybWF0IG9mIGluc3RhbGwtcmVjb3Zlcnkuc2gKKyAgZGVmIHRlc3RfWmlwRGVsZXRlKHNlbGYpOgorICAgIHppcF9maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSwgc3VmZml4PScuemlwJykKKyAgICBvdXRwdXRfemlwID0gemlwZmlsZS5aaXBGaWxlKHppcF9maWxlLm5hbWUsICd3JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uPXppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgZW50cnlfZmlsZToKKyAgICAgIGVudHJ5X2ZpbGUud3JpdGUob3MudXJhbmRvbSgxMDI0KSkKKyAgICAgIGNvbW1vbi5aaXBXcml0ZShvdXRwdXRfemlwLCBlbnRyeV9maWxlLm5hbWUsIGFyY25hbWU9J1Rlc3QxJykKKyAgICAgIGNvbW1vbi5aaXBXcml0ZShvdXRwdXRfemlwLCBlbnRyeV9maWxlLm5hbWUsIGFyY25hbWU9J1Rlc3QyJykKKyAgICAgIGNvbW1vbi5aaXBXcml0ZShvdXRwdXRfemlwLCBlbnRyeV9maWxlLm5hbWUsIGFyY25hbWU9J1Rlc3QzJykKKyAgICAgIGNvbW1vbi5aaXBDbG9zZShvdXRwdXRfemlwKQorICAgIHppcF9maWxlLmNsb3NlKCkKIAotICBJdHMgZm9ybWF0IHNob3VsZCBtYXRjaCBiZXR3ZWVuIGNvbW1vbi5weSBhbmQgdmFsaWRhdGVfdGFyZ2V0X2ZpbGVzLnB5LiIiIgorICAgIHRyeToKKyAgICAgIGNvbW1vbi5aaXBEZWxldGUoemlwX2ZpbGUubmFtZSwgJ1Rlc3QyJykKKyAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHppcF9maWxlLm5hbWUsICdyJykgYXMgY2hlY2tfemlwOgorICAgICAgICBlbnRyaWVzID0gY2hlY2tfemlwLm5hbWVsaXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdUZXN0MScgaW4gZW50cmllcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnVGVzdDInIGluIGVudHJpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVGVzdDMnIGluIGVudHJpZXMpCisKKyAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBjb21tb24uWmlwRGVsZXRlLCB6aXBfZmlsZS5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QyJykKKyAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHppcF9maWxlLm5hbWUsICdyJykgYXMgY2hlY2tfemlwOgorICAgICAgICBlbnRyaWVzID0gY2hlY2tfemlwLm5hbWVsaXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdUZXN0MScgaW4gZW50cmllcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnVGVzdDInIGluIGVudHJpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVGVzdDMnIGluIGVudHJpZXMpCisKKyAgICAgIGNvbW1vbi5aaXBEZWxldGUoemlwX2ZpbGUubmFtZSwgWydUZXN0MyddKQorICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGUubmFtZSwgJ3InKSBhcyBjaGVja196aXA6CisgICAgICAgIGVudHJpZXMgPSBjaGVja196aXAubmFtZWxpc3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1Rlc3QxJyBpbiBlbnRyaWVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdUZXN0MicgaW4gZW50cmllcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnVGVzdDMnIGluIGVudHJpZXMpCisKKyAgICAgIGNvbW1vbi5aaXBEZWxldGUoemlwX2ZpbGUubmFtZSwgWydUZXN0MScsICdUZXN0MiddKQorICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGUubmFtZSwgJ3InKSBhcyBjaGVja196aXA6CisgICAgICAgIGVudHJpZXMgPSBjaGVja196aXAubmFtZWxpc3QoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdUZXN0MScgaW4gZW50cmllcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnVGVzdDInIGluIGVudHJpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1Rlc3QzJyBpbiBlbnRyaWVzKQorICAgIGZpbmFsbHk6CisgICAgICBvcy5yZW1vdmUoemlwX2ZpbGUubmFtZSkKKworCitjbGFzcyBDb21tb25BcGtVdGlsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0cyB0aGUgQVBLIHV0aWxzIHJlbGF0ZWQgZnVuY3Rpb25zLiIiIgorCisgIEFQS0NFUlRTX1RYVDEgPSAoCisgICAgICAnbmFtZT0iUmVjb3ZlcnlMb2NhbGl6ZXIuYXBrIiBjZXJ0aWZpY2F0ZT0iY2VydHMvZGV2a2V5Lng1MDkucGVtIicKKyAgICAgICcgcHJpdmF0ZV9rZXk9ImNlcnRzL2RldmtleS5wazgiXG4nCisgICAgICAnbmFtZT0iU2V0dGluZ3MuYXBrIicKKyAgICAgICcgY2VydGlmaWNhdGU9ImJ1aWxkL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L3BsYXRmb3JtLng1MDkucGVtIicKKyAgICAgICcgcHJpdmF0ZV9rZXk9ImJ1aWxkL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L3BsYXRmb3JtLnBrOCJcbicKKyAgICAgICduYW1lPSJUVi5hcGsiIGNlcnRpZmljYXRlPSJQUkVTSUdORUQiIHByaXZhdGVfa2V5PSIiXG4nCisgICkKKworICBBUEtDRVJUU19DRVJUTUFQMSA9IHsKKyAgICAgICdSZWNvdmVyeUxvY2FsaXplci5hcGsnIDogJ2NlcnRzL2RldmtleScsCisgICAgICAnU2V0dGluZ3MuYXBrJyA6ICdidWlsZC90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9wbGF0Zm9ybScsCisgICAgICAnVFYuYXBrJyA6ICdQUkVTSUdORUQnLAorICB9CisKKyAgQVBLQ0VSVFNfVFhUMiA9ICgKKyAgICAgICduYW1lPSJDb21wcmVzc2VkMS5hcGsiIGNlcnRpZmljYXRlPSJjZXJ0cy9jb21wcmVzc2VkMS54NTA5LnBlbSInCisgICAgICAnIHByaXZhdGVfa2V5PSJjZXJ0cy9jb21wcmVzc2VkMS5wazgiIGNvbXByZXNzZWQ9Imd6IlxuJworICAgICAgJ25hbWU9IkNvbXByZXNzZWQyYS5hcGsiIGNlcnRpZmljYXRlPSJjZXJ0cy9jb21wcmVzc2VkMi54NTA5LnBlbSInCisgICAgICAnIHByaXZhdGVfa2V5PSJjZXJ0cy9jb21wcmVzc2VkMi5wazgiIGNvbXByZXNzZWQ9Imd6IlxuJworICAgICAgJ25hbWU9IkNvbXByZXNzZWQyYi5hcGsiIGNlcnRpZmljYXRlPSJjZXJ0cy9jb21wcmVzc2VkMi54NTA5LnBlbSInCisgICAgICAnIHByaXZhdGVfa2V5PSJjZXJ0cy9jb21wcmVzc2VkMi5wazgiIGNvbXByZXNzZWQ9Imd6IlxuJworICAgICAgJ25hbWU9IkNvbXByZXNzZWQzLmFwayIgY2VydGlmaWNhdGU9ImNlcnRzL2NvbXByZXNzZWQzLng1MDkucGVtIicKKyAgICAgICcgcHJpdmF0ZV9rZXk9ImNlcnRzL2NvbXByZXNzZWQzLnBrOCIgY29tcHJlc3NlZD0iZ3oiXG4nCisgICkKKworICBBUEtDRVJUU19DRVJUTUFQMiA9IHsKKyAgICAgICdDb21wcmVzc2VkMS5hcGsnIDogJ2NlcnRzL2NvbXByZXNzZWQxJywKKyAgICAgICdDb21wcmVzc2VkMmEuYXBrJyA6ICdjZXJ0cy9jb21wcmVzc2VkMicsCisgICAgICAnQ29tcHJlc3NlZDJiLmFwaycgOiAnY2VydHMvY29tcHJlc3NlZDInLAorICAgICAgJ0NvbXByZXNzZWQzLmFwaycgOiAnY2VydHMvY29tcHJlc3NlZDMnLAorICB9CisKKyAgQVBLQ0VSVFNfVFhUMyA9ICgKKyAgICAgICduYW1lPSJDb21wcmVzc2VkNC5hcGsiIGNlcnRpZmljYXRlPSJjZXJ0cy9jb21wcmVzc2VkNC54NTA5LnBlbSInCisgICAgICAnIHByaXZhdGVfa2V5PSJjZXJ0cy9jb21wcmVzc2VkNC5wazgiIGNvbXByZXNzZWQ9Inh6IlxuJworICApCisKKyAgQVBLQ0VSVFNfQ0VSVE1BUDMgPSB7CisgICAgICAnQ29tcHJlc3NlZDQuYXBrJyA6ICdjZXJ0cy9jb21wcmVzc2VkNCcsCisgIH0KIAogICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5fdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgIHNlbGYudGVzdGRhdGFfZGlyID0gdGVzdF91dGlscy5nZXRfdGVzdGRhdGFfZGlyKCkKKworICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgY29tbW9uLkNsZWFudXAoKQorCisgIEBzdGF0aWNtZXRob2QKKyAgZGVmIF93cml0ZV9hcGtjZXJ0c190eHQoYXBrY2VydHNfdHh0LCBhZGRpdGlvbmFsPU5vbmUpOgorICAgIGlmIGFkZGl0aW9uYWwgaXMgTm9uZToKKyAgICAgIGFkZGl0aW9uYWwgPSBbXQorICAgIHRhcmdldF9maWxlcyA9IGNvbW1vbi5NYWtlVGVtcEZpbGUoc3VmZml4PScuemlwJykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZXMsICd3JykgYXMgdGFyZ2V0X2ZpbGVzX3ppcDoKKyAgICAgIHRhcmdldF9maWxlc196aXAud3JpdGVzdHIoJ01FVEEvYXBrY2VydHMudHh0JywgYXBrY2VydHNfdHh0KQorICAgICAgZm9yIGVudHJ5IGluIGFkZGl0aW9uYWw6CisgICAgICAgIHRhcmdldF9maWxlc196aXAud3JpdGVzdHIoZW50cnksICcnKQorICAgIHJldHVybiB0YXJnZXRfZmlsZXMKKworICBkZWYgdGVzdF9SZWFkQXBrQ2VydHNfTm9uY29tcHJlc3NlZEFwa3Moc2VsZik6CisgICAgdGFyZ2V0X2ZpbGVzID0gc2VsZi5fd3JpdGVfYXBrY2VydHNfdHh0KHNlbGYuQVBLQ0VSVFNfVFhUMSkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZXMsICdyJykgYXMgaW5wdXRfemlwOgorICAgICAgY2VydG1hcCwgZXh0ID0gY29tbW9uLlJlYWRBcGtDZXJ0cyhpbnB1dF96aXApCisKKyAgICBzZWxmLmFzc2VydERpY3RFcXVhbChzZWxmLkFQS0NFUlRTX0NFUlRNQVAxLCBjZXJ0bWFwKQorICAgIHNlbGYuYXNzZXJ0SXNOb25lKGV4dCkKKworICBkZWYgdGVzdF9SZWFkQXBrQ2VydHNfQ29tcHJlc3NlZEFwa3Moc2VsZik6CisgICAgIyBXZSBoYXZlICJpbnN0YWxsZWQiIENvbXByZXNzZWQxLmFway5neiBvbmx5LiBOb3RlIHRoYXQgQ29tcHJlc3NlZDMuYXBrIGlzCisgICAgIyBub3Qgc3RvcmVkIGluICcuZ3onIGZvcm1hdCwgc28gaXQgc2hvdWxkbid0IGJlIGNvbnNpZGVyZWQgYXMgaW5zdGFsbGVkLgorICAgIHRhcmdldF9maWxlcyA9IHNlbGYuX3dyaXRlX2Fwa2NlcnRzX3R4dCgKKyAgICAgICAgc2VsZi5BUEtDRVJUU19UWFQyLAorICAgICAgICBbJ0NvbXByZXNzZWQxLmFway5neicsICdDb21wcmVzc2VkMy5hcGsnXSkKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHRhcmdldF9maWxlcywgJ3InKSBhcyBpbnB1dF96aXA6CisgICAgICBjZXJ0bWFwLCBleHQgPSBjb21tb24uUmVhZEFwa0NlcnRzKGlucHV0X3ppcCkKKworICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHNlbGYuQVBLQ0VSVFNfQ0VSVE1BUDIsIGNlcnRtYXApCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnLmd6JywgZXh0KQorCisgICAgIyBBbHRlcm5hdGl2ZSBjYXNlIHdpdGggJy54eicuCisgICAgdGFyZ2V0X2ZpbGVzID0gc2VsZi5fd3JpdGVfYXBrY2VydHNfdHh0KAorICAgICAgICBzZWxmLkFQS0NFUlRTX1RYVDMsIFsnQ29tcHJlc3NlZDQuYXBrLnh6J10pCisKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZXMsICdyJykgYXMgaW5wdXRfemlwOgorICAgICAgY2VydG1hcCwgZXh0ID0gY29tbW9uLlJlYWRBcGtDZXJ0cyhpbnB1dF96aXApCisKKyAgICBzZWxmLmFzc2VydERpY3RFcXVhbChzZWxmLkFQS0NFUlRTX0NFUlRNQVAzLCBjZXJ0bWFwKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy54eicsIGV4dCkKKworICBkZWYgdGVzdF9SZWFkQXBrQ2VydHNfQ29tcHJlc3NlZEFuZE5vbmNvbXByZXNzZWRBcGtzKHNlbGYpOgorICAgIHRhcmdldF9maWxlcyA9IHNlbGYuX3dyaXRlX2Fwa2NlcnRzX3R4dCgKKyAgICAgICAgc2VsZi5BUEtDRVJUU19UWFQxICsgc2VsZi5BUEtDRVJUU19UWFQyLAorICAgICAgICBbJ0NvbXByZXNzZWQxLmFway5neicsICdDb21wcmVzc2VkMy5hcGsnXSkKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHRhcmdldF9maWxlcywgJ3InKSBhcyBpbnB1dF96aXA6CisgICAgICBjZXJ0bWFwLCBleHQgPSBjb21tb24uUmVhZEFwa0NlcnRzKGlucHV0X3ppcCkKKworICAgIGNlcnRtYXBfbWVyZ2VkID0gc2VsZi5BUEtDRVJUU19DRVJUTUFQMS5jb3B5KCkKKyAgICBjZXJ0bWFwX21lcmdlZC51cGRhdGUoc2VsZi5BUEtDRVJUU19DRVJUTUFQMikKKyAgICBzZWxmLmFzc2VydERpY3RFcXVhbChjZXJ0bWFwX21lcmdlZCwgY2VydG1hcCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCcuZ3onLCBleHQpCisKKyAgZGVmIHRlc3RfUmVhZEFwa0NlcnRzX011bHRpcGxlQ29tcHJlc3Npb25NZXRob2RzKHNlbGYpOgorICAgIHRhcmdldF9maWxlcyA9IHNlbGYuX3dyaXRlX2Fwa2NlcnRzX3R4dCgKKyAgICAgICAgc2VsZi5BUEtDRVJUU19UWFQyICsgc2VsZi5BUEtDRVJUU19UWFQzLAorICAgICAgICBbJ0NvbXByZXNzZWQxLmFway5neicsICdDb21wcmVzc2VkNC5hcGsueHonXSkKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHRhcmdldF9maWxlcywgJ3InKSBhcyBpbnB1dF96aXA6CisgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21tb24uUmVhZEFwa0NlcnRzLCBpbnB1dF96aXApCisKKyAgZGVmIHRlc3RfUmVhZEFwa0NlcnRzX01pc21hdGNoaW5nS2V5cyhzZWxmKToKKyAgICBtYWxmb3JtZWRfYXBrY2VydHNfdHh0ID0gKAorICAgICAgICAnbmFtZT0iQXBwMS5hcGsiIGNlcnRpZmljYXRlPSJjZXJ0cy9jZXJ0MS54NTA5LnBlbSInCisgICAgICAgICcgcHJpdmF0ZV9rZXk9ImNlcnRzL2NlcnQyLnBrOCJcbicKKyAgICApCisgICAgdGFyZ2V0X2ZpbGVzID0gc2VsZi5fd3JpdGVfYXBrY2VydHNfdHh0KG1hbGZvcm1lZF9hcGtjZXJ0c190eHQpCisKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZXMsICdyJykgYXMgaW5wdXRfemlwOgorICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tbW9uLlJlYWRBcGtDZXJ0cywgaW5wdXRfemlwKQorCisgIGRlZiB0ZXN0X0V4dHJhY3RQdWJsaWNLZXkoc2VsZik6CisgICAgY2VydCA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Rlc3RrZXkueDUwOS5wZW0nKQorICAgIHB1YmtleSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Rlc3RrZXkucHVia2V5LnBlbScpCisgICAgd2l0aCBvcGVuKHB1YmtleSwgJ3JiJykgYXMgcHVia2V5X2ZwOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChwdWJrZXlfZnAucmVhZCgpLCBjb21tb24uRXh0cmFjdFB1YmxpY0tleShjZXJ0KSkKKworICBkZWYgdGVzdF9FeHRyYWN0UHVibGljS2V5X2ludmFsaWRJbnB1dChzZWxmKToKKyAgICB3cm9uZ19pbnB1dCA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Rlc3RrZXkucGs4JykKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgY29tbW9uLkV4dHJhY3RQdWJsaWNLZXksIHdyb25nX2lucHV0KQorCisgIGRlZiB0ZXN0X1BhcnNlQ2VydGlmaWNhdGUoc2VsZik6CisgICAgY2VydCA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Rlc3RrZXkueDUwOS5wZW0nKQorCisgICAgY21kID0gWydvcGVuc3NsJywgJ3g1MDknLCAnLWluJywgY2VydCwgJy1vdXRmb3JtJywgJ0RFUiddCisgICAgcHJvYyA9IGNvbW1vbi5SdW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIGV4cGVjdGVkLCBfID0gcHJvYy5jb21tdW5pY2F0ZSgpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9jLnJldHVybmNvZGUpCisKKyAgICB3aXRoIG9wZW4oY2VydCkgYXMgY2VydF9mcDoKKyAgICAgIGFjdHVhbCA9IGNvbW1vbi5QYXJzZUNlcnRpZmljYXRlKGNlcnRfZnAucmVhZCgpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworCitjbGFzcyBDb21tb25VdGlsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICBjb21tb24uQ2xlYW51cCgpCisKKyAgZGVmIHRlc3RfR2V0U3BhcnNlSW1hZ2VfZW1wdHlCbG9ja01hcEZpbGUoc2VsZik6CisgICAgdGFyZ2V0X2ZpbGVzID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9J3RhcmdldF9maWxlcy0nLCBzdWZmaXg9Jy56aXAnKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHRhcmdldF9maWxlcywgJ3cnKSBhcyB0YXJnZXRfZmlsZXNfemlwOgorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZSgKKyAgICAgICAgICB0ZXN0X3V0aWxzLmNvbnN0cnVjdF9zcGFyc2VfaW1hZ2UoWworICAgICAgICAgICAgICAoMHhDQUMxLCA2KSwKKyAgICAgICAgICAgICAgKDB4Q0FDMywgMyksCisgICAgICAgICAgICAgICgweENBQzEsIDQpXSksCisgICAgICAgICAgYXJjbmFtZT0nSU1BR0VTL3N5c3RlbS5pbWcnKQorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cignSU1BR0VTL3N5c3RlbS5tYXAnLCAnJykKKyAgICAgIHRhcmdldF9maWxlc196aXAud3JpdGVzdHIoJ1NZU1RFTS9maWxlMScsIG9zLnVyYW5kb20oNDA5NiAqIDgpKQorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cignU1lTVEVNL2ZpbGUyJywgb3MudXJhbmRvbSg0MDk2ICogMykpCisKKyAgICB0ZW1wZGlyID0gY29tbW9uLlVuemlwVGVtcCh0YXJnZXRfZmlsZXMpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUodGFyZ2V0X2ZpbGVzLCAncicpIGFzIGlucHV0X3ppcDoKKyAgICAgIHNwYXJzZV9pbWFnZSA9IGNvbW1vbi5HZXRTcGFyc2VJbWFnZSgnc3lzdGVtJywgdGVtcGRpciwgaW5wdXRfemlwLCBGYWxzZSkKKworICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKAorICAgICAgICB7CisgICAgICAgICAgICAnX19DT1BZJzogUmFuZ2VTZXQoIjAiKSwKKyAgICAgICAgICAgICdfX05PTlpFUk8tMCc6IFJhbmdlU2V0KCIxLTUgOS0xMiIpLAorICAgICAgICB9LAorICAgICAgICBzcGFyc2VfaW1hZ2UuZmlsZV9tYXApCisKKyAgZGVmIHRlc3RfR2V0U3BhcnNlSW1hZ2VfaW52YWxpZEltYWdlTmFtZShzZWxmKToKKyAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGNvbW1vbi5HZXRTcGFyc2VJbWFnZSwgJ3N5c3RlbTInLCBOb25lLCBOb25lLCBGYWxzZSkKKyAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGNvbW1vbi5HZXRTcGFyc2VJbWFnZSwgJ3Vua25vd24nLCBOb25lLCBOb25lLCBGYWxzZSkKKworICBkZWYgdGVzdF9HZXRTcGFyc2VJbWFnZV9taXNzaW5nQmxvY2tNYXBGaWxlKHNlbGYpOgorICAgIHRhcmdldF9maWxlcyA9IGNvbW1vbi5NYWtlVGVtcEZpbGUocHJlZml4PSd0YXJnZXRfZmlsZXMtJywgc3VmZml4PScuemlwJykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZXMsICd3JykgYXMgdGFyZ2V0X2ZpbGVzX3ppcDoKKyAgICAgIHRhcmdldF9maWxlc196aXAud3JpdGUoCisgICAgICAgICAgdGVzdF91dGlscy5jb25zdHJ1Y3Rfc3BhcnNlX2ltYWdlKFsKKyAgICAgICAgICAgICAgKDB4Q0FDMSwgNiksCisgICAgICAgICAgICAgICgweENBQzMsIDMpLAorICAgICAgICAgICAgICAoMHhDQUMxLCA0KV0pLAorICAgICAgICAgIGFyY25hbWU9J0lNQUdFUy9zeXN0ZW0uaW1nJykKKyAgICAgIHRhcmdldF9maWxlc196aXAud3JpdGVzdHIoJ1NZU1RFTS9maWxlMScsIG9zLnVyYW5kb20oNDA5NiAqIDgpKQorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cignU1lTVEVNL2ZpbGUyJywgb3MudXJhbmRvbSg0MDk2ICogMykpCisKKyAgICB0ZW1wZGlyID0gY29tbW9uLlVuemlwVGVtcCh0YXJnZXRfZmlsZXMpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUodGFyZ2V0X2ZpbGVzLCAncicpIGFzIGlucHV0X3ppcDoKKyAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBjb21tb24uR2V0U3BhcnNlSW1hZ2UsICdzeXN0ZW0nLCB0ZW1wZGlyLCBpbnB1dF96aXAsCisgICAgICAgICAgRmFsc2UpCisKKyAgZGVmIHRlc3RfR2V0U3BhcnNlSW1hZ2Vfc2hhcmVkQmxvY2tzX25vdEFsbG93ZWQoc2VsZik6CisgICAgIiIiVGVzdHMgdGhlIGNhc2Ugb2YgaGF2aW5nIG92ZXJsYXBwaW5nIGJsb2NrcyBidXQgZGlzYWxsb3dlZC4iIiIKKyAgICB0YXJnZXRfZmlsZXMgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ndGFyZ2V0X2ZpbGVzLScsIHN1ZmZpeD0nLnppcCcpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUodGFyZ2V0X2ZpbGVzLCAndycpIGFzIHRhcmdldF9maWxlc196aXA6CisgICAgICB0YXJnZXRfZmlsZXNfemlwLndyaXRlKAorICAgICAgICAgIHRlc3RfdXRpbHMuY29uc3RydWN0X3NwYXJzZV9pbWFnZShbKDB4Q0FDMiwgMTYpXSksCisgICAgICAgICAgYXJjbmFtZT0nSU1BR0VTL3N5c3RlbS5pbWcnKQorICAgICAgIyBCbG9jayAxMCBpcyBzaGFyZWQgYmV0d2VlbiB0d28gZmlsZXMuCisgICAgICB0YXJnZXRfZmlsZXNfemlwLndyaXRlc3RyKAorICAgICAgICAgICdJTUFHRVMvc3lzdGVtLm1hcCcsCisgICAgICAgICAgJ1xuJy5qb2luKFsKKyAgICAgICAgICAgICAgJy9zeXN0ZW0vZmlsZTEgMS01IDktMTAnLAorICAgICAgICAgICAgICAnL3N5c3RlbS9maWxlMiAxMC0xMiddKSkKKyAgICAgIHRhcmdldF9maWxlc196aXAud3JpdGVzdHIoJ1NZU1RFTS9maWxlMScsIG9zLnVyYW5kb20oNDA5NiAqIDcpKQorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cignU1lTVEVNL2ZpbGUyJywgb3MudXJhbmRvbSg0MDk2ICogMykpCisKKyAgICB0ZW1wZGlyID0gY29tbW9uLlVuemlwVGVtcCh0YXJnZXRfZmlsZXMpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUodGFyZ2V0X2ZpbGVzLCAncicpIGFzIGlucHV0X3ppcDoKKyAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBjb21tb24uR2V0U3BhcnNlSW1hZ2UsICdzeXN0ZW0nLCB0ZW1wZGlyLCBpbnB1dF96aXAsCisgICAgICAgICAgRmFsc2UpCisKKyAgZGVmIHRlc3RfR2V0U3BhcnNlSW1hZ2Vfc2hhcmVkQmxvY2tzX2FsbG93ZWQoc2VsZik6CisgICAgIiIiVGVzdHMgdGhlIGNhc2UgZm9yIHRhcmdldCB1c2luZyBCT0FSRF9FWFQ0X1NIQVJFX0RVUF9CTE9DS1MgOj0gdHJ1ZS4iIiIKKyAgICB0YXJnZXRfZmlsZXMgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ndGFyZ2V0X2ZpbGVzLScsIHN1ZmZpeD0nLnppcCcpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUodGFyZ2V0X2ZpbGVzLCAndycpIGFzIHRhcmdldF9maWxlc196aXA6CisgICAgICAjIENvbnN0cnVjdCBhbiBpbWFnZSB3aXRoIGEgY2FyZV9tYXAgb2YgIjAtNSA5LTEyIi4KKyAgICAgIHRhcmdldF9maWxlc196aXAud3JpdGUoCisgICAgICAgICAgdGVzdF91dGlscy5jb25zdHJ1Y3Rfc3BhcnNlX2ltYWdlKFsoMHhDQUMyLCAxNildKSwKKyAgICAgICAgICBhcmNuYW1lPSdJTUFHRVMvc3lzdGVtLmltZycpCisgICAgICAjIEJsb2NrIDEwIGlzIHNoYXJlZCBiZXR3ZWVuIHR3byBmaWxlcy4KKyAgICAgIHRhcmdldF9maWxlc196aXAud3JpdGVzdHIoCisgICAgICAgICAgJ0lNQUdFUy9zeXN0ZW0ubWFwJywKKyAgICAgICAgICAnXG4nLmpvaW4oWworICAgICAgICAgICAgICAnL3N5c3RlbS9maWxlMSAxLTUgOS0xMCcsCisgICAgICAgICAgICAgICcvc3lzdGVtL2ZpbGUyIDEwLTEyJ10pKQorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cignU1lTVEVNL2ZpbGUxJywgb3MudXJhbmRvbSg0MDk2ICogNykpCisgICAgICB0YXJnZXRfZmlsZXNfemlwLndyaXRlc3RyKCdTWVNURU0vZmlsZTInLCBvcy51cmFuZG9tKDQwOTYgKiAzKSkKKworICAgIHRlbXBkaXIgPSBjb21tb24uVW56aXBUZW1wKHRhcmdldF9maWxlcykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZXMsICdyJykgYXMgaW5wdXRfemlwOgorICAgICAgc3BhcnNlX2ltYWdlID0gY29tbW9uLkdldFNwYXJzZUltYWdlKCdzeXN0ZW0nLCB0ZW1wZGlyLCBpbnB1dF96aXAsIFRydWUpCisKKyAgICBzZWxmLmFzc2VydERpY3RFcXVhbCgKKyAgICAgICAgeworICAgICAgICAgICAgJ19fQ09QWSc6IFJhbmdlU2V0KCIwIiksCisgICAgICAgICAgICAnX19OT05aRVJPLTAnOiBSYW5nZVNldCgiNi04IDEzLTE1IiksCisgICAgICAgICAgICAnL3N5c3RlbS9maWxlMSc6IFJhbmdlU2V0KCIxLTUgOS0xMCIpLAorICAgICAgICAgICAgJy9zeXN0ZW0vZmlsZTInOiBSYW5nZVNldCgiMTEtMTIiKSwKKyAgICAgICAgfSwKKyAgICAgICAgc3BhcnNlX2ltYWdlLmZpbGVfbWFwKQorCisgICAgIyAnL3N5c3RlbS9maWxlMicgc2hvdWxkIGJlIG1hcmtlZCB3aXRoICd1c2VzX3NoYXJlZF9ibG9ja3MnLCBidXQgbm90IHdpdGgKKyAgICAjICdpbmNvbXBsZXRlJy4KKyAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgIHNwYXJzZV9pbWFnZS5maWxlX21hcFsnL3N5c3RlbS9maWxlMiddLmV4dHJhWyd1c2VzX3NoYXJlZF9ibG9ja3MnXSkKKyAgICBzZWxmLmFzc2VydE5vdEluKAorICAgICAgICAnaW5jb21wbGV0ZScsIHNwYXJzZV9pbWFnZS5maWxlX21hcFsnL3N5c3RlbS9maWxlMiddLmV4dHJhKQorCisgICAgIyBBbGwgb3RoZXIgZW50cmllcyBzaG91bGQgbG9vayBub3JtYWwgd2l0aG91dCBhbnkgdGFncy4KKyAgICBzZWxmLmFzc2VydEZhbHNlKHNwYXJzZV9pbWFnZS5maWxlX21hcFsnX19DT1BZJ10uZXh0cmEpCisgICAgc2VsZi5hc3NlcnRGYWxzZShzcGFyc2VfaW1hZ2UuZmlsZV9tYXBbJ19fTk9OWkVSTy0wJ10uZXh0cmEpCisgICAgc2VsZi5hc3NlcnRGYWxzZShzcGFyc2VfaW1hZ2UuZmlsZV9tYXBbJy9zeXN0ZW0vZmlsZTEnXS5leHRyYSkKKworICBkZWYgdGVzdF9HZXRTcGFyc2VJbWFnZV9pbmNvbXBsZXRlUmFuZ2VzKHNlbGYpOgorICAgICIiIlRlc3RzIHRoZSBjYXNlIG9mIGV4dDQgaW1hZ2VzIHdpdGggaG9sZXMuIiIiCisgICAgdGFyZ2V0X2ZpbGVzID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9J3RhcmdldF9maWxlcy0nLCBzdWZmaXg9Jy56aXAnKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHRhcmdldF9maWxlcywgJ3cnKSBhcyB0YXJnZXRfZmlsZXNfemlwOgorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZSgKKyAgICAgICAgICB0ZXN0X3V0aWxzLmNvbnN0cnVjdF9zcGFyc2VfaW1hZ2UoWygweENBQzIsIDE2KV0pLAorICAgICAgICAgIGFyY25hbWU9J0lNQUdFUy9zeXN0ZW0uaW1nJykKKyAgICAgIHRhcmdldF9maWxlc196aXAud3JpdGVzdHIoCisgICAgICAgICAgJ0lNQUdFUy9zeXN0ZW0ubWFwJywKKyAgICAgICAgICAnXG4nLmpvaW4oWworICAgICAgICAgICAgICAnL3N5c3RlbS9maWxlMSAxLTUgOS0xMCcsCisgICAgICAgICAgICAgICcvc3lzdGVtL2ZpbGUyIDExLTEyJ10pKQorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cignU1lTVEVNL2ZpbGUxJywgb3MudXJhbmRvbSg0MDk2ICogNykpCisgICAgICAjICcvc3lzdGVtL2ZpbGUyJyBoYXMgbGVzcyBibG9ja3MgbGlzdGVkICgyKSB0aGFuIGFjdHVhbCAoMykuCisgICAgICB0YXJnZXRfZmlsZXNfemlwLndyaXRlc3RyKCdTWVNURU0vZmlsZTInLCBvcy51cmFuZG9tKDQwOTYgKiAzKSkKKworICAgIHRlbXBkaXIgPSBjb21tb24uVW56aXBUZW1wKHRhcmdldF9maWxlcykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZXMsICdyJykgYXMgaW5wdXRfemlwOgorICAgICAgc3BhcnNlX2ltYWdlID0gY29tbW9uLkdldFNwYXJzZUltYWdlKCdzeXN0ZW0nLCB0ZW1wZGlyLCBpbnB1dF96aXAsIEZhbHNlKQorCisgICAgc2VsZi5hc3NlcnRGYWxzZShzcGFyc2VfaW1hZ2UuZmlsZV9tYXBbJy9zeXN0ZW0vZmlsZTEnXS5leHRyYSkKKyAgICBzZWxmLmFzc2VydFRydWUoc3BhcnNlX2ltYWdlLmZpbGVfbWFwWycvc3lzdGVtL2ZpbGUyJ10uZXh0cmFbJ2luY29tcGxldGUnXSkKKworCitjbGFzcyBJbnN0YWxsUmVjb3ZlcnlTY3JpcHRGb3JtYXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiQ2hlY2tzIHRoZSBmb3JtYXQgb2YgaW5zdGFsbC1yZWNvdmVyeS5zaC4KKworICBJdHMgZm9ybWF0IHNob3VsZCBtYXRjaCBiZXR3ZWVuIGNvbW1vbi5weSBhbmQgdmFsaWRhdGVfdGFyZ2V0X2ZpbGVzLnB5LgorICAiIiIKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgc2VsZi5fdGVtcGRpciA9IGNvbW1vbi5NYWtlVGVtcERpcigpCiAgICAgIyBDcmVhdGUgYSBkdW1teSBkaWN0IHRoYXQgY29udGFpbnMgdGhlIGZzdGFiIGluZm8gZm9yIGJvb3QmcmVjb3ZlcnkuCiAgICAgc2VsZi5faW5mbyA9IHsiZnN0YWIiIDoge319Ci0gICAgZHVtbXlfZnN0YWIgPSBcCi0gICAgICAgIFsiL2Rldi9zb2MuMC9ieS1uYW1lL2Jvb3QgL2Jvb3QgZW1tYyBkZWZhdWx0cyBkZWZhdWx0cyIsCi0gICAgICAgICAiL2Rldi9zb2MuMC9ieS1uYW1lL3JlY292ZXJ5IC9yZWNvdmVyeSBlbW1jIGRlZmF1bHRzIGRlZmF1bHRzIl0KKyAgICBkdW1teV9mc3RhYiA9IFsKKyAgICAgICAgIi9kZXYvc29jLjAvYnktbmFtZS9ib290IC9ib290IGVtbWMgZGVmYXVsdHMgZGVmYXVsdHMiLAorICAgICAgICAiL2Rldi9zb2MuMC9ieS1uYW1lL3JlY292ZXJ5IC9yZWNvdmVyeSBlbW1jIGRlZmF1bHRzIGRlZmF1bHRzIl0KICAgICBzZWxmLl9pbmZvWyJmc3RhYiJdID0gY29tbW9uLkxvYWRSZWNvdmVyeUZTVGFiKCJcbiIuam9pbiwgMiwgZHVtbXlfZnN0YWIpCiAgICAgIyBDb25zdHJ1Y3QgdGhlIGd6aXBwZWQgcmVjb3ZlcnkuaW1nIGFuZCBib290LmltZwogICAgIHNlbGYucmVjb3ZlcnlfZGF0YSA9IGJ5dGVhcnJheShbCkBAIC0zNjksNCArNzA3LDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5mbykKIAogICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgc2h1dGlsLnJtdHJlZShzZWxmLl90ZW1wZGlyKQorICAgIGNvbW1vbi5DbGVhbnVwKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X290YV9mcm9tX3RhcmdldF9maWxlcy5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X290YV9mcm9tX3RhcmdldF9maWxlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzY4N2U3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3Rfb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5CkBAIC0wLDAgKzEsMTI4NCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworaW1wb3J0IGNvcHkKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB6aXBmaWxlCisKK2ltcG9ydCBjb21tb24KK2ltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIG90YV9mcm9tX3RhcmdldF9maWxlcyBpbXBvcnQgKAorICAgIF9Mb2FkT2VtRGljdHMsIEFiT3RhUHJvcGVydHlGaWxlcywgQnVpbGRJbmZvLCBHZXRQYWNrYWdlTWV0YWRhdGEsCisgICAgR2V0VGFyZ2V0RmlsZXNaaXBGb3JTZWNvbmRhcnlJbWFnZXMsCisgICAgR2V0VGFyZ2V0RmlsZXNaaXBXaXRob3V0UG9zdGluc3RhbGxDb25maWcsIE5vbkFiT3RhUHJvcGVydHlGaWxlcywKKyAgICBQYXlsb2FkLCBQYXlsb2FkU2lnbmVyLCBQT1NUSU5TVEFMTF9DT05GSUcsIFByb3BlcnR5RmlsZXMsCisgICAgU3RyZWFtaW5nUHJvcGVydHlGaWxlcywgV3JpdGVGaW5nZXJwcmludEFzc2VydGlvbikKKworCitkZWYgY29uc3RydWN0X3RhcmdldF9maWxlcyhzZWNvbmRhcnk9RmFsc2UpOgorICAiIiJSZXR1cm5zIGEgdGFyZ2V0LWZpbGVzLnppcCBmaWxlIGZvciBnZW5lcmF0aW5nIE9UQSBwYWNrYWdlcy4iIiIKKyAgdGFyZ2V0X2ZpbGVzID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9J3RhcmdldF9maWxlcy0nLCBzdWZmaXg9Jy56aXAnKQorICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZXMsICd3JykgYXMgdGFyZ2V0X2ZpbGVzX3ppcDoKKyAgICAjIE1FVEEvdXBkYXRlX2VuZ2luZV9jb25maWcudHh0CisgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cigKKyAgICAgICAgJ01FVEEvdXBkYXRlX2VuZ2luZV9jb25maWcudHh0JywKKyAgICAgICAgIlBBWUxPQURfTUFKT1JfVkVSU0lPTj0yXG5QQVlMT0FEX01JTk9SX1ZFUlNJT049NFxuIikKKworICAgICMgTUVUQS9wb3N0aW5zdGFsbF9jb25maWcudHh0CisgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cigKKyAgICAgICAgUE9TVElOU1RBTExfQ09ORklHLAorICAgICAgICAnXG4nLmpvaW4oWworICAgICAgICAgICAgIlJVTl9QT1NUSU5TVEFMTF9zeXN0ZW09dHJ1ZSIsCisgICAgICAgICAgICAiUE9TVElOU1RBTExfUEFUSF9zeXN0ZW09c3lzdGVtL2Jpbi9vdGFwcmVvcHRfc2NyaXB0IiwKKyAgICAgICAgICAgICJGSUxFU1lTVEVNX1RZUEVfc3lzdGVtPWV4dDQiLAorICAgICAgICAgICAgIlBPU1RJTlNUQUxMX09QVElPTkFMX3N5c3RlbT10cnVlIiwKKyAgICAgICAgXSkpCisKKyAgICAjIE1FVEEvYWJfcGFydGl0aW9ucy50eHQKKyAgICBhYl9wYXJ0aXRpb25zID0gWydib290JywgJ3N5c3RlbScsICd2ZW5kb3InXQorICAgIHRhcmdldF9maWxlc196aXAud3JpdGVzdHIoCisgICAgICAgICdNRVRBL2FiX3BhcnRpdGlvbnMudHh0JywKKyAgICAgICAgJ1xuJy5qb2luKGFiX3BhcnRpdGlvbnMpKQorCisgICAgIyBDcmVhdGUgZHVtbXkgaW1hZ2VzIGZvciBlYWNoIG9mIHRoZW0uCisgICAgZm9yIHBhcnRpdGlvbiBpbiBhYl9wYXJ0aXRpb25zOgorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cignSU1BR0VTLycgKyBwYXJ0aXRpb24gKyAnLmltZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVyYW5kb20obGVuKHBhcnRpdGlvbikpKQorCisgICAgaWYgc2Vjb25kYXJ5OgorICAgICAgdGFyZ2V0X2ZpbGVzX3ppcC53cml0ZXN0cignSU1BR0VTL3N5c3RlbV9vdGhlci5pbWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51cmFuZG9tKGxlbigic3lzdGVtX290aGVyIikpKQorCisgIHJldHVybiB0YXJnZXRfZmlsZXMKKworCitjbGFzcyBNb2NrU2NyaXB0V3JpdGVyKG9iamVjdCk6CisgICIiIkEgY2xhc3MgdGhhdCBtb2NrcyBlZGlmeV9nZW5lcmF0b3IuRWRpZnlHZW5lcmF0b3IuCisKKyAgSXQgc2ltcGx5IHB1c2hlcyB0aGUgaW5jb21pbmcgYXJndW1lbnRzIG9udG8gc2NyaXB0IHN0YWNrLCB3aGljaCBpcyB0byBhc3NlcnQKKyAgdGhlIGNhbGxzIHRvIEVkaWZ5R2VuZXJhdG9yIGZ1bmN0aW9ucy4KKyAgIiIiCisKKyAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHNlbGYuc2NyaXB0ID0gW10KKworICBkZWYgTW91bnQoc2VsZiwgKmFyZ3MpOgorICAgIHNlbGYuc2NyaXB0LmFwcGVuZCgoJ01vdW50JywpICsgYXJncykKKworICBkZWYgQXNzZXJ0RGV2aWNlKHNlbGYsICphcmdzKToKKyAgICBzZWxmLnNjcmlwdC5hcHBlbmQoKCdBc3NlcnREZXZpY2UnLCkgKyBhcmdzKQorCisgIGRlZiBBc3NlcnRPZW1Qcm9wZXJ0eShzZWxmLCAqYXJncyk6CisgICAgc2VsZi5zY3JpcHQuYXBwZW5kKCgnQXNzZXJ0T2VtUHJvcGVydHknLCkgKyBhcmdzKQorCisgIGRlZiBBc3NlcnRGaW5nZXJwcmludE9yVGh1bWJwcmludChzZWxmLCAqYXJncyk6CisgICAgc2VsZi5zY3JpcHQuYXBwZW5kKCgnQXNzZXJ0RmluZ2VycHJpbnRPclRodW1icHJpbnQnLCkgKyBhcmdzKQorCisgIGRlZiBBc3NlcnRTb21lRmluZ2VycHJpbnQoc2VsZiwgKmFyZ3MpOgorICAgIHNlbGYuc2NyaXB0LmFwcGVuZCgoJ0Fzc2VydFNvbWVGaW5nZXJwcmludCcsKSArIGFyZ3MpCisKKyAgZGVmIEFzc2VydFNvbWVUaHVtYnByaW50KHNlbGYsICphcmdzKToKKyAgICBzZWxmLnNjcmlwdC5hcHBlbmQoKCdBc3NlcnRTb21lVGh1bWJwcmludCcsKSArIGFyZ3MpCisKKworY2xhc3MgQnVpbGRJbmZvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgVEVTVF9JTkZPX0RJQ1QgPSB7CisgICAgICAnYnVpbGQucHJvcCcgOiB7CisgICAgICAgICAgJ3JvLnByb2R1Y3QuZGV2aWNlJyA6ICdwcm9kdWN0LWRldmljZScsCisgICAgICAgICAgJ3JvLnByb2R1Y3QubmFtZScgOiAncHJvZHVjdC1uYW1lJywKKyAgICAgICAgICAncm8uYnVpbGQuZmluZ2VycHJpbnQnIDogJ2J1aWxkLWZpbmdlcnByaW50JywKKyAgICAgICAgICAncm8uYnVpbGQuZm9vJyA6ICdidWlsZC1mb28nLAorICAgICAgfSwKKyAgICAgICd2ZW5kb3IuYnVpbGQucHJvcCcgOiB7CisgICAgICAgICAgJ3JvLnZlbmRvci5idWlsZC5maW5nZXJwcmludCcgOiAndmVuZG9yLWJ1aWxkLWZpbmdlcnByaW50JywKKyAgICAgIH0sCisgICAgICAncHJvcGVydHkxJyA6ICd2YWx1ZTEnLAorICAgICAgJ3Byb3BlcnR5MicgOiA0MDk2LAorICB9CisKKyAgVEVTVF9JTkZPX0RJQ1RfVVNFU19PRU1fUFJPUFMgPSB7CisgICAgICAnYnVpbGQucHJvcCcgOiB7CisgICAgICAgICAgJ3JvLnByb2R1Y3QubmFtZScgOiAncHJvZHVjdC1uYW1lJywKKyAgICAgICAgICAncm8uYnVpbGQudGh1bWJwcmludCcgOiAnYnVpbGQtdGh1bWJwcmludCcsCisgICAgICAgICAgJ3JvLmJ1aWxkLmJhcicgOiAnYnVpbGQtYmFyJywKKyAgICAgIH0sCisgICAgICAndmVuZG9yLmJ1aWxkLnByb3AnIDogeworICAgICAgICAgICdyby52ZW5kb3IuYnVpbGQuZmluZ2VycHJpbnQnIDogJ3ZlbmRvci1idWlsZC1maW5nZXJwcmludCcsCisgICAgICB9LAorICAgICAgJ3Byb3BlcnR5MScgOiAndmFsdWUxJywKKyAgICAgICdwcm9wZXJ0eTInIDogNDA5NiwKKyAgICAgICdvZW1fZmluZ2VycHJpbnRfcHJvcGVydGllcycgOiAncm8ucHJvZHVjdC5kZXZpY2Ugcm8ucHJvZHVjdC5icmFuZCcsCisgIH0KKworICBURVNUX09FTV9ESUNUUyA9IFsKKyAgICAgIHsKKyAgICAgICAgICAncm8ucHJvZHVjdC5icmFuZCcgOiAnYnJhbmQxJywKKyAgICAgICAgICAncm8ucHJvZHVjdC5kZXZpY2UnIDogJ2RldmljZTEnLAorICAgICAgfSwKKyAgICAgIHsKKyAgICAgICAgICAncm8ucHJvZHVjdC5icmFuZCcgOiAnYnJhbmQyJywKKyAgICAgICAgICAncm8ucHJvZHVjdC5kZXZpY2UnIDogJ2RldmljZTInLAorICAgICAgfSwKKyAgICAgIHsKKyAgICAgICAgICAncm8ucHJvZHVjdC5icmFuZCcgOiAnYnJhbmQzJywKKyAgICAgICAgICAncm8ucHJvZHVjdC5kZXZpY2UnIDogJ2RldmljZTMnLAorICAgICAgfSwKKyAgXQorCisgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX0lORk9fRElDVCwgTm9uZSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdwcm9kdWN0LWRldmljZScsIHRhcmdldF9pbmZvLmRldmljZSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdidWlsZC1maW5nZXJwcmludCcsIHRhcmdldF9pbmZvLmZpbmdlcnByaW50KQorICAgIHNlbGYuYXNzZXJ0RmFsc2UodGFyZ2V0X2luZm8uaXNfYWIpCisgICAgc2VsZi5hc3NlcnRJc05vbmUodGFyZ2V0X2luZm8ub2VtX3Byb3BzKQorCisgIGRlZiB0ZXN0X2luaXRfd2l0aF9vZW1fcHJvcHMoc2VsZik6CisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX0lORk9fRElDVF9VU0VTX09FTV9QUk9QUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlRFU1RfT0VNX0RJQ1RTKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RldmljZTEnLCB0YXJnZXRfaW5mby5kZXZpY2UpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnYnJhbmQxL3Byb2R1Y3QtbmFtZS9kZXZpY2UxOmJ1aWxkLXRodW1icHJpbnQnLAorICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2luZm8uZmluZ2VycHJpbnQpCisKKyAgICAjIFN3YXAgdGhlIG9yZGVyIGluIG9lbV9kaWN0cywgd2hpY2ggd291bGQgbGVhZCB0byBkaWZmZXJlbnQgQnVpbGRJbmZvLgorICAgIG9lbV9kaWN0cyA9IGNvcHkuY29weShzZWxmLlRFU1RfT0VNX0RJQ1RTKQorICAgIG9lbV9kaWN0c1swXSwgb2VtX2RpY3RzWzJdID0gb2VtX2RpY3RzWzJdLCBvZW1fZGljdHNbMF0KKyAgICB0YXJnZXRfaW5mbyA9IEJ1aWxkSW5mbyhzZWxmLlRFU1RfSU5GT19ESUNUX1VTRVNfT0VNX1BST1BTLCBvZW1fZGljdHMpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnZGV2aWNlMycsIHRhcmdldF9pbmZvLmRldmljZSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdicmFuZDMvcHJvZHVjdC1uYW1lL2RldmljZTM6YnVpbGQtdGh1bWJwcmludCcsCisgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaW5mby5maW5nZXJwcmludCkKKworICAgICMgTWlzc2luZyBvZW1fZGljdCBzaG91bGQgYmUgcmVqZWN0ZWQuCisgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEJ1aWxkSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLlRFU1RfSU5GT19ESUNUX1VTRVNfT0VNX1BST1BTLCBOb25lKQorCisgIGRlZiB0ZXN0X19fZ2V0aXRlbV9fKHNlbGYpOgorICAgIHRhcmdldF9pbmZvID0gQnVpbGRJbmZvKHNlbGYuVEVTVF9JTkZPX0RJQ1QsIE5vbmUpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgndmFsdWUxJywgdGFyZ2V0X2luZm9bJ3Byb3BlcnR5MSddKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDA5NiwgdGFyZ2V0X2luZm9bJ3Byb3BlcnR5MiddKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2J1aWxkLWZvbycsIHRhcmdldF9pbmZvWydidWlsZC5wcm9wJ11bJ3JvLmJ1aWxkLmZvbyddKQorCisgIGRlZiB0ZXN0X19fZ2V0aXRlbV9fd2l0aF9vZW1fcHJvcHMoc2VsZik6CisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX0lORk9fRElDVF9VU0VTX09FTV9QUk9QUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlRFU1RfT0VNX0RJQ1RTKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3ZhbHVlMScsIHRhcmdldF9pbmZvWydwcm9wZXJ0eTEnXSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKDQwOTYsIHRhcmdldF9pbmZvWydwcm9wZXJ0eTInXSkKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHRhcmdldF9pbmZvWydidWlsZC5wcm9wJ11bJ3JvLmJ1aWxkLmZvbyddKQorCisgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICB0YXJnZXRfaW5mbyA9IEJ1aWxkSW5mbyhzZWxmLlRFU1RfSU5GT19ESUNULCBOb25lKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3ZhbHVlMScsIHRhcmdldF9pbmZvLmdldCgncHJvcGVydHkxJykpCisgICAgc2VsZi5hc3NlcnRFcXVhbCg0MDk2LCB0YXJnZXRfaW5mby5nZXQoJ3Byb3BlcnR5MicpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDA5NiwgdGFyZ2V0X2luZm8uZ2V0KCdwcm9wZXJ0eTInLCAxMDI0KSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKDEwMjQsIHRhcmdldF9pbmZvLmdldCgncHJvcGVydHktbm9uZXhpc3RlbnQnLCAxMDI0KSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdidWlsZC1mb28nLCB0YXJnZXRfaW5mby5nZXQoJ2J1aWxkLnByb3AnKVsncm8uYnVpbGQuZm9vJ10pCisKKyAgZGVmIHRlc3RfZ2V0X3dpdGhfb2VtX3Byb3BzKHNlbGYpOgorICAgIHRhcmdldF9pbmZvID0gQnVpbGRJbmZvKHNlbGYuVEVTVF9JTkZPX0RJQ1RfVVNFU19PRU1fUFJPUFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5URVNUX09FTV9ESUNUUykKKyAgICBzZWxmLmFzc2VydEVxdWFsKCd2YWx1ZTEnLCB0YXJnZXRfaW5mby5nZXQoJ3Byb3BlcnR5MScpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDA5NiwgdGFyZ2V0X2luZm8uZ2V0KCdwcm9wZXJ0eTInKSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKDQwOTYsIHRhcmdldF9pbmZvLmdldCgncHJvcGVydHkyJywgMTAyNCkpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgxMDI0LCB0YXJnZXRfaW5mby5nZXQoJ3Byb3BlcnR5LW5vbmV4aXN0ZW50JywgMTAyNCkpCisgICAgc2VsZi5hc3NlcnRJc05vbmUodGFyZ2V0X2luZm8uZ2V0KCdidWlsZC5wcm9wJykuZ2V0KCdyby5idWlsZC5mb28nKSkKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHRhcmdldF9pbmZvLmdldCgnYnVpbGQucHJvcCcpWydyby5idWlsZC5mb28nXSkKKworICBkZWYgdGVzdF9HZXRCdWlsZFByb3Aoc2VsZik6CisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX0lORk9fRElDVCwgTm9uZSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdidWlsZC1mb28nLCB0YXJnZXRfaW5mby5HZXRCdWlsZFByb3AoJ3JvLmJ1aWxkLmZvbycpKQorICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbW1vbi5FeHRlcm5hbEVycm9yLCB0YXJnZXRfaW5mby5HZXRCdWlsZFByb3AsCisgICAgICAgICAgICAgICAgICAgICAgJ3JvLmJ1aWxkLm5vbmV4aXN0ZW50JykKKworICBkZWYgdGVzdF9HZXRCdWlsZFByb3Bfd2l0aF9vZW1fcHJvcHMoc2VsZik6CisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX0lORk9fRElDVF9VU0VTX09FTV9QUk9QUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlRFU1RfT0VNX0RJQ1RTKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2J1aWxkLWJhcicsIHRhcmdldF9pbmZvLkdldEJ1aWxkUHJvcCgncm8uYnVpbGQuYmFyJykpCisgICAgc2VsZi5hc3NlcnRSYWlzZXMoY29tbW9uLkV4dGVybmFsRXJyb3IsIHRhcmdldF9pbmZvLkdldEJ1aWxkUHJvcCwKKyAgICAgICAgICAgICAgICAgICAgICAncm8uYnVpbGQubm9uZXhpc3RlbnQnKQorCisgIGRlZiB0ZXN0X0dldFZlbmRvckJ1aWxkUHJvcChzZWxmKToKKyAgICB0YXJnZXRfaW5mbyA9IEJ1aWxkSW5mbyhzZWxmLlRFU1RfSU5GT19ESUNULCBOb25lKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3ZlbmRvci1idWlsZC1maW5nZXJwcmludCcsCisgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaW5mby5HZXRWZW5kb3JCdWlsZFByb3AoCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvLnZlbmRvci5idWlsZC5maW5nZXJwcmludCcpKQorICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbW1vbi5FeHRlcm5hbEVycm9yLCB0YXJnZXRfaW5mby5HZXRWZW5kb3JCdWlsZFByb3AsCisgICAgICAgICAgICAgICAgICAgICAgJ3JvLmJ1aWxkLm5vbmV4aXN0ZW50JykKKworICBkZWYgdGVzdF9HZXRWZW5kb3JCdWlsZFByb3Bfd2l0aF9vZW1fcHJvcHMoc2VsZik6CisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX0lORk9fRElDVF9VU0VTX09FTV9QUk9QUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlRFU1RfT0VNX0RJQ1RTKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3ZlbmRvci1idWlsZC1maW5nZXJwcmludCcsCisgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaW5mby5HZXRWZW5kb3JCdWlsZFByb3AoCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvLnZlbmRvci5idWlsZC5maW5nZXJwcmludCcpKQorICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbW1vbi5FeHRlcm5hbEVycm9yLCB0YXJnZXRfaW5mby5HZXRWZW5kb3JCdWlsZFByb3AsCisgICAgICAgICAgICAgICAgICAgICAgJ3JvLmJ1aWxkLm5vbmV4aXN0ZW50JykKKworICBkZWYgdGVzdF9Xcml0ZU1vdW50T2VtU2NyaXB0KHNlbGYpOgorICAgIHRhcmdldF9pbmZvID0gQnVpbGRJbmZvKHNlbGYuVEVTVF9JTkZPX0RJQ1RfVVNFU19PRU1fUFJPUFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5URVNUX09FTV9ESUNUUykKKyAgICBzY3JpcHRfd3JpdGVyID0gTW9ja1NjcmlwdFdyaXRlcigpCisgICAgdGFyZ2V0X2luZm8uV3JpdGVNb3VudE9lbVNjcmlwdChzY3JpcHRfd3JpdGVyKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnTW91bnQnLCAnL29lbScsIE5vbmUpXSwgc2NyaXB0X3dyaXRlci5zY3JpcHQpCisKKyAgZGVmIHRlc3RfV3JpdGVEZXZpY2VBc3NlcnRpb25zKHNlbGYpOgorICAgIHRhcmdldF9pbmZvID0gQnVpbGRJbmZvKHNlbGYuVEVTVF9JTkZPX0RJQ1QsIE5vbmUpCisgICAgc2NyaXB0X3dyaXRlciA9IE1vY2tTY3JpcHRXcml0ZXIoKQorICAgIHRhcmdldF9pbmZvLldyaXRlRGV2aWNlQXNzZXJ0aW9ucyhzY3JpcHRfd3JpdGVyLCBGYWxzZSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ0Fzc2VydERldmljZScsICdwcm9kdWN0LWRldmljZScpXSwgc2NyaXB0X3dyaXRlci5zY3JpcHQpCisKKyAgZGVmIHRlc3RfV3JpdGVEZXZpY2VBc3NlcnRpb25zX3dpdGhfb2VtX3Byb3BzKHNlbGYpOgorICAgIHRhcmdldF9pbmZvID0gQnVpbGRJbmZvKHNlbGYuVEVTVF9JTkZPX0RJQ1RfVVNFU19PRU1fUFJPUFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5URVNUX09FTV9ESUNUUykKKyAgICBzY3JpcHRfd3JpdGVyID0gTW9ja1NjcmlwdFdyaXRlcigpCisgICAgdGFyZ2V0X2luZm8uV3JpdGVEZXZpY2VBc3NlcnRpb25zKHNjcmlwdF93cml0ZXIsIEZhbHNlKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIFsKKyAgICAgICAgICAgICgnQXNzZXJ0T2VtUHJvcGVydHknLCAncm8ucHJvZHVjdC5kZXZpY2UnLAorICAgICAgICAgICAgIFsnZGV2aWNlMScsICdkZXZpY2UyJywgJ2RldmljZTMnXSwgRmFsc2UpLAorICAgICAgICAgICAgKCdBc3NlcnRPZW1Qcm9wZXJ0eScsICdyby5wcm9kdWN0LmJyYW5kJywKKyAgICAgICAgICAgICBbJ2JyYW5kMScsICdicmFuZDInLCAnYnJhbmQzJ10sIEZhbHNlKSwKKyAgICAgICAgXSwKKyAgICAgICAgc2NyaXB0X3dyaXRlci5zY3JpcHQpCisKKyAgZGVmIHRlc3RfV3JpdGVGaW5nZXJwcmludEFzc2VydGlvbl93aXRob3V0X29lbV9wcm9wcyhzZWxmKToKKyAgICB0YXJnZXRfaW5mbyA9IEJ1aWxkSW5mbyhzZWxmLlRFU1RfSU5GT19ESUNULCBOb25lKQorICAgIHNvdXJjZV9pbmZvX2RpY3QgPSBjb3B5LmRlZXBjb3B5KHNlbGYuVEVTVF9JTkZPX0RJQ1QpCisgICAgc291cmNlX2luZm9fZGljdFsnYnVpbGQucHJvcCddWydyby5idWlsZC5maW5nZXJwcmludCddID0gKAorICAgICAgICAnc291cmNlLWJ1aWxkLWZpbmdlcnByaW50JykKKyAgICBzb3VyY2VfaW5mbyA9IEJ1aWxkSW5mbyhzb3VyY2VfaW5mb19kaWN0LCBOb25lKQorCisgICAgc2NyaXB0X3dyaXRlciA9IE1vY2tTY3JpcHRXcml0ZXIoKQorICAgIFdyaXRlRmluZ2VycHJpbnRBc3NlcnRpb24oc2NyaXB0X3dyaXRlciwgdGFyZ2V0X2luZm8sIHNvdXJjZV9pbmZvKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIFsoJ0Fzc2VydFNvbWVGaW5nZXJwcmludCcsICdzb3VyY2UtYnVpbGQtZmluZ2VycHJpbnQnLAorICAgICAgICAgICdidWlsZC1maW5nZXJwcmludCcpXSwKKyAgICAgICAgc2NyaXB0X3dyaXRlci5zY3JpcHQpCisKKyAgZGVmIHRlc3RfV3JpdGVGaW5nZXJwcmludEFzc2VydGlvbl93aXRoX3NvdXJjZV9vZW1fcHJvcHMoc2VsZik6CisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX0lORk9fRElDVCwgTm9uZSkKKyAgICBzb3VyY2VfaW5mbyA9IEJ1aWxkSW5mbyhzZWxmLlRFU1RfSU5GT19ESUNUX1VTRVNfT0VNX1BST1BTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVEVTVF9PRU1fRElDVFMpCisKKyAgICBzY3JpcHRfd3JpdGVyID0gTW9ja1NjcmlwdFdyaXRlcigpCisgICAgV3JpdGVGaW5nZXJwcmludEFzc2VydGlvbihzY3JpcHRfd3JpdGVyLCB0YXJnZXRfaW5mbywgc291cmNlX2luZm8pCisgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgWygnQXNzZXJ0RmluZ2VycHJpbnRPclRodW1icHJpbnQnLCAnYnVpbGQtZmluZ2VycHJpbnQnLAorICAgICAgICAgICdidWlsZC10aHVtYnByaW50JyldLAorICAgICAgICBzY3JpcHRfd3JpdGVyLnNjcmlwdCkKKworICBkZWYgdGVzdF9Xcml0ZUZpbmdlcnByaW50QXNzZXJ0aW9uX3dpdGhfdGFyZ2V0X29lbV9wcm9wcyhzZWxmKToKKyAgICB0YXJnZXRfaW5mbyA9IEJ1aWxkSW5mbyhzZWxmLlRFU1RfSU5GT19ESUNUX1VTRVNfT0VNX1BST1BTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVEVTVF9PRU1fRElDVFMpCisgICAgc291cmNlX2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX0lORk9fRElDVCwgTm9uZSkKKworICAgIHNjcmlwdF93cml0ZXIgPSBNb2NrU2NyaXB0V3JpdGVyKCkKKyAgICBXcml0ZUZpbmdlcnByaW50QXNzZXJ0aW9uKHNjcmlwdF93cml0ZXIsIHRhcmdldF9pbmZvLCBzb3VyY2VfaW5mbykKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICBbKCdBc3NlcnRGaW5nZXJwcmludE9yVGh1bWJwcmludCcsICdidWlsZC1maW5nZXJwcmludCcsCisgICAgICAgICAgJ2J1aWxkLXRodW1icHJpbnQnKV0sCisgICAgICAgIHNjcmlwdF93cml0ZXIuc2NyaXB0KQorCisgIGRlZiB0ZXN0X1dyaXRlRmluZ2VycHJpbnRBc3NlcnRpb25fd2l0aF9ib3RoX29lbV9wcm9wcyhzZWxmKToKKyAgICB0YXJnZXRfaW5mbyA9IEJ1aWxkSW5mbyhzZWxmLlRFU1RfSU5GT19ESUNUX1VTRVNfT0VNX1BST1BTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVEVTVF9PRU1fRElDVFMpCisgICAgc291cmNlX2luZm9fZGljdCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5URVNUX0lORk9fRElDVF9VU0VTX09FTV9QUk9QUykKKyAgICBzb3VyY2VfaW5mb19kaWN0WydidWlsZC5wcm9wJ11bJ3JvLmJ1aWxkLnRodW1icHJpbnQnXSA9ICgKKyAgICAgICAgJ3NvdXJjZS1idWlsZC10aHVtYnByaW50JykKKyAgICBzb3VyY2VfaW5mbyA9IEJ1aWxkSW5mbyhzb3VyY2VfaW5mb19kaWN0LCBzZWxmLlRFU1RfT0VNX0RJQ1RTKQorCisgICAgc2NyaXB0X3dyaXRlciA9IE1vY2tTY3JpcHRXcml0ZXIoKQorICAgIFdyaXRlRmluZ2VycHJpbnRBc3NlcnRpb24oc2NyaXB0X3dyaXRlciwgdGFyZ2V0X2luZm8sIHNvdXJjZV9pbmZvKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIFsoJ0Fzc2VydFNvbWVUaHVtYnByaW50JywgJ2J1aWxkLXRodW1icHJpbnQnLAorICAgICAgICAgICdzb3VyY2UtYnVpbGQtdGh1bWJwcmludCcpXSwKKyAgICAgICAgc2NyaXB0X3dyaXRlci5zY3JpcHQpCisKKworY2xhc3MgTG9hZE9lbURpY3RzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgIGNvbW1vbi5DbGVhbnVwKCkKKworICBkZWYgdGVzdF9Ob25lRGljdChzZWxmKToKKyAgICBzZWxmLmFzc2VydElzTm9uZShfTG9hZE9lbURpY3RzKE5vbmUpKQorCisgIGRlZiB0ZXN0X1NpbmdsZURpY3Qoc2VsZik6CisgICAgZGljdF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZSgpCisgICAgd2l0aCBvcGVuKGRpY3RfZmlsZSwgJ3cnKSBhcyBkaWN0X2ZwOgorICAgICAgZGljdF9mcC53cml0ZSgnYWJjPTFcbmRlZj0yXG54eXo9Zm9vXG5hLmIuYz1iYXJcbicpCisKKyAgICBvZW1fZGljdHMgPSBfTG9hZE9lbURpY3RzKFtkaWN0X2ZpbGVdKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKG9lbV9kaWN0cykpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vJywgb2VtX2RpY3RzWzBdWyd4eXonXSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdiYXInLCBvZW1fZGljdHNbMF1bJ2EuYi5jJ10pCisKKyAgZGVmIHRlc3RfTXVsdGlwbGVEaWN0cyhzZWxmKToKKyAgICBvZW1fc291cmNlID0gW10KKyAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgIGRpY3RfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUoKQorICAgICAgd2l0aCBvcGVuKGRpY3RfZmlsZSwgJ3cnKSBhcyBkaWN0X2ZwOgorICAgICAgICBkaWN0X2ZwLndyaXRlKAorICAgICAgICAgICAgJ3JvLmJ1aWxkLmluZGV4PXt9XG5kZWY9MlxueHl6PWZvb1xuYS5iLmM9YmFyXG4nLmZvcm1hdChpKSkKKyAgICAgIG9lbV9zb3VyY2UuYXBwZW5kKGRpY3RfZmlsZSkKKworICAgIG9lbV9kaWN0cyA9IF9Mb2FkT2VtRGljdHMob2VtX3NvdXJjZSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihvZW1fZGljdHMpKQorICAgIGZvciBpLCBvZW1fZGljdCBpbiBlbnVtZXJhdGUob2VtX2RpY3RzKToKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzInLCBvZW1fZGljdFsnZGVmJ10pCisgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28nLCBvZW1fZGljdFsneHl6J10pCisgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYXInLCBvZW1fZGljdFsnYS5iLmMnXSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9Jy5mb3JtYXQoaSksIG9lbV9kaWN0Wydyby5idWlsZC5pbmRleCddKQorCisKK2NsYXNzIE90YUZyb21UYXJnZXRGaWxlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgIFRFU1RfVEFSR0VUX0lORk9fRElDVCA9IHsKKyAgICAgICdidWlsZC5wcm9wJyA6IHsKKyAgICAgICAgICAncm8ucHJvZHVjdC5kZXZpY2UnIDogJ3Byb2R1Y3QtZGV2aWNlJywKKyAgICAgICAgICAncm8uYnVpbGQuZmluZ2VycHJpbnQnIDogJ2J1aWxkLWZpbmdlcnByaW50LXRhcmdldCcsCisgICAgICAgICAgJ3JvLmJ1aWxkLnZlcnNpb24uaW5jcmVtZW50YWwnIDogJ2J1aWxkLXZlcnNpb24taW5jcmVtZW50YWwtdGFyZ2V0JywKKyAgICAgICAgICAncm8uYnVpbGQudmVyc2lvbi5zZGsnIDogJzI3JywKKyAgICAgICAgICAncm8uYnVpbGQudmVyc2lvbi5zZWN1cml0eV9wYXRjaCcgOiAnMjAxNy0xMi0wMScsCisgICAgICAgICAgJ3JvLmJ1aWxkLmRhdGUudXRjJyA6ICcxNTAwMDAwMDAwJywKKyAgICAgIH0sCisgIH0KKworICBURVNUX1NPVVJDRV9JTkZPX0RJQ1QgPSB7CisgICAgICAnYnVpbGQucHJvcCcgOiB7CisgICAgICAgICAgJ3JvLnByb2R1Y3QuZGV2aWNlJyA6ICdwcm9kdWN0LWRldmljZScsCisgICAgICAgICAgJ3JvLmJ1aWxkLmZpbmdlcnByaW50JyA6ICdidWlsZC1maW5nZXJwcmludC1zb3VyY2UnLAorICAgICAgICAgICdyby5idWlsZC52ZXJzaW9uLmluY3JlbWVudGFsJyA6ICdidWlsZC12ZXJzaW9uLWluY3JlbWVudGFsLXNvdXJjZScsCisgICAgICAgICAgJ3JvLmJ1aWxkLnZlcnNpb24uc2RrJyA6ICcyNScsCisgICAgICAgICAgJ3JvLmJ1aWxkLnZlcnNpb24uc2VjdXJpdHlfcGF0Y2gnIDogJzIwMTYtMTItMDEnLAorICAgICAgICAgICdyby5idWlsZC5kYXRlLnV0YycgOiAnMTQwMDAwMDAwMCcsCisgICAgICB9LAorICB9CisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICMgUmVzZXQgdGhlIGdsb2JhbCBvcHRpb25zIGFzIGluIG90YV9mcm9tX3RhcmdldF9maWxlcy5weS4KKyAgICBjb21tb24uT1BUSU9OUy5pbmNyZW1lbnRhbF9zb3VyY2UgPSBOb25lCisgICAgY29tbW9uLk9QVElPTlMuZG93bmdyYWRlID0gRmFsc2UKKyAgICBjb21tb24uT1BUSU9OUy50aW1lc3RhbXAgPSBGYWxzZQorICAgIGNvbW1vbi5PUFRJT05TLndpcGVfdXNlcl9kYXRhID0gRmFsc2UKKworICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgY29tbW9uLkNsZWFudXAoKQorCisgIGRlZiB0ZXN0X0dldFBhY2thZ2VNZXRhZGF0YV9hYk90YV9mdWxsKHNlbGYpOgorICAgIHRhcmdldF9pbmZvX2RpY3QgPSBjb3B5LmRlZXBjb3B5KHNlbGYuVEVTVF9UQVJHRVRfSU5GT19ESUNUKQorICAgIHRhcmdldF9pbmZvX2RpY3RbJ2FiX3VwZGF0ZSddID0gJ3RydWUnCisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8odGFyZ2V0X2luZm9fZGljdCwgTm9uZSkKKyAgICBtZXRhZGF0YSA9IEdldFBhY2thZ2VNZXRhZGF0YSh0YXJnZXRfaW5mbykKKyAgICBzZWxmLmFzc2VydERpY3RFcXVhbCgKKyAgICAgICAgeworICAgICAgICAgICAgJ290YS10eXBlJyA6ICdBQicsCisgICAgICAgICAgICAnb3RhLXJlcXVpcmVkLWNhY2hlJyA6ICcwJywKKyAgICAgICAgICAgICdwb3N0LWJ1aWxkJyA6ICdidWlsZC1maW5nZXJwcmludC10YXJnZXQnLAorICAgICAgICAgICAgJ3Bvc3QtYnVpbGQtaW5jcmVtZW50YWwnIDogJ2J1aWxkLXZlcnNpb24taW5jcmVtZW50YWwtdGFyZ2V0JywKKyAgICAgICAgICAgICdwb3N0LXNkay1sZXZlbCcgOiAnMjcnLAorICAgICAgICAgICAgJ3Bvc3Qtc2VjdXJpdHktcGF0Y2gtbGV2ZWwnIDogJzIwMTctMTItMDEnLAorICAgICAgICAgICAgJ3Bvc3QtdGltZXN0YW1wJyA6ICcxNTAwMDAwMDAwJywKKyAgICAgICAgICAgICdwcmUtZGV2aWNlJyA6ICdwcm9kdWN0LWRldmljZScsCisgICAgICAgIH0sCisgICAgICAgIG1ldGFkYXRhKQorCisgIGRlZiB0ZXN0X0dldFBhY2thZ2VNZXRhZGF0YV9hYk90YV9pbmNyZW1lbnRhbChzZWxmKToKKyAgICB0YXJnZXRfaW5mb19kaWN0ID0gY29weS5kZWVwY29weShzZWxmLlRFU1RfVEFSR0VUX0lORk9fRElDVCkKKyAgICB0YXJnZXRfaW5mb19kaWN0WydhYl91cGRhdGUnXSA9ICd0cnVlJworICAgIHRhcmdldF9pbmZvID0gQnVpbGRJbmZvKHRhcmdldF9pbmZvX2RpY3QsIE5vbmUpCisgICAgc291cmNlX2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX1NPVVJDRV9JTkZPX0RJQ1QsIE5vbmUpCisgICAgY29tbW9uLk9QVElPTlMuaW5jcmVtZW50YWxfc291cmNlID0gJycKKyAgICBtZXRhZGF0YSA9IEdldFBhY2thZ2VNZXRhZGF0YSh0YXJnZXRfaW5mbywgc291cmNlX2luZm8pCisgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoCisgICAgICAgIHsKKyAgICAgICAgICAgICdvdGEtdHlwZScgOiAnQUInLAorICAgICAgICAgICAgJ290YS1yZXF1aXJlZC1jYWNoZScgOiAnMCcsCisgICAgICAgICAgICAncG9zdC1idWlsZCcgOiAnYnVpbGQtZmluZ2VycHJpbnQtdGFyZ2V0JywKKyAgICAgICAgICAgICdwb3N0LWJ1aWxkLWluY3JlbWVudGFsJyA6ICdidWlsZC12ZXJzaW9uLWluY3JlbWVudGFsLXRhcmdldCcsCisgICAgICAgICAgICAncG9zdC1zZGstbGV2ZWwnIDogJzI3JywKKyAgICAgICAgICAgICdwb3N0LXNlY3VyaXR5LXBhdGNoLWxldmVsJyA6ICcyMDE3LTEyLTAxJywKKyAgICAgICAgICAgICdwb3N0LXRpbWVzdGFtcCcgOiAnMTUwMDAwMDAwMCcsCisgICAgICAgICAgICAncHJlLWRldmljZScgOiAncHJvZHVjdC1kZXZpY2UnLAorICAgICAgICAgICAgJ3ByZS1idWlsZCcgOiAnYnVpbGQtZmluZ2VycHJpbnQtc291cmNlJywKKyAgICAgICAgICAgICdwcmUtYnVpbGQtaW5jcmVtZW50YWwnIDogJ2J1aWxkLXZlcnNpb24taW5jcmVtZW50YWwtc291cmNlJywKKyAgICAgICAgfSwKKyAgICAgICAgbWV0YWRhdGEpCisKKyAgZGVmIHRlc3RfR2V0UGFja2FnZU1ldGFkYXRhX25vbkFiT3RhX2Z1bGwoc2VsZik6CisgICAgdGFyZ2V0X2luZm8gPSBCdWlsZEluZm8oc2VsZi5URVNUX1RBUkdFVF9JTkZPX0RJQ1QsIE5vbmUpCisgICAgbWV0YWRhdGEgPSBHZXRQYWNrYWdlTWV0YWRhdGEodGFyZ2V0X2luZm8pCisgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoCisgICAgICAgIHsKKyAgICAgICAgICAgICdvdGEtdHlwZScgOiAnQkxPQ0snLAorICAgICAgICAgICAgJ3Bvc3QtYnVpbGQnIDogJ2J1aWxkLWZpbmdlcnByaW50LXRhcmdldCcsCisgICAgICAgICAgICAncG9zdC1idWlsZC1pbmNyZW1lbnRhbCcgOiAnYnVpbGQtdmVyc2lvbi1pbmNyZW1lbnRhbC10YXJnZXQnLAorICAgICAgICAgICAgJ3Bvc3Qtc2RrLWxldmVsJyA6ICcyNycsCisgICAgICAgICAgICAncG9zdC1zZWN1cml0eS1wYXRjaC1sZXZlbCcgOiAnMjAxNy0xMi0wMScsCisgICAgICAgICAgICAncG9zdC10aW1lc3RhbXAnIDogJzE1MDAwMDAwMDAnLAorICAgICAgICAgICAgJ3ByZS1kZXZpY2UnIDogJ3Byb2R1Y3QtZGV2aWNlJywKKyAgICAgICAgfSwKKyAgICAgICAgbWV0YWRhdGEpCisKKyAgZGVmIHRlc3RfR2V0UGFja2FnZU1ldGFkYXRhX25vbkFiT3RhX2luY3JlbWVudGFsKHNlbGYpOgorICAgIHRhcmdldF9pbmZvID0gQnVpbGRJbmZvKHNlbGYuVEVTVF9UQVJHRVRfSU5GT19ESUNULCBOb25lKQorICAgIHNvdXJjZV9pbmZvID0gQnVpbGRJbmZvKHNlbGYuVEVTVF9TT1VSQ0VfSU5GT19ESUNULCBOb25lKQorICAgIGNvbW1vbi5PUFRJT05TLmluY3JlbWVudGFsX3NvdXJjZSA9ICcnCisgICAgbWV0YWRhdGEgPSBHZXRQYWNrYWdlTWV0YWRhdGEodGFyZ2V0X2luZm8sIHNvdXJjZV9pbmZvKQorICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKAorICAgICAgICB7CisgICAgICAgICAgICAnb3RhLXR5cGUnIDogJ0JMT0NLJywKKyAgICAgICAgICAgICdwb3N0LWJ1aWxkJyA6ICdidWlsZC1maW5nZXJwcmludC10YXJnZXQnLAorICAgICAgICAgICAgJ3Bvc3QtYnVpbGQtaW5jcmVtZW50YWwnIDogJ2J1aWxkLXZlcnNpb24taW5jcmVtZW50YWwtdGFyZ2V0JywKKyAgICAgICAgICAgICdwb3N0LXNkay1sZXZlbCcgOiAnMjcnLAorICAgICAgICAgICAgJ3Bvc3Qtc2VjdXJpdHktcGF0Y2gtbGV2ZWwnIDogJzIwMTctMTItMDEnLAorICAgICAgICAgICAgJ3Bvc3QtdGltZXN0YW1wJyA6ICcxNTAwMDAwMDAwJywKKyAgICAgICAgICAgICdwcmUtZGV2aWNlJyA6ICdwcm9kdWN0LWRldmljZScsCisgICAgICAgICAgICAncHJlLWJ1aWxkJyA6ICdidWlsZC1maW5nZXJwcmludC1zb3VyY2UnLAorICAgICAgICAgICAgJ3ByZS1idWlsZC1pbmNyZW1lbnRhbCcgOiAnYnVpbGQtdmVyc2lvbi1pbmNyZW1lbnRhbC1zb3VyY2UnLAorICAgICAgICB9LAorICAgICAgICBtZXRhZGF0YSkKKworICBkZWYgdGVzdF9HZXRQYWNrYWdlTWV0YWRhdGFfd2lwZShzZWxmKToKKyAgICB0YXJnZXRfaW5mbyA9IEJ1aWxkSW5mbyhzZWxmLlRFU1RfVEFSR0VUX0lORk9fRElDVCwgTm9uZSkKKyAgICBjb21tb24uT1BUSU9OUy53aXBlX3VzZXJfZGF0YSA9IFRydWUKKyAgICBtZXRhZGF0YSA9IEdldFBhY2thZ2VNZXRhZGF0YSh0YXJnZXRfaW5mbykKKyAgICBzZWxmLmFzc2VydERpY3RFcXVhbCgKKyAgICAgICAgeworICAgICAgICAgICAgJ290YS10eXBlJyA6ICdCTE9DSycsCisgICAgICAgICAgICAnb3RhLXdpcGUnIDogJ3llcycsCisgICAgICAgICAgICAncG9zdC1idWlsZCcgOiAnYnVpbGQtZmluZ2VycHJpbnQtdGFyZ2V0JywKKyAgICAgICAgICAgICdwb3N0LWJ1aWxkLWluY3JlbWVudGFsJyA6ICdidWlsZC12ZXJzaW9uLWluY3JlbWVudGFsLXRhcmdldCcsCisgICAgICAgICAgICAncG9zdC1zZGstbGV2ZWwnIDogJzI3JywKKyAgICAgICAgICAgICdwb3N0LXNlY3VyaXR5LXBhdGNoLWxldmVsJyA6ICcyMDE3LTEyLTAxJywKKyAgICAgICAgICAgICdwb3N0LXRpbWVzdGFtcCcgOiAnMTUwMDAwMDAwMCcsCisgICAgICAgICAgICAncHJlLWRldmljZScgOiAncHJvZHVjdC1kZXZpY2UnLAorICAgICAgICB9LAorICAgICAgICBtZXRhZGF0YSkKKworICBAc3RhdGljbWV0aG9kCisgIGRlZiBfdGVzdF9HZXRQYWNrYWdlTWV0YWRhdGFfc3dhcEJ1aWxkVGltZXN0YW1wcyh0YXJnZXRfaW5mbywgc291cmNlX2luZm8pOgorICAgICh0YXJnZXRfaW5mb1snYnVpbGQucHJvcCddWydyby5idWlsZC5kYXRlLnV0YyddLAorICAgICBzb3VyY2VfaW5mb1snYnVpbGQucHJvcCddWydyby5idWlsZC5kYXRlLnV0YyddKSA9ICgKKyAgICAgICAgIHNvdXJjZV9pbmZvWydidWlsZC5wcm9wJ11bJ3JvLmJ1aWxkLmRhdGUudXRjJ10sCisgICAgICAgICB0YXJnZXRfaW5mb1snYnVpbGQucHJvcCddWydyby5idWlsZC5kYXRlLnV0YyddKQorCisgIGRlZiB0ZXN0X0dldFBhY2thZ2VNZXRhZGF0YV91bmludGVudGlvbmFsRG93bmdyYWRlRGV0ZWN0ZWQoc2VsZik6CisgICAgdGFyZ2V0X2luZm9fZGljdCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5URVNUX1RBUkdFVF9JTkZPX0RJQ1QpCisgICAgc291cmNlX2luZm9fZGljdCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5URVNUX1NPVVJDRV9JTkZPX0RJQ1QpCisgICAgc2VsZi5fdGVzdF9HZXRQYWNrYWdlTWV0YWRhdGFfc3dhcEJ1aWxkVGltZXN0YW1wcygKKyAgICAgICAgdGFyZ2V0X2luZm9fZGljdCwgc291cmNlX2luZm9fZGljdCkKKworICAgIHRhcmdldF9pbmZvID0gQnVpbGRJbmZvKHRhcmdldF9pbmZvX2RpY3QsIE5vbmUpCisgICAgc291cmNlX2luZm8gPSBCdWlsZEluZm8oc291cmNlX2luZm9fZGljdCwgTm9uZSkKKyAgICBjb21tb24uT1BUSU9OUy5pbmNyZW1lbnRhbF9zb3VyY2UgPSAnJworICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgR2V0UGFja2FnZU1ldGFkYXRhLCB0YXJnZXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfaW5mbykKKworICBkZWYgdGVzdF9HZXRQYWNrYWdlTWV0YWRhdGFfZG93bmdyYWRlKHNlbGYpOgorICAgIHRhcmdldF9pbmZvX2RpY3QgPSBjb3B5LmRlZXBjb3B5KHNlbGYuVEVTVF9UQVJHRVRfSU5GT19ESUNUKQorICAgIHNvdXJjZV9pbmZvX2RpY3QgPSBjb3B5LmRlZXBjb3B5KHNlbGYuVEVTVF9TT1VSQ0VfSU5GT19ESUNUKQorICAgIHNlbGYuX3Rlc3RfR2V0UGFja2FnZU1ldGFkYXRhX3N3YXBCdWlsZFRpbWVzdGFtcHMoCisgICAgICAgIHRhcmdldF9pbmZvX2RpY3QsIHNvdXJjZV9pbmZvX2RpY3QpCisKKyAgICB0YXJnZXRfaW5mbyA9IEJ1aWxkSW5mbyh0YXJnZXRfaW5mb19kaWN0LCBOb25lKQorICAgIHNvdXJjZV9pbmZvID0gQnVpbGRJbmZvKHNvdXJjZV9pbmZvX2RpY3QsIE5vbmUpCisgICAgY29tbW9uLk9QVElPTlMuaW5jcmVtZW50YWxfc291cmNlID0gJycKKyAgICBjb21tb24uT1BUSU9OUy5kb3duZ3JhZGUgPSBUcnVlCisgICAgY29tbW9uLk9QVElPTlMud2lwZV91c2VyX2RhdGEgPSBUcnVlCisgICAgbWV0YWRhdGEgPSBHZXRQYWNrYWdlTWV0YWRhdGEodGFyZ2V0X2luZm8sIHNvdXJjZV9pbmZvKQorICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKAorICAgICAgICB7CisgICAgICAgICAgICAnb3RhLWRvd25ncmFkZScgOiAneWVzJywKKyAgICAgICAgICAgICdvdGEtdHlwZScgOiAnQkxPQ0snLAorICAgICAgICAgICAgJ290YS13aXBlJyA6ICd5ZXMnLAorICAgICAgICAgICAgJ3Bvc3QtYnVpbGQnIDogJ2J1aWxkLWZpbmdlcnByaW50LXRhcmdldCcsCisgICAgICAgICAgICAncG9zdC1idWlsZC1pbmNyZW1lbnRhbCcgOiAnYnVpbGQtdmVyc2lvbi1pbmNyZW1lbnRhbC10YXJnZXQnLAorICAgICAgICAgICAgJ3Bvc3Qtc2RrLWxldmVsJyA6ICcyNycsCisgICAgICAgICAgICAncG9zdC1zZWN1cml0eS1wYXRjaC1sZXZlbCcgOiAnMjAxNy0xMi0wMScsCisgICAgICAgICAgICAncHJlLWRldmljZScgOiAncHJvZHVjdC1kZXZpY2UnLAorICAgICAgICAgICAgJ3ByZS1idWlsZCcgOiAnYnVpbGQtZmluZ2VycHJpbnQtc291cmNlJywKKyAgICAgICAgICAgICdwcmUtYnVpbGQtaW5jcmVtZW50YWwnIDogJ2J1aWxkLXZlcnNpb24taW5jcmVtZW50YWwtc291cmNlJywKKyAgICAgICAgfSwKKyAgICAgICAgbWV0YWRhdGEpCisKKyAgZGVmIHRlc3RfR2V0UGFja2FnZU1ldGFkYXRhX292ZXJyaWRlVGltZXN0YW1wKHNlbGYpOgorICAgIHRhcmdldF9pbmZvX2RpY3QgPSBjb3B5LmRlZXBjb3B5KHNlbGYuVEVTVF9UQVJHRVRfSU5GT19ESUNUKQorICAgIHNvdXJjZV9pbmZvX2RpY3QgPSBjb3B5LmRlZXBjb3B5KHNlbGYuVEVTVF9TT1VSQ0VfSU5GT19ESUNUKQorICAgIHNlbGYuX3Rlc3RfR2V0UGFja2FnZU1ldGFkYXRhX3N3YXBCdWlsZFRpbWVzdGFtcHMoCisgICAgICAgIHRhcmdldF9pbmZvX2RpY3QsIHNvdXJjZV9pbmZvX2RpY3QpCisKKyAgICB0YXJnZXRfaW5mbyA9IEJ1aWxkSW5mbyh0YXJnZXRfaW5mb19kaWN0LCBOb25lKQorICAgIHNvdXJjZV9pbmZvID0gQnVpbGRJbmZvKHNvdXJjZV9pbmZvX2RpY3QsIE5vbmUpCisgICAgY29tbW9uLk9QVElPTlMuaW5jcmVtZW50YWxfc291cmNlID0gJycKKyAgICBjb21tb24uT1BUSU9OUy50aW1lc3RhbXAgPSBUcnVlCisgICAgbWV0YWRhdGEgPSBHZXRQYWNrYWdlTWV0YWRhdGEodGFyZ2V0X2luZm8sIHNvdXJjZV9pbmZvKQorICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKAorICAgICAgICB7CisgICAgICAgICAgICAnb3RhLXR5cGUnIDogJ0JMT0NLJywKKyAgICAgICAgICAgICdwb3N0LWJ1aWxkJyA6ICdidWlsZC1maW5nZXJwcmludC10YXJnZXQnLAorICAgICAgICAgICAgJ3Bvc3QtYnVpbGQtaW5jcmVtZW50YWwnIDogJ2J1aWxkLXZlcnNpb24taW5jcmVtZW50YWwtdGFyZ2V0JywKKyAgICAgICAgICAgICdwb3N0LXNkay1sZXZlbCcgOiAnMjcnLAorICAgICAgICAgICAgJ3Bvc3Qtc2VjdXJpdHktcGF0Y2gtbGV2ZWwnIDogJzIwMTctMTItMDEnLAorICAgICAgICAgICAgJ3Bvc3QtdGltZXN0YW1wJyA6ICcxNTAwMDAwMDAxJywKKyAgICAgICAgICAgICdwcmUtZGV2aWNlJyA6ICdwcm9kdWN0LWRldmljZScsCisgICAgICAgICAgICAncHJlLWJ1aWxkJyA6ICdidWlsZC1maW5nZXJwcmludC1zb3VyY2UnLAorICAgICAgICAgICAgJ3ByZS1idWlsZC1pbmNyZW1lbnRhbCcgOiAnYnVpbGQtdmVyc2lvbi1pbmNyZW1lbnRhbC1zb3VyY2UnLAorICAgICAgICB9LAorICAgICAgICBtZXRhZGF0YSkKKworICBkZWYgdGVzdF9HZXRUYXJnZXRGaWxlc1ppcEZvclNlY29uZGFyeUltYWdlcyhzZWxmKToKKyAgICBpbnB1dF9maWxlID0gY29uc3RydWN0X3RhcmdldF9maWxlcyhzZWNvbmRhcnk9VHJ1ZSkKKyAgICB0YXJnZXRfZmlsZSA9IEdldFRhcmdldEZpbGVzWmlwRm9yU2Vjb25kYXJ5SW1hZ2VzKGlucHV0X2ZpbGUpCisKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZSkgYXMgdmVyaWZ5X3ppcDoKKyAgICAgIG5hbWVsaXN0ID0gdmVyaWZ5X3ppcC5uYW1lbGlzdCgpCisKKyAgICBzZWxmLmFzc2VydEluKCdNRVRBL2FiX3BhcnRpdGlvbnMudHh0JywgbmFtZWxpc3QpCisgICAgc2VsZi5hc3NlcnRJbignSU1BR0VTL2Jvb3QuaW1nJywgbmFtZWxpc3QpCisgICAgc2VsZi5hc3NlcnRJbignSU1BR0VTL3N5c3RlbS5pbWcnLCBuYW1lbGlzdCkKKyAgICBzZWxmLmFzc2VydEluKCdJTUFHRVMvdmVuZG9yLmltZycsIG5hbWVsaXN0KQorICAgIHNlbGYuYXNzZXJ0SW4oUE9TVElOU1RBTExfQ09ORklHLCBuYW1lbGlzdCkKKworICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0lNQUdFUy9zeXN0ZW1fb3RoZXIuaW1nJywgbmFtZWxpc3QpCisgICAgc2VsZi5hc3NlcnROb3RJbignSU1BR0VTL3N5c3RlbS5tYXAnLCBuYW1lbGlzdCkKKworICBkZWYgdGVzdF9HZXRUYXJnZXRGaWxlc1ppcEZvclNlY29uZGFyeUltYWdlc19za2lwUG9zdGluc3RhbGwoc2VsZik6CisgICAgaW5wdXRfZmlsZSA9IGNvbnN0cnVjdF90YXJnZXRfZmlsZXMoc2Vjb25kYXJ5PVRydWUpCisgICAgdGFyZ2V0X2ZpbGUgPSBHZXRUYXJnZXRGaWxlc1ppcEZvclNlY29uZGFyeUltYWdlcygKKyAgICAgICAgaW5wdXRfZmlsZSwgc2tpcF9wb3N0aW5zdGFsbD1UcnVlKQorCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUodGFyZ2V0X2ZpbGUpIGFzIHZlcmlmeV96aXA6CisgICAgICBuYW1lbGlzdCA9IHZlcmlmeV96aXAubmFtZWxpc3QoKQorCisgICAgc2VsZi5hc3NlcnRJbignTUVUQS9hYl9wYXJ0aXRpb25zLnR4dCcsIG5hbWVsaXN0KQorICAgIHNlbGYuYXNzZXJ0SW4oJ0lNQUdFUy9ib290LmltZycsIG5hbWVsaXN0KQorICAgIHNlbGYuYXNzZXJ0SW4oJ0lNQUdFUy9zeXN0ZW0uaW1nJywgbmFtZWxpc3QpCisgICAgc2VsZi5hc3NlcnRJbignSU1BR0VTL3ZlbmRvci5pbWcnLCBuYW1lbGlzdCkKKworICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0lNQUdFUy9zeXN0ZW1fb3RoZXIuaW1nJywgbmFtZWxpc3QpCisgICAgc2VsZi5hc3NlcnROb3RJbignSU1BR0VTL3N5c3RlbS5tYXAnLCBuYW1lbGlzdCkKKyAgICBzZWxmLmFzc2VydE5vdEluKFBPU1RJTlNUQUxMX0NPTkZJRywgbmFtZWxpc3QpCisKKyAgZGVmIHRlc3RfR2V0VGFyZ2V0RmlsZXNaaXBXaXRob3V0UG9zdGluc3RhbGxDb25maWcoc2VsZik6CisgICAgaW5wdXRfZmlsZSA9IGNvbnN0cnVjdF90YXJnZXRfZmlsZXMoKQorICAgIHRhcmdldF9maWxlID0gR2V0VGFyZ2V0RmlsZXNaaXBXaXRob3V0UG9zdGluc3RhbGxDb25maWcoaW5wdXRfZmlsZSkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXRfZmlsZSkgYXMgdmVyaWZ5X3ppcDoKKyAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oUE9TVElOU1RBTExfQ09ORklHLCB2ZXJpZnlfemlwLm5hbWVsaXN0KCkpCisKKyAgZGVmIHRlc3RfR2V0VGFyZ2V0RmlsZXNaaXBXaXRob3V0UG9zdGluc3RhbGxDb25maWdfbWlzc2luZ0VudHJ5KHNlbGYpOgorICAgIGlucHV0X2ZpbGUgPSBjb25zdHJ1Y3RfdGFyZ2V0X2ZpbGVzKCkKKyAgICBjb21tb24uWmlwRGVsZXRlKGlucHV0X2ZpbGUsIFBPU1RJTlNUQUxMX0NPTkZJRykKKyAgICB0YXJnZXRfZmlsZSA9IEdldFRhcmdldEZpbGVzWmlwV2l0aG91dFBvc3RpbnN0YWxsQ29uZmlnKGlucHV0X2ZpbGUpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUodGFyZ2V0X2ZpbGUpIGFzIHZlcmlmeV96aXA6CisgICAgICBzZWxmLmFzc2VydE5vdEluKFBPU1RJTlNUQUxMX0NPTkZJRywgdmVyaWZ5X3ppcC5uYW1lbGlzdCgpKQorCisKK2NsYXNzIFRlc3RQcm9wZXJ0eUZpbGVzKFByb3BlcnR5RmlsZXMpOgorICAiIiJBIGNsYXNzIHRoYXQgZXh0ZW5kcyBQcm9wZXJ0eUZpbGVzIGZvciB0ZXN0aW5nIHB1cnBvc2UuIiIiCisKKyAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHN1cGVyKFRlc3RQcm9wZXJ0eUZpbGVzLCBzZWxmKS5fX2luaXRfXygpCisgICAgc2VsZi5uYW1lID0gJ290YS10ZXN0LXByb3BlcnR5LWZpbGVzJworICAgIHNlbGYucmVxdWlyZWQgPSAoCisgICAgICAgICdyZXF1aXJlZC1lbnRyeTEnLAorICAgICAgICAncmVxdWlyZWQtZW50cnkyJywKKyAgICApCisgICAgc2VsZi5vcHRpb25hbCA9ICgKKyAgICAgICAgJ29wdGlvbmFsLWVudHJ5MScsCisgICAgICAgICdvcHRpb25hbC1lbnRyeTInLAorICAgICkKKworCitjbGFzcyBQcm9wZXJ0eUZpbGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgIGNvbW1vbi5DbGVhbnVwKCkKKworICBAc3RhdGljbWV0aG9kCisgIGRlZiBfY29uc3RydWN0X3ppcF9wYWNrYWdlKGVudHJpZXMpOgorICAgIHppcF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy56aXAnKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHppcF9maWxlLCAndycpIGFzIHppcF9mcDoKKyAgICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzOgorICAgICAgICB6aXBfZnAud3JpdGVzdHIoCisgICAgICAgICAgICBlbnRyeSwKKyAgICAgICAgICAgIGVudHJ5LnJlcGxhY2UoJy4nLCAnLScpLnVwcGVyKCksCisgICAgICAgICAgICB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgcmV0dXJuIHppcF9maWxlCisKKyAgQHN0YXRpY21ldGhvZAorICBkZWYgX3BhcnNlX3Byb3BlcnR5X2ZpbGVzX3N0cmluZyhkYXRhKToKKyAgICByZXN1bHQgPSB7fQorICAgIGZvciB0b2tlbiBpbiBkYXRhLnNwbGl0KCcsJyk6CisgICAgICBuYW1lLCBpbmZvID0gdG9rZW4uc3BsaXQoJzonLCAxKQorICAgICAgcmVzdWx0W25hbWVdID0gaW5mbworICAgIHJldHVybiByZXN1bHQKKworICBkZWYgX3ZlcmlmeV9lbnRyaWVzKHNlbGYsIGlucHV0X2ZpbGUsIHRva2VucywgZW50cmllcyk6CisgICAgZm9yIGVudHJ5IGluIGVudHJpZXM6CisgICAgICBvZmZzZXQsIHNpemUgPSBtYXAoaW50LCB0b2tlbnNbZW50cnldLnNwbGl0KCc6JykpCisgICAgICB3aXRoIG9wZW4oaW5wdXRfZmlsZSwgJ3JiJykgYXMgaW5wdXRfZnA6CisgICAgICAgIGlucHV0X2ZwLnNlZWsob2Zmc2V0KQorICAgICAgICBpZiBlbnRyeSA9PSAnbWV0YWRhdGEnOgorICAgICAgICAgIGV4cGVjdGVkID0gYidNRVRBLUlORi9DT00vQU5EUk9JRC9NRVRBREFUQScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBleHBlY3RlZCA9IGVudHJ5LnJlcGxhY2UoJy4nLCAnLScpLnVwcGVyKCkuZW5jb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgaW5wdXRfZnAucmVhZChzaXplKSkKKworICBkZWYgdGVzdF9Db21wdXRlKHNlbGYpOgorICAgIGVudHJpZXMgPSAoCisgICAgICAgICdyZXF1aXJlZC1lbnRyeTEnLAorICAgICAgICAncmVxdWlyZWQtZW50cnkyJywKKyAgICApCisgICAgemlwX2ZpbGUgPSBzZWxmLl9jb25zdHJ1Y3RfemlwX3BhY2thZ2UoZW50cmllcykKKyAgICBwcm9wZXJ0eV9maWxlcyA9IFRlc3RQcm9wZXJ0eUZpbGVzKCkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZSwgJ3InKSBhcyB6aXBfZnA6CisgICAgICBwcm9wZXJ0eV9maWxlc19zdHJpbmcgPSBwcm9wZXJ0eV9maWxlcy5Db21wdXRlKHppcF9mcCkKKworICAgIHRva2VucyA9IHNlbGYuX3BhcnNlX3Byb3BlcnR5X2ZpbGVzX3N0cmluZyhwcm9wZXJ0eV9maWxlc19zdHJpbmcpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4odG9rZW5zKSkKKyAgICBzZWxmLl92ZXJpZnlfZW50cmllcyh6aXBfZmlsZSwgdG9rZW5zLCBlbnRyaWVzKQorCisgIGRlZiB0ZXN0X0NvbXB1dGVfd2l0aE9wdGlvbmFsRW50cmllcyhzZWxmKToKKyAgICBlbnRyaWVzID0gKAorICAgICAgICAncmVxdWlyZWQtZW50cnkxJywKKyAgICAgICAgJ3JlcXVpcmVkLWVudHJ5MicsCisgICAgICAgICdvcHRpb25hbC1lbnRyeTEnLAorICAgICAgICAnb3B0aW9uYWwtZW50cnkyJywKKyAgICApCisgICAgemlwX2ZpbGUgPSBzZWxmLl9jb25zdHJ1Y3RfemlwX3BhY2thZ2UoZW50cmllcykKKyAgICBwcm9wZXJ0eV9maWxlcyA9IFRlc3RQcm9wZXJ0eUZpbGVzKCkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZSwgJ3InKSBhcyB6aXBfZnA6CisgICAgICBwcm9wZXJ0eV9maWxlc19zdHJpbmcgPSBwcm9wZXJ0eV9maWxlcy5Db21wdXRlKHppcF9mcCkKKworICAgIHRva2VucyA9IHNlbGYuX3BhcnNlX3Byb3BlcnR5X2ZpbGVzX3N0cmluZyhwcm9wZXJ0eV9maWxlc19zdHJpbmcpCisgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBsZW4odG9rZW5zKSkKKyAgICBzZWxmLl92ZXJpZnlfZW50cmllcyh6aXBfZmlsZSwgdG9rZW5zLCBlbnRyaWVzKQorCisgIGRlZiB0ZXN0X0NvbXB1dGVfbWlzc2luZ1JlcXVpcmVkRW50cnkoc2VsZik6CisgICAgZW50cmllcyA9ICgKKyAgICAgICAgJ3JlcXVpcmVkLWVudHJ5MicsCisgICAgKQorICAgIHppcF9maWxlID0gc2VsZi5fY29uc3RydWN0X3ppcF9wYWNrYWdlKGVudHJpZXMpCisgICAgcHJvcGVydHlfZmlsZXMgPSBUZXN0UHJvcGVydHlGaWxlcygpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGUsICdyJykgYXMgemlwX2ZwOgorICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHByb3BlcnR5X2ZpbGVzLkNvbXB1dGUsIHppcF9mcCkKKworICBkZWYgdGVzdF9GaW5hbGl6ZShzZWxmKToKKyAgICBlbnRyaWVzID0gWworICAgICAgICAncmVxdWlyZWQtZW50cnkxJywKKyAgICAgICAgJ3JlcXVpcmVkLWVudHJ5MicsCisgICAgICAgICdNRVRBLUlORi9jb20vYW5kcm9pZC9tZXRhZGF0YScsCisgICAgXQorICAgIHppcF9maWxlID0gc2VsZi5fY29uc3RydWN0X3ppcF9wYWNrYWdlKGVudHJpZXMpCisgICAgcHJvcGVydHlfZmlsZXMgPSBUZXN0UHJvcGVydHlGaWxlcygpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGUsICdyJykgYXMgemlwX2ZwOgorICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICAgcmF3X21ldGFkYXRhID0gcHJvcGVydHlfZmlsZXMuX0dldFByb3BlcnR5RmlsZXNTdHJpbmcoCisgICAgICAgICAgemlwX2ZwLCByZXNlcnZlX3NwYWNlPUZhbHNlKQorICAgICAgc3RyZWFtaW5nX21ldGFkYXRhID0gcHJvcGVydHlfZmlsZXMuRmluYWxpemUoemlwX2ZwLCBsZW4ocmF3X21ldGFkYXRhKSkKKyAgICB0b2tlbnMgPSBzZWxmLl9wYXJzZV9wcm9wZXJ0eV9maWxlc19zdHJpbmcoc3RyZWFtaW5nX21ldGFkYXRhKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4odG9rZW5zKSkKKyAgICAjICdNRVRBLUlORi9jb20vYW5kcm9pZC9tZXRhZGF0YScgd2lsbCBiZSBrZXknZCBhcyAnbWV0YWRhdGEnIGluIHRoZQorICAgICMgc3RyZWFtaW5nIG1ldGFkYXRhLgorICAgIGVudHJpZXNbMl0gPSAnbWV0YWRhdGEnCisgICAgc2VsZi5fdmVyaWZ5X2VudHJpZXMoemlwX2ZpbGUsIHRva2VucywgZW50cmllcykKKworICBkZWYgdGVzdF9GaW5hbGl6ZV9hc3NlcnRSZXNlcnZlZExlbmd0aChzZWxmKToKKyAgICBlbnRyaWVzID0gKAorICAgICAgICAncmVxdWlyZWQtZW50cnkxJywKKyAgICAgICAgJ3JlcXVpcmVkLWVudHJ5MicsCisgICAgICAgICdvcHRpb25hbC1lbnRyeTEnLAorICAgICAgICAnb3B0aW9uYWwtZW50cnkyJywKKyAgICAgICAgJ01FVEEtSU5GL2NvbS9hbmRyb2lkL21ldGFkYXRhJywKKyAgICApCisgICAgemlwX2ZpbGUgPSBzZWxmLl9jb25zdHJ1Y3RfemlwX3BhY2thZ2UoZW50cmllcykKKyAgICBwcm9wZXJ0eV9maWxlcyA9IFRlc3RQcm9wZXJ0eUZpbGVzKCkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZSwgJ3InKSBhcyB6aXBfZnA6CisgICAgICAjIEZpcnN0IGdldCB0aGUgcmF3IG1ldGFkYXRhIHN0cmluZyAoaS5lLiB3aXRob3V0IHBhZGRpbmcgc3BhY2UpLgorICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICAgcmF3X21ldGFkYXRhID0gcHJvcGVydHlfZmlsZXMuX0dldFByb3BlcnR5RmlsZXNTdHJpbmcoCisgICAgICAgICAgemlwX2ZwLCByZXNlcnZlX3NwYWNlPUZhbHNlKQorICAgICAgcmF3X2xlbmd0aCA9IGxlbihyYXdfbWV0YWRhdGEpCisKKyAgICAgICMgTm93IHBhc3MgaW4gdGhlIGV4YWN0IGV4cGVjdGVkIGxlbmd0aC4KKyAgICAgIHN0cmVhbWluZ19tZXRhZGF0YSA9IHByb3BlcnR5X2ZpbGVzLkZpbmFsaXplKHppcF9mcCwgcmF3X2xlbmd0aCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2xlbmd0aCwgbGVuKHN0cmVhbWluZ19tZXRhZGF0YSkpCisKKyAgICAgICMgT3IgcGFzcyBpbiBpbnN1ZmZpY2llbnQgbGVuZ3RoLgorICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsCisgICAgICAgICAgcHJvcGVydHlfZmlsZXMuRmluYWxpemUsCisgICAgICAgICAgemlwX2ZwLAorICAgICAgICAgIHJhd19sZW5ndGggLSAxKQorCisgICAgICAjIE9yIHBhc3MgaW4gYSBtdWNoIGxhcmdlciBzaXplLgorICAgICAgc3RyZWFtaW5nX21ldGFkYXRhID0gcHJvcGVydHlfZmlsZXMuRmluYWxpemUoCisgICAgICAgICAgemlwX2ZwLAorICAgICAgICAgIHJhd19sZW5ndGggKyAyMCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2xlbmd0aCArIDIwLCBsZW4oc3RyZWFtaW5nX21ldGFkYXRhKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyAnICogMjAsIHN0cmVhbWluZ19tZXRhZGF0YVtyYXdfbGVuZ3RoOl0pCisKKyAgZGVmIHRlc3RfVmVyaWZ5KHNlbGYpOgorICAgIGVudHJpZXMgPSAoCisgICAgICAgICdyZXF1aXJlZC1lbnRyeTEnLAorICAgICAgICAncmVxdWlyZWQtZW50cnkyJywKKyAgICAgICAgJ29wdGlvbmFsLWVudHJ5MScsCisgICAgICAgICdvcHRpb25hbC1lbnRyeTInLAorICAgICAgICAnTUVUQS1JTkYvY29tL2FuZHJvaWQvbWV0YWRhdGEnLAorICAgICkKKyAgICB6aXBfZmlsZSA9IHNlbGYuX2NvbnN0cnVjdF96aXBfcGFja2FnZShlbnRyaWVzKQorICAgIHByb3BlcnR5X2ZpbGVzID0gVGVzdFByb3BlcnR5RmlsZXMoKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHppcF9maWxlLCAncicpIGFzIHppcF9mcDoKKyAgICAgICMgRmlyc3QgZ2V0IHRoZSByYXcgbWV0YWRhdGEgc3RyaW5nIChpLmUuIHdpdGhvdXQgcGFkZGluZyBzcGFjZSkuCisgICAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCisgICAgICByYXdfbWV0YWRhdGEgPSBwcm9wZXJ0eV9maWxlcy5fR2V0UHJvcGVydHlGaWxlc1N0cmluZygKKyAgICAgICAgICB6aXBfZnAsIHJlc2VydmVfc3BhY2U9RmFsc2UpCisKKyAgICAgICMgU2hvdWxkIHBhc3MgdGhlIHRlc3QgaWYgdmVyaWZpY2F0aW9uIHBhc3Nlcy4KKyAgICAgIHByb3BlcnR5X2ZpbGVzLlZlcmlmeSh6aXBfZnAsIHJhd19tZXRhZGF0YSkKKworICAgICAgIyBPciByYWlzZSBvbiB2ZXJpZmljYXRpb24gZmFpbHVyZS4KKyAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBwcm9wZXJ0eV9maWxlcy5WZXJpZnksIHppcF9mcCwgcmF3X21ldGFkYXRhICsgJ3gnKQorCisKK2NsYXNzIFN0cmVhbWluZ1Byb3BlcnR5RmlsZXNUZXN0KFByb3BlcnR5RmlsZXNUZXN0KToKKyAgIiIiQWRkaXRpb25hbCBzYW5pdHkgY2hlY2tzIHNwZWNpYWxpemVkIGZvciBTdHJlYW1pbmdQcm9wZXJ0eUZpbGVzLiIiIgorCisgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgcHJvcGVydHlfZmlsZXMgPSBTdHJlYW1pbmdQcm9wZXJ0eUZpbGVzKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdvdGEtc3RyZWFtaW5nLXByb3BlcnR5LWZpbGVzJywgcHJvcGVydHlfZmlsZXMubmFtZSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAoCisgICAgICAgICAgICAncGF5bG9hZC5iaW4nLAorICAgICAgICAgICAgJ3BheWxvYWRfcHJvcGVydGllcy50eHQnLAorICAgICAgICApLAorICAgICAgICBwcm9wZXJ0eV9maWxlcy5yZXF1aXJlZCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAoCisgICAgICAgICAgICAnY2FyZV9tYXAudHh0JywKKyAgICAgICAgICAgICdjb21wYXRpYmlsaXR5LnppcCcsCisgICAgICAgICksCisgICAgICAgIHByb3BlcnR5X2ZpbGVzLm9wdGlvbmFsKQorCisgIGRlZiB0ZXN0X0NvbXB1dGUoc2VsZik6CisgICAgZW50cmllcyA9ICgKKyAgICAgICAgJ3BheWxvYWQuYmluJywKKyAgICAgICAgJ3BheWxvYWRfcHJvcGVydGllcy50eHQnLAorICAgICAgICAnY2FyZV9tYXAudHh0JywKKyAgICAgICAgJ2NvbXBhdGliaWxpdHkuemlwJywKKyAgICApCisgICAgemlwX2ZpbGUgPSBzZWxmLl9jb25zdHJ1Y3RfemlwX3BhY2thZ2UoZW50cmllcykKKyAgICBwcm9wZXJ0eV9maWxlcyA9IFN0cmVhbWluZ1Byb3BlcnR5RmlsZXMoKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHppcF9maWxlLCAncicpIGFzIHppcF9mcDoKKyAgICAgIHByb3BlcnR5X2ZpbGVzX3N0cmluZyA9IHByb3BlcnR5X2ZpbGVzLkNvbXB1dGUoemlwX2ZwKQorCisgICAgdG9rZW5zID0gc2VsZi5fcGFyc2VfcHJvcGVydHlfZmlsZXNfc3RyaW5nKHByb3BlcnR5X2ZpbGVzX3N0cmluZykKKyAgICBzZWxmLmFzc2VydEVxdWFsKDUsIGxlbih0b2tlbnMpKQorICAgIHNlbGYuX3ZlcmlmeV9lbnRyaWVzKHppcF9maWxlLCB0b2tlbnMsIGVudHJpZXMpCisKKyAgZGVmIHRlc3RfRmluYWxpemUoc2VsZik6CisgICAgZW50cmllcyA9IFsKKyAgICAgICAgJ3BheWxvYWQuYmluJywKKyAgICAgICAgJ3BheWxvYWRfcHJvcGVydGllcy50eHQnLAorICAgICAgICAnY2FyZV9tYXAudHh0JywKKyAgICAgICAgJ2NvbXBhdGliaWxpdHkuemlwJywKKyAgICAgICAgJ01FVEEtSU5GL2NvbS9hbmRyb2lkL21ldGFkYXRhJywKKyAgICBdCisgICAgemlwX2ZpbGUgPSBzZWxmLl9jb25zdHJ1Y3RfemlwX3BhY2thZ2UoZW50cmllcykKKyAgICBwcm9wZXJ0eV9maWxlcyA9IFN0cmVhbWluZ1Byb3BlcnR5RmlsZXMoKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHppcF9maWxlLCAncicpIGFzIHppcF9mcDoKKyAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKKyAgICAgIHJhd19tZXRhZGF0YSA9IHByb3BlcnR5X2ZpbGVzLl9HZXRQcm9wZXJ0eUZpbGVzU3RyaW5nKAorICAgICAgICAgIHppcF9mcCwgcmVzZXJ2ZV9zcGFjZT1GYWxzZSkKKyAgICAgIHN0cmVhbWluZ19tZXRhZGF0YSA9IHByb3BlcnR5X2ZpbGVzLkZpbmFsaXplKHppcF9mcCwgbGVuKHJhd19tZXRhZGF0YSkpCisgICAgdG9rZW5zID0gc2VsZi5fcGFyc2VfcHJvcGVydHlfZmlsZXNfc3RyaW5nKHN0cmVhbWluZ19tZXRhZGF0YSkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgbGVuKHRva2VucykpCisgICAgIyAnTUVUQS1JTkYvY29tL2FuZHJvaWQvbWV0YWRhdGEnIHdpbGwgYmUga2V5J2QgYXMgJ21ldGFkYXRhJyBpbiB0aGUKKyAgICAjIHN0cmVhbWluZyBtZXRhZGF0YS4KKyAgICBlbnRyaWVzWzRdID0gJ21ldGFkYXRhJworICAgIHNlbGYuX3ZlcmlmeV9lbnRyaWVzKHppcF9maWxlLCB0b2tlbnMsIGVudHJpZXMpCisKKyAgZGVmIHRlc3RfVmVyaWZ5KHNlbGYpOgorICAgIGVudHJpZXMgPSAoCisgICAgICAgICdwYXlsb2FkLmJpbicsCisgICAgICAgICdwYXlsb2FkX3Byb3BlcnRpZXMudHh0JywKKyAgICAgICAgJ2NhcmVfbWFwLnR4dCcsCisgICAgICAgICdjb21wYXRpYmlsaXR5LnppcCcsCisgICAgICAgICdNRVRBLUlORi9jb20vYW5kcm9pZC9tZXRhZGF0YScsCisgICAgKQorICAgIHppcF9maWxlID0gc2VsZi5fY29uc3RydWN0X3ppcF9wYWNrYWdlKGVudHJpZXMpCisgICAgcHJvcGVydHlfZmlsZXMgPSBTdHJlYW1pbmdQcm9wZXJ0eUZpbGVzKCkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZSwgJ3InKSBhcyB6aXBfZnA6CisgICAgICAjIEZpcnN0IGdldCB0aGUgcmF3IG1ldGFkYXRhIHN0cmluZyAoaS5lLiB3aXRob3V0IHBhZGRpbmcgc3BhY2UpLgorICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICAgcmF3X21ldGFkYXRhID0gcHJvcGVydHlfZmlsZXMuX0dldFByb3BlcnR5RmlsZXNTdHJpbmcoCisgICAgICAgICAgemlwX2ZwLCByZXNlcnZlX3NwYWNlPUZhbHNlKQorCisgICAgICAjIFNob3VsZCBwYXNzIHRoZSB0ZXN0IGlmIHZlcmlmaWNhdGlvbiBwYXNzZXMuCisgICAgICBwcm9wZXJ0eV9maWxlcy5WZXJpZnkoemlwX2ZwLCByYXdfbWV0YWRhdGEpCisKKyAgICAgICMgT3IgcmFpc2Ugb24gdmVyaWZpY2F0aW9uIGZhaWx1cmUuCisgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICBBc3NlcnRpb25FcnJvciwgcHJvcGVydHlfZmlsZXMuVmVyaWZ5LCB6aXBfZnAsIHJhd19tZXRhZGF0YSArICd4JykKKworCitjbGFzcyBBYk90YVByb3BlcnR5RmlsZXNUZXN0KFByb3BlcnR5RmlsZXNUZXN0KToKKyAgIiIiQWRkaXRpb25hbCBzYW5pdHkgY2hlY2tzIHNwZWNpYWxpemVkIGZvciBBYk90YVByb3BlcnR5RmlsZXMuIiIiCisKKyAgIyBUaGUgc2l6ZSBmb3IgcGF5bG9hZCBhbmQgbWV0YWRhdGEgc2lnbmF0dXJlIHNpemUuCisgIFNJR05BVFVSRV9TSVpFID0gMjU2CisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgIHNlbGYudGVzdGRhdGFfZGlyID0gdGVzdF91dGlscy5nZXRfdGVzdGRhdGFfZGlyKCkKKyAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi50ZXN0ZGF0YV9kaXIpKQorCisgICAgY29tbW9uLk9QVElPTlMud2lwZV91c2VyX2RhdGEgPSBGYWxzZQorICAgIGNvbW1vbi5PUFRJT05TLnBheWxvYWRfc2lnbmVyID0gTm9uZQorICAgIGNvbW1vbi5PUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MgPSBOb25lCisgICAgY29tbW9uLk9QVElPTlMucGFja2FnZV9rZXkgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICd0ZXN0a2V5JykKKyAgICBjb21tb24uT1BUSU9OUy5rZXlfcGFzc3dvcmRzID0geworICAgICAgICBjb21tb24uT1BUSU9OUy5wYWNrYWdlX2tleSA6IE5vbmUsCisgICAgfQorCisgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgcHJvcGVydHlfZmlsZXMgPSBBYk90YVByb3BlcnR5RmlsZXMoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ290YS1wcm9wZXJ0eS1maWxlcycsIHByb3BlcnR5X2ZpbGVzLm5hbWUpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgKAorICAgICAgICAgICAgJ3BheWxvYWQuYmluJywKKyAgICAgICAgICAgICdwYXlsb2FkX3Byb3BlcnRpZXMudHh0JywKKyAgICAgICAgKSwKKyAgICAgICAgcHJvcGVydHlfZmlsZXMucmVxdWlyZWQpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgKAorICAgICAgICAgICAgJ2NhcmVfbWFwLnR4dCcsCisgICAgICAgICAgICAnY29tcGF0aWJpbGl0eS56aXAnLAorICAgICAgICApLAorICAgICAgICBwcm9wZXJ0eV9maWxlcy5vcHRpb25hbCkKKworICBkZWYgdGVzdF9HZXRQYXlsb2FkTWV0YWRhdGFPZmZzZXRBbmRTaXplKHNlbGYpOgorICAgIHRhcmdldF9maWxlID0gY29uc3RydWN0X3RhcmdldF9maWxlcygpCisgICAgcGF5bG9hZCA9IFBheWxvYWQoKQorICAgIHBheWxvYWQuR2VuZXJhdGUodGFyZ2V0X2ZpbGUpCisKKyAgICBwYXlsb2FkX3NpZ25lciA9IFBheWxvYWRTaWduZXIoKQorICAgIHBheWxvYWQuU2lnbihwYXlsb2FkX3NpZ25lcikKKworICAgIG91dHB1dF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy56aXAnKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlLCAndycpIGFzIG91dHB1dF96aXA6CisgICAgICBwYXlsb2FkLldyaXRlVG9aaXAob3V0cHV0X3ppcCkKKworICAgICMgRmluZCBvdXQgdGhlIHBheWxvYWQgbWV0YWRhdGEgb2Zmc2V0IGFuZCBzaXplLgorICAgIHByb3BlcnR5X2ZpbGVzID0gQWJPdGFQcm9wZXJ0eUZpbGVzKCkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShvdXRwdXRfZmlsZSkgYXMgaW5wdXRfemlwOgorICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICAgcGF5bG9hZF9vZmZzZXQsIG1ldGFkYXRhX3RvdGFsID0gKAorICAgICAgICAgIHByb3BlcnR5X2ZpbGVzLl9HZXRQYXlsb2FkTWV0YWRhdGFPZmZzZXRBbmRTaXplKGlucHV0X3ppcCkpCisKKyAgICAjIFJlYWQgaW4gdGhlIG1ldGFkYXRhIHNpZ25hdHVyZSBkaXJlY3RseS4KKyAgICB3aXRoIG9wZW4ob3V0cHV0X2ZpbGUsICdyYicpIGFzIHZlcmlmeV9mcDoKKyAgICAgIHZlcmlmeV9mcC5zZWVrKHBheWxvYWRfb2Zmc2V0ICsgbWV0YWRhdGFfdG90YWwgLSBzZWxmLlNJR05BVFVSRV9TSVpFKQorICAgICAgbWV0YWRhdGFfc2lnbmF0dXJlID0gdmVyaWZ5X2ZwLnJlYWQoc2VsZi5TSUdOQVRVUkVfU0laRSkKKworICAgICMgTm93IHdlIGV4dHJhY3QgdGhlIG1ldGFkYXRhIGhhc2ggdmlhIGJyaWxsb191cGRhdGVfcGF5bG9hZCBzY3JpcHQsIHdoaWNoCisgICAgIyB3aWxsIHNlcnZlIGFzIHRoZSBvcmFjbGUgcmVzdWx0LgorICAgIHBheWxvYWRfc2lnX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ic2lnLSIsIHN1ZmZpeD0iLmJpbiIpCisgICAgbWV0YWRhdGFfc2lnX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ic2lnLSIsIHN1ZmZpeD0iLmJpbiIpCisgICAgY21kID0gWydicmlsbG9fdXBkYXRlX3BheWxvYWQnLCAnaGFzaCcsCisgICAgICAgICAgICctLXVuc2lnbmVkX3BheWxvYWQnLCBwYXlsb2FkLnBheWxvYWRfZmlsZSwKKyAgICAgICAgICAgJy0tc2lnbmF0dXJlX3NpemUnLCBzdHIoc2VsZi5TSUdOQVRVUkVfU0laRSksCisgICAgICAgICAgICctLW1ldGFkYXRhX2hhc2hfZmlsZScsIG1ldGFkYXRhX3NpZ19maWxlLAorICAgICAgICAgICAnLS1wYXlsb2FkX2hhc2hfZmlsZScsIHBheWxvYWRfc2lnX2ZpbGVdCisgICAgcHJvYyA9IGNvbW1vbi5SdW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgc3Rkb3V0ZGF0YSwgXyA9IHByb2MuY29tbXVuaWNhdGUoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIDAsIHByb2MucmV0dXJuY29kZSwKKyAgICAgICAgJ0ZhaWxlZCB0byBydW4gYnJpbGxvX3VwZGF0ZV9wYXlsb2FkOiB7fScuZm9ybWF0KHN0ZG91dGRhdGEpKQorCisgICAgc2lnbmVkX21ldGFkYXRhX3NpZ19maWxlID0gcGF5bG9hZF9zaWduZXIuU2lnbihtZXRhZGF0YV9zaWdfZmlsZSkKKworICAgICMgRmluYWxseSB3ZSBjYW4gY29tcGFyZSB0aGUgdHdvIHNpZ25hdHVyZXMuCisgICAgd2l0aCBvcGVuKHNpZ25lZF9tZXRhZGF0YV9zaWdfZmlsZSwgJ3JiJykgYXMgdmVyaWZ5X2ZwOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJpZnlfZnAucmVhZCgpLCBtZXRhZGF0YV9zaWduYXR1cmUpCisKKyAgQHN0YXRpY21ldGhvZAorICBkZWYgX2NvbnN0cnVjdF96aXBfcGFja2FnZV93aXRoVmFsaWRQYXlsb2FkKHdpdGhfbWV0YWRhdGE9RmFsc2UpOgorICAgICMgQ2Fubm90IHVzZSBfY29uc3RydWN0X3ppcF9wYWNrYWdlKCkgc2luY2Ugd2UgbmVlZCBhICJ2YWxpZCIgcGF5bG9hZC5iaW4uCisgICAgdGFyZ2V0X2ZpbGUgPSBjb25zdHJ1Y3RfdGFyZ2V0X2ZpbGVzKCkKKyAgICBwYXlsb2FkID0gUGF5bG9hZCgpCisgICAgcGF5bG9hZC5HZW5lcmF0ZSh0YXJnZXRfZmlsZSkKKworICAgIHBheWxvYWRfc2lnbmVyID0gUGF5bG9hZFNpZ25lcigpCisgICAgcGF5bG9hZC5TaWduKHBheWxvYWRfc2lnbmVyKQorCisgICAgemlwX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHN1ZmZpeD0nLnppcCcpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGUsICd3JykgYXMgemlwX2ZwOgorICAgICAgIyAncGF5bG9hZC5iaW4nLAorICAgICAgcGF5bG9hZC5Xcml0ZVRvWmlwKHppcF9mcCkKKworICAgICAgIyBPdGhlciBlbnRyaWVzLgorICAgICAgZW50cmllcyA9IFsnY2FyZV9tYXAudHh0JywgJ2NvbXBhdGliaWxpdHkuemlwJ10KKworICAgICAgIyBQdXQgTUVUQS1JTkYvY29tL2FuZHJvaWQvbWV0YWRhdGEgaWYgbmVlZGVkLgorICAgICAgaWYgd2l0aF9tZXRhZGF0YToKKyAgICAgICAgZW50cmllcy5hcHBlbmQoJ01FVEEtSU5GL2NvbS9hbmRyb2lkL21ldGFkYXRhJykKKworICAgICAgZm9yIGVudHJ5IGluIGVudHJpZXM6CisgICAgICAgIHppcF9mcC53cml0ZXN0cigKKyAgICAgICAgICAgIGVudHJ5LCBlbnRyeS5yZXBsYWNlKCcuJywgJy0nKS51cHBlcigpLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICByZXR1cm4gemlwX2ZpbGUKKworICBkZWYgdGVzdF9Db21wdXRlKHNlbGYpOgorICAgIHppcF9maWxlID0gc2VsZi5fY29uc3RydWN0X3ppcF9wYWNrYWdlX3dpdGhWYWxpZFBheWxvYWQoKQorICAgIHByb3BlcnR5X2ZpbGVzID0gQWJPdGFQcm9wZXJ0eUZpbGVzKCkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZSwgJ3InKSBhcyB6aXBfZnA6CisgICAgICBwcm9wZXJ0eV9maWxlc19zdHJpbmcgPSBwcm9wZXJ0eV9maWxlcy5Db21wdXRlKHppcF9mcCkKKworICAgIHRva2VucyA9IHNlbGYuX3BhcnNlX3Byb3BlcnR5X2ZpbGVzX3N0cmluZyhwcm9wZXJ0eV9maWxlc19zdHJpbmcpCisgICAgIyAiNiIgaW5kY2x1ZGVzIHRoZSBmb3VyIGVudHJpZXMgYWJvdmUsIG9uZSBtZXRhZGF0YSBlbnRyeSwgYW5kIG9uZSBlbnRyeQorICAgICMgZm9yIHBheWxvYWQtbWV0YWRhdGEuYmluLgorICAgIHNlbGYuYXNzZXJ0RXF1YWwoNiwgbGVuKHRva2VucykpCisgICAgc2VsZi5fdmVyaWZ5X2VudHJpZXMoCisgICAgICAgIHppcF9maWxlLCB0b2tlbnMsICgnY2FyZV9tYXAudHh0JywgJ2NvbXBhdGliaWxpdHkuemlwJykpCisKKyAgZGVmIHRlc3RfRmluYWxpemUoc2VsZik6CisgICAgemlwX2ZpbGUgPSBzZWxmLl9jb25zdHJ1Y3RfemlwX3BhY2thZ2Vfd2l0aFZhbGlkUGF5bG9hZCh3aXRoX21ldGFkYXRhPVRydWUpCisgICAgcHJvcGVydHlfZmlsZXMgPSBBYk90YVByb3BlcnR5RmlsZXMoKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHppcF9maWxlLCAncicpIGFzIHppcF9mcDoKKyAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKKyAgICAgIHJhd19tZXRhZGF0YSA9IHByb3BlcnR5X2ZpbGVzLl9HZXRQcm9wZXJ0eUZpbGVzU3RyaW5nKAorICAgICAgICAgIHppcF9mcCwgcmVzZXJ2ZV9zcGFjZT1GYWxzZSkKKyAgICAgIHByb3BlcnR5X2ZpbGVzX3N0cmluZyA9IHByb3BlcnR5X2ZpbGVzLkZpbmFsaXplKHppcF9mcCwgbGVuKHJhd19tZXRhZGF0YSkpCisKKyAgICB0b2tlbnMgPSBzZWxmLl9wYXJzZV9wcm9wZXJ0eV9maWxlc19zdHJpbmcocHJvcGVydHlfZmlsZXNfc3RyaW5nKQorICAgICMgIjYiIGluZGNsdWRlcyB0aGUgZm91ciBlbnRyaWVzIGFib3ZlLCBvbmUgbWV0YWRhdGEgZW50cnksIGFuZCBvbmUgZW50cnkKKyAgICAjIGZvciBwYXlsb2FkLW1ldGFkYXRhLmJpbi4KKyAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGxlbih0b2tlbnMpKQorICAgIHNlbGYuX3ZlcmlmeV9lbnRyaWVzKAorICAgICAgICB6aXBfZmlsZSwgdG9rZW5zLCAoJ2NhcmVfbWFwLnR4dCcsICdjb21wYXRpYmlsaXR5LnppcCcpKQorCisgIGRlZiB0ZXN0X1ZlcmlmeShzZWxmKToKKyAgICB6aXBfZmlsZSA9IHNlbGYuX2NvbnN0cnVjdF96aXBfcGFja2FnZV93aXRoVmFsaWRQYXlsb2FkKHdpdGhfbWV0YWRhdGE9VHJ1ZSkKKyAgICBwcm9wZXJ0eV9maWxlcyA9IEFiT3RhUHJvcGVydHlGaWxlcygpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGUsICdyJykgYXMgemlwX2ZwOgorICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICAgcmF3X21ldGFkYXRhID0gcHJvcGVydHlfZmlsZXMuX0dldFByb3BlcnR5RmlsZXNTdHJpbmcoCisgICAgICAgICAgemlwX2ZwLCByZXNlcnZlX3NwYWNlPUZhbHNlKQorCisgICAgICBwcm9wZXJ0eV9maWxlcy5WZXJpZnkoemlwX2ZwLCByYXdfbWV0YWRhdGEpCisKKworY2xhc3MgTm9uQWJPdGFQcm9wZXJ0eUZpbGVzVGVzdChQcm9wZXJ0eUZpbGVzVGVzdCk6CisgICIiIkFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBzcGVjaWFsaXplZCBmb3IgTm9uQWJPdGFQcm9wZXJ0eUZpbGVzLiIiIgorCisgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgcHJvcGVydHlfZmlsZXMgPSBOb25BYk90YVByb3BlcnR5RmlsZXMoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ290YS1wcm9wZXJ0eS1maWxlcycsIHByb3BlcnR5X2ZpbGVzLm5hbWUpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgoKSwgcHJvcGVydHlfZmlsZXMucmVxdWlyZWQpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgoKSwgcHJvcGVydHlfZmlsZXMub3B0aW9uYWwpCisKKyAgZGVmIHRlc3RfQ29tcHV0ZShzZWxmKToKKyAgICBlbnRyaWVzID0gKCkKKyAgICB6aXBfZmlsZSA9IHNlbGYuX2NvbnN0cnVjdF96aXBfcGFja2FnZShlbnRyaWVzKQorICAgIHByb3BlcnR5X2ZpbGVzID0gTm9uQWJPdGFQcm9wZXJ0eUZpbGVzKCkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZSkgYXMgemlwX2ZwOgorICAgICAgcHJvcGVydHlfZmlsZXNfc3RyaW5nID0gcHJvcGVydHlfZmlsZXMuQ29tcHV0ZSh6aXBfZnApCisKKyAgICB0b2tlbnMgPSBzZWxmLl9wYXJzZV9wcm9wZXJ0eV9maWxlc19zdHJpbmcocHJvcGVydHlfZmlsZXNfc3RyaW5nKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHRva2VucykpCisgICAgc2VsZi5fdmVyaWZ5X2VudHJpZXMoemlwX2ZpbGUsIHRva2VucywgZW50cmllcykKKworICBkZWYgdGVzdF9GaW5hbGl6ZShzZWxmKToKKyAgICBlbnRyaWVzID0gWworICAgICAgICAnTUVUQS1JTkYvY29tL2FuZHJvaWQvbWV0YWRhdGEnLAorICAgIF0KKyAgICB6aXBfZmlsZSA9IHNlbGYuX2NvbnN0cnVjdF96aXBfcGFja2FnZShlbnRyaWVzKQorICAgIHByb3BlcnR5X2ZpbGVzID0gTm9uQWJPdGFQcm9wZXJ0eUZpbGVzKCkKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZSkgYXMgemlwX2ZwOgorICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICAgcmF3X21ldGFkYXRhID0gcHJvcGVydHlfZmlsZXMuX0dldFByb3BlcnR5RmlsZXNTdHJpbmcoCisgICAgICAgICAgemlwX2ZwLCByZXNlcnZlX3NwYWNlPUZhbHNlKQorICAgICAgcHJvcGVydHlfZmlsZXNfc3RyaW5nID0gcHJvcGVydHlfZmlsZXMuRmluYWxpemUoemlwX2ZwLCBsZW4ocmF3X21ldGFkYXRhKSkKKyAgICB0b2tlbnMgPSBzZWxmLl9wYXJzZV9wcm9wZXJ0eV9maWxlc19zdHJpbmcocHJvcGVydHlfZmlsZXNfc3RyaW5nKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4odG9rZW5zKSkKKyAgICAjICdNRVRBLUlORi9jb20vYW5kcm9pZC9tZXRhZGF0YScgd2lsbCBiZSBrZXknZCBhcyAnbWV0YWRhdGEnLgorICAgIGVudHJpZXNbMF0gPSAnbWV0YWRhdGEnCisgICAgc2VsZi5fdmVyaWZ5X2VudHJpZXMoemlwX2ZpbGUsIHRva2VucywgZW50cmllcykKKworICBkZWYgdGVzdF9WZXJpZnkoc2VsZik6CisgICAgZW50cmllcyA9ICgKKyAgICAgICAgJ01FVEEtSU5GL2NvbS9hbmRyb2lkL21ldGFkYXRhJywKKyAgICApCisgICAgemlwX2ZpbGUgPSBzZWxmLl9jb25zdHJ1Y3RfemlwX3BhY2thZ2UoZW50cmllcykKKyAgICBwcm9wZXJ0eV9maWxlcyA9IE5vbkFiT3RhUHJvcGVydHlGaWxlcygpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGUpIGFzIHppcF9mcDoKKyAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKKyAgICAgIHJhd19tZXRhZGF0YSA9IHByb3BlcnR5X2ZpbGVzLl9HZXRQcm9wZXJ0eUZpbGVzU3RyaW5nKAorICAgICAgICAgIHppcF9mcCwgcmVzZXJ2ZV9zcGFjZT1GYWxzZSkKKworICAgICAgcHJvcGVydHlfZmlsZXMuVmVyaWZ5KHppcF9mcCwgcmF3X21ldGFkYXRhKQorCisKK2NsYXNzIFBheWxvYWRTaWduZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICBTSUdGSUxFID0gJ3NpZ2ZpbGUuYmluJworICBTSUdORURfU0lHRklMRSA9ICdzaWduZWQtc2lnZmlsZS5iaW4nCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgIHNlbGYudGVzdGRhdGFfZGlyID0gdGVzdF91dGlscy5nZXRfdGVzdGRhdGFfZGlyKCkKKyAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi50ZXN0ZGF0YV9kaXIpKQorCisgICAgY29tbW9uLk9QVElPTlMucGF5bG9hZF9zaWduZXIgPSBOb25lCisgICAgY29tbW9uLk9QVElPTlMucGF5bG9hZF9zaWduZXJfYXJncyA9IFtdCisgICAgY29tbW9uLk9QVElPTlMucGFja2FnZV9rZXkgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICd0ZXN0a2V5JykKKyAgICBjb21tb24uT1BUSU9OUy5rZXlfcGFzc3dvcmRzID0geworICAgICAgICBjb21tb24uT1BUSU9OUy5wYWNrYWdlX2tleSA6IE5vbmUsCisgICAgfQorCisgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICBjb21tb24uQ2xlYW51cCgpCisKKyAgZGVmIF9hc3NlcnRGaWxlc0VxdWFsKHNlbGYsIGZpbGUxLCBmaWxlMik6CisgICAgd2l0aCBvcGVuKGZpbGUxLCAncmInKSBhcyBmcDEsIG9wZW4oZmlsZTIsICdyYicpIGFzIGZwMjoKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAxLnJlYWQoKSwgZnAyLnJlYWQoKSkKKworICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgIHBheWxvYWRfc2lnbmVyID0gUGF5bG9hZFNpZ25lcigpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnb3BlbnNzbCcsIHBheWxvYWRfc2lnbmVyLnNpZ25lcikKKworICBkZWYgdGVzdF9pbml0X3dpdGhQYXNzd29yZChzZWxmKToKKyAgICBjb21tb24uT1BUSU9OUy5wYWNrYWdlX2tleSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgc2VsZi50ZXN0ZGF0YV9kaXIsICd0ZXN0a2V5X3dpdGhfcGFzc3dkJykKKyAgICBjb21tb24uT1BUSU9OUy5rZXlfcGFzc3dvcmRzID0geworICAgICAgICBjb21tb24uT1BUSU9OUy5wYWNrYWdlX2tleSA6ICdmb28nLAorICAgIH0KKyAgICBwYXlsb2FkX3NpZ25lciA9IFBheWxvYWRTaWduZXIoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ29wZW5zc2wnLCBwYXlsb2FkX3NpZ25lci5zaWduZXIpCisKKyAgZGVmIHRlc3RfaW5pdF93aXRoRXh0ZXJuYWxTaWduZXIoc2VsZik6CisgICAgY29tbW9uLk9QVElPTlMucGF5bG9hZF9zaWduZXIgPSAnYWJjJworICAgIGNvbW1vbi5PUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MgPSBbJ2FyZzEnLCAnYXJnMiddCisgICAgcGF5bG9hZF9zaWduZXIgPSBQYXlsb2FkU2lnbmVyKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmMnLCBwYXlsb2FkX3NpZ25lci5zaWduZXIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChbJ2FyZzEnLCAnYXJnMiddLCBwYXlsb2FkX3NpZ25lci5zaWduZXJfYXJncykKKworICBkZWYgdGVzdF9TaWduKHNlbGYpOgorICAgIHBheWxvYWRfc2lnbmVyID0gUGF5bG9hZFNpZ25lcigpCisgICAgaW5wdXRfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2Rpciwgc2VsZi5TSUdGSUxFKQorICAgIHNpZ25lZF9maWxlID0gcGF5bG9hZF9zaWduZXIuU2lnbihpbnB1dF9maWxlKQorCisgICAgdmVyaWZ5X2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsIHNlbGYuU0lHTkVEX1NJR0ZJTEUpCisgICAgc2VsZi5fYXNzZXJ0RmlsZXNFcXVhbCh2ZXJpZnlfZmlsZSwgc2lnbmVkX2ZpbGUpCisKKyAgZGVmIHRlc3RfU2lnbl93aXRoRXh0ZXJuYWxTaWduZXJfb3BlbnNzbChzZWxmKToKKyAgICAiIiJVc2VzIG9wZW5zc2wgYXMgdGhlIGV4dGVybmFsIHBheWxvYWQgc2lnbmVyLiIiIgorICAgIGNvbW1vbi5PUFRJT05TLnBheWxvYWRfc2lnbmVyID0gJ29wZW5zc2wnCisgICAgY29tbW9uLk9QVElPTlMucGF5bG9hZF9zaWduZXJfYXJncyA9IFsKKyAgICAgICAgJ3BrZXl1dGwnLCAnLXNpZ24nLCAnLWtleWZvcm0nLCAnREVSJywgJy1pbmtleScsCisgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Rlc3RrZXkucGs4JyksCisgICAgICAgICctcGtleW9wdCcsICdkaWdlc3Q6c2hhMjU2J10KKyAgICBwYXlsb2FkX3NpZ25lciA9IFBheWxvYWRTaWduZXIoKQorICAgIGlucHV0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsIHNlbGYuU0lHRklMRSkKKyAgICBzaWduZWRfZmlsZSA9IHBheWxvYWRfc2lnbmVyLlNpZ24oaW5wdXRfZmlsZSkKKworICAgIHZlcmlmeV9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCBzZWxmLlNJR05FRF9TSUdGSUxFKQorICAgIHNlbGYuX2Fzc2VydEZpbGVzRXF1YWwodmVyaWZ5X2ZpbGUsIHNpZ25lZF9maWxlKQorCisgIGRlZiB0ZXN0X1NpZ25fd2l0aEV4dGVybmFsU2lnbmVyX3NjcmlwdChzZWxmKToKKyAgICAiIiJVc2VzIHRlc3RkYXRhL3BheWxvYWRfc2lnbmVyLnNoIGFzIHRoZSBleHRlcm5hbCBwYXlsb2FkIHNpZ25lci4iIiIKKyAgICBjb21tb24uT1BUSU9OUy5wYXlsb2FkX3NpZ25lciA9IG9zLnBhdGguam9pbigKKyAgICAgICAgc2VsZi50ZXN0ZGF0YV9kaXIsICdwYXlsb2FkX3NpZ25lci5zaCcpCisgICAgY29tbW9uLk9QVElPTlMucGF5bG9hZF9zaWduZXJfYXJncyA9IFsKKyAgICAgICAgb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCAndGVzdGtleS5wazgnKV0KKyAgICBwYXlsb2FkX3NpZ25lciA9IFBheWxvYWRTaWduZXIoKQorICAgIGlucHV0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsIHNlbGYuU0lHRklMRSkKKyAgICBzaWduZWRfZmlsZSA9IHBheWxvYWRfc2lnbmVyLlNpZ24oaW5wdXRfZmlsZSkKKworICAgIHZlcmlmeV9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCBzZWxmLlNJR05FRF9TSUdGSUxFKQorICAgIHNlbGYuX2Fzc2VydEZpbGVzRXF1YWwodmVyaWZ5X2ZpbGUsIHNpZ25lZF9maWxlKQorCisKK2NsYXNzIFBheWxvYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgc2VsZi50ZXN0ZGF0YV9kaXIgPSB0ZXN0X3V0aWxzLmdldF90ZXN0ZGF0YV9kaXIoKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnRlc3RkYXRhX2RpcikpCisKKyAgICBjb21tb24uT1BUSU9OUy53aXBlX3VzZXJfZGF0YSA9IEZhbHNlCisgICAgY29tbW9uLk9QVElPTlMucGF5bG9hZF9zaWduZXIgPSBOb25lCisgICAgY29tbW9uLk9QVElPTlMucGF5bG9hZF9zaWduZXJfYXJncyA9IE5vbmUKKyAgICBjb21tb24uT1BUSU9OUy5wYWNrYWdlX2tleSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Rlc3RrZXknKQorICAgIGNvbW1vbi5PUFRJT05TLmtleV9wYXNzd29yZHMgPSB7CisgICAgICAgIGNvbW1vbi5PUFRJT05TLnBhY2thZ2Vfa2V5IDogTm9uZSwKKyAgICB9CisKKyAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgIGNvbW1vbi5DbGVhbnVwKCkKKworICBAc3RhdGljbWV0aG9kCisgIGRlZiBfY3JlYXRlX3BheWxvYWRfZnVsbChzZWNvbmRhcnk9RmFsc2UpOgorICAgIHRhcmdldF9maWxlID0gY29uc3RydWN0X3RhcmdldF9maWxlcyhzZWNvbmRhcnkpCisgICAgcGF5bG9hZCA9IFBheWxvYWQoc2Vjb25kYXJ5KQorICAgIHBheWxvYWQuR2VuZXJhdGUodGFyZ2V0X2ZpbGUpCisgICAgcmV0dXJuIHBheWxvYWQKKworICBAc3RhdGljbWV0aG9kCisgIGRlZiBfY3JlYXRlX3BheWxvYWRfaW5jcmVtZW50YWwoKToKKyAgICB0YXJnZXRfZmlsZSA9IGNvbnN0cnVjdF90YXJnZXRfZmlsZXMoKQorICAgIHNvdXJjZV9maWxlID0gY29uc3RydWN0X3RhcmdldF9maWxlcygpCisgICAgcGF5bG9hZCA9IFBheWxvYWQoKQorICAgIHBheWxvYWQuR2VuZXJhdGUodGFyZ2V0X2ZpbGUsIHNvdXJjZV9maWxlKQorICAgIHJldHVybiBwYXlsb2FkCisKKyAgZGVmIHRlc3RfR2VuZXJhdGVfZnVsbChzZWxmKToKKyAgICBwYXlsb2FkID0gc2VsZi5fY3JlYXRlX3BheWxvYWRfZnVsbCgpCisgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHBheWxvYWQucGF5bG9hZF9maWxlKSkKKworICBkZWYgdGVzdF9HZW5lcmF0ZV9pbmNyZW1lbnRhbChzZWxmKToKKyAgICBwYXlsb2FkID0gc2VsZi5fY3JlYXRlX3BheWxvYWRfaW5jcmVtZW50YWwoKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhwYXlsb2FkLnBheWxvYWRfZmlsZSkpCisKKyAgZGVmIHRlc3RfR2VuZXJhdGVfYWRkaXRpb25hbEFyZ3Moc2VsZik6CisgICAgdGFyZ2V0X2ZpbGUgPSBjb25zdHJ1Y3RfdGFyZ2V0X2ZpbGVzKCkKKyAgICBzb3VyY2VfZmlsZSA9IGNvbnN0cnVjdF90YXJnZXRfZmlsZXMoKQorICAgIHBheWxvYWQgPSBQYXlsb2FkKCkKKyAgICAjIFRoaXMgc2hvdWxkIHdvcmsgdGhlIHNhbWUgYXMgY2FsbGluZyBwYXlsb2FkLkdlbmVyYXRlKHRhcmdldF9maWxlLAorICAgICMgc291cmNlX2ZpbGUpLgorICAgIHBheWxvYWQuR2VuZXJhdGUoCisgICAgICAgIHRhcmdldF9maWxlLCBhZGRpdGlvbmFsX2FyZ3M9WyItLXNvdXJjZV9pbWFnZSIsIHNvdXJjZV9maWxlXSkKKyAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF5bG9hZC5wYXlsb2FkX2ZpbGUpKQorCisgIGRlZiB0ZXN0X0dlbmVyYXRlX2ludmFsaWRJbnB1dChzZWxmKToKKyAgICB0YXJnZXRfZmlsZSA9IGNvbnN0cnVjdF90YXJnZXRfZmlsZXMoKQorICAgIGNvbW1vbi5aaXBEZWxldGUodGFyZ2V0X2ZpbGUsICdJTUFHRVMvdmVuZG9yLmltZycpCisgICAgcGF5bG9hZCA9IFBheWxvYWQoKQorICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBwYXlsb2FkLkdlbmVyYXRlLCB0YXJnZXRfZmlsZSkKKworICBkZWYgdGVzdF9TaWduX2Z1bGwoc2VsZik6CisgICAgcGF5bG9hZCA9IHNlbGYuX2NyZWF0ZV9wYXlsb2FkX2Z1bGwoKQorICAgIHBheWxvYWQuU2lnbihQYXlsb2FkU2lnbmVyKCkpCisKKyAgICBvdXRwdXRfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUoc3VmZml4PScuemlwJykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShvdXRwdXRfZmlsZSwgJ3cnKSBhcyBvdXRwdXRfemlwOgorICAgICAgcGF5bG9hZC5Xcml0ZVRvWmlwKG91dHB1dF96aXApCisKKyAgICBpbXBvcnQgY2hlY2tfb3RhX3BhY2thZ2Vfc2lnbmF0dXJlCisgICAgY2hlY2tfb3RhX3BhY2thZ2Vfc2lnbmF0dXJlLlZlcmlmeUFiT3RhUGF5bG9hZCgKKyAgICAgICAgb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCAndGVzdGtleS54NTA5LnBlbScpLAorICAgICAgICBvdXRwdXRfZmlsZSkKKworICBkZWYgdGVzdF9TaWduX2luY3JlbWVudGFsKHNlbGYpOgorICAgIHBheWxvYWQgPSBzZWxmLl9jcmVhdGVfcGF5bG9hZF9pbmNyZW1lbnRhbCgpCisgICAgcGF5bG9hZC5TaWduKFBheWxvYWRTaWduZXIoKSkKKworICAgIG91dHB1dF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy56aXAnKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlLCAndycpIGFzIG91dHB1dF96aXA6CisgICAgICBwYXlsb2FkLldyaXRlVG9aaXAob3V0cHV0X3ppcCkKKworICAgIGltcG9ydCBjaGVja19vdGFfcGFja2FnZV9zaWduYXR1cmUKKyAgICBjaGVja19vdGFfcGFja2FnZV9zaWduYXR1cmUuVmVyaWZ5QWJPdGFQYXlsb2FkKAorICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICd0ZXN0a2V5Lng1MDkucGVtJyksCisgICAgICAgIG91dHB1dF9maWxlKQorCisgIGRlZiB0ZXN0X1NpZ25fd2l0aERhdGFXaXBlKHNlbGYpOgorICAgIGNvbW1vbi5PUFRJT05TLndpcGVfdXNlcl9kYXRhID0gVHJ1ZQorICAgIHBheWxvYWQgPSBzZWxmLl9jcmVhdGVfcGF5bG9hZF9mdWxsKCkKKyAgICBwYXlsb2FkLlNpZ24oUGF5bG9hZFNpZ25lcigpKQorCisgICAgd2l0aCBvcGVuKHBheWxvYWQucGF5bG9hZF9wcm9wZXJ0aWVzKSBhcyBwcm9wZXJ0aWVzX2ZwOgorICAgICAgc2VsZi5hc3NlcnRJbigiUE9XRVJXQVNIPTEiLCBwcm9wZXJ0aWVzX2ZwLnJlYWQoKSkKKworICBkZWYgdGVzdF9TaWduX3NlY29uZGFyeShzZWxmKToKKyAgICBwYXlsb2FkID0gc2VsZi5fY3JlYXRlX3BheWxvYWRfZnVsbChzZWNvbmRhcnk9VHJ1ZSkKKyAgICBwYXlsb2FkLlNpZ24oUGF5bG9hZFNpZ25lcigpKQorCisgICAgd2l0aCBvcGVuKHBheWxvYWQucGF5bG9hZF9wcm9wZXJ0aWVzKSBhcyBwcm9wZXJ0aWVzX2ZwOgorICAgICAgc2VsZi5hc3NlcnRJbigiU1dJVENIX1NMT1RfT05fUkVCT09UPTAiLCBwcm9wZXJ0aWVzX2ZwLnJlYWQoKSkKKworICBkZWYgdGVzdF9TaWduX2JhZFNpZ25lcihzZWxmKToKKyAgICAiIiJUZXN0cyB0aGF0IHNpZ25pbmcgZmFpbHVyZSBjYW4gYmUgY2FwdHVyZWQuIiIiCisgICAgcGF5bG9hZCA9IHNlbGYuX2NyZWF0ZV9wYXlsb2FkX2Z1bGwoKQorICAgIHBheWxvYWRfc2lnbmVyID0gUGF5bG9hZFNpZ25lcigpCisgICAgcGF5bG9hZF9zaWduZXIuc2lnbmVyX2FyZ3MuYXBwZW5kKCdiYWQtb3B0aW9uJykKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcGF5bG9hZC5TaWduLCBwYXlsb2FkX3NpZ25lcikKKworICBkZWYgdGVzdF9Xcml0ZVRvWmlwKHNlbGYpOgorICAgIHBheWxvYWQgPSBzZWxmLl9jcmVhdGVfcGF5bG9hZF9mdWxsKCkKKyAgICBwYXlsb2FkLlNpZ24oUGF5bG9hZFNpZ25lcigpKQorCisgICAgb3V0cHV0X2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHN1ZmZpeD0nLnppcCcpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUob3V0cHV0X2ZpbGUsICd3JykgYXMgb3V0cHV0X3ppcDoKKyAgICAgIHBheWxvYWQuV3JpdGVUb1ppcChvdXRwdXRfemlwKQorCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUob3V0cHV0X2ZpbGUpIGFzIHZlcmlmeV96aXA6CisgICAgICAjIEZpcnN0IG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBlc3NlbnRpYWwgZW50cmllcy4KKyAgICAgIG5hbWVsaXN0ID0gdmVyaWZ5X3ppcC5uYW1lbGlzdCgpCisgICAgICBzZWxmLmFzc2VydEluKFBheWxvYWQuUEFZTE9BRF9CSU4sIG5hbWVsaXN0KQorICAgICAgc2VsZi5hc3NlcnRJbihQYXlsb2FkLlBBWUxPQURfUFJPUEVSVElFU19UWFQsIG5hbWVsaXN0KQorCisgICAgICAjIFRoZW4gYXNzZXJ0IHRoZXNlIGVudHJpZXMgYXJlIHN0b3JlZC4KKyAgICAgIGZvciBlbnRyeV9pbmZvIGluIHZlcmlmeV96aXAuaW5mb2xpc3QoKToKKyAgICAgICAgaWYgZW50cnlfaW5mby5maWxlbmFtZSBub3QgaW4gKFBheWxvYWQuUEFZTE9BRF9CSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXlsb2FkLlBBWUxPQURfUFJPUEVSVElFU19UWFQpOgorICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZmlsZS5aSVBfU1RPUkVELCBlbnRyeV9pbmZvLmNvbXByZXNzX3R5cGUpCisKKyAgZGVmIHRlc3RfV3JpdGVUb1ppcF91bnNpZ25lZFBheWxvYWQoc2VsZik6CisgICAgIiIiVW5zaWduZWQgcGF5bG9hZHMgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGJlIHdyaXR0ZW4gdG8gemlwLiIiIgorICAgIHBheWxvYWQgPSBzZWxmLl9jcmVhdGVfcGF5bG9hZF9mdWxsKCkKKworICAgIG91dHB1dF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy56aXAnKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlLCAndycpIGFzIG91dHB1dF96aXA6CisgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcGF5bG9hZC5Xcml0ZVRvWmlwLCBvdXRwdXRfemlwKQorCisgICAgIyBBbHNvIHRlc3Qgd2l0aCBpbmNyZW1lbnRhbCBwYXlsb2FkLgorICAgIHBheWxvYWQgPSBzZWxmLl9jcmVhdGVfcGF5bG9hZF9pbmNyZW1lbnRhbCgpCisKKyAgICBvdXRwdXRfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUoc3VmZml4PScuemlwJykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShvdXRwdXRfZmlsZSwgJ3cnKSBhcyBvdXRwdXRfemlwOgorICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBheWxvYWQuV3JpdGVUb1ppcCwgb3V0cHV0X3ppcCkKKworICBkZWYgdGVzdF9Xcml0ZVRvWmlwX3NlY29uZGFyeShzZWxmKToKKyAgICBwYXlsb2FkID0gc2VsZi5fY3JlYXRlX3BheWxvYWRfZnVsbChzZWNvbmRhcnk9VHJ1ZSkKKyAgICBwYXlsb2FkLlNpZ24oUGF5bG9hZFNpZ25lcigpKQorCisgICAgb3V0cHV0X2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHN1ZmZpeD0nLnppcCcpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUob3V0cHV0X2ZpbGUsICd3JykgYXMgb3V0cHV0X3ppcDoKKyAgICAgIHBheWxvYWQuV3JpdGVUb1ppcChvdXRwdXRfemlwKQorCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUob3V0cHV0X2ZpbGUpIGFzIHZlcmlmeV96aXA6CisgICAgICAjIEZpcnN0IG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBlc3NlbnRpYWwgZW50cmllcy4KKyAgICAgIG5hbWVsaXN0ID0gdmVyaWZ5X3ppcC5uYW1lbGlzdCgpCisgICAgICBzZWxmLmFzc2VydEluKFBheWxvYWQuU0VDT05EQVJZX1BBWUxPQURfQklOLCBuYW1lbGlzdCkKKyAgICAgIHNlbGYuYXNzZXJ0SW4oUGF5bG9hZC5TRUNPTkRBUllfUEFZTE9BRF9QUk9QRVJUSUVTX1RYVCwgbmFtZWxpc3QpCisKKyAgICAgICMgVGhlbiBhc3NlcnQgdGhlc2UgZW50cmllcyBhcmUgc3RvcmVkLgorICAgICAgZm9yIGVudHJ5X2luZm8gaW4gdmVyaWZ5X3ppcC5pbmZvbGlzdCgpOgorICAgICAgICBpZiBlbnRyeV9pbmZvLmZpbGVuYW1lIG5vdCBpbiAoCisgICAgICAgICAgICBQYXlsb2FkLlNFQ09OREFSWV9QQVlMT0FEX0JJTiwKKyAgICAgICAgICAgIFBheWxvYWQuU0VDT05EQVJZX1BBWUxPQURfUFJPUEVSVElFU19UWFQpOgorICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZmlsZS5aSVBfU1RPUkVELCBlbnRyeV9pbmZvLmNvbXByZXNzX3R5cGUpCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdF9zaWduX3RhcmdldF9maWxlc19hcGtzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3Rfc2lnbl90YXJnZXRfZmlsZXNfYXBrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmY5ZTEwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3Rfc2lnbl90YXJnZXRfZmlsZXNfYXBrcy5weQpAQCAtMCwwICsxLDIxMyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgemlwZmlsZQorCitpbXBvcnQgY29tbW9uCitpbXBvcnQgdGVzdF91dGlscworZnJvbSBzaWduX3RhcmdldF9maWxlc19hcGtzIGltcG9ydCAoCisgICAgRWRpdFRhZ3MsIFJlcGxhY2VDZXJ0cywgUmVwbGFjZVZlcml0eUtleUlkLCBSZXdyaXRlUHJvcHMpCisKKworY2xhc3MgU2lnblRhcmdldEZpbGVzQXBrc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgIE1BQ19QRVJNSVNTSU9OU19YTUwgPSAiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xIj8+Cis8cG9saWN5PgorICA8c2lnbmVyIHNpZ25hdHVyZT0ie30iPjxzZWluZm8gdmFsdWU9InBsYXRmb3JtIi8+PC9zaWduZXI+CisgIDxzaWduZXIgc2lnbmF0dXJlPSJ7fSI+PHNlaW5mbyB2YWx1ZT0ibWVkaWEiLz48L3NpZ25lcj4KKzwvcG9saWN5PiIiIgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICBzZWxmLnRlc3RkYXRhX2RpciA9IHRlc3RfdXRpbHMuZ2V0X3Rlc3RkYXRhX2RpcigpCisKKyAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgIGNvbW1vbi5DbGVhbnVwKCkKKworICBkZWYgdGVzdF9FZGl0VGFncyhzZWxmKToKKyAgICBzZWxmLmFzc2VydEVxdWFsKEVkaXRUYWdzKCdkZXYta2V5cycpLCAoJ3JlbGVhc2Uta2V5cycpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoRWRpdFRhZ3MoJ3Rlc3Qta2V5cycpLCAoJ3JlbGVhc2Uta2V5cycpKQorCisgICAgIyBNdWx0aXBsZSB0YWdzLgorICAgIHNlbGYuYXNzZXJ0RXF1YWwoRWRpdFRhZ3MoJ2FiYyxkZXYta2V5cyx4eXonKSwgKCdhYmMscmVsZWFzZS1rZXlzLHh5eicpKQorCisgICAgIyBUYWdzIGFyZSBzb3J0ZWQuCisgICAgc2VsZi5hc3NlcnRFcXVhbChFZGl0VGFncygneHl6LGFiYyxkZXYta2V5cyx4eXonKSwgKCdhYmMscmVsZWFzZS1rZXlzLHh5eicpKQorCisgIGRlZiB0ZXN0X1Jld3JpdGVQcm9wcyhzZWxmKToKKyAgICBwcm9wcyA9ICgKKyAgICAgICAgKCcnLCAnXG4nKSwKKyAgICAgICAgKCdyby5idWlsZC5maW5nZXJwcmludD1mb28vYmFyL2Rldi1rZXlzJywKKyAgICAgICAgICdyby5idWlsZC5maW5nZXJwcmludD1mb28vYmFyL3JlbGVhc2Uta2V5c1xuJyksCisgICAgICAgICgncm8uYnVpbGQudGh1bWJwcmludD1mb28vYmFyL2Rldi1rZXlzJywKKyAgICAgICAgICdyby5idWlsZC50aHVtYnByaW50PWZvby9iYXIvcmVsZWFzZS1rZXlzXG4nKSwKKyAgICAgICAgKCdyby52ZW5kb3IuYnVpbGQuZmluZ2VycHJpbnQ9Zm9vL2Jhci9kZXYta2V5cycsCisgICAgICAgICAncm8udmVuZG9yLmJ1aWxkLmZpbmdlcnByaW50PWZvby9iYXIvcmVsZWFzZS1rZXlzXG4nKSwKKyAgICAgICAgKCdyby52ZW5kb3IuYnVpbGQudGh1bWJwcmludD1mb28vYmFyL2Rldi1rZXlzJywKKyAgICAgICAgICdyby52ZW5kb3IuYnVpbGQudGh1bWJwcmludD1mb28vYmFyL3JlbGVhc2Uta2V5c1xuJyksCisgICAgICAgICgnIyBjb21tZW50IGxpbmUgMScsICcjIGNvbW1lbnQgbGluZSAxXG4nKSwKKyAgICAgICAgKCdyby5ib290aW1hZ2UuYnVpbGQuZmluZ2VycHJpbnQ9Zm9vL2Jhci9kZXYta2V5cycsCisgICAgICAgICAncm8uYm9vdGltYWdlLmJ1aWxkLmZpbmdlcnByaW50PWZvby9iYXIvcmVsZWFzZS1rZXlzXG4nKSwKKyAgICAgICAgKCdyby5idWlsZC5kZXNjcmlwdGlvbj0nCisgICAgICAgICAnc2FpbGZpc2gtdXNlciA4LjAuMCBPUFI2LjE3MDYyMy4wMTIgNDI4MzQyOCBkZXYta2V5cycsCisgICAgICAgICAncm8uYnVpbGQuZGVzY3JpcHRpb249JworICAgICAgICAgJ3NhaWxmaXNoLXVzZXIgOC4wLjAgT1BSNi4xNzA2MjMuMDEyIDQyODM0MjggcmVsZWFzZS1rZXlzXG4nKSwKKyAgICAgICAgKCdyby5idWlsZC50YWdzPWRldi1rZXlzJywgJ3JvLmJ1aWxkLnRhZ3M9cmVsZWFzZS1rZXlzXG4nKSwKKyAgICAgICAgKCcjIGNvbW1lbnQgbGluZSAyJywgJyMgY29tbWVudCBsaW5lIDJcbicpLAorICAgICAgICAoJ3JvLmJ1aWxkLmRpc3BsYXkuaWQ9T1BSNi4xNzA2MjMuMDEyIGRldi1rZXlzJywKKyAgICAgICAgICdyby5idWlsZC5kaXNwbGF5LmlkPU9QUjYuMTcwNjIzLjAxMlxuJyksCisgICAgICAgICgnIyBjb21tZW50IGxpbmUgMycsICcjIGNvbW1lbnQgbGluZSAzXG4nKSwKKyAgICApCisKKyAgICAjIEFzc2VydCB0aGUgY2FzZSBmb3IgZWFjaCBpbmRpdmlkdWFsIGxpbmUuCisgICAgZm9yIHByb3AsIG91dHB1dCBpbiBwcm9wczoKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmV3cml0ZVByb3BzKHByb3ApLCBvdXRwdXQpCisKKyAgICAjIENvbmNhdGVuYXRlIGFsbCB0aGUgaW5wdXQgbGluZXMuCisgICAgc2VsZi5hc3NlcnRFcXVhbChSZXdyaXRlUHJvcHMoJ1xuJy5qb2luKFtwcm9wWzBdIGZvciBwcm9wIGluIHByb3BzXSkpLAorICAgICAgICAgICAgICAgICAgICAgJycuam9pbihbcHJvcFsxXSBmb3IgcHJvcCBpbiBwcm9wc10pKQorCisgIGRlZiB0ZXN0X1JlcGxhY2VWZXJpdHlLZXlJZChzZWxmKToKKyAgICBCT09UX0NNRExJTkUxID0gKAorICAgICAgICAiY29uc29sZT10dHlIU0wwLDExNTIwMCxuOCBhbmRyb2lkYm9vdC5jb25zb2xlPXR0eUhTTDAgIgorICAgICAgICAiYW5kcm9pZGJvb3QuaGFyZHdhcmU9bWFybGluIHVzZXJfZGVidWc9MzEgZWhjaS1oY2QucGFyaz0zICIKKyAgICAgICAgImxwbV9sZXZlbHMuc2xlZXBfZGlzYWJsZWQ9MSBjbWE9MzJNQDAtMHhmZmZmZmZmZiBsb29wLm1heF9wYXJ0PTcgIgorICAgICAgICAiYnVpbGR2YXJpYW50PXVzZXJkZWJ1ZyAiCisgICAgICAgICJ2ZXJpdHlrZXlpZD1pZDo3ZTQzMzNmOWJiYTAwYWRmZTBlZGU5NzllMjhlZDE5MjA0OTJiNDBmXG4iKQorCisgICAgQk9PVF9DTURMSU5FMiA9ICgKKyAgICAgICAgImNvbnNvbGU9dHR5SFNMMCwxMTUyMDAsbjggYW5kcm9pZGJvb3QuY29uc29sZT10dHlIU0wwICIKKyAgICAgICAgImFuZHJvaWRib290LmhhcmR3YXJlPW1hcmxpbiB1c2VyX2RlYnVnPTMxIGVoY2ktaGNkLnBhcms9MyAiCisgICAgICAgICJscG1fbGV2ZWxzLnNsZWVwX2Rpc2FibGVkPTEgY21hPTMyTUAwLTB4ZmZmZmZmZmYgbG9vcC5tYXhfcGFydD03ICIKKyAgICAgICAgImJ1aWxkdmFyaWFudD11c2VyZGVidWcgIgorICAgICAgICAidmVyaXR5a2V5aWQ9aWQ6ZDI0ZjI1OTBlOWFiYWI1Y2ZmNWY1OWRhNGM0ZjAzNjZlM2Y0M2U5NFxuIikKKworICAgIGlucHV0X2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHN1ZmZpeD0nLnppcCcpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW5wdXRfZmlsZSwgJ3cnKSBhcyBpbnB1dF96aXA6CisgICAgICBpbnB1dF96aXAud3JpdGVzdHIoJ0JPT1QvY21kbGluZScsIEJPT1RfQ01ETElORTEpCisKKyAgICAjIFRlc3Qgd2l0aCB0aGUgZmlyc3QgY2VydGlmaWNhdGUuCisgICAgY2VydF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCAndmVyaXR5Lng1MDkucGVtJykKKworICAgIG91dHB1dF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShzdWZmaXg9Jy56aXAnKQorICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlucHV0X2ZpbGUsICdyJykgYXMgaW5wdXRfemlwLCBcCisgICAgICAgICB6aXBmaWxlLlppcEZpbGUob3V0cHV0X2ZpbGUsICd3JykgYXMgb3V0cHV0X3ppcDoKKyAgICAgIFJlcGxhY2VWZXJpdHlLZXlJZChpbnB1dF96aXAsIG91dHB1dF96aXAsIGNlcnRfZmlsZSkKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlKSBhcyBvdXRwdXRfemlwOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChCT09UX0NNRExJTkUxLCBvdXRwdXRfemlwLnJlYWQoJ0JPT1QvY21kbGluZScpKQorCisgICAgIyBUZXN0IHdpdGggdGhlIHNlY29uZCBjZXJ0aWZpY2F0ZS4KKyAgICBjZXJ0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICd0ZXN0a2V5Lng1MDkucGVtJykKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlucHV0X2ZpbGUsICdyJykgYXMgaW5wdXRfemlwLCBcCisgICAgICAgICB6aXBmaWxlLlppcEZpbGUob3V0cHV0X2ZpbGUsICd3JykgYXMgb3V0cHV0X3ppcDoKKyAgICAgIFJlcGxhY2VWZXJpdHlLZXlJZChpbnB1dF96aXAsIG91dHB1dF96aXAsIGNlcnRfZmlsZSkKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlKSBhcyBvdXRwdXRfemlwOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChCT09UX0NNRExJTkUyLCBvdXRwdXRfemlwLnJlYWQoJ0JPT1QvY21kbGluZScpKQorCisgIGRlZiB0ZXN0X1JlcGxhY2VWZXJpdHlLZXlJZF9ub192ZXJpdHlrZXlpZChzZWxmKToKKyAgICBCT09UX0NNRExJTkUgPSAoCisgICAgICAgICJjb25zb2xlPXR0eUhTTDAsMTE1MjAwLG44IGFuZHJvaWRib290LmhhcmR3YXJlPWJ1bGxoZWFkIGJvb3RfY3B1cz0wLTUgIgorICAgICAgICAibHBtX2xldmVscy5zbGVlcF9kaXNhYmxlZD0xIG1zbV9wb3dlcm9mZi5kb3dubG9hZF9tb2RlPTAgIgorICAgICAgICAibG9vcC5tYXhfcGFydD03XG4iKQorCisgICAgaW5wdXRfZmlsZSA9IGNvbW1vbi5NYWtlVGVtcEZpbGUoc3VmZml4PScuemlwJykKKyAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpbnB1dF9maWxlLCAndycpIGFzIGlucHV0X3ppcDoKKyAgICAgIGlucHV0X3ppcC53cml0ZXN0cignQk9PVC9jbWRsaW5lJywgQk9PVF9DTURMSU5FKQorCisgICAgb3V0cHV0X2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHN1ZmZpeD0nLnppcCcpCisgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW5wdXRfZmlsZSwgJ3InKSBhcyBpbnB1dF96aXAsIFwKKyAgICAgICAgIHppcGZpbGUuWmlwRmlsZShvdXRwdXRfZmlsZSwgJ3cnKSBhcyBvdXRwdXRfemlwOgorICAgICAgUmVwbGFjZVZlcml0eUtleUlkKGlucHV0X3ppcCwgb3V0cHV0X3ppcCwgTm9uZSkKKworICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dF9maWxlKSBhcyBvdXRwdXRfemlwOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChCT09UX0NNRExJTkUsIG91dHB1dF96aXAucmVhZCgnQk9PVC9jbWRsaW5lJykpCisKKyAgZGVmIHRlc3RfUmVwbGFjZUNlcnRzKHNlbGYpOgorICAgIGNlcnQxX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICdwbGF0Zm9ybS54NTA5LnBlbScpCisgICAgd2l0aCBvcGVuKGNlcnQxX3BhdGgpIGFzIGNlcnQxX2ZwOgorICAgICAgY2VydDEgPSBjZXJ0MV9mcC5yZWFkKCkKKyAgICBjZXJ0Ml9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCAnbWVkaWEueDUwOS5wZW0nKQorICAgIHdpdGggb3BlbihjZXJ0Ml9wYXRoKSBhcyBjZXJ0Ml9mcDoKKyAgICAgIGNlcnQyID0gY2VydDJfZnAucmVhZCgpCisgICAgY2VydDNfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Rlc3RrZXkueDUwOS5wZW0nKQorICAgIHdpdGggb3BlbihjZXJ0M19wYXRoKSBhcyBjZXJ0M19mcDoKKyAgICAgIGNlcnQzID0gY2VydDNfZnAucmVhZCgpCisKKyAgICAjIFJlcGxhY2UgY2VydDEgd2l0aCBjZXJ0My4KKyAgICBpbnB1dF94bWwgPSBzZWxmLk1BQ19QRVJNSVNTSU9OU19YTUwuZm9ybWF0KAorICAgICAgICBiYXNlNjQuYjE2ZW5jb2RlKGNvbW1vbi5QYXJzZUNlcnRpZmljYXRlKGNlcnQxKSkubG93ZXIoKSwKKyAgICAgICAgYmFzZTY0LmIxNmVuY29kZShjb21tb24uUGFyc2VDZXJ0aWZpY2F0ZShjZXJ0MikpLmxvd2VyKCkpCisKKyAgICBvdXRwdXRfeG1sID0gc2VsZi5NQUNfUEVSTUlTU0lPTlNfWE1MLmZvcm1hdCgKKyAgICAgICAgYmFzZTY0LmIxNmVuY29kZShjb21tb24uUGFyc2VDZXJ0aWZpY2F0ZShjZXJ0MykpLmxvd2VyKCksCisgICAgICAgIGJhc2U2NC5iMTZlbmNvZGUoY29tbW9uLlBhcnNlQ2VydGlmaWNhdGUoY2VydDIpKS5sb3dlcigpKQorCisgICAgY29tbW9uLk9QVElPTlMua2V5X21hcCA9IHsKKyAgICAgICAgY2VydDFfcGF0aFs6LTldIDogY2VydDNfcGF0aFs6LTldLAorICAgIH0KKworICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0X3htbCwgUmVwbGFjZUNlcnRzKGlucHV0X3htbCkpCisKKyAgZGVmIHRlc3RfUmVwbGFjZUNlcnRzX2R1cGxpY2F0ZUVudHJpZXMoc2VsZik6CisgICAgY2VydDFfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3BsYXRmb3JtLng1MDkucGVtJykKKyAgICB3aXRoIG9wZW4oY2VydDFfcGF0aCkgYXMgY2VydDFfZnA6CisgICAgICBjZXJ0MSA9IGNlcnQxX2ZwLnJlYWQoKQorICAgIGNlcnQyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICdtZWRpYS54NTA5LnBlbScpCisgICAgd2l0aCBvcGVuKGNlcnQyX3BhdGgpIGFzIGNlcnQyX2ZwOgorICAgICAgY2VydDIgPSBjZXJ0Ml9mcC5yZWFkKCkKKworICAgICMgUmVwbGFjZSBjZXJ0MSB3aXRoIGNlcnQyLCB3aGljaCBsZWFkcyB0byBkdXBsaWNhdGUgZW50cmllcy4KKyAgICBpbnB1dF94bWwgPSBzZWxmLk1BQ19QRVJNSVNTSU9OU19YTUwuZm9ybWF0KAorICAgICAgICBiYXNlNjQuYjE2ZW5jb2RlKGNvbW1vbi5QYXJzZUNlcnRpZmljYXRlKGNlcnQxKSkubG93ZXIoKSwKKyAgICAgICAgYmFzZTY0LmIxNmVuY29kZShjb21tb24uUGFyc2VDZXJ0aWZpY2F0ZShjZXJ0MikpLmxvd2VyKCkpCisKKyAgICBjb21tb24uT1BUSU9OUy5rZXlfbWFwID0geworICAgICAgICBjZXJ0MV9wYXRoWzotOV0gOiBjZXJ0Ml9wYXRoWzotOV0sCisgICAgfQorICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBSZXBsYWNlQ2VydHMsIGlucHV0X3htbCkKKworICBkZWYgdGVzdF9SZXBsYWNlQ2VydHNfc2tpcE5vbkV4aXN0ZW50Q2VydHMoc2VsZik6CisgICAgY2VydDFfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3BsYXRmb3JtLng1MDkucGVtJykKKyAgICB3aXRoIG9wZW4oY2VydDFfcGF0aCkgYXMgY2VydDFfZnA6CisgICAgICBjZXJ0MSA9IGNlcnQxX2ZwLnJlYWQoKQorICAgIGNlcnQyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICdtZWRpYS54NTA5LnBlbScpCisgICAgd2l0aCBvcGVuKGNlcnQyX3BhdGgpIGFzIGNlcnQyX2ZwOgorICAgICAgY2VydDIgPSBjZXJ0Ml9mcC5yZWFkKCkKKyAgICBjZXJ0M19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCAndGVzdGtleS54NTA5LnBlbScpCisgICAgd2l0aCBvcGVuKGNlcnQzX3BhdGgpIGFzIGNlcnQzX2ZwOgorICAgICAgY2VydDMgPSBjZXJ0M19mcC5yZWFkKCkKKworICAgIGlucHV0X3htbCA9IHNlbGYuTUFDX1BFUk1JU1NJT05TX1hNTC5mb3JtYXQoCisgICAgICAgIGJhc2U2NC5iMTZlbmNvZGUoY29tbW9uLlBhcnNlQ2VydGlmaWNhdGUoY2VydDEpKS5sb3dlcigpLAorICAgICAgICBiYXNlNjQuYjE2ZW5jb2RlKGNvbW1vbi5QYXJzZUNlcnRpZmljYXRlKGNlcnQyKSkubG93ZXIoKSkKKworICAgIG91dHB1dF94bWwgPSBzZWxmLk1BQ19QRVJNSVNTSU9OU19YTUwuZm9ybWF0KAorICAgICAgICBiYXNlNjQuYjE2ZW5jb2RlKGNvbW1vbi5QYXJzZUNlcnRpZmljYXRlKGNlcnQzKSkubG93ZXIoKSwKKyAgICAgICAgYmFzZTY0LmIxNmVuY29kZShjb21tb24uUGFyc2VDZXJ0aWZpY2F0ZShjZXJ0MikpLmxvd2VyKCkpCisKKyAgICBjb21tb24uT1BUSU9OUy5rZXlfbWFwID0geworICAgICAgICBjZXJ0MV9wYXRoWzotOV0gOiBjZXJ0M19wYXRoWzotOV0sCisgICAgICAgICdub24tZXhpc3RlbnQnIDogY2VydDNfcGF0aFs6LTldLAorICAgICAgICBjZXJ0Ml9wYXRoWzotOV0gOiAnbm9uLWV4aXN0ZW50JywKKyAgICB9CisgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRfeG1sLCBSZXBsYWNlQ2VydHMoaW5wdXRfeG1sKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X3V0aWxzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0MzU1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X3V0aWxzLnB5CkBAIC0wLDAgKzEsOTYgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyIiIgorVXRpbHMgZm9yIHJ1bm5pbmcgdW5pdHRlc3RzLgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzdHJ1Y3QKKworaW1wb3J0IGNvbW1vbgorCisKK2RlZiBnZXRfdGVzdGRhdGFfZGlyKCk6CisgICIiIlJldHVybnMgdGhlIHRlc3RkYXRhIGRpciwgaW4gcmVsYXRpdmUgdG8gdGhlIHNjcmlwdCBkaXIuIiIiCisgICMgVGhlIHNjcmlwdCBkaXIgaXMgdGhlIG9uZSB3ZSB3YW50LCB3aGljaCBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBwd2QuCisgIGN1cnJlbnRfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorICByZXR1cm4gb3MucGF0aC5qb2luKGN1cnJlbnRfZGlyLCAndGVzdGRhdGEnKQorCisKK2RlZiBjb25zdHJ1Y3Rfc3BhcnNlX2ltYWdlKGNodW5rcyk6CisgICIiIlJldHVybnMgYSBzcGFyc2UgaW1hZ2UgZmlsZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBnaXZlbiBjaHVua3MuCisKKyAgRnJvbSBzeXN0ZW0vY29yZS9saWJzcGFyc2Uvc3BhcnNlX2Zvcm1hdC5oLgorICB0eXBlZGVmIHN0cnVjdCBzcGFyc2VfaGVhZGVyIHsKKyAgICBfX2xlMzIgbWFnaWM7ICAvLyAweGVkMjZmZjNhCisgICAgX19sZTE2IG1ham9yX3ZlcnNpb247ICAvLyAoMHgxKSAtIHJlamVjdCBpbWFnZXMgd2l0aCBoaWdoZXIgbWFqb3IgdmVyc2lvbnMKKyAgICBfX2xlMTYgbWlub3JfdmVyc2lvbjsgIC8vICgweDApIC0gYWxsb3cgaW1hZ2VzIHdpdGggaGlnZXIgbWlub3IgdmVyc2lvbnMKKyAgICBfX2xlMTYgZmlsZV9oZHJfc3o7ICAvLyAyOCBieXRlcyBmb3IgZmlyc3QgcmV2aXNpb24gb2YgdGhlIGZpbGUgZm9ybWF0CisgICAgX19sZTE2IGNodW5rX2hkcl9zejsgIC8vIDEyIGJ5dGVzIGZvciBmaXJzdCByZXZpc2lvbiBvZiB0aGUgZmlsZSBmb3JtYXQKKyAgICBfX2xlMzIgYmxrX3N6OyAgLy8gYmxvY2sgc2l6ZSBpbiBieXRlcywgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgKDQwOTYpCisgICAgX19sZTMyIHRvdGFsX2Jsa3M7ICAvLyB0b3RhbCBibG9ja3MgaW4gdGhlIG5vbi1zcGFyc2Ugb3V0cHV0IGltYWdlCisgICAgX19sZTMyIHRvdGFsX2NodW5rczsgIC8vIHRvdGFsIGNodW5rcyBpbiB0aGUgc3BhcnNlIGlucHV0IGltYWdlCisgICAgX19sZTMyIGltYWdlX2NoZWNrc3VtOyAgLy8gQ1JDMzIgY2hlY2tzdW0gb2YgdGhlIG9yaWdpbmFsIGRhdGEsIGNvdW50aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gImRvbid0IGNhcmUiIGFzIDAuIFN0YW5kYXJkIDgwMi4zIHBvbHlub21pYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGEgUHVibGljIERvbWFpbiB0YWJsZSBpbXBsZW1lbnRhdGlvbgorICB9IHNwYXJzZV9oZWFkZXJfdDsKKworICB0eXBlZGVmIHN0cnVjdCBjaHVua19oZWFkZXIgeworICAgIF9fbGUxNiBjaHVua190eXBlOyAgLy8gMHhDQUMxIC0+IHJhdzsgMHhDQUMyIC0+IGZpbGw7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAweENBQzMgLT4gZG9uJ3QgY2FyZQorICAgIF9fbGUxNiByZXNlcnZlZDE7CisgICAgX19sZTMyIGNodW5rX3N6OyAgLy8gaW4gYmxvY2tzIGluIG91dHB1dCBpbWFnZQorICAgIF9fbGUzMiB0b3RhbF9zejsgIC8vIGluIGJ5dGVzIG9mIGNodW5rIGlucHV0IGZpbGUgaW5jbHVkaW5nIGNodW5rIGhlYWRlcgorICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkYXRhCisgIH0gY2h1bmtfaGVhZGVyX3Q7CisKKyAgQXJnczoKKyAgICBjaHVua3M6IEEgbGlzdCBvZiBjaHVua3MgdG8gYmUgd3JpdHRlbi4gRWFjaCBlbnRyeSBzaG91bGQgYmUgYSB0dXBsZSBvZgorICAgICAgICAoY2h1bmtfdHlwZSwgYmxvY2tfbnVtYmVyKS4KKworICBSZXR1cm5zOgorICAgIEZpbGVuYW1lIG9mIHRoZSBjcmVhdGVkIHNwYXJzZSBpbWFnZS4KKyAgIiIiCisgIFNQQVJTRV9IRUFERVJfTUFHSUMgPSAweEVEMjZGRjNBCisgIFNQQVJTRV9IRUFERVJfRk9STUFUID0gIjxJNEg0SSIKKyAgQ0hVTktfSEVBREVSX0ZPUk1BVCA9ICI8MkgySSIKKworICBzcGFyc2VfaW1hZ2UgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0nc3BhcnNlLScsIHN1ZmZpeD0nLmltZycpCisgIHdpdGggb3BlbihzcGFyc2VfaW1hZ2UsICd3YicpIGFzIGZwOgorICAgIGZwLndyaXRlKHN0cnVjdC5wYWNrKAorICAgICAgICBTUEFSU0VfSEVBREVSX0ZPUk1BVCwgU1BBUlNFX0hFQURFUl9NQUdJQywgMSwgMCwgMjgsIDEyLCA0MDk2LAorICAgICAgICBzdW0oY2h1bmtbMV0gZm9yIGNodW5rIGluIGNodW5rcyksCisgICAgICAgIGxlbihjaHVua3MpLCAwKSkKKworICAgIGZvciBjaHVuayBpbiBjaHVua3M6CisgICAgICBkYXRhX3NpemUgPSAwCisgICAgICBpZiBjaHVua1swXSA9PSAweENBQzE6CisgICAgICAgIGRhdGFfc2l6ZSA9IDQwOTYgKiBjaHVua1sxXQorICAgICAgZWxpZiBjaHVua1swXSA9PSAweENBQzI6CisgICAgICAgIGRhdGFfc2l6ZSA9IDQKKyAgICAgIGVsaWYgY2h1bmtbMF0gPT0gMHhDQUMzOgorICAgICAgICBwYXNzCisgICAgICBlbHNlOgorICAgICAgICBhc3NlcnQgRmFsc2UsICJVbnN1cHBvcnRlZCBjaHVuayB0eXBlOiB7fSIuZm9ybWF0KGNodW5rWzBdKQorCisgICAgICBmcC53cml0ZShzdHJ1Y3QucGFjaygKKyAgICAgICAgICBDSFVOS19IRUFERVJfRk9STUFULCBjaHVua1swXSwgMCwgY2h1bmtbMV0sIGRhdGFfc2l6ZSArIDEyKSkKKyAgICAgIGlmIGRhdGFfc2l6ZSAhPSAwOgorICAgICAgICBmcC53cml0ZShvcy51cmFuZG9tKGRhdGFfc2l6ZSkpCisKKyAgcmV0dXJuIHNwYXJzZV9pbWFnZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RfdmFsaWRhdGVfdGFyZ2V0X2ZpbGVzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RfdmFsaWRhdGVfdGFyZ2V0X2ZpbGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTY0OGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdF92YWxpZGF0ZV90YXJnZXRfZmlsZXMucHkKQEAgLTAsMCArMSwxODAgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyIiIlVuaXR0ZXN0cyBmb3IgdmFsaWRhdGVfdGFyZ2V0X2ZpbGVzLnB5LgorCitOb3RlOiBUaGlzIGZpbGUgY2FsbHMgZnVuY3Rpb25zIGluIGJ1aWxkX2ltYWdlLnB5IHRoYXQgaGFyZC1jb2RlIHRoZSBwYXRoIGluCityZWxhdGl2ZSB0byBBTkRST0lEX0JVSUxEX1RPUCAoZS5nLgorc3lzdGVtL2V4dHJhcy92ZXJpdHkvYnVpbGRfdmVyaXR5X21ldGFkYXRhLnB5KS4gU28gdGhlIHRlc3QgbmVlZHMgdG8gYmUKK3RyaWdnZXJlZCB1bmRlciBBTkRST0lEX0JVSUxEX1RPUCBvciB0aGUgdG9wLWxldmVsIE9UQSB0b29scyBkaXJlY3RvcnkgKGkuZS4KK3RoZSBvbmUgYWZ0ZXIgdW56aXBwaW5nIG90YXRvb2xzLnppcCkuCisKKyAgKGZyb20gQU5EUk9JRF9CVUlMRF9UT1ApCisgICQgUFlUSE9OUEFUSD1idWlsZC9tYWtlL3Rvb2xzL3JlbGVhc2V0b29scyBweXRob24gLW0gdW5pdHRlc3QgXFwKKyAgICAgIHRlc3RfdmFsaWRhdGVfdGFyZ2V0X2ZpbGVzCisKKyAgKGZyb20gT1RBIHRvb2xzIGRpcmVjdG9yeSkKKyAgJCBQWVRIT05QQVRIPXJlbGVhc2V0b29scyBweXRob24gLW0gdW5pdHRlc3QgdGVzdF92YWxpZGF0ZV90YXJnZXRfZmlsZXMKKyIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGJ1aWxkX2ltYWdlCitpbXBvcnQgY29tbW9uCitpbXBvcnQgdGVzdF91dGlscworZnJvbSB2YWxpZGF0ZV90YXJnZXRfZmlsZXMgaW1wb3J0IFZhbGlkYXRlVmVyaWZpZWRCb290SW1hZ2VzCisKKworY2xhc3MgVmFsaWRhdGVUYXJnZXRGaWxlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICBzZWxmLnRlc3RkYXRhX2RpciA9IHRlc3RfdXRpbHMuZ2V0X3Rlc3RkYXRhX2RpcigpCisKKyAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgIGNvbW1vbi5DbGVhbnVwKCkKKworICBkZWYgX2dlbmVyYXRlX2Jvb3RfaW1hZ2Uoc2VsZiwgb3V0cHV0X2ZpbGUpOgorICAgIGtlcm5lbCA9IGNvbW1vbi5NYWtlVGVtcEZpbGUocHJlZml4PSdrZXJuZWwtJykKKyAgICB3aXRoIG9wZW4oa2VybmVsLCAnd2InKSBhcyBrZXJuZWxfZnA6CisgICAgICBrZXJuZWxfZnAud3JpdGUob3MudXJhbmRvbSgxMCkpCisKKyAgICBjbWQgPSBbJ21rYm9vdGltZycsICctLWtlcm5lbCcsIGtlcm5lbCwgJy1vJywgb3V0cHV0X2ZpbGVdCisgICAgcHJvYyA9IGNvbW1vbi5SdW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgc3Rkb3V0ZGF0YSwgXyA9IHByb2MuY29tbXVuaWNhdGUoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIDAsIHByb2MucmV0dXJuY29kZSwKKyAgICAgICAgIkZhaWxlZCB0byBydW4gbWtib290aW1nOiB7fSIuZm9ybWF0KHN0ZG91dGRhdGEpKQorCisgICAgY21kID0gWydib290X3NpZ25lcicsICcvYm9vdCcsIG91dHB1dF9maWxlLAorICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICd0ZXN0a2V5LnBrOCcpLAorICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICd0ZXN0a2V5Lng1MDkucGVtJyksIG91dHB1dF9maWxlXQorICAgIHByb2MgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIHN0ZG91dGRhdGEsIF8gPSBwcm9jLmNvbW11bmljYXRlKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAwLCBwcm9jLnJldHVybmNvZGUsCisgICAgICAgICJGYWlsZWQgdG8gc2lnbiBib290IGltYWdlIHdpdGggYm9vdF9zaWduZXI6IHt9Ii5mb3JtYXQoc3Rkb3V0ZGF0YSkpCisKKyAgZGVmIHRlc3RfVmFsaWRhdGVWZXJpZmllZEJvb3RJbWFnZXNfYm9vdEltYWdlKHNlbGYpOgorICAgIGlucHV0X3RtcCA9IGNvbW1vbi5NYWtlVGVtcERpcigpCisgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGlucHV0X3RtcCwgJ0lNQUdFUycpKQorICAgIGJvb3RfaW1hZ2UgPSBvcy5wYXRoLmpvaW4oaW5wdXRfdG1wLCAnSU1BR0VTJywgJ2Jvb3QuaW1nJykKKyAgICBzZWxmLl9nZW5lcmF0ZV9ib290X2ltYWdlKGJvb3RfaW1hZ2UpCisKKyAgICBpbmZvX2RpY3QgPSB7CisgICAgICAgICdib290X3NpZ25lcicgOiAndHJ1ZScsCisgICAgfQorICAgIG9wdGlvbnMgPSB7CisgICAgICAgICd2ZXJpdHlfa2V5JyA6IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Rlc3RrZXkueDUwOS5wZW0nKSwKKyAgICB9CisgICAgVmFsaWRhdGVWZXJpZmllZEJvb3RJbWFnZXMoaW5wdXRfdG1wLCBpbmZvX2RpY3QsIG9wdGlvbnMpCisKKyAgZGVmIHRlc3RfVmFsaWRhdGVWZXJpZmllZEJvb3RJbWFnZXNfYm9vdEltYWdlX3dyb25nS2V5KHNlbGYpOgorICAgIGlucHV0X3RtcCA9IGNvbW1vbi5NYWtlVGVtcERpcigpCisgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGlucHV0X3RtcCwgJ0lNQUdFUycpKQorICAgIGJvb3RfaW1hZ2UgPSBvcy5wYXRoLmpvaW4oaW5wdXRfdG1wLCAnSU1BR0VTJywgJ2Jvb3QuaW1nJykKKyAgICBzZWxmLl9nZW5lcmF0ZV9ib290X2ltYWdlKGJvb3RfaW1hZ2UpCisKKyAgICBpbmZvX2RpY3QgPSB7CisgICAgICAgICdib290X3NpZ25lcicgOiAndHJ1ZScsCisgICAgfQorICAgIG9wdGlvbnMgPSB7CisgICAgICAgICd2ZXJpdHlfa2V5JyA6IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Zlcml0eS54NTA5LnBlbScpLAorICAgIH0KKyAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIFZhbGlkYXRlVmVyaWZpZWRCb290SW1hZ2VzLCBpbnB1dF90bXAsIGluZm9fZGljdCwKKyAgICAgICAgb3B0aW9ucykKKworICBkZWYgdGVzdF9WYWxpZGF0ZVZlcmlmaWVkQm9vdEltYWdlc19ib290SW1hZ2VfY29ycnVwdGVkKHNlbGYpOgorICAgIGlucHV0X3RtcCA9IGNvbW1vbi5NYWtlVGVtcERpcigpCisgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGlucHV0X3RtcCwgJ0lNQUdFUycpKQorICAgIGJvb3RfaW1hZ2UgPSBvcy5wYXRoLmpvaW4oaW5wdXRfdG1wLCAnSU1BR0VTJywgJ2Jvb3QuaW1nJykKKyAgICBzZWxmLl9nZW5lcmF0ZV9ib290X2ltYWdlKGJvb3RfaW1hZ2UpCisKKyAgICAjIENvcnJ1cHQgdGhlIGxhdGUgYnl0ZSBvZiB0aGUgaW1hZ2UuCisgICAgd2l0aCBvcGVuKGJvb3RfaW1hZ2UsICdyK2InKSBhcyBib290X2ZwOgorICAgICAgYm9vdF9mcC5zZWVrKC0xLCBvcy5TRUVLX0VORCkKKyAgICAgIGxhc3RfYnl0ZSA9IGJvb3RfZnAucmVhZCgxKQorICAgICAgbGFzdF9ieXRlID0gY2hyKDI1NSAtIG9yZChsYXN0X2J5dGUpKQorICAgICAgYm9vdF9mcC5zZWVrKC0xLCBvcy5TRUVLX0VORCkKKyAgICAgIGJvb3RfZnAud3JpdGUobGFzdF9ieXRlKQorCisgICAgaW5mb19kaWN0ID0geworICAgICAgICAnYm9vdF9zaWduZXInIDogJ3RydWUnLAorICAgIH0KKyAgICBvcHRpb25zID0geworICAgICAgICAndmVyaXR5X2tleScgOiBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICd0ZXN0a2V5Lng1MDkucGVtJyksCisgICAgfQorICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICBBc3NlcnRpb25FcnJvciwgVmFsaWRhdGVWZXJpZmllZEJvb3RJbWFnZXMsIGlucHV0X3RtcCwgaW5mb19kaWN0LAorICAgICAgICBvcHRpb25zKQorCisgIGRlZiBfZ2VuZXJhdGVfc3lzdGVtX2ltYWdlKHNlbGYsIG91dHB1dF9maWxlKToKKyAgICB2ZXJpdHlfZmVjID0gVHJ1ZQorICAgIHBhcnRpdGlvbl9zaXplID0gMTAyNCAqIDEwMjQKKyAgICBhZGp1c3RlZF9zaXplLCB2ZXJpdHlfc2l6ZSA9IGJ1aWxkX2ltYWdlLkFkanVzdFBhcnRpdGlvblNpemVGb3JWZXJpdHkoCisgICAgICAgIHBhcnRpdGlvbl9zaXplLCB2ZXJpdHlfZmVjKQorCisgICAgIyBVc2UgYW4gZW1wdHkgcm9vdCBkaXJlY3RvcnkuCisgICAgc3lzdGVtX3Jvb3QgPSBjb21tb24uTWFrZVRlbXBEaXIoKQorICAgIGNtZCA9IFsnbWt1c2VyaW1nX21rZTJmcy5zaCcsICctcycsIHN5c3RlbV9yb290LCBvdXRwdXRfZmlsZSwgJ2V4dDQnLAorICAgICAgICAgICAnL3N5c3RlbScsIHN0cihhZGp1c3RlZF9zaXplKSwgJy1qJywgJzAnXQorICAgIHByb2MgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIHN0ZG91dGRhdGEsIF8gPSBwcm9jLmNvbW11bmljYXRlKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAwLCBwcm9jLnJldHVybmNvZGUsCisgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIHN5c3RlbSBpbWFnZSB3aXRoIG1rdXNlcmltZ19ta2UyZnMuc2g6IHt9Ii5mb3JtYXQoCisgICAgICAgICAgICBzdGRvdXRkYXRhKSkKKworICAgICMgQXBwZW5kIHRoZSB2ZXJpdHkgbWV0YWRhdGEuCisgICAgcHJvcF9kaWN0ID0geworICAgICAgICAnb3JpZ2luYWxfcGFydGl0aW9uX3NpemUnIDogc3RyKHBhcnRpdGlvbl9zaXplKSwKKyAgICAgICAgJ3BhcnRpdGlvbl9zaXplJyA6IHN0cihhZGp1c3RlZF9zaXplKSwKKyAgICAgICAgJ3Zlcml0eV9ibG9ja19kZXZpY2UnIDogJy9kZXYvYmxvY2svc3lzdGVtJywKKyAgICAgICAgJ3Zlcml0eV9rZXknIDogb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCAndGVzdGtleScpLAorICAgICAgICAndmVyaXR5X3NpZ25lcl9jbWQnIDogJ3Zlcml0eV9zaWduZXInLAorICAgICAgICAndmVyaXR5X3NpemUnIDogc3RyKHZlcml0eV9zaXplKSwKKyAgICB9CisgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICBidWlsZF9pbWFnZS5NYWtlVmVyaXR5RW5hYmxlZEltYWdlKG91dHB1dF9maWxlLCB2ZXJpdHlfZmVjLCBwcm9wX2RpY3QpKQorCisgIGRlZiB0ZXN0X1ZhbGlkYXRlVmVyaWZpZWRCb290SW1hZ2VzX3N5c3RlbUltYWdlKHNlbGYpOgorICAgIGlucHV0X3RtcCA9IGNvbW1vbi5NYWtlVGVtcERpcigpCisgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGlucHV0X3RtcCwgJ0lNQUdFUycpKQorICAgIHN5c3RlbV9pbWFnZSA9IG9zLnBhdGguam9pbihpbnB1dF90bXAsICdJTUFHRVMnLCAnc3lzdGVtLmltZycpCisgICAgc2VsZi5fZ2VuZXJhdGVfc3lzdGVtX2ltYWdlKHN5c3RlbV9pbWFnZSkKKworICAgICMgUGFjayB0aGUgdmVyaXR5IGtleS4KKyAgICB2ZXJpdHlfa2V5X21pbmNyeXB0ID0gb3MucGF0aC5qb2luKAorICAgICAgICBpbnB1dF90bXAsICdCT09UJywgJ1JBTURJU0snLCAndmVyaXR5X2tleScpCisgICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKHZlcml0eV9rZXlfbWluY3J5cHQpKQorICAgIHNodXRpbC5jb3B5ZmlsZSgKKyAgICAgICAgb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCAndGVzdGtleV9taW5jcnlwdCcpLAorICAgICAgICB2ZXJpdHlfa2V5X21pbmNyeXB0KQorCisgICAgaW5mb19kaWN0ID0geworICAgICAgICAndmVyaXR5JyA6ICd0cnVlJywKKyAgICB9CisgICAgb3B0aW9ucyA9IHsKKyAgICAgICAgJ3Zlcml0eV9rZXknIDogb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCAndGVzdGtleS54NTA5LnBlbScpLAorICAgICAgICAndmVyaXR5X2tleV9taW5jcnlwdCcgOiB2ZXJpdHlfa2V5X21pbmNyeXB0LAorICAgIH0KKyAgICBWYWxpZGF0ZVZlcmlmaWVkQm9vdEltYWdlcyhpbnB1dF90bXAsIGluZm9fZGljdCwgb3B0aW9ucykKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9tZWRpYS54NTA5LnBlbSBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9tZWRpYS54NTA5LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGNkNDQzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL21lZGlhLng1MDkucGVtCkBAIC0wLDAgKzEsMjcgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRXFEQ0NBNUNnQXdJQkFnSUpBUEs1am1FalZ5eE9NQTBHQ1NxR1NJYjNEUUVCQkFVQU1JR1VNUXN3Q1FZRAorVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTlRXOTFiblJoYVc0ZworVm1sbGR6RVFNQTRHQTFVRUNoTUhRVzVrY205cFpERVFNQTRHQTFVRUN4TUhRVzVrY205cFpERVFNQTRHQTFVRQorQXhNSFFXNWtjbTlwWkRFaU1DQUdDU3FHU0liM0RRRUpBUllUWVc1a2NtOXBaRUJoYm1SeWIybGtMbU52YlRBZQorRncwd09EQTBNVFV5TXpRd05UZGFGdzB6TlRBNU1ERXlNelF3TlRkYU1JR1VNUXN3Q1FZRFZRUUdFd0pWVXpFVAorTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTlRXOTFiblJoYVc0Z1ZtbGxkekVRTUE0RworQTFVRUNoTUhRVzVrY205cFpERVFNQTRHQTFVRUN4TUhRVzVrY205cFpERVFNQTRHQTFVRUF4TUhRVzVrY205cAorWkRFaU1DQUdDU3FHU0liM0RRRUpBUllUWVc1a2NtOXBaRUJoYm1SeWIybGtMbU52YlRDQ0FTQXdEUVlKS29aSQoraHZjTkFRRUJCUUFEZ2dFTkFEQ0NBUWdDZ2dFQkFLNGxERm9XNzVmOEtHbXNaUnN5Rjh3MnVnNkdsa0ZvMVlvRQorbjBET2hZWnhJNlAvdFBiWlNjTTg4dG82QmNJK3JLcFgyQU9JbXhkWnZQV2VmRzhoaVFyaVVJVzM3VmFxWW13SgoraWUrY3pUWTJMS0RvMGJsZ1A5VFlNb2Rua216TUNReG90M1d1Zi9NSk5NdzJudktGV2labjN3eG1mOURIejEyTwordW1WWUJuTnpBN3RpUnlicXV1MzdjdkIrMTZkcXM4dWFPQnhMZmMyQW14UU5pUjhBSVR2a0FmV05hZ2FtSHEzRAorcWNMeHhsWnloYkNhNEpOQ3BtK2tJZXI1T3Q5MWM2QW93ekhYQmdHck92Zk1oQU0rem54M0tqcGJockRiNmRkMwordzZTS3FZQWUzTzRuZ1ZpZlJObmtFVGw1WUFWMnFaUVF1b0VKRWxuYTJZeHNhUDk0UzQ4Q0FRT2pnZnd3Z2ZrdworSFFZRFZSME9CQllFRk1vcFBLcUx3TzArVkM3dlFnV2l2L0sxZmsxMU1JSEpCZ05WSFNNRWdjRXdnYjZBRk1vcAorUEtxTHdPMCtWQzd2UWdXaXYvSzFmazExb1lHYXBJR1hNSUdVTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRQorQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5UVzkxYm5SaGFXNGdWbWxsZHpFUU1BNEdBMVVFQ2hNSAorUVc1a2NtOXBaREVRTUE0R0ExVUVDeE1IUVc1a2NtOXBaREVRTUE0R0ExVUVBeE1IUVc1a2NtOXBaREVpTUNBRworQ1NxR1NJYjNEUUVKQVJZVFlXNWtjbTlwWkVCaGJtUnliMmxrTG1OdmJZSUpBUEs1am1FalZ5eE9NQXdHQTFVZAorRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRUJRQURnZ0VCQUlUZWxSYlY1S2h5RjZjOXFFaHdTUFV6YzZYMworTS9PUTFodmZQTW5sSlJZbHY4cW53eFdjcmlkZEZ5cWE0ZWgyMVVXQko2eFVMMmdwRGRVUXdBS2RqMUhnN2hWcgorZTN0YXpiT1VKQnVPeDR0MDVjUXNYSyt1Rld5dlc5R1pvam9uVWsyZ2N0Njc0M2hHU2xNMk1MRGswUCszNEk3TAorY0IrdHRqZWNkRVovYmdERzdZaUZsVGdIa2dPSFZnQjRjc2pqQUhyMEk2VjZMS3M2S0NocHRreExlOVg4R0gwSworZmlRVmxsMWFyazRIcHQ5MUcwcDE2WGs4a1lwaEs0SE5DMktLN2dGbzNFVGtleERUV1RKZ2hKMXEzMjF5ZmNKRQorUk1JaDAvbnN3MmpLMEhtWjhyZ1FXOEh5RFRqVUVHYk1GQkhDVjZsdXBEU2ZWMFpXVlFmazZBSUtHb0U9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvcGF5bG9hZF9zaWduZXIuc2ggYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvcGF5bG9hZF9zaWduZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQ0ZWYzNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9wYXlsb2FkX3NpZ25lci5zaApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCisjIFRoZSBzY3JpcHQgd2lsbCBiZSBjYWxsZWQgd2l0aCAncGF5bG9hZF9zaWduZXIuc2ggPGtleT4gLWluIDxpbnB1dD4gLW91dCA8b3V0cHV0PicuCitvcGVuc3NsIHBrZXl1dGwgLXNpZ24gLWtleWZvcm0gREVSIC1pbmtleSAkMSAtcGtleW9wdCBkaWdlc3Q6c2hhMjU2IC1pbiAkMyAtb3V0ICQ1CmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvcGxhdGZvcm0ueDUwOS5wZW0gYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvcGxhdGZvcm0ueDUwOS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3ZjAyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9wbGF0Zm9ybS54NTA5LnBlbQpAQCAtMCwwICsxLDI3IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUVxRENDQTVDZ0F3SUJBZ0lKQUxPWmdJYlFWcy82TUEwR0NTcUdTSWIzRFFFQkJBVUFNSUdVTVFzd0NRWUQKK1ZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5UVzkxYm5SaGFXNGcKK1ZtbGxkekVRTUE0R0ExVUVDaE1IUVc1a2NtOXBaREVRTUE0R0ExVUVDeE1IUVc1a2NtOXBaREVRTUE0R0ExVUUKK0F4TUhRVzVrY205cFpERWlNQ0FHQ1NxR1NJYjNEUUVKQVJZVFlXNWtjbTlwWkVCaGJtUnliMmxrTG1OdmJUQWUKK0Z3MHdPREEwTVRVeU1qUXdOVEJhRncwek5UQTVNREV5TWpRd05UQmFNSUdVTVFzd0NRWURWUVFHRXdKVlV6RVQKK01CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5UVzkxYm5SaGFXNGdWbWxsZHpFUU1BNEcKK0ExVUVDaE1IUVc1a2NtOXBaREVRTUE0R0ExVUVDeE1IUVc1a2NtOXBaREVRTUE0R0ExVUVBeE1IUVc1a2NtOXAKK1pERWlNQ0FHQ1NxR1NJYjNEUUVKQVJZVFlXNWtjbTlwWkVCaGJtUnliMmxrTG1OdmJUQ0NBU0F3RFFZSktvWkkKK2h2Y05BUUVCQlFBRGdnRU5BRENDQVFnQ2dnRUJBSng0QlpLc0RWMDRITjZxWmV6SXBnQnVOa2dNYlhJSHNTQVIKK3ZsQ0dPcXZpdFYwQW10OXhSdGJ5SUNLQXg4MU5lOXNtSkR1S2dHd21zMHNUZFNPa2ttZ2lTUVRjQVVrK2ZBclAKK0dnWElkUGFiQTN0Z01KMlFkTkpDZ09GcnJTcUhORFlaVWVyM0trZ3RDYklFc1lkZUVxeVl3YXAzUFdnQXVlcjkKKzVXMVl2dGpvMmhiNW8yQUpuRGVvTktiZjdiZTJ0RW9FbmdlaWFmelBMRlNXOHM4MjFrMzVDanVOanpTanVxdE0KKzlUTnhxeWR4bXp1bGgxU3RERlA4Rk9IYlJkVWVJMCs3NlR5YnBPMzV6bFFtRTFEc1UxWUh2Mm1pLzBxZ2ZiWDMKKzZpQU5DYWJCdEo0aFFDK0o3UkdRaVRxcldwR0E4VkxvTDRXa1YxUFBYOEdRY2NYdXlDY0NBUU9qZ2Z3d2dma3cKK0hRWURWUjBPQkJZRUZFL2tvTFBkbkxvcDl4MXloOFRudzQ4Z2hzS1pNSUhKQmdOVkhTTUVnY0V3Z2I2QUZFL2sKK29MUGRuTG9wOXgxeWg4VG53NDhnaHNLWm9ZR2FwSUdYTUlHVU1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUUKK0NCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OVFc5MWJuUmhhVzRnVm1sbGR6RVFNQTRHQTFVRUNoTUgKK1FXNWtjbTlwWkRFUU1BNEdBMVVFQ3hNSFFXNWtjbTlwWkRFUU1BNEdBMVVFQXhNSFFXNWtjbTlwWkRFaU1DQUcKK0NTcUdTSWIzRFFFSkFSWVRZVzVrY205cFpFQmhibVJ5YjJsa0xtTnZiWUlKQUxPWmdJYlFWcy82TUF3R0ExVWQKK0V3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUVCUUFEZ2dFQkFGY2xVYmpaT2g5ejNnOXRScCtHMnRad0ZBQXAKK1BJaWd6WHpYZUxjOXI4d1pmNnQyNWlFdVZzSEhZYy9FTDljejNsTEZDdUNJRk03OENqdGFHa05HQlUyQ254MkMKK3RDc2dTTCtJdGRGSktlK0Y5ZzdkRXRjdFZXVitJdVBvWFFUSU1kWVQwWms0dTRtQ0pIK2pJU1Zyb1MwZGFvK1MKKzZoMnh3M014ZTZEQU4vRFJyL1pGcnZJa2w1KzZibm9VdkFKY2NibUJPTTd6M2Z3RmxoZlBKSVJjOTdRTlk0TDMKK0oxN1hPRWxhdHVXVEc1UWhkbHhKRzNMN2FPQ0EyOXRZd2dLZE5IeUxNb3prUHZhb3NWVXo3ZnZwaWIxcVNOMUwKK0lDN2FsTWFyamRXNE9aSUQycTR1MUVZakxrL3B2WllUbE1Zd0RsRTQ0OC9TaGViazVJTlRqTGl4czFjPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3NpZ2ZpbGUuYmluIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3NpZ2ZpbGUuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ODIyMTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvc2lnZmlsZS5iaW4KQEAgLTAsMCArMSBAQAorB7pR4MLcopShvahHcPij1fkQ+bDU1idbNEvpEEyhCGMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvc2lnbmVkLXNpZ2ZpbGUuYmluIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3NpZ25lZC1zaWdmaWxlLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmQyZjllCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3NpZ25lZC1zaWdmaWxlLmJpbgpAQCAtMCwwICsxLDIgQEAKK1KhBROdJotF/3PBESX4P7l8pJwmj82A8XpiU4pBW990cecbhldL0pFsFKbg2dnlc6XSfkZj5gmPDmCer77NIworVHvd19u9Rq0G0sGfeIP4MYkfNsyLPVGwlYxW5hpeVN+w2A54WKO2L/4jqepJJ9wX7nRjTAQccJOTrAatn+tvdnrRklLhOvXzV/45KLnBBDI228ys4R1iwkJQMbg2FuNu0t+xUdVDqWeQaDtyibJPfRAlxL31iJAY4W82FOOUZBOT6gIUtMnjB+UyWWCm1QzbvKqlX1KTT3JDYSzoSSJuKGCW7W7x3NBiYWn2ucWo1BrkU4TXyilrnhxPW2A2Y6xlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXkucGs4IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXkucGs4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YmUyOTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleS5wazgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXkucHVia2V5LnBlbSBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS90ZXN0a2V5LnB1YmtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4YWU2MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS90ZXN0a2V5LnB1YmtleS5wZW0KQEAgLTAsMCArMSw5IEBACistLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQorTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF2anZ5TzJMd1dnbVFOeXE3eit4SworMDRlZzB0M0FMNHkyTmhwQUFPelZuRnlDQXJGY0ZqTFRHUUREdmtiWlA2TjEyTzYrZHdKb1BMbnRubTlBK1ZuUAorSUZGUkhnMEhVV1NiSE0rUWs4Smd2Mi8yQVZrQVVqNUoxcjl0NFgrMldJMGVSekpQMTVaam42OHBRS0dtY3ljaQorcnkwZ2J2bVl2WEwyWlVtVG01NkRtRWZDVUNSSVkySUdKL0NjTW5GZUl0VlUwTHhLc1Y1TWx0NUJPMFZ2L0NWNAorRWFpT0x3eUNub1p1VWhZdG83ZEhsTy80N3YvSDl6aGtKQzU0T0ExZGtEMzhFUGdPNUduZmhHRlNOWFFSbUpEVAorWHJGZ2Q2TytRTzR5VU5YOGxZUDEwTXppbVVwSXRaYTA1dDY4TkFEcXdZbDNUN25XenZ1QzlyNElxWkR5UGYyMQorVFFJREFRQUIKKy0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXkueDUwOS5wZW0gYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleS54NTA5LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWM4MDg1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXkueDUwOS5wZW0KQEAgLTAsMCArMSwyNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFQURDQ0F1aWdBd0lCQWdJSkFOL0Z2all6R05PS01BMEdDU3FHU0liM0RRRUJDd1VBTUlHVU1Rc3dDUVlECitWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCd3dOVFc5MWJuUmhhVzRnCitWbWxsZHpFUU1BNEdBMVVFQ2d3SFFXNWtjbTlwWkRFUU1BNEdBMVVFQ3d3SFFXNWtjbTlwWkRFUU1BNEdBMVVFCitBd3dIUVc1a2NtOXBaREVpTUNBR0NTcUdTSWIzRFFFSkFSWVRZVzVrY205cFpFQmhibVJ5YjJsa0xtTnZiVEFlCitGdzB4T0RBeE1UZ3dNRE0wTlRGYUZ3MDBOVEEyTURVd01ETTBOVEZhTUlHVU1Rc3dDUVlEVlFRR0V3SlZVekVUCitNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCd3dOVFc5MWJuUmhhVzRnVm1sbGR6RVFNQTRHCitBMVVFQ2d3SFFXNWtjbTlwWkRFUU1BNEdBMVVFQ3d3SFFXNWtjbTlwWkRFUU1BNEdBMVVFQXd3SFFXNWtjbTlwCitaREVpTUNBR0NTcUdTSWIzRFFFSkFSWVRZVzVrY205cFpFQmhibVJ5YjJsa0xtTnZiVENDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUw0NzhqdGk4Rm9Ka0RjcXU4L3NTdE9Ib05MZHdDK010allhCitRQURzMVp4Y2dnS3hYQll5MHhrQXc3NUcyVCtqZGRqdXZuY0NhRHk1N1o1dlFQbFp6eUJSVVI0TkIxRmtteHpQCitrSlBDWUw5djlnRlpBRkkrU2RhL2JlRi90bGlOSGtjeVQ5ZVdZNSt2S1VDaHBuTW5JcTh0SUc3NW1MMXk5bVZKCitrNXVlZzVoSHdsQWtTR05pQmlmd25ESnhYaUxWVk5DOFNyRmVUSmJlUVR0RmIvd2xlQkdvamk4TWdwNkdibElXCitMYU8zUjVUditPNy94L2M0WkNRdWVEZ05YWkE5L0JENER1UnAzNFJoVWpWMEVaaVEwMTZ4WUhlanZrRHVNbERWCisvSldEOWRETTRwbEtTTFdXdE9iZXZEUUE2c0dKZDArNTFzNzdndmErQ0ttUThqMzl0VTBDQXdFQUFhTlRNRkV3CitIUVlEVlIwT0JCWUVGTkpQSlpEcHE2dGMvMTlaMmt4UEEyYmo5RDZVTUI4R0ExVWRJd1FZTUJhQUZOSlBKWkRwCitxNnRjLzE5WjJreFBBMmJqOUQ2VU1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFECitnZ0VCQUJTVUc5cXJ3VjNXY0NsREp3cWtOTE40eWVWVll6a1JNR0E4L1hxT2lZclc0emgwbUtETGZyNk9lVTFDCitBS3daQkxoaHFsNTlQbzI1cjRnY3dQaVROMkRrb0NmYjNUNTlYRzhKNTRQQWdUUWpJQVozSittR1pwbG5tdUQzCit3aitVR1VwUGUwcVRyMzNaUG9KZnd4Vm80UlZuT3QvVUNzSUdYY2gwSFMvQklkcGVjaHFQMHc0ck9IVWJxNkVBCis4VUVpNWlyS1NET1U5Yi81ckQvdFgyZjRuR3dKbEtRRUhXcnNqOUxMS2xhTDdmWDM2Z2hvU3hOL3BCSk9oZWRnCisvVmpUNnhiYUV3ZnloQzZaajlhdjVYbDdVZHBZdCtyQk1yb0FHZW56ME9TeEtoSXBoZGN4NFpNaHZma0JvWUc5CitDcnVwZHFlK2tVc2ZnMlJsUGI1Z3JRM2tsTW89CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleV9taW5jcnlwdCBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS90ZXN0a2V5X21pbmNyeXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNWQzMWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleV9taW5jcnlwdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleV93aXRoX3Bhc3N3ZC5wazggYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleV93aXRoX3Bhc3N3ZC5wazgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1NjdkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS90ZXN0a2V5X3dpdGhfcGFzc3dkLnBrOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleV93aXRoX3Bhc3N3ZC54NTA5LnBlbSBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS90ZXN0a2V5X3dpdGhfcGFzc3dkLng1MDkucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTM5NmUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleV93aXRoX3Bhc3N3ZC54NTA5LnBlbQpAQCAtMCwwICsxLDI0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUVBRENDQXVpZ0F3SUJBZ0lKQU5lZlVkM1BpdTB5TUEwR0NTcUdTSWIzRFFFQkN3VUFNSUdVTVFzd0NRWUQKK1ZRUUdFd0pWVXpFVE1CRUdBMVVFQ0F3S1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ3d05UVzkxYm5SaGFXNGcKK1ZtbGxkekVRTUE0R0ExVUVDZ3dIUVc1a2NtOXBaREVRTUE0R0ExVUVDd3dIUVc1a2NtOXBaREVRTUE0R0ExVUUKK0F3d0hRVzVrY205cFpERWlNQ0FHQ1NxR1NJYjNEUUVKQVJZVFlXNWtjbTlwWkVCaGJtUnliMmxrTG1OdmJUQWUKK0Z3MHhPREF4TVRnd01ESTNORFJhRncwME5UQTJNRFV3TURJM05EUmFNSUdVTVFzd0NRWURWUVFHRXdKVlV6RVQKK01CRUdBMVVFQ0F3S1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ3d05UVzkxYm5SaGFXNGdWbWxsZHpFUU1BNEcKK0ExVUVDZ3dIUVc1a2NtOXBaREVRTUE0R0ExVUVDd3dIUVc1a2NtOXBaREVRTUE0R0ExVUVBd3dIUVc1a2NtOXAKK1pERWlNQ0FHQ1NxR1NJYjNEUUVKQVJZVFlXNWtjbTlwWkVCaGJtUnliMmxrTG1OdmJUQ0NBU0l3RFFZSktvWkkKK2h2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTEJvQTRjK3FDUUthcFFBVkdjbGJvdXNDNUovTDBUTlpKRWQKK0tTVzJuelhVSEl3Z1RRM3I4MjIyN3hrSXZqbnFYTUNzYzBxMy9OMmdHS1I0c0hxQTMwSk85RHlmZ3N4MUlTYVIKK0dYZTVjRzA0OG01VTVzbnBsUWd2UG92dGFoOVp5dndOUHpXUFlDM3VjZUphRHhLUUt3VmRzVittT1dNNldtcFEKK2JkTE8zN2p4Znl0eUFiemF6M3NHNUhBM0ZTQjhyWC94RE02SWYxOE5zeFNIcGNqYU9qWlhDNEZnNndscDBrbFkKKzUvcWhGRWRtaWV1MnpRVmVsWGpvSmZLU2t1OHRQYTdrWmVEVS9GM3VMVXEvVS94dkZrN05Wc1JWK1F2WU9kUUsKKzFRRUNjLzN5djFUS05BTjNodVdUZ3pDWDZiTUhtaTA5TnB3M01RYUdZMG9TMzRjSDl4MENBd0VBQWFOVE1GRXcKK0hRWURWUjBPQkJZRUZOc0paMG45T3BlZWEwclZBekwrMWp3a0RLelBNQjhHQTFVZEl3UVlNQmFBRk5zSlowbjkKK09wZWVhMHJWQXpMKzFqd2tES3pQTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFTEJRQUQKK2dnRUJBSi9iekl6QStOcll3UEV2NTZYS2Y2VnVqODErTTFyVEhBc0g5UHFiT3ZKVDdpTTdhVTd3QWw2dm1YQW8KK0RRdHZLb09CTWRJWHByYXB3ZTBxdUhDUW03UEd4ZytSUmVncitkY1RTVkpGdjFwbG5PRE9CT0VBVmxFZkZ3dVcKK0N6MFVTRjJqck5xKzRjaUg1elBMMWEzMU9OYjFyTWt4SlhRL3RBaTB4OG02dFp6K2pzYkUwd082cUI4MFVta0EKKzRXWTJUdS9nbkF2RnBEOHBsa2lVMEVLd2VkQkhBY2FGRlprUXAyM01Lc1ZaM1VCcXNxenpmWERZVjFPYTZySXkKK1hJWnBJMkd4NzVwdkFiNTdUMmFwL3lsMERCRUF1N05tcGxsMEdDc2dlSlZkeTd0UzRMTmo5NlF1eWEzQ0hXUXcKK1dOVFZ1YW4wS1pxd0RJbTRYbjFvSFVGUTl2Yz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS92ZXJpdHkueDUwOS5wZW0gYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdmVyaXR5Lng1MDkucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2Mzk5YzMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdmVyaXR5Lng1MDkucGVtCkBAIC0wLDAgKzEsMjQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRC9UQ0NBdVdnQXdJQkFnSUpBSmNQbURrSnFvbEpNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR1VNUXN3Q1FZRAorVlFRR0V3SlZVekVUTUJFR0ExVUVDQXdLUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnd3TlRXOTFiblJoYVc0ZworVm1sbGR6RVFNQTRHQTFVRUNnd0hRVzVrY205cFpERVFNQTRHQTFVRUN3d0hRVzVrY205cFpERVFNQTRHQTFVRQorQXd3SFFXNWtjbTlwWkRFaU1DQUdDU3FHU0liM0RRRUpBUllUWVc1a2NtOXBaRUJoYm1SeWIybGtMbU52YlRBZQorRncweE5ERXhNRFl4T1RBM05EQmFGdzAwTWpBek1qUXhPVEEzTkRCYU1JR1VNUXN3Q1FZRFZRUUdFd0pWVXpFVAorTUJFR0ExVUVDQXdLUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnd3TlRXOTFiblJoYVc0Z1ZtbGxkekVRTUE0RworQTFVRUNnd0hRVzVrY205cFpERVFNQTRHQTFVRUN3d0hRVzVrY205cFpERVFNQTRHQTFVRUF3d0hRVzVrY205cAorWkRFaU1DQUdDU3FHU0liM0RRRUpBUllUWVc1a2NtOXBaRUJoYm1SeWIybGtMbU52YlRDQ0FTSXdEUVlKS29aSQoraHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFPanJlRTB2VFZTUmVudXpPOXZuYVdmazBlUXpZYWIwZ3FwaQorNnhBemk2ZG1EK3Vnb0VLSm1iUGl1RTVEd2YyMWlzWjl1aFVVdTBkUU00NmRLNG9jS3hNUnJjbm1HeHlkRm42bworZnMzT0RKTVhPa3YyZ0tYTC9GZGJFUGREYnh6ZHU4ejN5aytXNjd1ZE0vZlc3V2JhUTNETzBrbnUraXpLYWsvMworVDQxYzV1b1htUTgxVU50QXpSR3pHY2hOVlhNbVd1VEdPa2c2VSswSTJUZDdLOHl2VU1XaEFXUFBwS0x0Vkg5cgorQUw1VHpqWU5SOTJpemRLY3ozQWpSc0kzQ1RqdHBpVkFCR2VYMFRjalJTdVpCN0s5RUs1NkhWK09GTlM2STFOUAoramREN0ZJU2h5R2xxcVpkVU9rQVVaWWFuYnBnZVQ1TjdRTDZ1dXFjR3BvVE9rYWx1NmtrQ0F3RUFBYU5RTUU0dworSFFZRFZSME9CQllFRkg1RE0vbTdvQXJmNE8zcGVlS08wWklFa3JRUE1COEdBMVVkSXdRWU1CYUFGSDVETS9tNworb0FyZjRPM3BlZUtPMFpJRWtyUVBNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQgorQUhPM05TdkRFNWpGdk1laEdHdFM4Qm5GWWRGS1JJZ2xETWM0bmlXU3poek9WWVJINFdhanhkdEJXYzVmeDBpeAorTkYvK2hWS1ZoUDZBSU9RYSsrK3NrK0hJaTdSdmlvUFBiaGpjc1ZsWmU3Y1VFR3JMU1N2ZUdvdVF5YytqMCttNgorSkY4NGtzeklsNUdHTk1UbngwWFJQTytnOHQ2aDVMV2ZuVnlkZ1pmcEdSUmcrV0hld2sxVTJIbHZUakljZWIwTgorZGNvSjhXS0pBRldkY3VFN1ZJbTR3K3ZGL0RZWC9BMk95enIyK1FSaG1ZU3YxY3VzZ0FlQzF0dkg0YXArSjFMZworVW5PdTVLaC9GcVBMTFN3TlZRcDRCdTdiOVFGZnFLOE1vajg0Ymo4OE5xUkdaZ0R5cXp1VHJGeG42Rlc3ZG15QQoreXR0dUFKQUVBeW1rMW1pcGQ5K3pwMzg9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdmFsaWRhdGVfdGFyZ2V0X2ZpbGVzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3ZhbGlkYXRlX3RhcmdldF9maWxlcy5weQppbmRleCA0YjM0ODIwLi5lOGNlYTI5IDEwMDc1NQotLS0gYS90b29scy9yZWxlYXNldG9vbHMvdmFsaWRhdGVfdGFyZ2V0X2ZpbGVzLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy92YWxpZGF0ZV90YXJnZXRfZmlsZXMucHkKQEAgLTE3LDQ2ICsxNywzOSBAQAogIiIiCiBWYWxpZGF0ZSBhIGdpdmVuIChzaWduZWQpIHRhcmdldF9maWxlcy56aXAuCiAKLUl0IHBlcmZvcm1zIGNoZWNrcyB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgaW5wdXQgemlwLgorSXQgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBjaGVja3MgdG8gYXNzZXJ0IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGlucHV0IHppcC4KKwogIC0gSXQgdmVyaWZpZXMgdGhlIGZpbGUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgb25lcyBpbiBJTUFHRVMvc3lzdGVtLmltZyAocmVhZAogICAgdmlhIElNQUdFUy9zeXN0ZW0ubWFwKSBhbmQgdGhlIG9uZXMgdW5kZXIgdW5wYWNrZWQgZm9sZGVyIG9mIFNZU1RFTS8uIFRoZQogICAgc2FtZSBjaGVjayBhbHNvIGFwcGxpZXMgdG8gdGhlIHZlbmRvciBpbWFnZSBpZiBwcmVzZW50LgorCisgLSBJdCB2ZXJpZmllcyB0aGUgaW5zdGFsbC1yZWNvdmVyeSBzY3JpcHQgY29uc2lzdGVuY3ksIGJ5IGNvbXBhcmluZyB0aGUKKyAgIGNoZWNrc3VtcyBpbiB0aGUgc2NyaXB0IGFnYWluc3QgdGhlIG9uZXMgb2YgSU1BR0VTL3tib290LHJlY292ZXJ5fS5pbWcuCisKKyAtIEl0IHZlcmlmaWVzIHRoZSBzaWduZWQgVmVyaWZpZWQgQm9vdCByZWxhdGVkIGltYWdlcywgZm9yIGJvdGggb2YgVmVyaWZpZWQKKyAgIEJvb3QgMS4wIGFuZCAyLjAgKGFrYSBBVkIpLgogIiIiCiAKLWltcG9ydCBjb21tb24KK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGZpbGVjbXAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHJlCi1pbXBvcnQgc3BhcnNlX2ltZwotaW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB6aXBmaWxlCiAKLQotZGVmIF9HZXRJbWFnZSh3aGljaCwgdG1wZGlyKToKLSAgYXNzZXJ0IHdoaWNoIGluICgnc3lzdGVtJywgJ3ZlbmRvcicpCi0KLSAgcGF0aCA9IG9zLnBhdGguam9pbih0bXBkaXIsICdJTUFHRVMnLCB3aGljaCArICcuaW1nJykKLSAgbWFwcGF0aCA9IG9zLnBhdGguam9pbih0bXBkaXIsICdJTUFHRVMnLCB3aGljaCArICcubWFwJykKLQotICAjIE1hcCBmaWxlIG11c3QgZXhpc3QgKGFsbG93ZWQgdG8gYmUgZW1wdHkpLgotICBhc3NlcnQgb3MucGF0aC5leGlzdHMocGF0aCkgYW5kIG9zLnBhdGguZXhpc3RzKG1hcHBhdGgpCi0KLSAgY2xvYmJlcmVkX2Jsb2NrcyA9ICcwJwotICByZXR1cm4gc3BhcnNlX2ltZy5TcGFyc2VJbWFnZShwYXRoLCBtYXBwYXRoLCBjbG9iYmVyZWRfYmxvY2tzKQoraW1wb3J0IGNvbW1vbgogCiAKIGRlZiBfUmVhZEZpbGUoZmlsZV9uYW1lLCB1bnBhY2tlZF9uYW1lLCByb3VuZF91cD1GYWxzZSk6CiAgICIiIkNvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBGaWxlIG9iamVjdC4gUm91bmRzIHVwIGl0cyBzaXplIGlmIG5lZWRlZC4iIiIKIAotICBkZWYgUm91bmRVcFRvNEsodmFsdWUpOgotICAgIHJvdW5kZWRfdXAgPSB2YWx1ZSArIDQwOTUKLSAgICByZXR1cm4gcm91bmRlZF91cCAtIChyb3VuZGVkX3VwICUgNDA5NikKLQogICBhc3NlcnQgb3MucGF0aC5leGlzdHModW5wYWNrZWRfbmFtZSkKICAgd2l0aCBvcGVuKHVucGFja2VkX25hbWUsICdyJykgYXMgZjoKICAgICBmaWxlX2RhdGEgPSBmLnJlYWQoKQogICBmaWxlX3NpemUgPSBsZW4oZmlsZV9kYXRhKQogICBpZiByb3VuZF91cDoKLSAgICBmaWxlX3NpemVfcm91bmRlZF91cCA9IFJvdW5kVXBUbzRLKGZpbGVfc2l6ZSkKKyAgICBmaWxlX3NpemVfcm91bmRlZF91cCA9IGNvbW1vbi5Sb3VuZFVwVG80SyhmaWxlX3NpemUpCiAgICAgZmlsZV9kYXRhICs9ICdcMCcgKiAoZmlsZV9zaXplX3JvdW5kZWRfdXAgLSBmaWxlX3NpemUpCiAgIHJldHVybiBjb21tb24uRmlsZShmaWxlX25hbWUsIGZpbGVfZGF0YSkKIApAQCAtNjQsMTMgKzU3LDEzIEBACiBkZWYgVmFsaWRhdGVGaWxlQWdhaW5zdFNoYTEoaW5wdXRfdG1wLCBmaWxlX25hbWUsIGZpbGVfcGF0aCwgZXhwZWN0ZWRfc2hhMSk6CiAgICIiIkNoZWNrIGlmIHRoZSBmaWxlIGhhcyB0aGUgZXhwZWN0ZWQgU0hBLTEuIiIiCiAKLSAgbG9nZ2luZy5pbmZvKCdWYWxpZGF0aW5nIHRoZSBTSEEtMSBvZiB7fScuZm9ybWF0KGZpbGVfbmFtZSkpCisgIGxvZ2dpbmcuaW5mbygnVmFsaWRhdGluZyB0aGUgU0hBLTEgb2YgJXMnLCBmaWxlX25hbWUpCiAgIHVucGFja2VkX25hbWUgPSBvcy5wYXRoLmpvaW4oaW5wdXRfdG1wLCBmaWxlX3BhdGgpCiAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyh1bnBhY2tlZF9uYW1lKQogICBhY3R1YWxfc2hhMSA9IF9SZWFkRmlsZShmaWxlX25hbWUsIHVucGFja2VkX25hbWUsIEZhbHNlKS5zaGExCiAgIGFzc2VydCBhY3R1YWxfc2hhMSA9PSBleHBlY3RlZF9zaGExLCBcCiAgICAgICAnU0hBLTEgbWlzbWF0Y2hlcyBmb3Ige30uIGFjdHVhbCB7fSwgZXhwZWN0ZWQge30nLmZvcm1hdCgKLSAgICAgIGZpbGVfbmFtZSwgYWN0dWFsX3NoYTEsIGV4cGVjdGVkX3NoYTEpCisgICAgICAgICAgZmlsZV9uYW1lLCBhY3R1YWxfc2hhMSwgZXhwZWN0ZWRfc2hhMSkKIAogCiBkZWYgVmFsaWRhdGVGaWxlQ29uc2lzdGVuY3koaW5wdXRfemlwLCBpbnB1dF90bXApOgpAQCAtNzgsMzMgKzcxLDMxIEBACiAKICAgZGVmIENoZWNrQWxsRmlsZXMod2hpY2gpOgogICAgIGxvZ2dpbmcuaW5mbygnQ2hlY2tpbmcgJXMgaW1hZ2UuJywgd2hpY2gpCi0gICAgaW1hZ2UgPSBfR2V0SW1hZ2Uod2hpY2gsIGlucHV0X3RtcCkKKyAgICAjIEFsbG93IGhhdmluZyBzaGFyZWQgYmxvY2tzIHdoZW4gbG9hZGluZyB0aGUgc3BhcnNlIGltYWdlLCBiZWNhdXNlIGFsbG93aW5nCisgICAgIyB0aGF0IGRvZXNuJ3QgYWZmZWN0IHRoZSBjaGVja3MgYmVsb3cgKHdlIHdpbGwgaGF2ZSBhbGwgdGhlIGJsb2NrcyBvbiBmaWxlLAorICAgICMgdW5sZXNzIGl0J3Mgc2tpcHBlZCBkdWUgdG8gdGhlIGhvbGVzKS4KKyAgICBpbWFnZSA9IGNvbW1vbi5HZXRTcGFyc2VJbWFnZSh3aGljaCwgaW5wdXRfdG1wLCBpbnB1dF96aXAsIFRydWUpCiAgICAgcHJlZml4ID0gJy8nICsgd2hpY2gKICAgICBmb3IgZW50cnkgaW4gaW1hZ2UuZmlsZV9tYXA6CisgICAgICAjIFNraXAgZW50cmllcyBsaWtlICdfX05PTlpFUk8tMCcuCiAgICAgICBpZiBub3QgZW50cnkuc3RhcnRzd2l0aChwcmVmaXgpOgogICAgICAgICBjb250aW51ZQogCiAgICAgICAjIFJlYWQgdGhlIGJsb2NrcyB0aGF0IHRoZSBmaWxlIHJlc2lkZXMuIE5vdGUgdGhhdCBpdCB3aWxsIGNvbnRhaW4gdGhlCiAgICAgICAjIGJ5dGVzIHBhc3QgdGhlIGZpbGUgbGVuZ3RoLCB3aGljaCBpcyBleHBlY3RlZCB0byBiZSBwYWRkZWQgd2l0aCAnXDAncy4KICAgICAgIHJhbmdlcyA9IGltYWdlLmZpbGVfbWFwW2VudHJ5XQorCisgICAgICBpbmNvbXBsZXRlID0gcmFuZ2VzLmV4dHJhLmdldCgnaW5jb21wbGV0ZScsIEZhbHNlKQorICAgICAgaWYgaW5jb21wbGV0ZToKKyAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdTa2lwcGluZyAlcyB0aGF0IGhhcyBpbmNvbXBsZXRlIGJsb2NrIGxpc3QnLCBlbnRyeSkKKyAgICAgICAgY29udGludWUKKwogICAgICAgYmxvY2tzX3NoYTEgPSBpbWFnZS5SYW5nZVNoYTEocmFuZ2VzKQogCiAgICAgICAjIFRoZSBmaWxlbmFtZSB1bmRlciB1bnBhY2tlZCBkaXJlY3RvcnksIHN1Y2ggYXMgU1lTVEVNL2Jpbi9zaC4KICAgICAgIHVucGFja2VkX25hbWUgPSBvcy5wYXRoLmpvaW4oCiAgICAgICAgICAgaW5wdXRfdG1wLCB3aGljaC51cHBlcigpLCBlbnRyeVsobGVuKHByZWZpeCkgKyAxKTpdKQogICAgICAgdW5wYWNrZWRfZmlsZSA9IF9SZWFkRmlsZShlbnRyeSwgdW5wYWNrZWRfbmFtZSwgVHJ1ZSkKLSAgICAgIGZpbGVfc2l6ZSA9IHVucGFja2VkX2ZpbGUuc2l6ZQotCi0gICAgICAjIGJsb2NrLm1hcCBtYXkgY29udGFpbiBsZXNzIGJsb2NrcywgYmVjYXVzZSBta2UyZnMgbWF5IHNraXAgYWxsb2NhdGluZwotICAgICAgIyBibG9ja3MgaWYgdGhleSBjb250YWluIGFsbCB6ZXJvcy4gV2UgY2FuJ3QgcmVjb25zdHJ1Y3Qgc3VjaCBhIGZpbGUgZnJvbQotICAgICAgIyBpdHMgYmxvY2sgbGlzdC4gKEJ1ZzogNjUyMTM2MTYpCi0gICAgICBpZiBmaWxlX3NpemUgPiByYW5nZXMuc2l6ZSgpICogNDA5NjoKLSAgICAgICAgbG9nZ2luZy53YXJuaW5nKAotICAgICAgICAgICAgJ1NraXBwaW5nICVzIHRoYXQgaGFzIGxlc3MgYmxvY2tzOiBmaWxlIHNpemUgJWQtYnl0ZSwnCi0gICAgICAgICAgICAnIHJhbmdlcyAlcyAoJWQtYnl0ZSknLCBlbnRyeSwgZmlsZV9zaXplLCByYW5nZXMsCi0gICAgICAgICAgICByYW5nZXMuc2l6ZSgpICogNDA5NikKLSAgICAgICAgY29udGludWUKLQogICAgICAgZmlsZV9zaGExID0gdW5wYWNrZWRfZmlsZS5zaGExCiAgICAgICBhc3NlcnQgYmxvY2tzX3NoYTEgPT0gZmlsZV9zaGExLCBcCiAgICAgICAgICAgJ2ZpbGU6ICVzLCByYW5nZTogJXMsIGJsb2Nrc19zaGExOiAlcywgZmlsZV9zaGExOiAlcycgJSAoCkBAIC0xNDcsMTAgKzEzOCwxMCBAQAogCiAgIHNjcmlwdF9wYXRoID0gJ1NZU1RFTS9iaW4vaW5zdGFsbC1yZWNvdmVyeS5zaCcKICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbnB1dF90bXAsIHNjcmlwdF9wYXRoKSk6Ci0gICAgbG9nZ2luZy5pbmZvKCd7fSBkb2VzIG5vdCBleGlzdCBpbiBpbnB1dF90bXAnLmZvcm1hdChzY3JpcHRfcGF0aCkpCisgICAgbG9nZ2luZy5pbmZvKCclcyBkb2VzIG5vdCBleGlzdCBpbiBpbnB1dF90bXAnLCBzY3JpcHRfcGF0aCkKICAgICByZXR1cm4KIAotICBsb2dnaW5nLmluZm8oJ0NoZWNraW5nIHt9Jy5mb3JtYXQoc2NyaXB0X3BhdGgpKQorICBsb2dnaW5nLmluZm8oJ0NoZWNraW5nICVzJywgc2NyaXB0X3BhdGgpCiAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oaW5wdXRfdG1wLCBzY3JpcHRfcGF0aCksICdyJykgYXMgc2NyaXB0OgogICAgIGxpbmVzID0gc2NyaXB0LnJlYWQoKS5zdHJpcCgpLnNwbGl0KCdcbicpCiAgIGFzc2VydCBsZW4obGluZXMpID49IDYKQEAgLTE2OCw3ICsxNTksNyBAQAogICAgIGV4cGVjdGVkX3JlY292ZXJ5X3NoYTEgPSBhcHBseXBhdGNoX2FyZ3ZbM10uc3RyaXAoKQogICAgIGFzc2VydCBleHBlY3RlZF9yZWNvdmVyeV9jaGVja19zaGExID09IGV4cGVjdGVkX3JlY292ZXJ5X3NoYTEKICAgICBWYWxpZGF0ZUZpbGVBZ2FpbnN0U2hhMShpbnB1dF90bXAsICdyZWNvdmVyeS5pbWcnLAotICAgICAgICAnU1lTVEVNL2V0Yy9yZWNvdmVyeS5pbWcnLCBleHBlY3RlZF9yZWNvdmVyeV9zaGExKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTWVNURU0vZXRjL3JlY292ZXJ5LmltZycsIGV4cGVjdGVkX3JlY292ZXJ5X3NoYTEpCiAgIGVsc2U6CiAgICAgIyBXZSdyZSBwYXRjaGluZyBib290LmltZyB0byBnZXQgcmVjb3ZlcnkuaW1nIHdoZXJlIGJvbnVzX2FyZ3MgaXMgb3B0aW9uYWwKICAgICBpZiBhcHBseXBhdGNoX2FyZ3ZbMV0gPT0gIi1iIjoKQEAgLTE4Miw0NCArMTczLDE2NSBAQAogICAgIGJvb3RfaW5mbyA9IGFwcGx5cGF0Y2hfYXJndltib290X2luZm9faW5kZXhdLnN0cmlwKCkuc3BsaXQoJzonKQogICAgIGFzc2VydCBsZW4oYm9vdF9pbmZvKSA9PSA0CiAgICAgVmFsaWRhdGVGaWxlQWdhaW5zdFNoYTEoaW5wdXRfdG1wLCBmaWxlX25hbWU9J2Jvb3QuaW1nJywKLSAgICAgICAgZmlsZV9wYXRoPSdJTUFHRVMvYm9vdC5pbWcnLCBleHBlY3RlZF9zaGExPWJvb3RfaW5mb1szXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg9J0lNQUdFUy9ib290LmltZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc2hhMT1ib290X2luZm9bM10pCiAKICAgICByZWNvdmVyeV9zaGExX2luZGV4ID0gYm9vdF9pbmZvX2luZGV4ICsgMgogICAgIGV4cGVjdGVkX3JlY292ZXJ5X3NoYTEgPSBhcHBseXBhdGNoX2FyZ3ZbcmVjb3Zlcnlfc2hhMV9pbmRleF0KICAgICBhc3NlcnQgZXhwZWN0ZWRfcmVjb3ZlcnlfY2hlY2tfc2hhMSA9PSBleHBlY3RlZF9yZWNvdmVyeV9zaGExCiAgICAgVmFsaWRhdGVGaWxlQWdhaW5zdFNoYTEoaW5wdXRfdG1wLCBmaWxlX25hbWU9J3JlY292ZXJ5LmltZycsCi0gICAgICAgIGZpbGVfcGF0aD0nSU1BR0VTL3JlY292ZXJ5LmltZycsCi0gICAgICAgIGV4cGVjdGVkX3NoYTE9ZXhwZWN0ZWRfcmVjb3Zlcnlfc2hhMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg9J0lNQUdFUy9yZWNvdmVyeS5pbWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NoYTE9ZXhwZWN0ZWRfcmVjb3Zlcnlfc2hhMSkKIAotICBsb2dnaW5nLmluZm8oJ0RvbmUgY2hlY2tpbmcge30nLmZvcm1hdChzY3JpcHRfcGF0aCkpCisgIGxvZ2dpbmcuaW5mbygnRG9uZSBjaGVja2luZyAlcycsIHNjcmlwdF9wYXRoKQogCiAKLWRlZiBtYWluKGFyZ3YpOgotICBkZWYgb3B0aW9uX2hhbmRsZXIoKToKLSAgICByZXR1cm4gVHJ1ZQorZGVmIFZhbGlkYXRlVmVyaWZpZWRCb290SW1hZ2VzKGlucHV0X3RtcCwgaW5mb19kaWN0LCBvcHRpb25zKToKKyAgIiIiVmFsaWRhdGVzIHRoZSBWZXJpZmllZCBCb290IHJlbGF0ZWQgaW1hZ2VzLgogCi0gIGFyZ3MgPSBjb21tb24uUGFyc2VPcHRpb25zKAotICAgICAgYXJndiwgX19kb2NfXywgZXh0cmFfb3B0cz0iIiwKLSAgICAgIGV4dHJhX2xvbmdfb3B0cz1bXSwKLSAgICAgIGV4dHJhX29wdGlvbl9oYW5kbGVyPW9wdGlvbl9oYW5kbGVyKQorICBGb3IgVmVyaWZpZWQgQm9vdCAxLjAsIGl0IHZlcmlmaWVzIHRoZSBzaWduYXR1cmVzIG9mIHRoZSBib290YWJsZSBpbWFnZXMKKyAgKGJvb3QvcmVjb3ZlcnkgZXRjKSwgYXMgd2VsbCBhcyB0aGUgZG0tdmVyaXR5IG1ldGFkYXRhIGluIHN5c3RlbSBpbWFnZXMKKyAgKHN5c3RlbS92ZW5kb3IvcHJvZHVjdCkuIEZvciBWZXJpZmllZCBCb290IDIuMCwgaXQgY2FsbHMgYXZidG9vbCB0byB2ZXJpZnkKKyAgdmJtZXRhLmltZywgd2hpY2ggaW4gdHVybiB2ZXJpZmllcyBhbGwgdGhlIGRlc2NyaXB0b3JzIGxpc3RlZCBpbiB2Ym1ldGEuCiAKLSAgaWYgbGVuKGFyZ3MpICE9IDE6Ci0gICAgY29tbW9uLlVzYWdlKF9fZG9jX18pCi0gICAgc3lzLmV4aXQoMSkKKyAgQXJnczoKKyAgICBpbnB1dF90bXA6IFRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHVucGFja2VkIHRhcmdldC1maWxlcy56aXAuCisgICAgaW5mb19kaWN0OiBUaGUgbG9hZGVkIGluZm8gZGljdC4KKyAgICBvcHRpb25zOiBBIGRpY3QgdGhhdCBjb250YWlucyB0aGUgdXNlci1zdXBwbGllZCBwdWJsaWMga2V5cyB0byBiZSB1c2VkIGZvcgorICAgICAgICBpbWFnZSB2ZXJpZmljYXRpb24uIEluIHBhcnRpY3VsYXIsICd2ZXJpdHlfa2V5JyBpcyB1c2VkIHRvIHZlcmlmeSB0aGUKKyAgICAgICAgYm9vdGFibGUgaW1hZ2VzIGluIFZCIDEuMCwgYW5kIHRoZSB2Ym1ldGEgaW1hZ2UgaW4gVkIgMi4wLCB3aGVyZQorICAgICAgICBhcHBsaWNhYmxlLiAndmVyaXR5X2tleV9taW5jcnlwdCcgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgc3lzdGVtCisgICAgICAgIGltYWdlcyBpbiBWQiAxLjAuCisKKyAgUmFpc2VzOgorICAgIEFzc2VydGlvbkVycm9yOiBPbiBhbnkgdmVyaWZpY2F0aW9uIGZhaWx1cmUuCisgICIiIgorICAjIFZlcmlmaWVkIGJvb3QgMS4wIChpbWFnZXMgc2lnbmVkIHdpdGggYm9vdF9zaWduZXIgYW5kIHZlcml0eV9zaWduZXIpLgorICBpZiBpbmZvX2RpY3QuZ2V0KCdib290X3NpZ25lcicpID09ICd0cnVlJzoKKyAgICBsb2dnaW5nLmluZm8oJ1ZlcmlmeWluZyBWZXJpZmllZCBCb290IGltYWdlcy4uLicpCisKKyAgICAjIFZlcmlmeSB0aGUgYm9vdC9yZWNvdmVyeSBpbWFnZXMgKHNpZ25lZCB3aXRoIGJvb3Rfc2lnbmVyKSwgYWdhaW5zdCB0aGUKKyAgICAjIGdpdmVuIFguNTA5IGVuY29kZWQgcHVia2V5IChvciBmYWxsaW5nIGJhY2sgdG8gdGhlIG9uZSBpbiB0aGUgaW5mb19kaWN0IGlmCisgICAgIyBub25lIGdpdmVuKS4KKyAgICB2ZXJpdHlfa2V5ID0gb3B0aW9uc1sndmVyaXR5X2tleSddCisgICAgaWYgdmVyaXR5X2tleSBpcyBOb25lOgorICAgICAgdmVyaXR5X2tleSA9IGluZm9fZGljdFsndmVyaXR5X2tleSddICsgJy54NTA5LnBlbScKKyAgICBmb3IgaW1hZ2UgaW4gKCdib290LmltZycsICdyZWNvdmVyeS5pbWcnLCAncmVjb3ZlcnktdHdvLXN0ZXAuaW1nJyk6CisgICAgICBpbWFnZV9wYXRoID0gb3MucGF0aC5qb2luKGlucHV0X3RtcCwgJ0lNQUdFUycsIGltYWdlKQorICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGltYWdlX3BhdGgpOgorICAgICAgICBjb250aW51ZQorCisgICAgICBjbWQgPSBbJ2Jvb3Rfc2lnbmVyJywgJy12ZXJpZnknLCBpbWFnZV9wYXRoLCAnLWNlcnRpZmljYXRlJywgdmVyaXR5X2tleV0KKyAgICAgIHByb2MgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgc3Rkb3V0ZGF0YSwgXyA9IHByb2MuY29tbXVuaWNhdGUoKQorICAgICAgYXNzZXJ0IHByb2MucmV0dXJuY29kZSA9PSAwLCBcCisgICAgICAgICAgJ0ZhaWxlZCB0byB2ZXJpZnkge30gd2l0aCBib290X3NpZ25lcjpcbnt9Jy5mb3JtYXQoaW1hZ2UsIHN0ZG91dGRhdGEpCisgICAgICBsb2dnaW5nLmluZm8oCisgICAgICAgICAgJ1ZlcmlmaWVkICVzIHdpdGggYm9vdF9zaWduZXIgKGtleTogJXMpOlxuJXMnLCBpbWFnZSwgdmVyaXR5X2tleSwKKyAgICAgICAgICBzdGRvdXRkYXRhLnJzdHJpcCgpKQorCisgICMgVmVyaWZ5IHZlcml0eSBzaWduZWQgc3lzdGVtIGltYWdlcyBpbiBWZXJpZmllZCBCb290IDEuMC4gTm90ZSB0aGF0IG5vdCB1c2luZworICAjICdlbGlmJyBoZXJlLCBzaW5jZSAnYm9vdF9zaWduZXInIGFuZCAndmVyaXR5JyBhcmUgbm90IGJ1bmRsZWQgaW4gVkIgMS4wLgorICBpZiBpbmZvX2RpY3QuZ2V0KCd2ZXJpdHknKSA9PSAndHJ1ZSc6CisgICAgIyBGaXJzdCB2ZXJpZnkgdGhhdCB0aGUgdmVyaXR5IGtleSB0aGF0J3MgYnVpbHQgaW50byB0aGUgcm9vdCBpbWFnZSAoYXMKKyAgICAjIC92ZXJpdHlfa2V5KSBtYXRjaGVzIHRoZSBvbmUgZ2l2ZW4gdmlhIGNvbW1hbmQgbGluZSwgaWYgYW55LgorICAgIGlmIGluZm9fZGljdC5nZXQoInN5c3RlbV9yb290X2ltYWdlIikgPT0gInRydWUiOgorICAgICAgdmVyaXR5X2tleV9taW5jcnlwdCA9IG9zLnBhdGguam9pbihpbnB1dF90bXAsICdST09UJywgJ3Zlcml0eV9rZXknKQorICAgIGVsc2U6CisgICAgICB2ZXJpdHlfa2V5X21pbmNyeXB0ID0gb3MucGF0aC5qb2luKAorICAgICAgICAgIGlucHV0X3RtcCwgJ0JPT1QnLCAnUkFNRElTSycsICd2ZXJpdHlfa2V5JykKKyAgICBhc3NlcnQgb3MucGF0aC5leGlzdHModmVyaXR5X2tleV9taW5jcnlwdCksICdNaXNzaW5nIHZlcml0eV9rZXknCisKKyAgICBpZiBvcHRpb25zWyd2ZXJpdHlfa2V5X21pbmNyeXB0J10gaXMgTm9uZToKKyAgICAgIGxvZ2dpbmcud2FybigKKyAgICAgICAgICAnU2tpcHBlZCBjaGVja2luZyB0aGUgY29udGVudCBvZiAvdmVyaXR5X2tleSwgYXMgdGhlIGtleSBmaWxlIG5vdCAnCisgICAgICAgICAgJ3Byb3ZpZGVkLiBVc2UgLS12ZXJpdHlfa2V5X21pbmNyeXB0IHRvIHNwZWNpZnkuJykKKyAgICBlbHNlOgorICAgICAgZXhwZWN0ZWRfa2V5ID0gb3B0aW9uc1sndmVyaXR5X2tleV9taW5jcnlwdCddCisgICAgICBhc3NlcnQgZmlsZWNtcC5jbXAoZXhwZWN0ZWRfa2V5LCB2ZXJpdHlfa2V5X21pbmNyeXB0LCBzaGFsbG93PUZhbHNlKSwgXAorICAgICAgICAgICJNaXNtYXRjaGluZyBtaW5jcnlwdCB2ZXJpdHkga2V5IGZpbGVzIgorICAgICAgbG9nZ2luZy5pbmZvKCdWZXJpZmllZCB0aGUgY29udGVudCBvZiAvdmVyaXR5X2tleScpCisKKyAgICAjIFRoZW4gdmVyaWZ5IHRoZSB2ZXJpdHkgc2lnbmVkIHN5c3RlbS92ZW5kb3IvcHJvZHVjdCBpbWFnZXMsIGFnYWluc3QgdGhlCisgICAgIyB2ZXJpdHkgcHVia2V5IGluIG1pbmNyeXB0IGZvcm1hdC4KKyAgICBmb3IgaW1hZ2UgaW4gKCdzeXN0ZW0uaW1nJywgJ3ZlbmRvci5pbWcnLCAncHJvZHVjdC5pbWcnKToKKyAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmpvaW4oaW5wdXRfdG1wLCAnSU1BR0VTJywgaW1hZ2UpCisKKyAgICAgICMgV2UgYXJlIG5vdCBjaGVja2luZyBpZiB0aGUgaW1hZ2UgaXMgYWN0dWFsbHkgZW5hYmxlZCB2aWEgaW5mb19kaWN0IChlLmcuCisgICAgICAjICdzeXN0ZW1fdmVyaXR5X2Jsb2NrX2RldmljZT0uLi4nKS4gQmVjYXVzZSBpdCdzIG1vc3QgbGlrZWx5IGEgYnVnIHRoYXQKKyAgICAgICMgc2tpcHMgc2lnbmluZyBzb21lIG9mIHRoZSBpbWFnZXMgaW4gc2lnbmVkIHRhcmdldC1maWxlcy56aXAsIHdoaWxlCisgICAgICAjIGhhdmluZyB0aGUgdG9wLWxldmVsIHZlcml0eSBmbGFnIGVuYWJsZWQuCisgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW1hZ2VfcGF0aCk6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICAgIGNtZCA9IFsndmVyaXR5X3ZlcmlmaWVyJywgaW1hZ2VfcGF0aCwgJy1taW5jcnlwdCcsIHZlcml0eV9rZXlfbWluY3J5cHRdCisgICAgICBwcm9jID0gY29tbW9uLlJ1bihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgIHN0ZG91dGRhdGEsIF8gPSBwcm9jLmNvbW11bmljYXRlKCkKKyAgICAgIGFzc2VydCBwcm9jLnJldHVybmNvZGUgPT0gMCwgXAorICAgICAgICAgICdGYWlsZWQgdG8gdmVyaWZ5IHt9IHdpdGggdmVyaXR5X3ZlcmlmaWVyIChrZXk6IHt9KTpcbnt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgIGltYWdlLCB2ZXJpdHlfa2V5X21pbmNyeXB0LCBzdGRvdXRkYXRhKQorICAgICAgbG9nZ2luZy5pbmZvKAorICAgICAgICAgICdWZXJpZmllZCAlcyB3aXRoIHZlcml0eV92ZXJpZmllciAoa2V5OiAlcyk6XG4lcycsIGltYWdlLAorICAgICAgICAgIHZlcml0eV9rZXlfbWluY3J5cHQsIHN0ZG91dGRhdGEucnN0cmlwKCkpCisKKyAgIyBIYW5kbGUgdGhlIGNhc2Ugb2YgVmVyaWZpZWQgQm9vdCAyLjAgKEFWQikuCisgIGlmIGluZm9fZGljdC5nZXQoImF2Yl9lbmFibGUiKSA9PSAidHJ1ZSI6CisgICAgbG9nZ2luZy5pbmZvKCdWZXJpZnlpbmcgVmVyaWZpZWQgQm9vdCAyLjAgKEFWQikgaW1hZ2VzLi4uJykKKworICAgIGtleSA9IG9wdGlvbnNbJ3Zlcml0eV9rZXknXQorICAgIGlmIGtleSBpcyBOb25lOgorICAgICAga2V5ID0gaW5mb19kaWN0WydhdmJfdmJtZXRhX2tleV9wYXRoJ10KKyAgICAjIGF2YnRvb2wgdmVyaWZpZXMgYWxsIHRoZSBpbWFnZXMgdGhhdCBoYXZlIGRlc2NyaXB0b3JzIGxpc3RlZCBpbiB2Ym1ldGEuCisgICAgaW1hZ2UgPSBvcy5wYXRoLmpvaW4oaW5wdXRfdG1wLCAnSU1BR0VTJywgJ3ZibWV0YS5pbWcnKQorICAgIGNtZCA9IFsnYXZidG9vbCcsICd2ZXJpZnlfaW1hZ2UnLCAnLS1pbWFnZScsIGltYWdlLCAnLS1rZXknLCBrZXldCisgICAgcHJvYyA9IGNvbW1vbi5SdW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgc3Rkb3V0ZGF0YSwgXyA9IHByb2MuY29tbXVuaWNhdGUoKQorICAgIGFzc2VydCBwcm9jLnJldHVybmNvZGUgPT0gMCwgXAorICAgICAgICAnRmFpbGVkIHRvIHZlcmlmeSB7fSB3aXRoIHZlcml0eV92ZXJpZmllciAoa2V5OiB7fSk6XG57fScuZm9ybWF0KAorICAgICAgICAgICAgaW1hZ2UsIGtleSwgc3Rkb3V0ZGF0YSkKKworICAgIGxvZ2dpbmcuaW5mbygKKyAgICAgICAgJ1ZlcmlmaWVkICVzIHdpdGggYXZidG9vbCAoa2V5OiAlcyk6XG4lcycsIGltYWdlLCBrZXksCisgICAgICAgIHN0ZG91dGRhdGEucnN0cmlwKCkpCisKKworZGVmIG1haW4oKToKKyAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICBkZXNjcmlwdGlvbj1fX2RvY19fLAorICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcikKKyAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICd0YXJnZXRfZmlsZXMnLAorICAgICAgaGVscD0ndGhlIGlucHV0IHRhcmdldF9maWxlcy56aXAgdG8gYmUgdmFsaWRhdGVkJykKKyAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICctLXZlcml0eV9rZXknLAorICAgICAgaGVscD0ndGhlIHZlcml0eSBwdWJsaWMga2V5IHRvIHZlcmlmeSB0aGUgYm9vdGFibGUgaW1hZ2VzIChWZXJpZmllZCAnCisgICAgICAgICAgICdCb290IDEuMCksIG9yIHRoZSB2Ym1ldGEgaW1hZ2UgKFZlcmlmaWVkIEJvb3QgMi4wKSwgd2hlcmUgJworICAgICAgICAgICAnYXBwbGljYWJsZScpCisgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLS12ZXJpdHlfa2V5X21pbmNyeXB0JywKKyAgICAgIGhlbHA9J3RoZSB2ZXJpdHkgcHVibGljIGtleSBpbiBtaW5jcnlwdCBmb3JtYXQgdG8gdmVyaWZ5IHRoZSBzeXN0ZW0gJworICAgICAgICAgICAnaW1hZ2VzLCBpZiB0YXJnZXQgdXNpbmcgVmVyaWZpZWQgQm9vdCAxLjAnKQorICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICMgVW5wcm92aWRlZCBhcmdzIHdpbGwgaGF2ZSAnTm9uZScgYXMgdGhlIHZhbHVlLgorICBvcHRpb25zID0gdmFycyhhcmdzKQogCiAgIGxvZ2dpbmdfZm9ybWF0ID0gJyUoYXNjdGltZSlzIC0gJShmaWxlbmFtZSlzIC0gJShsZXZlbG5hbWUpLThzOiAlKG1lc3NhZ2UpcycKICAgZGF0ZV9mb3JtYXQgPSAnJVkvJW0vJWQgJUg6JU06JVMnCiAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZPLCBmb3JtYXQ9bG9nZ2luZ19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD1kYXRlX2Zvcm1hdCkKIAotICBsb2dnaW5nLmluZm8oIlVuemlwcGluZyB0aGUgaW5wdXQgdGFyZ2V0X2ZpbGVzLnppcDogJXMiLCBhcmdzWzBdKQotICBpbnB1dF90bXAsIGlucHV0X3ppcCA9IGNvbW1vbi5VbnppcFRlbXAoYXJnc1swXSkKKyAgbG9nZ2luZy5pbmZvKCJVbnppcHBpbmcgdGhlIGlucHV0IHRhcmdldF9maWxlcy56aXA6ICVzIiwgYXJncy50YXJnZXRfZmlsZXMpCisgIGlucHV0X3RtcCA9IGNvbW1vbi5VbnppcFRlbXAoYXJncy50YXJnZXRfZmlsZXMpCiAKLSAgVmFsaWRhdGVGaWxlQ29uc2lzdGVuY3koaW5wdXRfemlwLCBpbnB1dF90bXApCisgIHdpdGggemlwZmlsZS5aaXBGaWxlKGFyZ3MudGFyZ2V0X2ZpbGVzLCAncicpIGFzIGlucHV0X3ppcDoKKyAgICBWYWxpZGF0ZUZpbGVDb25zaXN0ZW5jeShpbnB1dF96aXAsIGlucHV0X3RtcCkKIAogICBpbmZvX2RpY3QgPSBjb21tb24uTG9hZEluZm9EaWN0KGlucHV0X3RtcCkKICAgVmFsaWRhdGVJbnN0YWxsUmVjb3ZlcnlTY3JpcHQoaW5wdXRfdG1wLCBpbmZvX2RpY3QpCiAKKyAgVmFsaWRhdGVWZXJpZmllZEJvb3RJbWFnZXMoaW5wdXRfdG1wLCBpbmZvX2RpY3QsIG9wdGlvbnMpCisKICAgIyBUT0RPOiBDaGVjayBpZiB0aGUgT1RBIGtleXMgaGF2ZSBiZWVuIHByb3Blcmx5IHVwZGF0ZWQgKHRoZSBvbmVzIG9uIC9zeXN0ZW0sCiAgICMgaW4gcmVjb3ZlcnkgaW1hZ2UpLgogCkBAIC0yMjgsNiArMzQwLDYgQEAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgdHJ5OgotICAgIG1haW4oc3lzLmFyZ3ZbMTpdKQorICAgIG1haW4oKQogICBmaW5hbGx5OgogICAgIGNvbW1vbi5DbGVhbnVwKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Nvb25nX3RvX2NvbnZlcnQucHkgYi90b29scy9zb29uZ190b19jb252ZXJ0LnB5CmluZGV4IDNkNjJkNDMuLjA4M2Y2ZjcgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Nvb25nX3RvX2NvbnZlcnQucHkKKysrIGIvdG9vbHMvc29vbmdfdG9fY29udmVydC5weQpAQCAtNzYsOCArNzYsMTAgQEAKICAgICBwcm9ibGVtcyA9IGRpY3QoKQogICAgIGRlcHMgPSBkaWN0KCkKICAgICByZXZlcnNlX2RlcHMgPSBkaWN0KCkKKyAgICBtb2R1bGVfdHlwZXMgPSBkaWN0KCkKIAotICAgIGZvciAobW9kdWxlLCBwcm9ibGVtLCBkZXBlbmRlbmNpZXMpIGluIHJlYWRlcjoKKyAgICBmb3IgKG1vZHVsZSwgbW9kdWxlX3R5cGUsIHByb2JsZW0sIGRlcGVuZGVuY2llcykgaW4gcmVhZGVyOgorICAgICAgICBtb2R1bGVfdHlwZXNbbW9kdWxlXSA9IG1vZHVsZV90eXBlCiAgICAgICAgIHByb2JsZW1zW21vZHVsZV0gPSBwcm9ibGVtCiAgICAgICAgIGRlcHNbbW9kdWxlXSA9IFtkIGZvciBkIGluIGRlcGVuZGVuY2llcy5zdHJpcCgpLnNwbGl0KCcgJykgaWYgZCAhPSAiIl0KICAgICAgICAgZm9yIGRlcCBpbiBkZXBzW21vZHVsZV06CkBAIC05NCwxNiArOTYsMTkgQEAKICAgICAgICAgZXh0cmEgPSAiIgogICAgICAgICBpZiBsZW4ocHJvYmxlbXNbbW9kdWxlXSkgPiAwOgogICAgICAgICAgICAgZXh0cmEgPSAiICh7fSkiLmZvcm1hdChwcm9ibGVtc1ttb2R1bGVdKQotICAgICAgICByZXN1bHRzLmFwcGVuZCgoY291bnRfZGVwcyhyZXZlcnNlX2RlcHMsIG1vZHVsZSwgW10pLCBtb2R1bGUgKyBleHRyYSkpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKChjb3VudF9kZXBzKHJldmVyc2VfZGVwcywgbW9kdWxlLCBbXSksIG1vZHVsZSArIGV4dHJhLCBtb2R1bGVfdHlwZXNbbW9kdWxlXSkpCiAKICAgICByZXR1cm4gc29ydGVkKHJlc3VsdHMsIGtleT1sYW1iZGEgcmVzdWx0OiAoLXJlc3VsdFswXSwgcmVzdWx0WzFdKSkKIAorZGVmIGZpbHRlcihyZXN1bHRzLCBtb2R1bGVfdHlwZSk6CisgICAgcmV0dXJuIFt4IGZvciB4IGluIHJlc3VsdHMgaWYgeFsyXSA9PSBtb2R1bGVfdHlwZV0KKwogZGVmIGRpc3BsYXkocmVzdWx0cyk6CiAgICAgIiIiRGlzcGxheXMgdGhlIHJlc3VsdHMiIiIKICAgICBjb3VudF9oZWFkZXIgPSAiIyBCbG9ja2VkIG9uIgogICAgIGNvdW50X3dpZHRoID0gbGVuKGNvdW50X2hlYWRlcikKICAgICBwcmludCgie30gTW9kdWxlIChwb3RlbnRpYWwgcHJvYmxlbXMpIi5mb3JtYXQoY291bnRfaGVhZGVyKSkKLSAgICBmb3IgKGNvdW50LCBtb2R1bGUpIGluIHJlc3VsdHM6CisgICAgZm9yIChjb3VudCwgbW9kdWxlLCBtb2R1bGVfdHlwZSkgaW4gcmVzdWx0czoKICAgICAgICAgcHJpbnQoIns6Pnt9fSB7fSIuZm9ybWF0KGNvdW50LCBjb3VudF93aWR0aCwgbW9kdWxlKSkKIAogZGVmIG1haW4oZmlsZW5hbWUpOgpAQCAtMTExLDcgKzExNiwxNSBAQAogICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgY3N2ZmlsZToKICAgICAgICAgcmVzdWx0cyA9IHByb2Nlc3MoY3N2LnJlYWRlcihjc3ZmaWxlKSkKIAotICAgIGRpc3BsYXkocmVzdWx0cykKKyAgICBuYXRpdmVfcmVzdWx0cyA9IGZpbHRlcihyZXN1bHRzLCAibmF0aXZlIikKKyAgICBqYXZhX3Jlc3VsdHMgPSBmaWx0ZXIocmVzdWx0cywgImphdmEiKQorCisgICAgcHJpbnQoIm5hdGl2ZSBtb2R1bGVzIHJlYWR5IHRvIGNvbnZlcnQiKQorICAgIGRpc3BsYXkobmF0aXZlX3Jlc3VsdHMpCisKKyAgICBwcmludCgiIikKKyAgICBwcmludCgiamF2YSBtb2R1bGVzIHJlYWR5IHRvIGNvbnZlcnQiKQorICAgIGRpc3BsYXkoamF2YV9yZXN1bHRzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGlmIGxlbihzeXMuYXJndikgIT0gMjoKZGlmZiAtLWdpdCBhL3Rvb2xzL3dhcm4ucHkgYi90b29scy93YXJuLnB5CmluZGV4IGNjNjNkZTQuLjAxMzk4YmUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3dhcm4ucHkKKysrIGIvdG9vbHMvd2Fybi5weQpAQCAtNTA5LDYgKzUwOSwyNiBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkxPVywKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBGaWVsZHMgdGhhdCBjYW4gYmUgbnVsbCBzaG91bGQgYmUgYW5ub3RhdGVkIEBOdWxsYWJsZScsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0ZpZWxkTWlzc2luZ051bGxhYmxlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTE9XLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IE1ldGhvZCBwYXJhbWV0ZXJzIHRoYXQgYXJlblwndCBjaGVja2VkIGZvciBudWxsIHNob3VsZG5cJ3QgYmUgYW5ub3RhdGVkIEBOdWxsYWJsZScsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1BhcmFtZXRlck5vdE51bGxhYmxlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTE9XLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IE1ldGhvZHMgdGhhdCBjYW4gcmV0dXJuIG51bGwgc2hvdWxkIGJlIGFubm90YXRlZCBATnVsbGFibGUnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtSZXR1cm5NaXNzaW5nTnVsbGFibGVcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5MT1csCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVXNlIHBhcmFtZXRlciBjb21tZW50cyB0byBkb2N1bWVudCBhbWJpZ3VvdXMgbGl0ZXJhbHMnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtCb29sZWFuUGFyYW1ldGVyXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTE9XLAorICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IEZpZWxkIG5hbWUgaXMgQ09OU1RBTlQgQ0FTRSwgYnV0IGZpZWxkIGlzIG5vdCBzdGF0aWMgYW5kIGZpbmFsJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ29uc3RhbnRGaWVsZFxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC01MTksMTEgKzUzOSwyMSBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkxPVywKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBVc2UgSmF2YVwncyB1dGlsaXR5IGZ1bmN0aW9uYWwgaW50ZXJmYWNlcyBpbnN0ZWFkIG9mIEZ1bmN0aW9uXHUwMDNjQSwgQj4gZm9yIHByaW1pdGl2ZSB0eXBlcy4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtMYW1iZGFGdW5jdGlvbmFsSW50ZXJmYWNlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTE9XLAorICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IFByZWZlciBcJ0xcJyB0byBcJ2xcJyBmb3IgdGhlIHN1ZmZpeCB0byBsb25nIGxpdGVyYWxzJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTG9uZ0xpdGVyYWxMb3dlckNhc2VTdWZmaXhcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5MT1csCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQSBwcml2YXRlIG1ldGhvZCB0aGF0IGRvZXMgbm90IHJlZmVyZW5jZSB0aGUgZW5jbG9zaW5nIGluc3RhbmNlIGNhbiBiZSBzdGF0aWMnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtNZXRob2RDYW5CZVN0YXRpY1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkxPVywKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBDLXN0eWxlIGFycmF5IGRlY2xhcmF0aW9ucyBzaG91bGQgbm90IGJlIHVzZWQnLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtNaXhlZEFycmF5RGltZW5zaW9uc1xdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC01MzksMTEgKzU2OSwyMSBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkxPVywKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBBdm9pZCBoYXZpbmcgbXVsdGlwbGUgdW5hcnkgb3BlcmF0b3JzIGFjdGluZyBvbiB0aGUgc2FtZSB2YXJpYWJsZSBpbiBhIG1ldGhvZCBjYWxsJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTXVsdGlwbGVVbmFyeU9wZXJhdG9yc0luTWV0aG9kQ2FsbFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkxPVywKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBQYWNrYWdlIG5hbWVzIHNob3VsZCBtYXRjaCB0aGUgZGlyZWN0b3J5IHRoZXkgYXJlIGRlY2xhcmVkIGluJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUGFja2FnZUxvY2F0aW9uXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTE9XLAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IE5vbi1zdGFuZGFyZCBwYXJhbWV0ZXIgY29tbWVudDsgcHJlZmVyIGAvKnBhcmFtTmFtZT0qLyBhcmdgJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUGFyYW1ldGVyQ29tbWVudFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkxPVywKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBVdGlsaXR5IGNsYXNzZXMgKG9ubHkgc3RhdGljIG1lbWJlcnMpIGFyZSBub3QgZGVzaWduZWQgdG8gYmUgaW5zdGFudGlhdGVkIGFuZCBzaG91bGQgYmUgbWFkZSBub25pbnN0YW50aWFibGUgd2l0aCBhIGRlZmF1bHQgY29uc3RydWN0b3IuJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUHJpdmF0ZUNvbnN0cnVjdG9yRm9yVXRpbGl0eUNsYXNzXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKQEAgLTU1NCwxMSArNTk0LDMxIEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTE9XLAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRoZSBkZWZhdWx0IGNhc2Ugb2YgYSBzd2l0Y2ggc2hvdWxkIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IHN0YXRlbWVudCBncm91cCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1N3aXRjaERlZmF1bHRcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5MT1csCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogVW5jaGVja2VkIGV4Y2VwdGlvbnMgZG8gbm90IG5lZWQgdG8gYmUgZGVjbGFyZWQgaW4gdGhlIG1ldGhvZCBzaWduYXR1cmUuJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbVGhyb3dzVW5jaGVja2VkRXhjZXB0aW9uXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTE9XLAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFR5cGUgcGFyYW1ldGVycyBtdXN0IGJlIGEgc2luZ2xlIGxldHRlciB3aXRoIGFuIG9wdGlvbmFsIG51bWVyaWMgc3VmZml4LCBvciBhbiBVcHBlckNhbWVsQ2FzZSBuYW1lIGZvbGxvd2VkIGJ5IHRoZSBsZXR0ZXIgXCdUXCcuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbVHlwZVBhcmFtZXRlck5hbWluZ1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkxPVywKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBDb25zdHJ1Y3RvcnMgYW5kIG1ldGhvZHMgd2l0aCB0aGUgc2FtZSBuYW1lIHNob3VsZCBhcHBlYXIgc2VxdWVudGlhbGx5IHdpdGggbm8gb3RoZXIgY29kZSBpbiBiZXR3ZWVuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbVW5ncm91cGVkT3ZlcmxvYWRzXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTE9XLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFVubmVjZXNzYXJ5IGNhbGwgdG8gTnVsbFBvaW50ZXJUZXN0ZXIjc2V0RGVmYXVsdCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1VubmVjZXNzYXJ5U2V0RGVmYXVsdFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkxPVywKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBVc2luZyBzdGF0aWMgaW1wb3J0cyBmb3IgdHlwZXMgaXMgdW5uZWNlc3NhcnknLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtVbm5lY2Vzc2FyeVN0YXRpY0ltcG9ydFxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC01NjcsNiArNjI3LDYxIEBACiAgICAgICAgICAnSmF2YTogV2lsZGNhcmQgaW1wb3J0cywgc3RhdGljIG9yIG90aGVyd2lzZSwgc2hvdWxkIG5vdCBiZSB1c2VkJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbV2lsZGNhcmRJbXBvcnRcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5MT1csCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUmVtb3ZlRmllbGRQcmVmaXhlc1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkxPVywKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBQcmVmZXIgYXNzZXJ0VGhyb3dzIHRvIEV4cGVjdGVkRXhjZXB0aW9uJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRXhwZWN0ZWRFeGNlcHRpb25NaWdyYXRpb25cXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5MT1csCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogTG9nZ2VyIGluc3RhbmNlcyBhcmUgbm90IGNvbnN0YW50cyAtLSB0aGV5IGFyZSBtdXRhYmxlIGFuZCBoYXZlIHNpZGUgZWZmZWN0cyAtLSBhbmQgc2hvdWxkIG5vdCBiZSBuYW1lZCB1c2luZyBDT05TVEFOVCBDQVNFJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTG9nZ2VyVmFyaWFibGVDYXNlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTE9XLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFByZWZlciBhc3NlcnRUaHJvd3MgdG8gQFRlc3QoZXhwZWN0ZWQ9Li4uKScsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1Rlc3RFeGNlcHRpb25NaWdyYXRpb25cXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogUHVibGljIGZpZWxkcyBtdXN0IGJlIGZpbmFsLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW05vbkZpbmFsUHVibGljRmllbGRzXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFByaXZhdGUgZmllbGRzIHRoYXQgYXJlIG9ubHkgYXNzaWduZWQgaW4gdGhlIGluaXRpYWxpemVyIHNob3VsZCBiZSBtYWRlIGZpbmFsLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1ByaXZhdGVGaWVsZHNOb3RBc3NpZ25lZFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBMaXN0cyByZXR1cm5lZCBieSBtZXRob2RzIHNob3VsZCBiZSBpbW11dGFibGUuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUmV0dXJuZWRMaXN0Tm90SW1tdXRhYmxlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFBhcmFtZXRlcnMgdG8gbG9nIG1ldGhvZHMgc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgYnkgYSBjYWxsIHRvIFN0cmluZy5mb3JtYXQoKSBvciBNZXNzYWdlRm9ybWF0LmZvcm1hdCgpLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1NhZmVyTG9nZ2VyRm9ybWF0XF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFBhcmFtZXRlcnMgdG8gbG9nIG1ldGhvZHMgc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgYnkgYSBjYWxsIHRvIHRvU3RyaW5nKCk7IHNlZSBiLzIyOTg2NjY1LicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1NhZmVyTG9nZ2VyVG9TdHJpbmdcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQSBjYWxsIHRvIEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eSgpIGluIGEgZmluYWxseSBibG9jay4gT3RoZXJ3aXNlIHRoZSB3cm9uZyBCaW5kZXIgaWRlbnRpdHkgbWF5IGJlIHVzZWQgYnkgc3Vic2VxdWVudCBjb2RlLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0JpbmRlcklkZW50aXR5UmVzdG9yZWREYW5nZXJvdXNseVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBDbGFzc2VzIGV4dGVuZGluZyBQcmVmZXJlbmNlQWN0aXZpdHkgbXVzdCBpbXBsZW1lbnQgaXNWYWxpZEZyYWdtZW50IHN1Y2ggdGhhdCBpdCBkb2VzIG5vdCB1bmNvbmRpdGlvbmFsbHkgcmV0dXJuIHRydWUgdG8gcHJldmVudCB2dWxuZXJhYmlsaXR5IHRvIGZyYWdtZW50IGluamVjdGlvbiBhdHRhY2tzLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0ZyYWdtZW50SW5qZWN0aW9uXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IFN1YmNsYXNzZXMgb2YgRnJhZ21lbnQgbXVzdCBiZSBpbnN0YW50aWFibGUgdmlhIENsYXNzI25ld0luc3RhbmNlKCk6IHRoZSBjbGFzcyBtdXN0IGJlIHB1YmxpYywgc3RhdGljIGFuZCBoYXZlIGEgcHVibGljIG51bGxhcnkgY29uc3RydWN0b3InLApAQCAtNTc5LDYgKzY5NCwyNiBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBBIHdha2Vsb2NrIGFjcXVpcmVkIHdpdGggYSB0aW1lb3V0IG1heSBiZSByZWxlYXNlZCBieSB0aGUgc3lzdGVtIGJlZm9yZSBjYWxsaW5nIGByZWxlYXNlYCwgZXZlbiBhZnRlciBjaGVja2luZyBgaXNIZWxkKClgLiBJZiBzbywgaXQgd2lsbCB0aHJvdyBhIFJ1bnRpbWVFeGNlcHRpb24uIFBsZWFzZSB3cmFwIGluIGEgdHJ5L2NhdGNoIGJsb2NrLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1dha2Vsb2NrUmVsZWFzZWREYW5nZXJvdXNseVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBBcmd1bWVudHMgYXJlIGluIHRoZSB3cm9uZyBvcmRlciBvciBjb3VsZCBiZSBjb21tZW50ZWQgZm9yIGNsYXJpdHkuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQXJndW1lbnRTZWxlY3Rpb25EZWZlY3RDaGVja2VyXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IEFyZ3VtZW50cyBhcmUgc3dhcHBlZCBpbiBhc3NlcnRFcXVhbHMtbGlrZSBjYWxsJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQXNzZXJ0RXF1YWxzQXJndW1lbnRPcmRlckNoZWNrZXJcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQW4gZXF1YWxpdHkgdGVzdCBiZXR3ZWVuIG9iamVjdHMgd2l0aCBpbmNvbXBhdGlibGUgdHlwZXMgYWx3YXlzIHJldHVybnMgZmFsc2UnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtFcXVhbHNJbmNvbXBhdGlibGVUeXBlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IEBBc3Npc3RlZEluamVjdCBhbmQgQEluamVjdCBzaG91bGQgbm90IGJlIHVzZWQgb24gZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBpbiB0aGUgc2FtZSBjbGFzcy4nLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtBc3Npc3RlZEluamVjdEFuZEluamVjdE9uQ29uc3RydWN0b3JzXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKQEAgLTYwNCwxMSArNzM5LDIxIEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRoZSBvcmRlcmluZyBvZiBwYXJhbWV0ZXJzIGluIG92ZXJsb2FkZWQgbWV0aG9kcyBzaG91bGQgYmUgYXMgY29uc2lzdGVudCBhcyBwb3NzaWJsZSAod2hlbiB2aWV3ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0KScsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0luY29uc2lzdGVudE92ZXJsb2Fkc1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBEb3VibGUtY2hlY2tlZCBsb2NraW5nIG9uIG5vbi12b2xhdGlsZSBmaWVsZHMgaXMgdW5zYWZlJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRG91YmxlQ2hlY2tlZExvY2tpbmdcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQW5ub3RhdGlvbnMgc2hvdWxkIGFsd2F5cyBiZSBpbW11dGFibGUnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJbW11dGFibGVBbm5vdGF0aW9uQ2hlY2tlclxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBFbnVtcyBzaG91bGQgYWx3YXlzIGJlIGltbXV0YWJsZScsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0ltbXV0YWJsZUVudW1DaGVja2VyXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKQEAgLTYyOSwxMyArNzc0LDEzIEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IEEgZGlmZmVyZW50IHBvdGVudGlhbCBhcmd1bWVudCBpcyBtb3JlIHNpbWlsYXIgdG8gdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciB0aGFuIHRoZSBleGlzdGluZyBhcmd1bWVudDsgdGhpcyBtYXkgYmUgYW4gZXJyb3InLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtBcmd1bWVudFBhcmFtZXRlck1pc21hdGNoXF0gLisiXX0sCisgICAgICAgICAnSmF2YTogQXNzZXJ0aW9ucyBtYXkgYmUgZGlzYWJsZWQgYXQgcnVudGltZSBhbmQgZG8gbm90IGd1YXJhbnRlZSB0aGF0IGV4ZWN1dGlvbiB3aWxsIGhhbHQgaGVyZTsgY29uc2lkZXIgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGluc3RlYWQnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtBc3NlcnRGYWxzZVxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBBc3NlcnRpb25zIG1heSBiZSBkaXNhYmxlZCBhdCBydW50aW1lIGFuZCBkbyBub3QgZ3VhcmFudGVlIHRoYXQgZXhlY3V0aW9uIHdpbGwgaGFsdCBoZXJlOyBjb25zaWRlciB0aHJvd2luZyBhbiBleGNlcHRpb24gaW5zdGVhZCcsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0Fzc2VydEZhbHNlXF0gLisiXX0sCisgICAgICAgICAnSmF2YTogVGhpcyBhc3NlcnRpb24gdGhyb3dzIGFuIEFzc2VydGlvbkVycm9yIGlmIGl0IGZhaWxzLCB3aGljaCB3aWxsIGJlIGNhdWdodCBieSBhbiBlbmNsb3NpbmcgdHJ5IGJsb2NrLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0Fzc2VydGlvbkZhaWx1cmVJZ25vcmVkXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgpAQCAtNjY0LDIzICs4MDksNjMgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRHVyYXRpb24gY2FuIGJlIGV4cHJlc3NlZCBtb3JlIGNsZWFybHkgd2l0aCBkaWZmZXJlbnQgdW5pdHMnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtDYW5vbmljYWxEdXJhdGlvblxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBMb2dnaW5nIG9yIHJldGhyb3dpbmcgZXhjZXB0aW9ucyBzaG91bGQgdXN1YWxseSBiZSBwcmVmZXJyZWQgdG8gY2F0Y2hpbmcgYW5kIGNhbGxpbmcgcHJpbnRTdGFja1RyYWNlJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ2F0Y2hBbmRQcmludFN0YWNrVHJhY2VcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogSWdub3JpbmcgZXhjZXB0aW9ucyBhbmQgY2FsbGluZyBmYWlsKCkgaXMgdW5uZWNlc3NhcnksIGFuZCBtYWtlcyB0ZXN0IG91dHB1dCBsZXNzIHVzZWZ1bCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0NhdGNoRmFpbFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBJbm5lciBjbGFzcyBpcyBub24tc3RhdGljIGJ1dCBkb2VzIG5vdCByZWZlcmVuY2UgZW5jbG9zaW5nIGNsYXNzJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ2xhc3NDYW5CZVN0YXRpY1xdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBDbGFzcy5uZXdJbnN0YW5jZSgpIGJ5cGFzc2VzIGV4Y2VwdGlvbiBjaGVja2luZzsgcHJlZmVyIGdldENvbnN0cnVjdG9yKCkubmV3SW5zdGFuY2UoKScsCisgICAgICAgICAnSmF2YTogQ2xhc3MubmV3SW5zdGFuY2UoKSBieXBhc3NlcyBleGNlcHRpb24gY2hlY2tpbmc7IHByZWZlciBnZXREZWNsYXJlZENvbnN0cnVjdG9yKCkubmV3SW5zdGFuY2UoKScsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0NsYXNzTmV3SW5zdGFuY2VcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogSW1wbGljaXQgdXNlIG9mIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IGNoYXJzZXQsIHdoaWNoIGNhbiByZXN1bHQgaW4gZS5nLiBub24tQVNDSUkgY2hhcmFjdGVycyBiZWluZyBzaWxlbnRseSByZXBsYWNlZCB3aXRoIFwnP1wnIGluIG1hbnkgZW52aXJvbm1lbnRzJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRGVmYXVsdENoYXJzZXRcXSAuKyJdfSwKKyAgICAgICAgICdKYXZhOiBUaGUgdHlwZSBvZiB0aGUgYXJyYXkgcGFyYW1ldGVyIG9mIENvbGxlY3Rpb24udG9BcnJheSBuZWVkcyB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGFycmF5IHR5cGUnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtDb2xsZWN0aW9uVG9BcnJheVNhZmVQYXJhbWV0ZXJcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogVGhpcyBjb2RlLCB3aGljaCBjb3VudHMgZWxlbWVudHMgdXNpbmcgYSBsb29wLCBjYW4gYmUgcmVwbGFjZWQgYnkgYSBzaW1wbGVyIGxpYnJhcnkgbWV0aG9kJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRWxlbWVudHNDb3VudGVkSW5Mb29wXF0gLisiXX0sCisgICAgICAgICAnSmF2YTogQ29sbGVjdG9yLm9mKCkgc2hvdWxkIG5vdCB1c2Ugc3RhdGUnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtDb2xsZWN0b3JTaG91bGROb3RVc2VTdGF0ZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBDbGFzcyBzaG91bGQgbm90IGltcGxlbWVudCBib3RoIGBDb21wYXJhYmxlYCBhbmQgYENvbXBhcmF0b3JgJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ29tcGFyYWJsZUFuZENvbXBhcmF0b3JcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQ29uc3RydWN0b3JzIHNob3VsZCBub3QgaW52b2tlIG92ZXJyaWRhYmxlIG1ldGhvZHMuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ29uc3RydWN0b3JJbnZva2VzT3ZlcnJpZGFibGVcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQ29uc3RydWN0b3JzIHNob3VsZCBub3QgcGFzcyB0aGUgXCd0aGlzXCcgcmVmZXJlbmNlIG91dCBpbiBtZXRob2QgaW52b2NhdGlvbnMsIHNpbmNlIHRoZSBvYmplY3QgbWF5IG5vdCBiZSBmdWxseSBjb25zdHJ1Y3RlZC4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtDb25zdHJ1Y3RvckxlYWtzVGhpc1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBEYXRlRm9ybWF0IGlzIG5vdCB0aHJlYWQtc2FmZSwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhcyBhIGNvbnN0YW50IGZpZWxkLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0RhdGVGb3JtYXRDb25zdGFudFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBJbXBsaWNpdCB1c2Ugb2YgdGhlIHBsYXRmb3JtIGRlZmF1bHQgY2hhcnNldCwgd2hpY2ggY2FuIHJlc3VsdCBpbiBkaWZmZXJpbmcgYmVoYXZpb3IgYmV0d2VlbiBKVk0gZXhlY3V0aW9ucyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgaWYgdGhlIGVuY29kaW5nIG9mIHRoZSBkYXRhIHNvdXJjZSBkb2VzblwndCBtYXRjaCBleHBlY3RhdGlvbnMuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRGVmYXVsdENoYXJzZXRcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6CkBAIC02OTQsOCArODc5LDEzIEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IEFuIGVxdWFsaXR5IHRlc3QgYmV0d2VlbiBvYmplY3RzIHdpdGggaW5jb21wYXRpYmxlIHR5cGVzIGFsd2F5cyByZXR1cm5zIGZhbHNlJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRXF1YWxzSW5jb21wYXRpYmxlVHlwZVxdIC4rIl19LAorICAgICAgICAgJ0phdmE6IENhbGxzIHRvIEV4cGVjdGVkRXhjZXB0aW9uI2V4cGVjdCBzaG91bGQgYWx3YXlzIGJlIGZvbGxvd2VkIGJ5IGV4YWN0bHkgb25lIHN0YXRlbWVudC4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtFeHBlY3RlZEV4Y2VwdGlvbkNoZWNrZXJcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogU3dpdGNoIGNhc2UgbWF5IGZhbGwgdGhyb3VnaCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0ZhbGxUaHJvdWdoXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgpAQCAtNzA0LDI2ICs4OTQsNjEgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVXNlIHBhcmVudGhlc2VzIHRvIG1ha2UgdGhlIHByZWNlZGVuY2UgZXhwbGljaXQnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtGbG9hdENhc3RcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbCBsb3NlcyBwcmVjaXNpb24nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtGbG9hdGluZ1BvaW50TGl0ZXJhbFByZWNpc2lvblxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBPdmVybG9hZHMgd2lsbCBiZSBhbWJpZ3VvdXMgd2hlbiBwYXNzaW5nIGxhbWJkYSBhcmd1bWVudHMnLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtGdW5jdGlvbmFsSW50ZXJmYWNlQ2xhc2hcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogUmV0dXJuIHZhbHVlIG9mIG1ldGhvZHMgcmV0dXJuaW5nIEZ1dHVyZSBtdXN0IGJlIGNoZWNrZWQuIElnbm9yaW5nIHJldHVybmVkIEZ1dHVyZXMgc3VwcHJlc3NlcyBleGNlcHRpb25zIHRocm93biBmcm9tIHRoZSBjb2RlIHRoYXQgY29tcGxldGVzIHRoZSBGdXR1cmUuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRnV0dXJlUmV0dXJuVmFsdWVJZ25vcmVkXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IENhbGxpbmcgZ2V0Q2xhc3MoKSBvbiBhbiBlbnVtIG1heSByZXR1cm4gYSBzdWJjbGFzcyBvZiB0aGUgZW51bSB0eXBlJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbR2V0Q2xhc3NPbkVudW1cXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogSGlkaW5nIGZpZWxkcyBvZiBzdXBlcmNsYXNzZXMgbWF5IGNhdXNlIGNvbmZ1c2lvbiBhbmQgZXJyb3JzJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSGlkaW5nRmllbGRcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogVGhpcyBhbm5vdGF0aW9uIGhhcyBpbmNvbXBhdGlibGUgbW9kaWZpZXJzIGFzIHNwZWNpZmllZCBieSBpdHMgQEluY29tcGF0aWJsZU1vZGlmaWVycyBhbm5vdGF0aW9uJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSW5jb21wYXRpYmxlTW9kaWZpZXJzXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRoaXMgZm9yIGxvb3AgaW5jcmVtZW50cyB0aGUgc2FtZSB2YXJpYWJsZSBpbiB0aGUgaGVhZGVyIGFuZCBpbiB0aGUgYm9keScsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0luY3JlbWVudEluRm9yTG9vcEFuZEhlYWRlclxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBQbGVhc2UgYWxzbyBvdmVycmlkZSBpbnQgcmVhZChieXRlW10sIGludCwgaW50KSwgb3RoZXJ3aXNlIG11bHRpLWJ5dGUgcmVhZHMgZnJvbSB0aGlzIGlucHV0IHN0cmVhbSBhcmUgbGlrZWx5IHRvIGJlIHNsb3cuJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSW5wdXRTdHJlYW1TbG93TXVsdGlieXRlUmVhZFxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBDYXN0aW5nIGluc2lkZSBhbiBpZiBibG9jayBzaG91bGQgYmUgcGxhdXNpYmx5IGNvbnNpc3RlbnQgd2l0aCB0aGUgaW5zdGFuY2VvZiB0eXBlJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSW5zdGFuY2VPZkFuZENhc3RNYXRjaFdyb25nVHlwZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBFeHByZXNzaW9uIG9mIHR5cGUgaW50IG1heSBvdmVyZmxvdyBiZWZvcmUgYmVpbmcgYXNzaWduZWQgdG8gYSBsb25nJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSW50TG9uZ01hdGhcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogQ2xhc3Mgc2hvdWxkIG5vdCBpbXBsZW1lbnQgYm90aCBgSXRlcmFibGVgIGFuZCBgSXRlcmF0b3JgJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSXRlcmFibGVBbmRJdGVyYXRvclxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC03MzQsMTYgKzk1OSw0MSBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBTb21lIEpVbml0NCBjb25zdHJ1Y3QgY2Fubm90IGJlIHVzZWQgaW4gYSBKVW5pdDMgY29udGV4dC4gQ29udmVydCB5b3VyIGNsYXNzIHRvIEpVbml0NCBzdHlsZSB0byB1c2UgdGhlbS4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKVW5pdDRDbGFzc1VzZWRJbkpVbml0M1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBUZXN0IGNsYXNzIGluaGVyaXRzIGZyb20gSlVuaXQgM1wncyBUZXN0Q2FzZSBidXQgaGFzIEpVbml0IDQgQFRlc3QgYW5ub3RhdGlvbnMuJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSlVuaXRBbWJpZ3VvdXNUZXN0Q2xhc3NcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogVGhlIEdvb2dsZSBKYXZhIFN0eWxlIEd1aWRlIHJlcXVpcmVzIHN3aXRjaCBzdGF0ZW1lbnRzIHRvIGhhdmUgYW4gZXhwbGljaXQgZGVmYXVsdCcsCisgICAgICAgICAnSmF2YTogTmV2ZXIgcmV1c2UgY2xhc3MgbmFtZXMgZnJvbSBqYXZhLmxhbmcnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKYXZhTGFuZ0NsYXNoXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFN1Z2dlc3RzIGFsdGVybmF0aXZlcyB0byBvYnNvbGV0ZSBKREsgY2xhc3Nlcy4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKZGtPYnNvbGV0ZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBBc3NpZ25tZW50IHdoZXJlIGEgYm9vbGVhbiBleHByZXNzaW9uIHdhcyBleHBlY3RlZDsgdXNlID09IGlmIHRoaXMgYXNzaWdubWVudCB3YXNuXCd0IGV4cGVjdGVkIG9yIGFkZCBwYXJlbnRoZXNlcyBmb3IgY2xhcml0eS4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtMb2dpY2FsQXNzaWdubWVudFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBTd2l0Y2hlcyBvbiBlbnVtIHR5cGVzIHNob3VsZCBlaXRoZXIgaGFuZGxlIGFsbCB2YWx1ZXMsIG9yIGhhdmUgYSBkZWZhdWx0IGNhc2UuJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTWlzc2luZ0Nhc2VzSW5FbnVtU3dpdGNoXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRoZSBHb29nbGUgSmF2YSBTdHlsZSBHdWlkZSByZXF1aXJlcyB0aGF0IGVhY2ggc3dpdGNoIHN0YXRlbWVudCBpbmNsdWRlcyBhIGRlZmF1bHQgc3RhdGVtZW50IGdyb3VwLCBldmVuIGlmIGl0IGNvbnRhaW5zIG5vIGNvZGUuIChUaGlzIHJlcXVpcmVtZW50IGlzIGxpZnRlZCBmb3IgYW55IHN3aXRjaCBzdGF0ZW1lbnQgdGhhdCBjb3ZlcnMgYWxsIHZhbHVlcyBvZiBhbiBlbnVtLiknLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtNaXNzaW5nRGVmYXVsdFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBOb3QgY2FsbGluZyBmYWlsKCkgd2hlbiBleHBlY3RpbmcgYW4gZXhjZXB0aW9uIG1hc2tzIGJ1Z3MnLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtNaXNzaW5nRmFpbFxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC03NTQsMTEgKzEwMDQsMzYgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogQ29tcG91bmQgYXNzaWdubWVudHMgdG8gYnl0ZXMsIHNob3J0cywgY2hhcnMsIGFuZCBmbG9hdHMgaGlkZSBkYW5nZXJvdXMgY2FzdHMnLAorICAgICAgICAgJ0phdmE6IE1vZGlmeWluZyBhIGNvbGxlY3Rpb24gd2hpbGUgaXRlcmF0aW5nIG92ZXIgaXQgaW4gYSBsb29wIG1heSBjYXVzZSBhIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24gdG8gYmUgdGhyb3duLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW01vZGlmeUNvbGxlY3Rpb25JbkVuaGFuY2VkRm9yTG9vcFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBNdWx0aXBsZSBjYWxscyB0byBlaXRoZXIgcGFyYWxsZWwgb3Igc2VxdWVudGlhbCBhcmUgdW5uZWNlc3NhcnkgYW5kIGNhdXNlIGNvbmZ1c2lvbi4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtNdWx0aXBsZVBhcmFsbGVsT3JTZXF1ZW50aWFsQ2FsbHNcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQ29uc3RhbnQgZmllbGQgZGVjbGFyYXRpb25zIHNob3VsZCB1c2UgdGhlIGltbXV0YWJsZSB0eXBlIChzdWNoIGFzIEltbXV0YWJsZUxpc3QpIGluc3RlYWQgb2YgdGhlIGdlbmVyYWwgY29sbGVjdGlvbiBpbnRlcmZhY2UgdHlwZSAoc3VjaCBhcyBMaXN0KScsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW011dGFibGVDb25zdGFudEZpZWxkXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IE1ldGhvZCByZXR1cm4gdHlwZSBzaG91bGQgdXNlIHRoZSBpbW11dGFibGUgdHlwZSAoc3VjaCBhcyBJbW11dGFibGVMaXN0KSBpbnN0ZWFkIG9mIHRoZSBnZW5lcmFsIGNvbGxlY3Rpb24gaW50ZXJmYWNlIHR5cGUgKHN1Y2ggYXMgTGlzdCknLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtNdXRhYmxlTWV0aG9kUmV0dXJuVHlwZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBDb21wb3VuZCBhc3NpZ25tZW50cyBtYXkgaGlkZSBkYW5nZXJvdXMgY2FzdHMnLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtOYXJyb3dpbmdDb21wb3VuZEFzc2lnbm1lbnRcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogTmVzdGVkIGluc3RhbmNlT2YgY29uZGl0aW9ucyBvZiBkaXNqb2ludCB0eXBlcyBjcmVhdGUgYmxvY2tzIG9mIGNvZGUgdGhhdCBuZXZlciBleGVjdXRlJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTmVzdGVkSW5zdGFuY2VPZkNvbmRpdGlvbnNcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogVGhpcyB1cGRhdGUgb2YgYSB2b2xhdGlsZSB2YXJpYWJsZSBpcyBub24tYXRvbWljJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTm9uQXRvbWljVm9sYXRpbGVVcGRhdGVcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLApAQCAtNzk0LDYgKzEwNjksMzEgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogT25lIHNob3VsZCBub3QgY2FsbCBvcHRpb25hbC5nZXQoKSBpbnNpZGUgYW4gaWYgc3RhdGVtZW50IHRoYXQgY2hlY2tzICFvcHRpb25hbC5pc1ByZXNlbnQnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtPcHRpb25hbE5vdFByZXNlbnRcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogU3RyaW5nIGxpdGVyYWwgY29udGFpbnMgZm9ybWF0IHNwZWNpZmllcnMsIGJ1dCBpcyBub3QgcGFzc2VkIHRvIGEgZm9ybWF0IG1ldGhvZCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW09ycGhhbmVkRm9ybWF0U3RyaW5nXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRvIHJldHVybiBhIGN1c3RvbSBtZXNzYWdlIHdpdGggYSBUaHJvd2FibGUgY2xhc3MsIG9uZSBzaG91bGQgb3ZlcnJpZGUgZ2V0TWVzc2FnZSgpIGluc3RlYWQgb2YgdG9TdHJpbmcoKSBmb3IgVGhyb3dhYmxlLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW092ZXJyaWRlVGhyb3dhYmxlVG9TdHJpbmdcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVmFyYXJncyBkb2VzblwndCBhZ3JlZSBmb3Igb3ZlcnJpZGRlbiBtZXRob2QnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtPdmVycmlkZXNcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRGV0ZWN0cyBgLyogbmFtZT0gKi9gLXN0eWxlIGNvbW1lbnRzIG9uIGFjdHVhbCBwYXJhbWV0ZXJzIHdoZXJlIHRoZSBuYW1lIGRvZXNuXCd0IG1hdGNoIHRoZSBmb3JtYWwgcGFyYW1ldGVyJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUGFyYW1ldGVyTmFtZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBQcmVjb25kaXRpb25zIG9ubHkgYWNjZXB0cyB0aGUgJXMgcGxhY2Vob2xkZXIgaW4gZXJyb3IgbWVzc2FnZSBzdHJpbmdzJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUHJlY29uZGl0aW9uc0ludmFsaWRQbGFjZWhvbGRlclxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC04MDksNiArMTEwOSwxNiBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBCdWdDaGVja2VyIGhhcyBpbmNvcnJlY3QgUHJvdmlkZXNGaXggdGFnLCBwbGVhc2UgdXBkYXRlJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUHJvdmlkZXNGaXhcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogcmVhY2hhYmlsaXR5RmVuY2Ugc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgaW5zaWRlIGEgZmluYWxseSBibG9jaycsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1JlYWNoYWJpbGl0eUZlbmNlVXNhZ2VcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogVGhyb3duIGV4Y2VwdGlvbiBpcyBhIHN1YnR5cGUgb2YgYW5vdGhlcicsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1JlZHVuZGFudFRocm93c1xdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC04MjQsOCArMTEzNCwxOCBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBBIHN0YXRpYyB2YXJpYWJsZSBvciBtZXRob2Qgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBmcm9tIGFuIG9iamVjdCBpbnN0YW5jZScsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1N0YXRpY0FjY2Vzc2VkRnJvbUluc3RhbmNlXF0gLisiXX0sCisgICAgICAgICAnSmF2YTogUHJlZmVyIHRoZSBzaG9ydC1jaXJjdWl0aW5nIGJvb2xlYW4gb3BlcmF0b3JzIFx1MDAyNlx1MDAyNiBhbmQgfHwgdG8gXHUwMDI2IGFuZCB8LicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1Nob3J0Q2lyY3VpdEJvb2xlYW5cXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQSBzdGF0aWMgdmFyaWFibGUgb3IgbWV0aG9kIHNob3VsZCBiZSBxdWFsaWZpZWQgd2l0aCBhIGNsYXNzIG5hbWUsIG5vdCBleHByZXNzaW9uJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbU3RhdGljUXVhbGlmaWVkVXNpbmdFeHByZXNzaW9uXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFN0cmVhbXMgdGhhdCBlbmNhcHN1bGF0ZSBhIGNsb3NlYWJsZSByZXNvdXJjZSBzaG91bGQgYmUgY2xvc2VkIHVzaW5nIHRyeS13aXRoLXJlc291cmNlcycsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1N0cmVhbVJlc291cmNlTGVha1xdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKQEAgLTgzNCwxMyArMTE1NCw0MyBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBTdHJpbmcuc3BsaXQgc2hvdWxkIG5ldmVyIHRha2Ugb25seSBhIHNpbmdsZSBhcmd1bWVudDsgaXQgaGFzIHN1cnByaXNpbmcgYmVoYXZpb3InLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtTdHJpbmdTcGxpdFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBQcmVmZXIgU3BsaXR0ZXIgdG8gU3RyaW5nLnNwbGl0JywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbU3RyaW5nU3BsaXR0ZXJcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVXNpbmcgQFRlc3QoZXhwZWN0ZWQ9Li4uKSBpcyBkaXNjb3VyYWdlZCwgc2luY2UgdGhlIHRlc3Qgd2lsbCBwYXNzIGlmICphbnkqIHN0YXRlbWVudCBpbiB0aGUgdGVzdCBtZXRob2QgdGhyb3dzIHRoZSBleHBlY3RlZCBleGNlcHRpb24nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtUZXN0RXhjZXB0aW9uQ2hlY2tlclxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBUaHJlYWQuam9pbiBuZWVkcyB0byBiZSBzdXJyb3VuZGVkIGJ5IGEgbG9vcCB1bnRpbCBpdCBzdWNjZWVkcywgYXMgaW4gVW5pbnRlcnJ1cHRpYmxlcy5qb2luVW5pbnRlcnJ1cHRpYmx5LicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1RocmVhZEpvaW5Mb29wXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRocmVhZExvY2FscyBzaG91bGQgYmUgc3RvcmVkIGluIHN0YXRpYyBmaWVsZHMnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtUaHJlYWRMb2NhbFVzYWdlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRocmVlLWxldHRlciB0aW1lIHpvbmUgaWRlbnRpZmllcnMgYXJlIGRlcHJlY2F0ZWQsIG1heSBiZSBhbWJpZ3VvdXMsIGFuZCBtaWdodCBub3QgZG8gd2hhdCB5b3UgaW50ZW5kOyB0aGUgZnVsbCBJQU5BIHRpbWUgem9uZSBJRCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1RocmVlTGV0dGVyVGltZVpvbmVJRFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBUcnV0aCBMaWJyYXJ5IGFzc2VydCBpcyBjYWxsZWQgb24gYSBjb25zdGFudC4nLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtUcnV0aENvbnN0YW50QXNzZXJ0c1xdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBBbiBvYmplY3QgaXMgdGVzdGVkIGZvciBlcXVhbGl0eSB0byBpdHNlbGYgdXNpbmcgVHJ1dGggTGlicmFyaWVzLicsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1RydXRoU2VsZkVxdWFsc1xdIC4rIl19LAorICAgICAgICAgJ0phdmE6IFR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIG92ZXJyaWRlcyBhbm90aGVyIHR5cGUgcGFyYW1ldGVyIGFscmVhZHkgZGVjbGFyZWQnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtUeXBlUGFyYW1ldGVyU2hhZG93aW5nXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgpAQCAtODQ5LDExICsxMTk5LDMxIEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IENyZWF0aW9uIG9mIGEgU2V0L0hhc2hTZXQvSGFzaE1hcCBvZiBqYXZhLm5ldC5VUkwuIGVxdWFscygpIGFuZCBoYXNoQ29kZSgpIG9mIGphdmEubmV0LlVSTCBjbGFzcyBtYWtlIGJsb2NraW5nIGludGVybmV0IGNvbm5lY3Rpb25zLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1VSTEVxdWFsc0hhc2hDb2RlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFN3aXRjaCBoYW5kbGVzIGFsbCBlbnVtIHZhbHVlczsgYW4gZXhwbGljaXQgZGVmYXVsdCBjYXNlIGlzIHVubmVjZXNzYXJ5IGFuZCBkZWZlYXRzIGVycm9yIGNoZWNraW5nIGZvciBub24tZXhoYXVzdGl2ZSBzd2l0Y2hlcy4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtVbm5lY2Vzc2FyeURlZmF1bHRJbkVudW1Td2l0Y2hcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRmluYWxpemVyIG1heSBydW4gYmVmb3JlIG5hdGl2ZSBjb2RlIGZpbmlzaGVzIGV4ZWN1dGlvbicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1Vuc2FmZUZpbmFsaXphdGlvblxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBVbnN5bmNocm9uaXplZCBtZXRob2Qgb3ZlcnJpZGVzIGEgc3luY2hyb25pemVkIG1ldGhvZC4nLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtVbnN5bmNocm9uaXplZE92ZXJyaWRlc1N5bmNocm9uaXplZFxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBKYXZhIGFzc2VydCBpcyB1c2VkIGluIHRlc3QuIEZvciB0ZXN0aW5nIHB1cnBvc2VzIEFzc2VydC4qIG1hdGNoZXJzIHNob3VsZCBiZSB1c2VkLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1VzZUNvcnJlY3RBc3NlcnRJblRlc3RzXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IE5vbi1jb25zdGFudCB2YXJpYWJsZSBtaXNzaW5nIEBWYXIgYW5ub3RhdGlvbicsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1ZhclxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC04NjIsNiArMTIzMiwxNTEgQEAKICAgICAgICAgICdKYXZhOiBCZWNhdXNlIG9mIHNwdXJpb3VzIHdha2V1cHMsIE9iamVjdC53YWl0KCkgYW5kIENvbmRpdGlvbi5hd2FpdCgpIG11c3QgYWx3YXlzIGJlIGNhbGxlZCBpbiBhIGxvb3AnLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtXYWl0Tm90SW5Mb29wXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFBsdWdnYWJsZSBUeXBlIGNoZWNrZXIgaW50ZXJuYWwgZXJyb3InLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtQbHVnZ2FibGVUeXBlQ2hlY2tlclxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LXN0eWxlIGZvcm1hdCBzcGVjaWZpZXIgKHswfSksIGV4cGVjdGVkIHByaW50Zi1zdHlsZSAoJXMpJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRmxvZ2dlck1lc3NhZ2VGb3JtYXRcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogTG9nZ2VyIGxldmVsIGNoZWNrIGlzIGFscmVhZHkgaW1wbGllZCBpbiB0aGUgbG9nKCkgY2FsbC4gQW4gZXhwbGljaXQgYXRbTGV2ZWxdKCkuaXNFbmFibGVkKCkgY2hlY2sgaXMgcmVkdW5kYW50LicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0Zsb2dnZXJSZWR1bmRhbnRJc0VuYWJsZWRcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQ2FsbGluZyB3aXRoQ2F1c2UoVGhyb3dhYmxlKSB3aXRoIGFuIGlubGluZSBhbGxvY2F0ZWQgVGhyb3dhYmxlIGlzIGRpc2NvdXJhZ2VkLiBDb25zaWRlciB1c2luZyB3aXRoU3RhY2tUcmFjZShTdGFja1NpemUpIGluc3RlYWQsIGFuZCBzcGVjaWZ5aW5nIGEgcmVkdWNlZCBzdGFjayBzaXplIChlLmcuIFNNQUxMLCBNRURJVU0gb3IgTEFSR0UpIGluc3RlYWQgb2YgRlVMTCwgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtGbG9nZ2VyV2l0aENhdXNlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFVzZSB3aXRoQ2F1c2UgdG8gYXNzb2NpYXRlIEV4Y2VwdGlvbnMgd2l0aCBsb2cgc3RhdGVtZW50cycsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0Zsb2dnZXJXaXRob3V0Q2F1c2VcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogTm8gYnVnIGV4aXN0cyB0byB0cmFjayBhbiBpZ25vcmVkIHRlc3QnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJZ25vcmVkVGVzdFdpdGhvdXRCdWdcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQElnbm9yZSBpcyBwcmVmZXJyZWQgdG8gQFN1cHByZXNzIGZvciBKVW5pdDQgdGVzdHMuIEBTdXBwcmVzcyBtYXkgc2lsZW50bHkgZmFpbCBpbiBKVW5pdDQgKHRoYXQgaXMsIHRlc3RzIG1heSBydW4gYW55d2F5LiknLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKVW5pdDRTdXBwcmVzc1dpdGhvdXRJZ25vcmVcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogTWVkaXVtIGFuZCBsYXJnZSB0ZXN0IGNsYXNzZXMgc2hvdWxkIGRvY3VtZW50IHdoeSB0aGV5IGFyZSBtZWRpdW0gb3IgbGFyZ2UnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKVW5pdDRUZXN0QXR0cmlidXRlTWlzc2luZ1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBqYXZhLm5ldC5JRE4gaW1wbGVtZW50cyB0aGUgb2xkZXIgSUROQTIwMDMgc3RhbmRhcmQuIFByZWZlciBjb20uZ29vZ2xlLmkxOG4uSWRuLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBuZXdlciBVVFMgIzQ2IHN0YW5kYXJkJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSmF2YU5ldElkblxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBDb25zaWRlciByZXF1aXJpbmcgc3RyaWN0IHBhcnNpbmcgb24gSm9kYUR1cmF0aW9uRmxhZyBpbnN0YW5jZXMuIEJlZm9yZSBhZGp1c3RpbmcgZXhpc3RpbmcgZmxhZ3MsIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB5b3VyIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gdG8gYXZvaWQgY3Jhc2hlcyEnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKb2RhRHVyYXRpb25GbGFnU3RyaWN0UGFyc2luZ1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBMb2dnaW5nIGFuIGV4Y2VwdGlvbiBhbmQgdGhyb3dpbmcgaXQgKG9yIGEgbmV3IGV4Y2VwdGlvbikgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbmFsIHNpdHVhdGlvbiBpcyBhbiBhbnRpLXBhdHRlcm4uJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTG9nQW5kVGhyb3dcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRm9ybWF0dGluZ0xvZ2dlciB1c2VzIHdyb25nIG9yIG1pc21hdGNoZWQgZm9ybWF0IHN0cmluZycsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW01pc3VzZWRGb3JtYXR0aW5nTG9nZ2VyXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuTUVESVVNLAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IEZsYWdzIHNob3VsZCBiZSBmaW5hbCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW05vbkZpbmFsRmxhZ1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5Lk1FRElVTSwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBSZWFkaW5nIGEgZmxhZyBmcm9tIGEgc3RhdGljIGZpZWxkIG9yIGluaXRpYWxpemVyIGJsb2NrIHdpbGwgY2F1c2UgaXQgdG8gYWx3YXlzIHJlY2VpdmUgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHdpbGwgY2F1c2UgYW4gSWxsZWdhbEZsYWdTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgZmxhZyBpcyBldmVyIHNldC4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtTdGF0aWNGbGFnVXNhZ2VcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5NRURJVU0sCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQXBwcyBtdXN0IHVzZSBCdWlsZENvbXBhdC5pc0F0TGVhc3RPIHRvIGNoZWNrIHdoZXRoZXIgdGhleVwncmUgcnVubmluZyBvbiBBbmRyb2lkIE8nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtVbnNhZmVTZGtWZXJzaW9uQ2hlY2tcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IExvZ2dpbmcgdGFnIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAyMyBjaGFyYWN0ZXJzLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0xvZ1RhZ0xlbmd0aFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogUmVsYXRpdmUgY2xhc3MgbmFtZSBwYXNzZWQgdG8gQ29tcG9uZW50TmFtZSBjb25zdHJ1Y3RvcicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1JlbGF0aXZlQ29tcG9uZW50TmFtZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRXhwbGljaXRseSBlbnVtZXJhdGUgYWxsIGNhc2VzIGluIHN3aXRjaCBzdGF0ZW1lbnRzIGZvciBjZXJ0YWluIGVudW0gdHlwZXMuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRW51bWVyYXRlQWxsQ2FzZXNJbkVudW1Td2l0Y2hcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IERvIG5vdCBjYWxsIGFzc3VtZVRydWUodGVzdGVyLmdldEV4cGVyaW1lbnRWYWx1ZUZvciguLi4pKS4gVXNlIEBSZXF1aXJlRW5kVG9FbmRUZXN0RXhwZXJpbWVudCBpbnN0ZWFkLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0pVbml0QXNzdW1lRXhwZXJpbWVudFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVGhlIGFjY2Vzc2VkIGZpZWxkIG9yIG1ldGhvZCBpcyBub3QgdmlzaWJsZSBoZXJlLiBOb3RlIHRoYXQgdGhlIGRlZmF1bHQgcHJvZHVjdGlvbiB2aXNpYmlsaXR5IGZvciBAVmlzaWJsZUZvclRlc3RpbmcgaXMgVmlzaWJpbGl0eS5QUklWQVRFLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1Zpc2libGVGb3JUZXN0aW5nQ2hlY2tlclxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRGV0ZWN0cyBlcnJvcnMgZW5jb3VudGVyZWQgYnVpbGRpbmcgRXJyb3IgUHJvbmUgcGx1Z2lucycsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0Vycm9yUHJvbmVQbHVnaW5Db3JyZWN0bmVzc1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogUGFyY2VsYWJsZSBDUkVBVE9SIGZpZWxkcyBzaG91bGQgYmUgQ3JlYXRvclx1MDAzY1Q+JywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUGFyY2VsYWJsZUNyZWF0b3JUeXBlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBFbmZvcmNlIHJlZmxlY3RlZCBQYXJjZWxhYmxlcyBhcmUga2VwdCBieSBQcm9ndWFyZCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1JlZmxlY3RlZFBhcmNlbGFibGVcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IEFueSBjbGFzcyB0aGF0IGV4dGVuZHMgSW50ZW50U2VydmljZSBzaG91bGQgaGF2ZSBATnVsbGFibGUgbm90YXRpb24gb24gbWV0aG9kIG9uSGFuZGxlSW50ZW50KEBOdWxsYWJsZSBJbnRlbnQgaW50ZW50KSBhbmQgaGFuZGxlIHRoZSBjYXNlIGlmIGludGVudCBpcyBudWxsLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW09uSGFuZGxlSW50ZW50TnVsbGFibGVDaGVja2VyXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBJbiBtYW55IGNhc2VzLCByYW5kb21VVUlEIGlzIG5vdCBuZWNlc3NhcnksIGFuZCBpdCBzbG93cyB0aGUgcGVyZm9ybWFuY2UsIHdoaWNoIGNhbiBiZSBxdWl0ZSBzZXZlcmUgZXNwZWNpYWxseSB3aGVuIHRoaXMgb3BlcmF0aW9uIGhhcHBlbnMgYXQgc3RhcnQgdXAgdGltZS4gQ29uc2lkZXIgcmVwbGFjaW5nIGl0IHdpdGggY2hlYXBlciBhbHRlcm5hdGl2ZXMsIGxpa2Ugb2JqZWN0Lmhhc2hDb2RlKCkgb3IgSWRHZW5lcmF0b3IuSU5TVEFOQ0UuZ2V0UmFuZG9tSWQoKScsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1VVSURDaGVja2VyXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBEeW5hbWljQWN0aXZpdHkuZmluZFZpZXdCeUlkKGludCkgaXMgc2xvdyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluc2lkZSBWaWV3Lm9uRHJhdyhDYW52YXMpIScsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW05vRmluZFZpZXdCeUlkSW5PbkRyYXdDaGVja2VyXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBQYXNzaW5nIFRocm93YWJsZS9FeGNlcHRpb24gYXJndW1lbnQgdG8gdGhlIG1lc3NhZ2UgZm9ybWF0IEwueCgpLiBDYWxsaW5nIEwudyh0YWcsIG1lc3NhZ2UsIGV4KSBpbnN0ZWFkIG9mIEwudyh0YWcsIGV4LCBtZXNzYWdlKScsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1dyb25nVGhyb3dhYmxlQXJndW1lbnRJbkxvZ0NoZWNrZXJcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IE5ldyBzcGxpY2VycyBhcmUgZGlzYWxsb3dlZCBvbiBwYXRocyB0aGF0IGFyZSBiZWluZyBMaWJzZWFyY2hlZCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0JsYWNrbGlzdGVkU3BsaWNlclBhdGhDaGVja2VyXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBPYmplY3Qgc2VyaWFsaXplZCBpbiBCdW5kbGUgbWF5IGhhdmUgYmVlbiBmbGF0dGVuZWQgdG8gYmFzZSB0eXBlLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0J1bmRsZURlc2VyaWFsaXphdGlvbkNhc3RcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IExvZyB0YWcgdG9vIGxvbmcsIGNhbm5vdCBleGNlZWQgMjMgY2hhcmFjdGVycy4nLApAQCAtODc5LDExICsxMzk0LDYgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IFN0YXRpYyBhbmQgZGVmYXVsdCBtZXRob2RzIGluIGludGVyZmFjZXMgYXJlIG5vdCBhbGxvd2VkIGluIGFuZHJvaWQgYnVpbGRzLicsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1N0YXRpY09yRGVmYXVsdEludGVyZmFjZU1ldGhvZFxdIC4rIl19LAotICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCi0gICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCi0gICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogSW5jb21wYXRpYmxlIHR5cGUgYXMgYXJndW1lbnQgdG8gT2JqZWN0LWFjY2VwdGluZyBKYXZhIGNvbGxlY3Rpb25zIG1ldGhvZCcsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0NvbGxlY3Rpb25JbmNvbXBhdGlibGVUeXBlXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKQEAgLTkwOSwxMTMgKzE0MTksOCBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogQEFzc2lzdGVkSW5qZWN0IGFuZCBASW5qZWN0IGNhbm5vdCBiZSB1c2VkIG9uIHRoZSBzYW1lIGNvbnN0cnVjdG9yLicsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0Fzc2lzdGVkSW5qZWN0QW5kSW5qZWN0T25TYW1lQ29uc3RydWN0b3JcXSAuKyJdfSwKLSAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAotICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAotICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IEBBdXRvRmFjdG9yeSBhbmQgQEluamVjdCBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgdHlwZS4nLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtBdXRvRmFjdG9yeUF0SW5qZWN0XF0gLisiXX0sCi0gICAgeydjYXRlZ29yeSc6ICdqYXZhJywKLSAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKLSAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBJbmplY3RlZCBjb25zdHJ1Y3RvcnMgY2Fubm90IGJlIG9wdGlvbmFsIG5vciBoYXZlIGJpbmRpbmcgYW5ub3RhdGlvbnMnLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJbmplY3RlZENvbnN0cnVjdG9yQW5ub3RhdGlvbnNcXSAuKyJdfSwKLSAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAotICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAotICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IEEgc2NvcGluZyBhbm5vdGF0aW9uXCdzIFRhcmdldCBzaG91bGQgaW5jbHVkZSBUWVBFIGFuZCBNRVRIT0QuJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSW5qZWN0SW52YWxpZFRhcmdldGluZ09uU2NvcGluZ0Fubm90YXRpb25cXSAuKyJdfSwKLSAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAotICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAotICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IEFic3RyYWN0IGFuZCBkZWZhdWx0IG1ldGhvZHMgYXJlIG5vdCBpbmplY3RhYmxlIHdpdGggamF2YXguaW5qZWN0LkluamVjdCcsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0phdmF4SW5qZWN0T25BYnN0cmFjdE1ldGhvZFxdIC4rIl19LAotICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCi0gICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCi0gICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogQGphdmF4LmluamVjdC5JbmplY3QgY2Fubm90IGJlIHB1dCBvbiBhIGZpbmFsIGZpZWxkLicsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0phdmF4SW5qZWN0T25GaW5hbEZpZWxkXF0gLisiXX0sCi0gICAgeydjYXRlZ29yeSc6ICdqYXZhJywKLSAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKLSAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBUaGlzIGNsYXNzIGhhcyBtb3JlIHRoYW4gb25lIEBJbmplY3QtYW5ub3RhdGVkIGNvbnN0cnVjdG9yLiBQbGVhc2UgcmVtb3ZlIHRoZSBASW5qZWN0IGFubm90YXRpb24gZnJvbSBhbGwgYnV0IG9uZSBvZiB0aGVtLicsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW01vcmVUaGFuT25lSW5qZWN0YWJsZUNvbnN0cnVjdG9yXF0gLisiXX0sCi0gICAgeydjYXRlZ29yeSc6ICdqYXZhJywKLSAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKLSAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBVc2luZyBtb3JlIHRoYW4gb25lIHF1YWxpZmllciBhbm5vdGF0aW9uIG9uIHRoZSBzYW1lIGVsZW1lbnQgaXMgbm90IGFsbG93ZWQuJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSW5qZWN0TW9yZVRoYW5PbmVRdWFsaWZpZXJcXSAuKyJdfSwKLSAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAotICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAotICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IEEgY2xhc3MgY2FuIGJlIGFubm90YXRlZCB3aXRoIGF0IG1vc3Qgb25lIHNjb3BlIGFubm90YXRpb24uJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSW5qZWN0TW9yZVRoYW5PbmVTY29wZUFubm90YXRpb25PbkNsYXNzXF0gLisiXX0sCi0gICAgeydjYXRlZ29yeSc6ICdqYXZhJywKLSAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKLSAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBBbm5vdGF0aW9ucyBjYW5ub3QgYmUgYm90aCBTY29wZSBhbm5vdGF0aW9ucyBhbmQgUXVhbGlmaWVyIGFubm90YXRpb25zOiB0aGlzIGNhdXNlcyBjb25mdXNpb24gd2hlbiB0cnlpbmcgdG8gdXNlIHRoZW0uJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbT3ZlcmxhcHBpbmdRdWFsaWZpZXJBbmRTY29wZUFubm90YXRpb25cXSAuKyJdfSwKLSAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAotICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAotICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IFF1YWxpZmllciBhcHBsaWVkIHRvIGEgbWV0aG9kIHRoYXQgaXNuXCd0IGEgQFByb3ZpZGVzIG1ldGhvZC4gVGhpcyBtZXRob2Qgd29uXCd0IGJlIHVzZWQgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUXVhbGlmaWVyT25NZXRob2RXaXRob3V0UHJvdmlkZXNcXSAuKyJdfSwKLSAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAotICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAotICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IFNjb3BlIGFubm90YXRpb24gb24gYW4gaW50ZXJmYWNlIG9yIGFic3RhY3QgY2xhc3MgaXMgbm90IGFsbG93ZWQnLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJbmplY3RTY29wZUFubm90YXRpb25PbkludGVyZmFjZU9yQWJzdHJhY3RDbGFzc1xdIC4rIl19LAotICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCi0gICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCi0gICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogU2NvcGluZyBhbmQgcXVhbGlmaWVyIGFubm90YXRpb25zIG11c3QgaGF2ZSBydW50aW1lIHJldGVudGlvbi4nLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJbmplY3RTY29wZU9yUXVhbGlmaWVyQW5ub3RhdGlvblJldGVudGlvblxdIC4rIl19LAotICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCi0gICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCi0gICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogYEBNdWx0aWJpbmRzYCBpcyB0aGUgbmV3IHdheSB0byBkZWNsYXJlIG11bHRpYmluZGluZ3MuJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTXVsdGliaW5kc0luc3RlYWRPZk11bHRpYmluZGluZ3NcXSAuKyJdfSwKLSAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAotICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAotICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IERhZ2dlciBAUHJvdmlkZXMgbWV0aG9kcyBtYXkgbm90IHJldHVybiBudWxsIHVubGVzcyBhbm5vdGF0ZWQgd2l0aCBATnVsbGFibGUnLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtEYWdnZXJQcm92aWRlc051bGxcXSAuKyJdfSwKLSAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAotICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAotICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IFNjb3BlIGFubm90YXRpb24gb24gaW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgQXNzaXN0ZWRJbmplY3QgZmFjdG9yeSBpcyBub3QgYWxsb3dlZCcsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0d1aWNlQXNzaXN0ZWRJbmplY3RTY29waW5nXF0gLisiXX0sCi0gICAgeydjYXRlZ29yeSc6ICdqYXZhJywKLSAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKLSAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBBIGNvbnN0cnVjdG9yIGNhbm5vdCBoYXZlIHR3byBAQXNzaXN0ZWQgcGFyYW1ldGVycyBvZiB0aGUgc2FtZSB0eXBlIHVubGVzcyB0aGV5IGFyZSBkaXNhbWJpZ3VhdGVkIHdpdGggbmFtZWQgQEFzc2lzdGVkIGFubm90YXRpb25zLicsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0d1aWNlQXNzaXN0ZWRQYXJhbWV0ZXJzXF0gLisiXX0sCi0gICAgeydjYXRlZ29yeSc6ICdqYXZhJywKLSAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKLSAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBBbHRob3VnaCBHdWljZSBhbGxvd3MgaW5qZWN0aW5nIGZpbmFsIGZpZWxkcywgZG9pbmcgc28gaXMgZGlzYWxsb3dlZCBiZWNhdXNlIHRoZSBpbmplY3RlZCB2YWx1ZSBtYXkgbm90IGJlIHZpc2libGUgdG8gb3RoZXIgdGhyZWFkcy4nLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtHdWljZUluamVjdE9uRmluYWxGaWVsZFxdIC4rIl19LAotICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCi0gICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCi0gICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogVGhpcyBtZXRob2QgaXMgbm90IGFubm90YXRlZCB3aXRoIEBJbmplY3QsIGJ1dCBpdCBvdmVycmlkZXMgYSBtZXRob2QgdGhhdCBpcyAgYW5ub3RhdGVkIHdpdGggQGphdmF4LmluamVjdC5JbmplY3QuIFRoZSBtZXRob2Qgd2lsbCBub3QgYmUgSW5qZWN0ZWQuJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbT3ZlcnJpZGVzSmF2YXhJbmplY3RhYmxlTWV0aG9kXF0gLisiXX0sCi0gICAgeydjYXRlZ29yeSc6ICdqYXZhJywKLSAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKLSAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBAUHJvdmlkZXMgbWV0aG9kcyBuZWVkIHRvIGJlIGRlY2xhcmVkIGluIGEgTW9kdWxlIHRvIGhhdmUgYW55IGVmZmVjdC4nLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtQcm92aWRlc01ldGhvZE91dHNpZGVPZk1vZHVsZVxdIC4rIl19LAotICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCi0gICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCi0gICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogQ2hlY2tzIGZvciB1bmd1YXJkZWQgYWNjZXNzZXMgdG8gZmllbGRzIGFuZCBtZXRob2RzIHdpdGggQEd1YXJkZWRCeSBhbm5vdGF0aW9ucycsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0d1YXJkZWRCeUNoZWNrZXJcXSAuKyJdfSwKLSAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAotICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAotICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IEludmFsaWQgQEd1YXJkZWRCeSBleHByZXNzaW9uJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbR3VhcmRlZEJ5VmFsaWRhdG9yXF0gLisiXX0sCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0d1YXJkZWRCeVxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6CkBAIC0xMDM0LDEzICsxNDM5LDEzIEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBBbiBhcmd1bWVudCBpcyBtb3JlIHNpbWlsYXIgdG8gYSBkaWZmZXJlbnQgcGFyYW1ldGVyOyB0aGUgYXJndW1lbnRzIG1heSBoYXZlIGJlZW4gc3dhcHBlZC4nLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtBcmd1bWVudFBhcmFtZXRlclN3YXBcXSAuKyJdfSwKKyAgICAgICAgICdKYXZhOiBSZWZlcmVuY2UgZXF1YWxpdHkgdXNlZCB0byBjb21wYXJlIGFycmF5cycsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0FycmF5RXF1YWxzXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBSZWZlcmVuY2UgZXF1YWxpdHkgdXNlZCB0byBjb21wYXJlIGFycmF5cycsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0FycmF5RXF1YWxzXF0gLisiXX0sCisgICAgICAgICAnSmF2YTogQXJyYXlzLmZpbGwoT2JqZWN0W10sIE9iamVjdCkgY2FsbGVkIHdpdGggaW5jb21wYXRpYmxlIHR5cGVzLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0FycmF5RmlsbEluY29tcGF0aWJsZVR5cGVcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgpAQCAtMTA4OSw2ICsxNDk0LDExIEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiAgSW1wbGVtZW50aW5nIFwnQ29tcGFyYWJsZVx1MDAzY1Q+XCcgd2hlcmUgVCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBpbXBsZW1lbnRpbmcgY2xhc3MuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ29tcGFyYWJsZVR5cGVcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IFRoaXMgY29tcGFyaXNvbiBtZXRob2QgdmlvbGF0ZXMgdGhlIGNvbnRyYWN0JywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ29tcGFyaXNvbkNvbnRyYWN0VmlvbGF0ZWRcXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLApAQCAtMTEwNCw2ICsxNTE0LDE2IEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBOb24tdHJpdmlhbCBjb21waWxlIHRpbWUgY29uc3RhbnQgYm9vbGVhbiBleHByZXNzaW9ucyBzaG91bGRuXCd0IGJlIHVzZWQuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ29tcGxleEJvb2xlYW5Db25zdGFudFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQSBjb25kaXRpb25hbCBleHByZXNzaW9uIHdpdGggbnVtZXJpYyBvcGVyYW5kcyBvZiBkaWZmZXJpbmcgdHlwZXMgd2lsbCBwZXJmb3JtIGJpbmFyeSBudW1lcmljIHByb21vdGlvbiBvZiB0aGUgb3BlcmFuZHM7IHdoZW4gdGhlc2Ugb3BlcmFuZHMgYXJlIG9mIHJlZmVyZW5jZSB0eXBlcywgdGhlIGV4cHJlc3Npb25cJ3MgcmVzdWx0IG1heSBub3QgYmUgb2YgdGhlIGV4cGVjdGVkIHR5cGUuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ29uZGl0aW9uYWxFeHByZXNzaW9uTnVtZXJpY1Byb21vdGlvblxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogQ29tcGlsZS10aW1lIGNvbnN0YW50IGV4cHJlc3Npb24gb3ZlcmZsb3dzJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQ29uc3RhbnRPdmVyZmxvd1xdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC0xMTE0LDExICsxNTM0LDIxIEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBUaHJlYWQgY3JlYXRlZCBidXQgbm90IHN0YXJ0ZWQnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtEZWFkVGhyZWFkXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBEaXZpc2lvbiBieSBpbnRlZ2VyIGxpdGVyYWwgemVybycsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0Rpdlplcm9cXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0RvTm90Q2FsbFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogRW1wdHkgc3RhdGVtZW50IGFmdGVyIGlmJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRW1wdHlJZlxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC0xMTI5LDcgKzE1NTksMTIgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IE1ldGhvZCBhbm5vdGF0ZWQgQEZvck92ZXJyaWRlIG11c3QgYmUgcHJvdGVjdGVkIG9yIHBhY2thZ2UtcHJpdmF0ZSBhbmQgb25seSBpbnZva2VkIGZyb20gZGVjbGFyaW5nIGNsYXNzJywKKyAgICAgICAgICdKYXZhOiA9PSBtdXN0IGJlIHVzZWQgaW4gZXF1YWxzIG1ldGhvZCB0byBjaGVjayBlcXVhbGl0eSB0byBpdHNlbGYgb3IgYW4gaW5maW5pdGUgbG9vcCB3aWxsIG9jY3VyLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0VxdWFsc1JlZmVyZW5jZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogTWV0aG9kIGFubm90YXRlZCBARm9yT3ZlcnJpZGUgbXVzdCBiZSBwcm90ZWN0ZWQgb3IgcGFja2FnZS1wcml2YXRlIGFuZCBvbmx5IGludm9rZWQgZnJvbSBkZWNsYXJpbmcgY2xhc3MsIG9yIGZyb20gYW4gb3ZlcnJpZGUgb2YgdGhlIG1ldGhvZCcsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0Zvck92ZXJyaWRlXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKQEAgLTExNDQsNiArMTU3OSwxMSBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRG91YmxlTWF0aC5mdXp6eUVxdWFscyBzaG91bGQgbmV2ZXIgYmUgdXNlZCBpbiBhbiBPYmplY3QuZXF1YWxzKCkgbWV0aG9kJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRnV6enlFcXVhbHNTaG91bGROb3RCZVVzZWRJbkVxdWFsc01ldGhvZFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogQ2FsbGluZyBnZXRDbGFzcygpIG9uIGFuIGFubm90YXRpb24gbWF5IHJldHVybiBhIHByb3h5IGNsYXNzJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbR2V0Q2xhc3NPbkFubm90YXRpb25cXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLApAQCAtMTE1NCwxNyArMTU5NCwxMiBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogQW4gb2JqZWN0IGlzIHRlc3RlZCBmb3IgZXF1YWxpdHkgdG8gaXRzZWxmIHVzaW5nIEd1YXZhIExpYnJhcmllcycsCi0gICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0d1YXZhU2VsZkVxdWFsc1xdIC4rIl19LAotICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCi0gICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCi0gICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogY29udGFpbnMoKSBpcyBhIGxlZ2FjeSBtZXRob2QgdGhhdCBpcyBlcXVpdmFsZW50IHRvIGNvbnRhaW5zVmFsdWUoKScsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0hhc2h0YWJsZUNvbnRhaW5zXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBXcml0aW5nICJhICYmIGEiLCAiYSB8fCBhIiwgImEgJiBhIiwgb3IgImEgfCBhIiBpcyBlcXVpdmFsZW50IHRvICJhIi4nLAorICAgICAgICAgJ0phdmE6IEEgYmluYXJ5IGV4cHJlc3Npb24gd2hlcmUgYm90aCBvcGVyYW5kcyBhcmUgdGhlIHNhbWUgaXMgdXN1YWxseSBpbmNvcnJlY3QuJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSWRlbnRpdHlCaW5hcnlFeHByZXNzaW9uXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKQEAgLTExNzQsNiArMTYwOSwxNiBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGluZGV4T2YgaXMgYSBVbmljb2RlIGNvZGUgcG9pbnQsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBpbmRleCB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJbmRleE9mQ2hhclxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQ29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpbiB2YXJhcmdzIGNhbGwgY29udGFpbnMgYXJyYXkgYW5kIG5vbi1hcnJheSBhcmd1bWVudHMnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJbmV4YWN0VmFyYXJnc0NvbmRpdGlvbmFsXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBUaGlzIG1ldGhvZCBhbHdheXMgcmVjdXJzZXMsIGFuZCB3aWxsIGNhdXNlIGEgU3RhY2tPdmVyZmxvd0Vycm9yJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSW5maW5pdGVSZWN1cnNpb25cXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLApAQCAtMTE4OSwzNiArMTYzNCw3MSBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogSW52YWxpZCB0aW1lIHpvbmUgaWRlbnRpZmllci4gVGltZVpvbmUuZ2V0VGltZVpvbmUoU3RyaW5nKSB3aWxsIHNpbGVudGx5IHJldHVybiBHTVQgaW5zdGVhZCBvZiB0aGUgdGltZSB6b25lIHlvdSBpbnRlbmRlZC4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJbnZhbGlkVGltZVpvbmVJRFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogVGhlIGFyZ3VtZW50IHRvIENsYXNzI2lzSW5zdGFuY2UoT2JqZWN0KSBzaG91bGQgbm90IGJlIGEgQ2xhc3MnLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJc0luc3RhbmNlT2ZDbGFzc1xdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogUGF0aCBpbXBsZW1lbnRzIEl0ZXJhYmxlXHUwMDNjUGF0aD47IHByZWZlciBDb2xsZWN0aW9uXHUwMDNjUGF0aD4gZm9yIGNsYXJpdHknLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtJdGVyYWJsZVBhdGhQYXJhbWV0ZXJcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IGpNb2NrIHRlc3RzIG11c3QgaGF2ZSBhIEBSdW5XaXRoKEpNb2NrLmNsYXNzKSBhbm5vdGF0aW9uLCBvciB0aGUgTW9ja2VyeSBmaWVsZCBtdXN0IGhhdmUgYSBAUnVsZSBKVW5pdCBhbm5vdGF0aW9uJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSk1vY2tUZXN0V2l0aG91dFJ1bldpdGhPclJ1bGVBbm5vdGF0aW9uXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBUZXN0IG1ldGhvZCB3aWxsIG5vdCBiZSBydW47IHBsZWFzZSBwcmVmaXggbmFtZSB3aXRoICJ0ZXN0IicsCisgICAgICAgICAnSmF2YTogVGVzdCBtZXRob2Qgd2lsbCBub3QgYmUgcnVuOyBwbGVhc2UgY29ycmVjdCBtZXRob2Qgc2lnbmF0dXJlIChTaG91bGQgYmUgcHVibGljLCBub24tc3RhdGljLCBhbmQgbWV0aG9kIG5hbWUgc2hvdWxkIGJlZ2luIHdpdGggInRlc3QiKS4nLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKVW5pdDNUZXN0Tm90UnVuXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBzZXRVcCgpIG1ldGhvZCB3aWxsIG5vdCBiZSBydW47IFBsZWFzZSBhZGQgYSBAQmVmb3JlIGFubm90YXRpb24nLAorICAgICAgICAgJ0phdmE6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBzdGF0aWMnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKVW5pdDRDbGFzc0Fubm90YXRpb25Ob25TdGF0aWNcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IHNldFVwKCkgbWV0aG9kIHdpbGwgbm90IGJlIHJ1bjsgcGxlYXNlIGFkZCBKVW5pdFwncyBAQmVmb3JlIGFubm90YXRpb24nLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKVW5pdDRTZXRVcE5vdFJ1blxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogdGVhckRvd24oKSBtZXRob2Qgd2lsbCBub3QgYmUgcnVuOyBQbGVhc2UgYWRkIGFuIEBBZnRlciBhbm5vdGF0aW9uJywKKyAgICAgICAgICdKYXZhOiB0ZWFyRG93bigpIG1ldGhvZCB3aWxsIG5vdCBiZSBydW47IHBsZWFzZSBhZGQgSlVuaXRcJ3MgQEFmdGVyIGFubm90YXRpb24nLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKVW5pdDRUZWFyRG93bk5vdFJ1blxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6Ci0gICAgICAgICAnSmF2YTogVGVzdCBtZXRob2Qgd2lsbCBub3QgYmUgcnVuOyBwbGVhc2UgYWRkIEBUZXN0IGFubm90YXRpb24nLAorICAgICAgICAgJ0phdmE6IFRoaXMgbG9va3MgbGlrZSBhIHRlc3QgbWV0aG9kIGJ1dCBpcyBub3QgcnVuOyBwbGVhc2UgYWRkIEBUZXN0IG9yIEBJZ25vcmUsIG9yLCBpZiB0aGlzIGlzIGEgaGVscGVyIG1ldGhvZCwgcmVkdWNlIGl0cyB2aXNpYmlsaXR5LicsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0pVbml0NFRlc3ROb3RSdW5cXSAuKyJdfSwKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IEFuIG9iamVjdCBpcyB0ZXN0ZWQgZm9yIHJlZmVyZW5jZSBlcXVhbGl0eSB0byBpdHNlbGYgdXNpbmcgSlVuaXQgbGlicmFyeS4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKVW5pdEFzc2VydFNhbWVDaGVja1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVGhpcyBwYXR0ZXJuIHdpbGwgc2lsZW50bHkgY29ycnVwdCBjZXJ0YWluIGJ5dGUgc2VxdWVuY2VzIGZyb20gdGhlIHNlcmlhbGl6ZWQgcHJvdG9jb2wgbWVzc2FnZS4gVXNlIEJ5dGVTdHJpbmcgb3IgYnl0ZVtdIGRpcmVjdGx5JywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTGl0ZUJ5dGVTdHJpbmdVdGY4XF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBMb29wIGNvbmRpdGlvbiBpcyBuZXZlciBtb2RpZmllZCBpbiBsb29wIGJvZHkuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTG9vcENvbmRpdGlvbkNoZWNrZXJcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IE92ZXJyaWRpbmcgbWV0aG9kIGlzIG1pc3NpbmcgYSBjYWxsIHRvIG92ZXJyaWRkZW4gc3VwZXIgbWV0aG9kJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTWlzc2luZ1N1cGVyQ2FsbFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogVXNlIG9mICJZWVlZIiAod2VlayB5ZWFyKSBpbiBhIGRhdGUgcGF0dGVybiB3aXRob3V0ICJ3dyIgKHdlZWsgaW4geWVhcikuIFlvdSBwcm9iYWJseSBtZWFudCB0byB1c2UgInl5eXkiICh5ZWFyKSBpbnN0ZWFkLicsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW01pc3VzZWRXZWVrWWVhclxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC0xMjM5LDYgKzE3MTksMTYgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgbXVzdCBiZSBjbG9zZWQuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTXVzdEJlQ2xvc2VkQ2hlY2tlclxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIG5Db3BpZXMgaXMgdGhlIG51bWJlciBvZiBjb3BpZXMsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBpdGVtIHRvIGNvcHknLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtOQ29waWVzT2ZDaGFyXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBATm9BbGxvY2F0aW9uIHdhcyBzcGVjaWZpZWQgb24gdGhpcyBtZXRob2QsIGJ1dCBzb21ldGhpbmcgd2FzIGZvdW5kIHRoYXQgd291bGQgdHJpZ2dlciBhbiBhbGxvY2F0aW9uJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTm9BbGxvY2F0aW9uXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKQEAgLTEyNTksNiArMTc0OSwxMSBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVGhpcyBjb25kaXRpb25hbCBleHByZXNzaW9uIG1heSBldmFsdWF0ZSB0byBudWxsLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhbiBOUEUgd2hlbiB0aGUgcmVzdWx0IGlzIHVuYm94ZWQuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbTnVsbFRlcm5hcnlcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgogICAgICAgICAgJ0phdmE6IE51bWVyaWMgY29tcGFyaXNvbiB1c2luZyByZWZlcmVuY2UgZXF1YWxpdHkgaW5zdGVhZCBvZiB2YWx1ZSBlcXVhbGl0eScsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW051bWVyaWNFcXVhbGl0eVxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC0xMjY5LDExICsxNzY0LDYgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgotICAgICAgICAgJ0phdmE6IFZhcmFyZ3MgZG9lc25cJ3QgYWdyZWUgZm9yIG92ZXJyaWRkZW4gbWV0aG9kJywKLSAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbT3ZlcnJpZGVzXF0gLisiXX0sCi0gICAgeydjYXRlZ29yeSc6ICdqYXZhJywKLSAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKLSAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBEZWNsYXJpbmcgdHlwZXMgaW5zaWRlIHBhY2thZ2UtaW5mby5qYXZhIGZpbGVzIGlzIHZlcnkgYmFkIGZvcm0nLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtQYWNrYWdlSW5mb1xdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC0xMjg5LDYgKzE3NzksMTYgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFVzaW5nIDo6ZXF1YWxzIGFzIGFuIGluY29tcGF0aWJsZSBQcmVkaWNhdGU7IHRoZSBwcmVkaWNhdGUgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUHJlZGljYXRlSW5jb21wYXRpYmxlVHlwZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQWNjZXNzIHRvIGEgcHJpdmF0ZSBwcm90b2NvbCBidWZmZXIgZmllbGQgaXMgZm9yYmlkZGVuLiBUaGlzIHByb3RvY29sIGJ1ZmZlciBjYXJyaWVzIGEgc2VjdXJpdHkgY29udHJhY3QsIGFuZCBjYW4gb25seSBiZSBjcmVhdGVkIHVzaW5nIGFuIGFwcHJvdmVkIGxpYnJhcnkuIERpcmVjdCBhY2Nlc3MgdG8gdGhlIGZpZWxkcyBpcyBmb3JiaWRkZW4uJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUHJpdmF0ZVNlY3VyaXR5Q29udHJhY3RQcm90b0FjY2Vzc1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogUHJvdG9idWYgZmllbGRzIGNhbm5vdCBiZSBudWxsJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUHJvdG9GaWVsZE51bGxDb21wYXJpc29uXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKQEAgLTEyOTksNiArMTc5OSwxNiBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVG8gZ2V0IHRoZSB0YWcgbnVtYmVyIG9mIGEgcHJvdG9jb2wgYnVmZmVyIGVudW0sIHVzZSBnZXROdW1iZXIoKSBpbnN0ZWFkLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1Byb3RvY29sQnVmZmVyT3JkaW5hbFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQ2FzdGluZyBhIHJhbmRvbSBudW1iZXIgaW4gdGhlIHJhbmdlIFswLjAsIDEuMCkgdG8gYW4gaW50ZWdlciBvciBsb25nIGFsd2F5cyByZXN1bHRzIGluIDAuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUmFuZG9tQ2FzdFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogVXNlIFJhbmRvbS5uZXh0SW50KGludCkuICBSYW5kb20ubmV4dEludCgpICUgbiBjYW4gaGF2ZSBuZWdhdGl2ZSByZXN1bHRzJywKICAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUmFuZG9tTW9kSW50ZWdlclxdIC4rIl19LAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCkBAIC0xMzI0LDEzICsxODM0LDEzIEBACiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBWYXJpYWJsZSBjb21wYXJlZCB0byBpdHNlbGYnLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtTZWxmRXF1YWxpdHlcXSAuKyJdfSwKKyAgICAgICAgICdKYXZhOiBUZXN0aW5nIGFuIG9iamVjdCBmb3IgZXF1YWxpdHkgd2l0aCBpdHNlbGYgd2lsbCBhbHdheXMgYmUgdHJ1ZS4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtTZWxmRXF1YWxzXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKLSAgICAgICAgICdKYXZhOiBBbiBvYmplY3QgaXMgdGVzdGVkIGZvciBlcXVhbGl0eSB0byBpdHNlbGYnLAotICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtTZWxmRXF1YWxzXF0gLisiXX0sCisgICAgICAgICAnSmF2YTogVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgd2l0aCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbU2hvdWxkSGF2ZUV2ZW5BcmdzXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKICAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKICAgICAgJ2Rlc2NyaXB0aW9uJzoKQEAgLTEzNTksNiArMTg2OSwxNiBAQAogICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCiAgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCiAgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVGhyb3dpbmcgXCdudWxsXCcgYWx3YXlzIHJlc3VsdHMgaW4gYSBOdWxsUG9pbnRlckV4Y2VwdGlvbiBiZWluZyB0aHJvd24uJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbVGhyb3dOdWxsXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBpc0VxdWFsVG8gc2hvdWxkIG5vdCBiZSB1c2VkIHRvIHRlc3QgYW4gb2JqZWN0IGZvciBlcXVhbGl0eSB3aXRoIGl0c2VsZjsgdGhlIGFzc2VydGlvbiB3aWxsIG5ldmVyIGZhaWwuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbVHJ1dGhTZWxmRXF1YWxzXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICdKYXZhOiBDYXRjaGluZyBUaHJvd2FibGUvRXJyb3IgbWFza3MgZmFpbHVyZXMgZnJvbSBmYWlsKCkgb3IgYXNzZXJ0KigpIGluIHRoZSB0cnkgYmxvY2snLAogICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtUcnlGYWlsVGhyb3dhYmxlXF0gLisiXX0sCiAgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKQEAgLTEzODQsOCArMTkwNCwxOTMgQEAKICAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAogICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAogICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IGB2YXJgIHNob3VsZCBub3QgYmUgdXNlZCBhcyBhIHR5cGUgbmFtZS4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtWYXJUeXBlTmFtZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAnSmF2YTogTWV0aG9kIHBhcmFtZXRlciBoYXMgd3JvbmcgcGFja2FnZScsCiAgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1BhcmFtZXRlclBhY2thZ2VcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFR5cGUgZGVjbGFyYXRpb24gYW5ub3RhdGVkIHdpdGggQFRocmVhZFNhZmUgaXMgbm90IHRocmVhZCBzYWZlJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbVGhyZWFkU2FmZVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVXNlIG9mIGNsYXNzLCBmaWVsZCwgb3IgbWV0aG9kIHRoYXQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBsZWdhY3kgQW5kcm9pZCBkZXZpY2VzJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbQW5kcm9pZEFwaUNoZWNrZXJcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IEludmFsaWQgdXNlIG9mIEZsb2dnZXIgZm9ybWF0IHN0cmluZycsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0FuZHJvaWRGbG9nZ2VyRm9ybWF0U3RyaW5nXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBVc2UgVHVubmVsRXhjZXB0aW9uLmdldENhdXNlQXMoQ2xhc3MpIGluc3RlYWQgb2YgY2FzdGluZyB0aGUgcmVzdWx0IG9mIFR1bm5lbEV4Y2VwdGlvbi5nZXRDYXVzZSgpLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0RvTm90Q2FzdFR1bm5lbEV4Y2VwdGlvbkNhdXNlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBJZGVudGlmaWVzIHVuZGVzaXJhYmxlIG1vY2tzLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0RvTm90TW9ja19Gb3JKYXZhQnVpbGRlclxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRHVyYXRpb24gRmxhZyBzaG91bGQgTk9UIGhhdmUgdW5pdHMgaW4gdGhlIHZhcmlhYmxlIG5hbWUgb3IgdGhlIEBGbGFnU3BlY1wncyBuYW1lIG9yIGFsdE5hbWUgZmllbGQuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRHVyYXRpb25GbGFnV2l0aFVuaXRzXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBEdXJhdGlvbi5nZXQoKSBvbmx5IHdvcmtzIHdpdGggU0VDT05EUyBvciBOQU5PUy4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtEdXJhdGlvbkdldFRlbXBvcmFsVW5pdFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogSW52YWxpZCBwcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZycsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0Zsb2dnZXJGb3JtYXRTdHJpbmdcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFRlc3QgY2xhc3MgbWF5IG5vdCBiZSBydW4gYmVjYXVzZSBpdCBpcyBtaXNzaW5nIGEgQFJ1bldpdGggYW5ub3RhdGlvbicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0pVbml0NFJ1bldpdGhNaXNzaW5nXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBVc2Ugb2YgY2xhc3MsIGZpZWxkLCBvciBtZXRob2QgdGhhdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIEpESyA3JywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSmF2YTdBcGlDaGVja2VyXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBVc2Ugb2YgamF2YS50aW1lLkR1cmF0aW9uLndpdGhOYW5vcyhpbnQpIGlzIG5vdCBhbGxvd2VkLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0phdmFEdXJhdGlvbldpdGhOYW5vc1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVXNlIG9mIGphdmEudGltZS5EdXJhdGlvbi53aXRoU2Vjb25kcyhsb25nKSBpcyBub3QgYWxsb3dlZC4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKYXZhRHVyYXRpb25XaXRoU2Vjb25kc1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogamF2YS50aW1lIEFQSXMgdGhhdCBzaWxlbnRseSB1c2UgdGhlIGRlZmF1bHQgc3lzdGVtIHRpbWUtem9uZSBhcmUgbm90IGFsbG93ZWQuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSmF2YVRpbWVEZWZhdWx0VGltZVpvbmVcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFVzZSBvZiBuZXcgRHVyYXRpb24obG9uZykgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgRHVyYXRpb24ubWlsbGlzKGxvbmcpIGluc3RlYWQuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSm9kYUR1cmF0aW9uQ29uc3RydWN0b3JcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFVzZSBvZiBkdXJhdGlvbi53aXRoTWlsbGlzKGxvbmcpIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2UgdXNlIER1cmF0aW9uLm1pbGxpcyhsb25nKSBpbnN0ZWFkLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0pvZGFEdXJhdGlvbldpdGhNaWxsaXNcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFVzZSBvZiBpbnN0YW50LndpdGhNaWxsaXMobG9uZykgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgbmV3IEluc3RhbnQobG9uZykgaW5zdGVhZC4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKb2RhSW5zdGFudFdpdGhNaWxsaXNcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFVzZSBvZiBKb2RhVGltZVwncyB0eXBlLnBsdXMobG9uZykgb3IgdHlwZS5taW51cyhsb25nKSBpcyBub3QgYWxsb3dlZCAod2hlcmUgXHUwMDNjdHlwZT4gPSB7RHVyYXRpb24sSW5zdGFudCxEYXRlVGltZSxEYXRlTWlkbmlnaHR9KS4gUGxlYXNlIHVzZSB0eXBlLnBsdXMoRHVyYXRpb24ubWlsbGlzKGxvbmcpKSBvciB0eXBlLm1pbnVzKER1cmF0aW9uLm1pbGxpcyhsb25nKSkgaW5zdGVhZC4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtKb2RhUGx1c01pbnVzTG9uZ1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQ2hhbmdpbmcgSm9kYVRpbWVcJ3MgY3VycmVudCB0aW1lIGlzIG5vdCBhbGxvd2VkIGluIG5vbi10ZXN0b25seSBjb2RlLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0pvZGFTZXRDdXJyZW50TWlsbGlzXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBVc2Ugb2YgSm9kYS1UaW1lXCdzIERhdGVUaW1lLnRvRGF0ZVRpbWUoKSwgRHVyYXRpb24udG9EdXJhdGlvbigpLCBJbnN0YW50LnRvSW5zdGFudCgpLCBJbnRlcnZhbC50b0ludGVydmFsKCksIGFuZCBQZXJpb2QudG9QZXJpb2QoKSBhcmUgbm90IGFsbG93ZWQuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSm9kYVRvU2VsZlxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVXNlIG9mIEpvZGFUaW1lXCdzIHR5cGUud2l0aER1cmF0aW9uQWRkZWQobG9uZywgaW50KSAod2hlcmUgXHUwMDNjdHlwZT4gPSB7RHVyYXRpb24sSW5zdGFudCxEYXRlVGltZX0pLiBQbGVhc2UgdXNlIHR5cGUud2l0aER1cmF0aW9uQWRkZWQoRHVyYXRpb24ubWlsbGlzKGxvbmcpLCBpbnQpIGluc3RlYWQuJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbSm9kYVdpdGhEdXJhdGlvbkFkZGVkTG9uZ1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogTGFuZ3VhZ2VDb2RlIGNvbXBhcmlzb24gdXNpbmcgcmVmZXJlbmNlIGVxdWFsaXR5IGluc3RlYWQgb2YgdmFsdWUgZXF1YWxpdHknLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtMYW5ndWFnZUNvZGVFcXVhbGl0eVxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVGhlIHplcm8gYXJndW1lbnQgdG9TdHJpbmcgaXMgbm90IHBhcnQgb2YgdGhlIExvY2FsaXphYmxlIGludGVyZmFjZSBhbmQgbGlrZWx5IGlzIGp1c3QgdGhlIGphdmEgT2JqZWN0IHRvU3RyaW5nLiAgWW91IHByb2JhYmx5IHdhbnQgdG8gY2FsbCB0b1N0cmluZyhMb2NhbGUpLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0xvY2FsaXphYmxlV3JvbmdUb1N0cmluZ1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogUGVyaW9kLmdldCgpIG9ubHkgd29ya3Mgd2l0aCBZRUFSUywgTU9OVEhTLCBvciBEQVlTLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1BlcmlvZEdldFRlbXBvcmFsVW5pdFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogUmV0dXJuIHZhbHVlIG9mIG1ldGhvZHMgcmV0dXJuaW5nIFByb21pc2UgbXVzdCBiZSBjaGVja2VkLiBJZ25vcmluZyByZXR1cm5lZCBQcm9taXNlcyBzdXBwcmVzc2VzIGV4Y2VwdGlvbnMgdGhyb3duIGZyb20gdGhlIGNvZGUgdGhhdCBjb21wbGV0ZXMgdGhlIFByb21pc2VzLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1Byb21pc2VSZXR1cm5WYWx1ZUlnbm9yZWRcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IFdoZW4gcmV0dXJuaW5nIGEgUHJvbWlzZSwgdXNlIHRoZW5DaGFpbigpIGluc3RlYWQgb2YgdGhlbigpJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUHJvbWlzZVRoZW5SZXR1cm5pbmdQcm9taXNlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBTdHJlYW1zLml0ZXJhdGluZygpIGlzIHVuc2FmZSBmb3IgdXNlIGV4Y2VwdCBpbiB0aGUgaGVhZGVyIG9mIGEgZm9yLWVhY2ggbG9vcDsgcGxlYXNlIHNlZSBpdHMgSmF2YWRvYyBmb3IgZGV0YWlscy4nLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtTdHJlYW1zSXRlcmF0aW5nTm90SW5Mb29wXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBUZW1wb3JhbEFjY2Vzc29yLmdldCgpIG9ubHkgd29ya3MgZm9yIGNlcnRhaW4gdmFsdWVzIG9mIENocm9ub0ZpZWxkLicsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1RlbXBvcmFsQWNjZXNzb3JHZXRDaHJvbm9GaWVsZFxdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogVHJ5LXdpdGgtcmVzb3VyY2VzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBjb2RlLCB1c2UgdHJ5L2ZpbmFsbHkgaW5zdGVhZCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW1RyeVdpdGhSZXNvdXJjZXNcXSAuKyJdfSwKKyAgICB7J2NhdGVnb3J5JzogJ2phdmEnLAorICAgICAnc2V2ZXJpdHknOiBTZXZlcml0eS5ISUdILAorICAgICAnZGVzY3JpcHRpb24nOgorICAgICAgICAgJ0phdmE6IEFkZHMgY2hlY2tPclRocm93IGNhbGxzIHdoZXJlIG5lZWRlZCcsCisgICAgICdwYXR0ZXJucyc6IFtyIi4qOiB3YXJuaW5nOiBcW0FkZENoZWNrT3JUaHJvd1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogRXF1YWxpdHkgb24gTmFubyBwcm90b3MgKD09IG9yIC5lcXVhbHMpIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBpbiBMaXRlJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRm9yYmlkTmFub0VxdWFsaXR5XF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBTdWJtZXNzYWdlcyBvZiBhIHByb3RvIGNhbm5vdCBiZSBtdXRhdGVkJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbRm9yYmlkU3VibWVzc2FnZU11dGF0aW9uXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBSZXBlYXRlZCBmaWVsZHMgb24gcHJvdG8gbWVzc2FnZXMgY2Fubm90IGJlIGRpcmVjdGx5IHJlZmVyZW5jZWQnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtOYW5vVW5zYWZlUmVwZWF0ZWRGaWVsZFVzYWdlXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBSZXF1aXJlcyB0aGF0IG5vbi1AZW51bSBpbnQgYXNzaWdubWVudHMgdG8gQGVudW0gaW50cyBpcyB3cmFwcGVkIGluIGEgY2hlY2tPclRocm93JywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbUmVxdWlyZUNoZWNrT3JUaHJvd1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQXNzaWdubWVudHMgaW50byByZXBlYXRlZCBmaWVsZCBlbGVtZW50cyBtdXN0IGJlIHNlcXVlbnRpYWwnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtSZXF1aXJlU2VxdWVudGlhbFJlcGVhdGVkRmllbGRzXF0gLisiXX0sCisgICAgeydjYXRlZ29yeSc6ICdqYXZhJywKKyAgICAgJ3NldmVyaXR5JzogU2V2ZXJpdHkuSElHSCwKKyAgICAgJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICdKYXZhOiBGdXR1cmUuZ2V0IGluIEdvb2dsZSBOb3cgUHJvZHVjZXJzIGNvZGUnLAorICAgICAncGF0dGVybnMnOiBbciIuKjogd2FybmluZzogXFtGdXR1cmVHZXRJbk5vd1Byb2R1Y2Vyc1xdIC4rIl19LAorICAgIHsnY2F0ZWdvcnknOiAnamF2YScsCisgICAgICdzZXZlcml0eSc6IFNldmVyaXR5LkhJR0gsCisgICAgICdkZXNjcmlwdGlvbic6CisgICAgICAgICAnSmF2YTogQFNpbXBsZUVudW0gYXBwbGllZCB0byBub24tZW51bSB0eXBlJywKKyAgICAgJ3BhdHRlcm5zJzogW3IiLio6IHdhcm5pbmc6IFxbU2ltcGxlRW51bVVzYWdlXF0gLisiXX0sCiAKICAgICAjIEVuZCB3YXJuaW5ncyBnZW5lcmF0ZWQgYnkgRXJyb3IgUHJvbmUKIApAQCAtMjM3MSw3ICszMDc2LDcgQEAKICAgZm9yIGlkeCBpbiByZXZlcnNlZChyYW5nZSgyLCBsZW4ocGFydHMpKSk6CiAgICAgcm9vdF9wYXRoID0gJy8nLmpvaW4ocGFydHNbOmlkeF0pCiAgICAgIyBBbmRyb2lkIHJvb3QgZGlyZWN0b3J5IHNob3VsZCBjb250YWluIHRoaXMgc2NyaXB0LgotICAgIGlmIG9zLnBhdGguZXhpc3RzKHJvb3RfcGF0aCArICcvYnVpbGQvdG9vbHMvd2Fybi5weScpOgorICAgIGlmIG9zLnBhdGguZXhpc3RzKHJvb3RfcGF0aCArICcvYnVpbGQvbWFrZS90b29scy93YXJuLnB5Jyk6CiAgICAgICBhbmRyb2lkX3Jvb3QgPSByb290X3BhdGgKICAgICAgIHJldHVybiByb290X3BhdGgKICAgcmV0dXJuICcnCg==