ZGlmZiAtLWdpdCBhL0JVSUxELmduIGIvQlVJTEQuZ24KaW5kZXggZmNiYTFmMS4uMWFiOTY5YSAxMDA2NDQKLS0tIGEvQlVJTEQuZ24KKysrIGIvQlVJTEQuZ24KQEAgLTE1MTIsNiArMTUxMiw3IEBACiAgICAgInRlc3RpbmcvZW1iZWRkZXJfdGVzdC5oIiwKICAgICAidGVzdGluZy9lbWJlZGRlcl90ZXN0X21vY2tfZGVsZWdhdGUuaCIsCiAgICAgInRlc3RpbmcvZW1iZWRkZXJfdGVzdF90aW1lcl9oYW5kbGluZ19kZWxlZ2F0ZS5oIiwKKyAgICAieGZhL3NyYy9meGZhL3NyYy9wYXJzZXIveGZhX3BhcnNlcl9pbXBfZW1iZWRkZXJ0ZXN0LmNwcCIsCiAgIF0KICAgZGVwcyA9IFsKICAgICAiLy90ZXN0aW5nL2dtb2NrIiwKZGlmZiAtLWdpdCBhL3BkZml1bS5neXAgYi9wZGZpdW0uZ3lwCmluZGV4IDNkMzVjYWIuLjk5MWRhYzQgMTAwNjQ0Ci0tLSBhL3BkZml1bS5neXAKKysrIGIvcGRmaXVtLmd5cApAQCAtODA3LDYgKzgwNyw3IEBACiAgICAgICAgICd0ZXN0aW5nL2VtYmVkZGVyX3Rlc3QuaCcsCiAgICAgICAgICd0ZXN0aW5nL2VtYmVkZGVyX3Rlc3RfbW9ja19kZWxlZ2F0ZS5oJywKICAgICAgICAgJ3Rlc3RpbmcvZW1iZWRkZXJfdGVzdF90aW1lcl9oYW5kbGluZ19kZWxlZ2F0ZS5oJywKKyAgICAgICAgJ3hmYS9zcmMvZnhmYS9zcmMvcGFyc2VyL3hmYV9wYXJzZXJfaW1wX2VtYmVkZGVydGVzdC5jcHAnLAogICAgICAgXSwKICAgICAgICdjb25kaXRpb25zJzogWwogICAgICAgICBbJ3BkZl9lbmFibGVfdjg9PTEnLCB7CmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9idWdfMjE2LmluIGIvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzIxNi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWNkODYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzIxNi5pbgpAQCAtMCwwICsxLDM5IEBACit7e2hlYWRlcn19Cit7e29iamVjdCAxIDB9fSA8PAorICAvVHlwZSAvQ2F0YWxvZworICAvUGFnZXMgMiAwIFIKKyAgL0Fjcm9Gb3JtIDQgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAyIDB9fSA8PAorICAvVHlwZSAvUGFnZXMKKyAgL0NvdW50IDEKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDQgMH19IDw8CisgIC9YRkEgWworICAgICh4ZHA6eGRwKSAyMyAwIFIKKyAgICAoZm9ybSkgMjkgMCBSCisgICAgKDwveGRwOnhkcD4pIDMwIDAgUl0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDIzIDB9fSA8PAorPj5zdHJlYW0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8eGRwOnhkcCB4bWxuczp4ZHA9Imh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20vIj4KK2VuZHN0cmVhbQorZW5kb2JqCit7e29iamVjdCAyOSAwfX0gPDwKKz4+c3RyZWFtCis8Zm9ybSB4bWxucz0iaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZm9ybS8yLjYvIj4KKzwvZm9ybT4KK2VuZHN0cmVhbQorZW5kb2JqCit7e29iamVjdCAzMCAwfX0gPDwKKz4+c3RyZWFtCis8L3hkcDp4ZHA+CitlbmRzdHJlYW0KK2VuZG9iagordHJhaWxlcgorPDwvUm9vdCAxIDAgUj4+CislJUVPRgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzIxNi5wZGYgYi90ZXN0aW5nL3Jlc291cmNlcy9idWdfMjE2LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDU5ODcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzIxNi5wZGYKQEAgLTAsMCArMSw0MCBAQAorJVBERi0xLjcKKyWg8qT0CisxIDAgb2JqIDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorICAvQWNyb0Zvcm0gNCAwIFIKKz4+CitlbmRvYmoKKzIgMCBvYmogPDwKKyAgL1R5cGUgL1BhZ2VzCisgIC9Db3VudCAxCis+PgorZW5kb2JqCis0IDAgb2JqIDw8CisgIC9YRkEgWworICAgICh4ZHA6eGRwKSAyMyAwIFIKKyAgICAoZm9ybSkgMjkgMCBSCisgICAgKDwveGRwOnhkcD4pIDMwIDAgUl0KKz4+CitlbmRvYmoKKzIzIDAgb2JqIDw8Cis+PnN0cmVhbQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx4ZHA6eGRwIHhtbG5zOnhkcD0iaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbS8iPgorZW5kc3RyZWFtCitlbmRvYmoKKzI5IDAgb2JqIDw8Cis+PnN0cmVhbQorPGZvcm0geG1sbnM9Imh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWZvcm0vMi42LyI+Cis8L2Zvcm0+CitlbmRzdHJlYW0KK2VuZG9iagorMzAgMCBvYmogPDwKKz4+c3RyZWFtCis8L3hkcDp4ZHA+CitlbmRzdHJlYW0KK2VuZG9iagordHJhaWxlcgorPDwvUm9vdCAxIDAgUj4+CislJUVPRgpkaWZmIC0tZ2l0IGEveGZhL3NyYy9meGZhL3NyYy9wYXJzZXIveGZhX3BhcnNlcl9pbXAuY3BwIGIveGZhL3NyYy9meGZhL3NyYy9wYXJzZXIveGZhX3BhcnNlcl9pbXAuY3BwCmluZGV4IDllODVjMWYuLjQ4NTQ3ZDcgMTAwNjQ0Ci0tLSBhL3hmYS9zcmMvZnhmYS9zcmMvcGFyc2VyL3hmYV9wYXJzZXJfaW1wLmNwcAorKysgYi94ZmEvc3JjL2Z4ZmEvc3JjL3BhcnNlci94ZmFfcGFyc2VyX2ltcC5jcHAKQEAgLTM4NiwxMiArMzg2LDEyIEBACiAgICAgICAgICAgcFhNTERvY3VtZW50Tm9kZSwgWEZBX0dldFBhY2tldEJ5SW5kZXgoWEZBX1BBQ0tFVF9YRFApLT5wTmFtZSwNCiAgICAgICAgICAgWEZBX0dldFBhY2tldEJ5SW5kZXgoWEZBX1BBQ0tFVF9YRFApLT5wVVJJLA0KICAgICAgICAgICBYRkFfR2V0UGFja2V0QnlJbmRleChYRkFfUEFDS0VUX1hEUCktPmVGbGFncykpIHsNCi0gICAgcmV0dXJuIE5VTEw7DQorICAgIHJldHVybiBudWxscHRyOw0KICAgfQ0KICAgQ1hGQV9Ob2RlKiBwWEZBUm9vdE5vZGUgPQ0KICAgICAgIG1fcEZhY3RvcnktPkNyZWF0ZU5vZGUoWEZBX1hEUFBBQ0tFVF9YRFAsIFhGQV9FTEVNRU5UX1hmYSk7DQogICBpZiAoIXBYRkFSb290Tm9kZSkgew0KLSAgICByZXR1cm4gTlVMTDsNCisgICAgcmV0dXJuIG51bGxwdHI7DQogICB9DQogICBtX3BSb290Tm9kZSA9IHBYRkFSb290Tm9kZTsNCiAgIHBYRkFSb290Tm9kZS0+U2V0Q0RhdGEoWEZBX0FUVFJJQlVURV9OYW1lLCBGWF9XU1RSQyhMInhmYSIpKTsNCkBAIC00MDgsOCArNDA4LDggQEAKICAgICAgIH0NCiAgICAgfQ0KICAgfQ0KLSAgSUZERV9YTUxOb2RlKiBwWE1MQ29uZmlnRE9NUm9vdCA9IE5VTEw7DQotICBDWEZBX05vZGUqIHBYRkFDb25maWdET01Sb290ID0gTlVMTDsNCisgIElGREVfWE1MTm9kZSogcFhNTENvbmZpZ0RPTVJvb3QgPSBudWxscHRyOw0KKyAgQ1hGQV9Ob2RlKiBwWEZBQ29uZmlnRE9NUm9vdCA9IG51bGxwdHI7DQogICB7DQogICAgIGZvciAoSUZERV9YTUxOb2RlKiBwQ2hpbGRJdGVtID0NCiAgICAgICAgICAgICAgcFhNTERvY3VtZW50Tm9kZS0+R2V0Tm9kZUl0ZW0oSUZERV9YTUxOb2RlOjpGaXJzdENoaWxkKTsNCkBAIC00MjMsNyArNDIzLDcgQEAKICAgICAgIH0NCiAgICAgICBpZiAoQ1hGQV9Ob2RlKiBwQ2hpbGROb2RlID0NCiAgICAgICAgICAgICAgIHBYRkFSb290Tm9kZS0+R2V0Rmlyc3RDaGlsZEJ5TmFtZShwUGFja2V0SW5mby0+dUhhc2gpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgICAgIHJldHVybiBudWxscHRyOw0KICAgICAgIH0NCiAgICAgICBwWE1MQ29uZmlnRE9NUm9vdCA9IHBDaGlsZEl0ZW07DQogICAgICAgcFhGQUNvbmZpZ0RPTVJvb3QgPQ0KQEAgLTQzMSw4ICs0MzEsOSBAQAogICAgICAgcFhGQVJvb3ROb2RlLT5JbnNlcnRDaGlsZChwWEZBQ29uZmlnRE9NUm9vdCwgTlVMTCk7DQogICAgIH0NCiAgIH0NCi0gIElGREVfWE1MTm9kZSogcFhNTERhdGFzZXRzRE9NUm9vdCA9IE5VTEw7DQotICBJRkRFX1hNTE5vZGUqIHBYTUxGb3JtRE9NUm9vdCA9IE5VTEw7DQorICBJRkRFX1hNTE5vZGUqIHBYTUxEYXRhc2V0c0RPTVJvb3QgPSBudWxscHRyOw0KKyAgSUZERV9YTUxOb2RlKiBwWE1MRm9ybURPTVJvb3QgPSBudWxscHRyOw0KKyAgSUZERV9YTUxOb2RlKiBwWE1MVGVtcGxhdGVET01Sb290ID0gbnVsbHB0cjsNCiAgIHsNCiAgICAgZm9yIChJRkRFX1hNTE5vZGUqIHBDaGlsZEl0ZW0gPQ0KICAgICAgICAgICAgICBwWE1MRG9jdW1lbnROb2RlLT5HZXROb2RlSXRlbShJRkRFX1hNTE5vZGU6OkZpcnN0Q2hpbGQpOw0KQEAgLTQ1Myw3ICs0NTQsNyBAQAogICAgICAgICBpZiAoIVhGQV9GREVFeHRlbnNpb25fTWF0Y2hOb2RlTmFtZShwRWxlbWVudCwgcFBhY2tldEluZm8tPnBOYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBhY2tldEluZm8tPnBVUkksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUGFja2V0SW5mby0+ZUZsYWdzKSkgew0KLSAgICAgICAgICBwUGFja2V0SW5mbyA9IE5VTEw7DQorICAgICAgICAgIHBQYWNrZXRJbmZvID0gbnVsbHB0cjsNCiAgICAgICAgIH0NCiAgICAgICB9DQogICAgICAgWEZBX1hEUFBBQ0tFVCBlUGFja2V0ID0NCkBAIC00NjMsMjkgKzQ2NCw0MSBAQAogICAgICAgfQ0KICAgICAgIGlmIChlUGFja2V0ID09IFhGQV9YRFBQQUNLRVRfRGF0YXNldHMpIHsNCiAgICAgICAgIGlmIChwWE1MRGF0YXNldHNET01Sb290KSB7DQotICAgICAgICAgIHBYTUxEYXRhc2V0c0RPTVJvb3QgPSBOVUxMOw0KLSAgICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgICAgICAgcmV0dXJuIG51bGxwdHI7DQogICAgICAgICB9DQogICAgICAgICBwWE1MRGF0YXNldHNET01Sb290ID0gcEVsZW1lbnQ7DQogICAgICAgfSBlbHNlIGlmIChlUGFja2V0ID09IFhGQV9YRFBQQUNLRVRfRm9ybSkgew0KICAgICAgICAgaWYgKHBYTUxGb3JtRE9NUm9vdCkgew0KLSAgICAgICAgICBwWE1MRm9ybURPTVJvb3QgPSBOVUxMOw0KLSAgICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgICAgICAgcmV0dXJuIG51bGxwdHI7DQogICAgICAgICB9DQogICAgICAgICBwWE1MRm9ybURPTVJvb3QgPSBwRWxlbWVudDsNCisgICAgICB9IGVsc2UgaWYgKGVQYWNrZXQgPT0gWEZBX1hEUFBBQ0tFVF9UZW1wbGF0ZSkgew0KKyAgICAgICAgaWYgKHBYTUxUZW1wbGF0ZURPTVJvb3QpIHsNCisgICAgICAgICAgLy8gRm91bmQgYSBkdXBsaWNhdGUgdGVtcGxhdGUgcGFja2V0Lg0KKyAgICAgICAgICByZXR1cm4gbnVsbHB0cjsNCisgICAgICAgIH0NCisgICAgICAgIENYRkFfTm9kZSogcFBhY2tldE5vZGUgPSBQYXJzZUFzWERQUGFja2V0KHBFbGVtZW50LCBlUGFja2V0KTsNCisgICAgICAgIGlmIChwUGFja2V0Tm9kZSkgew0KKyAgICAgICAgICBwWE1MVGVtcGxhdGVET01Sb290ID0gcEVsZW1lbnQ7DQorICAgICAgICAgIHBYRkFSb290Tm9kZS0+SW5zZXJ0Q2hpbGQocFBhY2tldE5vZGUpOw0KKyAgICAgICAgfQ0KICAgICAgIH0gZWxzZSB7DQogICAgICAgICBDWEZBX05vZGUqIHBQYWNrZXROb2RlID0gUGFyc2VBc1hEUFBhY2tldChwRWxlbWVudCwgZVBhY2tldCk7DQogICAgICAgICBpZiAocFBhY2tldE5vZGUpIHsNCiAgICAgICAgICAgaWYgKHBQYWNrZXRJbmZvICYmDQogICAgICAgICAgICAgICAocFBhY2tldEluZm8tPmVGbGFncyAmIFhGQV9YRFBQQUNLRVRfRkxBR1NfU1VQUE9SVE9ORSkgJiYNCiAgICAgICAgICAgICAgIHBYRkFSb290Tm9kZS0+R2V0Rmlyc3RDaGlsZEJ5TmFtZShwUGFja2V0SW5mby0+dUhhc2gpKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7DQogICAgICAgICAgIH0NCiAgICAgICAgICAgcFhGQVJvb3ROb2RlLT5JbnNlcnRDaGlsZChwUGFja2V0Tm9kZSk7DQogICAgICAgICB9DQogICAgICAgfQ0KICAgICB9DQogICB9DQorICBpZiAoIXBYTUxUZW1wbGF0ZURPTVJvb3QpIHsNCisgICAgLy8gTm8gdGVtcGxhdGUgaXMgZm91bmQuDQorICAgIHJldHVybiBudWxscHRyOw0KKyAgfQ0KICAgaWYgKHBYTUxEYXRhc2V0c0RPTVJvb3QpIHsNCiAgICAgQ1hGQV9Ob2RlKiBwUGFja2V0Tm9kZSA9DQogICAgICAgICBQYXJzZUFzWERQUGFja2V0KHBYTUxEYXRhc2V0c0RPTVJvb3QsIFhGQV9YRFBQQUNLRVRfRGF0YXNldHMpOw0KZGlmZiAtLWdpdCBhL3hmYS9zcmMvZnhmYS9zcmMvcGFyc2VyL3hmYV9wYXJzZXJfaW1wX2VtYmVkZGVydGVzdC5jcHAgYi94ZmEvc3JjL2Z4ZmEvc3JjL3BhcnNlci94ZmFfcGFyc2VyX2ltcF9lbWJlZGRlcnRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMzA1OWMKLS0tIC9kZXYvbnVsbAorKysgYi94ZmEvc3JjL2Z4ZmEvc3JjL3BhcnNlci94ZmFfcGFyc2VyX2ltcF9lbWJlZGRlcnRlc3QuY3BwCkBAIC0wLDAgKzEsMTUgQEAKKy8vIENvcHlyaWdodCAyMDE1IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworI2luY2x1ZGUgIi4uLy4uLy4uLy4uLy4uL3Rlc3RpbmcvZW1iZWRkZXJfdGVzdC5oIgorI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgorCitjbGFzcyBYRkFQYXJzZXJJbXBFbWJlZGRlcnRlc3QgOiBwdWJsaWMgRW1iZWRkZXJUZXN0IHt9OworCitURVNUX0YoWEZBUGFyc2VySW1wRW1iZWRkZXJ0ZXN0LCBCdWdfMjE2KSB7CisgICAgRVhQRUNUX1RSVUUoT3BlbkRvY3VtZW50KCJ0ZXN0aW5nL3Jlc291cmNlcy9idWdfMjE2LnBkZiIpKTsKKyAgICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICAgIEVYUEVDVF9ORShudWxscHRyLCBwYWdlKTsKKyAgICBVbmxvYWRQYWdlKHBhZ2UpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK