ZGlmZiAtLWdpdCBhL2Jvb3RzdGF0L2Jvb3RzdGF0LmNwcCBiL2Jvb3RzdGF0L2Jvb3RzdGF0LmNwcAppbmRleCAzYjg4NjZlLi4yZDU1ZTVhIDEwMDY0NAotLS0gYS9ib290c3RhdC9ib290c3RhdC5jcHAKKysrIGIvYm9vdHN0YXQvYm9vdHN0YXQuY3BwCkBAIC00NjEsNiArNDYxLDE0IEBACiAgICAgeyJyZWJvb3Qsc21wbF90aW1lb3V0LHBtaWMsbWFpbiIsIDIyOX0sCiAgICAgeyJyZWJvb3Qsb3RhLC4qIiwgMjMwfSwKICAgICB7InJlYm9vdCxwZXJpb2RpYywuKiIsIDIzMX0sCisgICAgeyJyZWJvb3QsZWFybHksYWJsIiwgMjMyfSwKKyAgICB7InJlYm9vdCxlYXJseSxibDIiLCAyMzN9LAorICAgIHsicmVib290LGxvbmdrZXkscG1pY19jb2xkIiwgMjM0fSwKKyAgICB7InJlYm9vdCxsb25na2V5LG1hc3Rlcl9kYyIsIDIzNX0sCisgICAgeyJyZWJvb3Qsb2NwMixwbWljLGlmIiwgMjM2fSwKKyAgICB7InJlYm9vdCxvY3AscG1pYyxpZiIsIDIzN30sCisgICAgeyJyZWJvb3QsZnNoaXAiLCAyMzh9LAorICAgIHsicmVib290LG9jcCwuKiIsIDIzOX0sCiB9OwogCiAvLyBDb252ZXJ0cyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHJlYXNvbiB0aGUgc3lzdGVtIGJvb3RlZCB0byBhbgpkaWZmIC0tZ2l0IGEvZGVidWdnZXJkL2NvbW1vbi9pbmNsdWRlL2R1bXBfdHlwZS5oIGIvZGVidWdnZXJkL2NvbW1vbi9pbmNsdWRlL2R1bXBfdHlwZS5oCmluZGV4IGEzZTE3MWIuLjgyZWY3YjYgMTAwNjQ0Ci0tLSBhL2RlYnVnZ2VyZC9jb21tb24vaW5jbHVkZS9kdW1wX3R5cGUuaAorKysgYi9kZWJ1Z2dlcmQvY29tbW9uL2luY2x1ZGUvZHVtcF90eXBlLmgKQEAgLTI4LDI2ICsyOCwyNCBAQAogICBrRGVidWdnZXJkVG9tYnN0b25lUHJvdG8sCiB9OwogCi1pbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgc3RyZWFtLCBjb25zdCBEZWJ1Z2dlcmREdW1wVHlwZSYgcmhzKSB7Ci0gIHN3aXRjaCAocmhzKSB7CitpbmxpbmUgY29uc3QgY2hhciogZ2V0X2R1bXBfdHlwZV9uYW1lKGNvbnN0IERlYnVnZ2VyZER1bXBUeXBlJiBkdW1wX3R5cGUpIHsKKyAgc3dpdGNoIChkdW1wX3R5cGUpIHsKICAgICBjYXNlIGtEZWJ1Z2dlcmROYXRpdmVCYWNrdHJhY2U6Ci0gICAgICBzdHJlYW0gPDwgImtEZWJ1Z2dlcmROYXRpdmVCYWNrdHJhY2UiOwotICAgICAgYnJlYWs7CisgICAgICByZXR1cm4gImtEZWJ1Z2dlcmROYXRpdmVCYWNrdHJhY2UiOwogICAgIGNhc2Uga0RlYnVnZ2VyZFRvbWJzdG9uZToKLSAgICAgIHN0cmVhbSA8PCAia0RlYnVnZ2VyZFRvbWJzdG9uZSI7Ci0gICAgICBicmVhazsKKyAgICAgIHJldHVybiAia0RlYnVnZ2VyZFRvbWJzdG9uZSI7CiAgICAgY2FzZSBrRGVidWdnZXJkSmF2YUJhY2t0cmFjZToKLSAgICAgIHN0cmVhbSA8PCAia0RlYnVnZ2VyZEphdmFCYWNrdHJhY2UiOwotICAgICAgYnJlYWs7CisgICAgICByZXR1cm4gImtEZWJ1Z2dlcmRKYXZhQmFja3RyYWNlIjsKICAgICBjYXNlIGtEZWJ1Z2dlcmRBbnlJbnRlcmNlcHQ6Ci0gICAgICBzdHJlYW0gPDwgImtEZWJ1Z2dlcmRBbnlJbnRlcmNlcHQiOwotICAgICAgYnJlYWs7CisgICAgICByZXR1cm4gImtEZWJ1Z2dlcmRBbnlJbnRlcmNlcHQiOwogICAgIGNhc2Uga0RlYnVnZ2VyZFRvbWJzdG9uZVByb3RvOgotICAgICAgc3RyZWFtIDw8ICJrRGVidWdnZXJkVG9tYnN0b25lUHJvdG8iOwotICAgICAgYnJlYWs7CisgICAgICByZXR1cm4gImtEZWJ1Z2dlcmRUb21ic3RvbmVQcm90byI7CiAgICAgZGVmYXVsdDoKLSAgICAgIHN0cmVhbSA8PCAiW3Vua25vd25dIjsKKyAgICAgIHJldHVybiAiW3Vua25vd25dIjsKICAgfQorfQogCitpbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgc3RyZWFtLCBjb25zdCBEZWJ1Z2dlcmREdW1wVHlwZSYgcmhzKSB7CisgIHN0cmVhbSA8PCBnZXRfZHVtcF90eXBlX25hbWUocmhzKTsKICAgcmV0dXJuIHN0cmVhbTsKIH0KZGlmZiAtLWdpdCBhL2RlYnVnZ2VyZC9kZWJ1Z2dlcmRfdGVzdC5jcHAgYi9kZWJ1Z2dlcmQvZGVidWdnZXJkX3Rlc3QuY3BwCmluZGV4IDE5ZmY3ZWIuLmMzZTEzMDIgMTAwNjQ0Ci0tLSBhL2RlYnVnZ2VyZC9kZWJ1Z2dlcmRfdGVzdC5jcHAKKysrIGIvZGVidWdnZXJkL2RlYnVnZ2VyZF90ZXN0LmNwcApAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgICAgICAgICBSIigjXGRcZCBwYyBbMC05YS1mXStccysgXFMrIChcKG9mZnNldCAweFswLTlhLWZdK1wpICk/XCgpIiBmcmFtZV9uYW1lIFIiKFwrKSIpOwogCiBzdGF0aWMgdm9pZCB0b21ic3RvbmVkX2ludGVyY2VwdChwaWRfdCB0YXJnZXRfcGlkLCB1bmlxdWVfZmQqIGludGVyY2VwdF9mZCwgdW5pcXVlX2ZkKiBvdXRwdXRfZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmNlcHRTdGF0dXMqIHN0YXR1cywgRGVidWdnZXJkRHVtcFR5cGUgaW50ZXJjZXB0X3R5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyY2VwdFJlc3BvbnNlKiByZXNwb25zZSwgRGVidWdnZXJkRHVtcFR5cGUgaW50ZXJjZXB0X3R5cGUpIHsKICAgaW50ZXJjZXB0X2ZkLT5yZXNldChzb2NrZXRfbG9jYWxfY2xpZW50KGtUb21ic3RvbmVkSW50ZXJjZXB0U29ja2V0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORFJPSURfU09DS0VUX05BTUVTUEFDRV9SRVNFUlZFRCwgU09DS19TRVFQQUNLRVQpKTsKICAgaWYgKGludGVyY2VwdF9mZC0+Z2V0KCkgPT0gLTEpIHsKQEAgLTE1NSwxOCArMTU1LDE1IEBACiAgICAgRkFJTCgpIDw8ICJmYWlsZWQgdG8gc2VuZCBvdXRwdXQgZmQgdG8gdG9tYnN0b25lZDogIiA8PCBzdHJlcnJvcihlcnJubyk7CiAgIH0KIAotICBJbnRlcmNlcHRSZXNwb25zZSByZXNwb25zZTsKLSAgcmMgPSBURU1QX0ZBSUxVUkVfUkVUUlkocmVhZChpbnRlcmNlcHRfZmQtPmdldCgpLCAmcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpKTsKKyAgcmMgPSBURU1QX0ZBSUxVUkVfUkVUUlkocmVhZChpbnRlcmNlcHRfZmQtPmdldCgpLCByZXNwb25zZSwgc2l6ZW9mKCpyZXNwb25zZSkpKTsKICAgaWYgKHJjID09IC0xKSB7CiAgICAgRkFJTCgpIDw8ICJmYWlsZWQgdG8gcmVhZCByZXNwb25zZSBmcm9tIHRvbWJzdG9uZWQ6ICIgPDwgc3RyZXJyb3IoZXJybm8pOwogICB9IGVsc2UgaWYgKHJjID09IDApIHsKICAgICBGQUlMKCkgPDwgImZhaWxlZCB0byByZWFkIHJlc3BvbnNlIGZyb20gdG9tYnN0b25lZCAoRU9GKSI7Ci0gIH0gZWxzZSBpZiAocmMgIT0gc2l6ZW9mKHJlc3BvbnNlKSkgewotICAgIEZBSUwoKSA8PCAicmVjZWl2ZWQgcGFja2V0IG9mIHVuZXhwZWN0ZWQgbGVuZ3RoIGZyb20gdG9tYnN0b25lZDogZXhwZWN0ZWQgIiA8PCBzaXplb2YocmVzcG9uc2UpCisgIH0gZWxzZSBpZiAocmMgIT0gc2l6ZW9mKCpyZXNwb25zZSkpIHsKKyAgICBGQUlMKCkgPDwgInJlY2VpdmVkIHBhY2tldCBvZiB1bmV4cGVjdGVkIGxlbmd0aCBmcm9tIHRvbWJzdG9uZWQ6IGV4cGVjdGVkICIgPDwgc2l6ZW9mKCpyZXNwb25zZSkKICAgICAgICAgICAgPDwgIiwgcmVjZWl2ZWQgIiA8PCByYzsKICAgfQotCi0gICpzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7CiB9CiAKIHN0YXRpYyBib29sIHBhY19zdXBwb3J0ZWQoKSB7CkBAIC0yMjUsOSArMjIyLDEwIEBACiAgICAgRkFJTCgpIDw8ICJjcmFzaGVyIGhhc24ndCBiZWVuIHN0YXJ0ZWQiOwogICB9CiAKLSAgSW50ZXJjZXB0U3RhdHVzIHN0YXR1czsKLSAgdG9tYnN0b25lZF9pbnRlcmNlcHQoY3Jhc2hlcl9waWQsICZ0aGlzLT5pbnRlcmNlcHRfZmQsIG91dHB1dF9mZCwgJnN0YXR1cywgaW50ZXJjZXB0X3R5cGUpOwotICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprUmVnaXN0ZXJlZCwgc3RhdHVzKTsKKyAgSW50ZXJjZXB0UmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKKyAgdG9tYnN0b25lZF9pbnRlcmNlcHQoY3Jhc2hlcl9waWQsICZ0aGlzLT5pbnRlcmNlcHRfZmQsIG91dHB1dF9mZCwgJnJlc3BvbnNlLCBpbnRlcmNlcHRfdHlwZSk7CisgIEFTU0VSVF9FUShJbnRlcmNlcHRTdGF0dXM6OmtSZWdpc3RlcmVkLCByZXNwb25zZS5zdGF0dXMpCisgICAgICA8PCAiRXJyb3IgbWVzc2FnZTogIiA8PCByZXNwb25zZS5lcnJvcl9tZXNzYWdlOwogfQogCiB2b2lkIENyYXNoZXJUZXN0OjpGaW5pc2hJbnRlcmNlcHQoaW50KiByZXN1bHQpIHsKQEAgLTE3NDQsOSArMTc0MiwxMCBAQAogICAgIHBpZF90IHBpZCA9IDEyMyc0NTYnNzg5ICsgaTsKIAogICAgIHVuaXF1ZV9mZCBpbnRlcmNlcHRfZmQsIG91dHB1dF9mZDsKLSAgICBJbnRlcmNlcHRTdGF0dXMgc3RhdHVzOwotICAgIHRvbWJzdG9uZWRfaW50ZXJjZXB0KHBpZCwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnN0YXR1cywga0RlYnVnZ2VyZFRvbWJzdG9uZSk7Ci0gICAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHN0YXR1cyk7CisgICAgSW50ZXJjZXB0UmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKKyAgICB0b21ic3RvbmVkX2ludGVyY2VwdChwaWQsICZpbnRlcmNlcHRfZmQsICZvdXRwdXRfZmQsICZyZXNwb25zZSwga0RlYnVnZ2VyZFRvbWJzdG9uZSk7CisgICAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgICAgPDwgIkVycm9yIG1lc3NhZ2U6ICIgPDwgcmVzcG9uc2UuZXJyb3JfbWVzc2FnZTsKIAogICAgIHsKICAgICAgIHVuaXF1ZV9mZCB0b21ic3RvbmVkX3NvY2tldCwgaW5wdXRfZmQ7CkBAIC0xNzc4LDkgKzE3NzcsMTAgQEAKICAgICAgIHBpZF90IHBpZCA9IHBpZF9iYXNlICsgZHVtcDsKIAogICAgICAgdW5pcXVlX2ZkIGludGVyY2VwdF9mZCwgb3V0cHV0X2ZkOwotICAgICAgSW50ZXJjZXB0U3RhdHVzIHN0YXR1czsKLSAgICAgIHRvbWJzdG9uZWRfaW50ZXJjZXB0KHBpZCwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnN0YXR1cywga0RlYnVnZ2VyZFRvbWJzdG9uZSk7Ci0gICAgICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprUmVnaXN0ZXJlZCwgc3RhdHVzKTsKKyAgICAgIEludGVyY2VwdFJlc3BvbnNlIHJlc3BvbnNlID0ge307CisgICAgICB0b21ic3RvbmVkX2ludGVyY2VwdChwaWQsICZpbnRlcmNlcHRfZmQsICZvdXRwdXRfZmQsICZyZXNwb25zZSwga0RlYnVnZ2VyZFRvbWJzdG9uZSk7CisgICAgICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprUmVnaXN0ZXJlZCwgcmVzcG9uc2Uuc3RhdHVzKQorICAgICAgICAgIDw8ICJFcnJvciBtZXNzZWFnZTogIiA8PCByZXNwb25zZS5lcnJvcl9tZXNzYWdlOwogCiAgICAgICAvLyBQcmV0ZW5kIHRvIGNyYXNoLCBhbmQgdGhlbiBpbW1lZGlhdGVseSBjbG9zZSB0aGUgc29ja2V0LgogICAgICAgdW5pcXVlX2ZkIHNvY2tmZChzb2NrZXRfbG9jYWxfY2xpZW50KGtUb21ic3RvbmVkQ3Jhc2hTb2NrZXROYW1lLApAQCAtMTgxMSw5ICsxODExLDEwIEBACiAgICAgICBwaWRfdCBwaWQgPSBwaWRfYmFzZSArIGR1bXA7CiAKICAgICAgIHVuaXF1ZV9mZCBpbnRlcmNlcHRfZmQsIG91dHB1dF9mZDsKLSAgICAgIEludGVyY2VwdFN0YXR1cyBzdGF0dXM7Ci0gICAgICB0b21ic3RvbmVkX2ludGVyY2VwdChwaWQsICZpbnRlcmNlcHRfZmQsICZvdXRwdXRfZmQsICZzdGF0dXMsIGtEZWJ1Z2dlcmRUb21ic3RvbmUpOwotICAgICAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHN0YXR1cyk7CisgICAgICBJbnRlcmNlcHRSZXNwb25zZSByZXNwb25zZSA9IHt9OworICAgICAgdG9tYnN0b25lZF9pbnRlcmNlcHQocGlkLCAmaW50ZXJjZXB0X2ZkLCAmb3V0cHV0X2ZkLCAmcmVzcG9uc2UsIGtEZWJ1Z2dlcmRUb21ic3RvbmUpOworICAgICAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgICAgICA8PCAiRXJyb3IgbWVzc2FnZTogIiA8PCByZXNwb25zZS5lcnJvcl9tZXNzYWdlOwogCiAgICAgICB7CiAgICAgICAgIHVuaXF1ZV9mZCB0b21ic3RvbmVkX3NvY2tldCwgaW5wdXRfZmQ7CkBAIC0xODM4LDE2ICsxODM5LDE3IEBACiAgIH0KIH0KIAotVEVTVCh0b21ic3RvbmVkLCBqYXZhX3RyYWNlX2ludGVyY2VwdF9zbW9rZSkgeworVEVTVCh0b21ic3RvbmVkLCBpbnRlcmNlcHRfamF2YV90cmFjZV9zbW9rZSkgewogICAvLyBVc2luZyBhICJyZWFsIiBQSUQgaXMgYSBsaXR0bGUgZGFuZ2Vyb3VzIGhlcmUgLSBpZiB0aGUgdGVzdCBmYWlscwogICAvLyBvciBjcmFzaGVzLCB3ZSBtaWdodCBlbmQgdXAgZ2V0dGluZyBhIGJvZ3VzIC8gdW5yZWxpYWJsZSBzdGFjawogICAvLyB0cmFjZS4KICAgY29uc3QgcGlkX3Qgc2VsZiA9IGdldHBpZCgpOwogCiAgIHVuaXF1ZV9mZCBpbnRlcmNlcHRfZmQsIG91dHB1dF9mZDsKLSAgSW50ZXJjZXB0U3RhdHVzIHN0YXR1czsKLSAgdG9tYnN0b25lZF9pbnRlcmNlcHQoc2VsZiwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnN0YXR1cywga0RlYnVnZ2VyZEphdmFCYWNrdHJhY2UpOwotICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprUmVnaXN0ZXJlZCwgc3RhdHVzKTsKKyAgSW50ZXJjZXB0UmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKKyAgdG9tYnN0b25lZF9pbnRlcmNlcHQoc2VsZiwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnJlc3BvbnNlLCBrRGVidWdnZXJkSmF2YUJhY2t0cmFjZSk7CisgIEFTU0VSVF9FUShJbnRlcmNlcHRTdGF0dXM6OmtSZWdpc3RlcmVkLCByZXNwb25zZS5zdGF0dXMpCisgICAgICA8PCAiRXJyb3IgbWVzc2FnZTogIiA8PCByZXNwb25zZS5lcnJvcl9tZXNzYWdlOwogCiAgIC8vIEZpcnN0IGNvbm5lY3QgdG8gdG9tYnN0b25lZCByZXF1ZXN0aW5nIGEgbmF0aXZlIHRvbWJzdG9uZS4gVGhpcwogICAvLyBzaG91bGQgcmVzdWx0IGluIGEgInJlZ3VsYXIiIEZEIGFuZCBub3QgdGhlIGluc3RhbGxlZCBpbnRlcmNlcHQuCkBAIC0xODY5LDI1ICsxODcxLDk2IEBACiAgIEFTU0VSVF9TVFJFUSgiamF2YSIsIG91dGJ1Zik7CiB9CiAKLVRFU1QodG9tYnN0b25lZCwgbXVsdGlwbGVfaW50ZXJjZXB0cykgeworVEVTVCh0b21ic3RvbmVkLCBpbnRlcmNlcHRfbXVsdGlwbGVfZHVtcF90eXBlcykgewogICBjb25zdCBwaWRfdCBmYWtlX3BpZCA9IDEnMjM0JzU2NzsKICAgdW5pcXVlX2ZkIGludGVyY2VwdF9mZCwgb3V0cHV0X2ZkOwotICBJbnRlcmNlcHRTdGF0dXMgc3RhdHVzOwotICB0b21ic3RvbmVkX2ludGVyY2VwdChmYWtlX3BpZCwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnN0YXR1cywga0RlYnVnZ2VyZEphdmFCYWNrdHJhY2UpOwotICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprUmVnaXN0ZXJlZCwgc3RhdHVzKTsKKyAgSW50ZXJjZXB0UmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKKyAgdG9tYnN0b25lZF9pbnRlcmNlcHQoZmFrZV9waWQsICZpbnRlcmNlcHRfZmQsICZvdXRwdXRfZmQsICZyZXNwb25zZSwga0RlYnVnZ2VyZEphdmFCYWNrdHJhY2UpOworICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprUmVnaXN0ZXJlZCwgcmVzcG9uc2Uuc3RhdHVzKQorICAgICAgPDwgIkVycm9yIG1lc3NhZ2U6ICIgPDwgcmVzcG9uc2UuZXJyb3JfbWVzc2FnZTsKIAogICB1bmlxdWVfZmQgaW50ZXJjZXB0X2ZkXzIsIG91dHB1dF9mZF8yOwotICB0b21ic3RvbmVkX2ludGVyY2VwdChmYWtlX3BpZCwgJmludGVyY2VwdF9mZF8yLCAmb3V0cHV0X2ZkXzIsICZzdGF0dXMsIGtEZWJ1Z2dlcmROYXRpdmVCYWNrdHJhY2UpOwotICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprRmFpbGVkQWxyZWFkeVJlZ2lzdGVyZWQsIHN0YXR1cyk7CisgIHRvbWJzdG9uZWRfaW50ZXJjZXB0KGZha2VfcGlkLCAmaW50ZXJjZXB0X2ZkXzIsICZvdXRwdXRfZmRfMiwgJnJlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICBrRGVidWdnZXJkTmF0aXZlQmFja3RyYWNlKTsKKyAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgIDw8ICJFcnJvciBtZXNzYWdlOiAiIDw8IHJlc3BvbnNlLmVycm9yX21lc3NhZ2U7Cit9CisKK1RFU1QodG9tYnN0b25lZCwgaW50ZXJjZXB0X2JhZF9waWQpIHsKKyAgY29uc3QgcGlkX3QgZmFrZV9waWQgPSAtMTsKKyAgdW5pcXVlX2ZkIGludGVyY2VwdF9mZCwgb3V0cHV0X2ZkOworICBJbnRlcmNlcHRSZXNwb25zZSByZXNwb25zZSA9IHt9OworICB0b21ic3RvbmVkX2ludGVyY2VwdChmYWtlX3BpZCwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnJlc3BvbnNlLCBrRGVidWdnZXJkTmF0aXZlQmFja3RyYWNlKTsKKyAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a0ZhaWxlZCwgcmVzcG9uc2Uuc3RhdHVzKQorICAgICAgPDwgIkVycm9yIG1lc3NhZ2U6ICIgPDwgcmVzcG9uc2UuZXJyb3JfbWVzc2FnZTsKKyAgQVNTRVJUX01BVENIKHJlc3BvbnNlLmVycm9yX21lc3NhZ2UsICJiYWQgcGlkIik7Cit9CisKK1RFU1QodG9tYnN0b25lZCwgaW50ZXJjZXB0X2JhZF9kdW1wX3R5cGVzKSB7CisgIGNvbnN0IHBpZF90IGZha2VfcGlkID0gMScyMzQnNTY3OworICB1bmlxdWVfZmQgaW50ZXJjZXB0X2ZkLCBvdXRwdXRfZmQ7CisgIEludGVyY2VwdFJlc3BvbnNlIHJlc3BvbnNlID0ge307CisgIHRvbWJzdG9uZWRfaW50ZXJjZXB0KGZha2VfcGlkLCAmaW50ZXJjZXB0X2ZkLCAmb3V0cHV0X2ZkLCAmcmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PERlYnVnZ2VyZER1bXBUeXBlPigyMCkpOworICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprRmFpbGVkLCByZXNwb25zZS5zdGF0dXMpCisgICAgICA8PCAiRXJyb3IgbWVzc2FnZTogIiA8PCByZXNwb25zZS5lcnJvcl9tZXNzYWdlOworICBBU1NFUlRfTUFUQ0gocmVzcG9uc2UuZXJyb3JfbWVzc2FnZSwgImJhZCBkdW1wIHR5cGUgXFxbdW5rbm93blxcXSIpOworCisgIHRvbWJzdG9uZWRfaW50ZXJjZXB0KGZha2VfcGlkLCAmaW50ZXJjZXB0X2ZkLCAmb3V0cHV0X2ZkLCAmcmVzcG9uc2UsIGtEZWJ1Z2dlcmRBbnlJbnRlcmNlcHQpOworICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprRmFpbGVkLCByZXNwb25zZS5zdGF0dXMpCisgICAgICA8PCAiRXJyb3IgbWVzc2FnZTogIiA8PCByZXNwb25zZS5lcnJvcl9tZXNzYWdlOworICBBU1NFUlRfTUFUQ0gocmVzcG9uc2UuZXJyb3JfbWVzc2FnZSwgImJhZCBkdW1wIHR5cGUga0RlYnVnZ2VyZEFueUludGVyY2VwdCIpOworCisgIHRvbWJzdG9uZWRfaW50ZXJjZXB0KGZha2VfcGlkLCAmaW50ZXJjZXB0X2ZkLCAmb3V0cHV0X2ZkLCAmcmVzcG9uc2UsIGtEZWJ1Z2dlcmRUb21ic3RvbmVQcm90byk7CisgIEFTU0VSVF9FUShJbnRlcmNlcHRTdGF0dXM6OmtGYWlsZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgIDw8ICJFcnJvciBtZXNzYWdlOiAiIDw8IHJlc3BvbnNlLmVycm9yX21lc3NhZ2U7CisgIEFTU0VSVF9NQVRDSChyZXNwb25zZS5lcnJvcl9tZXNzYWdlLCAiYmFkIGR1bXAgdHlwZSBrRGVidWdnZXJkVG9tYnN0b25lUHJvdG8iKTsKK30KKworVEVTVCh0b21ic3RvbmVkLCBpbnRlcmNlcHRfYWxyZWFkeV9yZWdpc3RlcmVkKSB7CisgIGNvbnN0IHBpZF90IGZha2VfcGlkID0gMScyMzQnNTY3OworICB1bmlxdWVfZmQgaW50ZXJjZXB0X2ZkMSwgb3V0cHV0X2ZkMTsKKyAgSW50ZXJjZXB0UmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKKyAgdG9tYnN0b25lZF9pbnRlcmNlcHQoZmFrZV9waWQsICZpbnRlcmNlcHRfZmQxLCAmb3V0cHV0X2ZkMSwgJnJlc3BvbnNlLCBrRGVidWdnZXJkVG9tYnN0b25lKTsKKyAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgIDw8ICJFcnJvciBtZXNzYWdlOiAiIDw8IHJlc3BvbnNlLmVycm9yX21lc3NhZ2U7CisKKyAgdW5pcXVlX2ZkIGludGVyY2VwdF9mZDIsIG91dHB1dF9mZDI7CisgIHRvbWJzdG9uZWRfaW50ZXJjZXB0KGZha2VfcGlkLCAmaW50ZXJjZXB0X2ZkMiwgJm91dHB1dF9mZDIsICZyZXNwb25zZSwga0RlYnVnZ2VyZFRvbWJzdG9uZSk7CisgIEFTU0VSVF9FUShJbnRlcmNlcHRTdGF0dXM6OmtGYWlsZWRBbHJlYWR5UmVnaXN0ZXJlZCwgcmVzcG9uc2Uuc3RhdHVzKQorICAgICAgPDwgIkVycm9yIG1lc3NhZ2U6ICIgPDwgcmVzcG9uc2UuZXJyb3JfbWVzc2FnZTsKKyAgQVNTRVJUX01BVENIKHJlc3BvbnNlLmVycm9yX21lc3NhZ2UsICJhbHJlYWR5IHJlZ2lzdGVyZWQsIHR5cGUga0RlYnVnZ2VyZFRvbWJzdG9uZSIpOworfQorCitURVNUKHRvbWJzdG9uZWQsIGludGVyY2VwdF90b21ic3RvbmVfcHJvdG9fbWF0Y2hlZF90b190b21ic3RvbmUpIHsKKyAgY29uc3QgcGlkX3QgZmFrZV9waWQgPSAxJzIzNCc1Njc7CisKKyAgdW5pcXVlX2ZkIGludGVyY2VwdF9mZCwgb3V0cHV0X2ZkOworICBJbnRlcmNlcHRSZXNwb25zZSByZXNwb25zZSA9IHt9OworICB0b21ic3RvbmVkX2ludGVyY2VwdChmYWtlX3BpZCwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnJlc3BvbnNlLCBrRGVidWdnZXJkVG9tYnN0b25lKTsKKyAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgIDw8ICJFcnJvciBtZXNzYWdlOiAiIDw8IHJlc3BvbnNlLmVycm9yX21lc3NhZ2U7CisKKyAgY29uc3QgY2hhciBkYXRhW10gPSAidG9tYnN0b25lX3Byb3RvIjsKKyAgdW5pcXVlX2ZkIHRvbWJzdG9uZWRfc29ja2V0LCBpbnB1dF9mZDsKKyAgQVNTRVJUX1RSVUUoCisgICAgICB0b21ic3RvbmVkX2Nvbm5lY3QoZmFrZV9waWQsICZ0b21ic3RvbmVkX3NvY2tldCwgJmlucHV0X2ZkLCBrRGVidWdnZXJkVG9tYnN0b25lUHJvdG8pKTsKKyAgQVNTRVJUX1RSVUUoYW5kcm9pZDo6YmFzZTo6V3JpdGVGdWxseShpbnB1dF9mZC5nZXQoKSwgZGF0YSwgc2l6ZW9mKGRhdGEpKSk7CisgIHRvbWJzdG9uZWRfbm90aWZ5X2NvbXBsZXRpb24odG9tYnN0b25lZF9zb2NrZXQuZ2V0KCkpOworCisgIGNoYXIgb3V0YnVmW3NpemVvZihkYXRhKV07CisgIEFTU0VSVF9UUlVFKGFuZHJvaWQ6OmJhc2U6OlJlYWRGdWxseShvdXRwdXRfZmQuZ2V0KCksIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZikpKTsKKyAgQVNTRVJUX1NUUkVRKCJ0b21ic3RvbmVfcHJvdG8iLCBvdXRidWYpOwogfQogCiBURVNUKHRvbWJzdG9uZWQsIGludGVyY2VwdF9hbnkpIHsKICAgY29uc3QgcGlkX3QgZmFrZV9waWQgPSAxJzIzNCc1Njc7CiAKICAgdW5pcXVlX2ZkIGludGVyY2VwdF9mZCwgb3V0cHV0X2ZkOwotICBJbnRlcmNlcHRTdGF0dXMgc3RhdHVzOwotICB0b21ic3RvbmVkX2ludGVyY2VwdChmYWtlX3BpZCwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnN0YXR1cywga0RlYnVnZ2VyZE5hdGl2ZUJhY2t0cmFjZSk7Ci0gIEFTU0VSVF9FUShJbnRlcmNlcHRTdGF0dXM6OmtSZWdpc3RlcmVkLCBzdGF0dXMpOworICBJbnRlcmNlcHRSZXNwb25zZSByZXNwb25zZSA9IHt9OworICB0b21ic3RvbmVkX2ludGVyY2VwdChmYWtlX3BpZCwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnJlc3BvbnNlLCBrRGVidWdnZXJkTmF0aXZlQmFja3RyYWNlKTsKKyAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgIDw8ICJFcnJvciBtZXNzYWdlOiAiIDw8IHJlc3BvbnNlLmVycm9yX21lc3NhZ2U7CiAKICAgY29uc3QgY2hhciBhbnlbXSA9ICJhbnkiOwogICB1bmlxdWVfZmQgdG9tYnN0b25lZF9zb2NrZXQsIGlucHV0X2ZkOwpAQCAtMTkwMCw2ICsxOTczLDc3IEBACiAgIEFTU0VSVF9TVFJFUSgiYW55Iiwgb3V0YnVmKTsKIH0KIAorVEVTVCh0b21ic3RvbmVkLCBpbnRlcmNlcHRfYW55X2ZhaWxlZF93aXRoX211bHRpcGxlX2ludGVyY2VwdHMpIHsKKyAgY29uc3QgcGlkX3QgZmFrZV9waWQgPSAxJzIzNCc1Njc7CisKKyAgSW50ZXJjZXB0UmVzcG9uc2UgcmVzcG9uc2UgPSB7fTsKKyAgdW5pcXVlX2ZkIGludGVyY2VwdF9mZDEsIG91dHB1dF9mZDE7CisgIHRvbWJzdG9uZWRfaW50ZXJjZXB0KGZha2VfcGlkLCAmaW50ZXJjZXB0X2ZkMSwgJm91dHB1dF9mZDEsICZyZXNwb25zZSwga0RlYnVnZ2VyZE5hdGl2ZUJhY2t0cmFjZSk7CisgIEFTU0VSVF9FUShJbnRlcmNlcHRTdGF0dXM6OmtSZWdpc3RlcmVkLCByZXNwb25zZS5zdGF0dXMpCisgICAgICA8PCAiRXJyb3IgbWVzc2FnZTogIiA8PCByZXNwb25zZS5lcnJvcl9tZXNzYWdlOworCisgIHVuaXF1ZV9mZCBpbnRlcmNlcHRfZmQyLCBvdXRwdXRfZmQyOworICB0b21ic3RvbmVkX2ludGVyY2VwdChmYWtlX3BpZCwgJmludGVyY2VwdF9mZDIsICZvdXRwdXRfZmQyLCAmcmVzcG9uc2UsIGtEZWJ1Z2dlcmRKYXZhQmFja3RyYWNlKTsKKyAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgIDw8ICJFcnJvciBtZXNzYWdlOiAiIDw8IHJlc3BvbnNlLmVycm9yX21lc3NhZ2U7CisKKyAgdW5pcXVlX2ZkIHRvbWJzdG9uZWRfc29ja2V0LCBpbnB1dF9mZDsKKyAgQVNTRVJUX0ZBTFNFKHRvbWJzdG9uZWRfY29ubmVjdChmYWtlX3BpZCwgJnRvbWJzdG9uZWRfc29ja2V0LCAmaW5wdXRfZmQsIGtEZWJ1Z2dlcmRBbnlJbnRlcmNlcHQpKTsKK30KKworVEVTVCh0b21ic3RvbmVkLCBpbnRlcmNlcHRfbXVsdGlwbGVfdmVyaWZ5X2ludGVyY2VwdCkgeworICAvLyBOZWVkIHRvIHVzZSBvdXIgcGlkIGZvciBqYXZhIHNpbmNlIHRoYXQgd2lsbCB2ZXJpZnkgdGhlIHBpZC4KKyAgY29uc3QgcGlkX3QgZmFrZV9waWQgPSBnZXRwaWQoKTsKKworICBJbnRlcmNlcHRSZXNwb25zZSByZXNwb25zZSA9IHt9OworICB1bmlxdWVfZmQgaW50ZXJjZXB0X2ZkMSwgb3V0cHV0X2ZkMTsKKyAgdG9tYnN0b25lZF9pbnRlcmNlcHQoZmFrZV9waWQsICZpbnRlcmNlcHRfZmQxLCAmb3V0cHV0X2ZkMSwgJnJlc3BvbnNlLCBrRGVidWdnZXJkTmF0aXZlQmFja3RyYWNlKTsKKyAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgIDw8ICJFcnJvciBtZXNzYWdlOiAiIDw8IHJlc3BvbnNlLmVycm9yX21lc3NhZ2U7CisKKyAgdW5pcXVlX2ZkIGludGVyY2VwdF9mZDIsIG91dHB1dF9mZDI7CisgIHRvbWJzdG9uZWRfaW50ZXJjZXB0KGZha2VfcGlkLCAmaW50ZXJjZXB0X2ZkMiwgJm91dHB1dF9mZDIsICZyZXNwb25zZSwga0RlYnVnZ2VyZEphdmFCYWNrdHJhY2UpOworICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprUmVnaXN0ZXJlZCwgcmVzcG9uc2Uuc3RhdHVzKQorICAgICAgPDwgIkVycm9yIG1lc3NhZ2U6ICIgPDwgcmVzcG9uc2UuZXJyb3JfbWVzc2FnZTsKKworICB1bmlxdWVfZmQgaW50ZXJjZXB0X2ZkMywgb3V0cHV0X2ZkMzsKKyAgdG9tYnN0b25lZF9pbnRlcmNlcHQoZmFrZV9waWQsICZpbnRlcmNlcHRfZmQzLCAmb3V0cHV0X2ZkMywgJnJlc3BvbnNlLCBrRGVidWdnZXJkVG9tYnN0b25lKTsKKyAgQVNTRVJUX0VRKEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQsIHJlc3BvbnNlLnN0YXR1cykKKyAgICAgIDw8ICJFcnJvciBtZXNzYWdlOiAiIDw8IHJlc3BvbnNlLmVycm9yX21lc3NhZ2U7CisKKyAgY29uc3QgY2hhciBuYXRpdmVfZGF0YVtdID0gIm5hdGl2ZSI7CisgIHVuaXF1ZV9mZCB0b21ic3RvbmVkX3NvY2tldDEsIGlucHV0X2ZkMTsKKyAgQVNTRVJUX1RSVUUoCisgICAgICB0b21ic3RvbmVkX2Nvbm5lY3QoZmFrZV9waWQsICZ0b21ic3RvbmVkX3NvY2tldDEsICZpbnB1dF9mZDEsIGtEZWJ1Z2dlcmROYXRpdmVCYWNrdHJhY2UpKTsKKyAgQVNTRVJUX1RSVUUoYW5kcm9pZDo6YmFzZTo6V3JpdGVGdWxseShpbnB1dF9mZDEuZ2V0KCksIG5hdGl2ZV9kYXRhLCBzaXplb2YobmF0aXZlX2RhdGEpKSk7CisgIHRvbWJzdG9uZWRfbm90aWZ5X2NvbXBsZXRpb24odG9tYnN0b25lZF9zb2NrZXQxLmdldCgpKTsKKworICBjaGFyIG5hdGl2ZV9vdXRidWZbc2l6ZW9mKG5hdGl2ZV9kYXRhKV07CisgIEFTU0VSVF9UUlVFKGFuZHJvaWQ6OmJhc2U6OlJlYWRGdWxseShvdXRwdXRfZmQxLmdldCgpLCBuYXRpdmVfb3V0YnVmLCBzaXplb2YobmF0aXZlX291dGJ1ZikpKTsKKyAgQVNTRVJUX1NUUkVRKCJuYXRpdmUiLCBuYXRpdmVfb3V0YnVmKTsKKworICBjb25zdCBjaGFyIGphdmFfZGF0YVtdID0gImphdmEiOworICB1bmlxdWVfZmQgdG9tYnN0b25lZF9zb2NrZXQyLCBpbnB1dF9mZDI7CisgIEFTU0VSVF9UUlVFKAorICAgICAgdG9tYnN0b25lZF9jb25uZWN0KGZha2VfcGlkLCAmdG9tYnN0b25lZF9zb2NrZXQyLCAmaW5wdXRfZmQyLCBrRGVidWdnZXJkSmF2YUJhY2t0cmFjZSkpOworICBBU1NFUlRfVFJVRShhbmRyb2lkOjpiYXNlOjpXcml0ZUZ1bGx5KGlucHV0X2ZkMi5nZXQoKSwgamF2YV9kYXRhLCBzaXplb2YoamF2YV9kYXRhKSkpOworICB0b21ic3RvbmVkX25vdGlmeV9jb21wbGV0aW9uKHRvbWJzdG9uZWRfc29ja2V0Mi5nZXQoKSk7CisKKyAgY2hhciBqYXZhX291dGJ1ZltzaXplb2YoamF2YV9kYXRhKV07CisgIEFTU0VSVF9UUlVFKGFuZHJvaWQ6OmJhc2U6OlJlYWRGdWxseShvdXRwdXRfZmQyLmdldCgpLCBqYXZhX291dGJ1Ziwgc2l6ZW9mKGphdmFfb3V0YnVmKSkpOworICBBU1NFUlRfU1RSRVEoImphdmEiLCBqYXZhX291dGJ1Zik7CisKKyAgY29uc3QgY2hhciB0b21iX2RhdGFbXSA9ICJ0b21ic3RvbmUiOworICB1bmlxdWVfZmQgdG9tYnN0b25lZF9zb2NrZXQzLCBpbnB1dF9mZDM7CisgIEFTU0VSVF9UUlVFKHRvbWJzdG9uZWRfY29ubmVjdChmYWtlX3BpZCwgJnRvbWJzdG9uZWRfc29ja2V0MywgJmlucHV0X2ZkMywga0RlYnVnZ2VyZFRvbWJzdG9uZSkpOworICBBU1NFUlRfVFJVRShhbmRyb2lkOjpiYXNlOjpXcml0ZUZ1bGx5KGlucHV0X2ZkMy5nZXQoKSwgdG9tYl9kYXRhLCBzaXplb2YodG9tYl9kYXRhKSkpOworICB0b21ic3RvbmVkX25vdGlmeV9jb21wbGV0aW9uKHRvbWJzdG9uZWRfc29ja2V0My5nZXQoKSk7CisKKyAgY2hhciB0b21iX291dGJ1ZltzaXplb2YodG9tYl9kYXRhKV07CisgIEFTU0VSVF9UUlVFKGFuZHJvaWQ6OmJhc2U6OlJlYWRGdWxseShvdXRwdXRfZmQzLmdldCgpLCB0b21iX291dGJ1Ziwgc2l6ZW9mKHRvbWJfb3V0YnVmKSkpOworICBBU1NFUlRfU1RSRVEoInRvbWJzdG9uZSIsIHRvbWJfb3V0YnVmKTsKK30KKwogVEVTVCh0b21ic3RvbmVkLCBpbnRlcmNlcHRsZXNzX2JhY2t0cmFjZSkgewogICAvLyBHZW5lcmF0ZSA1MCBiYWNrdHJhY2VzLCBhbmQgdGhlbiBjaGVjayB0byBzZWUgdGhhdCB3ZSBoYXZlbid0IGNyZWF0ZWQgNTAgbmV3IHRvbWJzdG9uZXMuCiAgIGF1dG8gZ2V0X3RvbWJzdG9uZV90aW1lc3RhbXBzID0gW10oKSAtPiBzdGQ6Om1hcDxpbnQsIHRpbWVfdD4gewpAQCAtMjEzMiwxMCArMjI3NiwxMSBAQAogVEVTVCh0b21ic3RvbmVkLCBwcm90b19pbnRlcmNlcHQpIHsKICAgY29uc3QgcGlkX3Qgc2VsZiA9IGdldHBpZCgpOwogICB1bmlxdWVfZmQgaW50ZXJjZXB0X2ZkLCBvdXRwdXRfZmQ7Ci0gIEludGVyY2VwdFN0YXR1cyBzdGF0dXM7CiAKLSAgdG9tYnN0b25lZF9pbnRlcmNlcHQoc2VsZiwgJmludGVyY2VwdF9mZCwgJm91dHB1dF9mZCwgJnN0YXR1cywga0RlYnVnZ2VyZFRvbWJzdG9uZSk7Ci0gIEFTU0VSVF9FUShJbnRlcmNlcHRTdGF0dXM6OmtSZWdpc3RlcmVkLCBzdGF0dXMpOworICBJbnRlcmNlcHRSZXNwb25zZSByZXNwb25zZSA9IHt9OworICB0b21ic3RvbmVkX2ludGVyY2VwdChzZWxmLCAmaW50ZXJjZXB0X2ZkLCAmb3V0cHV0X2ZkLCAmcmVzcG9uc2UsIGtEZWJ1Z2dlcmRUb21ic3RvbmUpOworICBBU1NFUlRfRVEoSW50ZXJjZXB0U3RhdHVzOjprUmVnaXN0ZXJlZCwgcmVzcG9uc2Uuc3RhdHVzKQorICAgICAgPDwgIkVycm9yIG1lc3NhZ2U6ICIgPDwgcmVzcG9uc2UuZXJyb3JfbWVzc2FnZTsKIAogICB1bmlxdWVfZmQgdG9tYnN0b25lZF9zb2NrZXQsIHRleHRfZmQsIHByb3RvX2ZkOwogICBBU1NFUlRfVFJVRSgKZGlmZiAtLWdpdCBhL2RlYnVnZ2VyZC9wcm90b2NvbC5oIGIvZGVidWdnZXJkL3Byb3RvY29sLmgKaW5kZXggYjYwY2Y1Yi4uMjEyZDZkYyAxMDA2NDQKLS0tIGEvZGVidWdnZXJkL3Byb3RvY29sLmgKKysrIGIvZGVidWdnZXJkL3Byb3RvY29sLmgKQEAgLTY1LDcgKzY1LDcgQEAKIH07CiAKIGVudW0gY2xhc3MgSW50ZXJjZXB0U3RhdHVzIDogdWludDhfdCB7Ci0gIC8vIFJldHVybmVkIHdoZW4gYW4gaW50ZXJjZXB0IG9mIGEgZGlmZmVyZW50IHR5cGUgaGFzIGFscmVhZHkgYmVlbgorICAvLyBSZXR1cm5lZCB3aGVuIGFuIGludGVyY2VwdCBvZiB0aGUgc2FtZSB0eXBlIGhhcyBhbHJlYWR5IGJlZW4KICAgLy8gcmVnaXN0ZXJlZCAoYW5kIGlzIGFjdGl2ZSkgZm9yIGEgZ2l2ZW4gUElELgogICBrRmFpbGVkQWxyZWFkeVJlZ2lzdGVyZWQsCiAgIC8vIFJldHVybmVkIGluIGFsbCBvdGhlciBmYWlsdXJlIGNhc2VzLgpkaWZmIC0tZ2l0IGEvZGVidWdnZXJkL3RvbWJzdG9uZWQvaW50ZXJjZXB0X21hbmFnZXIuY3BwIGIvZGVidWdnZXJkL3RvbWJzdG9uZWQvaW50ZXJjZXB0X21hbmFnZXIuY3BwCmluZGV4IDYxM2U2ZjUuLmFjN2I0MzEgMTAwNjQ0Ci0tLSBhL2RlYnVnZ2VyZC90b21ic3RvbmVkL2ludGVyY2VwdF9tYW5hZ2VyLmNwcAorKysgYi9kZWJ1Z2dlcmQvdG9tYnN0b25lZC9pbnRlcmNlcHRfbWFuYWdlci5jcHAKQEAgLTE5LDcgKzE5LDEwIEBACiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8ZXZlbnQyL2V2ZW50Lmg+CiAjaW5jbHVkZSA8ZXZlbnQyL2xpc3RlbmVyLmg+CkBAIC0zNiw4ICszOSw3IEBACiB1c2luZyBhbmRyb2lkOjpiYXNlOjp1bmlxdWVfZmQ7CiAKIHN0YXRpYyB2b2lkIGludGVyY2VwdF9jbG9zZV9jYihldnV0aWxfc29ja2V0X3Qgc29ja2ZkLCBzaG9ydCBldmVudCwgdm9pZCogYXJnKSB7Ci0gIGF1dG8gaW50ZXJjZXB0ID0gcmVpbnRlcnByZXRfY2FzdDxJbnRlcmNlcHQqPihhcmcpOwotICBJbnRlcmNlcHRNYW5hZ2VyKiBpbnRlcmNlcHRfbWFuYWdlciA9IGludGVyY2VwdC0+aW50ZXJjZXB0X21hbmFnZXI7CisgIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcmNlcHQ+IGludGVyY2VwdChyZWludGVycHJldF9jYXN0PEludGVyY2VwdCo+KGFyZykpOwogCiAgIENIRUNLX0VRKHNvY2tmZCwgaW50ZXJjZXB0LT5zb2NrZmQuZ2V0KCkpOwogCkBAIC00NiwxMzEgKzQ4LDEwOCBAQAogCiAgIC8vIE93bmVyc2hpcCBvZiBpbnRlcmNlcHQgZGlmZmVycyBiYXNlZCBvbiB3aGV0aGVyIHdlJ3ZlIHJlZ2lzdGVyZWQgaXQgd2l0aCBJbnRlcmNlcHRNYW5hZ2VyLgogICBpZiAoIWludGVyY2VwdC0+cmVnaXN0ZXJlZCkgewotICAgIGRlbGV0ZSBpbnRlcmNlcHQ7Ci0gIH0gZWxzZSB7Ci0gICAgYXV0byBpdCA9IGludGVyY2VwdF9tYW5hZ2VyLT5pbnRlcmNlcHRzLmZpbmQoaW50ZXJjZXB0LT5pbnRlcmNlcHRfcGlkKTsKLSAgICBpZiAoaXQgPT0gaW50ZXJjZXB0X21hbmFnZXItPmludGVyY2VwdHMuZW5kKCkpIHsKLSAgICAgIExPRyhGQVRBTCkgPDwgImludGVyY2VwdCBjbG9zZSBjYWxsYmFjayBjYWxsZWQgYWZ0ZXIgaW50ZXJjZXB0IHdhcyBhbHJlYWR5IHJlbW92ZWQ/IjsKLSAgICB9Ci0gICAgaWYgKGl0LT5zZWNvbmQuZ2V0KCkgIT0gaW50ZXJjZXB0KSB7Ci0gICAgICBMT0coRkFUQUwpIDw8ICJpbnRlcmNlcHQgY2xvc2UgY2FsbGJhY2sgaGFzIGRpZmZlcmVudCBJbnRlcmNlcHQgZnJvbSBJbnRlcmNlcHRNYW5hZ2VyPyI7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogcmVhc29uOwotICAgIGlmICgoZXZlbnQgJiBFVl9USU1FT1VUKSAhPSAwKSB7Ci0gICAgICByZWFzb24gPSAiZHVlIHRvIHRpbWVvdXQiOwotICAgIH0gZWxzZSB7Ci0gICAgICByZWFzb24gPSAiZHVlIHRvIGlucHV0IjsKLSAgICB9Ci0KLSAgICBMT0coSU5GTykgPDwgImludGVyY2VwdCBmb3IgcGlkICIgPDwgaW50ZXJjZXB0LT5pbnRlcmNlcHRfcGlkIDw8ICIgYW5kIHR5cGUgIgotICAgICAgICAgICAgICA8PCBpbnRlcmNlcHQtPmR1bXBfdHlwZSA8PCAiIHRlcm1pbmF0ZWQ6ICIgPDwgcmVhc29uOwotICAgIGludGVyY2VwdF9tYW5hZ2VyLT5pbnRlcmNlcHRzLmVyYXNlKGl0KTsKKyAgICBMT0coV0FSTklORykgPDwgImludGVyY2VwdCBmb3IgcGlkICIgPDwgaW50ZXJjZXB0LT5waWQgPDwgIiBhbmQgdHlwZSAiIDw8IGludGVyY2VwdC0+ZHVtcF90eXBlCisgICAgICAgICAgICAgICAgIDw8ICIgY2xvc2VkIGJlZm9yZSBiZWluZyByZWdpc3RlcmVkLiI7CisgICAgcmV0dXJuOwogICB9CisKKyAgY29uc3QgY2hhciogcmVhc29uID0gKGV2ZW50ICYgRVZfVElNRU9VVCkgPyAiZHVlIHRvIHRpbWVvdXQiIDogImR1ZSB0byBpbnB1dCI7CisgIExPRyhJTkZPKSA8PCAiaW50ZXJjZXB0IGZvciBwaWQgIiA8PCBpbnRlcmNlcHQtPnBpZCA8PCAiIGFuZCB0eXBlICIgPDwgaW50ZXJjZXB0LT5kdW1wX3R5cGUKKyAgICAgICAgICAgIDw8ICIgdGVybWluYXRlZDogIiA8PCByZWFzb247CiB9CiAKLXN0YXRpYyBib29sIGlzX2ludGVyY2VwdF9yZXF1ZXN0X3ZhbGlkKGNvbnN0IEludGVyY2VwdFJlcXVlc3QmIHJlcXVlc3QpIHsKLSAgaWYgKHJlcXVlc3QucGlkIDw9IDAgfHwgcmVxdWVzdC5waWQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHBpZF90Pjo6bWF4KCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Cit2b2lkIEludGVyY2VwdE1hbmFnZXI6OlVucmVnaXN0ZXIoSW50ZXJjZXB0KiBpbnRlcmNlcHQpIHsKKyAgQ0hFQ0soaW50ZXJjZXB0LT5yZWdpc3RlcmVkKTsKKyAgYXV0byBwaWRfZW50cnkgPSBpbnRlcmNlcHRzLmZpbmQoaW50ZXJjZXB0LT5waWQpOworICBpZiAocGlkX2VudHJ5ID09IGludGVyY2VwdHMuZW5kKCkpIHsKKyAgICBMT0coRkFUQUwpIDw8ICJObyBpbnRlcmNlcHRzIGZvdW5kIGZvciBwaWQgIiA8PCBpbnRlcmNlcHQtPnBpZDsKKyAgfQorICBhdXRvJiBkdW1wX3R5cGVfaGFzaCA9IHBpZF9lbnRyeS0+c2Vjb25kOworICBhdXRvIGR1bXBfdHlwZV9lbnRyeSA9IGR1bXBfdHlwZV9oYXNoLmZpbmQoaW50ZXJjZXB0LT5kdW1wX3R5cGUpOworICBpZiAoZHVtcF90eXBlX2VudHJ5ID09IGR1bXBfdHlwZV9oYXNoLmVuZCgpKSB7CisgICAgTE9HKEZBVEFMKSA8PCAiVW5rbm93biBpbnRlcmNlcHQgIiA8PCBpbnRlcmNlcHQtPnBpZCA8PCAiICIgPDwgaW50ZXJjZXB0LT5kdW1wX3R5cGU7CisgIH0KKyAgaWYgKGludGVyY2VwdCAhPSBkdW1wX3R5cGVfZW50cnktPnNlY29uZCkgeworICAgIExPRyhGQVRBTCkgPDwgIk1pc21hdGNoIHBvaW50ZXIgdHJ5aW5nIHRvIHVucmVnaXN0ZXIgaW50ZXJjZXB0ICIgPDwgaW50ZXJjZXB0LT5waWQgPDwgIiAiCisgICAgICAgICAgICAgICA8PCBpbnRlcmNlcHQtPmR1bXBfdHlwZTsKICAgfQogCi0gIGlmIChyZXF1ZXN0LmR1bXBfdHlwZSA8IDAgfHwgcmVxdWVzdC5kdW1wX3R5cGUgPiBrRGVidWdnZXJkSmF2YUJhY2t0cmFjZSkgewotICAgIHJldHVybiBmYWxzZTsKKyAgZHVtcF90eXBlX2hhc2guZXJhc2UoZHVtcF90eXBlX2VudHJ5KTsKKyAgaWYgKGR1bXBfdHlwZV9oYXNoLmVtcHR5KCkpIHsKKyAgICBpbnRlcmNlcHRzLmVyYXNlKHBpZF9lbnRyeSk7CiAgIH0KLQotICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZXJjZXB0X3JlcXVlc3RfY2IoZXZ1dGlsX3NvY2tldF90IHNvY2tmZCwgc2hvcnQgZXYsIHZvaWQqIGFyZykgewotICBhdXRvIGludGVyY2VwdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SW50ZXJjZXB0Kj4oYXJnKTsKKyAgc3RkOjp1bmlxdWVfcHRyPEludGVyY2VwdD4gaW50ZXJjZXB0KHJlaW50ZXJwcmV0X2Nhc3Q8SW50ZXJjZXB0Kj4oYXJnKSk7CiAgIEludGVyY2VwdE1hbmFnZXIqIGludGVyY2VwdF9tYW5hZ2VyID0gaW50ZXJjZXB0LT5pbnRlcmNlcHRfbWFuYWdlcjsKIAogICBDSEVDS19FUShzb2NrZmQsIGludGVyY2VwdC0+c29ja2ZkLmdldCgpKTsKIAogICBpZiAoKGV2ICYgRVZfVElNRU9VVCkgIT0gMCkgewogICAgIExPRyhXQVJOSU5HKSA8PCAidG9tYnN0b25lZCBkaWRuJ3QgcmVjZWl2ZSBJbnRlcmNlcHRSZXF1ZXN0IGJlZm9yZSB0aW1lb3V0IjsKLSAgICBnb3RvIGZhaWw7CisgICAgcmV0dXJuOwogICB9IGVsc2UgaWYgKChldiAmIEVWX1JFQUQpID09IDApIHsKICAgICBMT0coV0FSTklORykgPDwgInRvbWJzdG9uZWQgcmVjZWl2ZWQgdW5leHBlY3RlZCBldmVudCBvbiBpbnRlcmNlcHQgc29ja2V0IjsKLSAgICBnb3RvIGZhaWw7CisgICAgcmV0dXJuOwogICB9CiAKLSAgewotICAgIHVuaXF1ZV9mZCByY3ZfZmQ7Ci0gICAgSW50ZXJjZXB0UmVxdWVzdCBpbnRlcmNlcHRfcmVxdWVzdDsKLSAgICBzc2l6ZV90IHJlc3VsdCA9Ci0gICAgICAgIFJlY2VpdmVGaWxlRGVzY3JpcHRvcnMoc29ja2ZkLCAmaW50ZXJjZXB0X3JlcXVlc3QsIHNpemVvZihpbnRlcmNlcHRfcmVxdWVzdCksICZyY3ZfZmQpOworICB1bmlxdWVfZmQgcmN2X2ZkOworICBJbnRlcmNlcHRSZXF1ZXN0IGludGVyY2VwdF9yZXF1ZXN0OworICBzc2l6ZV90IHJlc3VsdCA9CisgICAgICBSZWNlaXZlRmlsZURlc2NyaXB0b3JzKHNvY2tmZCwgJmludGVyY2VwdF9yZXF1ZXN0LCBzaXplb2YoaW50ZXJjZXB0X3JlcXVlc3QpLCAmcmN2X2ZkKTsKIAotICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKLSAgICAgIFBMT0coV0FSTklORykgPDwgImZhaWxlZCB0byByZWFkIGZyb20gaW50ZXJjZXB0IHNvY2tldCI7Ci0gICAgICBnb3RvIGZhaWw7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgIT0gc2l6ZW9mKGludGVyY2VwdF9yZXF1ZXN0KSkgewotICAgICAgTE9HKFdBUk5JTkcpIDw8ICJpbnRlcmNlcHQgc29ja2V0IHJlY2VpdmVkIHNob3J0IHJlYWQgb2YgbGVuZ3RoICIgPDwgcmVzdWx0IDw8ICIgKGV4cGVjdGVkICIKLSAgICAgICAgICAgICAgICAgICA8PCBzaXplb2YoaW50ZXJjZXB0X3JlcXVlc3QpIDw8ICIpIjsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICAvLyBNb3ZlIHRoZSByZWNlaXZlZCBGRCB0byB0aGUgdXBwZXIgaGFsZiwgaW4gb3JkZXIgdG8gbW9yZSBlYXNpbHkgbm90aWNlIEZEIGxlYWtzLgotICAgIGludCBtb3ZlZF9mZCA9IGZjbnRsKHJjdl9mZC5nZXQoKSwgRl9EVVBGRCwgNTEyKTsKLSAgICBpZiAobW92ZWRfZmQgPT0gLTEpIHsKLSAgICAgIExPRyhXQVJOSU5HKSA8PCAiZmFpbGVkIHRvIG1vdmUgcmVjZWl2ZWQgZmQgKCIgPDwgcmN2X2ZkLmdldCgpIDw8ICIpIjsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgcmN2X2ZkLnJlc2V0KG1vdmVkX2ZkKTsKLQotICAgIC8vIFdlIHRydXN0IHRoZSBvdGhlciBzaWRlLCBzbyBvbmx5IGRvIG1pbmltYWwgdmFsaWRpdHkgY2hlY2tpbmcuCi0gICAgaWYgKCFpc19pbnRlcmNlcHRfcmVxdWVzdF92YWxpZChpbnRlcmNlcHRfcmVxdWVzdCkpIHsKLSAgICAgIEludGVyY2VwdFJlc3BvbnNlIHJlc3BvbnNlID0ge307Ci0gICAgICByZXNwb25zZS5zdGF0dXMgPSBJbnRlcmNlcHRTdGF0dXM6OmtGYWlsZWQ7Ci0gICAgICBzbnByaW50ZihyZXNwb25zZS5lcnJvcl9tZXNzYWdlLCBzaXplb2YocmVzcG9uc2UuZXJyb3JfbWVzc2FnZSksICJpbnZhbGlkIGludGVyY2VwdCByZXF1ZXN0Iik7Ci0gICAgICBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGUoc29ja2ZkLCAmcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpKTsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICBpbnRlcmNlcHQtPmludGVyY2VwdF9waWQgPSBpbnRlcmNlcHRfcmVxdWVzdC5waWQ7Ci0gICAgaW50ZXJjZXB0LT5kdW1wX3R5cGUgPSBpbnRlcmNlcHRfcmVxdWVzdC5kdW1wX3R5cGU7Ci0KLSAgICAvLyBDaGVjayBpZiBpdCdzIGFscmVhZHkgcmVnaXN0ZXJlZC4KLSAgICBpZiAoaW50ZXJjZXB0X21hbmFnZXItPmludGVyY2VwdHMuY291bnQoaW50ZXJjZXB0X3JlcXVlc3QucGlkKSA+IDApIHsKLSAgICAgIEludGVyY2VwdFJlc3BvbnNlIHJlc3BvbnNlID0ge307Ci0gICAgICByZXNwb25zZS5zdGF0dXMgPSBJbnRlcmNlcHRTdGF0dXM6OmtGYWlsZWRBbHJlYWR5UmVnaXN0ZXJlZDsKLSAgICAgIHNucHJpbnRmKHJlc3BvbnNlLmVycm9yX21lc3NhZ2UsIHNpemVvZihyZXNwb25zZS5lcnJvcl9tZXNzYWdlKSwKLSAgICAgICAgICAgICAgICJwaWQgJSIgUFJJZDMyICIgYWxyZWFkeSBpbnRlcmNlcHRlZCwgdHlwZSAlZCIsIGludGVyY2VwdF9yZXF1ZXN0LnBpZCwKLSAgICAgICAgICAgICAgIGludGVyY2VwdF9yZXF1ZXN0LmR1bXBfdHlwZSk7Ci0gICAgICBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGUoc29ja2ZkLCAmcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpKTsKLSAgICAgIExPRyhXQVJOSU5HKSA8PCByZXNwb25zZS5lcnJvcl9tZXNzYWdlOwotICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIC8vIExldCB0aGUgb3RoZXIgc2lkZSBrbm93IHRoYXQgdGhlIGludGVyY2VwdCBoYXMgYmVlbiByZWdpc3RlcmVkLCBub3cgdGhhdCB3ZSBrbm93IHdlIGNhbid0Ci0gICAgLy8gZmFpbC4gdG9tYnN0b25lZCBpcyBzaW5nbGUgdGhyZWFkZWQsIHNvIHRoaXMgaXNuJ3QgcmFjeS4KLSAgICBJbnRlcmNlcHRSZXNwb25zZSByZXNwb25zZSA9IHt9OwotICAgIHJlc3BvbnNlLnN0YXR1cyA9IEludGVyY2VwdFN0YXR1czo6a1JlZ2lzdGVyZWQ7Ci0gICAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShzb2NrZmQsICZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSkpID09IC0xKSB7Ci0gICAgICBQTE9HKFdBUk5JTkcpIDw8ICJmYWlsZWQgdG8gbm90aWZ5IGludGVyY2VwdG9yIG9mIHJlZ2lzdHJhdGlvbiI7Ci0gICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgaW50ZXJjZXB0LT5vdXRwdXRfZmQgPSBzdGQ6Om1vdmUocmN2X2ZkKTsKLSAgICBpbnRlcmNlcHRfbWFuYWdlci0+aW50ZXJjZXB0c1tpbnRlcmNlcHRfcmVxdWVzdC5waWRdID0gc3RkOjp1bmlxdWVfcHRyPEludGVyY2VwdD4oaW50ZXJjZXB0KTsKLSAgICBpbnRlcmNlcHQtPnJlZ2lzdGVyZWQgPSB0cnVlOwotCi0gICAgTE9HKElORk8pIDw8ICJyZWdpc3RlcmVkIGludGVyY2VwdCBmb3IgcGlkICIgPDwgaW50ZXJjZXB0X3JlcXVlc3QucGlkIDw8ICIgYW5kIHR5cGUgIgotICAgICAgICAgICAgICA8PCBpbnRlcmNlcHRfcmVxdWVzdC5kdW1wX3R5cGU7Ci0KLSAgICAvLyBSZWdpc3RlciBhIGRpZmZlcmVudCByZWFkIGV2ZW50IG9uIHRoZSBzb2NrZXQgc28gdGhhdCB3ZSBjYW4gcmVtb3ZlIGludGVyY2VwdHMgaWYgdGhlIHNvY2tldAotICAgIC8vIGNsb3NlcyAoZS5nLiBpZiBhIHVzZXIgQ1RSTC1DJ3MgdGhlIHByb2Nlc3MgdGhhdCByZXF1ZXN0ZWQgdGhlIGludGVyY2VwdCkuCi0gICAgZXZlbnRfYXNzaWduKGludGVyY2VwdC0+aW50ZXJjZXB0X2V2ZW50LCBpbnRlcmNlcHRfbWFuYWdlci0+YmFzZSwgc29ja2ZkLCBFVl9SRUFEIHwgRVZfVElNRU9VVCwKLSAgICAgICAgICAgICAgICAgaW50ZXJjZXB0X2Nsb3NlX2NiLCBhcmcpOwotCi0gICAgc3RydWN0IHRpbWV2YWwgdGltZW91dCA9IHsudHZfc2VjID0gMTAgKiBhbmRyb2lkOjpiYXNlOjpId1RpbWVvdXRNdWx0aXBsaWVyKCksIC50dl91c2VjID0gMH07Ci0gICAgZXZlbnRfYWRkKGludGVyY2VwdC0+aW50ZXJjZXB0X2V2ZW50LCAmdGltZW91dCk7CisgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICBQTE9HKFdBUk5JTkcpIDw8ICJmYWlsZWQgdG8gcmVhZCBmcm9tIGludGVyY2VwdCBzb2NrZXQiOworICAgIHJldHVybjsKKyAgfQorICBpZiAocmVzdWx0ICE9IHNpemVvZihpbnRlcmNlcHRfcmVxdWVzdCkpIHsKKyAgICBMT0coV0FSTklORykgPDwgImludGVyY2VwdCBzb2NrZXQgcmVjZWl2ZWQgc2hvcnQgcmVhZCBvZiBsZW5ndGggIiA8PCByZXN1bHQgPDwgIiAoZXhwZWN0ZWQgIgorICAgICAgICAgICAgICAgICA8PCBzaXplb2YoaW50ZXJjZXB0X3JlcXVlc3QpIDw8ICIpIjsKKyAgICByZXR1cm47CiAgIH0KIAotICByZXR1cm47CisgIC8vIE1vdmUgdGhlIHJlY2VpdmVkIEZEIHRvIHRoZSB1cHBlciBoYWxmLCBpbiBvcmRlciB0byBtb3JlIGVhc2lseSBub3RpY2UgRkQgbGVha3MuCisgIGludCBtb3ZlZF9mZCA9IGZjbnRsKHJjdl9mZC5nZXQoKSwgRl9EVVBGRCwgNTEyKTsKKyAgaWYgKG1vdmVkX2ZkID09IC0xKSB7CisgICAgTE9HKFdBUk5JTkcpIDw8ICJmYWlsZWQgdG8gbW92ZSByZWNlaXZlZCBmZCAoIiA8PCByY3ZfZmQuZ2V0KCkgPDwgIikiOworICAgIHJldHVybjsKKyAgfQorICByY3ZfZmQucmVzZXQobW92ZWRfZmQpOwogCi1mYWlsOgotICBkZWxldGUgaW50ZXJjZXB0OworICAvLyBTZWUgaWYgd2UgY2FuIHByb3Blcmx5IHJlZ2lzdGVyIHRoZSBpbnRlcmNlcHQuCisgIEludGVyY2VwdFJlc3BvbnNlIHJlc3BvbnNlID0ge307CisgIGlmICghaW50ZXJjZXB0X21hbmFnZXItPkNhblJlZ2lzdGVyKGludGVyY2VwdF9yZXF1ZXN0LCByZXNwb25zZSkpIHsKKyAgICBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGUoc29ja2ZkLCAmcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpKTsKKyAgICBMT0coV0FSTklORykgPDwgcmVzcG9uc2UuZXJyb3JfbWVzc2FnZTsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBMZXQgdGhlIG90aGVyIHNpZGUga25vdyB0aGF0IHRoZSBpbnRlcmNlcHQgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgbm93IHRoYXQgd2Uga25vdyB3ZSBjYW4ndAorICAvLyBmYWlsLiB0b21ic3RvbmVkIGlzIHNpbmdsZSB0aHJlYWRlZCwgc28gdGhpcyBpc24ndCByYWN5LgorICByZXNwb25zZS5zdGF0dXMgPSBJbnRlcmNlcHRTdGF0dXM6OmtSZWdpc3RlcmVkOworICBpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKHdyaXRlKHNvY2tmZCwgJnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKSkgPT0gLTEpIHsKKyAgICBQTE9HKFdBUk5JTkcpIDw8ICJmYWlsZWQgdG8gbm90aWZ5IGludGVyY2VwdG9yIG9mIHJlZ2lzdHJhdGlvbiI7CisgICAgcmV0dXJuOworICB9CisKKyAgaW50ZXJjZXB0LT5waWQgPSBpbnRlcmNlcHRfcmVxdWVzdC5waWQ7CisgIGludGVyY2VwdC0+ZHVtcF90eXBlID0gaW50ZXJjZXB0X3JlcXVlc3QuZHVtcF90eXBlOworICBpbnRlcmNlcHQtPm91dHB1dF9mZCA9IHN0ZDo6bW92ZShyY3ZfZmQpOworICBpbnRlcmNlcHRfbWFuYWdlci0+UmVnaXN0ZXIoaW50ZXJjZXB0LmdldCgpKTsKKworICBMT0coSU5GTykgPDwgInJlZ2lzdGVyZWQgaW50ZXJjZXB0IGZvciBwaWQgIiA8PCBpbnRlcmNlcHRfcmVxdWVzdC5waWQgPDwgIiBhbmQgdHlwZSAiCisgICAgICAgICAgICA8PCBpbnRlcmNlcHRfcmVxdWVzdC5kdW1wX3R5cGU7CisKKyAgLy8gUmVnaXN0ZXIgYSBkaWZmZXJlbnQgcmVhZCBldmVudCBvbiB0aGUgc29ja2V0IHNvIHRoYXQgd2UgY2FuIHJlbW92ZSBpbnRlcmNlcHRzIGlmIHRoZSBzb2NrZXQKKyAgLy8gY2xvc2VzIChlLmcuIGlmIGEgdXNlciBDVFJMLUMncyB0aGUgcHJvY2VzcyB0aGF0IHJlcXVlc3RlZCB0aGUgaW50ZXJjZXB0KS4KKyAgZXZlbnRfYXNzaWduKGludGVyY2VwdC0+aW50ZXJjZXB0X2V2ZW50LCBpbnRlcmNlcHRfbWFuYWdlci0+YmFzZSwgc29ja2ZkLCBFVl9SRUFEIHwgRVZfVElNRU9VVCwKKyAgICAgICAgICAgICAgIGludGVyY2VwdF9jbG9zZV9jYiwgYXJnKTsKKworICAvLyBJZiBubyByZXF1ZXN0IGNvbWVzIGluLCB0aGVuIHRoaXMgd2lsbCBjbG9zZSB0aGUgaW50ZXJjZXB0IGFuZCBmcmVlIHRoZSBwb2ludGVyLgorICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0ID0gey50dl9zZWMgPSAxMCAqIGFuZHJvaWQ6OmJhc2U6Okh3VGltZW91dE11bHRpcGxpZXIoKSwgLnR2X3VzZWMgPSAwfTsKKyAgZXZlbnRfYWRkKGludGVyY2VwdC0+aW50ZXJjZXB0X2V2ZW50LCAmdGltZW91dCk7CisgIGludGVyY2VwdC5yZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGludGVyY2VwdF9hY2NlcHRfY2IoZXZjb25ubGlzdGVuZXIqIGxpc3RlbmVyLCBldnV0aWxfc29ja2V0X3Qgc29ja2ZkLCBzb2NrYWRkciosIGludCwKQEAgLTE4Nyw0MSArMTY2LDk3IEBACiAgIGV2ZW50X2FkZChpbnRlcmNlcHRfZXZlbnQsICZ0aW1lb3V0KTsKIH0KIAorSW50ZXJjZXB0Ojp+SW50ZXJjZXB0KCkgeworICBldmVudF9mcmVlKGludGVyY2VwdF9ldmVudCk7CisgIGlmIChyZWdpc3RlcmVkKSB7CisgICAgQ0hFQ0soaW50ZXJjZXB0X21hbmFnZXIgIT0gbnVsbHB0cik7CisgICAgaW50ZXJjZXB0X21hbmFnZXItPlVucmVnaXN0ZXIodGhpcyk7CisgIH0KK30KKwogSW50ZXJjZXB0TWFuYWdlcjo6SW50ZXJjZXB0TWFuYWdlcihldmVudF9iYXNlKiBiYXNlLCBpbnQgaW50ZXJjZXB0X3NvY2tldCkgOiBiYXNlKGJhc2UpIHsKICAgdGhpcy0+bGlzdGVuZXIgPSBldmNvbm5saXN0ZW5lcl9uZXcoYmFzZSwgaW50ZXJjZXB0X2FjY2VwdF9jYiwgdGhpcywgTEVWX09QVF9DTE9TRV9PTl9GUkVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiYWNrbG9nICovIC0xLCBpbnRlcmNlcHRfc29ja2V0KTsKIH0KIAotYm9vbCBkdW1wX3R5cGVzX2NvbXBhdGlibGUoRGVidWdnZXJkRHVtcFR5cGUgaW50ZXJjZXB0b3IsIERlYnVnZ2VyZER1bXBUeXBlIGR1bXApIHsKLSAgaWYgKGludGVyY2VwdG9yID09IGR1bXApIHsKLSAgICByZXR1cm4gdHJ1ZTsKK3N0YXRpYyBEZWJ1Z2dlcmREdW1wVHlwZSBjYW5vbmljYWxfZHVtcF90eXBlKGNvbnN0IERlYnVnZ2VyZER1bXBUeXBlIGR1bXBfdHlwZSkgeworICAvLyBrRGVidWdnZXJkVG9tYnN0b25lIGFuZCBrRGVidWdnZXJkVG9tYnN0b25lUHJvdG8gc2hvdWxkIGJlIHRyZWF0ZWQgYXMKKyAgLy8gYSBzaW5nbGUgZHVtcF90eXBlIGZvciBpbnRlcmNlcHRzIChrRGVidWdnZXJkVG9tYnN0b25lKS4KKyAgaWYgKGR1bXBfdHlwZSA9PSBrRGVidWdnZXJkVG9tYnN0b25lUHJvdG8pIHsKKyAgICByZXR1cm4ga0RlYnVnZ2VyZFRvbWJzdG9uZTsKICAgfQotCi0gIGlmIChpbnRlcmNlcHRvciA9PSBrRGVidWdnZXJkVG9tYnN0b25lICYmIGR1bXAgPT0ga0RlYnVnZ2VyZFRvbWJzdG9uZVByb3RvKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gZmFsc2U7CisgIHJldHVybiBkdW1wX3R5cGU7CiB9CiAKLWJvb2wgSW50ZXJjZXB0TWFuYWdlcjo6R2V0SW50ZXJjZXB0KHBpZF90IHBpZCwgRGVidWdnZXJkRHVtcFR5cGUgZHVtcF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDo6YmFzZTo6dW5pcXVlX2ZkKiBvdXRfZmQpIHsKLSAgYXV0byBpdCA9IHRoaXMtPmludGVyY2VwdHMuZmluZChwaWQpOwotICBpZiAoaXQgPT0gdGhpcy0+aW50ZXJjZXB0cy5lbmQoKSkgeworSW50ZXJjZXB0KiBJbnRlcmNlcHRNYW5hZ2VyOjpHZXQoY29uc3QgcGlkX3QgcGlkLCBjb25zdCBEZWJ1Z2dlcmREdW1wVHlwZSBkdW1wX3R5cGUpIHsKKyAgYXV0byBwaWRfZW50cnkgPSBpbnRlcmNlcHRzLmZpbmQocGlkKTsKKyAgaWYgKHBpZF9lbnRyeSA9PSBpbnRlcmNlcHRzLmVuZCgpKSB7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKworICBjb25zdCBhdXRvJiBkdW1wX3R5cGVfaGFzaCA9IHBpZF9lbnRyeS0+c2Vjb25kOworICBhdXRvIGR1bXBfdHlwZV9lbnRyeSA9IGR1bXBfdHlwZV9oYXNoLmZpbmQoY2Fub25pY2FsX2R1bXBfdHlwZShkdW1wX3R5cGUpKTsKKyAgaWYgKGR1bXBfdHlwZV9lbnRyeSA9PSBkdW1wX3R5cGVfaGFzaC5lbmQoKSkgeworICAgIGlmIChkdW1wX3R5cGUgIT0ga0RlYnVnZ2VyZEFueUludGVyY2VwdCkgeworICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIC8vIElmIGRvaW5nIGEgZHVtcCB3aXRoIGFuIGFueSBpbnRlcmNlcHQsIG9ubHkgYWxsb3cgYW4gYW55IHRvIG1hdGNoCisgICAgLy8gYSBzaW5nbGUgaW50ZXJjZXB0LiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZHVtcCB0eXBlcyB3aXRoIGludGVyY2VwdHMKKyAgICAvLyB0aGVuIHRoZXJlIHdvdWxkIGJlIG5vIHdheSB0byBmaWd1cmUgb3V0IHdoaWNoIHRvIHVzZS4KKyAgICBpZiAoZHVtcF90eXBlX2hhc2guc2l6ZSgpICE9IDEpIHsKKyAgICAgIExPRyhXQVJOSU5HKSA8PCAiQ2Fubm90IGludGVyY2VwdCB1c2luZyBrRGVidWdnZXJkQW55SW50ZXJjZXB0OiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lICIKKyAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJjZXB0IHJlZ2lzdGVyZWQgZm9yIHBpZCAiCisgICAgICAgICAgICAgICAgICAgPDwgcGlkOworICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGR1bXBfdHlwZV9lbnRyeSA9IGR1bXBfdHlwZV9oYXNoLmJlZ2luKCk7CisgIH0KKyAgcmV0dXJuIGR1bXBfdHlwZV9lbnRyeS0+c2Vjb25kOworfQorCitib29sIEludGVyY2VwdE1hbmFnZXI6OkNhblJlZ2lzdGVyKGNvbnN0IEludGVyY2VwdFJlcXVlc3QmIHJlcXVlc3QsIEludGVyY2VwdFJlc3BvbnNlJiByZXNwb25zZSkgeworICBpZiAocmVxdWVzdC5waWQgPD0gMCB8fCByZXF1ZXN0LnBpZCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8cGlkX3Q+OjptYXgoKSkgeworICAgIHJlc3BvbnNlLnN0YXR1cyA9IEludGVyY2VwdFN0YXR1czo6a0ZhaWxlZDsKKyAgICBzbnByaW50ZihyZXNwb25zZS5lcnJvcl9tZXNzYWdlLCBzaXplb2YocmVzcG9uc2UuZXJyb3JfbWVzc2FnZSksCisgICAgICAgICAgICAgImludmFsaWQgaW50ZXJjZXB0IHJlcXVlc3Q6IGJhZCBwaWQgJSIgUFJJZDMyLCByZXF1ZXN0LnBpZCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmIChyZXF1ZXN0LmR1bXBfdHlwZSA8IDAgfHwgcmVxdWVzdC5kdW1wX3R5cGUgPiBrRGVidWdnZXJkSmF2YUJhY2t0cmFjZSkgeworICAgIHJlc3BvbnNlLnN0YXR1cyA9IEludGVyY2VwdFN0YXR1czo6a0ZhaWxlZDsKKyAgICBzbnByaW50ZihyZXNwb25zZS5lcnJvcl9tZXNzYWdlLCBzaXplb2YocmVzcG9uc2UuZXJyb3JfbWVzc2FnZSksCisgICAgICAgICAgICAgImludmFsaWQgaW50ZXJjZXB0IHJlcXVlc3Q6IGJhZCBkdW1wIHR5cGUgJXMiLCBnZXRfZHVtcF90eXBlX25hbWUocmVxdWVzdC5kdW1wX3R5cGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICBpZiAoZHVtcF90eXBlID09IGtEZWJ1Z2dlcmRBbnlJbnRlcmNlcHQpIHsKLSAgICBMT0coSU5GTykgPDwgImZvdW5kIHJlZ2lzdGVyZWQgaW50ZXJjZXB0IG9mIHR5cGUgIiA8PCBpdC0+c2Vjb25kLT5kdW1wX3R5cGUKLSAgICAgICAgICAgICAgPDwgIiBmb3IgcmVxdWVzdGVkIHR5cGUga0RlYnVnZ2VyZEFueUludGVyY2VwdCI7Ci0gIH0gZWxzZSBpZiAoIWR1bXBfdHlwZXNfY29tcGF0aWJsZShpdC0+c2Vjb25kLT5kdW1wX3R5cGUsIGR1bXBfdHlwZSkpIHsKLSAgICBMT0coV0FSTklORykgPDwgImZvdW5kIG5vbi1tYXRjaGluZyBpbnRlcmNlcHQgb2YgdHlwZSAiIDw8IGl0LT5zZWNvbmQtPmR1bXBfdHlwZQotICAgICAgICAgICAgICAgICA8PCAiIGZvciByZXF1ZXN0ZWQgdHlwZTogIiA8PCBkdW1wX3R5cGU7CisgIGlmIChHZXQocmVxdWVzdC5waWQsIHJlcXVlc3QuZHVtcF90eXBlKSAhPSBudWxscHRyKSB7CisgICAgcmVzcG9uc2Uuc3RhdHVzID0gSW50ZXJjZXB0U3RhdHVzOjprRmFpbGVkQWxyZWFkeVJlZ2lzdGVyZWQ7CisgICAgc25wcmludGYocmVzcG9uc2UuZXJyb3JfbWVzc2FnZSwgc2l6ZW9mKHJlc3BvbnNlLmVycm9yX21lc3NhZ2UpLAorICAgICAgICAgICAgICJwaWQgJSIgUFJJZDMyICIgYWxyZWFkeSByZWdpc3RlcmVkLCB0eXBlICVzIiwgcmVxdWVzdC5waWQsCisgICAgICAgICAgICAgZ2V0X2R1bXBfdHlwZV9uYW1lKHJlcXVlc3QuZHVtcF90eXBlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgYXV0byBpbnRlcmNlcHQgPSBzdGQ6Om1vdmUoaXQtPnNlY29uZCk7Ci0gIHRoaXMtPmludGVyY2VwdHMuZXJhc2UoaXQpOworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnRlcmNlcHRNYW5hZ2VyOjpSZWdpc3RlcihJbnRlcmNlcHQqIGludGVyY2VwdCkgeworICBDSEVDSyghaW50ZXJjZXB0LT5yZWdpc3RlcmVkKTsKKyAgYXV0byYgZHVtcF90eXBlX2hhc2ggPSBpbnRlcmNlcHRzW2ludGVyY2VwdC0+cGlkXTsKKyAgZHVtcF90eXBlX2hhc2hbY2Fub25pY2FsX2R1bXBfdHlwZShpbnRlcmNlcHQtPmR1bXBfdHlwZSldID0gaW50ZXJjZXB0OworICBpbnRlcmNlcHQtPnJlZ2lzdGVyZWQgPSB0cnVlOworfQorCitib29sIEludGVyY2VwdE1hbmFnZXI6OkZpbmRJbnRlcmNlcHQocGlkX3QgcGlkLCBEZWJ1Z2dlcmREdW1wVHlwZSBkdW1wX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDo6YmFzZTo6dW5pcXVlX2ZkKiBvdXRfZmQpIHsKKyAgSW50ZXJjZXB0KiBpbnRlcmNlcHQgPSBHZXQocGlkLCBkdW1wX3R5cGUpOworICBpZiAoaW50ZXJjZXB0ID09IG51bGxwdHIpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoZHVtcF90eXBlICE9IGludGVyY2VwdC0+ZHVtcF90eXBlKSB7CisgICAgTE9HKElORk8pIDw8ICJmb3VuZCByZWdpc3RlcmVkIGludGVyY2VwdCBvZiB0eXBlICIgPDwgaW50ZXJjZXB0LT5kdW1wX3R5cGUKKyAgICAgICAgICAgICAgPDwgIiBmb3IgcmVxdWVzdGVkIHR5cGUgIiA8PCBkdW1wX3R5cGU7CisgIH0KIAogICBMT0coSU5GTykgPDwgImZvdW5kIGludGVyY2VwdCBmZCAiIDw8IGludGVyY2VwdC0+b3V0cHV0X2ZkLmdldCgpIDw8ICIgZm9yIHBpZCAiIDw8IHBpZAogICAgICAgICAgICAgPDwgIiBhbmQgdHlwZSAiIDw8IGludGVyY2VwdC0+ZHVtcF90eXBlOwpAQCAtMjMwLDUgKzI2NSw4IEBACiAgIFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShpbnRlcmNlcHQtPnNvY2tmZCwgJnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKSk7CiAgICpvdXRfZmQgPSBzdGQ6Om1vdmUoaW50ZXJjZXB0LT5vdXRwdXRfZmQpOwogCisgIC8vIERlbGV0ZSB0aGUgaW50ZXJjZXB0IGRhdGEsIHdoaWNoIHdpbGwgdW5yZWdpc3RlciB0aGUgaW50ZXJjZXB0IGFuZCByZW1vdmUgdGhlIHRpbWVvdXQgZXZlbnQuCisgIGRlbGV0ZSBpbnRlcmNlcHQ7CisKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kZWJ1Z2dlcmQvdG9tYnN0b25lZC9pbnRlcmNlcHRfbWFuYWdlci5oIGIvZGVidWdnZXJkL3RvbWJzdG9uZWQvaW50ZXJjZXB0X21hbmFnZXIuaAppbmRleCBhMTFkNTY1Li5kYzEzYWE5IDEwMDY0NAotLS0gYS9kZWJ1Z2dlcmQvdG9tYnN0b25lZC9pbnRlcmNlcHRfbWFuYWdlci5oCisrKyBiL2RlYnVnZ2VyZC90b21ic3RvbmVkL2ludGVyY2VwdF9tYW5hZ2VyLmgKQEAgLTI4LDE3ICsyOCwxNyBAQAogI2luY2x1ZGUgImR1bXBfdHlwZS5oIgogCiBzdHJ1Y3QgSW50ZXJjZXB0TWFuYWdlcjsKK3N0cnVjdCBJbnRlcmNlcHRSZXF1ZXN0Oworc3RydWN0IEludGVyY2VwdFJlc3BvbnNlOwogCiBzdHJ1Y3QgSW50ZXJjZXB0IHsKLSAgfkludGVyY2VwdCgpIHsKLSAgICBldmVudF9mcmVlKGludGVyY2VwdF9ldmVudCk7Ci0gIH0KKyAgfkludGVyY2VwdCgpOwogCiAgIEludGVyY2VwdE1hbmFnZXIqIGludGVyY2VwdF9tYW5hZ2VyID0gbnVsbHB0cjsKICAgZXZlbnQqIGludGVyY2VwdF9ldmVudCA9IG51bGxwdHI7CiAgIGFuZHJvaWQ6OmJhc2U6OnVuaXF1ZV9mZCBzb2NrZmQ7CiAKLSAgcGlkX3QgaW50ZXJjZXB0X3BpZCA9IC0xOworICBwaWRfdCBwaWQgPSAtMTsKICAgYW5kcm9pZDo6YmFzZTo6dW5pcXVlX2ZkIG91dHB1dF9mZDsKICAgYm9vbCByZWdpc3RlcmVkID0gZmFsc2U7CiAgIERlYnVnZ2VyZER1bXBUeXBlIGR1bXBfdHlwZSA9IGtEZWJ1Z2dlcmROYXRpdmVCYWNrdHJhY2U7CkBAIC00NiwxMiArNDYsMTcgQEAKIAogc3RydWN0IEludGVyY2VwdE1hbmFnZXIgewogICBldmVudF9iYXNlKiBiYXNlOwotICBzdGQ6OnVub3JkZXJlZF9tYXA8cGlkX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcmNlcHQ+PiBpbnRlcmNlcHRzOworICBzdGQ6OnVub3JkZXJlZF9tYXA8cGlkX3QsIHN0ZDo6dW5vcmRlcmVkX21hcDxEZWJ1Z2dlcmREdW1wVHlwZSwgSW50ZXJjZXB0Kj4+IGludGVyY2VwdHM7CiAgIGV2Y29ubmxpc3RlbmVyKiBsaXN0ZW5lciA9IG51bGxwdHI7CiAKICAgSW50ZXJjZXB0TWFuYWdlcihldmVudF9iYXNlKiBfTm9ubnVsbCBiYXNlLCBpbnQgaW50ZXJjZXB0X3NvY2tldCk7CiAgIEludGVyY2VwdE1hbmFnZXIoSW50ZXJjZXB0TWFuYWdlciYgY29weSkgPSBkZWxldGU7CiAgIEludGVyY2VwdE1hbmFnZXIoSW50ZXJjZXB0TWFuYWdlciYmIG1vdmUpID0gZGVsZXRlOwogCi0gIGJvb2wgR2V0SW50ZXJjZXB0KHBpZF90IHBpZCwgRGVidWdnZXJkRHVtcFR5cGUgZHVtcF90eXBlLCBhbmRyb2lkOjpiYXNlOjp1bmlxdWVfZmQqIG91dF9mZCk7CisgIGJvb2wgQ2FuUmVnaXN0ZXIoY29uc3QgSW50ZXJjZXB0UmVxdWVzdCYgcmVxdWVzdCwgSW50ZXJjZXB0UmVzcG9uc2UmIHJlc3BvbnNlKTsKKyAgSW50ZXJjZXB0KiBHZXQoY29uc3QgcGlkX3QgcGlkLCBjb25zdCBEZWJ1Z2dlcmREdW1wVHlwZSBkdW1wX3R5cGUpOworICB2b2lkIFJlZ2lzdGVyKEludGVyY2VwdCogaW50ZXJjZXB0KTsKKyAgdm9pZCBVbnJlZ2lzdGVyKEludGVyY2VwdCogaW50ZXJjZXB0KTsKKworICBib29sIEZpbmRJbnRlcmNlcHQocGlkX3QgcGlkLCBEZWJ1Z2dlcmREdW1wVHlwZSBkdW1wX3R5cGUsIGFuZHJvaWQ6OmJhc2U6OnVuaXF1ZV9mZCogb3V0X2ZkKTsKIH07CmRpZmYgLS1naXQgYS9kZWJ1Z2dlcmQvdG9tYnN0b25lZC90b21ic3RvbmVkLmNwcCBiL2RlYnVnZ2VyZC90b21ic3RvbmVkL3RvbWJzdG9uZWQuY3BwCmluZGV4IDUwNTU4ZjcuLmNmNzkwNGYgMTAwNjQ0Ci0tLSBhL2RlYnVnZ2VyZC90b21ic3RvbmVkL3RvbWJzdG9uZWQuY3BwCisrKyBiL2RlYnVnZ2VyZC90b21ic3RvbmVkL3RvbWJzdG9uZWQuY3BwCkBAIC0yODMsOSArMjgzLDcgQEAKIAogc3RhdGljIHZvaWQgcGVyZm9ybV9yZXF1ZXN0KHN0ZDo6dW5pcXVlX3B0cjxDcmFzaD4gY3Jhc2gpIHsKICAgdW5pcXVlX2ZkIG91dHB1dF9mZDsKLSAgYm9vbCBpbnRlcmNlcHRlZCA9Ci0gICAgICBpbnRlcmNlcHRfbWFuYWdlci0+R2V0SW50ZXJjZXB0KGNyYXNoLT5jcmFzaF9waWQsIGNyYXNoLT5jcmFzaF90eXBlLCAmb3V0cHV0X2ZkKTsKLSAgaWYgKGludGVyY2VwdGVkKSB7CisgIGlmIChpbnRlcmNlcHRfbWFuYWdlci0+RmluZEludGVyY2VwdChjcmFzaC0+Y3Jhc2hfcGlkLCBjcmFzaC0+Y3Jhc2hfdHlwZSwgJm91dHB1dF9mZCkpIHsKICAgICBpZiAoY3Jhc2gtPmNyYXNoX3R5cGUgPT0ga0RlYnVnZ2VyZFRvbWJzdG9uZVByb3RvKSB7CiAgICAgICBjcmFzaC0+b3V0cHV0LnByb3RvID0gQ3Jhc2hBcnRpZmFjdDo6ZGV2bnVsbCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2Zhc3Rib290L2Zhc3Rib290LmNwcCBiL2Zhc3Rib290L2Zhc3Rib290LmNwcAppbmRleCA1NmI5MGI5Li5hYzJhMjBmIDEwMDY0NAotLS0gYS9mYXN0Ym9vdC9mYXN0Ym9vdC5jcHAKKysrIGIvZmFzdGJvb3QvZmFzdGJvb3QuY3BwCkBAIC0xMDUzLDggKzEwNTMsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBzcGFyc2VfZmlsZV9kZXN0cm95KHMpOworICAgICAgICBidWYtPmZpbGVfdHlwZSA9IEZCX0JVRkZFUl9TUEFSU0U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYnVmLT5pbWFnZV9zaXplID0gc3o7CisgICAgICAgIGJ1Zi0+ZmlsZV90eXBlID0gRkJfQlVGRkVSX0ZEOwogICAgIH0KIAogICAgIGxzZWVrKGZkLmdldCgpLCAwLCBTRUVLX1NFVCk7CkBAIC0xMTkxLDYgKzExOTMsMTUgQEAKICAgICAgICAgc2hvdWxkX2ZsYXNoX2luX3VzZXJzcGFjZShzb3VyY2UsIHBhcnRpdGlvbikpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8vIElmIHRoZSBpbWFnZSBpcyBzcGFyc2UsIG1vdmluZyB0aGUgZm9vdGVyIHdpbGwgc2ltcGx5IGNvcnJ1cHQgdGhlIHNwYXJzZQorICAgIC8vIGZvcm1hdCwgc28gY3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgbW92aW5nIHRoZSBmb290ZXIgb24gc3BhcnNlIGZpbGVzLgorICAgIGlmIChidWYtPmZpbGVfdHlwZSA9PSBGQl9CVUZGRVJfU1BBUlNFKSB7CisgICAgICAgIExPRyhFUlJPUikgPDwgIldhcm5pbmc6IHNraXAgY29weWluZyAiIDw8IHBhcnRpdGlvbiA8PCAiIGltYWdlIGF2YiBmb290ZXIgZHVlIHRvIHNwYXJzZSAiCisgICAgICAgICAgICAgICAgICAgPDwgImltYWdlLiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyBJZiBvdmVyZmxvd3MgYW5kIG5lZ2F0aXZlLCBpdCBzaG91bGQgYmUgPCBidWYtPnN6LgogICAgIGludDY0X3QgcGFydGl0aW9uX3NpemUgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihnZXRfcGFydGl0aW9uX3NpemUocGFydGl0aW9uKSk7CiAKZGlmZiAtLWdpdCBhL2Zhc3Rib290L2Zhc3Rib290LmggYi9mYXN0Ym9vdC9mYXN0Ym9vdC5oCmluZGV4IDJjNDA4OTAuLjZhNDk5NzAgMTAwNjQ0Ci0tLSBhL2Zhc3Rib290L2Zhc3Rib290LmgKKysrIGIvZmFzdGJvb3QvZmFzdGJvb3QuaApAQCAtNTcsNyArNTcsOCBAQAogfTsKIAogc3RydWN0IGZhc3Rib290X2J1ZmZlciB7Ci0gICAgZW51bSBmYl9idWZmZXJfdHlwZSB0eXBlOworICAgIGZiX2J1ZmZlcl90eXBlIHR5cGU7CisgICAgZmJfYnVmZmVyX3R5cGUgZmlsZV90eXBlOwogICAgIHN0ZDo6dmVjdG9yPFNwYXJzZVB0cj4gZmlsZXM7CiAgICAgaW50NjRfdCBzejsKICAgICB1bmlxdWVfZmQgZmQ7CmRpZmYgLS1naXQgYS9mc19tZ3IvZnNfbWdyX292ZXJsYXlmc19jb250cm9sLmNwcCBiL2ZzX21nci9mc19tZ3Jfb3ZlcmxheWZzX2NvbnRyb2wuY3BwCmluZGV4IDJjYzBkMmQuLjUwZDgyODAgMTAwNjQ0Ci0tLSBhL2ZzX21nci9mc19tZ3Jfb3ZlcmxheWZzX2NvbnRyb2wuY3BwCisrKyBiL2ZzX21nci9mc19tZ3Jfb3ZlcmxheWZzX2NvbnRyb2wuY3BwCkBAIC0xNDQsNyArMTQ0LDggQEAKICAgICBpZiAoZnNfbWdyX292ZXJsYXlmc19hbHJlYWR5X21vdW50ZWQobW91bnRfcG9pbnQpKSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBhdXRvIGZzcmVjX21vdW50X3BvaW50ID0gb3ZlcmxheSArICIvIiArIGFuZHJvaWQ6OmJhc2U6OkJhc2VuYW1lKG1vdW50X3BvaW50KSArICIvIjsKKyAgICBjb25zdCBhdXRvIGJhc2UgPSBHZXRFbmNvZGVkQmFzZURpckZvck1vdW50UG9pbnQobW91bnRfcG9pbnQpOworICAgIGF1dG8gZnNyZWNfbW91bnRfcG9pbnQgPSBvdmVybGF5ICsgIi8iICsgYmFzZSArICIvIjsKIAogICAgIEF1dG9TZXRGc0NyZWF0ZUNvbiBjcmVhdGVjb24oa092ZXJsYXlmc0ZpbGVDb250ZXh0KTsKICAgICBpZiAoIWNyZWF0ZWNvbi5PaygpKSB7CkBAIC0yODYsMTAgKzI4NywxMCBAQAogICAgIH0KIAogICAgIGF1dG8gY2xlYW51cF9hbGwgPSBtb3VudF9wb2ludC5lbXB0eSgpOwotICAgIGNvbnN0IGF1dG8gcGFydGl0aW9uX25hbWUgPSBhbmRyb2lkOjpiYXNlOjpCYXNlbmFtZShtb3VudF9wb2ludCk7Ci0gICAgY29uc3QgYXV0byBvbGRwYXRoID0gdG9wICsgKGNsZWFudXBfYWxsID8gIiIgOiAoIi8iICsgcGFydGl0aW9uX25hbWUpKTsKKyAgICBjb25zdCBhdXRvIGJhc2UgPSBHZXRFbmNvZGVkQmFzZURpckZvck1vdW50UG9pbnQobW91bnRfcG9pbnQpOworICAgIGNvbnN0IGF1dG8gb2xkcGF0aCA9IHRvcCArIChjbGVhbnVwX2FsbCA/ICIiIDogKCIvIiArIGJhc2UpKTsKICAgICBjb25zdCBhdXRvIG5ld3BhdGggPSBjbGVhbnVwX2FsbCA/IG92ZXJsYXkgKyAiLy4iICsga092ZXJsYXlUb3BEaXIgKyAiLnRlYXJkb3duIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdG9wICsgIi8uIiArIHBhcnRpdGlvbl9uYW1lICsgIi50ZWFyZG93biI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0b3AgKyAiLy4iICsgYmFzZSArICIudGVhcmRvd24iOwogICAgIGF1dG8gcmV0ID0gZnNfbWdyX3JtX2FsbChuZXdwYXRoKTsKICAgICBpZiAoIXJlbmFtZShvbGRwYXRoLmNfc3RyKCksIG5ld3BhdGguY19zdHIoKSkpIHsKICAgICAgICAgaWYgKGNoYW5nZSkgKmNoYW5nZSA9IHRydWU7CmRpZmYgLS1naXQgYS9mc19tZ3IvZnNfbWdyX292ZXJsYXlmc19tb3VudC5jcHAgYi9mc19tZ3IvZnNfbWdyX292ZXJsYXlmc19tb3VudC5jcHAKaW5kZXggOWYxN2MwNi4uYWU3ZWQ0YyAxMDA2NDQKLS0tIGEvZnNfbWdyL2ZzX21ncl9vdmVybGF5ZnNfbW91bnQuY3BwCisrKyBiL2ZzX21nci9mc19tZ3Jfb3ZlcmxheWZzX21vdW50LmNwcApAQCAtNjAsNiArNjAsNyBAQAogCiBjb25zdGV4cHIgY2hhciBrTG93ZXJkaXJPcHRpb25bXSA9ICJsb3dlcmRpcj0iOwogY29uc3RleHByIGNoYXIga1VwcGVyZGlyT3B0aW9uW10gPSAidXBwZXJkaXI9IjsKK2NvbnN0ZXhwciBjaGFyIGtXb3JrZGlyT3B0aW9uW10gPSAid29ya2Rpcj0iOwogCiBib29sIGZzX21ncl9pc19kc3VfcnVubmluZygpIHsKICAgICAvLyBTaW5jZSBhbmRyb2lkOjpnc2k6OkNhbkJvb3RJbnRvR3NpKCkgb3IgYW5kcm9pZDo6Z3NpOjpNYXJrU3lzdGVtQXNHc2koKSBpcwpAQCAtODksNiArOTAsMTQgQEAKICAgICByZXR1cm4ge2tTY3JhdGNoTW91bnRQb2ludCwga0NhY2hlTW91bnRQb2ludH07CiB9CiAKK3N0ZDo6c3RyaW5nIEdldEVuY29kZWRCYXNlRGlyRm9yTW91bnRQb2ludChjb25zdCBzdGQ6OnN0cmluZyYgbW91bnRfcG9pbnQpIHsKKyAgICBzdGQ6OnN0cmluZyBub3JtYWxpemVkX3BhdGg7CisgICAgaWYgKG1vdW50X3BvaW50LmVtcHR5KCkgfHwgIWFuZHJvaWQ6OmJhc2U6OlJlYWxwYXRoKG1vdW50X3BvaW50LCAmbm9ybWFsaXplZF9wYXRoKSkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorICAgIHJldHVybiBhbmRyb2lkOjpiYXNlOjpTdHJpbmdSZXBsYWNlKG5vcm1hbGl6ZWRfcGF0aCwgIi8iLCAiQCIsIHRydWUpOworfQorCiBzdGF0aWMgYm9vbCBmc19tZ3JfaXNfZGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKSB7CiAgICAgc3RydWN0IHN0YXQgc3Q7CiAgICAgcmV0dXJuICFzdGF0KHBhdGguY19zdHIoKSwgJnN0KSAmJiBTX0lTRElSKHN0LnN0X21vZGUpOwpAQCAtMjAyLDIxICsyMTEsNiBAQAogICAgIHJldHVybiBoYXNfc2hhcmVkX2Jsb2NrczsKIH0KIAotc3RhdGljIHN0ZDo6c3RyaW5nIGZzX21ncl9nZXRfb3ZlcmxheWZzX2NhbmRpZGF0ZShjb25zdCBzdGQ6OnN0cmluZyYgbW91bnRfcG9pbnQpIHsKLSAgICBpZiAoIWZzX21ncl9pc19kaXIobW91bnRfcG9pbnQpKSByZXR1cm4gIiI7Ci0gICAgY29uc3QgYXV0byBiYXNlID0gYW5kcm9pZDo6YmFzZTo6QmFzZW5hbWUobW91bnRfcG9pbnQpICsgIi8iOwotICAgIGZvciAoY29uc3QgYXV0byYgb3ZlcmxheV9tb3VudF9wb2ludCA6IE92ZXJsYXlNb3VudFBvaW50cygpKSB7Ci0gICAgICAgIGF1dG8gZGlyID0gb3ZlcmxheV9tb3VudF9wb2ludCArICIvIiArIGtPdmVybGF5VG9wRGlyICsgIi8iICsgYmFzZTsKLSAgICAgICAgYXV0byB1cHBlciA9IGRpciArIGtVcHBlck5hbWU7Ci0gICAgICAgIGlmICghZnNfbWdyX2lzX2Rpcih1cHBlcikpIGNvbnRpbnVlOwotICAgICAgICBhdXRvIHdvcmsgPSBkaXIgKyBrV29ya05hbWU7Ci0gICAgICAgIGlmICghZnNfbWdyX2lzX2Rpcih3b3JrKSkgY29udGludWU7Ci0gICAgICAgIGlmIChhY2Nlc3Mod29yay5jX3N0cigpLCBSX09LIHwgV19PSykpIGNvbnRpbnVlOwotICAgICAgICByZXR1cm4gZGlyOwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci19Ci0KIGNvbnN0IHN0ZDo6c3RyaW5nIGZzX21ncl9tb3VudF9wb2ludChjb25zdCBzdGQ6OnN0cmluZyYgbW91bnRfcG9pbnQpIHsKICAgICBpZiAoIi8icyAhPSBtb3VudF9wb2ludCkgcmV0dXJuIG1vdW50X3BvaW50OwogICAgIHJldHVybiAiL3N5c3RlbSI7CkBAIC0yMjUsMTYgKzIxOSwzMCBAQAogLy8gZGVmYXVsdCBvcHRpb25zIGZvciBtb3VudF9wb2ludCwgcmV0dXJucyBlbXB0eSBzdHJpbmcgZm9yIG5vbmUgYXZhaWxhYmxlLgogc3RhdGljIHN0ZDo6c3RyaW5nIGZzX21ncl9nZXRfb3ZlcmxheWZzX29wdGlvbnMoY29uc3QgRnN0YWJFbnRyeSYgZW50cnkpIHsKICAgICBjb25zdCBhdXRvIG1vdW50X3BvaW50ID0gZnNfbWdyX21vdW50X3BvaW50KGVudHJ5Lm1vdW50X3BvaW50KTsKLSAgICBhdXRvIGNhbmRpZGF0ZSA9IGZzX21ncl9nZXRfb3ZlcmxheWZzX2NhbmRpZGF0ZShtb3VudF9wb2ludCk7Ci0gICAgaWYgKGNhbmRpZGF0ZS5lbXB0eSgpKSByZXR1cm4gIiI7Ci0gICAgYXV0byByZXQgPSBrTG93ZXJkaXJPcHRpb24gKyBtb3VudF9wb2ludCArICIsIiArIGtVcHBlcmRpck9wdGlvbiArIGNhbmRpZGF0ZSArIGtVcHBlck5hbWUgKwotICAgICAgICAgICAgICAgIix3b3JrZGlyPSIgKyBjYW5kaWRhdGUgKyBrV29ya05hbWUgKyBhbmRyb2lkOjpmc19tZ3I6OkNoZWNrT3ZlcmxheWZzKCkubW91bnRfZmxhZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmbGFnIDogYW5kcm9pZDo6YmFzZTo6U3BsaXQoZW50cnkuZnNfb3B0aW9ucywgIiwiKSkgewotICAgICAgICBpZiAoYW5kcm9pZDo6YmFzZTo6U3RhcnRzV2l0aChmbGFnLCAiY29udGV4dD0iKSkgewotICAgICAgICAgICAgcmV0ICs9ICIsIiArIGZsYWc7Ci0gICAgICAgIH0KKyAgICBpZiAoIWZzX21ncl9pc19kaXIobW91bnRfcG9pbnQpKSB7CisgICAgICAgIHJldHVybiAiIjsKICAgICB9Ci0gICAgcmV0dXJuIHJldDsKKyAgICBjb25zdCBhdXRvIGJhc2UgPSBHZXRFbmNvZGVkQmFzZURpckZvck1vdW50UG9pbnQobW91bnRfcG9pbnQpOworICAgIGlmIChiYXNlLmVtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIG92ZXJsYXlfbW91bnRfcG9pbnQgOiBPdmVybGF5TW91bnRQb2ludHMoKSkgeworICAgICAgICBjb25zdCBhdXRvIGRpciA9IG92ZXJsYXlfbW91bnRfcG9pbnQgKyAiLyIgKyBrT3ZlcmxheVRvcERpciArICIvIiArIGJhc2UgKyAiLyI7CisgICAgICAgIGNvbnN0IGF1dG8gdXBwZXIgPSBkaXIgKyBrVXBwZXJOYW1lOworICAgICAgICBjb25zdCBhdXRvIHdvcmsgPSBkaXIgKyBrV29ya05hbWU7CisgICAgICAgIGlmICghZnNfbWdyX2lzX2Rpcih1cHBlcikgfHwgIWZzX21ncl9pc19kaXIod29yaykgfHwgYWNjZXNzKHdvcmsuY19zdHIoKSwgUl9PSyB8IFdfT0spKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIHJldCA9IGtMb3dlcmRpck9wdGlvbiArIG1vdW50X3BvaW50ICsgIiwiICsga1VwcGVyZGlyT3B0aW9uICsgdXBwZXIgKyAiLCIgKworICAgICAgICAgICAgICAgICAgIGtXb3JrZGlyT3B0aW9uICsgd29yayArIGFuZHJvaWQ6OmZzX21ncjo6Q2hlY2tPdmVybGF5ZnMoKS5tb3VudF9mbGFnczsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmbGFnIDogYW5kcm9pZDo6YmFzZTo6U3BsaXQoZW50cnkuZnNfb3B0aW9ucywgIiwiKSkgeworICAgICAgICAgICAgaWYgKGFuZHJvaWQ6OmJhc2U6OlN0YXJ0c1dpdGgoZmxhZywgImNvbnRleHQ9IikpIHsKKyAgICAgICAgICAgICAgICByZXQgKz0gIiwiICsgZmxhZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICByZXR1cm4gIiI7CiB9CiAKIGJvb2wgQXV0b1NldEZzQ3JlYXRlQ29uOjpTZXQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRleHQpIHsKQEAgLTM3Myw1NCArMzgxLDg2IEBACiAKICAgICBhdXRvIHJldHZhbCA9IHRydWU7CiAKLSAgICBzdHJ1Y3QgbW92ZV9lbnRyeSB7CisgICAgc3RydWN0IE1vdmVFbnRyeSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIG1vdW50X3BvaW50OwogICAgICAgICBzdGQ6OnN0cmluZyBkaXI7CiAgICAgICAgIGJvb2wgc2hhcmVkX2ZsYWc7CiAgICAgfTsKLSAgICBzdGQ6OnZlY3Rvcjxtb3ZlX2VudHJ5PiBtb3ZlOworCisgICAgc3RkOjp2ZWN0b3I8TW92ZUVudHJ5PiBtb3ZlZF9tb3VudHM7CiAgICAgYXV0byBwYXJlbnRfcHJpdmF0ZSA9IGZhbHNlOwogICAgIGF1dG8gcGFyZW50X21hZGVfcHJpdmF0ZSA9IGZhbHNlOwogICAgIGF1dG8gZGV2X3ByaXZhdGUgPSBmYWxzZTsKICAgICBhdXRvIGRldl9tYWRlX3ByaXZhdGUgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogUmVhZE1vdW50aW5mb0Zyb21GaWxlKCIvcHJvYy9zZWxmL21vdW50aW5mbyIpKSB7CisKKyAgICAvLyBUaGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBtb3VudCBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbW91bnRwb2ludC4KKyAgICAvLyBHcm91cCB0aGVzZSBlbnRyaWVzIHRvZ2V0aGVyIHdpdGggc3RhYmxlX3NvcnQsIGFuZCBrZWVwIG9ubHkgdGhlIGxhc3QgZW50cnkgb2YgYSBncm91cC4KKyAgICAvLyBPbmx5IG1vdmUgbW91bnQgdGhlIGxhc3QgZW50cnkgaW4gYW4gb3ZlciBtb3VudCBncm91cCwgYmVjYXVzZSB0aGUgb3RoZXIgZW50cmllcyBhcmUKKyAgICAvLyBvdmVyc2hhZG93ZWQgYW5kIG9ubHkgdGhlIGZpbGVzeXN0ZW0gbW91bnRlZCB3aXRoIHRoZSBsYXN0IGVudHJ5IHBhcnRpY2lwYXRlcyBpbiBmaWxlCisgICAgLy8gcGF0aG5hbWUgcmVzb2x1dGlvbi4KKyAgICBhdXRvIG1vdW50aW5mbyA9IFJlYWRNb3VudGluZm9Gcm9tRmlsZSgiL3Byb2Mvc2VsZi9tb3VudGluZm8iKTsKKyAgICBzdGQ6OnN0YWJsZV9zb3J0KG1vdW50aW5mby5iZWdpbigpLCBtb3VudGluZm8uZW5kKCksIFtdKGNvbnN0IGF1dG8mIGxocywgY29uc3QgYXV0byYgcmhzKSB7CisgICAgICAgIHJldHVybiBsaHMubW91bnRfcG9pbnQgPCByaHMubW91bnRfcG9pbnQ7CisgICAgfSk7CisgICAgc3RkOjpyZXZlcnNlKG1vdW50aW5mby5iZWdpbigpLCBtb3VudGluZm8uZW5kKCkpOworICAgIGF1dG8gZXJhc2VfZnJvbSA9IHN0ZDo6dW5pcXVlKAorICAgICAgICAgICAgbW91bnRpbmZvLmJlZ2luKCksIG1vdW50aW5mby5lbmQoKSwKKyAgICAgICAgICAgIFtdKGNvbnN0IGF1dG8mIGxocywgY29uc3QgYXV0byYgcmhzKSB7IHJldHVybiBsaHMubW91bnRfcG9pbnQgPT0gcmhzLm1vdW50X3BvaW50OyB9KTsKKyAgICBtb3VudGluZm8uZXJhc2UoZXJhc2VfZnJvbSwgbW91bnRpbmZvLmVuZCgpKTsKKyAgICBzdGQ6OnJldmVyc2UobW91bnRpbmZvLmJlZ2luKCksIG1vdW50aW5mby5lbmQoKSk7CisgICAgLy8gbW91bnRpbmZvIGlzIHJldmVyc2VkIHR3aWNlLCBzbyBzdGlsbCBpcyBpbiBsZXhpY2FsIHNvcnRlZCBvcmRlci4KKworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtb3VudGluZm8pIHsKICAgICAgICAgaWYgKChlbnRyeS5tb3VudF9wb2ludCA9PSBtb3VudF9wb2ludCkgJiYgIWVudHJ5LnNoYXJlZF9mbGFnKSB7CiAgICAgICAgICAgICBwYXJlbnRfcHJpdmF0ZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKChlbnRyeS5tb3VudF9wb2ludCA9PSAiL2RldiIpICYmICFlbnRyeS5zaGFyZWRfZmxhZykgewogICAgICAgICAgICAgZGV2X3ByaXZhdGUgPSB0cnVlOwogICAgICAgICB9CisgICAgfQogCisgICAgLy8gTmVlZCB0byBtYWtlIHRoZSBvcmlnaW5hbCBtb3VudHBvaW50IE1TX1BSSVZBVEUsIHNvIHRoYXQgdGhlIG92ZXJsYXlmcyBjYW4gYmUgTVNfTU9WRS4KKyAgICAvLyBUaGlzIGNvdWxkIGhhcHBlbiBpZiBpdHMgcGFyZW50IG1vdW50IGlzIHJlbW91bnRlZCBsYXRlci4KKyAgICBpZiAoIXBhcmVudF9wcml2YXRlKSB7CisgICAgICAgIHBhcmVudF9tYWRlX3ByaXZhdGUgPSBmc19tZ3Jfb3ZlcmxheWZzX3NldF9zaGFyZWRfbW91bnQobW91bnRfcG9pbnQsIGZhbHNlKTsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbW91bnRpbmZvKSB7CisgICAgICAgIC8vIEZpbmQgYWxsIGltbWVkaWF0ZSBzdWJtb3VudHMuCiAgICAgICAgIGlmICghYW5kcm9pZDo6YmFzZTo6U3RhcnRzV2l0aChlbnRyeS5tb3VudF9wb2ludCwgbW91bnRfcG9pbnQgKyAiLyIpKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RkOjpmaW5kX2lmKG1vdmUuYmVnaW4oKSwgbW92ZS5lbmQoKSwgWyZlbnRyeV0oY29uc3QgYXV0byYgaXQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYW5kcm9pZDo6YmFzZTo6U3RhcnRzV2l0aChlbnRyeS5tb3VudF9wb2ludCwgaXQubW91bnRfcG9pbnQgKyAiLyIpOwotICAgICAgICAgICAgfSkgIT0gbW92ZS5lbmQoKSkgeworICAgICAgICAvLyBFeGNsdWRlIGR1cGxpY2F0ZWQgb3IgbW9yZSBzcGVjaWZpYyBlbnRyaWVzLgorICAgICAgICBpZiAoc3RkOjpmaW5kX2lmKG1vdmVkX21vdW50cy5iZWdpbigpLCBtb3ZlZF9tb3VudHMuZW5kKCksIFsmZW50cnldKGNvbnN0IGF1dG8mIGl0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0Lm1vdW50X3BvaW50ID09IGVudHJ5Lm1vdW50X3BvaW50IHx8CisgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6OmJhc2U6OlN0YXJ0c1dpdGgoZW50cnkubW91bnRfcG9pbnQsIGl0Lm1vdW50X3BvaW50ICsgIi8iKTsKKyAgICAgICAgICAgIH0pICE9IG1vdmVkX21vdW50cy5lbmQoKSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KKyAgICAgICAgLy8gbW91bnRpbmZvIGlzIGluIGxleGljYWwgb3JkZXIsIHNvIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgfGVudHJ5fCBiZWluZyBhIHBhcmVudCBtb3VudCBvZgorICAgICAgICAvLyBlbnRyaWVzIG9mIHxtb3ZlZF9tb3VudHN8LgogCiAgICAgICAgIC8vIHVzZSBhcyB0aGUgYm91bmQgZGlyZWN0b3J5IGluIC9kZXYuCi0gICAgICAgIEF1dG9TZXRGc0NyZWF0ZUNvbiBjcmVhdGVjb247Ci0gICAgICAgIGF1dG8gbmV3X2NvbnRleHQgPSBmc19tZ3JfZ2V0X2NvbnRleHQoZW50cnkubW91bnRfcG9pbnQpOwotICAgICAgICBpZiAobmV3X2NvbnRleHQuZW1wdHkoKSB8fCAhY3JlYXRlY29uLlNldChuZXdfY29udGV4dCkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIG1vdmVfZW50cnkgbmV3X2VudHJ5ID0ge3N0ZDo6bW92ZShlbnRyeS5tb3VudF9wb2ludCksICIvZGV2L1RlbXBvcmFyeURpci1YWFhYWFgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5zaGFyZWRfZmxhZ307Ci0gICAgICAgIGNvbnN0IGF1dG8gdGFyZ2V0ID0gbWtkdGVtcChuZXdfZW50cnkuZGlyLmRhdGEoKSk7Ci0gICAgICAgIGlmICghY3JlYXRlY29uLlJlc3RvcmUoKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIFBFUlJPUiA8PCAidGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgTVNfQklORCI7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgTW92ZUVudHJ5IG5ld19lbnRyeXtlbnRyeS5tb3VudF9wb2ludCwgIi9kZXYvVGVtcG9yYXJ5RGlyLVhYWFhYWCIsIGVudHJ5LnNoYXJlZF9mbGFnfTsKKyAgICAgICAgeworICAgICAgICAgICAgQXV0b1NldEZzQ3JlYXRlQ29uIGNyZWF0ZWNvbjsKKyAgICAgICAgICAgIGF1dG8gbmV3X2NvbnRleHQgPSBmc19tZ3JfZ2V0X2NvbnRleHQoZW50cnkubW91bnRfcG9pbnQpOworICAgICAgICAgICAgaWYgKG5ld19jb250ZXh0LmVtcHR5KCkgfHwgIWNyZWF0ZWNvbi5TZXQobmV3X2NvbnRleHQpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBhdXRvIHRhcmdldCA9IG1rZHRlbXAobmV3X2VudHJ5LmRpci5kYXRhKCkpOworICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBQRVJST1IgPDwgInRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIE1TX01PVkUiOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjcmVhdGVjb24uUmVzdG9yZSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcm1kaXIobmV3X2VudHJ5LmRpci5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghcGFyZW50X3ByaXZhdGUgJiYgIXBhcmVudF9tYWRlX3ByaXZhdGUpIHsKLSAgICAgICAgICAgIHBhcmVudF9tYWRlX3ByaXZhdGUgPSBmc19tZ3Jfb3ZlcmxheWZzX3NldF9zaGFyZWRfbW91bnQobW91bnRfcG9pbnQsIGZhbHNlKTsKLSAgICAgICAgfQogICAgICAgICBpZiAobmV3X2VudHJ5LnNoYXJlZF9mbGFnKSB7CiAgICAgICAgICAgICBuZXdfZW50cnkuc2hhcmVkX2ZsYWcgPSBmc19tZ3Jfb3ZlcmxheWZzX3NldF9zaGFyZWRfbW91bnQobmV3X2VudHJ5Lm1vdW50X3BvaW50LCBmYWxzZSk7CiAgICAgICAgIH0KQEAgLTQyOSw5ICs0NjksMTAgQEAKICAgICAgICAgICAgIGlmIChuZXdfZW50cnkuc2hhcmVkX2ZsYWcpIHsKICAgICAgICAgICAgICAgICBmc19tZ3Jfb3ZlcmxheWZzX3NldF9zaGFyZWRfbW91bnQobmV3X2VudHJ5Lm1vdW50X3BvaW50LCB0cnVlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJtZGlyKG5ld19lbnRyeS5kaXIuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBtb3ZlLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUobmV3X2VudHJ5KSk7CisgICAgICAgIG1vdmVkX21vdW50cy5wdXNoX2JhY2soc3RkOjptb3ZlKG5ld19lbnRyeSkpOwogICAgIH0KIAogICAgIC8vIGhpamFjayBfX21vdW50KCkgcmVwb3J0IGZvcm1hdCB0byBoZWxwIHRyaWFnZQpAQCAtNDU1LDcgKzQ5Niw3IEBACiAgICAgfQogCiAgICAgLy8gTW92ZSBzdWJtb3VudHMgYmFjay4KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbW92ZSkgeworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtb3ZlZF9tb3VudHMpIHsKICAgICAgICAgaWYgKCFkZXZfcHJpdmF0ZSAmJiAhZGV2X21hZGVfcHJpdmF0ZSkgewogICAgICAgICAgICAgZGV2X21hZGVfcHJpdmF0ZSA9IGZzX21ncl9vdmVybGF5ZnNfc2V0X3NoYXJlZF9tb3VudCgiL2RldiIsIGZhbHNlKTsKICAgICAgICAgfQpAQCAtNjUwLDIyICs2OTEsMTMgQEAKICAgICAgICAgICAgICFmc19tZ3Jfd2FudHNfb3ZlcmxheWZzKCZuZXdfZW50cnkpKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBhdXRvIG5ld19tb3VudF9wb2ludCA9IGZzX21ncl9tb3VudF9wb2ludChlbnRyeS5tb3VudF9wb2ludCk7Ci0gICAgICAgIGF1dG8gZHVwbGljYXRlX29yX21vcmVfc3BlY2lmaWMgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gY2FuZGlkYXRlcy5iZWdpbigpOyBpdCAhPSBjYW5kaWRhdGVzLmVuZCgpOykgewotICAgICAgICAgICAgYXV0byBpdF9tb3VudF9wb2ludCA9IGZzX21ncl9tb3VudF9wb2ludChpdC0+bW91bnRfcG9pbnQpOwotICAgICAgICAgICAgaWYgKChpdF9tb3VudF9wb2ludCA9PSBuZXdfbW91bnRfcG9pbnQpIHx8Ci0gICAgICAgICAgICAgICAgKGFuZHJvaWQ6OmJhc2U6OlN0YXJ0c1dpdGgobmV3X21vdW50X3BvaW50LCBpdF9tb3VudF9wb2ludCArICIvIikpKSB7Ci0gICAgICAgICAgICAgICAgZHVwbGljYXRlX29yX21vcmVfc3BlY2lmaWMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFuZHJvaWQ6OmJhc2U6OlN0YXJ0c1dpdGgoaXRfbW91bnRfcG9pbnQsIG5ld19tb3VudF9wb2ludCArICIvIikpIHsKLSAgICAgICAgICAgICAgICBpdCA9IGNhbmRpZGF0ZXMuZXJhc2UoaXQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgfQorICAgICAgICBjb25zdCBhdXRvIG5ld19tb3VudF9wb2ludCA9IGZzX21ncl9tb3VudF9wb2ludChuZXdfZW50cnkubW91bnRfcG9pbnQpOworICAgICAgICBpZiAoc3RkOjpmaW5kX2lmKGNhbmRpZGF0ZXMuYmVnaW4oKSwgY2FuZGlkYXRlcy5lbmQoKSwgWyZdKGNvbnN0IGF1dG8mIGl0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZzX21ncl9tb3VudF9wb2ludChpdC5tb3VudF9wb2ludCkgPT0gbmV3X21vdW50X3BvaW50OworICAgICAgICAgICAgfSkgIT0gY2FuZGlkYXRlcy5lbmQoKSkgeworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFkdXBsaWNhdGVfb3JfbW9yZV9zcGVjaWZpYykgY2FuZGlkYXRlcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKG5ld19lbnRyeSkpOworICAgICAgICBjYW5kaWRhdGVzLnB1c2hfYmFjayhzdGQ6Om1vdmUobmV3X2VudHJ5KSk7CiAgICAgfQogICAgIHJldHVybiBjYW5kaWRhdGVzOwogfQpAQCAtNjk5LDcgKzczMSw3IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgYXV0byByZXQgPSB0cnVlOwotICAgIGF1dG8gc2NyYXRjaF9jYW5fYmVfbW91bnRlZCA9IHRydWU7CisgICAgYXV0byBzY3JhdGNoX2Nhbl9iZV9tb3VudGVkID0gIWZzX21ncl9vdmVybGF5ZnNfYWxyZWFkeV9tb3VudGVkKGtTY3JhdGNoTW91bnRQb2ludCwgZmFsc2UpOwogICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmc19tZ3Jfb3ZlcmxheWZzX2NhbmRpZGF0ZV9saXN0KCpmc3RhYikpIHsKICAgICAgICAgaWYgKGZzX21ncl9pc192ZXJpdHlfZW5hYmxlZChlbnRyeSkpIGNvbnRpbnVlOwogICAgICAgICBhdXRvIG1vdW50X3BvaW50ID0gZnNfbWdyX21vdW50X3BvaW50KGVudHJ5Lm1vdW50X3BvaW50KTsKZGlmZiAtLWdpdCBhL2ZzX21nci9mc19tZ3Jfb3ZlcmxheWZzX21vdW50LmggYi9mc19tZ3IvZnNfbWdyX292ZXJsYXlmc19tb3VudC5oCmluZGV4IGYwYWZhYzEuLjk4YjkwMDcgMTAwNjQ0Ci0tLSBhL2ZzX21nci9mc19tZ3Jfb3ZlcmxheWZzX21vdW50LmgKKysrIGIvZnNfbWdyL2ZzX21ncl9vdmVybGF5ZnNfbW91bnQuaApAQCAtNTgsMyArNTgsNCBAQAogYm9vbCBmc19tZ3Jfb3ZlcmxheWZzX2FscmVhZHlfbW91bnRlZChjb25zdCBzdGQ6OnN0cmluZyYgbW91bnRfcG9pbnQsIGJvb2wgb3ZlcmxheV9vbmx5ID0gdHJ1ZSk7CiBib29sIGZzX21ncl93YW50c19vdmVybGF5ZnMoYW5kcm9pZDo6ZnNfbWdyOjpGc3RhYkVudHJ5KiBlbnRyeSk7CiBhbmRyb2lkOjpmc19tZ3I6OkZzdGFiIGZzX21ncl9vdmVybGF5ZnNfY2FuZGlkYXRlX2xpc3QoY29uc3QgYW5kcm9pZDo6ZnNfbWdyOjpGc3RhYiYgZnN0YWIpOworc3RkOjpzdHJpbmcgR2V0RW5jb2RlZEJhc2VEaXJGb3JNb3VudFBvaW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBtb3VudF9wb2ludCk7CmRpZmYgLS1naXQgYS9mc19tZ3IvZnNfbWdyX3JlbW91bnQuY3BwIGIvZnNfbWdyL2ZzX21ncl9yZW1vdW50LmNwcAppbmRleCA0YjNhNWQzLi4xODg5MmY5IDEwMDY0NAotLS0gYS9mc19tZ3IvZnNfbWdyX3JlbW91bnQuY3BwCisrKyBiL2ZzX21nci9mc19tZ3JfcmVtb3VudC5jcHAKQEAgLTg4LDE3ICs4OCw2IEBACiAgICAgcmV0dXJuIGVudHJ5Lm1vdW50X3BvaW50OwogfQogCi1jb25zdCBGc3RhYkVudHJ5KiBHZXRXcmFwcGVkRW50cnkoY29uc3QgRnN0YWImIG92ZXJsYXlmc19jYW5kaWRhdGVzLCBjb25zdCBGc3RhYkVudHJ5JiBlbnRyeSkgewotICAgIGF1dG8gbW91bnRfcG9pbnQgPSBzeXN0ZW1fbW91bnRfcG9pbnQoZW50cnkpOwotICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYob3ZlcmxheWZzX2NhbmRpZGF0ZXMuYmVnaW4oKSwgb3ZlcmxheWZzX2NhbmRpZGF0ZXMuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbJm1vdW50X3BvaW50XShjb25zdCBhdXRvJiBlbnRyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbmRyb2lkOjpiYXNlOjpTdGFydHNXaXRoKG1vdW50X3BvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9tb3VudF9wb2ludChlbnRyeSkgKyAiLyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgaWYgKGl0ID09IG92ZXJsYXlmc19jYW5kaWRhdGVzLmVuZCgpKSByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gJigqaXQpOwotfQotCiBjbGFzcyBNeUxvZ2dlciB7CiAgIHB1YmxpYzoKICAgICBleHBsaWNpdCBNeUxvZ2dlcihib29sIHZlcmJvc2UpIDogdmVyYm9zZV8odmVyYm9zZSkge30KQEAgLTE5Niw5ICsxODUsNiBAQAogICAgIGlmIChhdXRvIGNhbmRpZGF0ZV9lbnRyeSA9IEdldEVudHJ5Rm9yTW91bnRQb2ludCgmY2FuZGlkYXRlcywgZW50cnkubW91bnRfcG9pbnQpKSB7CiAgICAgICAgIHJldHVybiBjYW5kaWRhdGVfZW50cnktPmZzX3R5cGUgPT0gZW50cnkuZnNfdHlwZTsKICAgICB9Ci0gICAgaWYgKEdldFdyYXBwZWRFbnRyeShjYW5kaWRhdGVzLCBlbnRyeSkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjUyLDExICsyMzgsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgRnN0YWJFbnRyeSogZW50cnkgPSAmKml0OwotICAgICAgICBpZiAoYXV0byB3cmFwID0gR2V0V3JhcHBlZEVudHJ5KGNhbmRpZGF0ZXMsICplbnRyeSk7IHdyYXAgIT0gbnVsbHB0cikgewotICAgICAgICAgICAgTE9HKElORk8pIDw8ICJwYXJ0aXRpb24gIiA8PCBhcmcgPDwgIiBjb3ZlcmVkIGJ5IG92ZXJsYXlmcyBmb3IgIiA8PCB3cmFwLT5tb3VudF9wb2ludAotICAgICAgICAgICAgICAgICAgICAgIDw8ICIsIHN3aXRjaGluZyI7Ci0gICAgICAgICAgICBlbnRyeSA9IHdyYXA7Ci0gICAgICAgIH0KIAogICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgcmVtb3VudGVkLCBpbmNsdWRlIGl0IHNvIGl0IGdldHMgZ3JhY2VmdWxseSBza2lwcGVkCiAgICAgICAgIC8vIGxhdGVyIG9uLgpkaWZmIC0tZ2l0IGEvZnNfbWdyL2xpYmxwL0FuZHJvaWQuYnAgYi9mc19tZ3IvbGlibHAvQW5kcm9pZC5icAppbmRleCA5OTZmZmQ3Li4yNGVlYmRmIDEwMDY0NAotLS0gYS9mc19tZ3IvbGlibHAvQW5kcm9pZC5icAorKysgYi9mc19tZ3IvbGlibHAvQW5kcm9pZC5icApAQCAtOTMsOCArOTMsOCBAQAogICAgIHNyY3M6IFsKICAgICAgICAgImJ1aWxkZXJfdGVzdC5jcHAiLAogICAgICAgICAic3VwZXJfbGF5b3V0X2J1aWxkZXJfdGVzdC5jcHAiLAotICAgICAgICAidGVzdF9wYXJ0aXRpb25fb3BlbmVyLmNwcCIsCiAgICAgICAgICJ1dGlsaXR5X3Rlc3QuY3BwIiwKKyAgICAgICAgIjpUZXN0UGFydGl0aW9uT3BlbmVyX2dyb3VwIiwKICAgICBdLAogfQogCkBAIC0xMjIsMyArMTIyLDggQEAKICAgICBuYW1lOiAidnRzX2tlcm5lbF9saWJscF90ZXN0IiwKICAgICBkZWZhdWx0czogWyJsaWJscF90ZXN0X2RlZmF1bHRzIl0sCiB9CisKK2ZpbGVncm91cCB7CisgICBuYW1lOiAiVGVzdFBhcnRpdGlvbk9wZW5lcl9ncm91cCIsCisgICBzcmNzOiBbICJ0ZXN0X3BhcnRpdGlvbl9vcGVuZXIuY3BwIl0sCit9CmRpZmYgLS1naXQgYS9mc19tZ3IvbGlibHAvZnV6emVyL0FuZHJvaWQuYnAgYi9mc19tZ3IvbGlibHAvZnV6emVyL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllMzUwOQotLS0gL2Rldi9udWxsCisrKyBiL2ZzX21nci9saWJscC9mdXp6ZXIvQW5kcm9pZC5icApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCisKK2NjX2RlZmF1bHRzIHsKKyAgICBuYW1lOiAibGlibHBfZnV6el9kZWZhdWx0cyIsCisgICAgaGVhZGVyX2xpYnM6IFsKKyAgICAgICAgImxpYnN0b3JhZ2VfbGl0ZXJhbHNfaGVhZGVycyIsCisgICAgXSwKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGlibHAiLAorICAgICAgICAibGliYmFzZSIsCisgICAgICAgICJsaWJsb2ciLAorICAgIF0sCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgXSwKKyAgICBpbmNsdWRlX2RpcnM6IFsKKyAgICAgICAgInN5c3RlbS9jb3JlL2ZzX21nci9saWJscCIsCisgICAgXSwKKyAgICBmdXp6X2NvbmZpZzogeworICAgICAgICBjYzogWworICAgICAgICAgICAgImFuZHJvaWQtbWVkaWEtZnV6emluZy1yZXBvcnRzQGdvb2dsZS5jb20iLAorICAgICAgICBdLAorICAgICAgICBjb21wb25lbnRpZDogNTkxNDgsCisgICAgICAgIGhvdGxpc3RzOiBbIjQ1OTMzMTEiXSwKKyAgICAgICAgZGVzY3JpcHRpb246ICJUaGUgZnV6emVycyB0YXJnZXQgdGhlIEFQSXMgb2YgYWxsIGxpYmxwIG1vZHVsZXMiLAorICAgICAgICB2ZWN0b3I6ICJsb2NhbF9ub19wcml2aWxlZ2VzX3JlcXVpcmVkIiwKKyAgICAgICAgc2VydmljZV9wcml2aWxlZ2U6ICJwcml2aWxlZ2VkIiwKKyAgICAgICAgdXNlcnM6ICJtdWx0aV91c2VyIiwKKyAgICAgICAgZnV6emVkX2NvZGVfdXNhZ2U6ICJzaGlwcGVkIgorICAgIH0KK30KKworY2NfZnV6eiB7CisgICAgbmFtZTogImxpYmxwX2J1aWxkZXJfZnV6emVyIiwKKyAgICBzcmNzOiBbImxpYmxwX2J1aWxkZXJfZnV6emVyLmNwcCJdLAorICAgIGRlZmF1bHRzOiBbImxpYmxwX2Z1enpfZGVmYXVsdHMiXSwKK30KKworY2NfZnV6eiB7CisgICAgbmFtZTogImxpYmxwX3N1cGVyX2xheW91dF9idWlsZGVyX2Z1enplciIsCisgICAgc3JjczogWyJsaWJscF9zdXBlcl9sYXlvdXRfYnVpbGRlcl9mdXp6ZXIuY3BwIl0sCisgICAgZGVmYXVsdHM6IFsibGlibHBfZnV6el9kZWZhdWx0cyJdLAorfQorCitweXRob25fYmluYXJ5X2hvc3QgeworICAgIG5hbWU6ICJpbWFnZV9nZW5fcmFuZCIsCisgICAgc3JjczogWyJpbWFnZV9nZW5fcmFuZC5weSJdLAorfQorCitnZW5ydWxlX2RlZmF1bHRzIHsKKyAgICBuYW1lOiAidGVzdF9kYXRhX2dlbl9kZWZhdWx0cyIsCisgICAgdG9vbHM6IFsKKyAgICAgICAgImltYWdlX2dlbl9yYW5kIiwKKyAgICBdLAorfQorCisvLyBGYWtlIGR0YiBpbWFnZS4KK2dlbnJ1bGUgeworICAgIG5hbWU6ICJ0ZXN0X2R0YiIsCisgICAgZGVmYXVsdHM6IFsidGVzdF9kYXRhX2dlbl9kZWZhdWx0cyJdLAorICAgIG91dDogWyJ0ZXN0X2R0Yi5pbWciXSwKKyAgICBjbWQ6ICIkKGxvY2F0aW9uIGltYWdlX2dlbl9yYW5kKSAtLXNlZWQgZHRiIC0tbGVuZ3RoIDEwMjQgPiAkKG91dCkiLAorfQorCisvLyBGYWtlIGJvb3Rjb25maWcgaW1hZ2UuCitnZW5ydWxlIHsKKyAgICBuYW1lOiAidGVzdF9ib290Y29uZmlnIiwKKyAgICBkZWZhdWx0czogWyJ0ZXN0X2RhdGFfZ2VuX2RlZmF1bHRzIl0sCisgICAgb3V0OiBbInRlc3RfYm9vdGNvbmZpZy5pbWciXSwKKyAgICBjbWQ6ICIkKGxvY2F0aW9uIGltYWdlX2dlbl9yYW5kKSAtLXNlZWQgYm9vdGNvbmZpZyAtLWxlbmd0aCAxMDI0ID4gJChvdXQpIiwKK30KKworLy8gRmFrZSB2ZW5kb3IgcmFtZGlzayB3aXRoIHR5cGUgIm5vbmUiLgorZ2VucnVsZSB7CisgICAgbmFtZTogInRlc3RfdmVuZG9yX3JhbWRpc2tfbm9uZSIsCisgICAgZGVmYXVsdHM6IFsidGVzdF9kYXRhX2dlbl9kZWZhdWx0cyJdLAorICAgIG91dDogWyJ0ZXN0X3ZlbmRvcl9yYW1kaXNrX25vbmUuaW1nIl0sCisgICAgY21kOiAiJChsb2NhdGlvbiBpbWFnZV9nZW5fcmFuZCkgLS1zZWVkIHZlbmRvcl9yYW1kaXNrX25vbmUgLS1sZW5ndGggMTAyNCA+ICQob3V0KSIsCit9CisKKy8vIEZha2UgdmVuZG9yIHJhbWRpc2sgd2l0aCB0eXBlICJwbGF0Zm9ybSIuCitnZW5ydWxlIHsKKyAgICBuYW1lOiAidGVzdF92ZW5kb3JfcmFtZGlza19wbGF0Zm9ybSIsCisgICAgZGVmYXVsdHM6IFsidGVzdF9kYXRhX2dlbl9kZWZhdWx0cyJdLAorICAgIG91dDogWyJ0ZXN0X3ZlbmRvcl9yYW1kaXNrX3BsYXRmb3JtLmltZyJdLAorICAgIGNtZDogIiQobG9jYXRpb24gaW1hZ2VfZ2VuX3JhbmQpIC0tc2VlZCB2ZW5kb3JfcmFtZGlza19wbGF0Zm9ybSAtLWxlbmd0aCAxMDI0ID4gJChvdXQpIiwKK30KKworLy8gRmFrZSByZXBsYWNlbWVudCByYW1kaXNrLgorZ2VucnVsZSB7CisgICAgbmFtZTogInRlc3RfdmVuZG9yX3JhbWRpc2tfcmVwbGFjZSIsCisgICAgZGVmYXVsdHM6IFsidGVzdF9kYXRhX2dlbl9kZWZhdWx0cyJdLAorICAgIG91dDogWyJ0ZXN0X3ZlbmRvcl9yYW1kaXNrX3JlcGxhY2UuaW1nIl0sCisgICAgY21kOiAiJChsb2NhdGlvbiBpbWFnZV9nZW5fcmFuZCkgLS1zZWVkIHJlcGxhY2UgLS1sZW5ndGggMzA3MiA+ICQob3V0KSIsCit9CisKKy8vIEdlbnJ1bGVzIGZvciB0ZXN0IHZlbmRvciBib290IGltYWdlcy4KK2Zhc3Rib290X3NpZ25fdGVzdF9pbWFnZSA9ICIkKGxvY2F0aW9uIGF2YnRvb2wpIGFkZF9oYXNoX2Zvb3RlciAtLXNhbHQgMDAgLS1pbWFnZSAkKG91dCkgIiArCisgICAgIi0tcGFydGl0aW9uX25hbWUgdmVuZG9yX2Jvb3QgLS1wYXJ0aXRpb25fc2l6ZSAkJCgoIDEgKiAxMDI0ICogMTAyNCApKSIKKworZ2VucnVsZV9kZWZhdWx0cyB7CisgICAgbmFtZTogInRlc3RfdmVuZG9yX2Jvb3RfZ2VuX2RlZmF1bHRzIiwKKyAgICBkZWZhdWx0czogWyJ0ZXN0X2RhdGFfZ2VuX2RlZmF1bHRzIl0sCisgICAgdG9vbHM6IFsKKyAgICAgICAgImF2YnRvb2wiLAorICAgICAgICAibWtib290aW1nIiwKKyAgICBdLAorfQorCitnZW5ydWxlIHsKKyAgICBuYW1lOiAidGVzdF92ZW5kb3JfYm9vdF92MyIsCisgICAgZGVmYXVsdHM6IFsidGVzdF92ZW5kb3JfYm9vdF9nZW5fZGVmYXVsdHMiXSwKKyAgICBvdXQ6IFsidGVzdF92ZW5kb3JfYm9vdF92My5pbWciXSwKKyAgICBzcmNzOiBbCisgICAgICAgICI6dGVzdF9kdGIiLAorICAgICAgICAiOnRlc3RfdmVuZG9yX3JhbWRpc2tfbm9uZSIsCisgICAgXSwKKyAgICBjbWQ6ICIkKGxvY2F0aW9uIG1rYm9vdGltZykgLS1oZWFkZXJfdmVyc2lvbiAzICIgKworICAgICAgICAiLS12ZW5kb3JfcmFtZGlzayAkKGxvY2F0aW9uIDp0ZXN0X3ZlbmRvcl9yYW1kaXNrX25vbmUpICIgKworICAgICAgICAiLS1kdGIgJChsb2NhdGlvbiA6dGVzdF9kdGIpICIgKworICAgICAgICAiLS12ZW5kb3JfYm9vdCAkKG91dCkgJiYgIiArCisgICAgICAgIGZhc3Rib290X3NpZ25fdGVzdF9pbWFnZSwKK30KKworZ2VucnVsZSB7CisgICAgbmFtZTogInRlc3RfdmVuZG9yX2Jvb3RfdjRfd2l0aG91dF9mcmFnIiwKKyAgICBkZWZhdWx0czogWyJ0ZXN0X3ZlbmRvcl9ib290X2dlbl9kZWZhdWx0cyJdLAorICAgIG91dDogWyJ0ZXN0X3ZlbmRvcl9ib290X3Y0X3dpdGhvdXRfZnJhZy5pbWciXSwKKyAgICBzcmNzOiBbCisgICAgICAgICI6dGVzdF9kdGIiLAorICAgICAgICAiOnRlc3RfdmVuZG9yX3JhbWRpc2tfbm9uZSIsCisgICAgICAgICI6dGVzdF9ib290Y29uZmlnIiwKKyAgICBdLAorICAgIGNtZDogIiQobG9jYXRpb24gbWtib290aW1nKSAtLWhlYWRlcl92ZXJzaW9uIDQgIiArCisgICAgICAgICItLXZlbmRvcl9yYW1kaXNrICQobG9jYXRpb24gOnRlc3RfdmVuZG9yX3JhbWRpc2tfbm9uZSkgIiArCisgICAgICAgICItLWR0YiAkKGxvY2F0aW9uIDp0ZXN0X2R0YikgIiArCisgICAgICAgICItLXZlbmRvcl9ib290Y29uZmlnICQobG9jYXRpb24gOnRlc3RfYm9vdGNvbmZpZykgIiArCisgICAgICAgICItLXZlbmRvcl9ib290ICQob3V0KSAmJiAiICsKKyAgICAgICAgZmFzdGJvb3Rfc2lnbl90ZXN0X2ltYWdlLAorfQorCitnZW5ydWxlIHsKKyAgICBuYW1lOiAidGVzdF92ZW5kb3JfYm9vdF92NF93aXRoX2ZyYWciLAorICAgIGRlZmF1bHRzOiBbInRlc3RfdmVuZG9yX2Jvb3RfZ2VuX2RlZmF1bHRzIl0sCisgICAgb3V0OiBbInRlc3RfdmVuZG9yX2Jvb3RfdjRfd2l0aF9mcmFnLmltZyJdLAorICAgIHNyY3M6IFsKKyAgICAgICAgIjp0ZXN0X2R0YiIsCisgICAgICAgICI6dGVzdF92ZW5kb3JfcmFtZGlza19ub25lIiwKKyAgICAgICAgIjp0ZXN0X3ZlbmRvcl9yYW1kaXNrX3BsYXRmb3JtIiwKKyAgICAgICAgIjp0ZXN0X2Jvb3Rjb25maWciLAorICAgIF0sCisgICAgY21kOiAiJChsb2NhdGlvbiBta2Jvb3RpbWcpIC0taGVhZGVyX3ZlcnNpb24gNCAiICsKKyAgICAgICAgIi0tZHRiICQobG9jYXRpb24gOnRlc3RfZHRiKSAiICsKKyAgICAgICAgIi0tdmVuZG9yX2Jvb3Rjb25maWcgJChsb2NhdGlvbiA6dGVzdF9ib290Y29uZmlnKSAiICsKKyAgICAgICAgIi0tcmFtZGlza190eXBlIG5vbmUgLS1yYW1kaXNrX25hbWUgbm9uZV9yYW1kaXNrICIgKworICAgICAgICAiLS12ZW5kb3JfcmFtZGlza19mcmFnbWVudCAkKGxvY2F0aW9uIDp0ZXN0X3ZlbmRvcl9yYW1kaXNrX25vbmUpICIgKworICAgICAgICAiLS1yYW1kaXNrX3R5cGUgcGxhdGZvcm0gLS1yYW1kaXNrX25hbWUgcGxhdGZvcm1fcmFtZGlzayAiICsKKyAgICAgICAgIi0tdmVuZG9yX3JhbWRpc2tfZnJhZ21lbnQgJChsb2NhdGlvbiA6dGVzdF92ZW5kb3JfcmFtZGlza19wbGF0Zm9ybSkgIiArCisgICAgICAgICItLXZlbmRvcl9ib290ICQob3V0KSAmJiAiICsKKyAgICAgICAgZmFzdGJvb3Rfc2lnbl90ZXN0X2ltYWdlLAorfQorCitjY19mdXp6IHsKKyAgICBuYW1lOiAibGlibHBfYXBpc19mdXp6ZXIiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImxpYmxwX2FwaXNfZnV6emVyLmNwcCIsCisgICAgICAgICI6VGVzdFBhcnRpdGlvbk9wZW5lcl9ncm91cCIsCisgICAgXSwKKyAgICBkZWZhdWx0czogWyJsaWJscF9mdXp6X2RlZmF1bHRzIl0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYnNwYXJzZSIsCisgICAgXSwKKyAgICBkYXRhOiBbCisgICAgICAgICI6dGVzdF9kdGIiLAorICAgICAgICAiOnRlc3RfYm9vdGNvbmZpZyIsCisgICAgICAgICI6dGVzdF92ZW5kb3JfcmFtZGlza19ub25lIiwKKyAgICAgICAgIjp0ZXN0X3ZlbmRvcl9yYW1kaXNrX3BsYXRmb3JtIiwKKyAgICAgICAgIjp0ZXN0X3ZlbmRvcl9yYW1kaXNrX3JlcGxhY2UiLAorICAgICAgICAiOnRlc3RfdmVuZG9yX2Jvb3RfdjMiLAorICAgICAgICAiOnRlc3RfdmVuZG9yX2Jvb3RfdjRfd2l0aG91dF9mcmFnIiwKKyAgICAgICAgIjp0ZXN0X3ZlbmRvcl9ib290X3Y0X3dpdGhfZnJhZyIsCisgICAgXSwKKyAgICBjZmxhZ3M6IFsKKyAgICAgICItV25vLXVudXNlZC1wYXJhbWV0ZXIiLAorICAgXSwKK30KZGlmZiAtLWdpdCBhL2ZzX21nci9saWJscC9mdXp6ZXIvUkVBRE1FLm1kIGIvZnNfbWdyL2xpYmxwL2Z1enplci9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzMWUyZQotLS0gL2Rldi9udWxsCisrKyBiL2ZzX21nci9saWJscC9mdXp6ZXIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTM2IEBACisjIEZ1enplcnMgZm9yIGxpYmxwCisjIyBUYWJsZSBvZiBjb250ZW50cworKyAgW2xpYmxwX2J1aWxkZXJfZnV6emVyXSgjQnVpbGRlcikKKysgIFtsaWJscF9zdXBlcl9sYXlvdXRfYnVpbGRlcl9mdXp6ZXJdKCNTdXBlckJ1aWxkZXIpCisrICBbbGlibHBfYXBpc19mdXp6ZXJdKCNBUElzKQorCisjIDxhICBuYW1lPSJCdWlsZGVyIj48L2E+IEZ1enplciBmb3IgTGlibHBCdWlsZGVyCisKK0xpYmxwQnVpbGRlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisxLiBrQXR0cmlidXRlVHlwZXMgKHBhcmFtZXRlciBuYW1lOiAiYXR0cmlidXRlIikKKzIuIGJsb2NrRGV2U2l6ZSAocGFyYW1ldGVyIG5hbWU6ICJibG9ja2Rldl9zaXplIikKKzMuIG1ldGFkYXRhTWF4U2l6ZSAocGFyYW1ldGVyIG5hbWU6ICJtZXRhZGF0YV9tYXhfc2l6ZSIpCis0LiBtZXRhZGF0YVNsb3RDb3VudCAocGFyYW1ldGVyIG5hbWU6ICJtZXRhZGF0YV9zbG90X2NvdW50IikKKzUuIHBhcnRpdGlvbk5hbWUgKHBhcmFtZXRlciBuYW1lOiAicGFydGl0aW9uX25hbWUiKQorNi4gc3VwZXJCbG9ja0RldmljZU5hbWUgKHBhcmFtZXRlciBuYW1lOiAiYmxvY2tfZGV2aWNlX25hbWUiKQorNy4gYmxvY2tEZXZpY2VJbmZvU2l6ZSAocGFyYW1ldGVyIG5hbWU6ICJibG9ja19kZXZpY2VfaW5mb19zaXplIikKKzguIGFsaWdubWVudCAocGFyYW1ldGVyIG5hbWU6ICJhbGlnbm1lbnQiKQorOS4gYWxpZ25tZW50T2Zmc2V0IChwYXJhbWV0ZXIgbmFtZTogImFsaWdubWVudF9vZmZzZXQiKQorMTAuIGxvZ2ljYWxCbG9ja1NpemUgKHBhcmFtZXRlciBuYW1lOiAibG9naWNhbF9ibG9ja19zaXplIikKKzExLiBtYXhNZXRhZGF0YVNpemUgKHBhcmFtZXRlciBuYW1lOiAibWF4X21ldGFkYXRhX3NpemUiKQorMTIuIG51bVNsb3RzIChwYXJhbWV0ZXIgbmFtZTogIm1ldGFkYXRhX3Nsb3RfY291bnQiKQorMTMuIGRldmljZUluZGV4IChwYXJhbWV0ZXIgbmFtZTogImRldmljZV9pbmRleCIpCisxNC4gc3RhcnQgKHBhcmFtZXRlciBuYW1lOiAic3RhcnQiKQorMTUuIGVuZCAocGFyYW1ldGVyIG5hbWU6ICJlbmQiKQorMTYuIGFkZGVkR3JvdXBOYW1lIChwYXJhbWV0ZXIgbmFtZTogImdyb3VwX25hbWUiKQorMTcuIHBhcnRpdGlvbkdyb3VwTmFtZSAocGFyYW1ldGVyIG5hbWU6ICJwYXJ0aXRpb25fbmFtZSIpCisxOC4gbnVtU2VjdG9ycyAocGFyYW1ldGVyIG5hbWU6ICJudW1fc2VjdG9ycyIpCisxOS4gcGh5c2ljYWxTZWN0b3IgKHBhcmFtZXRlciBuYW1lOiAicGh5c2ljYWxfc2VjdG9yIikKKzIwLiByZXNpemVkUGFydGl0aW9uU2l6ZSAocGFyYW1ldGVyIG5hbWU6ICJyZXF1ZXN0ZWRfc2l6ZSIpCisKK3wgUGFyYW1ldGVyfCBWYWxpZCBWYWx1ZXN8IENvbmZpZ3VyZWQgVmFsdWV8Cit8LS0tLS0tLS0tLS0tLSB8LS0tLS0tLS0tLS0tLXwgLS0tLS0gfAorfGBrQXR0cmlidXRlVHlwZXNgfCAxLmBMUF9QQVJUSVRJT05fQVRUUl9OT05FYCw8YnIvPiAyLmBMUF9QQVJUSVRJT05fQVRUUl9SRUFET05MWWAsPGJyLz4gMy5gTFBfUEFSVElUSU9OX0FUVFJfU0xPVF9TVUZGSVhFRGAsPGJyLz4gNC5gTFBfUEFSVElUSU9OX0FUVFJfVVBEQVRFRGAsPGJyLz4gNS5gTFBfUEFSVElUSU9OX0FUVFJfRElTQUJMRURgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBibG9ja0RldlNpemVgfCBJbnRlZ2VyIHZhbHVlIGZyb20gYDBgIHRvIGAxMDAwMDBgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBtZXRhZGF0YU1heFNpemVgfCBJbnRlZ2VyIHZhbHVlIGZyb20gYDBgIHRvIGAxMDAwMGAgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBtZXRhZGF0YVNsb3RDb3VudGB8IEludGVnZXIgdmFsdWUgZnJvbSBgMGAgdG8gYDJgIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgcGFydGl0aW9uTmFtZWB8IFN0cmluZyB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8YHN1cGVyQmxvY2tEZXZpY2VOYW1lYHwgU3RyaW5nIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgYmxvY2tEZXZpY2VJbmZvU2l6ZWB8IEludGVnZXIgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBhbGlnbm1lbnRgfCBJbnRlZ2VyIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgYWxpZ25tZW50T2Zmc2V0YHwgSW50ZWdlciB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8YGxvZ2ljYWxCbG9ja1NpemVgfCBJbnRlZ2VyIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgbWF4TWV0YWRhdGFTaXplYHwgSW50ZWdlciB2YWx1ZSBmcm9tIGAwYCB0byBgMTAwMDBgIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgbnVtU2xvdHNgfCBJbnRlZ2VyIHZhbHVlIGZyb20gYDBgIHRvIGAyYCB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8YGRldmljZUluZGV4YHwgSW50ZWdlciB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8YHN0YXJ0YHwgSW50ZWdlciB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8YGVuZGB8IEludGVnZXIgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBwYXJ0aXRpb25Hcm91cE5hbWVgfCBTdHJpbmcgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBudW1TZWN0b3JzYHwgSW50ZWdlciB2YWx1ZSBmcm9tIGAxYCB0byBgMTAwMDAwMGAgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBwaHlzaWNhbFNlY3RvcmB8IEludGVnZXIgdmFsdWUgZnJvbSBgMWAgdG8gYDEwMDAwMDBgIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgcmVzaXplZFBhcnRpdGlvblNpemVgfCBJbnRlZ2VyIHZhbHVlIGZyb20gYDBgIHRvIGAxMDAwMGAgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorCisjIyMjIFN0ZXBzIHRvIHJ1bgorMS4gQnVpbGQgdGhlIGZ1enplcgorYGBgCisgICQgbW0gLWokKG5wcm9jKSBsaWJscF9idWlsZGVyX2Z1enplcgorYGBgCisyLiBSdW4gb24gZGV2aWNlCitgYGAKKyAgJCBhZGIgc3luYyBkYXRhCisgICQgYWRiIHNoZWxsIC9kYXRhL2Z1enovYXJtNjQvbGlibHBfYnVpbGRlcl9mdXp6ZXIvbGlibHBfYnVpbGRlcl9mdXp6ZXIKK2BgYAorCisjIDxhICBuYW1lPSJTdXBlckJ1aWxkZXIiPjwvYT4gRnV6emVyIGZvciBMaWJscFN1cGVyTGF5b3V0QnVpbGRlcgorCitTdXBlckxheW91dEJ1aWxkZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorMS4ga0F0dHJpYnV0ZVR5cGVzIChwYXJhbWV0ZXIgbmFtZTogImF0dHJpYnV0ZSIpCisyLiBibG9ja0RldlNpemUgKHBhcmFtZXRlciBuYW1lOiAiYmxvY2tkZXZfc2l6ZSIpCiszLiBtZXRhZGF0YU1heFNpemUgKHBhcmFtZXRlciBuYW1lOiAibWV0YWRhdGFfbWF4X3NpemUiKQorNC4gbWV0YWRhdGFTbG90Q291bnQgKHBhcmFtZXRlciBuYW1lOiAibWV0YWRhdGFfc2xvdF9jb3VudCIpCis1LiBwYXJ0aXRpb25OYW1lIChwYXJhbWV0ZXIgbmFtZTogInBhcnRpdGlvbl9uYW1lIikKKzYuIGRhdGEgKHBhcmFtZXRlciBuYW1lOiAiZGF0YSIpCis3LiBpbWFnZU5hbWUgKHBhcmFtZXRlciBuYW1lOiAiaW1hZ2VfbmFtZSIpCisKK3wgUGFyYW1ldGVyfCBWYWxpZCBWYWx1ZXN8IENvbmZpZ3VyZWQgVmFsdWV8Cit8LS0tLS0tLS0tLS0tLSB8LS0tLS0tLS0tLS0tLXwgLS0tLS0gfAorfGBrQXR0cmlidXRlVHlwZXNgfCAxLmBMUF9QQVJUSVRJT05fQVRUUl9OT05FYCw8YnIvPiAyLmBMUF9QQVJUSVRJT05fQVRUUl9SRUFET05MWWAsPGJyLz4gMy5gTFBfUEFSVElUSU9OX0FUVFJfU0xPVF9TVUZGSVhFRGAsPGJyLz4gNC5gTFBfUEFSVElUSU9OX0FUVFJfVVBEQVRFRGAsPGJyLz4gNS5gTFBfUEFSVElUSU9OX0FUVFJfRElTQUJMRURgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBibG9ja0RldlNpemVgfCBJbnRlZ2VyIHZhbHVlIGZyb20gYDBgIHRvIGAxMDAwMDBgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBtZXRhZGF0YU1heFNpemVgfCBJbnRlZ2VyIHZhbHVlIGZyb20gYDBgIHRvIGAxMDAwMGAgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBtZXRhZGF0YVNsb3RDb3VudGB8IEludGVnZXIgdmFsdWUgZnJvbSBgMGAgdG8gYDJgIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgcGFydGl0aW9uTmFtZWB8IFN0cmluZyB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8YGRhdGFgfCBTdHJpbmcgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBpbWFnZU5hbWVgfCBTdHJpbmcgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorCisjIyMjIFN0ZXBzIHRvIHJ1bgorMS4gQnVpbGQgdGhlIGZ1enplcgorYGBgCisgICQgbW0gLWokKG5wcm9jKSBsaWJscF9zdXBlcl9sYXlvdXRfYnVpbGRlcl9mdXp6ZXIKK2BgYAorMi4gUnVuIG9uIGRldmljZQorYGBgCisgICQgYWRiIHN5bmMgZGF0YQorICAkIGFkYiBzaGVsbCAvZGF0YS9mdXp6L2FybTY0L2xpYmxwX3N1cGVyX2xheW91dF9idWlsZGVyX2Z1enplci9saWJscF9zdXBlcl9sYXlvdXRfYnVpbGRlcl9mdXp6ZXIKK2BgYAorCisjIDxhICBuYW1lPSJBUElzIj48L2E+IEZ1enplciBmb3IgTGlibHBBcGlzCisKK0xpYmxwQVBJcyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisxLiBibG9ja0RldmljZUluZm9TaXplIChwYXJhbWV0ZXIgbmFtZTogImJsb2NrX2RldmljZV9pbmZvX3NpemUiKQorMi4gYWxpZ25tZW50IChwYXJhbWV0ZXIgbmFtZTogImFsaWdubWVudCIpCiszLiBhbGlnbm1lbnRPZmZzZXQgKHBhcmFtZXRlciBuYW1lOiAiYWxpZ25tZW50X29mZnNldCIpCis0LiBsb2dpY2FsQmxvY2tTaXplIChwYXJhbWV0ZXIgbmFtZTogImxvZ2ljYWxfYmxvY2tfc2l6ZSIpCis1LiBibG9ja0RldlNpemUgKHBhcmFtZXRlciBuYW1lOiAiYmxvY2tkZXZfc2l6ZSIpCis2LiBtZXRhZGF0YU1heFNpemUgKHBhcmFtZXRlciBuYW1lOiAibWV0YWRhdGFfbWF4X3NpemUiKQorNy4gbWV0YWRhdGFTbG90Q291bnQgKHBhcmFtZXRlciBuYW1lOiAibWV0YWRhdGFfc2xvdF9jb3VudCIpCis4LiBibG9ja0RldmljZUluZm9OYW1lIChwYXJhbWV0ZXIgbmFtZTogImJsb2NrX2RldmljZV9pbmZvX25hbWUiKQorOS4gbnVtU2VjdG9ycyAocGFyYW1ldGVyIG5hbWU6ICJudW1fc2VjdG9ycyIpCisxMC4gcGh5c2ljYWxTZWN0b3IgKHBhcmFtZXRlciBuYW1lOiAicGh5c2ljYWxfc2VjdG9yIikKKzExLiBzcGFyc2lmeSAocGFyYW1ldGVyIG5hbWU6ICJzcGFyc2lmeSIpCisxMi4gYnVmZmVyIChwYXJhbWV0ZXIgbmFtZTogImRhdGEiKQorCit8IFBhcmFtZXRlcnwgVmFsaWQgVmFsdWVzfCBDb25maWd1cmVkIFZhbHVlfAorfC0tLS0tLS0tLS0tLS0gfC0tLS0tLS0tLS0tLS18IC0tLS0tIHwKK3xgYmxvY2tEZXZpY2VJbmZvU2l6ZWB8IEludGVnZXIgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBhbGlnbm1lbnRgfCBJbnRlZ2VyIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgYWxpZ25tZW50T2Zmc2V0YHwgSW50ZWdlciB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8YGxvZ2ljYWxCbG9ja1NpemVgfCBJbnRlZ2VyIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgYmxvY2tEZXZTaXplYHwgSW50ZWdlciB2YWx1ZSBpbiBtdWx0aXBsZXMgb2YgYExQX1NFQ1RPUl9TSVpFYHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgbWV0YWRhdGFNYXhTaXplYHwgSW50ZWdlciB2YWx1ZSBmcm9tIGAwYCB0byBgMTAwMDBgIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgbWV0YWRhdGFTbG90Q291bnRgfCBJbnRlZ2VyIHZhbHVlIGZyb20gYDBgIHRvIGAyYCB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8YGJsb2NrRGV2aWNlSW5mb05hbWVgfCBTdHJpbmcgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBudW1TZWN0b3JzYHwgSW50ZWdlciB2YWx1ZSBmcm9tIGAxYCB0byBgMTAwMDAwMGAgfFZhbHVlIG9idGFpbmVkIGZyb20gRnV6emVkRGF0YVByb3ZpZGVyfAorfGBwaHlzaWNhbFNlY3RvcmB8IEludGVnZXIgdmFsdWUgZnJvbSBgMWAgdG8gYDEwMDAwMDBgIHxWYWx1ZSBvYnRhaW5lZCBmcm9tIEZ1enplZERhdGFQcm92aWRlcnwKK3xgYWxpZ25tZW50YHwgQm9vbCB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8Cit8YGFsaWdubWVudGB8IFZlY3RvciB8VmFsdWUgb2J0YWluZWQgZnJvbSBGdXp6ZWREYXRhUHJvdmlkZXJ8CisKKyMjIyMgU3RlcHMgdG8gcnVuCisxLiBCdWlsZCB0aGUgZnV6emVyCitgYGAKKyAgJCBtbSAtaiQobnByb2MpIGxpYmxwX2FwaXNfZnV6emVyCitgYGAKKzIuIFJ1biBvbiBkZXZpY2UKK2BgYAorICAkIGFkYiBzeW5jIGRhdGEKKyAgJCBhZGIgc2hlbGwgL2RhdGEvZnV6ei9hcm02NC9saWJscF9hcGlzX2Z1enplci9saWJscF9hcGlzX2Z1enplcgorYGBgCmRpZmYgLS1naXQgYS9mc19tZ3IvbGlibHAvZnV6emVyL2ltYWdlX2dlbl9yYW5kLnB5IGIvZnNfbWdyL2xpYmxwL2Z1enplci9pbWFnZV9nZW5fcmFuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTg1NDcyCi0tLSAvZGV2L251bGwKKysrIGIvZnNfbWdyL2xpYmxwL2Z1enplci9pbWFnZV9nZW5fcmFuZC5weQpAQCAtMCwwICsxLDMyIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMgQ29weXJpZ2h0IChDKSAyMDIzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIgorV3JpdGUgZ2l2ZW4gbnVtYmVyIG9mIHJhbmRvbSBieXRlcywgZ2VuZXJhdGVkIHdpdGggb3B0aW9uYWwgc2VlZC4KKyIiIgorCitpbXBvcnQgcmFuZG9tLCBhcmdwYXJzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1fX2RvY19fKQorICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNlZWQnLCBoZWxwPSdTZWVkIHRvIHJhbmRvbSBnZW5lcmF0b3InKQorICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxlbmd0aCcsIHR5cGU9aW50LCByZXF1aXJlZD1UcnVlLCBoZWxwPSdMZW5ndGggb2Ygb3V0cHV0JykKKyAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICBpZiBhcmdzLnNlZWQ6CisgICAgcmFuZG9tLnNlZWQoYXJncy5zZWVkKQorCisgIHByaW50KCcnLmpvaW4oY2hyKHJhbmRvbS5yYW5kcmFuZ2UoMCwweGZmKSkgZm9yIF8gaW4gcmFuZ2UoYXJncy5sZW5ndGgpKSkKZGlmZiAtLWdpdCBhL2ZzX21nci9saWJscC9mdXp6ZXIvbGlibHBfYXBpc19mdXp6ZXIuY3BwIGIvZnNfbWdyL2xpYmxwL2Z1enplci9saWJscF9hcGlzX2Z1enplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmYmMxNAotLS0gL2Rldi9udWxsCisrKyBiL2ZzX21nci9saWJscC9mdXp6ZXIvbGlibHBfYXBpc19mdXp6ZXIuY3BwCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2ZpbGUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGZ1enplci9GdXp6ZWREYXRhUHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaWJscC9idWlsZGVyLmg+CisjaW5jbHVkZSA8bGlibHAvcGFydGl0aW9uX29wZW5lci5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWZkLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDx3cml0ZXIuaD4KKyNpbmNsdWRlICJpbWFnZXMuaCIKKyNpbmNsdWRlICJ0ZXN0X3BhcnRpdGlvbl9vcGVuZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwordXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ6OmZzX21ncjsKK3VzaW5nIHVuaXF1ZV9mZCA9IGFuZHJvaWQ6OmJhc2U6OnVuaXF1ZV9mZDsKKworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga0Rpc2tTaXplID0gMTMxMDcyOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga01ldGFkYXRhU2l6ZSA9IDUxMjsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtNZXRhZGF0YVNsb3RzID0gMjsKK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qga01heEJ5dGVzID0gMjA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtWYWxpZEFsaWdubWVudCA9IDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtWYWxpZEFsaWdubWVudE9mZnNldCA9IDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtWYWxpZExvZ2ljYWxCbG9ja1NpemUgPSA0MDk2Oworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrTWluTWV0YWRhdGFTaXplID0gMDsKK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qga01heE1ldGFkYXRhU2l6ZSA9IDEwMDAwOworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrTWluU2xvdCA9IDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtNYXhTbG90ID0gMTA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtNaW5GYWN0b3IgPSAwOworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4RmFjdG9yID0gMTA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtNZXRhZGF0YUdlb21ldHJ5U2l6ZSA9IDQwOTY7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtWYWxpZE51bVNlY3RvcnMgPSAxOTAxNTY4Oworc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBrVmFsaWRQaHlzaWNhbFNlY3RvciA9IDM2MDg1NzY7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtNaW5TZWN0b3JWYWx1ZSA9IDE7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtNYXhTZWN0b3JWYWx1ZSA9IDEwMDAwMDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtNYXhCdWZmZXJTaXplID0gMTAwMDAwOworCitjb25zdCBzdHJpbmcga0ltYWdlRmlsZSA9ICJpbWFnZV9maWxlIjsKK2NvbnN0IHN0cmluZyBrU3VwZXJOYW1lID0gInN1cGVyIjsKK2NvbnN0IHN0cmluZyBrU3lzdGVtUGFydGl0aW9uTmFtZSA9ICJzeXN0ZW0iOworY29uc3Qgc3RyaW5nIGtQYXJ0aXRpb25OYW1lID0gImJ1aWxkZXJfcGFydGl0aW9uIjsKK2NvbnN0IHN0cmluZyBrU3VwZXJQYXJ0aXRpb25OYW1lID0gInN1cGVyX3BhcnRpdGlvbiI7CisKK2NvbnN0IHN0cmluZyBrU3VmZml4W10gPSB7Il9hIiwgIl9iIiwgImEiLCAiYiJ9OworCitjbGFzcyBMaXBscEFwaXNGdXp6ZXIgeworICBwdWJsaWM6CisgICAgTGlwbHBBcGlzRnV6emVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSA6IG1GZHAoZGF0YSwgc2l6ZSl7fTsKKyAgICB2b2lkIHByb2Nlc3MoKTsKKworICBwcml2YXRlOgorICAgIHZvaWQgc2V0dXBCdWlsZGVyKCk7CisgICAgQmxvY2tEZXZpY2VJbmZvIGdldEJsb2NrRGV2aWNlKCk7CisgICAgRnV6emVkRGF0YVByb3ZpZGVyIG1GZHA7CisgICAgdW5pcXVlX3B0cjxNZXRhZGF0YUJ1aWxkZXI+IG1CdWlsZGVyOworICAgIHN0cmluZyBtQmxvY2tEZXZpY2VJbmZvTmFtZTsKKyAgICBzdHJpbmcgbVN1cGVyUGFydGl0aW9uTmFtZTsKKyAgICBzdHJpbmcgbVBhcnRpdGlvbk5hbWU7CisgICAgY29uc3Qgc3RyaW5nIG1JbWFnZVBhdGhzWzEwXSA9IHsKKyAgICAgICAgICAgICJkYXRhL3Rlc3RfZHRiLmltZyIsCisgICAgICAgICAgICAiZGF0YS90ZXN0X2Jvb3Rjb25maWcuaW1nIiwKKyAgICAgICAgICAgICJkYXRhL3Rlc3RfdmVuZG9yX3JhbWRpc2tfbm9uZS5pbWciLAorICAgICAgICAgICAgImRhdGEvdGVzdF92ZW5kb3JfcmFtZGlza19wbGF0Zm9ybS5pbWciLAorICAgICAgICAgICAgImRhdGEvdGVzdF92ZW5kb3JfcmFtZGlza19yZXBsYWNlLmltZyIsCisgICAgICAgICAgICAiZGF0YS90ZXN0X3ZlbmRvcl9ib290X3Y0X3dpdGhfZnJhZy5pbWciLAorICAgICAgICAgICAgImRhdGEvdGVzdF92ZW5kb3JfYm9vdF92NF93aXRob3V0X2ZyYWcuaW1nIiwKKyAgICAgICAgICAgICJkYXRhL3Rlc3RfdmVuZG9yX2Jvb3RfdjMuaW1nIiwKKyAgICAgICAgICAgICJkZXYvbnVsbCIsCisgICAgICAgICAgICBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKSwKKyAgICB9OworfTsKKworQmxvY2tEZXZpY2VJbmZvIExpcGxwQXBpc0Z1enplcjo6Z2V0QmxvY2tEZXZpY2UoKSB7CisgICAgbUJsb2NrRGV2aWNlSW5mb05hbWUgPQorICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8ga1N1cGVyTmFtZSA6IG1GZHAuQ29uc3VtZVJhbmRvbUxlbmd0aFN0cmluZyhrTWF4Qnl0ZXMpOworICAgIHVpbnQ2NF90IGJsb2NrRGV2aWNlSW5mb1NpemUgPQorICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8gbUZkcC5Db25zdW1lSW50ZWdyYWw8dWludDY0X3Q+KCkgOiBrRGlza1NpemU7CisgICAgdWludDMyX3QgYWxpZ25tZW50ID0gbUZkcC5Db25zdW1lQm9vbCgpID8gbUZkcC5Db25zdW1lSW50ZWdyYWw8dWludDMyX3Q+KCkgOiBrVmFsaWRBbGlnbm1lbnQ7CisgICAgdWludDMyX3QgYWxpZ25tZW50T2Zmc2V0ID0KKyAgICAgICAgICAgIG1GZHAuQ29uc3VtZUJvb2woKSA/IG1GZHAuQ29uc3VtZUludGVncmFsPHVpbnQzMl90PigpIDoga1ZhbGlkQWxpZ25tZW50T2Zmc2V0OworICAgIHVpbnQzMl90IGxvZ2ljYWxCbG9ja1NpemUgPQorICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8gbUZkcC5Db25zdW1lSW50ZWdyYWw8dWludDMyX3Q+KCkgOiBrVmFsaWRMb2dpY2FsQmxvY2tTaXplOworCisgICAgQmxvY2tEZXZpY2VJbmZvIHN1cGVySW5mb3ttQmxvY2tEZXZpY2VJbmZvTmFtZSwgYmxvY2tEZXZpY2VJbmZvU2l6ZSwgYWxpZ25tZW50LCBhbGlnbm1lbnRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsQmxvY2tTaXplfTsKKyAgICByZXR1cm4gc3VwZXJJbmZvOworfQorCit2b2lkIExpcGxwQXBpc0Z1enplcjo6c2V0dXBCdWlsZGVyKCkgeworICAgIHVpbnQ2NF90IHJhbmRvbUJsb2NrRGV2U2l6ZSA9CisgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDY0X3Q+KGtNaW5GYWN0b3IsIGtNYXhGYWN0b3IpICogTFBfU0VDVE9SX1NJWkU7CisgICAgdWludDY0X3QgYmxvY2tEZXZTaXplID0gbUZkcC5Db25zdW1lQm9vbCgpID8gcmFuZG9tQmxvY2tEZXZTaXplIDoga0Rpc2tTaXplOworICAgIHVpbnQzMl90IHJhbmRvbU1ldGFkYXRhTWF4U2l6ZSA9CisgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KGtNaW5NZXRhZGF0YVNpemUsIGtNYXhNZXRhZGF0YVNpemUpOworICAgIHVpbnQzMl90IG1ldGFkYXRhTWF4U2l6ZSA9IG1GZHAuQ29uc3VtZUJvb2woKSA/IGtNZXRhZGF0YVNpemUgOiByYW5kb21NZXRhZGF0YU1heFNpemU7CisgICAgdWludDMyX3QgbWV0YWRhdGFTbG90Q291bnQgPSBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KGtNaW5TbG90LCBrTWF4U2xvdCk7CisgICAgbUJ1aWxkZXIgPSBNZXRhZGF0YUJ1aWxkZXI6Ok5ldyhibG9ja0RldlNpemUsIG1ldGFkYXRhTWF4U2l6ZSwgbWV0YWRhdGFTbG90Q291bnQpOworCisgICAgaWYgKG1CdWlsZGVyLmdldCgpKSB7CisgICAgICAgIG1CdWlsZGVyLT5BZGRQYXJ0aXRpb24oa1N5c3RlbVBhcnRpdGlvbk5hbWUsIExQX1BBUlRJVElPTl9BVFRSX1JFQURPTkxZKTsKKworICAgICAgICBtUGFydGl0aW9uTmFtZSA9CisgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8gbUZkcC5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKGtNYXhCeXRlcykgOiBrUGFydGl0aW9uTmFtZTsKKyAgICAgICAgaWYgKCFtUGFydGl0aW9uTmFtZS5zaXplKCkpIHsKKyAgICAgICAgICAgIG1QYXJ0aXRpb25OYW1lID0ga1BhcnRpdGlvbk5hbWU7CisgICAgICAgIH0KKyAgICAgICAgbVN1cGVyUGFydGl0aW9uTmFtZSA9IG1GZHAuQ29uc3VtZUJvb2woKSA/IG1GZHAuQ29uc3VtZVJhbmRvbUxlbmd0aFN0cmluZyhrTWF4Qnl0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBrU3VwZXJQYXJ0aXRpb25OYW1lOworICAgICAgICBpZiAoIW1TdXBlclBhcnRpdGlvbk5hbWUuc2l6ZSgpKSB7CisgICAgICAgICAgICBtU3VwZXJQYXJ0aXRpb25OYW1lID0ga1N1cGVyUGFydGl0aW9uTmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIFBhcnRpdGlvbiogc3VwZXIgPSBtQnVpbGRlci0+QWRkUGFydGl0aW9uKG1TdXBlclBhcnRpdGlvbk5hbWUsIExQX1BBUlRJVElPTl9BVFRSX1JFQURPTkxZKTsKKyAgICAgICAgbUJ1aWxkZXItPkFkZFBhcnRpdGlvbihtUGFydGl0aW9uTmFtZSwgTFBfUEFSVElUSU9OX0FUVFJfUkVBRE9OTFkpOworCisgICAgICAgIGludDY0X3QgbnVtU2VjdG9ycyA9IG1GZHAuQ29uc3VtZUJvb2woKSA/IG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50NjRfdD4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01pblNlY3RvclZhbHVlLCBrTWF4U2VjdG9yVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGtWYWxpZE51bVNlY3RvcnM7CisgICAgICAgIGludDY0X3QgcGh5c2ljYWxTZWN0b3IgPSBtRmRwLkNvbnN1bWVCb29sKCkgPyBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDY0X3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWluU2VjdG9yVmFsdWUsIGtNYXhTZWN0b3JWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGtWYWxpZFBoeXNpY2FsU2VjdG9yOworCisgICAgICAgIG1CdWlsZGVyLT5BZGRMaW5lYXJFeHRlbnQoc3VwZXIsIG1CbG9ja0RldmljZUluZm9OYW1lLCBudW1TZWN0b3JzLCBwaHlzaWNhbFNlY3Rvcik7CisgICAgfQorfQorCit2b2lkIExpcGxwQXBpc0Z1enplcjo6cHJvY2VzcygpIHsKKyAgICBCbG9ja0RldmljZUluZm8gc3VwZXJJbmZvID0gZ2V0QmxvY2tEZXZpY2UoKTsKKyAgICB1bmlxdWVfZmQgZmQoc3lzY2FsbChfX05SX21lbWZkX2NyZWF0ZSwgImltYWdlX2ZpbGUiLCBNRkRfQUxMT1dfU0VBTElORykpOworICAgIHNldHVwQnVpbGRlcigpOworCisgICAgVGVzdFBhcnRpdGlvbk9wZW5lciBvcGVuZXIoCisgICAgICAgICAgICB7e21GZHAuQ29uc3VtZUJvb2woKSA/IG1GZHAuQ29uc3VtZVJhbmRvbUxlbmd0aFN0cmluZyhrTWF4Qnl0ZXMpIDoga1N1cGVyTmFtZSwgZmR9fSwKKyAgICAgICAgICAgIHt7bUZkcC5Db25zdW1lQm9vbCgpID8gbUZkcC5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKGtNYXhCeXRlcykgOiBrU3VwZXJOYW1lLAorICAgICAgICAgICAgICBzdXBlckluZm99fSk7CisKKyAgICBpZiAobUJ1aWxkZXIuZ2V0KCkpIHsKKyAgICAgICAgdW5pcXVlX3B0cjxMcE1ldGFkYXRhPiBtZXRhZGF0YSA9IG1CdWlsZGVyLT5FeHBvcnQoKTsKKyAgICAgICAgY29uc3QgTHBNZXRhZGF0YSYgbWV0YWRhdGFWYWx1ZSA9ICptZXRhZGF0YS5nZXQoKTsKKworICAgICAgICBtYXA8c3RyaW5nLCBzdHJpbmc+IGltYWdlcyA9IHt9OworICAgICAgICBpZiAobUZkcC5Db25zdW1lQm9vbCgpKSB7CisgICAgICAgICAgICBpbWFnZXNbbVN1cGVyUGFydGl0aW9uTmFtZV0gPSBtRmRwLlBpY2tWYWx1ZUluQXJyYXkobUltYWdlUGF0aHMpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKG1GZHAucmVtYWluaW5nX2J5dGVzKCkpIHsKKyAgICAgICAgICAgIGF1dG8gaW52b2tlQVBJcyA9IG1GZHAuUGlja1ZhbHVlSW5BcnJheTxjb25zdCBmdW5jdGlvbjx2b2lkKCk+Pih7CisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsgV3JpdGVUb0ltYWdlRmlsZShmZCwgbWV0YWRhdGFWYWx1ZSk7IH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsgV3JpdGVUb0ltYWdlRmlsZShrSW1hZ2VGaWxlLmNfc3RyKCksIG1ldGFkYXRhVmFsdWUpOyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7IEZsYXNoUGFydGl0aW9uVGFibGUob3BlbmVyLCBrU3VwZXJOYW1lLCBtZXRhZGF0YVZhbHVlKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlUGFydGl0aW9uVGFibGUob3BlbmVyLCBtUGFydGl0aW9uTmFtZSwgbWV0YWRhdGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUJvb2woKSA/IDAgOiAxIC8qIHNsb3RfbnVtYmVyICovKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVhZE1ldGFkYXRhKG1QYXJ0aXRpb25OYW1lLCBtRmRwLkNvbnN1bWVCb29sKCkgPyAwIDogMSAvKiBzbG90X251bWJlciAqLyk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsgRmxhc2hQYXJ0aXRpb25UYWJsZShtUGFydGl0aW9uTmFtZSwgbWV0YWRhdGFWYWx1ZSk7IH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVBhcnRpdGlvblRhYmxlKG1QYXJ0aXRpb25OYW1lLCBtZXRhZGF0YVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8gMCA6IDEgLyogc2xvdF9udW1iZXIgKi8pOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZVRvSW1hZ2VGaWxlKGtJbWFnZUZpbGUuY19zdHIoKSwgbWV0YWRhdGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEtPmdlb21ldHJ5LmxvZ2ljYWxfYmxvY2tfc2l6ZSwgaW1hZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVCb29sKCkgPyB0cnVlIDogZmFsc2UgLyogc3BhcnNpZnkgKi8pOworICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlU3BsaXRJbWFnZUZpbGVzKGtJbWFnZUZpbGUuY19zdHIoKSwgbWV0YWRhdGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLT5nZW9tZXRyeS5sb2dpY2FsX2Jsb2NrX3NpemUsIGltYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUJvb2woKSA/IHRydWUgOiBmYWxzZSAvKiBzcGFyc2lmeSAqLyk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsgUmVhZEZyb21JbWFnZUZpbGUoa0ltYWdlRmlsZS5jX3N0cigpKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeyBJc0VtcHR5U3VwZXJJbWFnZShrSW1hZ2VGaWxlLmNfc3RyKCkpOyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBidWZmZXJTaXplID0gbUZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlPHVpbnQ2NF90PigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIGtNZXRhZGF0YUdlb21ldHJ5U2l6ZSwga01heEJ1ZmZlclNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlciA9IG1GZHAuQ29uc3VtZUJ5dGVzPHVpbnQ4X3Q+KGtNYXhCeXRlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIucmVzaXplKGJ1ZmZlclNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgUmVhZEZyb21JbWFnZUJsb2IoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGdyb3VwVmVjdG9yU2l6ZSA9IG1ldGFkYXRhLT5ncm91cHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmFuZG9tR3JvdXBJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50MzJfdD4oMCwgZ3JvdXBWZWN0b3JTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldFBhcnRpdGlvbkdyb3VwTmFtZShtZXRhZGF0YS0+Z3JvdXBzW3JhbmRvbUdyb3VwSW5kZXhdKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmxvY2tEZXZpY2VWZWN0b3JTaXplID0gbWV0YWRhdGEtPmJsb2NrX2RldmljZXMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmFuZG9tQmxvY2tEZXZpY2VJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50MzJfdD4oMCwgYmxvY2tEZXZpY2VWZWN0b3JTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldEJsb2NrRGV2aWNlUGFydGl0aW9uTmFtZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEtPmJsb2NrX2RldmljZXNbcmFuZG9tQmxvY2tEZXZpY2VJbmRleF0pOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7IEdldE1ldGFkYXRhU3VwZXJCbG9ja0RldmljZShtZXRhZGF0YVZhbHVlKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHN1ZmZpeCA9IG1GZHAuQ29uc3VtZUJvb2woKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtRmRwLlBpY2tWYWx1ZUluQXJyYXk8c3RyaW5nPihrU3VmZml4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNsb3ROdW1iZXJGb3JTbG90U3VmZml4KHN1ZmZpeCk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBGaW5kUGFydGl0aW9uKG1ldGFkYXRhVmFsdWUsIGtTeXN0ZW1QYXJ0aXRpb25OYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldFBhcnRpdGlvblNpemUobWV0YWRhdGFWYWx1ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeyBHZXRQYXJ0aXRpb25TbG90U3VmZml4KG1QYXJ0aXRpb25OYW1lKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeyBGaW5kUGFydGl0aW9uKG1ldGFkYXRhVmFsdWUsIG1QYXJ0aXRpb25OYW1lKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcGFydGl0aW9uVmVjdG9yU2l6ZSA9IG1ldGFkYXRhLT5wYXJ0aXRpb25zLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJhbmRvbVBhcnRpdGlvbkluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlPHVpbnQzMl90PigwLCBwYXJ0aXRpb25WZWN0b3JTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldFBhcnRpdGlvbk5hbWUobWV0YWRhdGEtPnBhcnRpdGlvbnNbcmFuZG9tUGFydGl0aW9uSW5kZXhdKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeyBHZXRUb3RhbFN1cGVyUGFydGl0aW9uU2l6ZShtZXRhZGF0YVZhbHVlKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeyBHZXRCbG9ja0RldmljZVBhcnRpdGlvbk5hbWVzKG1ldGFkYXRhVmFsdWUpOyB9LAorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpbnZva2VBUElzKCk7CisgICAgICAgIH0KKyAgICAgICAgcmVtb3ZlKGtJbWFnZUZpbGUuY19zdHIoKSk7CisgICAgfQorfQorCitleHRlcm4gIkMiIGludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgTGlwbHBBcGlzRnV6emVyIGxpcGxwQXBpc0Z1enplcihkYXRhLCBzaXplKTsKKyAgICBsaXBscEFwaXNGdXp6ZXIucHJvY2VzcygpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZnNfbWdyL2xpYmxwL2Z1enplci9saWJscF9idWlsZGVyX2Z1enplci5jcHAgYi9mc19tZ3IvbGlibHAvZnV6emVyL2xpYmxwX2J1aWxkZXJfZnV6emVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZiZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZnNfbWdyL2xpYmxwL2Z1enplci9saWJscF9idWlsZGVyX2Z1enplci5jcHAKQEAgLTAsMCArMSw0MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8ZnV6emVyL0Z1enplZERhdGFQcm92aWRlci5oPgorI2luY2x1ZGUgPGxpYmxwL2J1aWxkZXIuaD4KKyNpbmNsdWRlIDxsaWJscC9wcm9wZXJ0eV9mZXRjaGVyLmg+CisjaW5jbHVkZSA8c3RvcmFnZV9saXRlcmFscy9zdG9yYWdlX2xpdGVyYWxzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOjpmc19tZ3I7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ6OnN0b3JhZ2VfbGl0ZXJhbHM7CisKK3N0YXRpYyBjb25zdGV4cHIgdWludDY0X3Qga1ZhbGlkQmxvY2tTaXplID0gNDA5NiAqIDUwOworc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBrQmxvY2tEZXZpY2VJbmZvU2l6ZSA9IDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBrVmFsaWRCbG9ja0RldmljZUluZm9TaXplID0gOF9HaUI7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtWYWxpZE1heEdyb3VwU2l6ZSA9IDQwOTYwOworc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBrTWluQmxvY2tEZXZWYWx1ZSA9IDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtNYXhCbG9ja0RldlZhbHVlID0gMTAwMDAwOworc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBrTWluU2VjdG9yVmFsdWUgPSAxOworc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBrTWF4U2VjdG9yVmFsdWUgPSAxMDAwMDAwOworc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBrTWluVmFsdWUgPSAwOworc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBrTWF4VmFsdWUgPSAxMDAwMDsKK3N0YXRpYyBjb25zdGV4cHIgdWludDY0X3Qga1ZhbGlkTnVtU2VjdG9ycyA9IDE5MDE1Njg7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtWYWxpZFBoeXNpY2FsU2VjdG9yID0gMzYwODU3NjsKK3N0YXRpYyBjb25zdGV4cHIgdWludDY0X3Qga01pbkVsZW1lbnRzID0gMDsKK3N0YXRpYyBjb25zdGV4cHIgdWludDY0X3Qga01heEVsZW1lbnRzID0gMTA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtWYWxpZEFsaWdubWVudCA9IDc4NjQzMjsKK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qga1ZhbGlkTWV0YWRhdGFTaXplID0gNDA5NjA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtWYWxpZEFsaWdubWVudE9mZnNldCA9IDIyOTM3NjsKK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qga1ZhbGlkTG9naWNhbEJsb2NrU2l6ZSA9IDQwOTY7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtWYWxpZE1heE1ldGFkYXRhU2l6ZSA9IDY1NTM2Oworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrTWluTWV0YWRhdGFWYWx1ZSA9IDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtNYXhNZXRhZGF0YVZhbHVlID0gMTAwMDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtaZXJvQWxpZ25tZW50ID0gMDsKK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qga1plcm9BbGlnbm1lbnRPZmZzZXQgPSAwOworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4Qnl0ZXMgPSAyMDsKK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qga01pblNsb3QgPSAwOworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2xvdCA9IDEwOworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrTWluQnVpbGRlciA9IDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtNYXhCdWlsZGVyID0gNDsKKworY29uc3QgdWludDY0X3Qga0F0dHJpYnV0ZVR5cGVzW10gPSB7CisgICAgICAgIExQX1BBUlRJVElPTl9BVFRSX05PTkUsICAgIExQX1BBUlRJVElPTl9BVFRSX1JFQURPTkxZLCBMUF9QQVJUSVRJT05fQVRUUl9TTE9UX1NVRkZJWEVELAorICAgICAgICBMUF9QQVJUSVRJT05fQVRUUl9VUERBVEVELCBMUF9QQVJUSVRJT05fQVRUUl9ESVNBQkxFRCwKK307CisKK2NvbnN0IHN0cmluZyBrRnV6elBhcnRpdGlvbk5hbWUgPSAiZnV6el9wYXJ0aXRpb25fbmFtZSI7Citjb25zdCBzdHJpbmcga1N1cGVyUGFydGl0aW9uTmFtZSA9ICJzdXBlcl9wYXJ0aXRpb24iOworY29uc3Qgc3RyaW5nIGtEZXZpY2VJbmZvTmFtZSA9ICJzdXBlciI7Citjb25zdCBzdHJpbmcga0RlZmF1bHRHcm91cE5hbWUgPSAiZGVmYXVsdCI7CisKK2NsYXNzIEJ1aWxkZXJGdXp6ZXIgeworICBwdWJsaWM6CisgICAgQnVpbGRlckZ1enplcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgOiBtRmRwKGRhdGEsIHNpemUpe307CisgICAgdm9pZCBwcm9jZXNzKCk7CisKKyAgcHJpdmF0ZToKKyAgICBGdXp6ZWREYXRhUHJvdmlkZXIgbUZkcDsKKyAgICB2b2lkIGludm9rZUJ1aWxkZXJBUElzKCk7CisgICAgdm9pZCBzZWxlY3RSYW5kb21CdWlsZGVyKGludDMyX3QgcmFuZG9tQnVpbGRlciwgc3RyaW5nIHN1cGVyQmxvY2tEZXZpY2VOYW1lKTsKKyAgICB2b2lkIHNldHVwQnVpbGRlcihzdHJpbmcgc3VwZXJCbG9ja0RldmljZU5hbWUpOworICAgIHZvaWQgY2FsbENoYW5nZVBhcnRpdGlvbkdyb3VwKCk7CisgICAgdm9pZCBjYWxsVmVyaWZ5RXh0ZW50c0FnYWluc3RTb3VyY2VNZXRhZGF0YSgpOworICAgIHZlY3RvcjxCbG9ja0RldmljZUluZm8+IG1CbG9ja0RldmljZXM7CisgICAgdW5pcXVlX3B0cjxNZXRhZGF0YUJ1aWxkZXI+IG1CdWlsZGVyOworICAgIHN0cmluZyBtUmVzaXplUGFydGl0aW9uTmFtZTsKKyAgICBzdHJpbmcgbUdyb3VwTmFtZXNbNF0gPSB7CisgICAgICAgICAgICAiZGVmYXVsdCIsCisgICAgICAgICAgICAiZ3JvdXBfYSIsCisgICAgICAgICAgICAiZ3JvdXBfYiIsCisgICAgICAgICAgICBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKSwKKyAgICB9OworICAgIHN0cmluZyBtUGFydGl0aW9uTmFtZXNbNV0gPSB7CisgICAgICAgICAgICAic3lzdGVtX2EiLAorICAgICAgICAgICAgInZlbmRvcl9hIiwKKyAgICAgICAgICAgICJzeXN0ZW1fYiIsCisgICAgICAgICAgICAidmVuZG9yX2IiLAorICAgICAgICAgICAgbUZkcC5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKGtNYXhCeXRlcyksCisgICAgfTsKKyAgICBQYXJ0aXRpb24qIG1QYXJ0aXRpb247CisgICAgUGFydGl0aW9uKiBtRnV6elBhcnRpdGlvbjsKKyAgICBQYXJ0aXRpb24qIG1SZXNpemVQYXJ0aXRpb247CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgVCBnZXRQYXJhbVZhbHVlKFQgdmFsaWRWYWx1ZSkgeworICAgICAgICBUIHBhcmFtZXRlciA9IHZhbGlkVmFsdWU7CisgICAgICAgIGlmIChtRmRwLkNvbnN1bWVCb29sKCkpIHsKKyAgICAgICAgICAgIHBhcmFtZXRlciA9IG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTxUPihrTWluVmFsdWUsIGtNYXhWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICB9Cit9OworCit2b2lkIEJ1aWxkZXJGdXp6ZXI6OnNlbGVjdFJhbmRvbUJ1aWxkZXIoaW50MzJfdCByYW5kb21CdWlsZGVyLCBzdHJpbmcgc3VwZXJCbG9ja0RldmljZU5hbWUpIHsKKyAgICBzd2l0Y2ggKHJhbmRvbUJ1aWxkZXIpIHsKKyAgICAgICAgY2FzZSAwOiB7CisgICAgICAgICAgICB1aW50MzJfdCBtYXhNZXRhZGF0YVNpemUgPSBnZXRQYXJhbVZhbHVlKGtWYWxpZE1heE1ldGFkYXRhU2l6ZSk7CisgICAgICAgICAgICB1aW50MzJfdCBudW1TbG90cyA9IG1GZHAuQ29uc3VtZUJvb2woKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ga01heFNsb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50MzJfdD4oa01pblNsb3QsIGtNYXhTbG90KTsKKyAgICAgICAgICAgIG1CdWlsZGVyID0gTWV0YWRhdGFCdWlsZGVyOjpOZXcobUJsb2NrRGV2aWNlcywgc3VwZXJCbG9ja0RldmljZU5hbWUsIG1heE1ldGFkYXRhU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtU2xvdHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAxOiB7CisgICAgICAgICAgICB1aW50NjRfdCBibG9ja0RldlNpemUgPQorICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDY0X3Q+KGtNaW5CbG9ja0RldlZhbHVlLCBrTWF4QmxvY2tEZXZWYWx1ZSk7CisgICAgICAgICAgICB1aW50MzJfdCBtZXRhZGF0YU1heFNpemUgPQorICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KGtNaW5NZXRhZGF0YVZhbHVlLCBrTWF4TWV0YWRhdGFWYWx1ZSk7CisgICAgICAgICAgICB1aW50MzJfdCBtZXRhZGF0YVNsb3RDb3VudCA9IG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50MzJfdD4oa01pblNsb3QsIGtNYXhTbG90KTsKKyAgICAgICAgICAgIG1CdWlsZGVyID0gTWV0YWRhdGFCdWlsZGVyOjpOZXcoYmxvY2tEZXZTaXplLCBtZXRhZGF0YU1heFNpemUsIG1ldGFkYXRhU2xvdENvdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgMjogeworICAgICAgICAgICAgdWludDY0X3QgYmxvY2tEZXZTaXplID0gZ2V0UGFyYW1WYWx1ZShrVmFsaWRCbG9ja1NpemUpOworICAgICAgICAgICAgdWludDMyX3QgbWV0YWRhdGFTaXplID0gZ2V0UGFyYW1WYWx1ZShrVmFsaWRNZXRhZGF0YVNpemUpOworICAgICAgICAgICAgdWludDMyX3QgbWV0YWRhdGFTbG90Q291bnQgPSBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KGtNaW5TbG90LCBrTWF4U2xvdCk7CisgICAgICAgICAgICBtQnVpbGRlciA9IE1ldGFkYXRhQnVpbGRlcjo6TmV3KGJsb2NrRGV2U2l6ZSwgbWV0YWRhdGFTaXplLCBtZXRhZGF0YVNsb3RDb3VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDM6IHsKKyAgICAgICAgICAgIHN0cmluZyBzdXBlclBhcnRpdGlvbk5hbWUgPSBtRmRwLkNvbnN1bWVCb29sKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ga1N1cGVyUGFydGl0aW9uTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKTsKKyAgICAgICAgICAgIG1CdWlsZGVyID0gTWV0YWRhdGFCdWlsZGVyOjpOZXcoUGFydGl0aW9uT3BlbmVyKCksIHN1cGVyUGFydGl0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlKDAsIDEpIC8qIHNsb3RfbnVtYmVyICovKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgNDogeworICAgICAgICAgICAgc3RyaW5nIHN1cGVyUGFydGl0aW9uTmFtZSA9IG1GZHAuQ29uc3VtZUJvb2woKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBrU3VwZXJQYXJ0aXRpb25OYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1GZHAuQ29uc3VtZVJhbmRvbUxlbmd0aFN0cmluZyhrTWF4Qnl0ZXMpOworICAgICAgICAgICAgbUJ1aWxkZXIgPSBNZXRhZGF0YUJ1aWxkZXI6Ok5ldygKKyAgICAgICAgICAgICAgICAgICAgc3VwZXJQYXJ0aXRpb25OYW1lLAorICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KDAsIDEpIC8qIHNsb3RfbnVtYmVyICovKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJ1aWxkZXJGdXp6ZXI6OnNldHVwQnVpbGRlcihzdHJpbmcgc3VwZXJCbG9ja0RldmljZU5hbWUpIHsKKyAgICB1aW50NjRfdCBibG9ja0RldmljZUluZm9TaXplID0KKyAgICAgICAgICAgIG1GZHAuQ29uc3VtZUJvb2woKSA/IG1GZHAuQ29uc3VtZUludGVncmFsPHVpbnQ2NF90PigpIDoga1ZhbGlkQmxvY2tEZXZpY2VJbmZvU2l6ZTsKKyAgICB1aW50MzJfdCBhbGlnbm1lbnQgPSBtRmRwLkNvbnN1bWVCb29sKCkgPyBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50MzJfdD4oKSA6IGtWYWxpZEFsaWdubWVudDsKKyAgICB1aW50MzJfdCBhbGlnbm1lbnRPZmZzZXQgPQorICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8gbUZkcC5Db25zdW1lSW50ZWdyYWw8dWludDMyX3Q+KCkgOiBrVmFsaWRBbGlnbm1lbnRPZmZzZXQ7CisgICAgdWludDMyX3QgbG9naWNhbEJsb2NrU2l6ZSA9CisgICAgICAgICAgICBtRmRwLkNvbnN1bWVCb29sKCkgPyBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50MzJfdD4oKSA6IGtWYWxpZExvZ2ljYWxCbG9ja1NpemU7CisgICAgQmxvY2tEZXZpY2VJbmZvIHN1cGVyKHN1cGVyQmxvY2tEZXZpY2VOYW1lLCBibG9ja0RldmljZUluZm9TaXplLCBhbGlnbm1lbnQsIGFsaWdubWVudE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEJsb2NrU2l6ZSk7CisgICAgbUJsb2NrRGV2aWNlcy5wdXNoX2JhY2soc3VwZXIpOworCisgICAgbUJ1aWxkZXItPkFkZEdyb3VwKGtEZWZhdWx0R3JvdXBOYW1lLCBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKSAvKiBtYXhfc2l6ZSAqLyk7CisgICAgbVBhcnRpdGlvbiA9IG1CdWlsZGVyLT5BZGRQYXJ0aXRpb24oa1N1cGVyUGFydGl0aW9uTmFtZSwgTFBfUEFSVElUSU9OX0FUVFJfUkVBRE9OTFkpOworCisgICAgbUZ1enpQYXJ0aXRpb24gPSBtQnVpbGRlci0+QWRkUGFydGl0aW9uKGtGdXp6UGFydGl0aW9uTmFtZSwga0RlZmF1bHRHcm91cE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQX1BBUlRJVElPTl9BVFRSX1JFQURPTkxZKTsKKworICAgIHN0cmluZyBtUmVzaXplUGFydGl0aW9uTmFtZSA9IG1GZHAuQ29uc3VtZVJhbmRvbUxlbmd0aFN0cmluZyhrTWF4Qnl0ZXMpOworICAgIGlmICghbVJlc2l6ZVBhcnRpdGlvbk5hbWUuc2l6ZSgpKSB7CisgICAgICAgIG1SZXNpemVQYXJ0aXRpb25OYW1lID0gInJlc2l6ZV9wYXJ0aXRpb24iOworICAgIH0KKyAgICBtUmVzaXplUGFydGl0aW9uID0gbUJ1aWxkZXItPkFkZFBhcnRpdGlvbihtUmVzaXplUGFydGl0aW9uTmFtZSwga0RlZmF1bHRHcm91cE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBfUEFSVElUSU9OX0FUVFJfUkVBRE9OTFkpOworCisgICAgc3RyaW5nIGNoYW5nZVBhcnRpdGlvbkRldmljZUluZm9OYW1lID0KKyAgICAgICAgICAgIG1GZHAuQ29uc3VtZUJvb2woKSA/IGtEZXZpY2VJbmZvTmFtZSA6IG1GZHAuQ29uc3VtZVJhbmRvbUxlbmd0aFN0cmluZyhrTWF4Qnl0ZXMpOworICAgIEJsb2NrRGV2aWNlSW5mbyBjaGFuZ2VQYXJ0aXRpb25EZXZpY2VJbmZvKAorICAgICAgICAgICAgY2hhbmdlUGFydGl0aW9uRGV2aWNlSW5mb05hbWUsCisgICAgICAgICAgICBtRmRwLkNvbnN1bWVCb29sKCkgPyBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKSA6IGtCbG9ja0RldmljZUluZm9TaXplIC8qIHNpemUgKi8sCisgICAgICAgICAgICBtRmRwLkNvbnN1bWVCb29sKCkgPyBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50MzJfdD4oKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoga1plcm9BbGlnbm1lbnRPZmZzZXQgLyogYWxpZ25tZW50ICovLAorICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8gbUZkcC5Db25zdW1lSW50ZWdyYWw8dWludDMyX3Q+KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGtaZXJvQWxpZ25tZW50T2Zmc2V0IC8qIGFsaWdubWVudF9vZmZzZXQgKi8sCisgICAgICAgICAgICBtRmRwLkNvbnN1bWVCb29sKCkgPyBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50MzJfdD4oKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoga1ZhbGlkTG9naWNhbEJsb2NrU2l6ZSAvKiBsb2dpY2FsX2Jsb2NrX3NpemUgKi8pOworICAgIG1CbG9ja0RldmljZXMucHVzaF9iYWNrKGNoYW5nZVBhcnRpdGlvbkRldmljZUluZm8pOworfQorCit2b2lkIEJ1aWxkZXJGdXp6ZXI6OmNhbGxDaGFuZ2VQYXJ0aXRpb25Hcm91cCgpIHsKKyAgICBzdHJpbmcgZ3JvdXAxID0gbUZkcC5Db25zdW1lQm9vbCgpID8gbUZkcC5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKGtNYXhCeXRlcykgOiAiZ3JvdXAxIjsKKyAgICB1aW50NjRfdCBncm91cDFTaXplID0gZ2V0UGFyYW1WYWx1ZSgwKTsKKworICAgIHN0cmluZyBncm91cDIgPSBtRmRwLkNvbnN1bWVCb29sKCkgPyBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKSA6ICJncm91cDIiOworICAgIHVpbnQ2NF90IGdyb3VwMlNpemUgPSBnZXRQYXJhbVZhbHVlKDApOworCisgICAgYm9vbCBncm91cDFBZGRlZCA9IG1CdWlsZGVyLT5BZGRHcm91cChncm91cDEsIGdyb3VwMVNpemUpOworICAgIGJvb2wgZ3JvdXAyQWRkZWQgPSBtQnVpbGRlci0+QWRkR3JvdXAoZ3JvdXAyLCBncm91cDJTaXplKTsKKworICAgIHN0cmluZyBjaGFuZ2VHcm91cFBhcnRpdGlvbk5hbWUgPSBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKTsKKyAgICBpZiAoY2hhbmdlR3JvdXBQYXJ0aXRpb25OYW1lLnNpemUoKSAmJiBncm91cDFBZGRlZCAmJiBncm91cDJBZGRlZCkgeworICAgICAgICBQYXJ0aXRpb24qIGNoYW5nZUdyb3VwUGFydGl0aW9uID0gbUJ1aWxkZXItPkFkZFBhcnRpdGlvbihjaGFuZ2VHcm91cFBhcnRpdGlvbk5hbWUsIGdyb3VwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBfUEFSVElUSU9OX0FUVFJfUkVBRE9OTFkpOworICAgICAgICBpZiAoY2hhbmdlR3JvdXBQYXJ0aXRpb24pIHsKKyAgICAgICAgICAgIG1CdWlsZGVyLT5DaGFuZ2VQYXJ0aXRpb25Hcm91cChjaGFuZ2VHcm91cFBhcnRpdGlvbiwgZ3JvdXAyKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBCdWlsZGVyRnV6emVyOjpjYWxsVmVyaWZ5RXh0ZW50c0FnYWluc3RTb3VyY2VNZXRhZGF0YSgpIHsKKyAgICB1aW50NjRfdCBzb3VyY2VCbG9ja0RldlNpemUgPSBnZXRQYXJhbVZhbHVlKGtWYWxpZEJsb2NrU2l6ZSk7CisgICAgdWludDMyX3Qgc291cmNlTWV0YWRhdGFNYXhTaXplID0gZ2V0UGFyYW1WYWx1ZShrVmFsaWRNZXRhZGF0YVNpemUpOworICAgIHVpbnQzMl90IHNvdXJjZVNsb3RDb3VudCA9IG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50MzJfdD4oMCwgMik7CisgICAgYXV0byBzb3VyY2VCdWlsZGVyID0KKyAgICAgICAgICAgIE1ldGFkYXRhQnVpbGRlcjo6TmV3KHNvdXJjZUJsb2NrRGV2U2l6ZSwgc291cmNlTWV0YWRhdGFNYXhTaXplLCBzb3VyY2VTbG90Q291bnQpOworCisgICAgdWludDY0X3QgdGFyZ2V0QmxvY2tEZXZTaXplID0gZ2V0UGFyYW1WYWx1ZShrVmFsaWRCbG9ja1NpemUpOworICAgIHVpbnQzMl90IHRhcmdldE1ldGFkYXRhTWF4U2l6ZSA9IGdldFBhcmFtVmFsdWUoa1ZhbGlkTWV0YWRhdGFTaXplKTsKKyAgICB1aW50MzJfdCB0YXJnZXRTbG90Q291bnQgPSBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KDAsIDIpOworICAgIGF1dG8gdGFyZ2V0QnVpbGRlciA9CisgICAgICAgICAgICBNZXRhZGF0YUJ1aWxkZXI6Ok5ldyh0YXJnZXRCbG9ja0RldlNpemUsIHRhcmdldE1ldGFkYXRhTWF4U2l6ZSwgdGFyZ2V0U2xvdENvdW50KTsKKworICAgIGlmIChzb3VyY2VCdWlsZGVyICYmIHRhcmdldEJ1aWxkZXIpIHsKKyAgICAgICAgaW50NjRfdCBzb3VyY2VHcm91cHMgPSBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8aW50NjRfdD4oa01pbkVsZW1lbnRzLCBrTWF4RWxlbWVudHMpOworICAgICAgICBmb3IgKGludDY0X3QgaWR4ID0gMDsgaWR4IDwgc291cmNlR3JvdXBzOyArK2lkeCkgeworICAgICAgICAgICAgc291cmNlQnVpbGRlci0+QWRkR3JvdXAoCisgICAgICAgICAgICAgICAgICAgIG1GZHAuUGlja1ZhbHVlSW5BcnJheShtR3JvdXBOYW1lcyksCisgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUJvb2woKSA/IGtWYWxpZE1heEdyb3VwU2l6ZSA6IG1GZHAuQ29uc3VtZUludGVncmFsPHVpbnQ2NF90PigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGludDY0X3Qgc291cmNlUGFydGl0aW9ucyA9IG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTxpbnQ2NF90PihrTWluRWxlbWVudHMsIGtNYXhFbGVtZW50cyk7CisgICAgICAgIGZvciAoaW50NjRfdCBpZHggPSAwOyBpZHggPCBzb3VyY2VQYXJ0aXRpb25zOyArK2lkeCkgeworICAgICAgICAgICAgc291cmNlQnVpbGRlci0+QWRkUGFydGl0aW9uKG1GZHAuUGlja1ZhbHVlSW5BcnJheShtUGFydGl0aW9uTmFtZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQX1BBUlRJVElPTl9BVFRSX1JFQURPTkxZKTsKKyAgICAgICAgfQorCisgICAgICAgIGludDY0X3QgdGFyZ2V0R3JvdXBzID0gbUZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlPGludDY0X3Q+KGtNaW5FbGVtZW50cywga01heEVsZW1lbnRzKTsKKyAgICAgICAgZm9yIChpbnQ2NF90IGlkeCA9IDA7IGlkeCA8IHRhcmdldEdyb3VwczsgKytpZHgpIHsKKyAgICAgICAgICAgIHRhcmdldEJ1aWxkZXItPkFkZEdyb3VwKAorICAgICAgICAgICAgICAgICAgICBtRmRwLlBpY2tWYWx1ZUluQXJyYXkobUdyb3VwTmFtZXMpLAorICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVCb29sKCkgPyBrVmFsaWRNYXhHcm91cFNpemUgOiBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKSk7CisgICAgICAgIH0KKworICAgICAgICBpbnQ2NF90IHRhcmdldFBhcnRpdGlvbnMgPSBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8aW50NjRfdD4oa01pbkVsZW1lbnRzLCBrTWF4RWxlbWVudHMpOworICAgICAgICBmb3IgKGludDY0X3QgaWR4ID0gMDsgaWR4IDwgdGFyZ2V0UGFydGl0aW9uczsgKytpZHgpIHsKKyAgICAgICAgICAgIHRhcmdldEJ1aWxkZXItPkFkZFBhcnRpdGlvbihtRmRwLlBpY2tWYWx1ZUluQXJyYXkobVBhcnRpdGlvbk5hbWVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUF9QQVJUSVRJT05fQVRUUl9SRUFET05MWSk7CisgICAgICAgIH0KKworICAgICAgICBNZXRhZGF0YUJ1aWxkZXI6OlZlcmlmeUV4dGVudHNBZ2FpbnN0U291cmNlTWV0YWRhdGEoCisgICAgICAgICAgICAgICAgKnNvdXJjZUJ1aWxkZXIsIG1GZHAuQ29uc3VtZUJvb2woKSA/IDAgOiAxIC8qIHNvdXJjZV9zbG90X251bWJlciAqLywgKnRhcmdldEJ1aWxkZXIsCisgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8gMCA6IDEgLyogdGFyZ2V0X3Nsb3RfbnVtYmVyICovLAorICAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+eyJzeXN0ZW0iLCAidmVuZG9yIiwgbUZkcC5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKGtNYXhCeXRlcyl9KTsKKyAgICB9Cit9CisKK3ZvaWQgQnVpbGRlckZ1enplcjo6aW52b2tlQnVpbGRlckFQSXMoKSB7CisgICAgc3RyaW5nIHN1cGVyQmxvY2tEZXZpY2VOYW1lID0KKyAgICAgICAgICAgIG1GZHAuQ29uc3VtZUJvb2woKSA/IG1GZHAuQ29uc3VtZVJhbmRvbUxlbmd0aFN0cmluZyhrTWF4Qnl0ZXMpIDoga0RldmljZUluZm9OYW1lOworICAgIHVpbnQzMl90IHJhbmRvbUJ1aWxkZXIgPSBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KGtNaW5CdWlsZGVyLCBrTWF4QnVpbGRlcik7CisgICAgc2VsZWN0UmFuZG9tQnVpbGRlcihyYW5kb21CdWlsZGVyLCBzdXBlckJsb2NrRGV2aWNlTmFtZSk7CisKKyAgICBpZiAobUJ1aWxkZXIuZ2V0KCkpIHsKKyAgICAgICAgc2V0dXBCdWlsZGVyKHN1cGVyQmxvY2tEZXZpY2VOYW1lKTsKKworICAgICAgICB3aGlsZSAobUZkcC5yZW1haW5pbmdfYnl0ZXMoKSkgeworICAgICAgICAgICAgYXV0byBpbnZva2VBUElzID0gbUZkcC5QaWNrVmFsdWVJbkFycmF5PGNvbnN0IGZ1bmN0aW9uPHZvaWQoKT4+KHsKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeyBjYWxsQ2hhbmdlUGFydGl0aW9uR3JvdXAoKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGFkZGVkR3JvdXBOYW1lID0gbUZkcC5QaWNrVmFsdWVJbkFycmF5KG1Hcm91cE5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1CdWlsZGVyLT5BZGRHcm91cChhZGRlZEdyb3VwTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDY0X3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01pblZhbHVlLCBrTWF4VmFsdWUpIC8qIG1heF9zaXplICovKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHBhcnRpdGlvbk5hbWUgPSBtRmRwLlBpY2tWYWx1ZUluQXJyYXkobVBhcnRpdGlvbk5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhcnRpdGlvbiogYWRkZWRQYXJ0aXRpb24gPSBtQnVpbGRlci0+QWRkUGFydGl0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25OYW1lLCBtRmRwLlBpY2tWYWx1ZUluQXJyYXkoa0F0dHJpYnV0ZVR5cGVzKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgbnVtU2VjdG9ycyA9IG1GZHAuQ29uc3VtZUJvb2woKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50NjRfdD4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWluU2VjdG9yVmFsdWUsIGtNYXhTZWN0b3JWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBrVmFsaWROdW1TZWN0b3JzOworICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBwaHlzaWNhbFNlY3RvciA9IG1GZHAuQ29uc3VtZUJvb2woKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDY0X3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtNaW5TZWN0b3JWYWx1ZSwga01heFNlY3RvclZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBrVmFsaWRQaHlzaWNhbFNlY3RvcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBudW1FeHRlbnRzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlPGludDY0X3Q+KGtNaW5FbGVtZW50cywga01heEVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXh0ZW50QWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gMDsgaSA8PSBudW1FeHRlbnRzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnRBZGRlZCA9IG1CdWlsZGVyLT5BZGRMaW5lYXJFeHRlbnQobUZ1enpQYXJ0aXRpb24sIGtEZXZpY2VJbmZvTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtU2VjdG9ycywgcGh5c2ljYWxTZWN0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW50QWRkZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVfcHRyPExwTWV0YWRhdGE+IG1ldGFkYXRhID0gbUJ1aWxkZXItPkV4cG9ydCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFsaWduZWRTaXplID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50NjRfdD4oa01pblZhbHVlLCBrTWF4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GdXp6UGFydGl0aW9uLT5HZXRCZWdpbm5pbmdFeHRlbnRzKExQX1NFQ1RPUl9TSVpFICogbnVtRXh0ZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsgY2FsbFZlcmlmeUV4dGVudHNBZ2FpbnN0U291cmNlTWV0YWRhdGEoKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeyBtQnVpbGRlci0+TGlzdFBhcnRpdGlvbnNJbkdyb3VwKG1GZHAuUGlja1ZhbHVlSW5BcnJheShtR3JvdXBOYW1lcykpOyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IG1heFNpemUgPSBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1CdWlsZGVyLT5DaGFuZ2VHcm91cFNpemUobUZkcC5QaWNrVmFsdWVJbkFycmF5KG1Hcm91cE5hbWVzKSwgbWF4U2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBkZXZpY2VJbmZvTmFtZSA9IG1GZHAuQ29uc3VtZUJvb2woKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGtEZXZpY2VJbmZvTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1GZHAuQ29uc3VtZVJhbmRvbUxlbmd0aFN0cmluZyhrTWF4Qnl0ZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbUJ1aWxkZXItPkdldEJsb2NrRGV2aWNlSW5mbyhkZXZpY2VJbmZvTmFtZSwgJm1CbG9ja0RldmljZXNbMV0pOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZGV2aWNlSW5mb05hbWUgPSBtRmRwLkNvbnN1bWVCb29sKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBrRGV2aWNlSW5mb05hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1CdWlsZGVyLT5VcGRhdGVCbG9ja0RldmljZUluZm8oZGV2aWNlSW5mb05hbWUsIG1CbG9ja0RldmljZXNbMV0pOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVfcHRyPExwTWV0YWRhdGE+IG1ldGFkYXRhID0gbUJ1aWxkZXItPkV4cG9ydCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbUJ1aWxkZXItPkltcG9ydFBhcnRpdGlvbnMoKm1ldGFkYXRhLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge21GZHAuUGlja1ZhbHVlSW5BcnJheShtUGFydGl0aW9uTmFtZXMpfSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsgbUJ1aWxkZXItPkhhc0Jsb2NrRGV2aWNlKG1GZHAuUGlja1ZhbHVlSW5BcnJheShtUGFydGl0aW9uTmFtZXMpKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeyBtQnVpbGRlci0+U2V0VmlydHVhbEFCRGV2aWNlRmxhZygpOyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7IG1CdWlsZGVyLT5TZXRBdXRvU2xvdFN1ZmZpeGluZygpOyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7IG1CdWlsZGVyLT5MaXN0R3JvdXBzKCk7IH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsgbUJ1aWxkZXItPlVzZWRTcGFjZSgpOyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7IG1CdWlsZGVyLT5SZXF1aXJlRXhwYW5kZWRNZXRhZGF0YUhlYWRlcigpOyB9LAorICAgICAgICAgICAgICAgICAgICBbJl0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZXNpemVkUGFydGl0aW9uU2l6ZSA9IGdldFBhcmFtVmFsdWUoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQnVpbGRlci0+UmVzaXplUGFydGl0aW9uKG1SZXNpemVQYXJ0aXRpb24sIHJlc2l6ZWRQYXJ0aXRpb25TaXplKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc291cmNlU2xvdCA9IG1GZHAuQ29uc3VtZUJvb2woKSA/IDAgOiAxOworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFyZ2V0U2xvdCA9IG1GZHAuQ29uc3VtZUJvb2woKSA/IDAgOiAxOworICAgICAgICAgICAgICAgICAgICAgICAgUGFydGl0aW9uT3BlbmVyIHBhcnRpdGlvbk9wZW5lcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBzb3VyY2VQYXJ0aXRpb24gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVCb29sKCkgPyBrRnV6elBhcnRpdGlvbk5hbWUgOiBrRGV2aWNlSW5mb05hbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhQnVpbGRlcjo6TmV3Rm9yVXBkYXRlKHBhcnRpdGlvbk9wZW5lciwgc291cmNlUGFydGl0aW9uLCBzb3VyY2VTbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2xvdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25PcGVuZXIuR2V0RGV2aWNlU3RyaW5nKG1GZHAuUGlja1ZhbHVlSW5BcnJheShtUGFydGl0aW9uTmFtZXMpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlX3B0cjxMcE1ldGFkYXRhPiBtZXRhZGF0YSA9IG1CdWlsZGVyLT5FeHBvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhQnVpbGRlcjo6TmV3KCptZXRhZGF0YS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsgbUJ1aWxkZXItPkFsbG9jYXRhYmxlU3BhY2UoKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUGFydGl0aW9uT3BlbmVyIHBPcGVuZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgc3VwZXJQYXJ0aXRpb25OYW1lID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8ga1N1cGVyUGFydGl0aW9uTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBPcGVuZXIuT3BlbihzdXBlclBhcnRpdGlvbk5hbWUsIE9fUkRPTkxZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBPcGVuZXIuR2V0SW5mbyhzdXBlclBhcnRpdGlvbk5hbWUsICZtQmxvY2tEZXZpY2VzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUGFydGl0aW9uT3BlbmVyIHBPcGVuZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgc3VwZXJQYXJ0aXRpb25OYW1lID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lQm9vbCgpID8ga1N1cGVyUGFydGl0aW9uTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBPcGVuZXIuT3BlbihzdXBlclBhcnRpdGlvbk5hbWUsIE9fUkRPTkxZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBPcGVuZXIuR2V0RGV2aWNlU3RyaW5nKHN1cGVyUGFydGl0aW9uTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVydmFsOjpJbnRlcnNlY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVydmFsKG1GZHAuQ29uc3VtZUludGVncmFsPHVpbnQ2NF90PigpIC8qIGRldmljZSBfaW5kZXggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUludGVncmFsPHVpbnQ2NF90PigpIC8qIHN0YXJ0ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKSkgLyogZW5kICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnZhbChtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKSAvKiBkZXZpY2UgX2luZGV4ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKSAvKiBzdGFydCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lSW50ZWdyYWw8dWludDY0X3Q+KCkgLyogZW5kICovKSk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvcjxJbnRlcnZhbD4gaW50ZXJ2YWxWZWN0b3JBOworICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBpbnRlcm5hbFZlY3RvckFFbGVtZW50cyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTxpbnQ2NF90PihrTWluRWxlbWVudHMsIGtNYXhFbGVtZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludDY0X3QgaWR4ID0gMDsgaWR4IDwgaW50ZXJuYWxWZWN0b3JBRWxlbWVudHM7ICsraWR4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxWZWN0b3JBLnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVydmFsKG1GZHAuQ29uc3VtZUludGVncmFsPHVpbnQ2NF90PigpIC8qIGRldmljZSBfaW5kZXggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKSAvKiBzdGFydCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUludGVncmFsPHVpbnQ2NF90PigpIC8qIGVuZCAqLykpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8SW50ZXJ2YWw+IGludGVydmFsVmVjdG9yQjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgaW50ZXJuYWxWZWN0b3JCRWxlbWVudHMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8aW50NjRfdD4oa01pbkVsZW1lbnRzLCBrTWF4RWxlbWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQ2NF90IGlkeCA9IDA7IGlkeCA8IGludGVybmFsVmVjdG9yQkVsZW1lbnRzOyArK2lkeCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVydmFsVmVjdG9yQi5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnZhbChtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKSAvKiBkZXZpY2UgX2luZGV4ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lSW50ZWdyYWw8dWludDY0X3Q+KCkgLyogc3RhcnQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKSAvKiBlbmQgKi8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJ2YWw6OkludGVyc2VjdChpbnRlcnZhbFZlY3RvckEsIGludGVydmFsVmVjdG9yQik7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG51bVNlY3RvcnMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDY0X3Q+KGtNaW5WYWx1ZSwga01heFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRldmljZUluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlPHVpbnQzMl90PihrTWluVmFsdWUsIGtNYXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBwaHlzaWNhbFNlY3RvciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50NjRfdD4oa01pblZhbHVlLCBrTWF4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgTGluZWFyRXh0ZW50IGV4dGVudChudW1TZWN0b3JzLCBkZXZpY2VJbmRleCwgcGh5c2ljYWxTZWN0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50LkFzSW50ZXJ2YWwoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgSVByb3BlcnR5RmV0Y2hlcjo6T3ZlcnJpZGVGb3JUZXN0aW5nKHN0ZDo6bWFrZV91bmlxdWU8UHJvcGVydHlGZXRjaGVyPigpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaW52b2tlQVBJcygpOworICAgICAgICB9CisgICAgICAgIGlmIChtRmRwLkNvbnN1bWVCb29sKCkpIHsKKyAgICAgICAgICAgIG1CdWlsZGVyLT5SZW1vdmVHcm91cEFuZFBhcnRpdGlvbnMobUZkcC5QaWNrVmFsdWVJbkFycmF5KG1Hcm91cE5hbWVzKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHJpbmcgcmVtb3ZlUGFydGl0aW9uID0gbUZkcC5QaWNrVmFsdWVJbkFycmF5KG1QYXJ0aXRpb25OYW1lcyk7CisgICAgICAgICAgICBtQnVpbGRlci0+UmVtb3ZlUGFydGl0aW9uKHJlbW92ZVBhcnRpdGlvbik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQnVpbGRlckZ1enplcjo6cHJvY2VzcygpIHsKKyAgICBpbnZva2VCdWlsZGVyQVBJcygpOworfQorCitleHRlcm4gIkMiIGludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgQnVpbGRlckZ1enplciBidWlsZGVyRnV6emVyKGRhdGEsIHNpemUpOworICAgIGJ1aWxkZXJGdXp6ZXIucHJvY2VzcygpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZnNfbWdyL2xpYmxwL2Z1enplci9saWJscF9zdXBlcl9sYXlvdXRfYnVpbGRlcl9mdXp6ZXIuY3BwIGIvZnNfbWdyL2xpYmxwL2Z1enplci9saWJscF9zdXBlcl9sYXlvdXRfYnVpbGRlcl9mdXp6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzA5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9mc19tZ3IvbGlibHAvZnV6emVyL2xpYmxwX3N1cGVyX2xheW91dF9idWlsZGVyX2Z1enplci5jcHAKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL3VuaXF1ZV9mZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZnV6emVyL0Z1enplZERhdGFQcm92aWRlci5oPgorI2luY2x1ZGUgPGxpYmxwL21ldGFkYXRhX2Zvcm1hdC5oPgorI2luY2x1ZGUgPGxpYmxwL3N1cGVyX2xheW91dF9idWlsZGVyLmg+CisjaW5jbHVkZSA8bGludXgvbWVtZmQuaD4KKyNpbmNsdWRlIDxzdG9yYWdlX2xpdGVyYWxzL3N0b3JhZ2VfbGl0ZXJhbHMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorCit1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6ZnNfbWdyOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIHVuaXF1ZV9mZCA9IGFuZHJvaWQ6OmJhc2U6OnVuaXF1ZV9mZDsKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOjpzdG9yYWdlX2xpdGVyYWxzOworCitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtTdXBlckxheW91dFZhbGlkQmxvY2tEZXZTaXplID0gNF9NaUI7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtNaW5CbG9ja0RldlZhbHVlID0gMDsKK3N0YXRpYyBjb25zdGV4cHIgdWludDY0X3Qga01heEJsb2NrRGV2VmFsdWUgPSAxMDAwMDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtNaW5FbGVtZW50cyA9IDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGtNYXhFbGVtZW50cyA9IDEwOworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrU3VwZXJMYXlvdXRWYWxpZE1ldGFkYXRhU2l6ZSA9IDhfS2lCOworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrTWluTWV0YWRhdGFWYWx1ZSA9IDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtNYXhNZXRhZGF0YVZhbHVlID0gMTAwMDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtNYXhCeXRlcyA9IDIwOworc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrTWluU2xvdCA9IDA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtNYXhTbG90ID0gMTA7CitzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtNaW5PcGVuID0gMDsKK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qga01heE9wZW4gPSAyOworCitjb25zdCB1aW50NjRfdCBrQXR0cmlidXRlVHlwZXNbXSA9IHsKKyAgICAgICAgTFBfUEFSVElUSU9OX0FUVFJfTk9ORSwgICAgTFBfUEFSVElUSU9OX0FUVFJfUkVBRE9OTFksIExQX1BBUlRJVElPTl9BVFRSX1NMT1RfU1VGRklYRUQsCisgICAgICAgIExQX1BBUlRJVElPTl9BVFRSX1VQREFURUQsIExQX1BBUlRJVElPTl9BVFRSX0RJU0FCTEVELAorfTsKKworY2xhc3MgU3VwZXJMYXlvdXRCdWlsZGVyRnV6emVyIHsKKyAgcHVibGljOgorICAgIFN1cGVyTGF5b3V0QnVpbGRlckZ1enplcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgOiBtRmRwKGRhdGEsIHNpemUpe307CisgICAgdm9pZCBwcm9jZXNzKCk7CisKKyAgcHJpdmF0ZToKKyAgICBGdXp6ZWREYXRhUHJvdmlkZXIgbUZkcDsKKyAgICB2b2lkIGludm9rZVN1cGVyTGF5b3V0QnVpbGRlckFQSXMoKTsKKyAgICB2b2lkIGNhbGxSYW5kb21PcGVuKGludDMyX3Qgb3Blbik7CisgICAgdm9pZCBhZGRNdWx0aXBsZVBhcnRpdGlvbnMoaW50MzJfdCBudW1QYXJ0aXRpb25zKTsKKyAgICB2b2lkIHNldHVwU3VwZXJMYXlvdXRCdWlsZGVyKHN0cmluZyBmdXp6UGFydGl0aW9uTmFtZSk7CisgICAgU3VwZXJMYXlvdXRCdWlsZGVyIG1TdXBlckxheW91dEJ1aWxkZXI7CisgICAgdW5pcXVlX3B0cjxNZXRhZGF0YUJ1aWxkZXI+IG1TdXBlckJ1aWxkZXI7CisgICAgdW5pcXVlX3B0cjxMcE1ldGFkYXRhPiBtTWV0YWRhdGE7CisgICAgYm9vbCBtT3BlblN1Y2Nlc3MgPSBmYWxzZTsKK307CisKK3ZvaWQgU3VwZXJMYXlvdXRCdWlsZGVyRnV6emVyOjpzZXR1cFN1cGVyTGF5b3V0QnVpbGRlcihzdHJpbmcgZnV6elBhcnRpdGlvbk5hbWUpIHsKKyAgICB1aW50NjRfdCByYW5kb21CbG9ja0RldlNpemUgPQorICAgICAgICAgICAgbUZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlPHVpbnQ2NF90PihrTWluQmxvY2tEZXZWYWx1ZSwga01heEJsb2NrRGV2VmFsdWUpOworICAgIHVpbnQ2NF90IGJsb2NrRGV2U2l6ZSA9IG1GZHAuQ29uc3VtZUJvb2woKSA/IGtTdXBlckxheW91dFZhbGlkQmxvY2tEZXZTaXplIDogcmFuZG9tQmxvY2tEZXZTaXplOworICAgIHVpbnQzMl90IHJhbmRvbU1ldGFkYXRhTWF4U2l6ZSA9CisgICAgICAgICAgICBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KGtNaW5NZXRhZGF0YVZhbHVlLCBrTWF4TWV0YWRhdGFWYWx1ZSk7CisgICAgdWludDMyX3QgbWV0YWRhdGFNYXhTaXplID0KKyAgICAgICAgICAgIG1GZHAuQ29uc3VtZUJvb2woKSA/IGtTdXBlckxheW91dFZhbGlkTWV0YWRhdGFTaXplIDogcmFuZG9tTWV0YWRhdGFNYXhTaXplOworICAgIHVpbnQzMl90IG1ldGFkYXRhU2xvdENvdW50ID0gbUZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlPHVpbnQzMl90PihrTWluU2xvdCwga01heFNsb3QpOworICAgIG1TdXBlckJ1aWxkZXIgPSBNZXRhZGF0YUJ1aWxkZXI6Ok5ldyhibG9ja0RldlNpemUsIG1ldGFkYXRhTWF4U2l6ZSwgbWV0YWRhdGFTbG90Q291bnQpOworCisgICAgaWYgKG1TdXBlckJ1aWxkZXIuZ2V0KCkpIHsKKyAgICAgICAgaWYgKG1GZHAuQ29uc3VtZUJvb2woKSkgeworICAgICAgICAgICAgaW50MzJfdCBudW1QYXJ0aXRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgbUZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlPGludDMyX3Q+KGtNaW5FbGVtZW50cywga01heEVsZW1lbnRzKTsKKyAgICAgICAgICAgIGFkZE11bHRpcGxlUGFydGl0aW9ucyhudW1QYXJ0aXRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQzMl90IHJhbmRvbU9wZW4gPSBtRmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KGtNaW5PcGVuLCBrTWF4T3Blbik7CisgICAgICAgIGNhbGxSYW5kb21PcGVuKHJhbmRvbU9wZW4pOworCisgICAgICAgIGlmICghZnV6elBhcnRpdGlvbk5hbWUuc2l6ZSgpKSB7CisgICAgICAgICAgICBmdXp6UGFydGl0aW9uTmFtZSA9ICJidWlsZGVyX3BhcnRpdGlvbiI7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU3VwZXJMYXlvdXRCdWlsZGVyRnV6emVyOjphZGRNdWx0aXBsZVBhcnRpdGlvbnMoaW50MzJfdCBudW1QYXJ0aXRpb25zKSB7CisgICAgZm9yIChpbnQzMl90IGlkeCA9IDA7IGlkeCA8IG51bVBhcnRpdGlvbnM7ICsraWR4KSB7CisgICAgICAgIHN0cmluZyBwYXJ0aXRpb25OYW1lID0gbUZkcC5Db25zdW1lQm9vbCgpID8gbUZkcC5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKGtNYXhCeXRlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiYnVpbGRlcl9wYXJ0aXRpb24iOworICAgICAgICBtU3VwZXJCdWlsZGVyLT5BZGRQYXJ0aXRpb24ocGFydGl0aW9uTmFtZSwgbUZkcC5QaWNrVmFsdWVJbkFycmF5KGtBdHRyaWJ1dGVUeXBlcykpOworICAgIH0KK30KKwordm9pZCBTdXBlckxheW91dEJ1aWxkZXJGdXp6ZXI6OmNhbGxSYW5kb21PcGVuKGludDMyX3Qgb3BlbikgeworICAgIG1NZXRhZGF0YSA9IG1TdXBlckJ1aWxkZXItPkV4cG9ydCgpOworICAgIHN3aXRjaCAob3BlbikgeworICAgICAgICBjYXNlIDA6IHsKKyAgICAgICAgICAgIHZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGEgPSBtRmRwLkNvbnN1bWVCeXRlczx1aW50OF90PihrTWF4Qnl0ZXMpOworICAgICAgICAgICAgbU9wZW5TdWNjZXNzID0gbVN1cGVyTGF5b3V0QnVpbGRlci5PcGVuKCh2b2lkKikoaW1hZ2VEYXRhLmRhdGEoKSksIGltYWdlRGF0YS5zaXplKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAxOiB7CisgICAgICAgICAgICBtT3BlblN1Y2Nlc3MgPSBtU3VwZXJMYXlvdXRCdWlsZGVyLk9wZW4oKm1NZXRhZGF0YS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDI6IHsKKyAgICAgICAgICAgIHVuaXF1ZV9mZCBmZChzeXNjYWxsKF9fTlJfbWVtZmRfY3JlYXRlLCAiaW1hZ2VfZmlsZSIsIDApKTsKKyAgICAgICAgICAgIFdyaXRlVG9JbWFnZUZpbGUoZmQsICptTWV0YWRhdGEuZ2V0KCkpOworICAgICAgICAgICAgbU9wZW5TdWNjZXNzID0gbVN1cGVyTGF5b3V0QnVpbGRlci5PcGVuKGZkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFN1cGVyTGF5b3V0QnVpbGRlckZ1enplcjo6aW52b2tlU3VwZXJMYXlvdXRCdWlsZGVyQVBJcygpIHsKKyAgICBzdHJpbmcgaW1hZ2VOYW1lID0gbUZkcC5Db25zdW1lUmFuZG9tTGVuZ3RoU3RyaW5nKGtNYXhCeXRlcyk7CisgICAgc3RyaW5nIGZ1enpQYXJ0aXRpb25OYW1lID0KKyAgICAgICAgICAgIG1GZHAuQ29uc3VtZUJvb2woKSA/ICJidWlsZGVyX3BhcnRpdGlvbiIgOiBtRmRwLkNvbnN1bWVSYW5kb21MZW5ndGhTdHJpbmcoa01heEJ5dGVzKTsKKyAgICBzZXR1cFN1cGVyTGF5b3V0QnVpbGRlcihmdXp6UGFydGl0aW9uTmFtZSk7CisgICAgaWYgKG1PcGVuU3VjY2VzcykgeworICAgICAgICB3aGlsZSAobUZkcC5yZW1haW5pbmdfYnl0ZXMoKSkgeworICAgICAgICAgICAgYXV0byBpbnZva2VTdXBlckFQSXMgPSBtRmRwLlBpY2tWYWx1ZUluQXJyYXk8Y29uc3QgZnVuY3Rpb248dm9pZCgpPj4oeworICAgICAgICAgICAgICAgICAgICBbJl0oKSB7IG1TdXBlckxheW91dEJ1aWxkZXIuR2V0SW1hZ2VMYXlvdXQoKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVN1cGVyTGF5b3V0QnVpbGRlci5BZGRQYXJ0aXRpb24oZnV6elBhcnRpdGlvbk5hbWUsIGltYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHAuQ29uc3VtZUludGVncmFsPHVpbnQ2NF90PigpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaW52b2tlU3VwZXJBUElzKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU3VwZXJMYXlvdXRCdWlsZGVyRnV6emVyOjpwcm9jZXNzKCkgeworICAgIGludm9rZVN1cGVyTGF5b3V0QnVpbGRlckFQSXMoKTsKK30KKworZXh0ZXJuICJDIiBpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIFN1cGVyTGF5b3V0QnVpbGRlckZ1enplciBzdXBlckxheW91dEJ1aWxkZXJGdXp6ZXIoZGF0YSwgc2l6ZSk7CisgICAgc3VwZXJMYXlvdXRCdWlsZGVyRnV6emVyLnByb2Nlc3MoKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2luaXQvcGVyc2lzdGVudF9wcm9wZXJ0aWVzLmNwcCBiL2luaXQvcGVyc2lzdGVudF9wcm9wZXJ0aWVzLmNwcAppbmRleCA4ZWZiNzJjLi5lODkyNDRmIDEwMDY0NAotLS0gYS9pbml0L3BlcnNpc3RlbnRfcHJvcGVydGllcy5jcHAKKysrIGIvaW5pdC9wZXJzaXN0ZW50X3Byb3BlcnRpZXMuY3BwCkBAIC0xMTUsMjQgKzExNSw2IEBACiAgICAgfQogfQogCi1QZXJzaXN0ZW50UHJvcGVydGllcyBMb2FkUGVyc2lzdGVudFByb3BlcnRpZXNGcm9tTWVtb3J5KCkgewotICAgIFBlcnNpc3RlbnRQcm9wZXJ0aWVzIHBlcnNpc3RlbnRfcHJvcGVydGllczsKLSAgICBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoKAotICAgICAgICBbXShjb25zdCBwcm9wX2luZm8qIHBpLCB2b2lkKiBjb29raWUpIHsKLSAgICAgICAgICAgIF9fc3lzdGVtX3Byb3BlcnR5X3JlYWRfY2FsbGJhY2soCi0gICAgICAgICAgICAgICAgcGksCi0gICAgICAgICAgICAgICAgW10odm9pZCogY29va2llLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSwgdW5zaWduZWQgc2VyaWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTdGFydHNXaXRoKG5hbWUsICJwZXJzaXN0LiIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHByb3BlcnRpZXMgPSByZWludGVycHJldF9jYXN0PFBlcnNpc3RlbnRQcm9wZXJ0aWVzKj4oY29va2llKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBlcnNpc3RlbnRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJvcGVydGllcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGNvb2tpZSk7Ci0gICAgICAgIH0sCi0gICAgICAgICZwZXJzaXN0ZW50X3Byb3BlcnRpZXMpOwotICAgIHJldHVybiBwZXJzaXN0ZW50X3Byb3BlcnRpZXM7Ci19Ci0KIFJlc3VsdDxzdGQ6OnN0cmluZz4gUmVhZFBlcnNpc3RlbnRQcm9wZXJ0eUZpbGUoKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgdGVtcF9maWxlbmFtZSA9IHBlcnNpc3RlbnRfcHJvcGVydHlfZmlsZW5hbWUgKyAiLnRtcCI7CiAgICAgaWYgKGFjY2Vzcyh0ZW1wX2ZpbGVuYW1lLmNfc3RyKCksIEZfT0spID09IDApIHsKQEAgLTIyMSw2ICsyMDMsMjQgQEAKICAgICByZXR1cm4ge307CiB9CiAKK1BlcnNpc3RlbnRQcm9wZXJ0aWVzIExvYWRQZXJzaXN0ZW50UHJvcGVydGllc0Zyb21NZW1vcnkoKSB7CisgICAgUGVyc2lzdGVudFByb3BlcnRpZXMgcGVyc2lzdGVudF9wcm9wZXJ0aWVzOworICAgIF9fc3lzdGVtX3Byb3BlcnR5X2ZvcmVhY2goCisgICAgICAgICAgICBbXShjb25zdCBwcm9wX2luZm8qIHBpLCB2b2lkKiBjb29raWUpIHsKKyAgICAgICAgICAgICAgICBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkX2NhbGxiYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgcGksCisgICAgICAgICAgICAgICAgICAgICAgICBbXSh2b2lkKiBjb29raWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlLCB1bnNpZ25lZCBzZXJpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RhcnRzV2l0aChuYW1lLCAicGVyc2lzdC4iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHByb3BlcnRpZXMgPSByZWludGVycHJldF9jYXN0PFBlcnNpc3RlbnRQcm9wZXJ0aWVzKj4oY29va2llKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkUGVyc2lzdGVudFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgY29va2llKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAmcGVyc2lzdGVudF9wcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4gcGVyc2lzdGVudF9wcm9wZXJ0aWVzOworfQorCiAvLyBQZXJzaXN0ZW50IHByb3BlcnRpZXMgYXJlIG5vdCB3cml0dGVuIG9mdGVuLCBzbyB3ZSByYXRoZXIgbm90IGtlZXAgYW55IGRhdGEgaW4gbWVtb3J5IGFuZCByZWFkCiAvLyB0aGVuIHJld3JpdGUgdGhlIHBlcnNpc3RlbnQgcHJvcGVydHkgZmlsZSBmb3IgZWFjaCB1cGRhdGUuCiB2b2lkIFdyaXRlUGVyc2lzdGVudFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpIHsKZGlmZiAtLWdpdCBhL2luaXQvcGVyc2lzdGVudF9wcm9wZXJ0aWVzLmggYi9pbml0L3BlcnNpc3RlbnRfcHJvcGVydGllcy5oCmluZGV4IGE2ZjgwZTYuLjdlOWQ0MzggMTAwNjQ0Ci0tLSBhL2luaXQvcGVyc2lzdGVudF9wcm9wZXJ0aWVzLmgKKysrIGIvaW5pdC9wZXJzaXN0ZW50X3Byb3BlcnRpZXMuaApAQCAtMjksNiArMjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVyc2lzdGVudFByb3BlcnRpZXMqIHBlcnNpc3RlbnRfcHJvcGVydGllcyk7CiBQZXJzaXN0ZW50UHJvcGVydGllcyBMb2FkUGVyc2lzdGVudFByb3BlcnRpZXMoKTsKIHZvaWQgV3JpdGVQZXJzaXN0ZW50UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CitQZXJzaXN0ZW50UHJvcGVydGllcyBMb2FkUGVyc2lzdGVudFByb3BlcnRpZXNGcm9tTWVtb3J5KCk7CiAKIC8vIEV4cG9zZWQgb25seSBmb3IgdGVzdGluZwogUmVzdWx0PFBlcnNpc3RlbnRQcm9wZXJ0aWVzPiBMb2FkUGVyc2lzdGVudFByb3BlcnR5RmlsZSgpOwpkaWZmIC0tZ2l0IGEvaW5pdC9wcm9wZXJ0eV9zZXJ2aWNlLmNwcCBiL2luaXQvcHJvcGVydHlfc2VydmljZS5jcHAKaW5kZXggMzhjYmVhMy4uYjA4YTkwNCAxMDA2NDQKLS0tIGEvaW5pdC9wcm9wZXJ0eV9zZXJ2aWNlLmNwcAorKysgYi9pbml0L3Byb3BlcnR5X3NlcnZpY2UuY3BwCkBAIC0xNDAwLDggKzE0MDAsNiBAQAogICAgICAgICAgICAgLy8gQXBwbHkgc3RhZ2VkIGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMKICAgICAgICAgICAgIGJvb2wgaGFzX3N0YWdlZF9wcm9wID0gZmFsc2U7CiAgICAgICAgICAgICBhdXRvIGNvbnN0IHN0YWdlZF9wcmVmaXggPSBzdGQ6OnN0cmluZ192aWV3KCJuZXh0X2Jvb3QuIik7Ci0gICAgICAgICAgICBhdXRvIGNvbnN0IHN0YWdlZF9wZXJzaXN0X3ByZWZpeCA9IHN0ZDo6c3RyaW5nX3ZpZXcoIm5leHRfYm9vdC5wZXJzaXN0LiIpOwotICAgICAgICAgICAgYXV0byBwZXJzaXN0X3Byb3BzX21hcCA9IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+KCk7CiAKICAgICAgICAgICAgIGF1dG8gcGVyc2lzdGVudF9wcm9wZXJ0aWVzID0gTG9hZFBlcnNpc3RlbnRQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHByb3BlcnR5X3JlY29yZCA6IHBlcnNpc3RlbnRfcHJvcGVydGllcy5wcm9wZXJ0aWVzKCkpIHsKQEAgLTE0MTIsMjMgKzE0MTAsMTYgQEAKICAgICAgICAgICAgICAgICAgIGhhc19zdGFnZWRfcHJvcCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICBhdXRvIGFjdHVhbF9wcm9wX25hbWUgPSBwcm9wX25hbWUuc3Vic3RyKHN0YWdlZF9wcmVmaXguc2l6ZSgpKTsKICAgICAgICAgICAgICAgICAgIEluaXRQcm9wZXJ0eVNldChhY3R1YWxfcHJvcF9uYW1lLCBwcm9wX3ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgIGlmIChTdGFydHNXaXRoKHByb3BfbmFtZSwgc3RhZ2VkX3BlcnNpc3RfcHJlZml4KSkgewotICAgICAgICAgICAgICAgICAgICBwZXJzaXN0X3Byb3BzX21hcFthY3R1YWxfcHJvcF9uYW1lXSA9IHByb3BfdmFsdWU7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcGVyc2lzdF9wcm9wc19tYXAuY291bnQocHJvcF9uYW1lKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICBJbml0UHJvcGVydHlTZXQocHJvcF9uYW1lLCBwcm9wX3ZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFVwZGF0ZSBwZXJzaXN0IHByb3AgZmlsZSBpZiB0aGVyZSBhcmUgc3RhZ2VkIHByb3BzCiAgICAgICAgICAgICBpZiAoaGFzX3N0YWdlZF9wcm9wKSB7Ci0gICAgICAgICAgICAgICAgUGVyc2lzdGVudFByb3BlcnRpZXMgdXBkYXRlZF9wZXJzaXN0X3Byb3BzOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgW3Byb3BfbmFtZSwgcHJvcF92YWx1ZV0gOiBwZXJzaXN0X3Byb3BzX21hcCkgewotICAgICAgICAgICAgICAgICAgICBBZGRQZXJzaXN0ZW50UHJvcGVydHkocHJvcF9uYW1lLCBwcm9wX3ZhbHVlLCAmdXBkYXRlZF9wZXJzaXN0X3Byb3BzKTsKLSAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICBQZXJzaXN0ZW50UHJvcGVydGllcyBwcm9wcyA9IExvYWRQZXJzaXN0ZW50UHJvcGVydGllc0Zyb21NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAvLyB3cml0ZSBjdXJyZW50IHVwZGF0ZWQgcGVyc2lzdCBwcm9wIGZpbGUKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdyaXRlUGVyc2lzdGVudFByb3BlcnR5RmlsZSh1cGRhdGVkX3BlcnNpc3RfcHJvcHMpOworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV3JpdGVQZXJzaXN0ZW50UHJvcGVydHlGaWxlKHByb3BzKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5vaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIExPRyhFUlJPUikgPDwgIkNvdWxkIG5vdCBzdG9yZSBwZXJzaXN0ZW50IHByb3BlcnR5OiAiIDw8IHJlc3VsdC5lcnJvcigpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2luaXQvc2VsaW51eC5jcHAgYi9pbml0L3NlbGludXguY3BwCmluZGV4IDkwOTViODUuLjFmMjExZGQgMTAwNjQ0Ci0tLSBhL2luaXQvc2VsaW51eC5jcHAKKysrIGIvaW5pdC9zZWxpbnV4LmNwcApAQCAtNTAzLDEwICs1MDMsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPDwgIikgZmFpbGVkIjsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlmIChhdXRvIHJlc3VsdCA9IFdyaXRlRmlsZSgiL3N5cy9mcy9zZWxpbnV4L2NoZWNrcmVxcHJvdCIsICIwIik7ICFyZXN1bHQub2soKSkgewotICAgICAgICBMT0coRkFUQUwpIDw8ICJVbmFibGUgdG8gd3JpdGUgdG8gL3N5cy9mcy9zZWxpbnV4L2NoZWNrcmVxcHJvdDogIiA8PCByZXN1bHQuZXJyb3IoKTsKLSAgICB9CiB9CiAKIGNvbnN0ZXhwciBzaXplX3Qga0tsb2dNZXNzYWdlU2l6ZSA9IDEwMjQ7CmRpZmYgLS1naXQgYS9saWJ2bmRrc3VwcG9ydC9saW5rZXIuY3BwIGIvbGlidm5ka3N1cHBvcnQvbGlua2VyLmNwcAppbmRleCBhZDRmYjMxLi5iMmIyNTdlIDEwMDY0NAotLS0gYS9saWJ2bmRrc3VwcG9ydC9saW5rZXIuY3BwCisrKyBiL2xpYnZuZGtzdXBwb3J0L2xpbmtlci5jcHAKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaGFuZGxlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFMT0dEKCJMb2FkaW5nICVzIGZyb20gY3VycmVudCBuYW1lc3BhY2UgaW5zdGVhZCBvZiBzcGhhbCBuYW1lc3BhY2UuIiwgbmFtZSk7CisgICAgICAgIEFMT0dXKCJMb2FkaW5nICVzIGZyb20gY3VycmVudCBuYW1lc3BhY2UgaW5zdGVhZCBvZiBzcGhhbCBuYW1lc3BhY2UuIiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBkbG9wZW4obmFtZSwgZmxhZyk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdHJ1c3R5L2tleW1hc3Rlci9mdXp6L0FuZHJvaWQuYnAgYi90cnVzdHkva2V5bWFzdGVyL2Z1enovQW5kcm9pZC5icAppbmRleCA1ZjI0YmM2Li5iMTBmNzI3IDEwMDY0NAotLS0gYS90cnVzdHkva2V5bWFzdGVyL2Z1enovQW5kcm9pZC5icAorKysgYi90cnVzdHkva2V5bWFzdGVyL2Z1enovQW5kcm9pZC5icApAQCAtMjYsNyArMjYsOSBAQAogICAgICAgICAiLURUUlVTVFlfQVBQX0ZJTEVOQU1FPVwia2V5bWFzdGVyLnN5bXMuZWxmXCIiLAogICAgIF0sCiAgICAgZnV6el9jb25maWc6IHsKLSAgICAgICBjYzogWyJ0cm9uZ0Bnb29nbGUuY29tIl0sCisgICAgICAgY2M6IFsidHJvbmdAZ29vZ2xlLmNvbSIsICJkcnlzZGFsZUBnb29nbGUuY29tIl0sCisgICAgICAgY29tcG9uZW50aWQ6IDEwODQ3MzMsCisgICAgICAgaG90bGlzdHM6IFsiNDI3MTY5NiJdLAogICAgIH0sCiAKICAgICAvLyBUaGUgaW5pdGlhbCBjb3JwdXMgZm9yIHRoaXMgZnV6emVyIHdhcyBkZXJpdmVkIGJ5IGR1bXBpbmcgbWVzc2FnZXMgZnJvbQpkaWZmIC0tZ2l0IGEvdHJ1c3R5L2tleW1pbnQvZnV6ei9BbmRyb2lkLmJwIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNzNkYjcKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L0FuZHJvaWQuYnAKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDIwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCit9CisKK2NjX2Z1enogeworICAgIG5hbWU6ICJ0cnVzdHlfa2V5bWludF9mdXp6ZXIiLAorICAgIGRlZmF1bHRzOiBbInRydXN0eV9mdXp6ZXJfZGVmYXVsdHMiXSwKKyAgICBzcmNzOiBbIjp0cnVzdHlfdGlwY19mdXp6ZXIiXSwKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1EVFJVU1RZX0FQUF9QT1JUPVwiY29tLmFuZHJvaWQudHJ1c3R5LmtleW1pbnRcIiIsCisgICAgICAgICItRFRSVVNUWV9BUFBfVVVJRD1cIjVmOTAyYWNlLTVlNWMtNGNkOC1hZTU0LTg3Yjg4YzIyZGRhZlwiIiwKKyAgICAgICAgIi1EVFJVU1RZX0FQUF9GSUxFTkFNRT1cImtleW1pbnRfYXBwLnN5bXMuZWxmXCIiLAorICAgIF0sCisgICAgZnV6el9jb25maWc6IHsKKyAgICAgICBjYzogWyJkcnlzZGFsZUBnb29nbGUuY29tIl0sCisgICAgICAgY29tcG9uZW50aWQ6IDEwODQ3MzMsCisgICAgICAgaG90bGlzdHM6IFsiNDI3MTY5NiJdLAorICAgIH0sCisKKyAgICAvLyBUaGUgaW5pdGlhbCBjb3JwdXMgZm9yIHRoaXMgZnV6emVyIHdhcyBkZXJpdmVkIGJ5IGR1bXBpbmcgbWVzc2FnZXMgZnJvbQorICAgIC8vIHRoZSBIQUwgc2VydmljZSB3aGlsZSBydW5uaW5nIHRoZSBWVFMgdGVzdHMgZm9yIEtleU1pbnQuCisgICAgY29ycHVzOiBbImNvcnB1cy8qIl0sCit9CmRpZmYgLS1naXQgYS90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxMTgwLTAgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxMTgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThmY2UyNQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjExODAtMApAQCAtMCwwICsxIEBACiuCEYAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxMjgxNDAtMCBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEyODE0MC0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmY2NDAKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxMjgxNDAtMApAQCAtMCwwICsxIEBACiuCEoFAClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTI4MTQzLTAgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxMjgxNDMtMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjI5ZWFhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTI4MTQzLTAKQEAgLTAsMCArMSBAQAorghKBQ2ZvbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEyODE1OC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTI4MTU4LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhMzJhYgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEyODE1OC0wCkBAIC0wLDAgKzEgQEAKK4ISgVhAE1TEZMOCmpm9m6MlcrMP9asZ4zE6j+Ed6XqcufA3A+pY2P8k6RPT+/V2YPQ0h6jC3XJjnavYSiFSca+7Mz9aRApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEyODE1OC0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTI4MTU4LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzNzUzNAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEyODE1OC0xCkBAIC0wLDAgKzEsMiBAQAorghKBWECWdopFEClZvDBqm0nqhLs6IIo8cSr31uO6pworI+99+OqTNEMSVCRk8awD9CKCo1kTT4PHH6gVU9byrTsJZVC0HgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4NS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg1LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5MGYyMgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4NS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4NS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg1LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5NWE0NgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4NS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4NS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg1LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlNjFhNAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4NS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4NS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg1LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyNzY3MwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4NS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ni0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg2LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiNmE5YgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ni0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ni0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg2LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhYzI3MwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ni0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ni0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg2LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwZDQwNQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ni0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ni0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg2LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmMDIwYQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ni0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ny0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg3LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzNjU4MAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ny0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ny0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg3LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlYWQ0NQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ny0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ny0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg3LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3NTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ny0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ny0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg3LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyMjRlZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Ny0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg4LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzMjg1YQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OC0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg4LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhMGE1YgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OC0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OC0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg4LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1YmExNwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OC0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OC0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg4LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3ODU0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OC0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg5LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4YjU5YwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg5LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwZGNkYgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg5LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzYzYxOQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4Mjg5LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1MWUwMQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4OS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4YS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhhLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3M2NhMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4YS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4YS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhhLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1Y2UyMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4YS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4YS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhhLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlNWIwNgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4YS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4YS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhhLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1ODE4YwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4YS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yi0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhiLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxZGU5ZAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yi0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yi0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhiLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzOTRjMgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yi0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yi0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhiLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwN2M5ZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yi0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yi0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhiLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwOTRiMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yi0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yy0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhjLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkYTgwMAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yy0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yy0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhjLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlZGNmNgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yy0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yy0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhjLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmOGZhZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yy0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yy0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhjLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmMzYwYwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Yy0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhkLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzODhiMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZC0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhkLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzOGQ0YQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZC0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZC0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhkLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5OGFjMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZC0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZC0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhkLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBiZGMzZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZC0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhlLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjZmEyNAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhlLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlM2JiMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhlLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNmN2QxYwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhlLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NzQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4ZS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Zi0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhmLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4NTE1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Zi0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Zi0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhmLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxZDE5MgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Zi0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Zi0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhmLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyZDlhMQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Zi0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Zi0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjhmLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyNDZmOAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI4Zi0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI5MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjkwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2NWNhNwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI5MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI5MC0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjkwLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzNjlmNwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI5MC0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI5Mi0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTM4MjkyLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjZmZiZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjEzODI5Mi0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4NS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg1LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0MWJkZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4NS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4NS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg1LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRmNzRjZAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4NS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4NS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg1LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkNDg4OAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4NS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4NS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg1LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzM2UxYwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4NS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ni0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg2LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjMjEwNgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ni0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ni0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg2LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0YzYzYQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ni0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ni0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg2LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5YzQ3NwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ni0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ni0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg2LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3YTMyMgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ni0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ny0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg3LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0ZWQ0NQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ny0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ny0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg3LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE1ZDkwZAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ny0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ny0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg3LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2NjY2NAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ny0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ny0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg3LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2YTJkZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Ny0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg4LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkZTA0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OC0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg4LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlYzlmZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OC0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OC0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg4LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwYWEzMgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OC0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OC0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg4LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0MTRlNAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OC0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg5LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlNDhhNQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg5LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIzYmE3OAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg5LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxYTc1NgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDg5LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkYTk5YQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4OS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4YS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDhhLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4YzE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4YS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4YS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDhhLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4MTMyYQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4YS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4YS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDhhLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI3MzVmNAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4YS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4YS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDhhLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxNDhhMQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4YS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Yi0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTQ4NDhiLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzYTdmYwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE0ODQ4Yi0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE1ODY1OS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTU4NjU5LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4OThhNwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE1ODY1OS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE1ODY1OS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTU4NjU5LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMyYjk4OQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE1ODY1OS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE1ODY1OS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTU4NjU5LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyYTZkZAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE1ODY1OS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE1ODY1OS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTU4NjU5LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiYjExMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE1ODY1OS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE2ODI1OC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTY4MjU4LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4ZTI4MQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE2ODI1OC0wCkBAIC0wLDAgKzEgQEAKK4IWglg0anVzdCBzb21lIGdhcmJhZ2UgZGF0YSB3aGljaCBpcyBub3QgYSB2YWxpZCBrZXkgYmxvYoKCOm///aZIY2xpZW50aWSCOm///UNHYXBwZGF0YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE2ODI1OC0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTY4MjU4LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI5NDIyMAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE2ODI1OC0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTc4MTU4LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0MWJmZAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OC0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTc4MTU4LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzMDVkMgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OC0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OC0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTc4MTU4LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA5Y2M4NAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OC0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OC0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTc4MTU4LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkMDdjYgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OC0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTc4MTU5LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3ZDI3YQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTc4MTU5LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1MTVjYwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTc4MTU5LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmNTc3YwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTc4MTU5LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzYjI0YwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE3ODE1OS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWE4NC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgxYTg0LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y5MDQ0NwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWE4NC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWE4NC0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgxYTg0LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyMzNkNwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWE4NC0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWE4NC0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgxYTg0LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5Yzk1MwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWE4NC0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWE4NC0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgxYTg0LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4YjJiZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWE4NC0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWU4My0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgxZTgzLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4MTIzNwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWU4My0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWU4My0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgxZTgzLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhZDM1NwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWU4My0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWU4My0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgxZTgzLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2N2NhZAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWU4My0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWU4My0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgxZTgzLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1NTM3YgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MWU4My0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzE4NC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzMTg0LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0ZjdhOAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzE4NC0wCkBAIC0wLDAgKzEgQEAKK4IYMYQbP48UVPbWyURGZm9vYmFygIAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMxODQtMSBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzE4NC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOWEzMWIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMxODQtMQpAQCAtMCwwICsxIEBACiuCGDGEO09p7MHIXsYnRmZvb2JhcoCAClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzMTg0LTIgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMxODQtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODU4NmYwCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzMTg0LTIKQEAgLTAsMCArMSBAQAorghgxhBtZl+nNkS6gIEZmb29iYXKAgApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzE4NC0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzMTg0LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmYjEyYQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzE4NC0zCkBAIC0wLDAgKzEgQEAKK4IYMYQbGvpieEGbTmBGZm9vYmFygIAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMyODQtMCBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzI4NC0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmODE5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMyODQtMApAQCAtMCwwICsxIEBACiuCGDKEOyrG9ZYo2tD3WQb4YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWGAgApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzI4NC0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzMjg0LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1YTA1NgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzI4NC0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzI4NC0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzMjg0LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5YjI0YgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzI4NC0yCkBAIC0wLDAgKzEgQEAKK4IYMoQbX9vISx01XXJZBvdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhgIAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMyODQtMyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzI4NC0zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDcxM2QKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMyODQtMwpAQCAtMCwwICsxLDIgQEAKK4IYMoQ7CiuZRT2krpT+WQb5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhgIAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMzODYtMCBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzM4Ni0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjM3NGYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMzODYtMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMzODYtMSBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzM4Ni0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzUxNWUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODMzODYtMQpAQCAtMCwwICsxIEBACiuCGDOGGxrBNtguWxKLgUxIZWxsbyBXb3JsZCGBQICAgApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzM4Ni0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzMzg2LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI3MDEyNgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzM4Ni0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzM4Ni0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzMzg2LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjODcwMAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzM4Ni0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzQ4MS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzNDgxLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0OTEzZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzQ4MS0wCkBAIC0wLDAgKzEgQEAKK4IYNIE7esGrCMqWlPEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODM0ODEtMSBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4MzQ4MS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhODk1MDEKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODM0ODEtMQpAQCAtMCwwICsxIEBACiuCGDSBGxXfhsL3mRA2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzNDgxLTIgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODM0ODEtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTlkYmIyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzNDgxLTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzNDgxLTMgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODM0ODEtMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzg3NWFjCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTgzNDgxLTMKQEAgLTAsMCArMSBAQAorghg0gRsg6KiiDyWYnwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4NDE4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yZXFzLTgyMTg0MTgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhNmM1NQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4NDE4MC0wCkBAIC0wLDAgKzEgQEAKK4IYQYAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODQyODEtMCBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcmVxcy04MjE4NDI4MS0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWJiNGIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJlcXMtODIxODQyODEtMApAQCAtMCwwICsxIEBACiuCGEKB9ApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDAzNTUwNC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwMDM1NTA0LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMDE2OQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDAzNTUwNC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDFlMTcwZC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwMWUxNzBkLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2YWRjMAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDFlMTcwZC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDMwMzAzMS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwMzAzMDMxLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5NjVkOQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDMwMzAzMS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDMxMzU2My0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwMzEzNTYzLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBkM2E2NwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDMxMzU2My0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDMzMzIzMy0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwMzMzMjMzLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4ZTE3OAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDMzMzIzMy0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDM2NWExNy0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwMzY1YTE3LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0YWNiMgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDM2NWExNy0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDNjYzBjYy0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwM2NjMGNjLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmY2VjOAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDNjYzBjYy0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDNlN2IxYS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwM2U3YjFhLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlYWM4YwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDNlN2IxYS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDQyLTAgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJzcHMtMDA0Mi0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzAyYWQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVzdHkva2V5bWludC9mdXp6L2NvcnB1cy9rZXltaW50LXJzcHMtMDA0Mi0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDY0NjYzMC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwNjQ2NjMwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjY2U4NQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDY0NjYzMC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMDA4MS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIwMDgxLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q0YTlkMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMDA4MS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMDA4MS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIwMDgxLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2MTgyYQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMDA4MS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMDA4MS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIwMDgxLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3NWEyZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMDA4MS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMDA4MS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIwMDgxLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzNTlkYQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMDA4MS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjE4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyMTgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViZTVhZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjE4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjI4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyMjgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5N2MyMAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjI4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjU4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyNTgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5MTc5NQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjU4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjY4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyNjgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ1Y2JmMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjY4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjc4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyNzgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3OTA2MAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjc4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjg4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyODgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlYWI0YwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjg4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjk4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyOTgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3MmI1NQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMjk4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMmE4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyYTgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2MGQ2NwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMmE4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMmI4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyYjgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjYmE1NAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMmI4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMmM4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIyYzgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlYjUxZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMmM4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzA4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzMDgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmMTUzNQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzA4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzQ4MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzNDgwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxZGY1MAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzQ4MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgxOS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODE5LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjZWZjOAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgxOS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgxZC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODFkLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2MWNkOQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgxZC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgxZS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODFlLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFhMjY2NAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgxZS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgyMC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODIwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxYzFmNAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgyMC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgyNS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODI1LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1NmVlZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgyNS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgyNy0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODI3LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlYTAxMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgyNy0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgyYi0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODJiLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjYTk4MAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgyYi0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzMy0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODMzLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4ZjYxZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzMy0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzNi0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODM2LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkZDliMAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzNi0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzNy0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODM3LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3OWE3MQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzNy0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzOC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODM4LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxZDFiZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzOC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzOS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODM5LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5NzExMAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzOS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzYS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODNhLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmYzgwNAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzYS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzZS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODNlLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiYzk3OAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzgzZS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODQwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3MzIxMQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0MS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODQxLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5YmMyYQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0MS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0Ni0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODQ2LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0MDQzMAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0Ni0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0ZC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODRkLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyNTE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0ZC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0ZS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODRlLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmMjkzMAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0ZS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0Zi0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODRmLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiNjdjMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg0Zi0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg1MC0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzODUwLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyNTFjYwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzg1MC0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzkwMy0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwODIzOTAzLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlNDIwNgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDgyMzkwMy0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDlhODFmYS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwOWE4MWZhLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmZmE3OAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMDlhODFmYS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMGI1YWU3OS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAwYjVhZTc5LTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmMDg1YgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMGI1YWU3OS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMTgyMDA4MS0wIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAxODIwMDgxLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4YTM3NwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMTgyMDA4MS0wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMTgyMDA4MS0xIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAxODIwMDgxLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmNGFmNQotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMTgyMDA4MS0xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMTgyMDA4MS0yIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAxODIwMDgxLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2OGY0YgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMTgyMDA4MS0yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMTgyMDA4MS0zIGIvdHJ1c3R5L2tleW1pbnQvZnV6ei9jb3JwdXMva2V5bWludC1yc3BzLTAxODIwMDgxLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhNWYyMwotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0eS9rZXltaW50L2Z1enovY29ycHVzL2tleW1pbnQtcnNwcy0wMTgyMDA4MS0zCkJpbmFyeSBmaWxlcyBkaWZmZXIK