ZGlmZiAtLWdpdCBhL09XTkVSUyBiL09XTkVSUwppbmRleCA5NmYwYTA5Li43ZDYwOTlkIDEwMDY0NAotLS0gYS9PV05FUlMKKysrIGIvT1dORVJTCkBAIC02LDkgKzYsMTIgQEAKIAogIyBIYWlrdSBtZW1iZXJzIChmdXp6aW5nLW9uLUFuZHJvaWQpCiBoYW16ZWhAZ29vZ2xlLmNvbQotaXNwb0Bnb29nbGUuY29tCiBrYWxkZXJAZ29vZ2xlLmNvbQorbXNwZWN0b3JAZ29vZ2xlLmNvbQogCiAjIEFTQQogb2xvcmluQGdvb2dsZS5jb20KLWRhbmllbGF1c3RpbkBnb29nbGUuY29tCisKKyMgUmVtb3RlIFByb3Zpc2lvbmluZworamJpcmVzQGdvb2dsZS5jb20KK3N3aWxsZGVuQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL2Z1enppbmcvZXhhbXBsZV9mdXp6ZXIvQW5kcm9pZC5icCBiL2Z1enppbmcvZXhhbXBsZV9mdXp6ZXIvQW5kcm9pZC5icAppbmRleCBhM2U5ZThjLi5hM2VmZDNlIDEwMDY0NAotLS0gYS9mdXp6aW5nL2V4YW1wbGVfZnV6emVyL0FuZHJvaWQuYnAKKysrIGIvZnV6emluZy9leGFtcGxlX2Z1enplci9BbmRyb2lkLmJwCkBAIC0xLDMgKzEsNyBAQAorcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAorfQorCiBjY19mdXp6IHsKICAgICBuYW1lOiAiZXhhbXBsZV9mdXp6ZXIiLAogICAgIHNyY3M6IFsKZGlmZiAtLWdpdCBhL2Z1enppbmcvZXhhbXBsZV9ydXN0X2Z1enplci9BbmRyb2lkLmJwIGIvZnV6emluZy9leGFtcGxlX3J1c3RfZnV6emVyL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjYzYxMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvZXhhbXBsZV9ydXN0X2Z1enplci9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMjggQEAKKy8vIENvcHlyaWdodCAyMDIxLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3BhY2thZ2UgeworICAgIGRlZmF1bHRfYXBwbGljYWJsZV9saWNlbnNlczogWyJBbmRyb2lkLUFwYWNoZS0yLjAiXSwKK30KKworcnVzdF9mdXp6IHsKKyAgICBuYW1lOiAiZXhhbXBsZV9ydXN0X2Z1enplciIsCisgICAgc3JjczogWyJmdXp6ZXIucnMiXSwKKyAgICBmdXp6X2NvbmZpZzogeworICAgICAgICBmdXp6X29uX2hhaWt1X2RldmljZTogdHJ1ZSwKKyAgICAgICAgZnV6el9vbl9oYWlrdV9ob3N0OiBmYWxzZSwKKyAgICB9LAorICAgIGNvcnB1czogWyJ0ZXN0ZGF0YS8qIl0sCisgICAgZGljdGlvbmFyeTogImV4YW1wbGVfcnVzdF9mdXp6ZXIuZGljdCIsCit9CmRpZmYgLS1naXQgYS9mdXp6aW5nL2V4YW1wbGVfcnVzdF9mdXp6ZXIvZXhhbXBsZV9ydXN0X2Z1enplci5kaWN0IGIvZnV6emluZy9leGFtcGxlX3J1c3RfZnV6emVyL2V4YW1wbGVfcnVzdF9mdXp6ZXIuZGljdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWRmMTAwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9leGFtcGxlX3J1c3RfZnV6emVyL2V4YW1wbGVfcnVzdF9mdXp6ZXIuZGljdApAQCAtMCwwICsxIEBACisiVEVTVCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL2V4YW1wbGVfcnVzdF9mdXp6ZXIvZnV6emVyLnJzIGIvZnV6emluZy9leGFtcGxlX3J1c3RfZnV6emVyL2Z1enplci5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGNlYmNiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9leGFtcGxlX3J1c3RfZnV6emVyL2Z1enplci5ycwpAQCAtMCwwICsxLDMwIEBACisvLyBDb3B5cmlnaHQgMjAyMSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIVthbGxvdyhtaXNzaW5nX2RvY3MpXQorIyFbbm9fbWFpbl0KKyNbbWFjcm9fdXNlXSBleHRlcm4gY3JhdGUgbGliZnV6emVyX3N5czsKKworZm4gaGVhcF9vb2IoKSB7CisgICAgbGV0IHhzID0gdmVjIVswLCAxLCAyLCAzXTsKKyAgICBsZXQgdmFsID0gdW5zYWZlIHsgKnhzLmFzX3B0cigpLm9mZnNldCg0KSB9OworICAgIHByaW50bG4hKCJPdXQtb2YtYm91bmRzIGhlYXAgdmFsdWU6IHt9IiwgdmFsKTsKK30KKworZnV6el90YXJnZXQhKHxkYXRhOiAmW3U4XXwgeworICAgIGxldCBtYWdpY19udW1iZXIgPSAzMjc7CisgICAgaWYgZGF0YS5sZW4oKSA9PSBtYWdpY19udW1iZXIgeworICAgICAgICBoZWFwX29vYigpOworICAgIH0KK30pOwpkaWZmIC0tZ2l0IGEvZnV6emluZy9leGFtcGxlX3J1c3RfZnV6emVyL3Rlc3RkYXRhL3Rlc3QudHh0IGIvZnV6emluZy9leGFtcGxlX3J1c3RfZnV6emVyL3Rlc3RkYXRhL3Rlc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZDc0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL2V4YW1wbGVfcnVzdF9mdXp6ZXIvdGVzdGRhdGEvdGVzdC50eHQKQEAgLTAsMCArMSBAQAordGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvbWVkaWFfZnV6emVycy9PV05FUlMgYi9mdXp6aW5nL21lZGlhX2Z1enplcnMvT1dORVJTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDFiNjVhLi4wMDAwMDAwCi0tLSBhL2Z1enppbmcvbWVkaWFfZnV6emVycy9PV05FUlMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWhhbXplaEBnb29nbGUuY29tCi1pc3BvQGdvb2dsZS5jb20KLWthbGRlckBnb29nbGUuY29tCi1tc3BlY3RvckBnb29nbGUuY29tCi1zZW1zbWl0aEBnb29nbGUuY29tCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvT1dORVJTIGIvZnV6emluZy9vcnBoYW5zL09XTkVSUwppbmRleCBjN2JkNDViLi4xOTEzYzAwIDEwMDY0NAotLS0gYS9mdXp6aW5nL29ycGhhbnMvT1dORVJTCisrKyBiL2Z1enppbmcvb3JwaGFucy9PV05FUlMKQEAgLTEsNCArMSw0IEBACiBoYW16ZWhAZ29vZ2xlLmNvbQotaXNwb0Bnb29nbGUuY29tCiBrYWxkZXJAZ29vZ2xlLmNvbQogbWl0Y2hwQGdvb2dsZS5jb20KK21zcGVjdG9yQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9ncHRmZGlzay9BbmRyb2lkLmJwIGIvZnV6emluZy9vcnBoYW5zL2dwdGZkaXNrL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjNTMzMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9ncHRmZGlzay9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMjEgQEAKK3BhY2thZ2UgeworICAgIGRlZmF1bHRfYXBwbGljYWJsZV9saWNlbnNlczogWyJBbmRyb2lkLUFwYWNoZS0yLjAiXSwKK30KKworY2NfZnV6eiB7CisgICAgbmFtZTogInNnZGlza19mdXp6IiwKKyAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKKyAgICBzcmNzOiBbCisgICAgICAgICJzZ2Rpc2tfZnV6ei5jYyIsCisgICAgXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAibGliZ3B0ZiIsCisgICAgXSwKKyAgICBzaGFyZWRfbGliczogWyJsaWJleHQyX3V1aWQiXSwKKyAgICBjb3JwdXM6IFsiY29ycHVzLyoiXSwKKyAgICB0YXJnZXQ6IHsKKyAgICAgICAgYW5kcm9pZDogeworICAgICAgICAgICAgY2ZsYWdzOiBbIi1ER1BURkRJU0tfRlVaWkVSX0RFVklDRSJdLAorICAgICAgICB9LAorICAgIH0sCit9CmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvZ3B0ZmRpc2svY29ycHVzL2luaXQuaW1nIGIvZnV6emluZy9vcnBoYW5zL2dwdGZkaXNrL2NvcnB1cy9pbml0LmltZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODdmODk3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2dwdGZkaXNrL2NvcnB1cy9pbml0LmltZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvZ3B0ZmRpc2svc2dkaXNrX2Z1enouY2MgYi9mdXp6aW5nL29ycGhhbnMvZ3B0ZmRpc2svc2dkaXNrX2Z1enouY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwMjI4MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9ncHRmZGlzay9zZ2Rpc2tfZnV6ei5jYwpAQCAtMCwwICsxLDU4IEBACisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImdwdGNsLmgiCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIGludCBmdXp6X2dwdChjaGFyKiBwYXJ0aXRpb25fZmlsZSkgeworICAgIEJhc2ljTUJSRGF0YSBtYnJEYXRhOworICAgIEdQVERhdGEgZ3B0RGF0YTsKKyAgICBHUFRQYXJ0IHBhcnREYXRhOworICAgIGludCBudW1QYXJ0cyA9IDA7CisgICAgc3RyaW5nc3RyZWFtIHJlczsKKworICAgIGdwdERhdGEuSnVzdExvb2tpbmcoKTsKKyAgICBncHREYXRhLkxvYWRQYXJ0aXRpb25zKChzdHJpbmcpIHBhcnRpdGlvbl9maWxlKTsKKyAgICBncHREYXRhLkxvYWRNYWluVGFibGUoKTsKKyAgICBncHREYXRhLkdldERpc2tHVUlEKCk7CisgICAgbnVtUGFydHMgPSBncHREYXRhLkdldE51bVBhcnRzKCk7CisKKyAgICAvL0V4dHJhY3RlZCBmcm9tIHRoZSBhbmRyb2lkX2R1bXAgZnVuY3Rpb24gaW4gc2dkaXNrLmNjLCBoaXRzIG1vcmUgY29kZQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFydHM7IGkrKykgeworICAgICAgICBwYXJ0RGF0YSA9IGdwdERhdGFbaV07CisgICAgICAgIGlmIChwYXJ0RGF0YS5HZXRGaXJzdExCQSgpID4gMCkgeworICAgICAgICAgICAgcGFydERhdGEuR2V0VHlwZSgpOworICAgICAgICAgICAgcGFydERhdGEuR2V0VW5pcXVlR1VJRCgpOworICAgICAgICAgICAgcGFydERhdGEuR2V0RGVzY3JpcHRpb24oKTs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBHUFRGRElTS19GVVpaRVJfREVWSUNFCisjZGVmaW5lIFRNUEZJTEVfVEVNUExBVEUgIi9kYXRhL2xvY2FsL3RtcC9ncHRmdXp6WFhYWFhYWFhceDAwIgorI2Vsc2UKKyNkZWZpbmUgVE1QRklMRV9URU1QTEFURSAiL2Rldi9zaG0vZ3B0ZnV6elhYWFhYWFhYXHgwMCIKKyNlbmRpZgorCitzaXplX3QgVE1QRklMRV9MRU4gPSBzaXplb2YoVE1QRklMRV9URU1QTEFURSk7CisKK2V4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBjaGFyIHBhcnRpdGlvbl90bXBfZmlsZVtUTVBGSUxFX0xFTl07CisgICAgaW50IHRtcGZkOworCisgICAgbWVtY3B5KHBhcnRpdGlvbl90bXBfZmlsZSwgVE1QRklMRV9URU1QTEFURSwgVE1QRklMRV9MRU4pOworICAgIHRtcGZkID0gbWtzdGVtcChwYXJ0aXRpb25fdG1wX2ZpbGUpOworICAgIGlmKHRtcGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHdyaXRlKHRtcGZkLCBkYXRhLCBzaXplKTsKKyAgICBjbG9zZSh0bXBmZCk7CisgICAgZnV6el9ncHQocGFydGl0aW9uX3RtcF9maWxlKTsKKyAgICByZW1vdmUocGFydGl0aW9uX3RtcF9maWxlKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvQW5kcm9pZC5icCBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmIyMGY5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsNDAgQEAKKy8vIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3BhY2thZ2UgeworICAgIGRlZmF1bHRfYXBwbGljYWJsZV9saWNlbnNlczogWyJBbmRyb2lkLUFwYWNoZS0yLjAiXSwKK30KKworY2NfZnV6eiB7CisgICAgbmFtZTogImNwcGJvcl9mdXp6ZXIiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImNwcGJvcl9mdXp6ZXIuY3BwIiwKKyAgICBdLAorICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJjcHBib3JfZXh0ZXJuYWwiLAorICAgIF0sCisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCit9CisKK2NjX2Z1enogeworICAgIG5hbWU6ICJjcHBib3JfcGFyc2VfZnV6emVyIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJjcHBib3JfcGFyc2VfZnV6emVyLmNwcCIsCisgICAgXSwKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGliY3BwYm9yX2V4dGVybmFsIiwKKyAgICBdLAorICAgIGNvcnB1czogWyJjb3JwdXMvKi5jYm9yIl0sCisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCit9CmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV8wLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV8wLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxNjY3NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzAuY2JvcgpAQCAtMCwwICsxIEBACiuAClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfMS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZGY2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV8xLmNib3IKQEAgLTAsMCArMSBAQAorgwECAwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzEwLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV8xMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMWQwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV8xMC5jYm9yCkBAIC0wLDAgKzEgQEAKK4JhYaFhYmFjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfMTEuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzExLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxYzEzZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzExLmNib3IKQEAgLTAsMCArMSBAQAorgmFhv2FiYWP/ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfMi5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfMi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZmQzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV8yLmNib3IKQEAgLTAsMCArMSBAQAorgwGCAgOCBAUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV8zLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV8zLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmMWVhMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzMuY2JvcgpAQCAtMCwwICsxIEBACiuDAYICA58EBf8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV80LmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV80LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiZjhlNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzQuY2JvcgpAQCAtMCwwICsxIEBACiuDAZ8CA/+CBAUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV81LmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV81LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyZTQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzUuY2JvcgpAQCAtMCwwICsxLDMgQEAKK5gZAQIDBAUGBwgKKwsMCisODxAREhMUFRYXGBgYGQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzYuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzYuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJjZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfNi5jYm9yCkBAIC0wLDAgKzEgQEAKK5//ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfNy5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfNy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2N2NkNTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hcnJheV83LmNib3IKQEAgLTAsMCArMSBAQAornwGCAgOfBAX//wpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzguY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzguY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODM0M2VkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfOC5jYm9yCkBAIC0wLDAgKzEgQEAKK58BggIDggQF/wpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzkuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2FycmF5XzkuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWIyNGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYXJyYXlfOS5jYm9yCkBAIC0wLDAgKzEsMyBAQAornwECAwQFBgcICisLDAorDg8QERITFBUWFxgYGBn/CmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hdHRlc3RhdGlvbl9vYmpfdTJmXzEuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2F0dGVzdGF0aW9uX29ial91MmZfMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNmEyN2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hdHRlc3RhdGlvbl9vYmpfdTJmXzEuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hdHRlc3RhdGlvbl9vYmpfdTJmXzIuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2F0dGVzdGF0aW9uX29ial91MmZfMi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTA0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9hdHRlc3RhdGlvbl9vYmpfdTJmXzIuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9ieXRlX3N0cmluZ18wLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9ieXRlX3N0cmluZ18wLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUxNmIyYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2J5dGVfc3RyaW5nXzAuY2JvcgpAQCAtMCwwICsxIEBACitAClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYnl0ZV9zdHJpbmdfMS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvYnl0ZV9zdHJpbmdfMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MmU4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9ieXRlX3N0cmluZ18xLmNib3IKQEAgLTAsMCArMSBAQAorRAECAwQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9ieXRlX3N0cmluZ18yLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9ieXRlX3N0cmluZ18yLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4MWE4NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2J5dGVfc3RyaW5nXzIuY2JvcgpAQCAtMCwwICsxIEBACitfQgECQwMEBf8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzAuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjhjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzAuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzEuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDg5YzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzEuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzEwLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzEwLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4MDVhMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMTAuY2JvcgpAQCAtMCwwICsxLDIgQEAKK9CDQ6EBCiuhBU2J9S9locWAkztSYaeMWBxZdOG5mjpMwJplmqLp5//xYdOM5xy0XORg/7VpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY29zZV8xMS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY29zZV8xMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZjkwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzExLmNib3IKQEAgLTAsMCArMSwyIEBACivQg0OhAQoroQZCYadYHCUqiRHUZcEltnZHOXAPAUHtCRkt4TngU70Jq8oKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzEyLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzEyLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyYmUzNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMTIuY2JvcgpAQCAtMCwwICsxIEBACivYYYVDoQEPoFRUaGlzIGlzIHRoZSBjb250ZW50LkieEia6H4G4SIGDQKIBJQRKb3VyLXNlY3JldEAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzEzLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzEzLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzNjhhYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMTMuY2JvcgpAQCAtMCwwICsxIEBACivYYYVDoQEFoFRUaGlzIGlzIHRoZSBjb250ZW50LlgggaA0SKzT0wU3bqoR+z/kFqlVviy+fslvASyZS8PxakGBg0ShATgaoyJYIXBlcmVncmluLnRvb2tAdHVja2Jvcm91Z2guZXhhbXBsZQRYJG1lcmlhZG9jLmJyYW5keWJ1Y2tAYnVja2xhbmQuZXhhbXBsZTVYQE2FU+fnTzxqOp3T7yhqgZXL+KI9GVWMz+x9NLgk9C2SvQa9LH8CcfAhThQft3muKFar9YWlg2iwF+fyqeXOTbVAClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY29zZV8xNC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY29zZV8xNC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZmZiNjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzE0LmNib3IKQEAgLTAsMCArMSBAQAor2GGFQ6EBDqBUVGhpcyBpcyB0aGUgY29udGVudC5INvWvrwurXUOBg0CiASQEWCQwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzdYGHEasNwvxFhdzifv+meByAk+upBvIntusApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMTUuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMTUuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBmMDc4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY29zZV8xNS5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMTYuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMTYuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc1NTZiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY29zZV8xNi5jYm9yCkBAIC0wLDAgKzEgQEAKK9GEQ6EBD6BUVGhpcyBpcyB0aGUgY29udGVudC5IcmBDdFAnIU8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzIuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTk3OTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzIuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzMuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfMy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMGVhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzMuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzQuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfNC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYjY1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzQuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzUuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfNS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjYzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzUuY2JvcgpAQCAtMCwwICsxIEBACivShEOhASahBEIxMVRUaGlzIGlzIHRoZSBjb250ZW50LlhAjrM+TKMdHEZasFqsNMxrI9WP71wIMQbE0lqRrvCwEX4q+aKRqjLhSrg03FbtKiI0RFR+AfEdOwkW5aTDRcrLNgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfNi5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY29zZV82LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiYmZkZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfNi5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfNy5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY29zZV83LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1YmM0NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfNy5jYm9yCkBAIC0wLDAgKzEsMiBAQAor2GCEQ6EBCiuhBU2J9S9locWAkztSYadsWBx1NUihmxMHCEynsgVpJO2V8uOxcAbf6TG2h7hHgYNDoQEpojNQYWFiYmNjZGRlZWZmZ2doaARKb3VyLXNlY3JldEAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzguY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfOC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmM2I0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzguY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzkuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Nvc2VfOS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWU3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jb3NlXzkuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jd3RfY2xhaW1zXzAuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9jbGFpbXNfMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNGM0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jd3RfY2xhaW1zXzAuY2JvcgpAQCAtMCwwICsxIEBACiunAXVjb2FwOi8vYXMuZXhhbXBsZS5jb20CZWVyaWt3A3gYY29hcDovL2xpZ2h0LmV4YW1wbGUuY29tBBpWEq6wBRpWENnwBhpWENnwB0ILcQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9jb3NlXzAuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9jb3NlXzAuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWQxYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY3d0X2Nvc2VfMC5jYm9yCkBAIC0wLDAgKzEsMiBAQAorpCBQIx9MTU0wUf3C7AorOFHVs4MBBAJMU3ltbWV0cmljMTI4AwpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY3d0X2Nvc2VfMS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY3d0X2Nvc2VfMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTA4NjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jd3RfY29zZV8xLmNib3IKQEAgLTAsMCArMSBAQAorpCBYIEA2l96Hr2RhHB0yoF2rD+H8txWoarQ18eyZGS15VpOIAQQCTFN5bW1ldHJpYzI1NgMKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9jb3NlXzIuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9jb3NlXzIuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWViZGQwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY3d0X2Nvc2VfMi5jYm9yCkBAIC0wLDAgKzEgQEAKK6cjWCBsE4J2WuxTWPEXcz0oHBx73DmITQSkWh5sZ8hYvCBsGSJYIGD38aeA2KeDv7ei3WsnlugSjbvO+dPRaNuVKZcaNue5IVggFDMpzOeGjkFpJ1mc9lo0884v/aVafspp7YkZo5TULw8gAQECAlJBc3ltbWV0cmljRUNEU0EyNTYDJgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9lbmNyeXB0ZWRfMC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY3d0X2VuY3J5cHRlZF8wLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4NzY0NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9lbmNyeXB0ZWRfMC5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9tYWNlZF8wLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jd3RfbWFjZWRfMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODc2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jd3RfbWFjZWRfMC5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9tYWNlZF8xLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jd3RfbWFjZWRfMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZWVlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9jd3RfbWFjZWRfMS5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9uZXN0ZWRfMC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY3d0X25lc3RlZF8wLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4NzY0NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9uZXN0ZWRfMC5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9zaWduZWRfMC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvY3d0X3NpZ25lZF8wLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlMGVhNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2N3dF9zaWduZWRfMC5jYm9yCkBAIC0wLDAgKzEgQEAKK9KEQ6EBJqEEUkFzeW1tZXRyaWNFQ0RTQTI1NlhQpwF1Y29hcDovL2FzLmV4YW1wbGUuY29tAmVlcmlrdwN4GGNvYXA6Ly9saWdodC5leGFtcGxlLmNvbQQaVhKusAUaVhDZ8AYaVhDZ8AdCC3FYQFQnwf8o0j+60fKcTHxqVV5gHW+in5F5vD10OLrKylrNCMjU1PlhMWgMQpoB+FlR7O50OlK5tjYyxXIJEg4cnjAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzAuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0M2FlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzAuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzEuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzU2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzEuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzEwLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzEwLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyZWI2NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfMTAuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzIuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfMi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNzg4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzIuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzMuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfMy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzM5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzMuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzQuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfNC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNWY0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzQuY2JvcgpAQCAtMCwwICsxIEBACiv5e/8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzUuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfNS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTQ0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzUuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzYuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfNi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjBkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzYuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzcuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfNy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YjhiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzcuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzguY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfOC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMTE5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzguY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzkuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MTZfOS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3M2Y1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDE2XzkuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDMyXzAuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MzJfMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNmEwODYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDMyXzAuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDMyXzEuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MzJfMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjMzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9mbG9hdDMyXzEuY2JvcgpAQCAtMCwwICsxIEBACiv6f3///wpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MzJfMi5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvZmxvYXQzMl8yLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5NjVmMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MzJfMi5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MzJfMy5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvZmxvYXQzMl8zLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5Y2NhZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MzJfMy5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MzJfNC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvZmxvYXQzMl80LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllMGVlYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0MzJfNC5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfMC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvZmxvYXQ2NF8wLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5ZWEwMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfMC5jYm9yCkBAIC0wLDAgKzEgQEAKK/s/8ZmZmZmZmgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfMS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvZmxvYXQ2NF8xLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3OWJmNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfMS5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfMi5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvZmxvYXQ2NF8yLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1YWRjMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfMi5jYm9yCkBAIC0wLDAgKzEgQEAKK/vAEGZmZmZmZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfMy5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvZmxvYXQ2NF8zLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwZDY4MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfMy5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfNC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvZmxvYXQ2NF80LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyZWZlMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfNC5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfNS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvZmxvYXQ2NF81LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExZjYxYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL2Zsb2F0NjRfNS5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL21hcF8wLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9tYXBfMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYTFiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9tYXBfMC5jYm9yCkBAIC0wLDAgKzEgQEAKK6AKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9tYXBfMS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvbWFwXzEuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmMxNjlhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvbWFwXzEuY2JvcgpAQCAtMCwwICsxIEBACiuiAQIDBApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL21hcF8yLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9tYXBfMi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZTM4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9tYXBfMi5jYm9yCkBAIC0wLDAgKzEgQEAKK6JhYQFhYoICAwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL21hcF8zLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9tYXBfMy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YmIwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9tYXBfMy5jYm9yCkBAIC0wLDAgKzEgQEAKK6VhYWFBYWJhQmFjYUNhZGFEYWVhRQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL21hcF80LmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9tYXBfNC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxODYwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9tYXBfNC5jYm9yCkBAIC0wLDAgKzEgQEAKK79hYQFhYp8CA///ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvbWFwXzUuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL21hcF81LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmNGZkNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL21hcF81LmNib3IKQEAgLTAsMCArMSBAQAorv2NGdW71Y0FtdCH/ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FuaXRpemVyLXN0YXR1cy9NT0RVTEVfTElDRU5TRV9BUEFDSEUyIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvbmVnYXRpdmVfaW50ZWdlcl8wLmNib3IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbml0aXplci1zdGF0dXMvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMgpyZW5hbWUgdG8gZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvbmVnYXRpdmVfaW50ZWdlcl8wLmNib3IKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL25lZ2F0aXZlX2ludGVnZXJfMS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvbmVnYXRpdmVfaW50ZWdlcl8xLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhMGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL25lZ2F0aXZlX2ludGVnZXJfMS5jYm9yCkBAIC0wLDAgKzEgQEAKKykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9uZWdhdGl2ZV9pbnRlZ2VyXzIuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL25lZ2F0aXZlX2ludGVnZXJfMi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWZkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9uZWdhdGl2ZV9pbnRlZ2VyXzIuY2JvcgpAQCAtMCwwICsxIEBACis4YwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL25lZ2F0aXZlX2ludGVnZXJfMy5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvbmVnYXRpdmVfaW50ZWdlcl8zLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlMjU1NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL25lZ2F0aXZlX2ludGVnZXJfMy5jYm9yCkBAIC0wLDAgKzEgQEAKKzkD5wpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL25lZ2F0aXZlX2ludGVnZXJfNC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvbmVnYXRpdmVfaW50ZWdlcl80LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3NDU3YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL25lZ2F0aXZlX2ludGVnZXJfNC5jYm9yCkBAIC0wLDAgKzEgQEAKKzv//////////wpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfMC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcG9zaXRpdmVfaW50ZWdlcl8wLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2ZGQyMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfMC5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfMS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcG9zaXRpdmVfaW50ZWdlcl8xLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyYWFhNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfMS5jYm9yCkBAIC0wLDAgKzEgQEAKKwEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzEwLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzEwLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkMWUxMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfMTAuY2JvcgpAQCAtMCwwICsxIEBACisb//////////8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzIuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfMi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMTM3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzIuY2JvcgpAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfMy5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcG9zaXRpdmVfaW50ZWdlcl8zLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2YWIzYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfMy5jYm9yCkBAIC0wLDAgKzEgQEAKKxcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzQuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfNC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTEwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzQuY2JvcgpAQCAtMCwwICsxIEBACisYGApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfNS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcG9zaXRpdmVfaW50ZWdlcl81LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlNjM0YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfNS5jYm9yCkBAIC0wLDAgKzEgQEAKKxgZClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcG9zaXRpdmVfaW50ZWdlcl82LmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzYuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjVjOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcG9zaXRpdmVfaW50ZWdlcl82LmNib3IKQEAgLTAsMCArMSBAQAorGGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzcuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfNy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTc0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzcuY2JvcgpAQCAtMCwwICsxIEBACisZA+gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzguY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfOC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjI4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzguY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzkuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3Bvc2l0aXZlX2ludGVnZXJfOS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZGNkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wb3NpdGl2ZV9pbnRlZ2VyXzkuY2JvcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wcmltaXRpdmVzXzAuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3ByaW1pdGl2ZXNfMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNmU2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wcmltaXRpdmVzXzAuY2JvcgpAQCAtMCwwICsxIEBACiv0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcHJpbWl0aXZlc18xLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wcmltaXRpdmVzXzEuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdkMTNjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcHJpbWl0aXZlc18xLmNib3IKQEAgLTAsMCArMSBAQAor9QpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3ByaW1pdGl2ZXNfMi5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcHJpbWl0aXZlc18yLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhOGNhZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3ByaW1pdGl2ZXNfMi5jYm9yCkBAIC0wLDAgKzEgQEAKK/YKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wcmltaXRpdmVzXzMuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3ByaW1pdGl2ZXNfMy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZjdiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wcmltaXRpdmVzXzMuY2JvcgpAQCAtMCwwICsxIEBACivwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcHJpbWl0aXZlc181LmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wcmltaXRpdmVzXzUuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjFhNDYyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvcHJpbWl0aXZlc181LmNib3IKQEAgLTAsMCArMSBAQAor+P8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wcmltaXRpdmVzXzYuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3ByaW1pdGl2ZXNfNi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTA4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9wcmltaXRpdmVzXzYuY2JvcgpAQCAtMCwwICsxIEBACiv3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvc3RydWN0XzAuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3N0cnVjdF8wLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzNDI3MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3N0cnVjdF8wLmNib3IKQEAgLTAsMCArMSw1IEBACiuoYVT1YlVpG///////////YUk5A+dhRvvAEGZmZmZmZmFCWBoBAgMEBQYHCAorCwwKKw4PEBESExQVFhcYGRphU3grVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZ2RTbGNpmBoBAgMEBQYHCAorCwwKKw4PEBESExQVFhcYGBgZGBpjTXNzrWFjYUNhZWFFYWZhRmFnYUdhaGFIYW5hTmFtYU1hYWFBYWJhQmFkYURhaWFJYWphSmFsYUwKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3N0cnVjdF9rZXlhc2ludF8wLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9zdHJ1Y3Rfa2V5YXNpbnRfMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MTFmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9zdHJ1Y3Rfa2V5YXNpbnRfMC5jYm9yCkBAIC0wLDAgKzEsNSBAQAorqAH1Ahv//////////wM5A+cE+8AQZmZmZmZmBVgaAQIDBAUGBwgKKwsMCisODxAREhMUFRYXGBkaBngrVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZweYGgECAwQFBgcICisLDAorDg8QERITFBUWFxgYGBkYGgitYWRhRGFmYUZhZ2FHYWhhSGFtYU1hbmFOYWFhQWFiYUJhY2FDYWVhRWFpYUlhamFKYWxhTApkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvc3RydWN0X3RvYXJyYXlfMC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvc3RydWN0X3RvYXJyYXlfMC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZmFhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy9zdHJ1Y3RfdG9hcnJheV8wLmNib3IKQEAgLTAsMCArMSw1IEBACiuI9Rv//////////zkD5/vAEGZmZmZmZlgaAQIDBAUGBwgKKwsMCisODxAREhMUFRYXGBkaeCtUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nmBoBAgMEBQYHCAorCwwKKw4PEBESExQVFhcYGBgZGBqtYWJhQmFjYUNhZGFEYWVhRWFmYUZhaWFJYW5hTmFhYUFhZ2FHYWhhSGFqYUphbGFMYW1hTQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGFnXzAuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ18wLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJmYmZmOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ18wLmNib3IKQEAgLTAsMCArMSBAQAorwHQyMDEzLTAzLTIxVDIwOjA0OjAwWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ18xLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfMS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlY2Y5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfMS5jYm9yCkBAIC0wLDAgKzEgQEAKK8EaUUtnsApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ18yLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfMi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYTNmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfMi5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ18zLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfMy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ODE4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfMy5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ180LmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfNC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Yzc5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfNC5jYm9yCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ181LmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfNS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDEyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfNS5jYm9yCkBAIC0wLDAgKzEgQEAKK9dEAQIDBApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ182LmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfNi5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ODRmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90YWdfNi5jYm9yCkBAIC0wLDAgKzEgQEAKK9gYRWRJRVRGClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGFnXzcuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ183LmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkMjYwMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RhZ183LmNib3IKQEAgLTAsMCArMSBAQAor2CB2aHR0cDovL3d3dy5leGFtcGxlLmNvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RleHRfc3RyaW5nXzAuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RleHRfc3RyaW5nXzAuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDg0NWZiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfMC5jYm9yCkBAIC0wLDAgKzEgQEAKK2AKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90ZXh0X3N0cmluZ18xLmNib3IgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90ZXh0X3N0cmluZ18xLmNib3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjOWE0YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RleHRfc3RyaW5nXzEuY2JvcgpAQCAtMCwwICsxIEBACithYQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RleHRfc3RyaW5nXzIuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RleHRfc3RyaW5nXzIuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM2NjliCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfMi5jYm9yCkBAIC0wLDAgKzEgQEAKK2RJRVRGClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfMy5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfMy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZTY2MTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90ZXh0X3N0cmluZ18zLmNib3IKQEAgLTAsMCArMSBAQAorYiJcClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfNC5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfNC5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTVhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90ZXh0X3N0cmluZ180LmNib3IKQEAgLTAsMCArMSBAQAorYsO8ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfNS5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfNS5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjhjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90ZXh0X3N0cmluZ181LmNib3IKQEAgLTAsMCArMSBAQAorY+awtApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RleHRfc3RyaW5nXzYuY2JvciBiL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY29ycHVzL3RleHRfc3RyaW5nXzYuY2JvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWE0OGEwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfNi5jYm9yCkBAIC0wLDAgKzEgQEAKK2TwkIWRClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfNy5jYm9yIGIvZnV6emluZy9vcnBoYW5zL2xpYmNwcGJvci9jb3JwdXMvdGV4dF9zdHJpbmdfNy5jYm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZGFmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NvcnB1cy90ZXh0X3N0cmluZ183LmNib3IKQEAgLTAsMCArMSBAQAorf2VzdHJlYWRtaW5n/wpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY3BwYm9yX2Z1enplci5jcHAgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NwcGJvcl9mdXp6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZTgwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NwcGJvcl9mdXp6ZXIuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPGZ1enplci9GdXp6ZWREYXRhUHJvdmlkZXIuaD4KKworI2luY2x1ZGUgPGNwcGJvci5oPgorI2luY2x1ZGUgPGNwcGJvcl9wYXJzZS5oPgorCit2b2lkIEZ1enpTdHJpbmdQYXJzaW5nKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgRnV6emVkRGF0YVByb3ZpZGVyIGRhdGFQcm92aWRlcihkYXRhLCBzaXplKTsKKyAgICBzdGQ6OnN0cmluZyBjb250ZW50cyA9IGRhdGFQcm92aWRlci5Db25zdW1lUmVtYWluaW5nQnl0ZXNBc1N0cmluZygpOworICAgIGNwcGJvcjo6VHN0ciB2YWwoY29udGVudHMpOworICAgIGNwcGJvcjo6cGFyc2UodmFsLmVuY29kZSgpKTsKK30KKwordm9pZCBGdXp6VmVjdG9yUGFyc2luZyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIEZ1enplZERhdGFQcm92aWRlciBkYXRhUHJvdmlkZXIoZGF0YSwgc2l6ZSk7CisgICAgc2l6ZV90IGtleVNpemUgPSBkYXRhUHJvdmlkZXIucmVtYWluaW5nX2J5dGVzKCkgLyA0OworICAgIHN0ZDo6c3RyaW5nIGtleTEgPSBkYXRhUHJvdmlkZXIuQ29uc3VtZUJ5dGVzQXNTdHJpbmcoa2V5U2l6ZSk7CisgICAgc3RkOjpzdHJpbmcga2V5MiA9IGRhdGFQcm92aWRlci5Db25zdW1lQnl0ZXNBc1N0cmluZyhrZXlTaXplKTsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBjb250ZW50c0J5dGVzID0gZGF0YVByb3ZpZGVyLkNvbnN1bWVSZW1haW5pbmdCeXRlczx1aW50OF90PigpOworICAgIGNwcGJvcjo6TWFwIG1hcDsKKyAgICBtYXAuYWRkKGtleTEsIGNwcGJvcjo6QXJyYXkoKS5hZGQoY3BwYm9yOjpNYXAoKS5hZGQoa2V5MiwgY29udGVudHNCeXRlcykpKTsKKyAgICBjcHBib3I6OnBhcnNlKG1hcC5lbmNvZGUoKSk7Cit9CisKK2V4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBGdXp6U3RyaW5nUGFyc2luZyhkYXRhLCBzaXplKTsKKyAgICBGdXp6VmVjdG9yUGFyc2luZyhkYXRhLCBzaXplKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJjcHBib3IvY3BwYm9yX3BhcnNlX2Z1enplci5jcHAgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NwcGJvcl9wYXJzZV9mdXp6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZWQ4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliY3BwYm9yL2NwcGJvcl9wYXJzZV9mdXp6ZXIuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPGNwcGJvcl9wYXJzZS5oPgorCit1c2luZyBuYW1lc3BhY2UgY3BwYm9yOworCitjbGFzcyBGdXp6UGFyc2VDbGllbnQgOiBwdWJsaWMgUGFyc2VDbGllbnQgeworICBwdWJsaWM6CisgICAgdmlydHVhbCBQYXJzZUNsaWVudCogaXRlbShzdGQ6OnVuaXF1ZV9wdHI8SXRlbT4mLCBjb25zdCB1aW50OF90KiwgY29uc3QgdWludDhfdCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90Kikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgdmlydHVhbCBQYXJzZUNsaWVudCogaXRlbUVuZChzdGQ6OnVuaXF1ZV9wdHI8SXRlbT4mLCBjb25zdCB1aW50OF90KiwgY29uc3QgdWludDhfdCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90Kikgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGVycm9yKGNvbnN0IHVpbnQ4X3QqLCBjb25zdCBzdGQ6OnN0cmluZyYpIG92ZXJyaWRlIHt9Cit9OworCit2b2lkIEZ1enpQYXJzZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIGNvbnN0IHVpbnQ4X3QqIGN1cnNvciA9IGRhdGE7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gZGF0YSArIHNpemU7CisgICAgd2hpbGUgKGN1cnNvciA8IGVuZCkgeworICAgICAgICBhdXRvIFtpdGVtLCBuZXdQb3MsIGVyck1zZ10gPSBwYXJzZShjdXJzb3IsIGVuZCk7CisgICAgICAgIGlmICghaXRlbSB8fCAhZXJyTXNnLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBuZXdQb3M7CisgICAgfQorfQorCit2b2lkIEZ1enpQYXJzZVdpdGhWaWV3cyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIGNvbnN0IHVpbnQ4X3QqIGN1cnNvciA9IGRhdGE7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gZGF0YSArIHNpemU7CisgICAgd2hpbGUgKGN1cnNvciA8IGVuZCkgeworICAgICAgICBhdXRvIFtpdGVtLCBuZXdQb3MsIGVyck1zZ10gPSBwYXJzZVdpdGhWaWV3cyhjdXJzb3IsIGVuZCk7CisgICAgICAgIGlmICghaXRlbSB8fCAhZXJyTXNnLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBuZXdQb3M7CisgICAgfQorfQorCit2b2lkIEZ1enpQYXJzZVdpdGhDbGllbnQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBkYXRhICsgc2l6ZTsKKyAgICBGdXp6UGFyc2VDbGllbnQgcGFyc2VDbGllbnQ7CisgICAgcGFyc2UoZGF0YSwgZW5kLCAmcGFyc2VDbGllbnQpOworfQorCit2b2lkIEZ1enpQYXJzZVdpdGhDbGllbnRBbmRWaWV3cyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGRhdGEgKyBzaXplOworICAgIEZ1enpQYXJzZUNsaWVudCBwYXJzZUNsaWVudDsKKyAgICBwYXJzZVdpdGhWaWV3cyhkYXRhLCBlbmQsICZwYXJzZUNsaWVudCk7Cit9CisKK2V4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBGdXp6UGFyc2UoZGF0YSwgc2l6ZSk7CisgICAgRnV6elBhcnNlV2l0aFZpZXdzKGRhdGEsIHNpemUpOworICAgIEZ1enpQYXJzZVdpdGhDbGllbnQoZGF0YSwgc2l6ZSk7CisgICAgRnV6elBhcnNlV2l0aENsaWVudEFuZFZpZXdzKGRhdGEsIHNpemUpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmV4aWYvQW5kcm9pZC5icCBiL2Z1enppbmcvb3JwaGFucy9saWJleGlmL0FuZHJvaWQuYnAKaW5kZXggZTY4Nzg4ZC4uZDdlZTQ1MCAxMDA2NDQKLS0tIGEvZnV6emluZy9vcnBoYW5zL2xpYmV4aWYvQW5kcm9pZC5icAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGliZXhpZi9BbmRyb2lkLmJwCkBAIC0xLDMgKzEsNyBAQAorcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAorfQorCiBjY19mdXp6IHsKICAgICBuYW1lOiAibGliZXhpZl9mdXp6ZXIiLAogICAgIHNyY3M6IFsKQEAgLTcsNCArMTEsNSBAQAogICAgICAgICAibGliZXhpZiIsCiAgICAgXSwKICAgICBob3N0X3N1cHBvcnRlZDogZmFsc2UsCisgICAgY29ycHVzOiBbImNvcnB1cy8qIl0sCiB9CmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliZmZpL0FuZHJvaWQuYnAgYi9mdXp6aW5nL29ycGhhbnMvbGliZmZpL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0OWY5MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJmZmkvQW5kcm9pZC5icApAQCAtMCwwICsxLDIyIEBACitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCit9CisKK2NjX2Z1enogeworICAgIG5hbWU6ICJsaWJmZmlfZnV6eiIsCisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCisgICAgc3JjczogWworICAgICAgICAiZnV6el9mZmkuY2MiLAorICAgIF0sCisgICAgaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJleHRlcm5hbC9saWJmZmkiLAorICAgIF0sCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItV25vLW1hY3JvLXJlZGVmaW5lZCIsCisgICAgICAgICItV25vLXVudXNlZC1wYXJhbWV0ZXIiLAorICAgICAgICAiLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIsCisgICAgXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAibGliZmZpIiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL2xpYmZmaS9mdXp6X2ZmaS5jYyBiL2Z1enppbmcvb3JwaGFucy9saWJmZmkvZnV6el9mZmkuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1ZjU4YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJmZmkvZnV6el9mZmkuY2MKQEAgLTAsMCArMSwzNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAyMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vIERvbid0IGxpbnQgdGhlIG5leHQgbGluZSwgYXMgY3BwbGludCB3aWxsIHN1Z2dlc3QgYWRkaW5nCisvLyAvdG9vbHMvc2VjdXJpdHkgYXMgYW4gaW5jbHVkZV9kaXIKKy8vIE5PTElOVE5FWFRMSU5FCisjaW5jbHVkZSAiZnV6el9mZmkuaCIKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlICJpbmNsdWRlL2ZmaV9jb21tb24uaCIKKworLy8gRW1wdHkgZnVuY3Rpb25zIHdlIGNhbiB1c2UgZm9yIG91ciBmdW5jdGlvbiB0YXJnZXRzCit2b2lkIGZuKGludCBudW1fYXJncywgLi4uKSB7fQordm9pZCBjbG9zdXJlX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLAorICAgICAgICB2b2lkKiByZXNwLCB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEpIHt9Cit2b2lkIHJhd19jbG9zdXJlX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLAorICAgICAgICB2b2lkKiByZXNwLCBmZmlfcmF3KiBhcmdzLCB2b2lkKiB1c2VyZGF0YSkge30KK3ZvaWQgamF2YV9yYXdfY2xvc3VyZV9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywKKyAgICAgICAgdm9pZCogcmVzcCwgZmZpX2phdmFfcmF3KiBhcmdzLCB2b2lkKiB1c2VyZGF0YSkge30KKworZmZpX3R5cGUqIGdlbmVyYXRlQ3VzdG9tVHlwZShGdXp6ZWREYXRhUHJvdmlkZXIqIGRhdGFQcm92aWRlcikgeworICAgIC8vIFNldCBvdXIgZmxhZyBzbyB3ZSBkb24ndCBjYWxsIGEgamF2YS1yZWxhdGVkIGZ1bmN0aW9uICh0cmlnZ2VycyBhbiBhYm9ydCkKKyAgICBhcmdzX2NvbnRhaW5fc3RydWN0ID0gdHJ1ZTsKKworICAgIGZmaV90eXBlKiBuZXdfdHlwZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmZpX3R5cGUqPihtYWxsb2Moc2l6ZW9mKGZmaV90eXBlKSkpOworICAgIGZmaV9hbGxvY192ZWN0b3IucHVzaF9iYWNrKG5ld190eXBlKTsKKworICAgIG5ld190eXBlLT5zaXplID0gMDsKKyAgICBuZXdfdHlwZS0+YWxpZ25tZW50ID0gMDsKKyAgICBuZXdfdHlwZS0+dHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKworICAgIC8vIEdlbmVyYXRlIG91ciBzdWJvYmplY3RzCisgICAgc2l6ZV90IG51bV9lbGVtZW50cyA9IGRhdGFQcm92aWRlci0+Q29uc3VtZUludGVncmFsSW5SYW5nZTxzaXplX3Q+KDAsCisgICAgICAgICAgICBNQVhfTlVNX0VMRU1FTlRTKTsKKyAgICBuZXdfdHlwZS0+ZWxlbWVudHMgPSByZWludGVycHJldF9jYXN0PGZmaV90eXBlKio+KAorICAgICAgICAgICAgbWFsbG9jKHNpemVvZihmZmlfdHlwZSopKihudW1fZWxlbWVudHMrMSkpKTsKKworICAgIC8vIE5lc3RlZCBjdXN0b20gc3RydWN0cyB3aWxsIGNhdXNlIGFuIGFzc2VydCwgc28gZGlzYWJsZSB0aGVtCisgICAgLy8gVE9ETyhtaWNoYWVsLmVuc2luZ0BsZXZpYXRoYW5zZWN1cml0eS5jb20pOgorICAgIC8vICAgICBjaGFuZ2UgdGhlICdmYWxzZScgaGVyZSB0byB0cnVlIG9uY2UgbGliZmZpIHN1cHBvcnRzIG5lc3RlZCBzdHJ1Y3RzLgorICAgIC8vICAgICBJdCdsbCBqdXN0IHRocm93IGFuIGFzc2VydCBjdXJyZW50bHkuCisgICAgZm9yIChzaXplX3QgaT0wOyBpIDwgbnVtX2VsZW1lbnRzOyBpKyspIHsKKyAgICAgICAgbmV3X3R5cGUtPmVsZW1lbnRzW2ldID0gZ2V0UmFuZG9tVHlwZShkYXRhUHJvdmlkZXIsIGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBUaGUgZmluYWwgZWxlbWVudCBtdXN0IGJlIGEgbnVsbHB0cgorICAgIG5ld190eXBlLT5lbGVtZW50c1tudW1fZWxlbWVudHNdID0gTlVMTDsKKworICAgIC8vIEdldCBvdXIgc2l6ZS9hbGlnbm1lbnQKKyAgICBmZmlfZ2V0X3N0cnVjdF9vZmZzZXRzKGFiaSwgbmV3X3R5cGUsIE5VTEwpOworCisgICAgcmV0dXJuIG5ld190eXBlOworfQorCitzaXplX3QgZ2V0VG90YWxTaXplKGZmaV90eXBlKiB0eXBlKSB7CisgICAgaWYgKHR5cGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgdG90YWwgYXMgdGhlIHNpemUgb2YgdGhlIG9iamVjdCBpdHNlbGYKKyAgICBzaXplX3QgdG90YWxfc2l6ZSA9IHR5cGUtPnNpemUgPiBXT1JEU0laRV9CWVRFUyA/CisgICAgICAgICAgICB0eXBlLT5zaXplIDogV09SRFNJWkVfQllURVM7CisKKyAgICAvLyBSZWN1cnNpdmVseSBhZGQgdGhlIHNpemUgb2YgdGhlIHN1YmVsZW1lbnRzCisgICAgaWYgKHR5cGUtPmVsZW1lbnRzICE9IE5VTEwpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaT0wOyB0eXBlLT5lbGVtZW50c1tpXSAhPSBOVUxMOyBpKyspIHsKKyAgICAgICAgICAgIHRvdGFsX3NpemUgKz0gZ2V0VG90YWxTaXplKHR5cGUtPmVsZW1lbnRzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0b3RhbF9zaXplOworfQorCitmZmlfdHlwZSogZ2V0UmFuZG9tVHlwZShGdXp6ZWREYXRhUHJvdmlkZXIqIGRhdGFQcm92aWRlciwKKyAgICAgICAgYm9vbCBhbGxvd0N1c3RvbVR5cGVzKSB7CisgICAgLy8gV2hpY2ggdHlwZT8gTGV0IHR5cGU9PU5VTV9UWVBFUyBiZSBvdXIgY3VzdG9tIHN0cnVjdCBjYXNlCisgICAgc2l6ZV90IHR5cGVfaW5kZXggPSBkYXRhUHJvdmlkZXItPkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8c2l6ZV90PigwLAorICAgICAgICAgICAgTlVNX1RZUEVTKTsKKyAgICBmZmlfdHlwZSogdHlwZTsKKyAgICBpZiAodHlwZV9pbmRleCA9PSBOVU1fVFlQRVMpIHsKKyAgICAgICAgaWYgKGFsbG93Q3VzdG9tVHlwZXMpIHsKKyAgICAgICAgICAgIHR5cGUgPSBnZW5lcmF0ZUN1c3RvbVR5cGUoZGF0YVByb3ZpZGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHlwZSA9IGZmaV90eXBlc1t0eXBlX2luZGV4XTsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCogZ2VuQXJnKGZmaV90eXBlKiB0eXBlLCBGdXp6ZWREYXRhUHJvdmlkZXIqIGRhdGFQcm92aWRlcikgeworICAgIC8vIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3Igb3VyIGFyZworICAgIC8vIFRPRE8obWljaGFlbC5lbnNpbmdAbGV2aWF0aGFuc2VjdXJpdHkuY29tKToKKyAgICAvLyAgICBQcm9wZXJseSBhbGxvY2F0ZSB0aGUgY29ycmVjdCBhbW91bnQgb2YgYWxpZ25lZC1zcGFjZSwKKyAgICAvLyAgICBkb24ndCBqdXN0IGRvdWJsZSAod2hpY2ggc2hvdWxkIGNvbnRhaW4gYW55IGFsaWdubWVudCkKKyAgICBzaXplX3QgdHlwZV9zaXplID0gZ2V0VG90YWxTaXplKHR5cGUpKjI7CisKKyAgICBpZiAodHlwZV9zaXplID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdm9pZCogcmV0ID0gbWFsbG9jKHR5cGVfc2l6ZSk7CisKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBieXRlcyA9IGRhdGFQcm92aWRlci0+Q29uc3VtZUJ5dGVzPHVpbnQ4X3Q+KHR5cGVfc2l6ZSk7CisgICAgbWVtY3B5KHJldCwgYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpOworCisgICAgcmV0dXJuIHJldDsKK30KKworYm9vbCBidWlsZEFyZ0FycmF5cyhmZmlfdHlwZSogYXJnX3R5cGVzW10sIHZvaWQqIGFyZ19hcnJheVtdLCBzaXplX3QgbnVtX2FyZ3MsCisgICAgICAgIEZ1enplZERhdGFQcm92aWRlciogZGF0YVByb3ZpZGVyKSB7CisgICAgLy8gVGhlIGZpcnN0IHZhbHVlIGluIG91ciBhcnJheSBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMKKyAgICBhcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgICBzaXplX3QqIHNpemVfcHRyID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihtYWxsb2Moc2l6ZW9mKHNpemVfdCkpKTsKKyAgICAqc2l6ZV9wdHIgPSBudW1fYXJnczsKKyAgICBhcmdfYXJyYXlbMF0gPSBzaXplX3B0cjsKKworICAgIC8vIEdyYWIgb3VyIGFyZ3VtZW50cworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDw9IG51bV9hcmdzOyBpKyspIHsKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHdoYXQgdHlwZSB3ZSdyZSB1c2luZworICAgICAgICBmZmlfdHlwZSogdHlwZSA9IGdldFJhbmRvbVR5cGUoZGF0YVByb3ZpZGVyLCB0cnVlKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGFyZ190eXBlc1tpXSA9IHR5cGU7CisKKyAgICAgICAgLy8gR2VuZXJhdGUgYSB2YWx1ZSBmb3IgaXQgYW5kIGFkZCB0byBvdXIgYXJndW1lbnRzIGFycmF5CisgICAgICAgIGFyZ19hcnJheVtpXSA9IGdlbkFyZyh0eXBlLCBkYXRhUHJvdmlkZXIpOworICAgIH0KKworICAgIC8vIE91ciBhcnJheXMgb2YgcG9pbnRlcnMgbmVlZCB0byBiZSBudWxscHRyLXRlcm1pbmF0ZWQKKyAgICBhcmdfdHlwZXNbbnVtX2FyZ3MrMV0gPSBOVUxMOworICAgIGFyZ19hcnJheVtudW1fYXJncysxXSA9IE5VTEw7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBydW5NYWluRnVuY3Rpb25zKGZmaV9jaWYqIGNpZiwgdm9pZCogcmVzcF9idWYsIHZvaWQqKiBhcmdfYXJyYXksCisgICAgICAgIEZ1enplZERhdGFQcm92aWRlciogZGF0YVByb3ZpZGVyKSB7CisgICAgLy8gQ2FsbCBmdW5jdGlvbgorICAgIGZmaV9jYWxsKGNpZiwgRkZJX0ZOKGZuKSwgcmVzcF9idWYsIGFyZ19hcnJheSk7CisKKyAgICAvLyBQcmVwIENsb3N1cmUKKyAgICBmZmlfY2xvc3VyZSogcGNsID0gTlVMTDsKKyAgICB2b2lkKiBjb2RlOworICAgIGZmaV9zdGF0dXMgcmV0OworCisgICAgcGNsID0gcmVpbnRlcnByZXRfY2FzdDxmZmlfY2xvc3VyZSo+KAorICAgICAgICAgICAgZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpKTsKKyAgICBpZiAocGNsID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBidWZfc2l6ZSA9IGRhdGFQcm92aWRlci0+Q29uc3VtZUludGVncmFsSW5SYW5nZTxzaXplX3Q+KDAsCisgICAgICAgICAgICBNQVhfUkVTUF9TSVpFKTsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhX3ZlY3RvciA9CisgICAgICAgICAgICBkYXRhUHJvdmlkZXItPkNvbnN1bWVCeXRlczx1aW50OF90PihidWZfc2l6ZSk7CisgICAgcmV0ID0gZmZpX3ByZXBfY2xvc3VyZV9sb2MoCisgICAgICAgICAgICBwY2wsCisgICAgICAgICAgICBjaWYsCisgICAgICAgICAgICBjbG9zdXJlX2ZuLAorICAgICAgICAgICAgZGF0YV92ZWN0b3IuZGF0YSgpLAorICAgICAgICAgICAgY29kZSk7CisgICAgaWYgKHJldCAhPSBGRklfT0spIHsKKyAgICAgICAgZmZpX2Nsb3N1cmVfZnJlZShwY2wpOworICAgIH0KK30KKwordm9pZCBydW5SYXdGdW5jdGlvbnMoZmZpX2NpZiogY2lmLCB2b2lkKiByZXNwX2J1Ziwgdm9pZCoqIGFyZ19hcnJheSwKKyAgICAgICAgRnV6emVkRGF0YVByb3ZpZGVyKiBkYXRhUHJvdmlkZXIpIHsKKyAgICAjaWYgIUZGSV9OT19SQVdfQVBJICYmICFGRklfTkFUSVZFX1JBV19BUEkKKyAgICAvLyBBbGxvY2F0ZSBvdXIgZmZpX3JhdyBhbmQgcHV0IG91ciBhcmdzIHRoZXJlCisgICAgc2l6ZV90IHJzaXplID0gZmZpX3Jhd19zaXplKGNpZik7CisgICAgZmZpX3JhdyogcmF3X2FyZ3MgPSByZWludGVycHJldF9jYXN0PGZmaV9yYXcqPihtYWxsb2MocnNpemUpKTsKKyAgICByYXdfYWxsb2NfdmVjdG9yLnB1c2hfYmFjayhyYXdfYXJncyk7CisgICAgZmZpX3B0cmFycmF5X3RvX3JhdyhjaWYsIGFyZ19hcnJheSwgcmF3X2FyZ3MpOworCisgICAgLy8gQ2FsbAorICAgIGZmaV9yYXdfY2FsbChjaWYsIEZGSV9GTihmbiksIHJlc3BfYnVmLCByYXdfYXJncyk7CisKKyAgICAvLyBQcmVwIENsb3N1cmUKKyAgICAjaWYgRkZJX0NMT1NVUkVTCisgICAgZmZpX3Jhd19jbG9zdXJlKiBwY2wgPSBOVUxMOworICAgIHZvaWQqIGNvZGU7CisgICAgZmZpX3N0YXR1cyByZXQ7CisKKyAgICBwY2wgPSBzdGF0aWNfY2FzdDxmZmlfcmF3X2Nsb3N1cmUqPigKKyAgICAgICAgICAgIGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfcmF3X2Nsb3N1cmUpLCAmY29kZSkpOworICAgIGlmIChwY2wgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBidWZfc2l6ZSA9IGRhdGFQcm92aWRlci0+Q29uc3VtZUludGVncmFsSW5SYW5nZTxzaXplX3Q+KDAsCisgICAgICAgICAgICBNQVhfUkVTUF9TSVpFKTsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhX3ZlY3RvciA9CisgICAgICAgICAgICBkYXRhUHJvdmlkZXItPkNvbnN1bWVCeXRlczx1aW50OF90PihidWZfc2l6ZSk7CisgICAgcmV0ID0gZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKAorICAgICAgICAgICAgcGNsLAorICAgICAgICAgICAgY2lmLAorICAgICAgICAgICAgcmF3X2Nsb3N1cmVfZm4sCisgICAgICAgICAgICBkYXRhX3ZlY3Rvci5kYXRhKCksCisgICAgICAgICAgICBjb2RlKTsKKyAgICBpZiAocmV0ICE9IEZGSV9PSykgeworICAgICAgICBmZmlfY2xvc3VyZV9mcmVlKHBjbCk7CisgICAgfQorCisgICAgI2VuZGlmICAvLyBGRklfQ0xPU1VSRVMKKyAgICAjZW5kaWYgIC8vICFGRklfTk9fUkFXX0FQSSAmJiAhRkZJX05BVElWRV9SQVdfQVBJCit9CisKK3ZvaWQgcnVuSmF2YUZ1bmN0aW9ucyhmZmlfY2lmKiBjaWYsIHZvaWQqIHJlc3BfYnVmLCB2b2lkKiogYXJnX2FycmF5LAorICAgICAgICBGdXp6ZWREYXRhUHJvdmlkZXIqIGRhdGFQcm92aWRlcikgeworICAgICNpZiAhZGVmaW5lZChOT19KQVZBX1JBV19BUEkpCisgICAgI2lmICAhRkZJX05PX1JBV19BUEkgJiYgIUZGSV9OQVRJVkVfUkFXX0FQSQorCisgICAgLy8gQWxsb2NhdGUgb3VyIGZmaV9qYXZhX3JhdyBhbmQgcHV0IG91ciBhcmdzIHRoZXJlCisgICAgc2l6ZV90IHJzaXplID0gZmZpX2phdmFfcmF3X3NpemUoY2lmKTsKKyAgICAvLyBOT1RFOiBhIGJ1ZmZlciBvdmVycmVhZCB3aWxsIG9jY2FzaW9uYWxseSBoYXBwZW4gaWYgd2UgZG9uJ3QKKyAgICAvLyAgICAgICBpbmNyZWFzZSByc2l6ZS4KKyAgICBmZmlfamF2YV9yYXcqIHJhd19hcmdzID0gcmVpbnRlcnByZXRfY2FzdDxmZmlfcmF3Kj4obWFsbG9jKHJzaXplKjIpKTsKKyAgICByYXdfYWxsb2NfdmVjdG9yLnB1c2hfYmFjayhyYXdfYXJncyk7CisgICAgZmZpX3B0cmFycmF5X3RvX3JhdyhjaWYsIGFyZ19hcnJheSwgcmF3X2FyZ3MpOworCisgICAgLy8gQ2FsbAorICAgIGZmaV9qYXZhX3Jhd19jYWxsKGNpZiwgRkZJX0ZOKGZuKSwgcmVzcF9idWYsIHJhd19hcmdzKTsKKworICAgIC8vIFByZXAgQ2xvc3VyZQorICAgICNpZiBGRklfQ0xPU1VSRVMKKyAgICBmZmlfamF2YV9yYXdfY2xvc3VyZSogcGNsID0gTlVMTDsKKyAgICB2b2lkKiBjb2RlOworICAgIGZmaV9zdGF0dXMgcmV0OworCisgICAgcGNsID0gc3RhdGljX2Nhc3Q8ZmZpX2phdmFfcmF3X2Nsb3N1cmUqPigKKyAgICAgICAgICAgIGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfamF2YV9yYXdfY2xvc3VyZSksICZjb2RlKSk7CisgICAgaWYgKHBjbCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2l6ZV90IGJ1Zl9zaXplID0gZGF0YVByb3ZpZGVyLT5Db25zdW1lSW50ZWdyYWxJblJhbmdlPHNpemVfdD4oMCwKKyAgICAgICAgICAgIE1BWF9SRVNQX1NJWkUpOworICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGRhdGFfdmVjdG9yID0KKyAgICAgICAgICAgIGRhdGFQcm92aWRlci0+Q29uc3VtZUJ5dGVzPHVpbnQ4X3Q+KGJ1Zl9zaXplKTsKKyAgICByZXQgPSBmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYygKKyAgICAgICAgICAgIHBjbCwKKyAgICAgICAgICAgIGNpZiwKKyAgICAgICAgICAgIHJhd19jbG9zdXJlX2ZuLAorICAgICAgICAgICAgZGF0YV92ZWN0b3IuZGF0YSgpLAorICAgICAgICAgICAgY29kZSk7CisgICAgaWYgKHJldCAhPSBGRklfT0spIHsKKyAgICAgICAgZmZpX2Nsb3N1cmVfZnJlZShwY2wpOworICAgIH0KKworICAgICNlbmRpZiAgLy8gRkZJX0NMT1NVUkVTCisgICAgI2VuZGlmICAvLyAhRkZJX05BVElWRV9SQVdfQVBJCisgICAgI2VuZGlmICAvLyAhTk9fSkFWQV9SQVdfQVBJCit9CisKK3ZvaWQgZnJlZUZGSShmZmlfdHlwZSogZmZpX3R5cGUpIHsKKyAgICAvLyBNYWtlIHN1cmUgaXQncyBvbmUgb2Ygb3VyIHN0cnVjdHMKKyAgICBpZiAoZmZpX3R5cGUgPT0gTlVMTCB8fCBmZmlfdHlwZS0+dHlwZSAhPSBGRklfVFlQRV9TVFJVQ1QpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChmZmlfdHlwZS0+ZWxlbWVudHMgIT0gTlVMTCkgeworICAgICAgICBmcmVlKGZmaV90eXBlLT5lbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gRmluYWxseSwgZnJlZSBvdXIgb2JqZWN0CisgICAgZnJlZShmZmlfdHlwZSk7Cit9CisKK3ZvaWQgZnJlZUFsbCh2b2lkKiBhcmdfYXJyYXlbXSwgc2l6ZV90IG51bV9hcmdzLCB2b2lkKiByZXNwX2J1ZikgeworICAgIC8vIEZyZWUgb3VyIGN1c3RvbSBzdHJ1Y3Qgb2JqZWN0cworICAgIGZvciAoY29uc3QgYXV0byYgZmZpIDogZmZpX2FsbG9jX3ZlY3RvcikgeworICAgICAgICBmcmVlRkZJKGZmaSk7CisgICAgfQorICAgIGZmaV9hbGxvY192ZWN0b3IuY2xlYXIoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJhdyA6IHJhd19hbGxvY192ZWN0b3IpIHsKKyAgICAgICAgZnJlZShyYXcpOworICAgIH0KKyAgICByYXdfYWxsb2NfdmVjdG9yLmNsZWFyKCk7CisKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPD0gbnVtX2FyZ3M7IGkrKykgeworICAgICAgICBmcmVlKGFyZ19hcnJheVtpXSk7CisgICAgfQorCisgICAgaWYgKHJlc3BfYnVmKSB7CisgICAgICAgIGZyZWUocmVzcF9idWYpOworICAgIH0KK30KKworZXh0ZXJuICJDIiBpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSkgeworICAgIC8vIEluaXQgb3VyIHdyYXBwZXIKKyAgICBGdXp6ZWREYXRhUHJvdmlkZXIgZGF0YVByb3ZpZGVyKERhdGEsIFNpemUpOworICAgIGZmaV9jaWYgY2lmOworICAgIGZmaV9zdGF0dXMgcmV0OworICAgIHZvaWQqIHJlc3BfYnVmID0gTlVMTDsKKyAgICBhcmdzX2NvbnRhaW5fc3RydWN0ID0gZmFsc2U7CisgICAgZmZpX3R5cGUqIHJ0eXBlOworCisgICAgLy8gSG93IG1hbnkgYXJncyBhcmUgd2Ugc2VuZGluZz8KKyAgICBzaXplX3QgbnVtX2FyZ3MgPSBkYXRhUHJvdmlkZXIuQ29uc3VtZUludGVncmFsSW5SYW5nZTxzaXplX3Q+KDAsCisgICAgICAgICAgICBNQVhfTlVNX0FSR1MpOworCisgICAgLy8gQnVpbGQgb3VyIGFycmF5IG9mIGFyZ3MgKCsyIGZvciBsZWFkaW5nIGFyZ19jb3VudCBhbmQgdHJhaWxpbmcgbnVsbHB0cikKKyAgICBmZmlfdHlwZSogYXJnX3R5cGVzW251bV9hcmdzKzJdOworICAgIHZvaWQqIGFyZ19hcnJheVtudW1fYXJncysyXTsKKyAgICBib29sIHN1Y2Nlc3MgPSBidWlsZEFyZ0FycmF5cyhhcmdfdHlwZXMsIGFyZ19hcnJheSwgbnVtX2FyZ3MsCisgICAgICAgICAgICAmZGF0YVByb3ZpZGVyKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgZ290byBmcmVlOworICAgIH0KKworICAgIC8vIEdldCByZXR1cm4gdHlwZQorICAgIHJ0eXBlID0gZGF0YVByb3ZpZGVyLlBpY2tWYWx1ZUluQXJyYXk8ZmZpX3R5cGUqLCBOVU1fVFlQRVM+KGZmaV90eXBlcyk7CisKKyAgICAvLyBDcmVhdGUgYSBidWZmZXIgZm9yIG91ciByZXR1cm4gdmFsdWUKKyAgICByZXNwX2J1ZiA9IG1hbGxvYyhNQVhfUkVTUF9TSVpFKTsKKyAgICBpZiAocmVzcF9idWYgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGZyZWU7CisgICAgfQorCisgICAgLy8gU2V0IHVwIG91ciBBQkkKKyAgICAvLyBOT1RFOiBmdXp6aW5nIGFiaSB0cmlnZ2VycyBhbiBhYm9ydCBvbiBsaW51eC14ODZfNjQsCisgICAgLy8gICAgICAgc28gb25seSBmdXp6IGl0IG9uIEFSTQorICAgICNpZiBNQVhfQUJJID4gMCAmJiBkZWZpbmVkKEFSTSkKKyAgICBhYmkgPSBzdGF0aWNfY2FzdDxmZmlfYWJpPigKKyAgICAgICAgICAgZGF0YVByb3ZpZGVyLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KDAsIE1BWF9BQkkpKTsKKyAgICAjZW5kaWYKKyAgICAjaWYgSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UCisgICAgZmZpX3ByZXBfdHlwZXMoYWJpKTsKKyAgICAjZW5kaWYKKworICAgIC8vID09PT09PT09PT09PT0gQ2FsbCBGdW5jdGlvbnMgPT09PT09PT09PT09PQorICAgIHJldCA9IGZmaV9wcmVwX2NpZl92YXIoJmNpZiwgYWJpLCAxLCBudW1fYXJncywgcnR5cGUsCisgICAgICAgICAgICBhcmdfdHlwZXMpOworICAgIGlmIChyZXQgIT0gRkZJX09LKSB7CisgICAgICAgIGdvdG8gZnJlZTsKKyAgICB9CisKKyAgICBydW5NYWluRnVuY3Rpb25zKCZjaWYsIHJlc3BfYnVmLCBhcmdfYXJyYXksICZkYXRhUHJvdmlkZXIpOworICAgIHJ1blJhd0Z1bmN0aW9ucygmY2lmLCByZXNwX2J1ZiwgYXJnX2FycmF5LCAmZGF0YVByb3ZpZGVyKTsKKyAgICBpZiAoIWFyZ3NfY29udGFpbl9zdHJ1Y3QpIHsKKyAgICAgICAgcnVuSmF2YUZ1bmN0aW9ucygmY2lmLCByZXNwX2J1ZiwgYXJnX2FycmF5LCAmZGF0YVByb3ZpZGVyKTsKKyAgICB9CisKK2ZyZWU6CisgICAgZnJlZUFsbChhcmdfYXJyYXksIG51bV9hcmdzLCByZXNwX2J1Zik7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGliZmZpL2Z1enpfZmZpLmggYi9mdXp6aW5nL29ycGhhbnMvbGliZmZpL2Z1enpfZmZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0YTY2ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJmZmkvZnV6el9mZmkuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDIwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBGVVpaSU5HX09SUEhBTlNfTElCRkZJX0ZVWlpfRkZJX0hfCisjZGVmaW5lIEZVWlpJTkdfT1JQSEFOU19MSUJGRklfRlVaWl9GRklfSF8KKworI2luY2x1ZGUgPGZ1enplci9GdXp6ZWREYXRhUHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxjc3RkYXJnPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIF9fVU5VU0VEX18gX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjZW5kaWYKKworI2RlZmluZSBNQVhfTlVNX0FSR1MgMTI4CisjZGVmaW5lIE1BWF9OVU1fRUxFTUVOVFMgMTYKKyNkZWZpbmUgTUFYX1JFU1BfU0laRSA0MDk2CisjZGVmaW5lIFdPUkRTSVpFX0JZVEVTIChfX1dPUkRTSVpFIC8gOCkKKworLy8gVE9ETyhtaWNoYWVsLmVuc2luZ0BsZXZpYXRoYW5zZWN1cml0eS5jb20pOgorLy8gICAgIElkZWFsbHksIHdlIHNob3VsZCBhZGQvcmVtb3ZlIHN1cHBvcnRlZCB0eXBlcyBiYXNlZCBvbgorLy8gICAgIGFyY2gtc3BlY2lmaWMgI2RlZmluZXMgKGxpc3RlZCBpbiBmZmlfZ2VuLmgpCisjZGVmaW5lIE5VTV9UWVBFUyAyMQorZmZpX3R5cGUqIGZmaV90eXBlc1tdID0geworICAgICZmZmlfdHlwZV91Y2hhciwKKyAgICAmZmZpX3R5cGVfc2NoYXIsCisgICAgJmZmaV90eXBlX3VzaG9ydCwKKyAgICAmZmZpX3R5cGVfc3Nob3J0LAorICAgICZmZmlfdHlwZV91aW50LAorICAgICZmZmlfdHlwZV9zaW50LAorICAgICZmZmlfdHlwZV91bG9uZywKKyAgICAmZmZpX3R5cGVfc2xvbmcsCisgICAgJmZmaV90eXBlX3ZvaWQsCisgICAgJmZmaV90eXBlX3VpbnQ4LAorICAgICZmZmlfdHlwZV9zaW50OCwKKyAgICAmZmZpX3R5cGVfdWludDE2LAorICAgICZmZmlfdHlwZV9zaW50MTYsCisgICAgJmZmaV90eXBlX3VpbnQzMiwKKyAgICAmZmZpX3R5cGVfc2ludDMyLAorICAgICZmZmlfdHlwZV91aW50NjQsCisgICAgJmZmaV90eXBlX3NpbnQ2NCwKKyAgICAmZmZpX3R5cGVfZmxvYXQsCisgICAgJmZmaV90eXBlX2RvdWJsZSwKKyAgICAmZmZpX3R5cGVfcG9pbnRlciwKKyAgICAmZmZpX3R5cGVfbG9uZ2RvdWJsZSwKKyAgICAvLyBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBub3QgYXZhaWxhYmxlIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcworICAgIC8vICZmZmlfdHlwZV9jb21wbGV4X2Zsb2F0LAorICAgIC8vICZmZmlfdHlwZV9jb21wbGV4X2RvdWJsZSwKKyAgICAvLyAmZmZpX3R5cGVfY29tcGxleF9sb25nZG91YmxlLAorICAgIC8vIC8vIG51bGxwdHJzIGFyZSB1c2VkIHRvIHRlcm1pbmF0ZSB0aGUgYXJyYXkuIEhhbmRsZSB0aGVtIG1hbnVhbGx5LgorICAgIC8vIG51bGxwdHIKK307CisKKy8vIFN0b3JlIHZlY3RvcnMgb2YgYWxsb2NhdGVkIG9iamVjdHMKK3N0ZDo6dmVjdG9yPGZmaV90eXBlKj4gZmZpX2FsbG9jX3ZlY3RvcjsKK3N0ZDo6dmVjdG9yPHZvaWQqPiByYXdfYWxsb2NfdmVjdG9yOworCisKKy8vIEtlZXAgYSBib29sZWFuIHRvIHRyYWNrIGlmIHRoZSBhcmdzIGhhdmUgYSBzdHJ1Y3QsCisvLyB3aGljaCB3aWxsIHRyaWdnZXIgYW4gYWJvcnQgb24gamF2YSBjYWxscworYm9vbCBhcmdzX2NvbnRhaW5fc3RydWN0ID0gZmFsc2U7CisKKy8vIFN0b3JlIHRoZSBjdXJyZW50IEFCSSBhcyBhIGdsb2JhbAorZmZpX2FiaSBhYmkgPSBGRklfREVGQVVMVF9BQkk7CisKKy8vIERlZmluZSB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGZmaV9hYmkgdmFsdWVzCisvLyBOT1RFOiBPbmx5IHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGFyZSBhcm0vYXJtNjQsIHg4Nl82NAorLy8gYXJtCisjaWYgZGVmaW5lZChBUk0pCisjZGVmaW5lIE1BWF9BQkkgNAorLy8geDg2XzY0CisjZWxpZiBkZWZpbmVkKFg4Nl82NCkgfHwgKGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChYODZfREFSV0lOKSkKKyNkZWZpbmUgTUFYX0FCSSA3CisjZWxzZQorI2RlZmluZSBNQVhfQUJJIDAgIC8vIElmIHdlIGhpdCB0aGlzIGNhc2UsIGRvIE5PVCBmdXp6IHRoZSBhYmkgdmFsdWUuCisjZW5kaWYKKworLy8gUmV0cmlldmUgdGhlIHRvdGFsIHNpemUgKGluIGJ5dGVzKSBvZiBhIGZmaV90eXBlLgorLy8gVXNlZnVsIGZvciBjdXN0b20gc3RydWN0cworc2l6ZV90IGdldFRvdGFsU2l6ZShmZmlfdHlwZSopOworCisvLyBSZXRyaWV2ZSBhIHJhbmRvbSB0eXBlIGZyb20gdGhlIGZmaV90eXBlcyBhcnJheQorZmZpX3R5cGUqIGdldFJhbmRvbVR5cGUoRnV6emVkRGF0YVByb3ZpZGVyKiwgYm9vbCk7CisKKy8vIEdlbmVyYXRlcyBhIGN1c3RvbSBzdHJ1Y3QsIGluIGZmaV90eXBlIGZvcm1hdAorZmZpX3R5cGUqIGdlbmVyYXRlQ3VzdG9tVHlwZShGdXp6ZWREYXRhUHJvdmlkZXIqKTsKKworLy8gQ29waWVzIGJ1ZmZlciBkYXRhIGludG8gYSBidWZmZXIgZGVzY3JpYmVkIGJ5IHRoZSBwcm92aWRlZCBmZmlfdHlwZQorLy8gKG1heSBiZSBhIHN0cnVjdCBvciBoYXZlIHN1Ym9iamVjdHMpCitzaXplX3QgY29weUFyZyhmZmlfdHlwZSosIHZvaWQqLCBGdXp6ZWREYXRhUHJvdmlkZXIqKTsKKworLy8gQnVpbGRzIG91dCB0aGUgYXJyYXlzIG9mIGZmaV90eXBlcyBhbmQgYXJndW1lbnRzIHRvIGRlZmluZSBhIGZ1bmN0aW9uJ3MKKy8vIHBhcmFtZXRlcnMuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLgorYm9vbCBidWlsZEFyZ0FycmF5cyhmZmlfdHlwZSpbXSwgdm9pZCpbXSwgc2l6ZV90LCBGdXp6ZWREYXRhUHJvdmlkZXIqKTsKKworLy8gQWxsb2NhdGVzIHRoZSBuZWNlc3Nhcnkgc3BhY2UgZm9yIGEgbmV3IGFyZ3VtZW50IGJ1ZmZlciBmb3IgZ2l2ZW4gZmZpX3R5cGUKKy8vIEFmdGVyIGFsbG9jYXRpb24sIGNhbGxzIGNvcHlBcmcoKSB0byBmaWxsIGJ1ZmZlciB3aXRoIGRhdGEKK3ZvaWQqIGdlbkFyZyhmZmlfdHlwZSosIEZ1enplZERhdGFQcm92aWRlciopOworCisvLyBGdW5jdGlvbnMgdG8gcGVyZm9ybSBvdXIgbGlicmFyeSBjYWxscwordm9pZCBydW5NYWluRnVuY3Rpb25zKGZmaV9jaWYmLCB2b2lkKiwgdm9pZCoqLCBGdXp6ZWREYXRhUHJvdmlkZXIqKTsKK3ZvaWQgcnVuUmF3RnVuY3Rpb25zKGZmaV9jaWYmLCB2b2lkKiwgdm9pZCoqLCBGdXp6ZWREYXRhUHJvdmlkZXIqKTsKK3ZvaWQgcnVuSmF2YUZ1bmN0aW9ucyhmZmlfY2lmJiwgdm9pZCosIHZvaWQqKiwgRnV6emVkRGF0YVByb3ZpZGVyKik7CisKKy8vIEZyZWUgYW55IGN1c3RvbSBzdHJ1Y3QgZmZpX3R5cGUgb2JqZWN0cworLy8gU2FmZSB0byBjYWxsIG9uIGRlZmF1bHQgdHlwZXMuCit2b2lkIGZyZWVGRkkoZmZpX3R5cGUqKTsKKworLy8gRnJlZXMgYWxsIGVsZW1lbnRzIHRoYXQgdGhlIGZ1enplciBoYXMgYWxsb2NhdGVkCit2b2lkIGZyZWVBbGwoKTsKKworI2VuZGlmICAvLyBGVVpaSU5HX09SUEhBTlNfTElCRkZJX0ZVWlpfRkZJX0hfCmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9BbmRyb2lkLmJwIGIvZnV6emluZy9vcnBoYW5zL2xpYnNraWEvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWMzNTNmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL2xpYnNraWEvQW5kcm9pZC5icApAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCit9CisKK2NjX2Z1enogeworICBuYW1lOiAibGlic2tpYV9pbWFnZV9wcm9jZXNzb3JfZnV6emVyIiwKKworICBzcmNzOiBbCisgICAgImxpYnNraWFfaW1hZ2VfcHJvY2Vzc29yX2Z1enplci5jcHAiLAorICBdLAorCisgIHNoYXJlZF9saWJzOiBbCisgICAgICAibGliZG5nX3NkayIsCisgICAgICAibGliZnQyIiwKKyAgICAgICJsaWJqcGVnIiwKKyAgICAgICJsaWJsb2ciLAorICAgICAgImxpYnBpZXgiLAorICAgICAgImxpYnBuZyIsCisgIF0sCisgIHN0YXRpY19saWJzOiBbCisgICAgICAibGlic2tpYSIsCisgICAgICAibGliYXJlY3QiLAorICAgICAgImxpYnNmbnRseSIsCisgICAgICAibGlid2VicC1kZWNvZGUiLAorICAgICAgImxpYndlYnAtZW5jb2RlIiwKKyAgXSwKKworICB0YXJnZXQ6IHsKKyAgICBhbmRyb2lkOiB7CisgICAgICBzaGFyZWRfbGliczogWworICAgICAgICAgICJsaWJ6IiwKKyAgICAgICAgICAibGliZXhwYXQiLAorICAgICAgICAgICJsaWJhbmRyb2lkaWN1IiwKKyAgICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgICAibGliRUdMIiwKKyAgICAgICAgICAibGliR0xFU3YyIiwKKyAgICAgICAgICAibGliaGVpZiIsCisgICAgICAgICAgImxpYnZ1bGthbiIsCisgICAgICAgICAgImxpYm5hdGl2ZXdpbmRvdyIsCisgICAgICBdLAorICAgICAgZXhwb3J0X3NoYXJlZF9saWJfaGVhZGVyczogWworICAgICAgICAgICJsaWJ2dWxrYW4iLAorICAgICAgXSwKKyAgICB9LAorICAgIGhvc3Q6IHsKKyAgICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJjdXRpbHMiLAorICAgICAgXSwKKyAgICB9LAorICB9LAorCisgIGNvcnB1czogWyJjb3JwdXMvKiJdLAorICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKK30KZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJza2lhL2NvcnB1cy90ZXN0MS5ibXAgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDEuYm1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZTljOTEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDEuYm1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJza2lhL2NvcnB1cy90ZXN0Mi5naWYgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJza2lhL2NvcnB1cy90ZXN0My5oZWljIGIvZnV6emluZy9vcnBoYW5zL2xpYnNraWEvY29ycHVzL3Rlc3QzLmhlaWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2YzI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9saWJza2lhL2NvcnB1cy90ZXN0My5oZWljCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJza2lhL2NvcnB1cy90ZXN0NC50aWYgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDQudGlmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMzNiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDQudGlmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJza2lhL2NvcnB1cy90ZXN0NS5qcGcgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDUuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMTE2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDUuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJza2lhL2NvcnB1cy90ZXN0Ni5wbmcgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTQ5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9jb3JwdXMvdGVzdDYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9saWJza2lhL2xpYnNraWFfaW1hZ2VfcHJvY2Vzc29yX2Z1enplci5jcHAgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9saWJza2lhX2ltYWdlX3Byb2Nlc3Nvcl9mdXp6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmM2YyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvbGlic2tpYS9saWJza2lhX2ltYWdlX3Byb2Nlc3Nvcl9mdXp6ZXIuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBBdXRob3I6IE1hdGV1c3ogSnVyY3p5ayAobWp1cmN6eWtAZ29vZ2xlLmNvbSkKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLworCisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgIlNrQW5kcm9pZENvZGVjLmgiCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa0NvZGVjLmgiCisjaW5jbHVkZSAiU2tTdHJpbmcuaCIKKworI2luY2x1ZGUgImZ1enplci9GdXp6ZWREYXRhUHJvdmlkZXIuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCitzdGF0aWMgaW50IGdldEFuZHJvaWRQaXhlbHMoc3RkOjpzdHJpbmcmIGNvbnRlbnRzLCBib29sIHJlcXVlc3RQcmVtdWwpIHsKKyAgLy8gR2VuZXJhdGUgc3RyZWFtIGNvbnRlbnRzCisgIHN0ZDo6dW5pcXVlX3B0cjxTa01lbW9yeVN0cmVhbT4gc3RyZWFtID0gU2tNZW1vcnlTdHJlYW06Ok1ha2VEaXJlY3QoY29udGVudHMuZGF0YSgpLCBjb250ZW50cy5zaXplKCkpOworICBpZiAoIXN0cmVhbSkgeworICAgIHJldHVybiAwOworICB9CisKKyAgc3RkOjp1bmlxdWVfcHRyPFNrQ29kZWM+IGMgPSBTa0NvZGVjOjpNYWtlRnJvbVN0cmVhbShzdGQ6Om1vdmUoc3RyZWFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKTsKKyAgaWYgKCFjKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBzdGQ6OnVuaXF1ZV9wdHI8U2tBbmRyb2lkQ29kZWM+IGNvZGVjOworICBjb2RlYyA9IFNrQW5kcm9pZENvZGVjOjpNYWtlRnJvbUNvZGVjKHN0ZDo6bW92ZShjKSk7CisgIGlmICghY29kZWMpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIFNrSW1hZ2VJbmZvIGluZm8gPSBjb2RlYy0+Z2V0SW5mbygpOworICBjb25zdCBpbnQgd2lkdGggPSBpbmZvLndpZHRoKCk7CisgIGNvbnN0IGludCBoZWlnaHQgPSBpbmZvLmhlaWdodCgpOworCisgIFNrQ29sb3JUeXBlIGRlY29kZUNvbG9yVHlwZSA9IGtOMzJfU2tDb2xvclR5cGU7CisgIFNrQWxwaGFUeXBlIGFscGhhVHlwZSA9CisgICAgICBjb2RlYy0+Y29tcHV0ZU91dHB1dEFscGhhVHlwZShyZXF1ZXN0UHJlbXVsKTsKKyAgY29uc3QgU2tJbWFnZUluZm8gZGVjb2RlSW5mbyA9CisgICAgICBTa0ltYWdlSW5mbzo6TWFrZSh3aWR0aCwgaGVpZ2h0LCBkZWNvZGVDb2xvclR5cGUsIGFscGhhVHlwZSk7CisKKyAgU2tJbWFnZUluZm8gYml0bWFwSW5mbyA9IGRlY29kZUluZm87CisgIFNrQml0bWFwIGRlY29kaW5nQml0bWFwOworICBpZiAoIWRlY29kaW5nQml0bWFwLnRyeUFsbG9jUGl4ZWxzKGJpdG1hcEluZm8pKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBjb2RlYy0+Z2V0QW5kcm9pZFBpeGVscygKKyAgICAgIGRlY29kZUluZm8sIGRlY29kaW5nQml0bWFwLmdldFBpeGVscygpLCBkZWNvZGluZ0JpdG1hcC5yb3dCeXRlcygpKTsKKyAgcmV0dXJuIDA7Cit9CisKK2V4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKHNpemUgPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgc3RkOjpzdHJpbmcgc2RhdGExKGRhdGEsIHNpemUpOworICBnZXRBbmRyb2lkUGl4ZWxzKHNkYXRhMSwgdHJ1ZSk7CisgIHN0ZDo6c3RyaW5nIHNkYXRhMihkYXRhLCBzaXplKTsKKyAgZ2V0QW5kcm9pZFBpeGVscyhzZGF0YTIsIGZhbHNlKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvcHBwZC9BbmRyb2lkLmJwIGIvZnV6emluZy9vcnBoYW5zL3BwcGQvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmI0ZGMwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL3BwcGQvQW5kcm9pZC5icApAQCAtMCwwICsxLDM1IEBACitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCit9CisKK2NjX2Z1enogeworICAgIG5hbWU6ICJlYXBfcHBwZF9mdXp6IiwKKworICAgIHNyY3M6IFsKKyAgICAgICAgImVhcF9mdXp6LnByb3RvIiwKKyAgICAgICAgImVhcF9mdXp6LmNjIiwKKyAgICAgICAgImVhcF9mdXp6X0Nwcm94eS5jIiwKKyAgICBdLAorCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImxpYnByb3RvYnVmLW11dGF0b3IiLAorICAgICAgICAibGlicHBwZCIsCisgICAgXSwKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGlicHJvdG9idWYtY3BwLWZ1bGwiLAorICAgICAgICAibGliZGwiLAorICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJjcnlwdG8iLAorICAgIF0sCisKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciIsCisgICAgXSwKKworICAgIGxkZmxhZ3M6IFsiLXJkeW5hbWljIl0sCisgICAgcmVxdWlyZWQ6IFsKKyAgICAgICAgInBwcG9sMnRwLWFuZHJvaWQiLAorICAgICAgICAicHBwb3BwdHAtYW5kcm9pZCIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9wcHBkL2VhcF9mdXp6LmNjIGIvZnV6emluZy9vcnBoYW5zL3BwcGQvZWFwX2Z1enouY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3MmUxNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9wcHBkL2VhcF9mdXp6LmNjCkBAIC0wLDAgKzEsMjE1IEBACisjaW5jbHVkZSA8c3RkaW50Lmg+CitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJlYXBfZnV6el9DcHJveHkuaCIKK30KKworI2luY2x1ZGUgPHNyYy9saWJmdXp6ZXIvbGliZnV6emVyX21hY3JvLmg+CisjaW5jbHVkZSAiZWFwX2Z1enoucGIuaCIKKworI2RlZmluZSBTX01BTExPQyh2YXIsIHNpemUpIFwKK2RvIHsgXAorIGlmICgodmFyID0gKHVpbnQ4X3QgKiltYWxsb2Moc2l6ZSkpID09IE5VTEwpIHsgXAorICAgICByZXR1cm47IFwKKyB9IFwKK30gd2hpbGUoMCkKKwordm9pZCB3cml0ZV9oZWFkZXIodWludDhfdCAqcGFja2V0LCB1aW50MTZfdCBkYXRhX3NpemUsIHVpbnQ4X3QgdHlwZSkKK3sKKyAgICBkYXRhX3NpemUgKz0gRUFQX0hFQURFUkxFTjsKKyAgICAvL3RoZSBwYWNrZXQgdHlwZQorICAgICoocGFja2V0KSsrID0gdHlwZSYweGZmOworICAgIC8vaWQKKyAgICAqKHBhY2tldCkrKyA9IDB4MDsKKyAgICAvL3RoZSBsZW5ndGggYXMgYmlnIGVuZGlhbiBzaG9ydAorICAgICoocGFja2V0KSsrID0gKChkYXRhX3NpemUgPj4gOCkmMHhmZik7CisgICAgKihwYWNrZXQpKysgPSBkYXRhX3NpemUmMHhmZjsKK30KKworREVGSU5FX0JJTkFSWV9QUk9UT19GVVpaRVIoY29uc3QgZWFwX2Z1eno6OnByb3RvOjpQYWNrZXRTZXQgJnBhY2tldHMpeworICAgIGluaXQoKTsKKworICAgIGZvcihjb25zdCBlYXBfZnV6ejo6cHJvdG86OlBhY2tldCYgcGFja2V0OiBwYWNrZXRzLnBhY2tldHMoKSl7CisgICAgICAgdWludDhfdCAqZnV6el9wYWNrZXQgPSBOVUxMOworICAgICAgIHNpemVfdCBwYWNrZXRfbGVuID0gMDsKKyAgICAgICBzdGQ6OnN0cmluZyBkYXRhID0gIiI7CisgICAgICAgdWludDhfdCBwYWNrZXRfdHlwZSA9IC0xOworICAgICAgIHN3aXRjaChwYWNrZXQuUGFja2V0VHlwZV9jYXNlKCkpeworICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6UGFja2V0OjprRWFwUmVxdWVzdDogeworICAgICAgICAgICAgICAgIHBhY2tldF90eXBlID0gRUFQX1JFUVVFU1Q7CisgICAgICAgICAgICAgICAgdWludDhfdCBlYXBfcmVxdWVzdF90eXBlID0gLTE7CisgICAgICAgICAgICAgICAgYXV0byBlYXBfcmVxdWVzdCA9IHBhY2tldC5lYXBfcmVxdWVzdCgpOworICAgICAgICAgICAgICAgIHN3aXRjaChlYXBfcmVxdWVzdC5FYXBSZXF1ZXN0VHlwZV9jYXNlKCkpeworICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwUmVxdWVzdDo6a0lkZW50aXR5OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBlYXBfcmVxdWVzdF90eXBlID0gRUFQVF9JREVOVElUWTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBlYXBfcmVxdWVzdC5pZGVudGl0eSgpLmRhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNfTUFMTE9DKGZ1enpfcGFja2V0LCBkYXRhLnNpemUoKStFQVBfSEVBREVSTEVOKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OkVhcFJlcXVlc3Q6OmtOb3RpZmljYXRpb246IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhcF9yZXF1ZXN0X3R5cGUgPSBFQVBUX05PVElGSUNBVElPTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBlYXBfcmVxdWVzdC5ub3RpZmljYXRpb24oKS5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTX01BTExPQyhmdXp6X3BhY2tldCwgZGF0YS5zaXplKCkrRUFQX0hFQURFUkxFTisxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgZWFwX2Z1eno6OnByb3RvOjpFYXBSZXF1ZXN0OjprTWQ1Q2hhcDogeworICAgICAgICAgICAgICAgICAgICAgICAgZWFwX3JlcXVlc3RfdHlwZSA9IEVBUFRfTUQ1Q0hBUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBlYXBfcmVxdWVzdC5tZDVjaGFwKCkuZGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgU19NQUxMT0MoZnV6el9wYWNrZXQsIGRhdGEuc2l6ZSgpK0VBUF9IRUFERVJMRU4rMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwUmVxdWVzdDo6a1NycDogeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byByZXF1ZXN0X3NycCA9IGVhcF9yZXF1ZXN0LnNycCgpOworICAgICAgICAgICAgICAgICAgICAgICAgZWFwX3JlcXVlc3RfdHlwZSA9IEVBUFRfU1JQOworICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzcnBfdHlwZSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHJlcXVlc3Rfc3JwLkVzcE1lc3NhZ2VfY2FzZSgpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwdFJlcXVlc3RTUlA6OmtTcnBDaGFsbGVuZ2U6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVxdWVzdF9zcnAuc3JwX2NoYWxsZW5nZSgpLmRhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JwX3R5cGUgPSBFQVBTUlBfQ0hBTExFTkdFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OkVhcHRSZXF1ZXN0U1JQOjprU3JwVmFsaWRhdG9yOnsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlcXVlc3Rfc3JwLnNycF92YWxpZGF0b3IoKS5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNycF90eXBlID0gRUFQU1JQX1NWQUxJREFUT1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwdFJlcXVlc3RTUlA6OmtTcnBLZXk6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVxdWVzdF9zcnAuc3JwX2tleSgpLmRhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JwX3R5cGUgPSBFQVBTUlBfU0tFWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZWFwX2Z1eno6OnByb3RvOjpFYXB0UmVxdWVzdFNSUDo6a1NycEx3cmVDaGFsbGVuZ2U6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVxdWVzdF9zcnAuc3JwX2x3cmVfY2hhbGxlbmdlKCkuZGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnBfdHlwZSA9IEVBUFNSUF9MV1JFQ0hBTExFTkdFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OkVhcHRSZXF1ZXN0U1JQOjpFU1BNRVNTQUdFX05PVF9TRVQ6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBTX01BTExPQyhmdXp6X3BhY2tldCwgZGF0YS5zaXplKCkrRUFQX0hFQURFUkxFTisyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICooZnV6el9wYWNrZXQrRUFQX0hFQURFUkxFTisxKSA9IHNycF90eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X2xlbisrOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OkVhcFJlcXVlc3Q6OkVBUFJFUVVFU1RUWVBFX05PVF9TRVQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqKGZ1enpfcGFja2V0K0VBUF9IRUFERVJMRU4pID0gZWFwX3JlcXVlc3RfdHlwZTsKKyAgICAgICAgICAgICAgICArK3BhY2tldF9sZW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIH0KKworICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6UGFja2V0OjprRWFwUmVzcG9uc2U6IHsKKyAgICAgICAgICAgICAgICBwYWNrZXRfdHlwZSA9IEVBUF9SRVNQT05TRTsKKyAgICAgICAgICAgICAgICBhdXRvIGVhcF9yZXNwb25zZSA9IHBhY2tldC5lYXBfcmVzcG9uc2UoKTsKKyAgICAgICAgICAgICAgICB1aW50OF90IGVhcF9yZXNwb25zZV90eXBlID0gLTE7CisgICAgICAgICAgICAgICAgc3dpdGNoKGVhcF9yZXNwb25zZS5FYXBSZXNwb25zZVR5cGVfY2FzZSgpKXsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OkVhcFJlc3BvbnNlOjprSWRlbnRpdHk6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhcF9yZXNwb25zZV90eXBlID0gRUFQVF9JREVOVElUWTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBlYXBfcmVzcG9uc2UuaWRlbnRpdHkoKS5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTX01BTExPQyhmdXp6X3BhY2tldCwgZGF0YS5zaXplKCkrRUFQX0hFQURFUkxFTisxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgZWFwX2Z1eno6OnByb3RvOjpFYXBSZXNwb25zZTo6a05vdGlmaWNhdGlvbjogeworICAgICAgICAgICAgICAgICAgICAgICAgZWFwX3Jlc3BvbnNlX3R5cGUgPSBFQVBUX05PVElGSUNBVElPTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBlYXBfcmVzcG9uc2Uubm90aWZpY2F0aW9uKCkuZGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgU19NQUxMT0MoZnV6el9wYWNrZXQsIGRhdGEuc2l6ZSgpK0VBUF9IRUFERVJMRU4rMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwUmVzcG9uc2U6OmtNZDVDaGFwOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBlYXBfcmVzcG9uc2VfdHlwZSA9IEVBUFRfTUQ1Q0hBUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBlYXBfcmVzcG9uc2UubWQ1Y2hhcCgpLmRhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNfTUFMTE9DKGZ1enpfcGFja2V0LCBkYXRhLnNpemUoKStFQVBfSEVBREVSTEVOKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OkVhcFJlc3BvbnNlOjprTmFrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBlYXBfcmVzcG9uc2VfdHlwZSA9IEVBUFRfTkFLOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byByZXNwb25zZV9uYWsgPSBlYXBfcmVzcG9uc2UubmFrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG5ha190eXBlID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gocmVzcG9uc2VfbmFrLkVhcHRSZXNwb25zZU5BS1R5cGVfY2FzZSgpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwdFJlc3BvbnNlTkFLOjprU3JwOnsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFrX3R5cGUgPSBFQVBUX1NSUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OkVhcHRSZXNwb25zZU5BSzo6a01kNUNoYXA6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYWtfdHlwZSA9IEVBUFRfTUQ1Q0hBUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OkVhcHRSZXNwb25zZU5BSzo6RUFQVFJFU1BPTlNFTkFLVFlQRV9OT1RfU0VUOnsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFNfTUFMTE9DKGZ1enpfcGFja2V0LCBkYXRhLnNpemUoKStFQVBfSEVBREVSTEVOKzIpOworICAgICAgICAgICAgICAgICAgICAgICAgKihmdXp6X3BhY2tldCtFQVBfSEVBREVSTEVOKzEpID0gbmFrX3R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfbGVuKys7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwUmVzcG9uc2U6OmtTcnA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzcG9uc2Vfc3JwID0gZWFwX3Jlc3BvbnNlLnNycCgpOworICAgICAgICAgICAgICAgICAgICAgICAgZWFwX3Jlc3BvbnNlX3R5cGUgPSBFQVBUX1NSUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc3JwX3R5cGUgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChyZXNwb25zZV9zcnAuRXNwTWVzc2FnZV9jYXNlKCkpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZWFwX2Z1eno6OnByb3RvOjpFYXB0UmVzcG9uc2VTUlA6OmtTcnBDaGFsbGVuZ2U6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2Vfc3JwLnNycF9jaGFsbGVuZ2UoKS5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNycF90eXBlID0gRUFQU1JQX0xXUkVDSEFMTEVOR0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwdFJlc3BvbnNlU1JQOjprU3JwQ3ZhbGlkYXRvcjp7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZV9zcnAuc3JwX2N2YWxpZGF0b3IoKS5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNycF90eXBlID0gRUFQU1JQX0NWQUxJREFUT1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwdFJlc3BvbnNlU1JQOjprU3JwQ2tleTp7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZV9zcnAuc3JwX2NrZXkoKS5kYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNycF90eXBlID0gRUFQU1JQX0NLRVk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwdFJlc3BvbnNlU1JQOjprU3JwQWNrOnsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlX3NycC5zcnBfYWNrKCkuZGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnBfdHlwZSA9IEVBUFNSUF9BQ0s7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6RWFwdFJlc3BvbnNlU1JQOjpFU1BNRVNTQUdFX05PVF9TRVQ6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBTX01BTExPQyhmdXp6X3BhY2tldCwgZGF0YS5zaXplKCkrRUFQX0hFQURFUkxFTisyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICooZnV6el9wYWNrZXQrRUFQX0hFQURFUkxFTisxKSA9IHNycF90eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X2xlbisrOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OkVhcFJlc3BvbnNlOjpFQVBSRVNQT05TRVRZUEVfTk9UX1NFVDogeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICooZnV6el9wYWNrZXQrRUFQX0hFQURFUkxFTikgPSBlYXBfcmVzcG9uc2VfdHlwZTsKKyAgICAgICAgICAgICAgICArK3BhY2tldF9sZW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgY2FzZSBlYXBfZnV6ejo6cHJvdG86OlBhY2tldDo6a0VhcFN1Y2Nlc3M6IHsKKyAgICAgICAgICAgICAgICBwYWNrZXRfdHlwZSA9IEVBUF9TVUNDRVNTOworICAgICAgICAgICAgICAgIGRhdGEgPSBwYWNrZXQuZWFwX3N1Y2Nlc3MoKS5kYXRhKCk7CisgICAgICAgICAgICAgICAgU19NQUxMT0MoZnV6el9wYWNrZXQsIGRhdGEuc2l6ZSgpK0VBUF9IRUFERVJMRU4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICB9CisgICAgICAgICAgIGNhc2UgZWFwX2Z1eno6OnByb3RvOjpQYWNrZXQ6OmtFYXBGYWlsdXJlOiB7CisgICAgICAgICAgICAgICAgcGFja2V0X3R5cGUgPSBFQVBfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICBkYXRhID0gcGFja2V0LmVhcF9mYWlsdXJlKCkuZGF0YSgpOworICAgICAgICAgICAgICAgIFNfTUFMTE9DKGZ1enpfcGFja2V0LCBkYXRhLnNpemUoKStFQVBfSEVBREVSTEVOKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgfQorICAgICAgICAgICBjYXNlIGVhcF9mdXp6Ojpwcm90bzo6UGFja2V0OjpQQUNLRVRUWVBFX05PVF9TRVQ6IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIHdyaXRlX2hlYWRlcihmdXp6X3BhY2tldCwgZGF0YS5zaXplKCkrcGFja2V0X2xlbiwgcGFja2V0X3R5cGUpOworICAgICAgIG1lbWNweShmdXp6X3BhY2tldCtFQVBfSEVBREVSTEVOK3BhY2tldF9sZW4sIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgcHJveHlfcGFja2V0KGZ1enpfcGFja2V0LCBkYXRhLnNpemUoKStFQVBfSEVBREVSTEVOK3BhY2tldF9sZW4pOworICAgICAgIGZyZWUoZnV6el9wYWNrZXQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9wcHBkL2VhcF9mdXp6LnByb3RvIGIvZnV6emluZy9vcnBoYW5zL3BwcGQvZWFwX2Z1enoucHJvdG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0MTIxNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9wcHBkL2VhcF9mdXp6LnByb3RvCkBAIC0wLDAgKzEsMTMzIEBACitzeW50YXggPSAicHJvdG8yIjsKK3BhY2thZ2UgZWFwX2Z1enoucHJvdG87CisKK21lc3NhZ2UgUGFja2V0U2V0eworICAgIHJlcGVhdGVkIFBhY2tldCBwYWNrZXRzID0gMTsKK30KKworbWVzc2FnZSBQYWNrZXR7CisgICAgb25lb2YgUGFja2V0VHlwZSB7CisgICAgICAgIEVhcFJlcXVlc3QgZWFwX3JlcXVlc3QgPSAxOworICAgICAgICBFYXBSZXNwb25zZSBlYXBfcmVzcG9uc2UgPSAyOworICAgICAgICBFYXBTdWNjZXNzIGVhcF9zdWNjZXNzID0gMzsKKyAgICAgICAgRWFwRmFpbHVyZSBlYXBfZmFpbHVyZSA9IDQ7CisgICAgfQorfQorCittZXNzYWdlIEVhcFJlcXVlc3R7CisgICAgb25lb2YgRWFwUmVxdWVzdFR5cGV7CisgICAgICAgIEVhcHRSZXF1ZXN0SWRlbnRpdHkgaWRlbnRpdHkgPSAxOworICAgICAgICBFc3B0UmVxdWVzdE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSAyOworICAgICAgICBFYXB0UmVxdWVzdE1ENUNoYXAgbWQ1Y2hhcCA9IDM7CisgICAgICAgIEVhcHRSZXF1ZXN0U1JQIHNycCA9IDQ7CisgICAgfQorCit9CisKK21lc3NhZ2UgRWFwdFJlcXVlc3RJZGVudGl0eXsKKyAgICByZXF1aXJlZCBieXRlcyBkYXRhID0gMTsKK30KKworbWVzc2FnZSBFc3B0UmVxdWVzdE5vdGlmaWNhdGlvbnsKKyAgICByZXF1aXJlZCBieXRlcyBkYXRhID0gMTsKK30KKworbWVzc2FnZSBFYXB0UmVxdWVzdE1ENUNoYXB7CisgICAgcmVxdWlyZWQgYnl0ZXMgZGF0YSA9IDI7Cit9CittZXNzYWdlIEVhcHRSZXF1ZXN0U1JQeworICAgIG9uZW9mIEVzcE1lc3NhZ2UgeworICAgICAgICBFYXBSZXF1ZXN0U1JQQ2hhbGxlbmdlIHNycF9jaGFsbGVuZ2UgPSAxOworICAgICAgICBFYXBSZXF1ZXN0U1JQS2V5IHNycF9rZXkgPSAyOworICAgICAgICBFYXBSZXF1ZXN0U1JQVmFsaWRhdG9yIHNycF92YWxpZGF0b3IgPSAzOworICAgICAgICBFYXBSZXF1ZXN0U1JQTFdSRUNoYWxsZW5nZSBzcnBfbHdyZV9jaGFsbGVuZ2UgPSA0OworICAgIH0KK30KKworbWVzc2FnZSBFYXBSZXF1ZXN0U1JQQ2hhbGxlbmdleworICAgIHJlcXVpcmVkIGJ5dGVzIGRhdGEgPSAxOworfQorCittZXNzYWdlIEVhcFJlcXVlc3RTUlBLZXl7CisgICAgcmVxdWlyZWQgYnl0ZXMgZGF0YSA9IDE7Cit9CisKK21lc3NhZ2UgRWFwUmVxdWVzdFNSUFZhbGlkYXRvciB7CisgICAgcmVxdWlyZWQgYnl0ZXMgZGF0YSA9IDE7Cit9CisKK21lc3NhZ2UgRWFwUmVxdWVzdFNSUExXUkVDaGFsbGVuZ2V7CisgICByZXF1aXJlZCBieXRlcyBkYXRhID0gMTsKK30KKworbWVzc2FnZSBFYXBSZXNwb25zZXsKKyAgICBvbmVvZiBFYXBSZXNwb25zZVR5cGV7CisgICAgICAgIEVhcHRSZXNwb25zZUlkZW50aXR5IGlkZW50aXR5ID0gMTsKKyAgICAgICAgRXNwdFJlc3BvbnNlTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IDI7CisgICAgICAgIEVhcHRSZXNwb25zZU5BSyBuYWsgPSAzOworICAgICAgICBFYXB0UmVzcG9uc2VNRDVDaGFwIG1kNWNoYXAgPSA0OworICAgICAgICBFYXB0UmVzcG9uc2VTUlAgc3JwID0gNTsKKyAgICB9Cit9CisKK21lc3NhZ2UgRWFwdFJlc3BvbnNlSWRlbnRpdHl7CisgICAgcmVxdWlyZWQgYnl0ZXMgZGF0YSA9IDE7Cit9CisKK21lc3NhZ2UgRXNwdFJlc3BvbnNlTm90aWZpY2F0aW9ueworICAgIHJlcXVpcmVkIGJ5dGVzIGRhdGEgPSAxOworfQorCittZXNzYWdlIEVhcHRSZXNwb25zZU5BS3sKKyAgICBvbmVvZiBFYXB0UmVzcG9uc2VOQUtUeXBleworICAgICAgICBFYXB0UmVzcG9uc2VOQUtTUlAgc3JwID0gMTsKKyAgICAgICAgRWFwdFJlc3BvbnNlTkFLTUQ1Q2hhcCBtZDVfY2hhcCA9IDI7CisgICAgfQorfQorCisKK21lc3NhZ2UgRWFwdFJlc3BvbnNlTkFLU1JQeworICAgIHJlcXVpcmVkIGJ5dGVzIGRhdGEgPSAxOworfQorCittZXNzYWdlIEVhcHRSZXNwb25zZU5BS01ENUNoYXAgeworICAgIHJlcXVpcmVkIGJ5dGVzIGRhdGEgPSAxOworfQorCittZXNzYWdlIEVhcHRSZXNwb25zZU1ENUNoYXAgeworICAgIHJlcXVpcmVkIGJ5dGVzIGRhdGEgPSAxOworfQorCittZXNzYWdlIEVhcHRSZXNwb25zZVNSUHsKKyAgICBvbmVvZiBFc3BNZXNzYWdlIHsKKyAgICAgICAgRWFwUmVzcG9uc2VTUlBDS2V5IHNycF9ja2V5ID0gMTsKKyAgICAgICAgRWFwUmVzcG9uc2VTUlBDVmFsaWRhdG9yIHNycF9jdmFsaWRhdG9yID0gMjsKKyAgICAgICAgRWFwUmVzcG9uc2VTUlBBQ0sgc3JwX2FjayA9IDM7CisgICAgICAgIEVhcFJlc3BvbnNlU1JQTFdFQ2hhbGxlbmdlIHNycF9jaGFsbGVuZ2UgPSA0OworICAgIH0KK30KKworbWVzc2FnZSBFYXBSZXNwb25zZVNSUENLZXkgeworICAgIHJlcXVpcmVkIGJ5dGVzIGRhdGEgPSAxOworfQorCittZXNzYWdlIEVhcFJlc3BvbnNlU1JQQ1ZhbGlkYXRvcnsKKyAgICByZXF1aXJlZCBieXRlcyBkYXRhID0gMTsKK30KKworbWVzc2FnZSBFYXBSZXNwb25zZVNSUEFDS3sKKyAgICByZXF1aXJlZCBieXRlcyBkYXRhID0gMTsKK30KKworbWVzc2FnZSBFYXBSZXNwb25zZVNSUExXRUNoYWxsZW5nZXsKKyAgICByZXF1aXJlZCBieXRlcyBkYXRhID0gMTsKK30KKworbWVzc2FnZSBFYXBTdWNjZXNzeworICAgIHJlcXVpcmVkIGJ5dGVzIGRhdGEgPSAxOworfQorCittZXNzYWdlIEVhcEZhaWx1cmV7CisgICAgcmVxdWlyZWQgYnl0ZXMgZGF0YSA9IDE7Cit9CisKZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy9wcHBkL2VhcF9mdXp6X0Nwcm94eS5jIGIvZnV6emluZy9vcnBoYW5zL3BwcGQvZWFwX2Z1enpfQ3Byb3h5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiN2Q5OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvb3JwaGFucy9wcHBkL2VhcF9mdXp6X0Nwcm94eS5jCkBAIC0wLDAgKzEsMjggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAicHBwZC5oIgorI2luY2x1ZGUgInBhdGhuYW1lcy5oIgorI2luY2x1ZGUgIm1kNS5oIgorI2luY2x1ZGUgImVhcC5oIgorI2luY2x1ZGUgIm1hZ2ljLmgiCisKK3ZvaWQgaW5pdCgpCit7CisgICAgZWFwX3Byb3RlbnQuaW5pdCgwKTsKK30KKworCit2b2lkIHByb3h5X3BhY2tldCh1aW50OF90ICpkYXRhLCBpbnQgbGVuKQoreworICAgIGVhcF9wcm90ZW50LmlucHV0KDAsIGRhdGEsIGxlbik7Cit9CmRpZmYgLS1naXQgYS9mdXp6aW5nL29ycGhhbnMvcHBwZC9lYXBfZnV6el9DcHJveHkuaCBiL2Z1enppbmcvb3JwaGFucy9wcHBkL2VhcF9mdXp6X0Nwcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDZmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvcHBwZC9lYXBfZnV6el9DcHJveHkuaApAQCAtMCwwICsxLDU2IEBACisvL2Zyb20gcHBwZC5oLCBjYW4ndCBpbmNsdWRlIGl0IGRpcmVjdGx5IGluIHRoZSBmdXp6ZXIgYmVjYXVzZSBDIC0+IEMrKyBpc3N1ZXMKKyNkZWZpbmUJRUFQX0hFQURFUkxFTgk0CisKKy8qIEVBUCBtZXNzYWdlIGNvZGVzLiAqLworI2RlZmluZQlFQVBfUkVRVUVTVAkxCisjZGVmaW5lCUVBUF9SRVNQT05TRQkyCisjZGVmaW5lCUVBUF9TVUNDRVNTCTMKKyNkZWZpbmUJRUFQX0ZBSUxVUkUJNAorCisvKiBFQVAgdHlwZXMgKi8KKyNkZWZpbmUJRUFQVF9JREVOVElUWQkJMQorI2RlZmluZQlFQVBUX05PVElGSUNBVElPTgkyCisjZGVmaW5lCUVBUFRfTkFLCQkzCS8qIChyZXNwb25zZSBvbmx5KSAqLworI2RlZmluZQlFQVBUX01ENUNIQVAJCTQKKyNkZWZpbmUJRUFQVF9PVFAJCTUJLyogT25lLVRpbWUgUGFzc3dvcmQ7IFJGQyAxOTM4ICovCisjZGVmaW5lCUVBUFRfVE9LRU4JCTYJLyogR2VuZXJpYyBUb2tlbiBDYXJkICovCisvKiA3IGFuZCA4IGFyZSB1bmFzc2lnbmVkLiAqLworI2RlZmluZQlFQVBUX1JTQQkJOQkvKiBSU0EgUHVibGljIEtleSBBdXRoZW50aWNhdGlvbiAqLworI2RlZmluZQlFQVBUX0RTUwkJMTAJLyogRFNTIFVuaWxhdGVyYWwgKi8KKyNkZWZpbmUJRUFQVF9LRUEJCTExCS8qIEtFQSAqLworI2RlZmluZQlFQVBUX0tFQV9WQUxJREFURQkxMgkvKiBLRUEtVkFMSURBVEUJKi8KKyNkZWZpbmUJRUFQVF9UTFMJCTEzCS8qIEVBUC1UTFMgKi8KKyNkZWZpbmUJRUFQVF9ERUZFTkRFUgkJMTQJLyogRGVmZW5kZXIgVG9rZW4gKEFYRU5UKSAqLworI2RlZmluZQlFQVBUX1cySwkJMTUJLyogV2luZG93cyAyMDAwIEVBUCAqLworI2RlZmluZQlFQVBUX0FSQ09UCQkxNgkvKiBBcmNvdCBTeXN0ZW1zICovCisjZGVmaW5lCUVBUFRfQ0lTQ09XSVJFTEVTUwkxNwkvKiBDaXNjbyBXaXJlbGVzcyAqLworI2RlZmluZQlFQVBUX05PS0lBQ0FSRAkJMTgJLyogTm9raWEgSVAgc21hcnQgY2FyZCAqLworI2RlZmluZQlFQVBUX1NSUAkJMTkJLyogU2VjdXJlIFJlbW90ZSBQYXNzd29yZCAqLworLyogMjAgaXMgZGVwcmVjYXRlZCAqLworCisvKiBFQVAgU1JQLVNIQTEgU3VidHlwZXMgKi8KKyNkZWZpbmUJRUFQU1JQX0NIQUxMRU5HRQkxCS8qIFJlcXVlc3QgMSAtIENoYWxsZW5nZSAqLworI2RlZmluZQlFQVBTUlBfQ0tFWQkJMQkvKiBSZXNwb25zZSAxIC0gQ2xpZW50IEtleSAqLworI2RlZmluZQlFQVBTUlBfU0tFWQkJMgkvKiBSZXF1ZXN0IDIgLSBTZXJ2ZXIgS2V5ICovCisjZGVmaW5lCUVBUFNSUF9DVkFMSURBVE9SCTIJLyogUmVzcG9uc2UgMiAtIENsaWVudCBWYWxpZGF0b3IgKi8KKyNkZWZpbmUJRUFQU1JQX1NWQUxJREFUT1IJMwkvKiBSZXF1ZXN0IDMgLSBTZXJ2ZXIgVmFsaWRhdG9yICovCisjZGVmaW5lCUVBUFNSUF9BQ0sJCTMJLyogUmVzcG9uc2UgMyAtIGZpbmFsIGFjayAqLworI2RlZmluZQlFQVBTUlBfTFdSRUNIQUxMRU5HRQk0CS8qIFJlcS9yZXNwIDQgLSBMaWdodHdlaWdodCByZWNoYWwgKi8KKworI2RlZmluZQlTUlBWQUxfRUJJVAkweDAwMDAwMDAxCS8qIFVzZSBzaGFyZWQga2V5IGZvciBFQ1AgKi8KKworI2RlZmluZQlTUlBfUFNFVURPX0lECSJwc2V1ZG9fIgorI2RlZmluZQlTUlBfUFNFVURPX0xFTgk3CisKKyNkZWZpbmUgTUQ1X1NJR05BVFVSRV9TSVpFCTE2CisjZGVmaW5lIE1JTl9DSEFMTEVOR0VfTEVOR1RICTE2CisjZGVmaW5lIE1BWF9DSEFMTEVOR0VfTEVOR1RICTI0CisKK3ZvaWQgaW5pdCgpOwordm9pZCBwcm94eV9wYWNrZXQodWludDhfdCAqZGF0YSwgaW50IGxlbik7CisKKy8vb3ZlcnJpZGUgb3V0cHV0IHNvIHdlIGRvbid0IHdyaXRlIHRvIGEgYnJva2VuIGZkCit2b2lkIG91dHB1dCAoaW50IHVuaXQsIHVuc2lnbmVkIGNoYXIgKnAsIGludCBsZW4pCit7CisKK30KZGlmZiAtLWdpdCBhL2Z1enppbmcvb3JwaGFucy93aWRldmluZS90cnVzdHkvQW5kcm9pZC5icCBiL2Z1enppbmcvb3JwaGFucy93aWRldmluZS90cnVzdHkvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWYxMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL3dpZGV2aW5lL3RydXN0eS9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMzggQEAKKy8vIENvcHlyaWdodCAoQykgMjAyMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAorfQorCitjY19mdXp6IHsKKyAgICBuYW1lOiAidHJ1c3R5X3dpZGV2aW5lX3RpcGNfZnV6emVyIiwKKyAgICBkZWZhdWx0czogWyJ0cnVzdHlfZnV6emVyX2RlZmF1bHRzIl0sCisgICAgc3JjczogWyI6dHJ1c3R5X3RpcGNfZnV6emVyIl0sCisgICAgY2ZsYWdzOiBbCisgICAgICAgICItRFRSVVNUWV9BUFBfUE9SVD1cImNvbS5hbmRyb2lkLnRydXN0eS53aWRldmluZVwiIiwKKyAgICAgICAgIi1EVFJVU1RZX0FQUF9VVUlEPVwiMDhkM2VkNDAtYmRlMi00NDhjLWE5MWQtNzVmMTk4OWM1N2VmXCIiLAorICAgICAgICAiLURUUlVTVFlfQVBQX0ZJTEVOQU1FPVwid2lkZXZpbmUuc3ltcy5lbGZcIiIsCisgICAgXSwKK30KKworLy8gRnV6emVyIGZvciBPREtfRGlzcGF0Y2hNZXNzYWdlKCkgdGhhdCdzIGluc2lkZSBUcnVzdHkuCitjY19mdXp6IHsKKyAgICBuYW1lOiAidHJ1c3R5X3dpZGV2aW5lX2Rpc3BhdGNoX2Z1enplciIsCisgICAgZGVmYXVsdHM6IFsidHJ1c3R5X2Z1enplcl9kZWZhdWx0cyJdLAorICAgIHNyY3M6IFsiZGlzcGF0Y2hfZnV6emVyLmNwcCJdLAorICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJkbWFidWZoZWFwIiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL3dpZGV2aW5lL3RydXN0eS9PV05FUlMgYi9mdXp6aW5nL29ycGhhbnMvd2lkZXZpbmUvdHJ1c3R5L09XTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjgxOTlmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emluZy9vcnBoYW5zL3dpZGV2aW5lL3RydXN0eS9PV05FUlMKQEAgLTAsMCArMSBAQAordHJvbmdAZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvZnV6emluZy9vcnBoYW5zL3dpZGV2aW5lL3RydXN0eS9kaXNwYXRjaF9mdXp6ZXIuY3BwIGIvZnV6emluZy9vcnBoYW5zL3dpZGV2aW5lL3RydXN0eS9kaXNwYXRjaF9mdXp6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MmI2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL29ycGhhbnMvd2lkZXZpbmUvdHJ1c3R5L2Rpc3BhdGNoX2Z1enplci5jcHAKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8QnVmZmVyQWxsb2NhdG9yL0J1ZmZlckFsbG9jYXRvci5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dHJ1c3R5L2NvdmVyYWdlL2NvdmVyYWdlLmg+CisjaW5jbHVkZSA8dHJ1c3R5L2Z1enovY291bnRlcnMuaD4KKyNpbmNsdWRlIDx0cnVzdHkvZnV6ei91dGlscy5oPgorI2luY2x1ZGUgPHRydXN0eS90aXBjLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisKK3VzaW5nIGFuZHJvaWQ6OnRydXN0eTo6Y292ZXJhZ2U6OkNvdmVyYWdlUmVjb3JkOwordXNpbmcgYW5kcm9pZDo6dHJ1c3R5OjpmdXp6OjpFeHRyYUNvdW50ZXJzOwordXNpbmcgYW5kcm9pZDo6dHJ1c3R5OjpmdXp6OjpUcnVzdHlBcHA7CisKKyNkZWZpbmUgY291bnRvZihhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZihhcnJbMF0pKQorCisjZGVmaW5lIFRJUENfREVWICIvZGV2L3RydXN0eS1pcGMtZGV2MCIKKyNkZWZpbmUgV0lERVZJTkVfUE9SVCAiY29tLmFuZHJvaWQudHJ1c3R5LndpZGV2aW5lIgorI2RlZmluZSBXSURFVklORV9NT0RVTEVfTkFNRSAid2lkZXZpbmUuc3ltcy5lbGYiCisKKyNkZWZpbmUgV1ZfSVBDX0JVRkZFUl9TSVpFICgzMikKKyNkZWZpbmUgV1ZfTUVTU0FHRV9CVUZGRVJfU0laRSAoMzIgKiAxMDI0KQorI2RlZmluZSBXVl9TSEFSRURfQlVGRkVSX1NJWkUgKDE2ICogMTAyNCAqIDEwMjQpCisKK3N0cnVjdCB3dl9pcGNfaGVhZGVyIHsKKyAgICB1aW50MTZfdCB0YWc7Cit9OworCitlbnVtIHd2X3RhZyA6IHVpbnQxNl90IHsKKyAgICBXVl9UQUdfQUNLID0gMHUsCisgICAgV1ZfVEFHX0JJTkQgPSAxdSwKKyAgICBXVl9UQUdfV0lERVZJTkUgPSAydSwKK307CisKK3N0cnVjdCBiaW5kX21lc3NhZ2UgeworICAgIHVpbnQzMl90IHByb3RvY29sX3ZlcnNpb247CisgICAgdWludDMyX3QgbWVzc2FnZV9idWZmZXJfc2l6ZTsKKyAgICB1aW50MzJfdCBzaGFyZWRfYnVmZmVyX3NpemU7Cit9OworCitzdHJ1Y3Qgd2lkZXZpbmVfbWVzc2FnZSB7CisgICAgdWludDMyX3QgbWVzc2FnZV9zaXplOworfTsKKworLyogV2lkZXZpbmUgVEEncyBVVUlEIGlzIDA4ZDNlZDQwLWJkZTItNDQ4Yy1hOTFkLTc1ZjE5ODljNTdlZiAqLworc3RhdGljIHN0cnVjdCB1dWlkIHdpZGV2aW5lX3V1aWQgPSB7CisgICAgICAgIDB4MDhkM2VkNDAsCisgICAgICAgIDB4YmRlMiwKKyAgICAgICAgMHg0NDhjLAorICAgICAgICB7MHhhOSwgMHgxZCwgMHg3NSwgMHhmMSwgMHg5OCwgMHg5YywgMHg1NywgMHhlZn0sCit9OworCitzdGF0aWMgYW5kcm9pZDo6YmFzZTo6dW5pcXVlX2ZkIHd2X21zZ19idWZfZmQ7CitzdGF0aWMgdm9pZCogd3ZfbXNnX2J1Zl9iYXNlOworCitzdGF0aWMgYW5kcm9pZDo6YmFzZTo6dW5pcXVlX2ZkIHd2X3NoYXJlZF9idWZfZmQ7CitzdGF0aWMgdm9pZCogd3Zfc2hhcmVkX2J1Zl9iYXNlOworCitzdGF0aWMgVHJ1c3R5QXBwIHRydXN0eV9hcHAoVElQQ19ERVYsIFdJREVWSU5FX1BPUlQpOworc3RhdGljIENvdmVyYWdlUmVjb3JkIHJlY29yZChUSVBDX0RFViwgJndpZGV2aW5lX3V1aWQsIFdJREVWSU5FX01PRFVMRV9OQU1FKTsKKworZXh0ZXJuICJDIiBpbnQgTExWTUZ1enplckluaXRpYWxpemUoaW50KiAvKiBhcmdjICovLCBjaGFyKioqIC8qIGFyZ3YgKi8pIHsKKyAgICBhdXRvIHJldCA9IHRydXN0eV9hcHAuQ29ubmVjdCgpOworICAgIGlmICghcmV0Lm9rKCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8IHJldC5lcnJvcigpIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgZXhpdCgtMSk7CisgICAgfQorCisgICAgcmV0ID0gcmVjb3JkLk9wZW4oKTsKKyAgICBpZiAoIXJldC5vaygpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCByZXQuZXJyb3IoKSA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGV4aXQoLTEpOworICAgIH0KKworICAgIEJ1ZmZlckFsbG9jYXRvciBhbGxvY2F0b3I7CisKKyAgICB3dl9tc2dfYnVmX2ZkLnJlc2V0KGFsbG9jYXRvci5BbGxvYyhrRG1hYnVmU3lzdGVtSGVhcE5hbWUsIFdWX01FU1NBR0VfQlVGRkVSX1NJWkUpKTsKKyAgICBpZiAod3ZfbXNnX2J1Zl9mZCA8IDApIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVzc2FnZSBidWZmZXIuIiA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGV4aXQoLTEpOworICAgIH0KKworICAgIHd2X21zZ19idWZfYmFzZSA9IG1tYXAoMCwgV1ZfTUVTU0FHRV9CVUZGRVJfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHd2X21zZ19idWZfZmQsIDApOworICAgIGlmICh3dl9tc2dfYnVmX2Jhc2UgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBtbWFwKCkgbWVzc2FnZSBidWZmZXIuIiA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGV4aXQoLTEpOworICAgIH0KKworICAgIHd2X3NoYXJlZF9idWZfZmQucmVzZXQoYWxsb2NhdG9yLkFsbG9jKGtEbWFidWZTeXN0ZW1IZWFwTmFtZSwgV1ZfU0hBUkVEX0JVRkZFUl9TSVpFKSk7CisgICAgaWYgKHd2X3NoYXJlZF9idWZfZmQgPCAwKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNoYXJlZCBidWZmZXIuIiA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGV4aXQoLTEpOworICAgIH0KKworICAgIHd2X3NoYXJlZF9idWZfYmFzZSA9IG1tYXAoMCwgV1ZfU0hBUkVEX0JVRkZFUl9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Zfc2hhcmVkX2J1Zl9mZCwgMCk7CisgICAgaWYgKHd2X3NoYXJlZF9idWZfYmFzZSA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIG1tYXAoKSBzaGFyZWQgYnVmZmVyLiIgPDwgc3RkOjplbmRsOworICAgICAgICBleGl0KC0xKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgQmluZCgpIHsKKyAgICB3dl9pcGNfaGVhZGVyIGhkciA9IHsKKyAgICAgICAgLnRhZyA9IFdWX1RBR19CSU5ELAorICAgIH07CisgICAgYmluZF9tZXNzYWdlIGFyZ3MgPSB7CisgICAgICAgIC5wcm90b2NvbF92ZXJzaW9uID0gMCwKKyAgICAgICAgLm1lc3NhZ2VfYnVmZmVyX3NpemUgPSBXVl9NRVNTQUdFX0JVRkZFUl9TSVpFLAorICAgICAgICAuc2hhcmVkX2J1ZmZlcl9zaXplID0gV1ZfU0hBUkVEX0JVRkZFUl9TSVpFLAorICAgIH07CisgICAgaW92ZWMgaW92W10gPSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC5pb3ZfYmFzZSA9ICZoZHIsCisgICAgICAgICAgICAuaW92X2xlbiA9IHNpemVvZihoZHIpLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAuaW92X2Jhc2UgPSAmYXJncywKKyAgICAgICAgICAgIC5pb3ZfbGVuID0gc2l6ZW9mKGFyZ3MpLAorICAgICAgICB9LAorICAgIH07CisgICAgdHJ1c3R5X3NobSBoYW5kbGVzW10gPSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC5mZCA9IHd2X21zZ19idWZfZmQsCisgICAgICAgICAgICAudHJhbnNmZXIgPSBUUlVTVFlfU0hBUkUsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5mZCA9IHd2X3NoYXJlZF9idWZfZmQsCisgICAgICAgICAgICAudHJhbnNmZXIgPSBUUlVTVFlfU0hBUkUsCisgICAgICAgIH0sCisgICAgfTsKKyAgICBpbnQgY2hhbiA9ICp0cnVzdHlfYXBwLkdldFJhd0ZkKCk7CisKKyAgICBpbnQgcmMgPSB0aXBjX3NlbmQoY2hhbiwgaW92LCBjb3VudG9mKGlvdiksIGhhbmRsZXMsIGNvdW50b2YoaGFuZGxlcykpOworICAgIGlmIChyYyAhPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihoZHIpICsgc2l6ZW9mKGFyZ3MpKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmMgPSByZWFkKGNoYW4sICZoZHIsIHNpemVvZihoZHIpKTsKKyAgICBpZiAocmMgIT0gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoaGRyKSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBNc2coY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBzaXplID0gc3RkOjptaW4oKHNpemVfdClXVl9NRVNTQUdFX0JVRkZFUl9TSVpFLCBzaXplKTsKKyAgICB3dl9pcGNfaGVhZGVyIGhkciA9IHsKKyAgICAgICAgLnRhZyA9IFdWX1RBR19XSURFVklORSwKKyAgICB9OworICAgIHdpZGV2aW5lX21lc3NhZ2UgYXJncyA9IHsKKyAgICAgICAgLm1lc3NhZ2Vfc2l6ZSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzaXplKSwKKyAgICB9OworICAgIGlvdmVjIGlvdltdID0geworICAgICAgICB7CisgICAgICAgICAgICAuaW92X2Jhc2UgPSAmaGRyLAorICAgICAgICAgICAgLmlvdl9sZW4gPSBzaXplb2YoaGRyKSwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgLmlvdl9iYXNlID0gJmFyZ3MsCisgICAgICAgICAgICAuaW92X2xlbiA9IHNpemVvZihhcmdzKSwKKyAgICAgICAgfSwKKyAgICB9OworICAgIGludCBjaGFuID0gKnRydXN0eV9hcHAuR2V0UmF3RmQoKTsKKworICAgIG1lbXNldCh3dl9tc2dfYnVmX2Jhc2UsIDAsIFdWX01FU1NBR0VfQlVGRkVSX1NJWkUpOworICAgIG1lbWNweSh3dl9tc2dfYnVmX2Jhc2UsIGRhdGEsIHNpemUpOworCisgICAgaW50IHJjID0gdGlwY19zZW5kKGNoYW4sIGlvdiwgY291bnRvZihpb3YpLCBOVUxMLCAwKTsKKyAgICBpZiAocmMgIT0gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoaGRyKSArIHNpemVvZihhcmdzKSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJjID0gcmVhZHYoY2hhbiwgaW92LCBjb3VudG9mKGlvdikpOworICAgIGlmIChyYyAhPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihoZHIpICsgc2l6ZW9mKGFyZ3MpKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2V4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBFeHRyYUNvdW50ZXJzIGNvdW50ZXJzKCZyZWNvcmQpOworICAgIGNvdW50ZXJzLlJlc2V0KCk7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBCaW5kKCk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGFuZHJvaWQ6OnRydXN0eTo6ZnV6ejo6QWJvcnQoKTsKKyAgICB9CisKKyAgICBzdWNjZXNzID0gTXNnKGRhdGEsIHNpemUpOworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBhbmRyb2lkOjp0cnVzdHk6OmZ1eno6OkFib3J0KCk7CisgICAgfQorCisgICAgLy8gUmVjb25uZWN0IHRvIGVuc3VyZSB0aGF0IHRoZSBzZXJ2aWNlIGlzIHN0aWxsIHVwLgorICAgIHRydXN0eV9hcHAuRGlzY29ubmVjdCgpOworICAgIGF1dG8gcmV0ID0gdHJ1c3R5X2FwcC5Db25uZWN0KCk7CisgICAgaWYgKCFyZXQub2soKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgcmV0LmVycm9yKCkgPDwgc3RkOjplbmRsOworICAgICAgICBhbmRyb2lkOjp0cnVzdHk6OmZ1eno6OkFib3J0KCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mdXp6aW5nL3N5c3RlbV9mdXp6ZXJzL2xpYmNyeXB0b191dGlscy9BbmRyb2lkLmJwIGIvZnV6emluZy9zeXN0ZW1fZnV6emVycy9saWJjcnlwdG9fdXRpbHMvQW5kcm9pZC5icAppbmRleCA0MjE0YjM1Li5jOWY0ODIwIDEwMDY0NAotLS0gYS9mdXp6aW5nL3N5c3RlbV9mdXp6ZXJzL2xpYmNyeXB0b191dGlscy9BbmRyb2lkLmJwCisrKyBiL2Z1enppbmcvc3lzdGVtX2Z1enplcnMvbGliY3J5cHRvX3V0aWxzL0FuZHJvaWQuYnAKQEAgLTEsMyArMSw3IEBACitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCit9CisKIGNjX2Z1enogewogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAogICAgIG5hbWUgOiAibGliY3J5cHRvX3V0aWxzX2Z1enplciIsCkBAIC0xNCw0ICsxOCwzIEBACiAgICAgICAgICJsaWJjcnlwdG8iLAogICAgIF0sCiB9Ci0KZGlmZiAtLWdpdCBhL2Z1enppbmcvc3lzdGVtX2Z1enplcnMvbGliY3J5cHRvX3V0aWxzL2xpYmNyeXB0b191dGlsc19mdXp6ZXIuY3BwIGIvZnV6emluZy9zeXN0ZW1fZnV6emVycy9saWJjcnlwdG9fdXRpbHMvbGliY3J5cHRvX3V0aWxzX2Z1enplci5jcHAKaW5kZXggYjE0MDg2ZC4uY2M0MGEzYiAxMDA2NDQKLS0tIGEvZnV6emluZy9zeXN0ZW1fZnV6emVycy9saWJjcnlwdG9fdXRpbHMvbGliY3J5cHRvX3V0aWxzX2Z1enplci5jcHAKKysrIGIvZnV6emluZy9zeXN0ZW1fZnV6emVycy9saWJjcnlwdG9fdXRpbHMvbGliY3J5cHRvX3V0aWxzX2Z1enplci5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL29ial9tYWMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgogI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxsaW1pdHM+CiAKICNkZWZpbmUgQU5EUk9JRF9QVUJLRVlfTU9EVUxVU19TSVpFX1dPUkRTIChBTkRST0lEX1BVQktFWV9NT0RVTFVTX1NJWkUgLyA0KQogCkBAIC0zNSw3ICszNiw3IEBACiAgICAgdWludDMyX3QgbW9kdWx1c19zaXplX3dvcmRzID0gQU5EUk9JRF9QVUJLRVlfTU9EVUxVU19TSVpFX1dPUkRTOwogICAgIG1lbWNweShidWZmZXIsICZtb2R1bHVzX3NpemVfd29yZHMsIHNpemVvZih1aW50MzJfdCkpOwogCi0gICAgdWludDMyX3QgbjBpbnYgPSBmZHAuQ29uc3VtZUludGVncmFsSW5SYW5nZTx1aW50MzJfdD4oMCwyXjMyKTsKKyAgICB1aW50MzJfdCBuMGludiA9IGZkcC5Db25zdW1lSW50ZWdyYWxJblJhbmdlPHVpbnQzMl90PigwLHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSk7CiAgICAgbWVtY3B5KGJ1ZmZlcitzaXplb2YodWludDMyX3QpLCAmbjBpbnYsIHNpemVvZih1aW50MzJfdCkpOwogCiAgICAgc3RkOjpzdHJpbmcgcyA9IGZkcC5Db25zdW1lQnl0ZXNBc1N0cmluZyhBTkRST0lEX1BVQktFWV9NT0RVTFVTX1NJWkUpOwpkaWZmIC0tZ2l0IGEvZnV6emluZy9zeXN0ZW1fZnV6emVycy9saWJ3YXRjaGRvZ19wZXJmX3NlcnZpY2UvQW5kcm9pZC5icCBiL2Z1enppbmcvc3lzdGVtX2Z1enplcnMvbGlid2F0Y2hkb2dfcGVyZl9zZXJ2aWNlL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5M2QxOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enppbmcvc3lzdGVtX2Z1enplcnMvbGlid2F0Y2hkb2dfcGVyZl9zZXJ2aWNlL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwyNyBAQAorcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAorfQorCitjY19mdXp6IHsKKyAgICBuYW1lIDogImxpYndhdGNoZG9nX3BlcmZfc2VydmljZV9mdXp6ZXIiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImxpYndhdGNoZG9nX3BlcmZfc2VydmljZV9mdXp6ZXIuY3BwIiwKKyAgICBdLAorICAgIGRlZmF1bHRzOiBbCisgICAgICAgICJjYXJ3YXRjaGRvZ2RfZGVmYXVsdHMiLAorICAgICAgICAibGlid2F0Y2hkb2dfcGVyZl9zZXJ2aWNlX2RlZmF1bHRzIiwKKyAgICBdLAorICAgIGNmbGFnczogWworICAgICAgICAiLVdhbGwiLAorICAgICAgICAiLVdlcnJvciIsCisgICAgICAgICItV2V4dHJhIiwKKyAgICAgICAgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciIKKyAgICBdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJndGVzdCIsCisgICAgICAgICJsaWJ3YXRjaGRvZ19wZXJmX3NlcnZpY2UiLAorICAgIF0sCisgICAgc2hhcmVkX2xpYnM6IFsKKyAgICAgICAgImxpYmJhc2UiLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS9mdXp6aW5nL3N5c3RlbV9mdXp6ZXJzL2xpYndhdGNoZG9nX3BlcmZfc2VydmljZS9saWJ3YXRjaGRvZ19wZXJmX3NlcnZpY2VfZnV6emVyLmNwcCBiL2Z1enppbmcvc3lzdGVtX2Z1enplcnMvbGlid2F0Y2hkb2dfcGVyZl9zZXJ2aWNlL2xpYndhdGNoZG9nX3BlcmZfc2VydmljZV9mdXp6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTNiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6aW5nL3N5c3RlbV9mdXp6ZXJzL2xpYndhdGNoZG9nX3BlcmZfc2VydmljZS9saWJ3YXRjaGRvZ19wZXJmX3NlcnZpY2VfZnV6emVyLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IDIwMjAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiSW9QZXJmQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIlVpZElvU3RhdHMuaCIKKworI2luY2x1ZGUgPGFuZHJvaWQtYmFzZS9maWxlLmg+CisjaW5jbHVkZSA8ZnV6emVyL0Z1enplZERhdGFQcm92aWRlci5oPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgYXV0b21vdGl2ZSB7CituYW1lc3BhY2Ugd2F0Y2hkb2cgeworCit1c2luZyA6OmFuZHJvaWQ6OmJhc2U6OldyaXRlU3RyaW5nVG9GaWxlOworCitzdHJ1Y3Qgc3RhdHNJbmZvIHsKKyAgICBzdGQ6OnN0cmluZyBpbnN0clsxM107CisgICAgaW50IGxlblsxM107Cit9OworCitzdGF0c0luZm8gaW5mbyA9IHt7ImNwdSIsICJwcm9jc19ydW5uaW5nIiwgInByb2NzX2Jsb2NrZWQiLCAiY3B1MCIsICJjcHUxIiwgImNwdTIiLCAiY3B1MyIsICJpbnRyIiwKKyAgICAgICAgICAgICAgICAgICAiY3R4dCIsICJidGltZSIsICJwcm9jZXNzIiwgInByb2NzX3NsZWVwaW5nIiwgInNvZnRpcnEifSwKKyAgICAgICAgICAgICAgICAgIHsxMCwgMSwgMSwgMTAsIDEwLCAxMCwgMTAsIDMxLCAxLCAxLCAxLCAxLCAxMX19OworCitleHRlcm4gIkMiIGludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHN0ZDo6c2l6ZV90IHNpemUpIHsKKyAgICBGdXp6ZWREYXRhUHJvdmlkZXIgZmRwKGRhdGEsIHNpemUpOworICAgIHN0ZDo6c3RyaW5nIHVpZElvU3RhdHNTbmFwc2hvdDsKKyAgICBzdGQ6OnN0cmluZyBwcm9jU3RhdHNTbmFwc2hvdDsKKworICAgIC8vIFByZXBhcmUgZm9yIFVpZElPU3RhdHMgZGF0YQorICAgIGludCBjb3VudCA9IDA7CisgICAgd2hpbGUgKGZkcC5yZW1haW5pbmdfYnl0ZXMoKSA+IChzaXplIC8gMikpIHsKKyAgICAgICAgdWludDY0X3QgdmFsID0gZmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKTsKKyAgICAgICAgdWlkSW9TdGF0c1NuYXBzaG90ICs9ICgoKGNvdW50ICUgMTEpID09IDAgPyAiIiA6ICIgIikgKyBzdGQ6OnRvX3N0cmluZyh2YWwpKTsKKyAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBjb3VudCAlIDExID09IDEwKSB7CisgICAgICAgICAgICB1aWRJb1N0YXRzU25hcHNob3QgKz0gIlxuIjsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOworICAgIH0KKworICAgIC8vIFByZXBhcmUgZm9yIFByb2NTdGF0cyBkYXRhCisgICAgd2hpbGUgKGZkcC5yZW1haW5pbmdfYnl0ZXMoKSA+IDUpIHsKKyAgICAgICAgdWludDMyX3QgY2hvb3NlID0gZmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KDAsIDMpOworICAgICAgICB1aW50MzJfdCBpZHggPSBjaG9vc2U7CisgICAgICAgIHN3aXRjaCAoY2hvb3NlKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgaWR4ID0gZmRwLkNvbnN1bWVJbnRlZ3JhbEluUmFuZ2U8dWludDMyX3Q+KDMsIDEyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcHJvY1N0YXRzU25hcHNob3QgKz0gaW5mby5pbnN0cltpZHhdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZm8ubGVuW2lkeF07IGkrKykgeworICAgICAgICAgICAgdWludDY0X3QgdmFsID0gZmRwLkNvbnN1bWVJbnRlZ3JhbDx1aW50NjRfdD4oKTsKKyAgICAgICAgICAgIHByb2NTdGF0c1NuYXBzaG90ICs9ICIgIiArIHN0ZDo6dG9fc3RyaW5nKHZhbCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvY1N0YXRzU25hcHNob3QgKz0gIlxuIjsKKyAgICB9CisKKyAgICBpZiAodWlkSW9TdGF0c1NuYXBzaG90LnNpemUoKSA+IDAgJiYgcHJvY1N0YXRzU25hcHNob3Quc2l6ZSgpID4gMCkgeworICAgICAgICAvLyBUZXN0IFVpZElvU3RhdHMKKyAgICAgICAgVGVtcG9yYXJ5RmlsZSB0ZjE7CisgICAgICAgIFdyaXRlU3RyaW5nVG9GaWxlKHVpZElvU3RhdHNTbmFwc2hvdCwgdGYxLnBhdGgpOworICAgICAgICBVaWRJb1N0YXRzIHVpZElvU3RhdHModGYxLnBhdGgpOworICAgICAgICBhc3NlcnQodWlkSW9TdGF0cy5lbmFibGVkKCkgPT0gdHJ1ZSk7CisgICAgICAgIHVpZElvU3RhdHMuY29sbGVjdCgpOworICAgICAgICAvLyBUZXN0IFByb2NTdGF0cworICAgICAgICBUZW1wb3JhcnlGaWxlIHRmMjsKKyAgICAgICAgV3JpdGVTdHJpbmdUb0ZpbGUocHJvY1N0YXRzU25hcHNob3QsIHRmMi5wYXRoKTsKKyAgICAgICAgUHJvY1N0YXQgcHJvY1N0YXQodGYyLnBhdGgpOworICAgICAgICBhc3NlcnQocHJvY1N0YXQuZW5hYmxlZCgpID09IHRydWUpOworICAgICAgICBwcm9jU3RhdC5jb2xsZWN0KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit9ICAvLyBuYW1lc3BhY2Ugd2F0Y2hkb2cKK30gIC8vIG5hbWVzcGFjZSBhdXRvbW90aXZlCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvZnV6emluZy92cnBfZnV6emVycy9PV05FUlMgYi9mdXp6aW5nL3ZycF9mdXp6ZXJzL09XTkVSUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxYjY1YS4uMDAwMDAwMAotLS0gYS9mdXp6aW5nL3ZycF9mdXp6ZXJzL09XTkVSUworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotaGFtemVoQGdvb2dsZS5jb20KLWlzcG9AZ29vZ2xlLmNvbQota2FsZGVyQGdvb2dsZS5jb20KLW1zcGVjdG9yQGdvb2dsZS5jb20KLXNlbXNtaXRoQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL1JFQURNRS5tZCBiL2dkYi9nZGJfanNvbl9wcmludGVyL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ2MzZmCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNzcgQEAKKyMgZ2RiLWpzb24tcHJldHR5LXByaW50ZXIKK1RoaXMgaXMgYSBwcmludGVyIHRoYXQgcHJpbnRzIHZhcmlhYmxlcyBpbiBqc29uIGZvcm1hdC4KKyMjIEluc3RhbGwgaW4gR0RCCitDb3B5IHRoZSBjb250ZW50IGluIGdkYmluaXQgaW50byB5b3VyIH4vLmdkYmluaXQsIHJlcGxhY2UgdGhlIHBhdGggPHBhdGhfdG9fZ2RiX2pzb25fcHJpbnRlcj4gYnkgdGhlIGFjdHVhbCBwYXRoIG9mIGdkYl9qc29uX3ByaW50ZXIgZGlyZWN0b3J5LgorIyMgUnVuIHRlc3RzCitGaXJzdCwgaW4gdGhlIGdkYl9qc29uX3ByaW50ZXIgZGlyZWN0b3J5LCBjb21waWxlIGVhY2ggZXhhbXBsZSBwcm9ncmFtIHdpdGggTzAgb3B0aW1pemF0aW9uCitgYGAKK2crKyB0ZXN0X2V4YW1wbGVzL2Jhc2ljX3R5cGVzLmNwcCAtTzAgLWcgLW8gdGVzdF9leGFtcGxlcy9iYXNpY190eXBlcworZysrIHRlc3RfZXhhbXBsZXMvb2JqZWN0czEuY3BwIC1PMCAtZyAtbyB0ZXN0X2V4YW1wbGVzL29iamVjdHMxCitnKysgdGVzdF9leGFtcGxlcy9vYmplY3RzMi5jcHAgLU8wIC1nIC1vIHRlc3RfZXhhbXBsZXMvb2JqZWN0czIKK2crKyB0ZXN0X2V4YW1wbGVzL29iamVjdHMuY3BwIC1PMCAtZyAtbyB0ZXN0X2V4YW1wbGVzL29iamVjdHMKK2crKyB0ZXN0X2V4YW1wbGVzL2FycmF5LmNwcCAtTzAgLWcgLW8gdGVzdF9leGFtcGxlcy9hcnJheQorZysrIHRlc3RfZXhhbXBsZXMvcmVmZXJlbmNlLmNwcCAtTzAgLWcgLW8gdGVzdF9leGFtcGxlcy9yZWZlcmVuY2UKK2BgYAorc2Vjb25kLCBydW4gZ2RiIGluIHRoZSBnZGJfanNvbl9wcmludGVyIGRpcmVjdG9yeToKK2BgYAorZ2RiCitgYGAKK2ZpbmFsbHksIHNvdXJjZSB0aGUgdGVzdCBzY3JpcHQ6CitgYGAKK3NvdXJjZSB0ZXN0L2dkYl9qc29uX3ByaW50ZXJfdGVzdC5weQorYGBgCisjIyBwcmludGluZyBmb3JtYXQKK2BgYAorUG9pbnRlciA6PSB7CisgIHR5cGU6ICdwb2ludGVyJywKKyAgY3R5cGU6IGN0eXBlIGZvciBwb2ludGVyLAorICBhZGRyZXNzOiBBZGRyZXNzLAorICByZWZlcmVuY2U6IFN0cnVjdAorfQorCitTdHJ1Y3QgOj0geworICB0eXBlOiAnc3RydWN0JywKKyAgY3R5cGU6IGN0eXBlIGZvciBzdHJ1Y3QsCisgIGFkZHJlc3M6IEFkZHJlc3MsCisgIGZpZWxkczogU3RydWN0RmllbGRbXQorfQorCitTdHJ1Y3RGaWVsZCA6PSB7CisgIGZpZWxkOiBuYW1lIG9mIGZpZWxkLAorICBmaWVsZF90eXBlOiAnYmFzZV9jbGFzcycgb3IgJ2FyZ3VtZW50JworICB2YWx1ZTogVmFsdWUKK30KKworSW50IDo9IHsKKyAgdHlwZTogJ2ludCcsCisgIGN0eXBlOiBjdHlwZSBmb3IgaW50LAorICBhZGRyZXNzOiBBZGRyZXNzLAorICB2YWx1ZTogbnVtYmVyCit9CisKK0Zsb2F0IDo9IHsKKyAgdHlwZTogJ2Zsb2F0JywKKyAgY3R5cGU6ICdmbG9hdCcgb3IgJ2RvdWJsZScsCisgIGFkZHJlc3M6IEFkZHJlc3MsCisgIHZhbHVlOiBudW1iZXIKK30KKworRW51bSA6PSB7CisgIHR5cGU6ICdlbnVtJywKKyAgY3R5cGU6IGN0eXBlIGZvciBlbnVtLAorICBhZGRyZXNzOiBBZGRyZXNzLAorICB2YWx1ZTogbnVtYmVyCit9CisKK1Zpc2l0IHZhcmlhYmxlIDo9IHsKKyAgdHlwZTogJ3Zpc2l0ZWQnLAorICBjdHlwZTogY3R5cGUgZm9yIHN0cnVjdCwKKyAgYWRkcmVzczogQWRkcmVzcywKK30KKworYGBgCisKKyMjIHByb2JsZW0gdG8gc29sdmUKKyogc3VwcG9ydCBmb3IgcHJpbnQgcGFyZW50L2NoaWxkIGNsYXNzIG1lbWJlcnMuCisqIHRoZSBwcmludGVyIHRyZWF0cyBhbGwgYXJyYXlzIGFzIHBvaW50ZXJzIG5vdy4gV2UgZXhwZWN0ZWQgaXQgdG8gaGF2ZSBhYmlsaXR5IHRvIGV4dHJhY3QgYXJyYXkvYnVmZmVyIGxlbmd0aC4KKyogdGhlIHByaW50ZXIgcHJpbnRzIHNtYXJ0IHBvaW50ZXJzIGludG8gYSBzdXBlciBjb21wbGV4IGpzb24gYmxvY2suIE1heWJlIHdlIG5lZWQgc29tZSBzcGVjaWZpYyBwcmludGVyIGZvciB0aGVzZSBjb21tb24gb2JqZWN0cy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci9nZGJfanNvbl9wcmludGVyL3ByaW50ZXJzLnB5IGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvZ2RiX2pzb25fcHJpbnRlci9wcmludGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjdmNTAzCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvZ2RiX2pzb25fcHJpbnRlci9wcmludGVycy5weQpAQCAtMCwwICsxLDQwNCBAQAorIyAgIENvcHlyaWdodCAyMDIwIC0gVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQgZ2RiCitpbXBvcnQgZ2RiLnByaW50aW5nCitpbXBvcnQgcmUKK2Zyb20gYWJjIGltcG9ydCBBQkMsIGFic3RyYWN0bWV0aG9kCitpbXBvcnQganNvbgorCisjIG91ciBjb2RlIG5vdyBvbmx5IHN1cHBvcnQgUHl0aG9uMy4gSW4gcHl0aG9uMiB3ZSBuZWVkIHRvIHVzZSBpbnRwdHI9bG9uZy4gVXNlIHRoaXMgdHlwZWRlZgorIyBmb3IgZWFzaWVyIHN1cHBvcnQgb2YgUHl0aG9uMiBsYXRlci4KK2ludHB0ciA9IGludAorCisKK2RlZiBjaGVja19vcHRpbWl6ZWRfb3V0KHRvX2pzb24pOgorICAgICIiIiBBIGRlY29yYXRvciBmb3IgdG9fanNvbiBtZXRob2Qgb2YgSnNvblByaW50ZXJzLiBDaGVjayBpZiB0aGUgdmFsdWUgaW4gdGhlIHByaW50ZXIKKyAgICBpcyBhbHJlYWR5IG9wdGltaXplZCBvdXQuCisgICAgSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgb3B0aW1pemVkIG91dCwgcmV0dXJuIHsndHlwZSc6ICdvcHRpbWl6ZWRfb3V0J30uCisKKyAgICBBcmdzOgorICAgICAgICB0b19qc29uOiBBIHRvX2pzb24gbWV0aG9kIG9mIGEgSnNvblByaW50ZXIuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBkZWNvcmF0ZWQgdG9fanNvbiBtZXRob2QKKyAgICAiIiIKKworICAgIGRlZiBkZWNvcmF0b3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi52YWx1ZSBpcyBOb25lIG9yIHNlbGYudmFsdWUuaXNfb3B0aW1pemVkX291dDoKKyAgICAgICAgICAgIHJldHVybiB7J3R5cGUnOiAnb3B0aW1pemVkX291dCd9CisKKyAgICAgICAgcmV0dXJuIHRvX2pzb24oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgIHJldHVybiBkZWNvcmF0b3IKKworCitkZWYgY2hlY2tfdmlzaXRlZCh0b19qc29uKToKKyAgICAiIiIgQSBkZWNvcmF0b3IgZm9yIHRvX2pzb24gbWV0aG9kIG9mIEpzb25QcmludGVycy4gQ2hlY2sgaWYgdGhlIHZhbHVlIGluIHRoZSBwcmludGVyCisgICAgaGFzIGFwcGVhcmVkIGluIHZpc2l0ZWRfYWRkcmVzc2VzX2FuZF90eXBlcy4KKyAgICBJZiB0aGUgdmFsdWUgaGFzIGFwcGVhcmVkIGluIHZpc2l0ZWRfYWRkcmVzc2VzX2FuZF90eXBlcywgcmV0dXJuIHsndHlwZSc6ICd2aXNpdGVkJywKKyAgICAnY3R5cGUnOiBzdHIoc2VsZi52YWx1ZS50eXBlKSwgJ2FkZHJlc3MnOiBzZWxmLmFkZHJlc3N9CisKKyAgICBBcmdzOgorICAgICAgICB0b19qc29uOiBBIHRvX2pzb24gbWV0aG9kIG9mIGEgSnNvblByaW50ZXIuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBkZWNvcmF0ZWQgdG9fanNvbiBtZXRob2QKKyAgICAiIiIKKworICAgIGRlZiBkZWNvcmF0b3Ioc2VsZik6CisgICAgICAgIGFkZHJlc3N0eXBlID0gc2VsZi5nZXRfYWRkcmVzc190eXBlKCkKKyAgICAgICAgaWYgYWRkcmVzc3R5cGUgIT0gTm9uZSBhbmQgYWRkcmVzc3R5cGUgaW4gc2VsZi52aXNpdGVkX2FkZHJlc3Nlc19hbmRfdHlwZXM6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICd0eXBlJzogJ3Zpc2l0ZWQnLAorICAgICAgICAgICAgICAgICdjdHlwZSc6IHN0cihzZWxmLnZhbHVlLnR5cGUpLAorICAgICAgICAgICAgICAgICdhZGRyZXNzJzogc2VsZi5hZGRyZXNzCisgICAgICAgICAgICB9CisgICAgICAgIHNlbGYudmlzaXRlZF9hZGRyZXNzZXNfYW5kX3R5cGVzLmFkZChzZWxmLmdldF9hZGRyZXNzX3R5cGUoKSkKKyAgICAgICAgcmV0dXJuIHRvX2pzb24oc2VsZikKKyAgICByZXR1cm4gZGVjb3JhdG9yCisKKworY2xhc3MgSnNvblByaW50ZXIoQUJDKToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBhbGwganNvbiBwcmludGVycy4KKworICAgIEF0dHJpYnV0ZXM6CisgICAgICAgIHZhbHVlOgorICAgICAgICAgICAgVGhlIHZhbHVlIHRvIHByaW50LCBub3RlIHRoYXQgdGhlIGxpZmV0aW1lIG9mIHByaW50ZXIgaXMgbGltaXRlZCB0byBzaW5nbGUgcHJpbnQgY29tbWFuZC4KKyAgICAgICAgdmlzaXRlZF9hZGRyZXNzZXNfYW5kX3R5cGVzOgorICAgICAgICAgICAgQSBzZXQgb2YgYWxsIGBhZGRyZXNzYF9gdHlwZWAgc3RyaW5nIHRoYXQgYWxyZWFkeSB2aXNpdGVkIGR1cmluZyBwcmludGluZy4KKyAgICAgICAgICAgIElmIHRoZSBhZGRyZXNzIGFuZCB0eXBlIGlzIGluIHRoZSBzZXQgYW5kIHRoZSB2YWx1ZSBpcyBhIHN0cnVjdCBvciBwb2ludGVyLAorICAgICAgICAgICAgdGhlIHByaW50ZXIgd2lsbCBtYXJrICd0eXBlJyBhcyB2aXNpdGVkIGFuZCBubyBsb25nZXIgZXhwYW5kIHRoZSB2YWx1ZS4gQ2FuIGJlIE5vbmUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIHZpc2l0ZWRfYWRkcmVzc2VzX2FuZF90eXBlcz1Ob25lKToKKyAgICAgICAgIiIiIENvbnN0cnVjdG9yLiBBIEpzb25QcmludGVyIHdpbGwgYmUgY3JlYXRlZCBmb3IgZWFjaCB0aW1lIGEgdmFyaWFibGUgaXMgcHJpbnRlZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdmFsdWU6CisgICAgICAgICAgICAgICAgQSBnZGIuVmFsdWUgb2JqZWN0LCB0aGUgdmFsdWUgdG8gcHJpbnQuCisgICAgICAgICAgICB2aXNpdGVkX2FkZHJlc3Nlc19hbmRfdHlwZXM6CisgICAgICAgICAgICAgICAgQSBzZXQgb2YgYWxsIGBhZGRyZXNzYF9gdHlwZWAgc3RyaW5nIHRoYXQgYWxyZWFkeSB2aXNpdGVkIGR1cmluZyBwcmludGluZy4KKyAgICAgICAgICAgICAgICBJZiB0aGUgYWRkcmVzcyBhbmQgdHlwZSBpcyBpbiB0aGUgc2V0IGFuZCB0aGUgdmFsdWUgaXMgYSBzdHJ1Y3Qgb3IgcG9pbnRlciwKKyAgICAgICAgICAgICAgICB0aGUgcHJpbnRlciB3aWxsIG1hcmsgJ3R5cGUnIGFzIHZpc2l0ZWQgYW5kIG5vIGxvbmdlciBleHBhbmQgdGhlIHZhbHVlLiBDYW4gYmUgTm9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLnZpc2l0ZWRfYWRkcmVzc2VzX2FuZF90eXBlcyA9IHZpc2l0ZWRfYWRkcmVzc2VzX2FuZF90eXBlcworICAgICAgICBpZiBzZWxmLnZpc2l0ZWRfYWRkcmVzc2VzX2FuZF90eXBlcyA9PSBOb25lOgorICAgICAgICAgICAgc2VsZi52aXNpdGVkX2FkZHJlc3Nlc19hbmRfdHlwZXMgPSBzZXQoKQorCisgICAgICAgICMgdmFsdWUgbWF5IG5vdCBoYXZlIGFkZHJlc3MgYXR0cmlidXRlIGlmIGl0J3MgaW4gcmVnaXN0ZXIKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLnZhbHVlLCAnYWRkcmVzcycpIGFuZCBzZWxmLnZhbHVlLmFkZHJlc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSBoZXgoaW50cHRyKHNlbGYudmFsdWUuYWRkcmVzcykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSBOb25lCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiIgR2RiIFB5dGhvbiBpbnRlcmZhY2UgdG8gcHJpbnQgYSBnZGIuVmFsdWUuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUganNvbiBmb3JtYXQgb2YgYSBnZGIuVmFsdWUuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4ganNvbi5kdW1wcyhzZWxmLnRvX2pzb24oKSwgaW5kZW50PTQpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgdG9fanNvbihzZWxmKToKKyAgICAgICAgIiIiIFRoZSBtZXRob2QgdG8gYmUgaW1wbGVtZW50ZWQuIENvbnZlcnQgYSBnZGIuVmFsdWUgb2JqZWN0IGludG8gYSBQeXRob24ganNvbiBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgUHl0aG9uIGpzb24gb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgIyB3ZSB1c2UgYWRkcmVzcyBhbmQgdHlwZSB0byBpZGVudGlmeSBhIHByaW50ZWQgdmFsdWUgYW5kIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMKKyAgICBkZWYgZ2V0X2FkZHJlc3NfdHlwZShzZWxmKToKKyAgICAgICAgYWRkcmVzc19zdHIgPSBzZWxmLmFkZHJlc3MgaWYgc2VsZi5hZGRyZXNzIGlzIG5vdCBOb25lIGVsc2UgIiIKKyAgICAgICAgcmV0dXJuIGFkZHJlc3Nfc3RyICsgIl8iICsgc3RyKHNlbGYudmFsdWUudHlwZS5zdHJpcF90eXBlZGVmcygpKQorCisKK2NsYXNzIEJhc2ljVHlwZVByaW50ZXIoSnNvblByaW50ZXIpOgorICAgICIiIiBQcmludGVyIGZvciBiYXNpYyB0eXBlcywgbm93IHN1cHBvcnRzIEVudW0sIEludCwgRmxvYXQsIGFuZCBWb2lkLgorCisgICAgQWxsIGludGVnZXIgdmFyaWFibGVzIGluIEMrKyB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgSW50LCBlLmcuIGNoYXIsIHNob3J0LCBsb25nLiBTaW1pbGFybHksCisgICAgZmxvYXQgYW5kIGRvdWJsZSBhcmUgYWxsIGNvbnNpZGVyZWQgYXMgRmxvYXQuIEZvciBlbnVtIHZhcmlhYmxlcywgdGhleSBhcmUgYWN0dWFsbHkgaW50IGluCisgICAgQysrLCBnZGIga25vd3MgdGhleSBhcmUgZW51bSB2YXJpYWJsZXMsIGJ1dCBjYW4gb25seSBwcmludCB0aGVtIGFzIGludGVnZXIuCisgICAgIiIiCisKKyAgICAiIiIKKyAgICBCYXNpY1R5cGVQcmludGVyIHVzZXMgdGhpcyBkaWN0IHRvIHByaW50IGJhc2ljX3R5cGVzLgorICAgICIiIgorICAgIGJhc2ljX3R5cGVfanNvbl9pbmZvID0geworICAgICAgICBnZGIuVFlQRV9DT0RFX0VOVU06IHsndHlwZSc6ICdlbnVtJywgJ3ZhbHVlX2Z1bmMnOiBsYW1iZGEgdmFsdWU6IHN0cihpbnQodmFsdWUpKX0sCisgICAgICAgIGdkYi5UWVBFX0NPREVfSU5UOiB7J3R5cGUnOiAnaW50JywgJ3ZhbHVlX2Z1bmMnOiBsYW1iZGEgdmFsdWU6IHN0cihpbnQodmFsdWUpKX0sCisgICAgICAgIGdkYi5UWVBFX0NPREVfRkxUOiB7J3R5cGUnOiAnZmxvYXQnLCAndmFsdWVfZnVuYyc6IGxhbWJkYSB2YWx1ZTogc3RyKGZsb2F0KHZhbHVlKSl9LAorICAgICAgICBnZGIuVFlQRV9DT0RFX1ZPSUQ6IHsndHlwZSc6ICd2b2lkJywgJ3ZhbHVlX2Z1bmMnOiBsYW1iZGEgdmFsdWU6IE5vbmV9LAorICAgIH0KKworICAgIEBjaGVja19vcHRpbWl6ZWRfb3V0CisgICAgQGNoZWNrX3Zpc2l0ZWQKKyAgICBkZWYgdG9fanNvbihzZWxmKToKKyAgICAgICAgIiIiIE91dHB1dCBmb3JtYXQgaXM6CisgICAgICAgIHsKKyAgICAgICAgICAgICd0eXBlJzogJ2ludCcvJ2Zsb2F0Jy8nZW51bScvJ3ZvaWQnLAorICAgICAgICAgICAgJ2N0eXBlJzogc3RyaW5nIGZvcm1hdCB0eXBlIGluIEMrKywKKyAgICAgICAgICAgICdhZGRyZXNzJzogc3RyaW5nIGZvcm1hdCBhZGRyZXNzLAorICAgICAgICAgICAgJ3ZhbHVlJzogc3RyaW5nIGZvcm1hdCB2YWx1ZQorICAgICAgICB9LgorICAgICAgICAiIiIKKyAgICAgICAgdHlwZV9jb2RlID0gc2VsZi52YWx1ZS50eXBlLnN0cmlwX3R5cGVkZWZzKCkuY29kZQorICAgICAgICBqc29uX3R5cGUgPSBCYXNpY1R5cGVQcmludGVyLmJhc2ljX3R5cGVfanNvbl9pbmZvW3R5cGVfY29kZV1bInR5cGUiXQorICAgICAgICB2YWx1ZV9mdW5jID0gQmFzaWNUeXBlUHJpbnRlci5iYXNpY190eXBlX2pzb25faW5mb1t0eXBlX2NvZGVdWyJ2YWx1ZV9mdW5jIl0KKyAgICAgICAgdmFsdWVfanNvbiA9IHsKKyAgICAgICAgICAgICd0eXBlJzoganNvbl90eXBlLAorICAgICAgICAgICAgJ2N0eXBlJzogc3RyKHNlbGYudmFsdWUudHlwZSksCisgICAgICAgICAgICAnYWRkcmVzcyc6IHNlbGYuYWRkcmVzcywKKyAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlX2Z1bmMoc2VsZi52YWx1ZSkKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWVfanNvbgorCisKK2NsYXNzIE9iamVjdFByaW50ZXIoSnNvblByaW50ZXIpOgorICAgICIiIiBBIFByaW50ZXIgZm9yIG9iamVjdHMgaW4gQysrLgorCisgICAgVGhlIGN1cnJlbnQgdmVyc2lvbiB3b24ndCBleHRyYWN0IHRoZSBkeW5hbWljL2FjdHVhbCB0eXBlIG9mIG9iamVjdHMsIGFuZCB0aGUgbWVtYmVyIHZhcmlhYmxlCisgICAgb2YgYSBwYXJlbnQvY2hpbGQgY2xhc3Mgd29uJ3QgYmUgcHJpbnRlZC4gV2UgZXhwZWN0IHRvIHN1cHBvcnQgdGhpcyBmdW5jdGlvbiBsYXRlci4KKyAgICAiIiIKKworICAgIEBjaGVja192aXNpdGVkCisgICAgZGVmIHRvX2pzb25fd2l0aG91dF9leHBhbmRpbmdfYmFzZV9jbGFzcyhzZWxmKToKKyAgICAgICAgIiIiIEEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgdG9fanNvbiBtZXRob2QuCisKKyAgICAgICAgSXQgdHJpZXMgdG8gZXh0cmFjdCBhbGwgbWVtYmVyIHZhcmlhYmxlcyBvZiBhbiBvYmplY3Qgd2l0aG91dCBjYXN0aW5nIGl0IGludG8gYmFzZSBjbGFzc2VzLgorICAgICAgICAiIiIKKyAgICAgICAgdmFsdWVfanNvbiA9IHsKKyAgICAgICAgICAgICd0eXBlJzogJ3N0cnVjdCcsCisgICAgICAgICAgICAnY3R5cGUnOiBzdHIoc2VsZi52YWx1ZS50eXBlKSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgJ2ZpZWxkcyc6IFtdCisgICAgICAgIH0KKworICAgICAgICBmb3IgZmllbGQgaW4gc2VsZi52YWx1ZS50eXBlLmZpZWxkcygpOgorICAgICAgICAgICAgaWYgbm90IGZpZWxkLmlzX2Jhc2VfY2xhc3M6CisgICAgICAgICAgICAgICAgZmllbGRfanNvbiA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkJzogZmllbGQubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogTm9uZQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZpZWxkX3ByaW50ZXIgPSBnZW5lcmFsX2xvb2t1cF9mdW5jdGlvbigKKyAgICAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZVtmaWVsZC5uYW1lXSwgc2VsZi52aXNpdGVkX2FkZHJlc3Nlc19hbmRfdHlwZXMpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmaWVsZF9qc29uWyd2YWx1ZSddID0gZmllbGRfcHJpbnRlci50b19qc29uKCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkX2pzb25bJ3ZhbHVlJ10gPSAiZXh0cmFjdCBmYWlsZWQiCisKKyAgICAgICAgICAgICAgICB2YWx1ZV9qc29uWydmaWVsZHMnXS5hcHBlbmQoZmllbGRfanNvbikKKworICAgICAgICByZXR1cm4gdmFsdWVfanNvbgorCisgICAgQGNoZWNrX29wdGltaXplZF9vdXQKKyAgICBkZWYgdG9fanNvbihzZWxmLCBjYXN0X3RvX2R5bmFtaWNfdHlwZT1UcnVlKToKKyAgICAgICAgIiIiT3V0cHV0IGZvcm1hdDoKKyAgICAgICAgeworICAgICAgICAgICAgJ3R5cGUnOiAnc3RydWN0JywKKyAgICAgICAgICAgICdjdHlwZSc6IHN0cmluZyBmb3JtYXQgdHlwZSBpbiBDKyssCisgICAgICAgICAgICAnYWRkcmVzcyc6IHN0cmluZyBmb3JtYXQgYWRkcmVzcywKKyAgICAgICAgICAgICdiYXNlX2NsYXNzZXMnOiBbXSAjIGEgbGlzdCBvZiB2YWx1ZSBjYXN0ZWQgaW50byBlYWNoIGJhc2UgY2xhc3MKKyAgICAgICAgICAgICdmaWVsZHMnOiBbXSAjIGEgbGlzdCBvZiBzdHJ1Y3QgZmllbGRzCisgICAgICAgIH0uCisgICAgICAgIEZvciBlYWNoIGZpZWxkIGluIGZpZWxkcywgaXRzIGZvcm1hdCBpczoKKyAgICAgICAgeworICAgICAgICAgICAgJ2ZpZWxkJzogc3RyaW5nIGZvcm1hdCBvZiBmaWVsZCBuYW1lLAorICAgICAgICAgICAgJ2ZpZWxkX3R5cGUnOiAnYmFzZV9jbGFzcycvJ21lbWJlcicsIGlmIGl0IGlzIGEgYmFzZSBjbGFzcy4gdGhlIHZhbHVlIHdpbGwgYmUgdGhlCisgICAgICAgICAgICBvYmplY3Qgd2hpY2ggaXMgY2FzdGVkIGludG8gdGhhdCBiYXNlX2NsYXNzLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBpcyB0aGUganNvbiBvZgorICAgICAgICAgICAgdGhlIG1lbWJlciB2YXJpYWJsZS4KKyAgICAgICAgICAgICd2YWx1ZSc6IGpzb24gb2YgdGhlIGZpZWxkCisgICAgICAgIH0uCisgICAgICAgICIiIgorICAgICAgICBpZiBjYXN0X3RvX2R5bmFtaWNfdHlwZSBhbmQgXAorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUudHlwZS5zdHJpcF90eXBlZGVmcygpICE9IHNlbGYudmFsdWUuZHluYW1pY190eXBlLnN0cmlwX3R5cGVkZWZzKCk6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0gc2VsZi52YWx1ZS5jYXN0KHNlbGYudmFsdWUuZHluYW1pY190eXBlKQorCisgICAgICAgICMgYWRkcmVzcy90eXBlIHBhaXIgaXMgc2V0IHRvIHZpc2l0ZWQgYWZ0ZXIgY2FzdGVkIHRvIGR5bmFtaWMgdHlwZSB0byBhdm9pZCBiYXNlIGNsYXNzCisgICAgICAgICMgYmVpbmcgZmlsdGVyZWQgYnkgdGhlIHZpc2l0ZWQgY2hlY2sKKyAgICAgICAgdmFsdWVfanNvbiA9IHNlbGYudG9fanNvbl93aXRob3V0X2V4cGFuZGluZ19iYXNlX2NsYXNzKCkKKworICAgICAgICAjIGlmIHRoZSB0eXBlIGlzIHZpc2l0ZWQsIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBleHBsb3JlIGl0cyBhbmNlc3RvcnMuCisgICAgICAgIGlmIHZhbHVlX2pzb25bInR5cGUiXSAhPSAidmlzaXRlZCI6CisgICAgICAgICAgICBiYXNlX2NsYXNzZXNfbGlzdCA9IFtdCisgICAgICAgICAgICBmb3IgZmllbGQgaW4gc2VsZi52YWx1ZS50eXBlLmZpZWxkcygpOgorICAgICAgICAgICAgICAgIGlmIGZpZWxkLmlzX2Jhc2VfY2xhc3M6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkX2pzb24gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAnYmFzZV9jbGFzcyc6IGZpZWxkLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBOb25lCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBiYXNlX2NsYXNzX3ByaW50ZXIgPSBPYmplY3RQcmludGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZS5jYXN0KGZpZWxkLnR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52aXNpdGVkX2FkZHJlc3Nlc19hbmRfdHlwZXMpCisgICAgICAgICAgICAgICAgICAgIGZpZWxkX2pzb25bInZhbHVlIl0gPSBiYXNlX2NsYXNzX3ByaW50ZXIudG9fanNvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc3RfdG9fZHluYW1pY190eXBlPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICBiYXNlX2NsYXNzZXNfbGlzdC5hcHBlbmQoZmllbGRfanNvbikKKyAgICAgICAgICAgIHZhbHVlX2pzb25bJ2Jhc2VfY2xhc3NlcyddID0gYmFzZV9jbGFzc2VzX2xpc3QKKworICAgICAgICByZXR1cm4gdmFsdWVfanNvbgorCisKK2NsYXNzIFJlZkFuZFB0clByaW50ZXIoSnNvblByaW50ZXIpOgorICAgICIiIiBQcmludGVyIGZvciByZWZlcmVuY2UgYW5kIHJhdyBwb2ludGVyIGluIEMrKy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgdmlzaXRlZF9hZGRyZXNzZXNfYW5kX3R5cGVzPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHZhbHVlLCB2aXNpdGVkX2FkZHJlc3Nlc19hbmRfdHlwZXMpCisgICAgICAgIHNlbGYudm9pZF9wdHJfcmUgPSByZS5jb21waWxlKHIiXi4qdm9pZFxzP1wqJCIpCisKKyAgICBAY2hlY2tfb3B0aW1pemVkX291dAorICAgIEBjaGVja192aXNpdGVkCisgICAgZGVmIHRvX2pzb24oc2VsZik6CisgICAgICAgICIiIk91dHB1dCBmb3JtYXQ6CisgICAgICAgIHsKKyAgICAgICAgICAgICd0eXBlJzogJ3BvaW50ZXInLyJyZWZlcmVuY2UsCisgICAgICAgICAgICAnY3R5cGUnOiBzdHJpbmcgZm9ybWF0IHR5cGUgaW4gQysrLAorICAgICAgICAgICAgJ2FkZHJlc3MnOiBzdHJpbmcgZm9ybWF0IGFkZHJlc3MsCisgICAgICAgICAgICAncmVmZXJlbmNlJzogSnNvbiBmb3IgYSBDKysgb2JqZWN0CisgICAgICAgIH0uCisgICAgICAgIElmIHRoZSBwb2ludGVyIGlzIGEgdm9pZCogcG9pbnRlciwgcmVmZXJlbmNlIHdvdWxkIGJlICJjYW5ub3QgZXh0cmFjdCB2b2lkIHB0ciIsCisgICAgICAgIGJlY2F1c2UgZ2RiIGNhbm5vdCBleHRyYWN0IGNvbnRlbnQgZnJvbSBhIHZvaWQqIHBvaW50ZXIuIElmIHRoZSBwb2ludGVyIGlzIG51bGxwdHIsCisgICAgICAgIHJlZmVyZW5jZSB3b3VsZCBiZSAibnVsbHB0ciIuCisgICAgICAgICIiIgorICAgICAgICB2YWx1ZV90eXBlID0gJ3BvaW50ZXInIGlmIHNlbGYudmFsdWUudHlwZS5jb2RlID09IGdkYi5UWVBFX0NPREVfUFRSIGVsc2UgJ3JlZmVyZW5jZScKKyAgICAgICAgdmFsdWVfanNvbiA9IHsKKyAgICAgICAgICAgICd0eXBlJzogdmFsdWVfdHlwZSwKKyAgICAgICAgICAgICdjdHlwZSc6IHN0cihzZWxmLnZhbHVlLnR5cGUpLAorICAgICAgICAgICAgJ2FkZHJlc3MnOiBzZWxmLmFkZHJlc3MsCisgICAgICAgICAgICAncmVmZXJlbmNlJzogTm9uZQorICAgICAgICB9CisKKyAgICAgICAgIyBoYW5kbGUgdm9pZCBwb2ludGVyLCBkZXJlZmVyZW5jZSBhIHZvaWQgcG9pbnRlciB3aWxsIGNhdXNlIGV4Y2VwdGlvbgorICAgICAgICBpZiBzZWxmLnZvaWRfcHRyX3JlLm1hdGNoKHN0cihzZWxmLnZhbHVlLnR5cGUuc3RyaXBfdHlwZWRlZnMoKSkpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdmFsdWVfanNvblsncmVmZXJlbmNlJ10gPSAiY2Fubm90IGV4dHJhY3Qgdm9pZCBwdHIiCisgICAgICAgICAgICByZXR1cm4gdmFsdWVfanNvbgorCisgICAgICAgICMgaGFuZGxlIG51bGxwdHIKKyAgICAgICAgaWYgdmFsdWVfdHlwZSA9PSAncG9pbnRlcicgYW5kIGludChzZWxmLnZhbHVlKSA9PSAwOgorICAgICAgICAgICAgdmFsdWVfanNvblsncmVmZXJlbmNlJ10gPSAibnVsbHB0ciIKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZV9qc29uCisKKyAgICAgICAgZGVyZWZfdmFsdWUgPSBzZWxmLnZhbHVlLnJlZmVyZW5jZWRfdmFsdWUoKQorICAgICAgICBkZXJlZl92YWx1ZV9wcmludGVyID0gZ2VuZXJhbF9sb29rdXBfZnVuY3Rpb24oCisgICAgICAgICAgICBkZXJlZl92YWx1ZSwgc2VsZi52aXNpdGVkX2FkZHJlc3Nlc19hbmRfdHlwZXMpCisgICAgICAgIHZhbHVlX2pzb25bJ3JlZmVyZW5jZSddID0gZGVyZWZfdmFsdWVfcHJpbnRlci50b19qc29uKCkKKyAgICAgICAgcmV0dXJuIHZhbHVlX2pzb24KKworCitjbGFzcyBFeHRyYWN0RmFpbGVkUHJpbnRlcihKc29uUHJpbnRlcik6CisgICAgIiIiIFByaW50ZXIgZm9yIHRoZSBjYXNlIHRoYXQgY2Fubm90IGJlIGV4dHJhY3RlZCBieSBjdXJyZW50IHByaW50ZXIuCisgICAgIiIiCisKKyAgICBkZWYgdG9fanNvbihzZWxmKToKKyAgICAgICAgIiIiIG91dHB1dCBmb3JtYXQ6IHsndHlwZSc6ICdleHRyYWN0IGZhaWxlZCd9CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4geyd0eXBlJzogJ2V4dHJhY3QgZmFpbGVkJ30KKworCitjbGFzcyBPcHRpbWl6ZWRPdXRQcmludGVyKEpzb25QcmludGVyKToKKyAgICAiIiIgUHJpbnRlciBmb3IgdGhlIGNhc2UgdGhhdCBhIHZhcmlhYmxlIGlzIGFscmVhZHkgb3B0aW1pemVkIG91dC4KKyAgICAiIiIKKworICAgIGRlZiB0b19qc29uKHNlbGYpOgorICAgICAgICAiIiIgT3V0cHV0IGZvcm1hdDogeyd0eXBlJzogJ29wdGltaXplZCBvdXQnfS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB7J3R5cGUnOiAnb3B0aW1pemVkIG91dCd9CisKKworY2xhc3MgU3RhY2tBcnJheVByaW50ZXIoSnNvblByaW50ZXIpOgorICAgICIiIiBQcmludGVyIGZvciB0aGUgYXJyYXlzIGluIEMrKy4KKworICAgIE5vdGUgdGhhdCB0aGlzIHByaW50ZXIgd29ya3Mgb25seSBmb3IgQysrIGFycmF5cyh3aXRoIHR5cGU9IFRbXSkuIEl0IGNhbm5vdAorICAgIHByaW50IG91dCBidWZmZXJzIG9uIGhlYXAuCisgICAgT3V0cHV0IGZvcm1hdDoKKyAgICB7CisgICAgICAgICd0eXBlJzogJ2FycmF5JywKKyAgICAgICAgJ2VsZW1lbnRfdHlwZSc6IHN0cmluZyBmb3JtYXQgdHlwZSBvZiBhcnJheSBlbGVtZW50cyBpbiBDKyssCisgICAgICAgICd2YWx1ZXMnOiBBIGxpc3Qgb2YgVmFsdWUganNvbiBpbmRpY2lhdGluZyBlYWNoIGVsZW1lbnQgaW4gYXJyYXkKKyAgICB9LgorICAgICIiIgorICAgIEBjaGVja19vcHRpbWl6ZWRfb3V0CisgICAgQGNoZWNrX3Zpc2l0ZWQKKyAgICBkZWYgdG9fanNvbihzZWxmKToKKyAgICAgICAgdG90YWxfc2l6ZSA9IHNlbGYudmFsdWUudHlwZS5zaXplb2YKKyAgICAgICAgZWxlbWVudF9zaXplID0gc2VsZi52YWx1ZS50eXBlLnRhcmdldCgpLnNpemVvZgorICAgICAgICBlbGVtZW50X2NvdW50ID0gdG90YWxfc2l6ZSAvLyBlbGVtZW50X3NpemUKKyAgICAgICAgc3RhY2tfYXJyYXlfanNvbiA9IHsKKyAgICAgICAgICAgICd0eXBlJzogJ2FycmF5JywKKyAgICAgICAgICAgICdlbGVtZW50X3R5cGUnOiBzdHIoc2VsZi52YWx1ZS50eXBlLnRhcmdldCgpKSwKKyAgICAgICAgICAgICd2YWx1ZXMnOiBbXQorICAgICAgICB9CisgICAgICAgIGZvciBpZHggaW4gcmFuZ2UoZWxlbWVudF9jb3VudCk6CisgICAgICAgICAgICBlbGVtZW50X2pzb24gPSBnZW5lcmFsX2xvb2t1cF9mdW5jdGlvbigKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlW2lkeF0sIHNlbGYudmlzaXRlZF9hZGRyZXNzZXNfYW5kX3R5cGVzKS50b19qc29uKCkKKyAgICAgICAgICAgIHN0YWNrX2FycmF5X2pzb25bJ3ZhbHVlcyddLmFwcGVuZChlbGVtZW50X2pzb24pCisgICAgICAgIHJldHVybiBzdGFja19hcnJheV9qc29uCisKKworIiIiIFRoZSB0YWJsZSBpbmRpY2lhdGluZyB3aGljaCBwcmludGVyIHNob3VsZCBiZSBjYWxsZWQgZ2l2ZW4gYSBnZGIgdmFsdWUuCisiIiIKK2dkYl90eXBlX3ByaW50ZXJfbWFwID0geworICAgIGdkYi5UWVBFX0NPREVfUFRSOiBSZWZBbmRQdHJQcmludGVyLAorICAgIGdkYi5UWVBFX0NPREVfQVJSQVk6IFN0YWNrQXJyYXlQcmludGVyLAorICAgIGdkYi5UWVBFX0NPREVfU1RSVUNUOiBPYmplY3RQcmludGVyLAorICAgIGdkYi5UWVBFX0NPREVfVU5JT046IE9iamVjdFByaW50ZXIsCisgICAgZ2RiLlRZUEVfQ09ERV9FTlVNOiBCYXNpY1R5cGVQcmludGVyLAorICAgIGdkYi5UWVBFX0NPREVfRkxBR1M6IE5vbmUsCisgICAgZ2RiLlRZUEVfQ09ERV9GVU5DOiBOb25lLAorICAgIGdkYi5UWVBFX0NPREVfSU5UOiBCYXNpY1R5cGVQcmludGVyLAorICAgIGdkYi5UWVBFX0NPREVfRkxUOiBCYXNpY1R5cGVQcmludGVyLAorICAgIGdkYi5UWVBFX0NPREVfVk9JRDogQmFzaWNUeXBlUHJpbnRlciwKKyAgICBnZGIuVFlQRV9DT0RFX1NFVDogTm9uZSwgICAgIyBub3QgZXhpc3QgaW4gQysrCisgICAgZ2RiLlRZUEVfQ09ERV9SQU5HRTogTm9uZSwgICAgIyBub3QgZXhpc3QgaW4gQysrPworICAgICMgbm90IGV4aXN0IGluIEMrKywgaW4gQysrLCBzdHJpbmcgaXMgbm90IGEgYnVpbHQtaW4gdHlwZQorICAgIGdkYi5UWVBFX0NPREVfU1RSSU5HOiBOb25lLAorICAgIGdkYi5UWVBFX0NPREVfQklUU1RSSU5HOiBOb25lLCAgIyBkZXByZWNhdGVkCisgICAgZ2RiLlRZUEVfQ09ERV9FUlJPUjogTm9uZSwKKyAgICBnZGIuVFlQRV9DT0RFX01FVEhPRDogTm9uZSwKKyAgICBnZGIuVFlQRV9DT0RFX01FVEhPRFBUUjogTm9uZSwKKyAgICBnZGIuVFlQRV9DT0RFX01FTUJFUlBUUjogTm9uZSwKKyAgICBnZGIuVFlQRV9DT0RFX1JFRjogUmVmQW5kUHRyUHJpbnRlciwKKyAgICBnZGIuVFlQRV9DT0RFX1JWQUxVRV9SRUY6IE5vbmUsCisgICAgZ2RiLlRZUEVfQ09ERV9DSEFSOiBOb25lLCAgICMgY2hhciBpcyBhbiBpbnRlZ2VyIGluIEMrKworICAgIGdkYi5UWVBFX0NPREVfQk9PTDogTm9uZSwgICAjIGJvb2wgaXMgYWN0dWFsbHkgY2hhciBpbiBDKysKKyAgICBnZGIuVFlQRV9DT0RFX0NPTVBMRVg6IE5vbmUsICAgICMgbm90IGV4aXN0IGluIEMrKworICAgIGdkYi5UWVBFX0NPREVfVFlQRURFRjogTm9uZSwKKyAgICBnZGIuVFlQRV9DT0RFX05BTUVTUEFDRTogTm9uZSwKKyAgICBnZGIuVFlQRV9DT0RFX0RFQ0ZMT0FUOiBOb25lLCAgICAjIG5vdCBleGlzdCBpbiBDKysKKyAgICBnZGIuVFlQRV9DT0RFX0lOVEVSTkFMX0ZVTkNUSU9OOiBOb25lCit9CisKKworZGVmIGdlbmVyYWxfbG9va3VwX2Z1bmN0aW9uKHZhbHVlLCB2aXNpdGVkX2FkZHJlc3Nlc19hbmRfdHlwZXM9Tm9uZSk6CisgICAgIiIiIFRoZSBhY3R1YWwgcHJpbnRlciBpbnN0YWxsZWQsIGl0IHdpbGwgc2VsZWN0IEpzb25QcmludGVyIGJhc2VkIG9uIHRoZSBnZGIgdmFsdWUgZ2l2ZW4uCisgICAgIiIiCisgICAgaWYgdmFsdWUuaXNfb3B0aW1pemVkX291dDoKKyAgICAgICAgcmV0dXJuIE9wdGltaXplZE91dFByaW50ZXIodmFsdWUpCisgICAgdHlwZV9jb2RlID0gdmFsdWUudHlwZS5zdHJpcF90eXBlZGVmcygpLmNvZGUKKyAgICBpZiB0eXBlX2NvZGUgbm90IGluIGdkYl90eXBlX3ByaW50ZXJfbWFwIG9yIGdkYl90eXBlX3ByaW50ZXJfbWFwW3R5cGVfY29kZV0gaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIEV4dHJhY3RGYWlsZWRQcmludGVyKHZhbHVlKQorCisgICAgIyBUT0RPOiBhZGQgcmVnZXggbWF0Y2ggYW5kIHNwZWNpZmljIHByaW50ZXIgZm9yIHNvbWUgdHlwZSBoZXJlPyBzdWNoIGFzIHNoYXJlZF9wdHIKKworICAgIHJldHVybiBnZGJfdHlwZV9wcmludGVyX21hcFt0eXBlX2NvZGVdKHZhbHVlLCB2aXNpdGVkX2FkZHJlc3Nlc19hbmRfdHlwZXMpCisKKworZGVmIHJlZ2lzdGVyX3ByaW50ZXJzKCk6CisgICAgIiIiIENhbGwgdGhpcyBmdW5jdGlvbiBpbiB5b3VyIH4vLmdkYmluaXQgdG8gcmVnaXN0ZXIgdGhlIHByaW50ZXIgaW50byBnZGIuCisgICAgIiIiCisgICAgZ2RiLnByZXR0eV9wcmludGVycy5hcHBlbmQoZ2VuZXJhbF9sb29rdXBfZnVuY3Rpb24pCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci9nZGJpbml0IGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvZ2RiaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDEwOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvZ2RiaW5pdApAQCAtMCwwICsxLDcgQEAKK3NldCBhdXRvLWxvYWQgcHl0aG9uLXNjcmlwdHMgb2ZmCitweXRob24KK2ltcG9ydCBzeXMKK3N5cy5wYXRoLmluc2VydCgwLCAnPHBhdGhfdG9fZ2RiX2pzb25fcHJpbnRlcj4nKQorZnJvbSBnZGJfanNvbl9wcmludGVyLnByaW50ZXJzIGltcG9ydCByZWdpc3Rlcl9wcmludGVycworcmVnaXN0ZXJfcHJpbnRlcnMoKQorZW5kClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9hcnJheV80Ml9hLmpzb24gYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L2FycmF5XzQyX2EuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTE4OTAwCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9hcnJheV80Ml9hLmpzb24KQEAgLTAsMCArMSwzNiBAQAoreworICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAiZWxlbWVudF90eXBlIjogImludDE2X3QiLAorICAgICJ2YWx1ZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAiY3R5cGUiOiAiaW50MTZfdCIsCisgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc2NiIsCisgICAgICAgICAgICAidmFsdWUiOiAiMSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICJjdHlwZSI6ICJpbnQxNl90IiwKKyAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzY4IiwKKyAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgImN0eXBlIjogImludDE2X3QiLAorICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3NmEiLAorICAgICAgICAgICAgInZhbHVlIjogIjMiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAiY3R5cGUiOiAiaW50MTZfdCIsCisgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc2YyIsCisgICAgICAgICAgICAidmFsdWUiOiAiNCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICJjdHlwZSI6ICJpbnQxNl90IiwKKyAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzZlIiwKKyAgICAgICAgICAgICJ2YWx1ZSI6ICI1IgorICAgICAgICB9CisgICAgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvYXJyYXlfNDJfYi5qc29uIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9hcnJheV80Ml9iLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkZjBiNAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvYXJyYXlfNDJfYi5qc29uCkBAIC0wLDAgKzEsMTEgQEAKK3sKKyAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAiY3R5cGUiOiAiaW50MTZfdCAqIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc3OCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgImN0eXBlIjogImludDE2X3QiLAorICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc2YSIsCisgICAgICAgICJ2YWx1ZSI6ICIzIgorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L2FycmF5XzQyX2Jhci5qc29uIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9hcnJheV80Ml9iYXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDJmNWJlCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9hcnJheV80Ml9iYXIuanNvbgpAQCAtMCwwICsxLDU3IEBACit7CisgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICJlbGVtZW50X3R5cGUiOiAiQmFyIiwKKyAgICAidmFsdWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgImN0eXBlIjogIkJhciIsCisgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcyYSIsCisgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgImN0eXBlIjogIkJhciIsCisgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcyYyIsCisgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzJjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgImN0eXBlIjogIkJhciIsCisgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcyZSIsCisgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICB9CisgICAgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvYXJyYXlfNDJfZm9vLmpzb24gYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L2FycmF5XzQyX2Zvby5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZmQ2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L2FycmF5XzQyX2Zvby5qc29uCkBAIC0wLDAgKzEsMTMyIEBACit7CisgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICJlbGVtZW50X3R5cGUiOiAiRm9vIiwKKyAgICAidmFsdWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDczMCIsCisgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImEiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQ4X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3MzAiLAorICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImJhciIsCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkJhciAqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzM4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiQmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcyYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcyYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc0MCIsCisgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImEiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQ4X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3NDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImJhciIsCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkJhciAqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzQ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiQmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcyYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcyYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc1MCIsCisgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImEiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQ4X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3NTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImJhciIsCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkJhciAqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzU4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiQmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcyZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcyZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICB9CisgICAgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvZ2RiX2pzb25fcHJpbnRlcl90ZXN0LnB5IGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9nZGJfanNvbl9wcmludGVyX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2YjQwZQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvZ2RiX2pzb25fcHJpbnRlcl90ZXN0LnB5CkBAIC0wLDAgKzEsMjM2IEBACisjICAgQ29weXJpZ2h0IDIwMjAgLSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGdkYgoraW1wb3J0IGpzb24KKworCitkZWYgcmVtb3ZlX2dkYl9vdXRwdXRfcHJlZml4KHN0cik6CisgICAgIiIiIGdkYiBvdXRwdXQgY29udGFpbnMgYSAiJCVkID0iIHByZWZpeCwgdGhlIGZ1bmN0aW9uIHJlbW92ZSB0aGUgcHJlZml4CisgICAgIiIiCisgICAgaWR4ID0gc3RyLmZpbmQoIj0iKQorICAgIHJldHVybiBzdHJbaWR4ICsgMTpdCisKKworZGVmIGNoZWNrX3R5cGVfYW5kX2N0eXBlKGlucHV0X2pzb24sIGlucHV0X3R5cGUsIGN0eXBlKToKKyAgICBhc3NlcnQoaW5wdXRfanNvblsidHlwZSJdID09IGlucHV0X3R5cGUpCisgICAgYXNzZXJ0KGlucHV0X2pzb25bImN0eXBlIl0gPT0gY3R5cGUpCisKKworZGVmIGNoZWNrX2Jhc2ljX3ZhbHVlKGlucHV0X2pzb24sIGlucHV0X3R5cGUsIGN0eXBlLCB2YWx1ZSk6CisgICAgY2hlY2tfdHlwZV9hbmRfY3R5cGUoaW5wdXRfanNvbiwgaW5wdXRfdHlwZSwgY3R5cGUpCisgICAgYXNzZXJ0KGlucHV0X2pzb25bInZhbHVlIl0gPT0gdmFsdWUpCisKKworZGVmIGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24odmFyaWFibGVfbmFtZSk6CisgICAgIiIiIGV4dHJhY3QgYSB2YXJpYWJsZSBmcm9tIGdkYgorCisgICAgQXJnczoKKyAgICAgICAgdmFyaWFibGVfbmFtZToKKyAgICAgICAgICAgIGEgc3RyaW5nLCB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gZXh0cmFjdAorICAgIFJldHVybnM6CisgICAgICAgIEEganNvbiBPYmplY3QgaW4gUHl0aG9uCisgICAgIiIiCisgICAgdmFyaWFibGUgPSBnZGIuZXhlY3V0ZSgicCB7fSIuZm9ybWF0KHZhcmlhYmxlX25hbWUpLCB0b19zdHJpbmc9VHJ1ZSkKKyAgICB2YXJpYWJsZSA9IHJlbW92ZV9nZGJfb3V0cHV0X3ByZWZpeCh2YXJpYWJsZSkKKyAgICB2YXJpYWJsZV9qc29uID0ganNvbi5sb2Fkcyh2YXJpYWJsZSkKKyAgICByZXR1cm4gdmFyaWFibGVfanNvbgorCisKK2RlZiBqc29uX2VxdWFsX2V4Y2VwdF9hZGRyZXNzKHRlc3RjYXNlLCBqc29uMCwganNvbjEpOgorICAgICIiIiBjaGVjayBpZiBhbGwgY29udGVudCBvZiB0d28ganNvbiBhcmUgc2FtZSBleGNlcHQgdGhlIGFkZHJlc3MgZmllbGRzCisKKyAgICBUaGUgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgdHdvIGpzb24gb2JqZWN0cyByZWN1cnNpdmVseSB0byBzZXQgYWRkcmVzcyBmaWVsZHMgdG8gTm9uZSwKKyAgICB0aGVuIGNvbnZlcnQgdHdvIGpzb24gb2JqZWN0cyBpbnRvIHN0cmluZ3Mgd2l0aCBzb3J0ZWQga2V5cywgYW5kIGNoZWNrIGlmIHRoZSB0d28gc3RyaW5ncworICAgIGFyZSBzYW1lLgorICAgICIiIgorICAgIGRlZiByZXBsYWNlX2FkZHJlc3NfYnlfTm9uZShpbnB1dF9qc29uKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dF9qc29uLCBkaWN0KToKKyAgICAgICAgICAgIGZvciAoaywgdikgaW4gaW5wdXRfanNvbi5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGsgPT0gImFkZHJlc3MiOgorICAgICAgICAgICAgICAgICAgICBpbnB1dF9qc29uW2tdID0gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VfYWRkcmVzc19ieV9Ob25lKHYpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShpbnB1dF9qc29uLCBsaXN0KToKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGlucHV0X2pzb246CisgICAgICAgICAgICAgICAgcmVwbGFjZV9hZGRyZXNzX2J5X05vbmUoaXRlbSkKKworICAgIHJlcGxhY2VfYWRkcmVzc19ieV9Ob25lKGpzb24wKQorICAgIHJlcGxhY2VfYWRkcmVzc19ieV9Ob25lKGpzb24xKQorICAgIGpzb24wID0ganNvbi5kdW1wcyhqc29uMCwgc29ydF9rZXlzPVRydWUpCisgICAganNvbjEgPSBqc29uLmR1bXBzKGpzb24xLCBzb3J0X2tleXM9VHJ1ZSkKKyAgICB0ZXN0Y2FzZS5hc3NlcnRFcXVhbChqc29uMCwganNvbjEpCisKKworZGVmIHRlc3RfanNvbl92YXJpYWJsZSh0ZXN0Y2FzZSwgdGVzdG5hbWUsIGxpbmUsIHZhcmlhYmxlX25hbWVfbGlzdCk6CisgICAgZm9yIHZhcmlhYmxlX25hbWUgaW4gdmFyaWFibGVfbmFtZV9saXN0OgorICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbih2YXJpYWJsZV9uYW1lKQorICAgICAgICB3aXRoIG9wZW4oInRlc3Qve31fe31fe30uanNvbiIuZm9ybWF0KHRlc3RuYW1lLCBzdHIobGluZSksIHZhcmlhYmxlX25hbWUpLCAiciIpIGFzIGY6CisgICAgICAgICAgICBleHBlY3RfdmFyaWFibGUgPSBqc29uLmxvYWQoZikKKyAgICAgICAganNvbl9lcXVhbF9leGNlcHRfYWRkcmVzcyh0ZXN0Y2FzZSwgdmFyaWFibGVfanNvbiwgZXhwZWN0X3ZhcmlhYmxlKQorCisKK2NsYXNzIFRlc3RHZGJKc29uUHJpbnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2Jhc2ljX3R5cGVzKHNlbGYpOgorICAgICAgICBnZGIuZXhlY3V0ZSgiZmlsZSB0ZXN0X2V4YW1wbGVzL2Jhc2ljX3R5cGVzIikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImIgNDIiKQorICAgICAgICBnZGIuZXhlY3V0ZSgiciIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oImEiKQorICAgICAgICBjaGVja19iYXNpY192YWx1ZSh2YXJpYWJsZV9qc29uLCAiaW50IiwgInVpbnQ4X3QiLCAiMSIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oImEiKQorICAgICAgICBjaGVja19iYXNpY192YWx1ZSh2YXJpYWJsZV9qc29uLCAiaW50IiwgInVpbnQ4X3QiLCAiMSIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oImIiKQorICAgICAgICBjaGVja19iYXNpY192YWx1ZSh2YXJpYWJsZV9qc29uLCAiaW50IiwgImludDhfdCIsICItMiIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oImMiKQorICAgICAgICBjaGVja19iYXNpY192YWx1ZSh2YXJpYWJsZV9qc29uLCAiaW50IiwgInVpbnQxNl90IiwgIjMiKQorCisgICAgICAgIHZhcmlhYmxlX2pzb24gPSBnZGJfZXh0cmFjdF92YXJpYWJsZV90b19qc29uKCJkIikKKyAgICAgICAgY2hlY2tfYmFzaWNfdmFsdWUodmFyaWFibGVfanNvbiwgImludCIsICJpbnQxNl90IiwgIi00IikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigiZSIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJpbnQiLCAidWludDMyX3QiLCAiNSIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oImYiKQorICAgICAgICBjaGVja19iYXNpY192YWx1ZSh2YXJpYWJsZV9qc29uLCAiaW50IiwgImludDMyX3QiLCAiLTYiKQorCisgICAgICAgIHZhcmlhYmxlX2pzb24gPSBnZGJfZXh0cmFjdF92YXJpYWJsZV90b19qc29uKCJnIikKKyAgICAgICAgY2hlY2tfYmFzaWNfdmFsdWUodmFyaWFibGVfanNvbiwgImludCIsICJ1aW50NjRfdCIsICI3IikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigiaCIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJpbnQiLCAiaW50NjRfdCIsICItOCIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oImkiKQorICAgICAgICBjaGVja19iYXNpY192YWx1ZSh2YXJpYWJsZV9qc29uLCAiZmxvYXQiLCAiZmxvYXQiLCAiOS4wIikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigiaiIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJmbG9hdCIsICJkb3VibGUiLCAiLTEwLjAiKQorCisgICAgICAgIHZhcmlhYmxlX2pzb24gPSBnZGJfZXh0cmFjdF92YXJpYWJsZV90b19qc29uKCJrIikKKyAgICAgICAgY2hlY2tfdHlwZV9hbmRfY3R5cGUodmFyaWFibGVfanNvbiwgInBvaW50ZXIiLCAiY29uc3QgY2hhciAqIikKKyAgICAgICAgY2hlY2tfYmFzaWNfdmFsdWUoCisgICAgICAgICAgICB2YXJpYWJsZV9qc29uWyJyZWZlcmVuY2UiXSwgImludCIsICJjb25zdCBjaGFyIiwgIjcyIikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigibCIpCisgICAgICAgIGNoZWNrX3R5cGVfYW5kX2N0eXBlKHZhcmlhYmxlX2pzb24sICJwb2ludGVyIiwgInZvaWQgKiIpCisgICAgICAgIGFzc2VydCh2YXJpYWJsZV9qc29uWyJyZWZlcmVuY2UiXSA9PSAiY2Fubm90IGV4dHJhY3Qgdm9pZCBwdHIiKQorCisgICAgICAgIHZhcmlhYmxlX2pzb24gPSBnZGJfZXh0cmFjdF92YXJpYWJsZV90b19qc29uKCJtIikKKyAgICAgICAgY2hlY2tfdHlwZV9hbmRfY3R5cGUodmFyaWFibGVfanNvbiwgInBvaW50ZXIiLCAiY2hhciAqIikKKyAgICAgICAgYXNzZXJ0KHZhcmlhYmxlX2pzb25bInJlZmVyZW5jZSJdID09ICJudWxscHRyIikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigibyIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJlbnVtIiwgIkFuaW1hbCIsICIwIikKKworICAgICAgICBnZGIuZXhlY3V0ZSgiYiA2MSIpCisgICAgICAgIGdkYi5leGVjdXRlKCJjIikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigiYSIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJpbnQiLCAiY29uc3QgdWludDhfdCIsICIxIikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigiYSIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJpbnQiLCAiY29uc3QgdWludDhfdCIsICIxIikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigiYiIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJpbnQiLCAiY29uc3QgaW50OF90IiwgIi0yIikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigiYyIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJpbnQiLCAiY29uc3QgdWludDE2X3QiLCAiMyIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oImQiKQorICAgICAgICBjaGVja19iYXNpY192YWx1ZSh2YXJpYWJsZV9qc29uLCAiaW50IiwgImNvbnN0IGludDE2X3QiLCAiLTQiKQorCisgICAgICAgIHZhcmlhYmxlX2pzb24gPSBnZGJfZXh0cmFjdF92YXJpYWJsZV90b19qc29uKCJlIikKKyAgICAgICAgY2hlY2tfYmFzaWNfdmFsdWUodmFyaWFibGVfanNvbiwgImludCIsICJjb25zdCB1aW50MzJfdCIsICI1IikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigiZiIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJpbnQiLCAiY29uc3QgaW50MzJfdCIsICItNiIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oImciKQorICAgICAgICBjaGVja19iYXNpY192YWx1ZSh2YXJpYWJsZV9qc29uLCAiaW50IiwgImNvbnN0IHVpbnQ2NF90IiwgIjciKQorCisgICAgICAgIHZhcmlhYmxlX2pzb24gPSBnZGJfZXh0cmFjdF92YXJpYWJsZV90b19qc29uKCJoIikKKyAgICAgICAgY2hlY2tfYmFzaWNfdmFsdWUodmFyaWFibGVfanNvbiwgImludCIsICJjb25zdCBpbnQ2NF90IiwgIi04IikKKworICAgICAgICB2YXJpYWJsZV9qc29uID0gZ2RiX2V4dHJhY3RfdmFyaWFibGVfdG9fanNvbigiaSIpCisgICAgICAgIGNoZWNrX2Jhc2ljX3ZhbHVlKHZhcmlhYmxlX2pzb24sICJmbG9hdCIsICJjb25zdCBmbG9hdCIsICI5LjAiKQorCisgICAgICAgIHZhcmlhYmxlX2pzb24gPSBnZGJfZXh0cmFjdF92YXJpYWJsZV90b19qc29uKCJqIikKKyAgICAgICAgY2hlY2tfYmFzaWNfdmFsdWUodmFyaWFibGVfanNvbiwgImZsb2F0IiwgImNvbnN0IGRvdWJsZSIsICItMTAuMCIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oImsiKQorICAgICAgICBjaGVja190eXBlX2FuZF9jdHlwZSh2YXJpYWJsZV9qc29uLCAicG9pbnRlciIsICJjb25zdCBjaGFyICoiKQorICAgICAgICBjaGVja19iYXNpY192YWx1ZSgKKyAgICAgICAgICAgIHZhcmlhYmxlX2pzb25bInJlZmVyZW5jZSJdLCAiaW50IiwgImNvbnN0IGNoYXIiLCAiNzIiKQorCisgICAgICAgIHZhcmlhYmxlX2pzb24gPSBnZGJfZXh0cmFjdF92YXJpYWJsZV90b19qc29uKCJsIikKKyAgICAgICAgY2hlY2tfdHlwZV9hbmRfY3R5cGUodmFyaWFibGVfanNvbiwgInBvaW50ZXIiLCAiY29uc3Qgdm9pZCAqIikKKyAgICAgICAgYXNzZXJ0KHZhcmlhYmxlX2pzb25bInJlZmVyZW5jZSJdID09ICJjYW5ub3QgZXh0cmFjdCB2b2lkIHB0ciIpCisKKyAgICAgICAgdmFyaWFibGVfanNvbiA9IGdkYl9leHRyYWN0X3ZhcmlhYmxlX3RvX2pzb24oIm0iKQorICAgICAgICBjaGVja190eXBlX2FuZF9jdHlwZSh2YXJpYWJsZV9qc29uLCAicG9pbnRlciIsICJjb25zdCBjaGFyICoiKQorICAgICAgICBhc3NlcnQodmFyaWFibGVfanNvblsicmVmZXJlbmNlIl0gPT0gIm51bGxwdHIiKQorCisgICAgICAgIHZhcmlhYmxlX2pzb24gPSBnZGJfZXh0cmFjdF92YXJpYWJsZV90b19qc29uKCJvIikKKyAgICAgICAgY2hlY2tfYmFzaWNfdmFsdWUodmFyaWFibGVfanNvbiwgImVudW0iLCAiY29uc3QgQW5pbWFsIiwgIjEiKQorCisgICAgZGVmIHRlc3Rfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImZpbGUgdGVzdF9leGFtcGxlcy9vYmplY3RzIikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImIgMzciKQorICAgICAgICBnZGIuZXhlY3V0ZSgiciIpCisgICAgICAgIHRlc3RfanNvbl92YXJpYWJsZShzZWxmLCAib2JqZWN0cyIsIDM3LCBbImJhciIsICJmb28iXSkKKworICAgIGRlZiB0ZXN0X29iamVjdHMxKHNlbGYpOgorICAgICAgICBnZGIuZXhlY3V0ZSgiZmlsZSB0ZXN0X2V4YW1wbGVzL29iamVjdHMxIikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImIgNDEiKQorICAgICAgICBnZGIuZXhlY3V0ZSgiciIpCisgICAgICAgIHRlc3RfanNvbl92YXJpYWJsZShzZWxmLCAib2JqZWN0czEiLCA0MSwgWyJiYXIiLCAiZm9vIl0pCisKKyAgICBkZWYgdGVzdF9vYmplY3RzMihzZWxmKToKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImZpbGUgdGVzdF9leGFtcGxlcy9vYmplY3RzMiIpCisgICAgICAgIGdkYi5leGVjdXRlKCJiIDg1IikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoInIiKQorICAgICAgICB0ZXN0X2pzb25fdmFyaWFibGUoCisgICAgICAgICAgICBzZWxmLAorICAgICAgICAgICAgIm9iamVjdHMyIiwKKyAgICAgICAgICAgIDg1LAorICAgICAgICAgICAgWyJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJ3IiwgIngiLCAieSIsICJ6Il0pCisKKyAgICBkZWYgdGVzdF9hcnJheShzZWxmKToKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImZpbGUgdGVzdF9leGFtcGxlcy9hcnJheSIpCisgICAgICAgIGdkYi5leGVjdXRlKCJiIDQyIikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoInIiKQorICAgICAgICB0ZXN0X2pzb25fdmFyaWFibGUoc2VsZiwgImFycmF5IiwgNDIsIFsiYSIsICJiIiwgImJhciIsICJmb28iXSkKKworICAgIGRlZiB0ZXN0X3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImZpbGUgdGVzdF9leGFtcGxlcy9yZWZlcmVuY2UiKQorICAgICAgICBnZGIuZXhlY3V0ZSgiYiA0MSIpCisgICAgICAgIGdkYi5leGVjdXRlKCJyIikKKyAgICAgICAgdGVzdF9qc29uX3ZhcmlhYmxlKAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgICJyZWZlcmVuY2UiLAorICAgICAgICAgICAgNDEsCisgICAgICAgICAgICBbImJhciIsICJmb28iLCAiYmFyX3JlZiIsICJmb29fcmVmIiwgImJhcl9wdHIiLCAiZm9vX3B0ciJdKQorCisKK3VuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9vYmplY3RzMV80MV9iYXIuanNvbiBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czFfNDFfYmFyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwY2RhYwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czFfNDFfYmFyLmpzb24KQEAgLTAsMCArMSw2MCBAQAoreworICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICJjdHlwZSI6ICJCYXIgKiIsCisgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3NjAiLAorICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICJjdHlwZSI6ICJCYXIiLAorICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVkMCIsCisgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlZDAiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMiIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJmaWVsZCI6ICJmb28iLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJGb28gKiIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWQ4IiwKKyAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWIwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDhfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWViMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiQmFyICoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlYjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ2aXNpdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiQmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVkMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzc2VzIjogW10KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImJhc2VfY2xhc3NlcyI6IFtdCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czFfNDFfZm9vLmpzb24gYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMxXzQxX2Zvby5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTgxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMxXzQxX2Zvby5qc29uCkBAIC0wLDAgKzEsNjAgQEAKK3sKKyAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAiY3R5cGUiOiAiRm9vICoiLAorICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzY4IiwKKyAgICAicmVmZXJlbmNlIjogeworICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAiY3R5cGUiOiAiRm9vIiwKKyAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlYjAiLAorICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJmaWVsZCI6ICJhIiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50OF90IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlYjAiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMSIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJmaWVsZCI6ICJiYXIiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJCYXIgKiIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWI4IiwKKyAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiQmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWQwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDE2X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlZDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkZvbyAqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWQ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidmlzaXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlYjAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3NlcyI6IFtdCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X2EuanNvbiBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfYS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YWU0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X2EuanNvbgpAQCAtMCwwICsxLDIyIEBACit7CisgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgImN0eXBlIjogIkJhciAqIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc0OCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgImN0eXBlIjogIkJhciIsCisgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjI5IiwKKyAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiZSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDhfdCIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjI5IiwKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjUiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiYmFzZV9jbGFzc2VzIjogW10KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9vYmplY3RzMl84NV9iLmpzb24gYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X2IuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTc4ODI1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9vYmplY3RzMl84NV9iLmpzb24KQEAgLTAsMCArMSw2MyBAQAoreworICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgImN0eXBlIjogIkZvbzIiLAorICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzEwIiwKKyAgICAiZmllbGRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmllbGQiOiAiYyIsCisgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDMyX3QiLAorICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzFjIiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiAiNCIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpZWxkIjogImNjIiwKKyAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50MzJfdCIsCisgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3MjAiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICI0IgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFzZV9jbGFzc2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb28iLAorICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3MTAiLAorICAgICAgICAgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJfdnB0ci5Gb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCoqKSh2b2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3MTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKSh2b2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTU3YzcwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImV4dHJhY3QgZmFpbGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDhfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3MTgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIxIgorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAiYmFzZV9jbGFzc2VzIjogW10KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIF0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X2MuanNvbiBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfYy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZmVkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X2MuanNvbgpAQCAtMCwwICsxLDE0NiBAQAoreworICAgICJ0eXBlIjogInJlZmVyZW5jZSIsCisgICAgImN0eXBlIjogIkZvbyAmIiwKKyAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVmMCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgImN0eXBlIjogIkZvbzMiLAorICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVmMCIsCisgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZpZWxkIjogImQiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQzMl90IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmMTQiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiNCIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImJhc2VfY2xhc3MiOiAiRm9vMSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vMSIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWYwIiwKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDE2X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVmYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3NlcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWYwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiX3ZwdHIuRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVmMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTU3YzQwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZXh0cmFjdCBmYWlsZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50OF90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlZjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImJhc2VfY2xhc3MiOiAiRm9vMiIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vMiIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjAwIiwKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDMyX3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWYwYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImNjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50MzJfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjEwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzc2VzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJfdnB0ci5Gb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCoqKSh2b2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogImludCAoKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NTdjNTgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJleHRyYWN0IGZhaWxlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQ4X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWYwOCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3NlcyI6IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfZC5qc29uIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9vYmplY3RzMl84NV9kLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyMTBkZQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfZC5qc29uCkBAIC0wLDAgKzEsNTQgQEAKK3sKKyAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICJjdHlwZSI6ICJGb28xIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcwMCIsCisgICAgImZpZWxkcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcwYSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogIjIiCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBdLAorICAgICJiYXNlX2NsYXNzZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJiYXNlX2NsYXNzIjogIkZvbyIsCisgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vIiwKKyAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcwMCIsCisgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogIl92cHRyLkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogImludCAoKiopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NTdjODgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZXh0cmFjdCBmYWlsZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50OF90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDcwOCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfZS5qc29uIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9vYmplY3RzMl84NV9lLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxN2Y1YQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfZS5qc29uCkBAIC0wLDAgKzEsMTUwIEBACit7CisgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgImN0eXBlIjogIkZvbyAqIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDczOCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgImN0eXBlIjogIkZvbzYiLAorICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWY2OCIsCisgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZpZWxkIjogImQiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQzMl90IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmNjAiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiNCIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImJhc2VfY2xhc3MiOiAiRm9vNCIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vNCIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjQwIiwKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiX3ZwdHIuRm9vNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogImludCAoKiopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmNDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKSh2b2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU1N2IzMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImV4dHJhY3QgZmFpbGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDE2X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWY0OCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3NlcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjY4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiX3ZwdHIuRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWY2OCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTU3YjcwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZXh0cmFjdCBmYWlsZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50OF90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmNzAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImJhc2VfY2xhc3MiOiAiRm9vNSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vNSIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjUwIiwKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiX3ZwdHIuRm9vNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogImludCAoKiopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmNTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKSh2b2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU1N2I1MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImV4dHJhY3QgZmFpbGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDMyX3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWY1OCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImNjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50MzJfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjVjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzc2VzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ2aXNpdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjY4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X2YuanNvbiBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfZi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjc2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X2YuanNvbgpAQCAtMCwwICsxLDE1MCBAQAoreworICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICJjdHlwZSI6ICJGb280ICoiLAorICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzMwIiwKKyAgICAicmVmZXJlbmNlIjogeworICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAiY3R5cGUiOiAiRm9vNiIsCisgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjQwIiwKKyAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiZCIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDMyX3QiLAorICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWY2MCIsCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICI0IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImJhc2VfY2xhc3NlcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb280IiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJGb280IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmNDAiLAorICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJfdnB0ci5Gb280IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWY0MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTU3YjMwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZXh0cmFjdCBmYWlsZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50MTZfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjQ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzc2VzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmNjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJfdnB0ci5Gb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCoqKSh2b2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjY4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogImludCAoKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NTdiNzAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJleHRyYWN0IGZhaWxlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQ4X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWY3MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3NlcyI6IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb281IiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJGb281IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmNTAiLAorICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJfdnB0ci5Gb281IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWY1MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTU3YjUwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZXh0cmFjdCBmYWlsZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50MzJfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjU4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiY2MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQzMl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmNWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiNCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3MiOiAiRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInZpc2l0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmNjgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfdy5qc29uIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9vYmplY3RzMl84NV93Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y5MDM3YgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfdy5qc29uCkBAIC0wLDAgKzEsMTQ2IEBACit7CisgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgImN0eXBlIjogIkZvbyAqIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc1MCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgImN0eXBlIjogIkZvbzMiLAorICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVmMCIsCisgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZpZWxkIjogImQiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQzMl90IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmMTQiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiNCIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImJhc2VfY2xhc3MiOiAiRm9vMSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vMSIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWYwIiwKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDE2X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVmYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3NlcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWYwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiX3ZwdHIuRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVmMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTU3YzQwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZXh0cmFjdCBmYWlsZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50OF90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlZjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImJhc2VfY2xhc3MiOiAiRm9vMiIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vMiIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjAwIiwKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDMyX3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWYwYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImNjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50MzJfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjEwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzc2VzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJfdnB0ci5Gb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCoqKSh2b2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogImludCAoKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NTdjNTgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJleHRyYWN0IGZhaWxlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQ4X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWYwOCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3NlcyI6IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfeC5qc29uIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9vYmplY3RzMl84NV94Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiOGZhZAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfeC5qc29uCkBAIC0wLDAgKzEsNTkgQEAKK3sKKyAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAiY3R5cGUiOiAiRm9vICoiLAorICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzY4IiwKKyAgICAicmVmZXJlbmNlIjogeworICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAiY3R5cGUiOiAiRm9vMSIsCisgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWIwIiwKKyAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiYiIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDE2X3QiLAorICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWViYSIsCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImJhc2VfY2xhc3NlcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb28iLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWIwIiwKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiX3ZwdHIuRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWViMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTU3Yzg4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZXh0cmFjdCBmYWlsZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50OF90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlYjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X3kuanNvbiBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfeS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTJjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X3kuanNvbgpAQCAtMCwwICsxLDY4IEBACit7CisgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgImN0eXBlIjogIkZvbyAqIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc2MCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgImN0eXBlIjogIkZvbzIiLAorICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVkMCIsCisgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZpZWxkIjogImMiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQzMl90IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlZGMiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJmaWVsZCI6ICJjYyIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDMyX3QiLAorICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVlMCIsCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICI0IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImJhc2VfY2xhc3NlcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb28iLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWQwIiwKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiX3ZwdHIuRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVkMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTU3YzcwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZXh0cmFjdCBmYWlsZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50OF90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlZDgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X3ouanNvbiBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0czJfODVfei5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3N2M5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHMyXzg1X3ouanNvbgpAQCAtMCwwICsxLDE0NiBAQAoreworICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICJjdHlwZSI6ICJGb28xICoiLAorICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzU4IiwKKyAgICAicmVmZXJlbmNlIjogeworICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAiY3R5cGUiOiAiRm9vMyIsCisgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWYwIiwKKyAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiZCIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDMyX3QiLAorICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWYxNCIsCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICI0IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImJhc2VfY2xhc3NlcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb28xIiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJGb28xIiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlZjAiLAorICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50MTZfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWZhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzc2VzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzIjogIkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFlZjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJfdnB0ci5Gb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJpbnQgKCoqKSh2b2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZWYwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogImludCAoKikodm9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NTdjNDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJleHRyYWN0IGZhaWxlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQ4X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWVmOCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3NlcyI6IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiYmFzZV9jbGFzcyI6ICJGb28yIiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJGb28yIiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmMDAiLAorICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCI6ICJjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50MzJfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjBjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiY2MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQzMl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmMTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiNCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3MiOiAiRm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHlwZSI6ICJGb28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2YWYwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogIl92cHRyLkZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwb2ludGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogImludCAoKiopKHZvaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmFmMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiaW50ICgqKSh2b2lkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU1N2M1OCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImV4dHJhY3QgZmFpbGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDhfdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZhZjA4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZV9jbGFzc2VzIjogW10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9vYmplY3RzXzM3X2Jhci5qc29uIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9vYmplY3RzXzM3X2Jhci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Y2IzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHNfMzdfYmFyLmpzb24KQEAgLTAsMCArMSwyMiBAQAoreworICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICJjdHlwZSI6ICJCYXIgKiIsCisgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3NjAiLAorICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICJjdHlwZSI6ICJCYXIiLAorICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2ZGVkMCIsCisgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg1NTU1NTU1NmRlZDAiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMiIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHNfMzdfZm9vLmpzb24gYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L29iamVjdHNfMzdfZm9vLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyMDJmNwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3Qvb2JqZWN0c18zN19mb28uanNvbgpAQCAtMCwwICsxLDQ3IEBACit7CisgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgImN0eXBlIjogIkZvbyAqIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc2OCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZkZWIwIiwKKyAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiYSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDhfdCIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZkZWIwIiwKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiYmFyIiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiQmFyICoiLAorICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2ZGViOCIsCisgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkJhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDU1NTU1NTU2ZGVkMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4NTU1NTU1NTZkZWQwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiYmFzZV9jbGFzc2VzIjogW10KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9yZWZlcmVuY2VfNDFfYmFyLmpzb24gYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L3JlZmVyZW5jZV80MV9iYXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQzM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9yZWZlcmVuY2VfNDFfYmFyLmpzb24KQEAgLTAsMCArMSwxNyBAQAoreworICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgImN0eXBlIjogIkJhciIsCisgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3NGUiLAorICAgICJmaWVsZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWVsZCI6ICJiIiwKKyAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICJjdHlwZSI6ICJ1aW50MTZfdCIsCisgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3NGUiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFzZV9jbGFzc2VzIjogW10KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L3JlZmVyZW5jZV80MV9iYXJfcHRyLmpzb24gYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L3JlZmVyZW5jZV80MV9iYXJfcHRyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkOTE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvcmVmZXJlbmNlXzQxX2Jhcl9wdHIuanNvbgpAQCAtMCwwICsxLDIyIEBACit7CisgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgImN0eXBlIjogIkJhciAqIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc2MCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgImN0eXBlIjogIkJhciIsCisgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzRlIiwKKyAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiYiIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDE2X3QiLAorICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc0ZSIsCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImJhc2VfY2xhc3NlcyI6IFtdCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvcmVmZXJlbmNlXzQxX2Jhcl9yZWYuanNvbiBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvcmVmZXJlbmNlXzQxX2Jhcl9yZWYuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTUxNWYzCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9yZWZlcmVuY2VfNDFfYmFyX3JlZi5qc29uCkBAIC0wLDAgKzEsMjIgQEAKK3sKKyAgICAidHlwZSI6ICJyZWZlcmVuY2UiLAorICAgICJjdHlwZSI6ICJCYXIgJiIsCisgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3NGUiLAorICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICJ0eXBlIjogInN0cnVjdCIsCisgICAgICAgICJjdHlwZSI6ICJCYXIiLAorICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc0ZSIsCisgICAgICAgICJmaWVsZHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMHg3ZmZmZmZmZmQ3NGUiLAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiMiIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L3JlZmVyZW5jZV80MV9mb28uanNvbiBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvcmVmZXJlbmNlXzQxX2Zvby5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWM3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L3JlZmVyZW5jZV80MV9mb28uanNvbgpAQCAtMCwwICsxLDQyIEBACit7CisgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAiY3R5cGUiOiAiRm9vIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc1MCIsCisgICAgImZpZWxkcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpZWxkIjogImEiLAorICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICJ0eXBlIjogImludCIsCisgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQ4X3QiLAorICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzUwIiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiAiMSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpZWxkIjogImJhciIsCisgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgICAgICAgICAgICAgImN0eXBlIjogIkJhciAqIiwKKyAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc1OCIsCisgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkJhciIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzRlIiwKKyAgICAgICAgICAgICAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQiOiAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDE2X3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgImJhc2VfY2xhc3NlcyI6IFtdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFzZV9jbGFzc2VzIjogW10KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L3JlZmVyZW5jZV80MV9mb29fcHRyLmpzb24gYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L3JlZmVyZW5jZV80MV9mb29fcHRyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5NjVlOAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3QvcmVmZXJlbmNlXzQxX2Zvb19wdHIuanNvbgpAQCAtMCwwICsxLDQ3IEBACit7CisgICAgInR5cGUiOiAicG9pbnRlciIsCisgICAgImN0eXBlIjogIkZvbyAqIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc2OCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzUwIiwKKyAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiYSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDhfdCIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzUwIiwKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiYmFyIiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiQmFyICoiLAorICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc1OCIsCisgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkJhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiYmFzZV9jbGFzc2VzIjogW10KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9yZWZlcmVuY2VfNDFfZm9vX3JlZi5qc29uIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdC9yZWZlcmVuY2VfNDFfZm9vX3JlZi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTc1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0L3JlZmVyZW5jZV80MV9mb29fcmVmLmpzb24KQEAgLTAsMCArMSw0NyBAQAoreworICAgICJ0eXBlIjogInJlZmVyZW5jZSIsCisgICAgImN0eXBlIjogIkZvbyAmIiwKKyAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc1MCIsCisgICAgInJlZmVyZW5jZSI6IHsKKyAgICAgICAgInR5cGUiOiAic3RydWN0IiwKKyAgICAgICAgImN0eXBlIjogIkZvbyIsCisgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzUwIiwKKyAgICAgICAgImZpZWxkcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiYSIsCisgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAidWludDhfdCIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzUwIiwKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogIjEiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiZmllbGQiOiAiYmFyIiwKKyAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBvaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAiY3R5cGUiOiAiQmFyICoiLAorICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc1OCIsCisgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJ1Y3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogIkJhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIweDdmZmZmZmZmZDc0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIjogImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0eXBlIjogInVpbnQxNl90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjB4N2ZmZmZmZmZkNzRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlX2NsYXNzZXMiOiBbXQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiYmFzZV9jbGFzc2VzIjogW10KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdF9leGFtcGxlcy9hcnJheS5jcHAgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0X2V4YW1wbGVzL2FycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmE5Yjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdF9leGFtcGxlcy9hcnJheS5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG1lbW9yeT4KKworY2xhc3MgQmFyIHsKK3B1YmxpYzoKKyAgdWludDE2X3QgYiA9IDI7Cit9OworCitjbGFzcyBGb28geworcHVibGljOgorICB1aW50OF90IGEgPSAxOworICBCYXIgKmJhciA9IG51bGxwdHI7Cit9OworCitpbnQgbWFpbigpIHsKKyAgaW50MTZfdCBhWzVdID0gezEsIDIsIDMsIDQsIDV9OworICBpbnQxNl90KiBiID0gJmFbMl07CisgIEZvbyBmb29bM107CisgIEJhciBiYXJbM107CisgIGZvb1swXS5iYXIgPSAmYmFyWzBdOworICBmb29bMV0uYmFyID0gJmJhclsxXTsKKyAgZm9vWzJdLmJhciA9ICZiYXJbMl07CisgIEZvbyYgZm9vMSA9IGZvb1swXTsKKyAgCisgIHJldHVybiAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3RfZXhhbXBsZXMvYmFzaWNfdHlwZXMuY3BwIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdF9leGFtcGxlcy9iYXNpY190eXBlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxM2MwMgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3RfZXhhbXBsZXMvYmFzaWNfdHlwZXMuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworZW51bSBBbmltYWwgeyBDQVQsIERPRywgVElHRVIgfTsKKworaW50IG1haW4oKSB7CisgIHsKKyAgICB1aW50OF90IGEgPSAxOworICAgIGludDhfdCBiID0gLTI7CisgICAgdWludDE2X3QgYyA9IDM7CisgICAgaW50MTZfdCBkID0gLTQ7CisgICAgdWludDMyX3QgZSA9IDU7CisgICAgaW50MzJfdCBmID0gLTY7CisgICAgdWludDY0X3QgZyA9IDc7CisgICAgaW50NjRfdCBoID0gLTg7CisgICAgZmxvYXQgaSA9IDkuMDsKKyAgICBkb3VibGUgaiA9IC0xMC4wOworICAgIGNvbnN0IGNoYXIgKmsgPSAiSGVsbG8iOworICAgIHZvaWQgKmwgPSBudWxscHRyOworICAgIGNoYXIgKm0gPSBudWxscHRyOworICAgIGJvb2wgbiA9IHJhbmQoKSAlIDIgPT0gMDsKKyAgICBBbmltYWwgbyA9IENBVDsKKyAgICBpZiAobikgeworICAgICAgYSArPSBiOworICAgIH0KKyAgICBzdGQ6OmNvdXQgPDwgYSArIGIgKyBjICsgZCArIGUgKyBmICsgZyArIGggKyBpICsgaiA8PCBzdGQ6OmVuZGw7CisgIH0KKyAgeworICAgIHsKKyAgICAgIGNvbnN0IHVpbnQ4X3QgYSA9IDE7CisgICAgICBjb25zdCBpbnQ4X3QgYiA9IC0yOworICAgICAgY29uc3QgdWludDE2X3QgYyA9IDM7CisgICAgICBjb25zdCBpbnQxNl90IGQgPSAtNDsKKyAgICAgIGNvbnN0IHVpbnQzMl90IGUgPSA1OworICAgICAgY29uc3QgaW50MzJfdCBmID0gLTY7CisgICAgICBjb25zdCB1aW50NjRfdCBnID0gNzsKKyAgICAgIGNvbnN0IGludDY0X3QgaCA9IC04OworICAgICAgY29uc3QgZmxvYXQgaSA9IDkuMDsKKyAgICAgIGNvbnN0IGRvdWJsZSBqID0gLTEwLjA7CisgICAgICBjb25zdCBjaGFyICprID0gIkhlbGxvIjsKKyAgICAgIGNvbnN0IHZvaWQgKmwgPSBudWxscHRyOworICAgICAgY29uc3QgY2hhciAqbSA9IG51bGxwdHI7CisgICAgICBjb25zdCBib29sIG4gPSByYW5kKCkgJSAyID09IDA7CisgICAgICBjb25zdCBBbmltYWwgbyA9IERPRzsKKyAgICAgIGlmIChuKSB7CisgICAgICAgIHN0ZDo6Y291dCA8PCBhICsgYiArIGMgKyBkICsgZSArIGYgKyBnICsgaCArIGkgKyBqIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdF9leGFtcGxlcy9vYmplY3RzLmNwcCBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3RfZXhhbXBsZXMvb2JqZWN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzYmI5MgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3RfZXhhbXBsZXMvb2JqZWN0cy5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG1lbW9yeT4KKworY2xhc3MgQmFyIHsKK3B1YmxpYzoKKyAgdWludDE2X3QgYiA9IDI7Cit9OworCitjbGFzcyBGb28geworcHVibGljOgorICB1aW50OF90IGEgPSAxOworICBCYXIgKmJhciA9IG51bGxwdHI7Cit9OworCitpbnQgbWFpbigpIHsKKyAgeworICAgIEZvbyAqZm9vID0gbmV3IEZvbygpOworICAgIEJhciAqYmFyID0gbmV3IEJhcigpOworICAgIGZvby0+YmFyID0gYmFyOworICAgIGRlbGV0ZSBmb287CisgICAgZGVsZXRlIGJhcjsKKyAgfQorICB7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZvbz4gZm9vID0gc3RkOjptYWtlX3VuaXF1ZTxGb28+KCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhcj4gYmFyID0gc3RkOjptYWtlX3VuaXF1ZTxCYXI+KCk7CisgICAgZm9vLT5iYXIgPSBiYXIuZ2V0KCk7CisgICAgZm9vLT5iYXItPmIrKzsKKyAgfQorICB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEZvbz4gZm9vID0gc3RkOjptYWtlX3NoYXJlZDxGb28+KCk7CisgICAgc3RkOjpzaGFyZWRfcHRyPEJhcj4gYmFyID0gc3RkOjptYWtlX3NoYXJlZDxCYXI+KCk7CisgICAgZm9vLT5iYXIgPSBiYXIuZ2V0KCk7CisgICAgZm9vLT5iYXItPmIrKzsKKyAgfQorICByZXR1cm4gMDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0X2V4YW1wbGVzL29iamVjdHMxLmNwcCBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3RfZXhhbXBsZXMvb2JqZWN0czEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGU0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0X2V4YW1wbGVzL29iamVjdHMxLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8bWVtb3J5PgorCitjbGFzcyBGb287CisKK2NsYXNzIEJhciB7CitwdWJsaWM6CisgIHVpbnQxNl90IGIgPSAyOworICBGb28gKmZvbyA9IG51bGxwdHI7Cit9OworCitjbGFzcyBGb28geworcHVibGljOgorICB1aW50OF90IGEgPSAxOworICBCYXIgKmJhciA9IG51bGxwdHI7Cit9OworCitpbnQgbWFpbigpIHsKKyAgeworICAgIEZvbyAqZm9vID0gbmV3IEZvbygpOworICAgIEJhciAqYmFyID0gbmV3IEJhcigpOworICAgIGZvby0+YmFyID0gYmFyOworICAgIGJhci0+Zm9vID0gZm9vOworICAgIGRlbGV0ZSBmb287CisgICAgZGVsZXRlIGJhcjsKKyAgfQorICByZXR1cm4gMDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0X2V4YW1wbGVzL29iamVjdHMyLmNwcCBiL2dkYi9nZGJfanNvbl9wcmludGVyL3Rlc3RfZXhhbXBsZXMvb2JqZWN0czIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ODVjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0X2V4YW1wbGVzL29iamVjdHMyLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8bWVtb3J5PgorCitjbGFzcyBGb28geworcHVibGljOgorICB1aW50OF90IGEgPSAxOworICB2aXJ0dWFsIGludCBnZXQoKSA9IDA7Cit9OworCitjbGFzcyBGb28xIDogcHVibGljIEZvbyB7CisgIHVpbnQxNl90IGIgPSAyOworICB2aXJ0dWFsIGludCBnZXQoKSBvdmVycmlkZSB7IHJldHVybiBiOyB9Cit9OworCitjbGFzcyBGb28yIDogcHVibGljIEZvbyB7CitwdWJsaWM6CisgIHVpbnQzMl90IGMgPSAzOworICB1aW50MzJfdCBjYyA9IDQ7CisgIHZpcnR1YWwgaW50IGdldCgpIG92ZXJyaWRlIHsgcmV0dXJuIGM7IH0KK307CisKK2NsYXNzIEZvbzMgOiBwdWJsaWMgRm9vMSwgcHVibGljIEZvbzIgeworICB1aW50MzJfdCBkID0gNDsKKyAgdmlydHVhbCBpbnQgZ2V0KCkgb3ZlcnJpZGUgeyByZXR1cm4gZDsgfQorfTsKKworY2xhc3MgRm9vNCA6IHZpcnR1YWwgcHVibGljIEZvbyB7CisgIHVpbnQxNl90IGIgPSAyOworICB2aXJ0dWFsIGludCBnZXQoKSBvdmVycmlkZSB7IHJldHVybiBiOyB9Cit9OworCitjbGFzcyBGb281IDogdmlydHVhbCBwdWJsaWMgRm9vIHsKK3B1YmxpYzoKKyAgdWludDMyX3QgYyA9IDM7CisgIHVpbnQzMl90IGNjID0gNDsKKyAgdmlydHVhbCBpbnQgZ2V0KCkgb3ZlcnJpZGUgeyByZXR1cm4gYzsgfQorfTsKKworY2xhc3MgRm9vNiA6IHB1YmxpYyBGb280LCBwdWJsaWMgRm9vNSB7CisgIHVpbnQzMl90IGQgPSA0OworICB2aXJ0dWFsIGludCBnZXQoKSBvdmVycmlkZSB7IHJldHVybiBkOyB9Cit9OworCitjbGFzcyBCYXIgeworcHVibGljOgorICB1aW50OF90IGUgPSA1OworfTsKKworY2xhc3MgQmFyMSA6IHZpcnR1YWwgcHVibGljIEJhciB7CitwdWJsaWM6CisgIHVpbnQ4X3QgZiA9IDY7Cit9OworCitpbnQgbWFpbigpIHsKKyAgeworICAgIEZvbyAqeCA9IG5ldyBGb28xKCk7CisgICAgRm9vICp5ID0gbmV3IEZvbzIoKTsKKyAgICBGb28xICp6ID0gbmV3IEZvbzMoKTsKKyAgICBGb28gKncgPSB6OworICAgIEJhciAqYSA9IG5ldyBCYXIxKCk7CisgICAgRm9vMiBiOworICAgIEZvbyAmYyA9ICp3OworICAgIEZvbzEgZCA9ICp6OworICAgIGIuYyArPSAxOworICAgIEZvbyAqZSA9IG5ldyBGb282KCk7CisgICAgRm9vNCAqZiA9IGR5bmFtaWNfY2FzdDxGb282ICo+KGUpOworCisgICAgZGVsZXRlIGE7CisgICAgZGVsZXRlIHg7CisgICAgZGVsZXRlIHk7CisgICAgZGVsZXRlIHo7CisgIH0KKyAgcmV0dXJuIDA7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdF9leGFtcGxlcy9yZWZlcmVuY2UuY3BwIGIvZ2RiL2dkYl9qc29uX3ByaW50ZXIvdGVzdF9leGFtcGxlcy9yZWZlcmVuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NmI3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZ2RiX2pzb25fcHJpbnRlci90ZXN0X2V4YW1wbGVzL3JlZmVyZW5jZS5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG1lbW9yeT4KKworY2xhc3MgQmFyIHsKK3B1YmxpYzoKKyAgdWludDE2X3QgYiA9IDI7Cit9OworCitjbGFzcyBGb28geworcHVibGljOgorICB1aW50OF90IGEgPSAxOworICBCYXIgKmJhciA9IG51bGxwdHI7Cit9OworCitpbnQgbWFpbigpIHsKKyAgRm9vIGZvbzsKKyAgQmFyIGJhcjsKKyAgZm9vLmJhciA9ICZiYXI7CisgIEZvbyAmZm9vX3JlZiA9IGZvbzsKKyAgQmFyICZiYXJfcmVmID0gYmFyOworICBGb28gKmZvb19wdHIgPSAmZm9vOworICBCYXIgKmJhcl9wdHIgPSAmYmFyOworCisgIHJldHVybiAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9oZWFwX3ByaW50L1JFQURNRS5tZCBiL2dkYi9oZWFwX3ByaW50L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2E3NjdjCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2hlYXBfcHJpbnQvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNDQgQEAKK1NjcmlwdCBzdXBwb3J0cyAyIGN1c3RvbSBjb21tYW5kczoKKworMSkgd2F0Y2hfaGVhcCA6IHNldHMgYnJlYWsgcG9pbnQgYXQgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQga2VlcHMgdHJhY2sgb2YgaXQKKzIpIHByaW50X3B0ciA6IHByaW50cyB0aGUgbWVtb3J5IHBvaW50ZWQgYnkgcmF3IHBvaW50ZXIgaW4gaGV4IGZvcm1hdC4KKworICAgICAgICAgICAgICAgIGVnOgorICAgICAgICAgICAgICAgIChnZGIpIHByaW50X3B0ciBtYWxsb2NfcHRyCisgICAgICAgICAgICAgICAgVHlwZSA6IGludCAqCisgICAgICAgICAgICAgICAgU3RhcnRpbmcgQWRkcmVzczogMHg1NTU1NTU1NmFlYjAKKyAgICAgICAgICAgICAgICBMZW5ndGggOiA0MAorICAgICAgICAgICAgICAgIDB4MDEgMHgwMCAweDAwIDB4MDAgMHgwMiAweDAwIDB4MDAgMHgwMCAweDAzIDB4MDAgMHgwMCAweDAwCisgICAgICAgICAgICAgICAgMHgwNCAweDAwIDB4MDAgMHgwMCAweDA1IDB4MDAgMHgwMCAweDAwIDB4MDYgMHgwMCAweDAwIDB4MDAKKyAgICAgICAgICAgICAgICAweDA3IDB4MDAgMHgwMCAweDAwIDB4MDggMHgwMCAweDAwIDB4MDAgMHgwOSAweDAwIDB4MDAgMHgwMAorICAgICAgICAgICAgICAgIDB4MGEgMHgwMCAweDAwIDB4MDAKKworICAgIElmIHByaW50X3B0ciBpcyB1c2VkIGFmdGVyIGZyZWUvZGVsZXRlW10sIHRoZW4gaXQgd291bGQgcHJpbnQgIk5vIGFkZHJlc3MgbWFwcGluZyBmb3VuZCEiCisKKworVGVzdHM6CisKK1RvIHJ1biB0aGUgdGVzdAorCitJbiB0aGUgaGVhcF9wcmludCBkaXIsCisKK0NvbXBpbGUgOgorCitnKysgLU8wIC1nIHRlc3Qvc2FtcGxlX2hlYXBfdGVzdC5jYyAtbyB0ZXN0L3NhbXBsZV9oZWFwX3Rlc3QubworCitBbmQgdGhlbiBSdW46CisKKyQgZ2RiCiskIHNvdXJjZSB0ZXN0L3Rlc3RfaGVhcF9wcmludF9zY3JpcHQucHkKKworCitGdXR1cmUgR29hbHM6CisKK1RvIGhhbmRsZSBwb2ludGVyIG9mZnNldCwgZm9yIGVnLCAoZ2RiKSBwcmludF9wdHIgbWFsbG9jX3B0ciArIDMKKworVG8gaGFuZGxlIGN1c3RvbSBhbGxhY2F0b3IsIG1heSBiZSB3YXRjaF9oZWFwIGNvbW1hbmQgY291bGQgdGFrZSBpbiBhcmd1ZW1lbnRzCithbmQgc2V0cyBhZGRpdGlvbmFsIGJyZWFrIHBvaW50cy4KKworCisKKwpkaWZmIC0tZ2l0IGEvZ2RiL2hlYXBfcHJpbnQvaGVhcF9wcmludF9zY3JpcHQucHkgYi9nZGIvaGVhcF9wcmludC9oZWFwX3ByaW50X3NjcmlwdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVkNTZiCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2hlYXBfcHJpbnQvaGVhcF9wcmludF9zY3JpcHQucHkKQEAgLTAsMCArMSwyMzkgQEAKK2ltcG9ydCBnZGIKKworCitkZWYgcGFyc2VfYWRkcmVzc190b19pbnQoYWRkcmVzcyk6CisgICAgaW50X2FkZHJlc3Nfc3RyaW5nID0gZ2RiLmV4ZWN1dGUoCisgICAgICAgICdwL2Qge30nLmZvcm1hdChhZGRyZXNzKSwgdG9fc3RyaW5nPVRydWUpCisgICAgaW50X2FkZHJlc3MgPSBpbnQoaW50X2FkZHJlc3Nfc3RyaW5nLnNwbGl0KCc9JylbMV0uc3RyaXAoKSkKKyAgICByZXR1cm4gaW50X2FkZHJlc3MKKworCitkZWYgcGFyc2VfZ2RiX2VxdWFscyhzdHIpOgorICAgICIiIgorICAgIHN0ciBpcyAkMSA9IHZhbHVlLiBzbyBpdCByZXR1cm5zIHZhbHVlCisgICAgIiIiCisgICAgcmV0dXJuIHN0ci5zcGxpdCgiPSIpWzFdLnN0cmlwKCkKKworCitjbGFzcyBIZWFwTWFwcGluZzoKKyAgICAiIiIKKyAgICBXcmFwcGVyIGNsYXNzIGZvciBkaWN0aW9uYXJ5IHRvIGhhdmUgY3VzdG9taXphdGlvbiBmb3IgdGhlIGRpY3Rpb25hcnkKKyAgICBhbmQgb25lIGVudHJ5IHBvaW50CisgICAgIiIiCisKKyAgICBhZGRyZXNzX2xlbmd0aF9tYXBwaW5nID0ge30KKyAgICBhZGRyZXNzX3NldCA9IHNldCgpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHB1dChhZGRyZXNzLCBsZW5ndGgpOgorICAgICAgICBIZWFwTWFwcGluZy5hZGRyZXNzX2xlbmd0aF9tYXBwaW5nW2FkZHJlc3NdID0gbGVuZ3RoCisgICAgICAgIEhlYXBNYXBwaW5nLmFkZHJlc3Nfc2V0LmFkZChhZGRyZXNzKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXQoYWRkcmVzcyk6CisgICAgICAgICIiIgorICAgICAgICBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIGR5bmFtaWMgYXJyYXkgY29ycmVzcG9uZGluZyB0byBhZGRyZXNzLiBTdXBwb3NlIGR5bmFtaWMKKyAgICAgICAgYXJyYXkgaXMgezEsMiwzLDQsNX0gYW5kIHN0YXJ0aW5nIGFkZHJlc3MgaXMgNDAwIHdoaWNoIGlzIHBhc3NlZCBhcyBhZGRyZXNzIHRvIHRoaXMKKyAgICAgICAgbWV0aG9kLCB0aGVuIG1ldGhvZCB3b3VsZCByZXR1cm4gMjAoaS5lLiA1ICogc2l6ZW9mKGludCkpLiBXaGVuIHRoaXMgYWRkcmVzcworICAgICAgICBpcyBvZmZzZXR0ZWQgZm9yIGVnIDQwOCBpcyBwYXNzZWQgdG8gdGhpcyBtZXRob2QsIHRoZW4gaXQgd2lsbCByZXR1cm4gcmVtYWluZGVyCisgICAgICAgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIGhlcmUgaXQgd291bGQgYmUgMTIgKGkuZS4gNDIwIC0gNDA4KQorICAgICAgICBBbGdvcml0aG0gdHJpZXMgdG8gZmluZCBhZGRyZXNzIGluIGFkZHJlc3NfbGVuZ3RoX2FwcGluZywgaWYgaXQgZG9lc24ndCBmaW5kIGl0CisgICAgICAgIHRoZW4gaXQgdHJpZXMgdG8gZmluZCB0aGUgcmFuZ2UgdGhhdCBjYW4gZml0IHRoZSBhZGRyZXNzLiBpZiBpdCBmYWlscyB0byBmaW5kIHN1Y2gKKyAgICAgICAgbWFwcGluZyB0aGVuIGl0IHdvdWxkIHJldHVybiBOb25lLgorICAgICAgICAiIiIKKworICAgICAgICBsZW5ndGhfZm91bmQgPSBIZWFwTWFwcGluZy5hZGRyZXNzX2xlbmd0aF9tYXBwaW5nLmdldChhZGRyZXNzKQorICAgICAgICBpZiBsZW5ndGhfZm91bmQ6CisgICAgICAgICAgICByZXR1cm4gbGVuZ3RoX2ZvdW5kCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhZGRyZXNzX2xpc3QgPSBsaXN0KEhlYXBNYXBwaW5nLmFkZHJlc3Nfc2V0KQorICAgICAgICAgICAgYWRkcmVzc19saXN0LnNvcnQoKQorICAgICAgICAgICAgbGVmdCA9IDAKKyAgICAgICAgICAgIHJpZ2h0ID0gbGVuKGFkZHJlc3NfbGlzdCkgLSAxCisgICAgICAgICAgICB3aGlsZSBsZWZ0IDw9IHJpZ2h0OgorICAgICAgICAgICAgICAgIG1pZCA9IGludCgobGVmdCArIHJpZ2h0KSAvIDIpCisgICAgICAgICAgICAgICAgaWYgYWRkcmVzcyA+IGFkZHJlc3NfbGlzdFttaWRdOgorICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWlkICsgMQorICAgICAgICAgICAgICAgICMgb25seSA8IGNhc2Ugd291bGQgYmUgYWNjb3VudGVkIGluIGVsc2UuCisgICAgICAgICAgICAgICAgIyBBcyA9PSB3b3VsZCBiZSBoYW5kbGVkIGluIHRoZSBpZi1jaGVjayBhYm92ZSAob3V0c2lkZSB3aGlsZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByaWdodCA9IG1pZCAtIDEKKworICAgICAgICAgICAgaW5kZXggPSBsZWZ0IC0gMQorICAgICAgICAgICAgaWYgaW5kZXggPT0gLTE6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGJhc2VfYWRkcmVzcyA9IGFkZHJlc3NfbGlzdFtpbmRleF0KKyAgICAgICAgICAgIGJhc2VfbGVuID0gSGVhcE1hcHBpbmcuYWRkcmVzc19sZW5ndGhfbWFwcGluZy5nZXQoYmFzZV9hZGRyZXNzKQorICAgICAgICAgICAgaWYgYmFzZV9hZGRyZXNzICsgYmFzZV9sZW4gPiBhZGRyZXNzOgorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX2FkZHJlc3MgKyBiYXNlX2xlbiAtIGFkZHJlc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcmVtb3ZlKGFkZHJlc3MpOgorICAgICAgICBIZWFwTWFwcGluZy5hZGRyZXNzX2xlbmd0aF9tYXBwaW5nLnBvcChhZGRyZXNzLCBOb25lKQorICAgICAgICBIZWFwTWFwcGluZy5hZGRyZXNzX3NldC5kaXNjYXJkKGFkZHJlc3MpCisKKworY2xhc3MgQWxsb2NhdGlvbkZpbmlzaGVkQnJlYWtwb2ludChnZGIuRmluaXNoQnJlYWtwb2ludCk6CisgICAgIiIiCisgICAgU2V0cyB0ZW1wb3JhcnkgYnJlYWtwb2ludHMgb24gcmV0dXJucyAoc3BlY2lmaWNhbGx5IHJldHVybnMgb2YgbWVtb3J5IGFsbG9jYXRpb25zKQorICAgIHRvIHJlY29yZCBhZGRyZXNzIGFsbG9jYXRlZC4KKyAgICBJdCBnZXQgaW5zdGFudGlhdGVkIGZyb20gQWxsb2NhdGlvbkJyZWFrcG9pbnQgYW5kIFJlYWxsb2NhdGlvbkJyZWFrcG9pbnQuIFdoZW4gaXQgaXMKKyAgICBpbnN0YW50aWF0ZWQgZnJvbSBSZWFsbG9jYXRpb25CcmVha1BvaW50LCBpdCBjYXJyaWVzIHByZXZfYWRkcmVzcy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsZW5ndGgsIHByZXZfYWRkcmVzcz1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhpbnRlcm5hbD1UcnVlKQorICAgICAgICBzZWxmLmxlbmd0aCA9IGxlbmd0aAorICAgICAgICBzZWxmLnByZXZfYWRkcmVzcyA9IHByZXZfYWRkcmVzcworCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgd2hlbiB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gdGhlIGN1cnJlbnQgZnJhbWUgaXMgaGl0LiBJdCBwYXJzZXMgaGV4IGFkZHJlc3MKKyAgICAgICAgaW50byBpbnQgYWRkcmVzcy4gSWYgcmV0dXJuIGFkZHJlc3MgaXMgbm90IG51bGwgdGhlbiBpdCBzdG9yZXMgYWRkcmVzcyBhbmQgbGVuZ3RoCisgICAgICAgIGludG8gdGhlIGFkZHJlc3NfbGVuZ3RoX21hcHBpbmcgZGljdGlvbmFyeS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuX2FkZHJlc3MgPSBzZWxmLnJldHVybl92YWx1ZQorICAgICAgICBpZiByZXR1cm5fYWRkcmVzcyBpcyBub3QgTm9uZSBvciByZXR1cm5fYWRkcmVzcyA9PSAweDA6CisgICAgICAgICAgICBpZiBzZWxmLnByZXZfYWRkcmVzcyAhPSBOb25lOgorICAgICAgICAgICAgICAgIEhlYXBNYXBwaW5nLnJlbW92ZShzZWxmLnByZXZfYWRkcmVzcykKKworICAgICAgICAgICAgIyBDb252ZXJ0aW5nIGhleCBhZGRyZXNzIHRvIGludCBhZGRyZXNzCisgICAgICAgICAgICBpbnRfYWRkcmVzcyA9IHBhcnNlX2FkZHJlc3NfdG9faW50KHJldHVybl9hZGRyZXNzKQorICAgICAgICAgICAgSGVhcE1hcHBpbmcucHV0KGludF9hZGRyZXNzLCBzZWxmLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgQWxsb2NhdGlvbkJyZWFrcG9pbnQoZ2RiLkJyZWFrcG9pbnQpOgorICAgICIiIgorICAgIEhhbmRsZXIgY2xhc3Mgd2hlbiBtYWxsb2MgYW5kIG9wZXJhdG9yIG5ld1tdIGdldHMgaGl0CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlYyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oc3BlYywgaW50ZXJuYWw9VHJ1ZSkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAjIGhhbmRsZSBtYWxsb2MgYW5kIG5ldworICAgICAgICBmdW5jX2FyZ3Nfc3RyaW5nID0gZ2RiLmV4ZWN1dGUoJ2luZm8gYXJncycsIHRvX3N0cmluZz1UcnVlKQorICAgICAgICBpZiBmdW5jX2FyZ3Nfc3RyaW5nLmZpbmQoIj0iKSAhPSAtMToKKyAgICAgICAgICAgICMgVGhlcmUgd2lsbCBiZSBqdXN0IDEgYXJndW1lbnQgdG8gbWFsbG9jLiBTbyBubyBuZWVkIHRvIGhhbmRsZSBtdWx0aWxpbmUKKyAgICAgICAgICAgIGxlbmd0aCA9IGludChwYXJzZV9nZGJfZXF1YWxzKGZ1bmNfYXJnc19zdHJpbmcpKQorICAgICAgICAgICAgQWxsb2NhdGlvbkZpbmlzaGVkQnJlYWtwb2ludChsZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBSZWFsbG9jYXRpb25CcmVha3BvaW50KGdkYi5CcmVha3BvaW50KToKKyAgICAiIiIKKyAgICBIYW5kbGVyIGNsYXNzIHdoZW4gcmVhbGxvYyBnZXRzIGhpdAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNwZWMsIGludGVybmFsPVRydWUpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIyBoYW5kbGUgcmVhbGxvYworICAgICAgICBmdW5jX2FyZ3Nfc3RyaW5nID0gZ2RiLmV4ZWN1dGUoJ2luZm8gYXJncycsIHRvX3N0cmluZz1UcnVlKQorICAgICAgICBpZiBmdW5jX2FyZ3Nfc3RyaW5nLmZpbmQoIj0iKSAhPSAtMToKKyAgICAgICAgICAgIGFyZ3MgPSBmdW5jX2FyZ3Nfc3RyaW5nLnNwbGl0KCJcbiIpCisgICAgICAgICAgICBhZGRyZXNzID0gcGFyc2VfZ2RiX2VxdWFscyhhcmdzWzBdKQorICAgICAgICAgICAgaW50X2FkZHJlc3MgPSBwYXJzZV9hZGRyZXNzX3RvX2ludChhZGRyZXNzKQorICAgICAgICAgICAgbGVuZ3RoID0gaW50KHBhcnNlX2dkYl9lcXVhbHMoYXJnc1sxXSkpCisgICAgICAgICAgICBBbGxvY2F0aW9uRmluaXNoZWRCcmVha3BvaW50KGxlbmd0aCwgaW50X2FkZHJlc3MpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBEZWFsbG9jYXRpb25CcmVha3BvaW50KGdkYi5CcmVha3BvaW50KToKKyAgICAiIiIKKyAgICBIYW5kbGVyIGNsYXNzIHdoZW4gZnJlZSBhbmQgb3BlcmF0b3IgZGVsZXRlW10gZ2V0cyBoaXQKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzcGVjLCBpbnRlcm5hbD1UcnVlKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGZ1bmNfYXJnc19zdHJpbmcgPSBnZGIuZXhlY3V0ZSgnaW5mbyBhcmdzJywgdG9fc3RyaW5nPVRydWUpCisgICAgICAgIGlmIGZ1bmNfYXJnc19zdHJpbmcuZmluZCgiPSIpICE9IC0xOgorICAgICAgICAgICAgYWRkcmVzcyA9IHBhcnNlX2dkYl9lcXVhbHMoZnVuY19hcmdzX3N0cmluZykKKyAgICAgICAgICAgIGludF9hZGRyZXNzID0gcGFyc2VfYWRkcmVzc190b19pbnQoYWRkcmVzcykKKyAgICAgICAgICAgIEhlYXBNYXBwaW5nLnJlbW92ZShpbnRfYWRkcmVzcykKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgV2F0Y2hIZWFwKGdkYi5Db21tYW5kKToKKyAgICAiIiIKKyAgICBDdXN0b20gQ29tbWFuZCB0byBrZWVwIHRyYWNrIG9mIEhlYXAgTWVtb3J5IEFsbG9jYXRpb24uCisgICAgQ3VycmVudGx5IGtlZXBzIHRyYWNrcyBvZiBtZW1vcnkgYWxsb2NhdGVkL2RlYWxsb2NhdGVkIHVzaW5nCisgICAgbWFsbG9jLCByZWFsbG9jLCBmcmVlLCBvcGVyYXRvciBuZXdbXSBhbmQgb3BlcmF0b3IgZGVsZXRlW10KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoV2F0Y2hIZWFwLCBzZWxmKS5fX2luaXRfXygid2F0Y2hfaGVhcCIsIGdkYi5DT01NQU5EX1VTRVIpCisKKyAgICBkZWYgY29tcGxldGUoc2VsZiwgdGV4dCwgd29yZCk6CisgICAgICAgIHJldHVybiBnZGIuQ09NUExFVEVfQ09NTUFORAorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdzLCBmcm9tX3R0eSk6CisgICAgICAgICMgVE9ETyA6IENoZWNrIHdoZXRoZXIgYnJlYWsgbG9jYXRpb24gbWV0aG9kcyBhcmUgZGVmaW5lZAorICAgICAgICBBbGxvY2F0aW9uQnJlYWtwb2ludCgibWFsbG9jIikKKyAgICAgICAgQWxsb2NhdGlvbkJyZWFrcG9pbnQoIm9wZXJhdG9yIG5ld1tdIikKKyAgICAgICAgUmVhbGxvY2F0aW9uQnJlYWtwb2ludCgicmVhbGxvYyIpCisgICAgICAgIERlYWxsb2NhdGlvbkJyZWFrcG9pbnQoImZyZWUiKQorICAgICAgICBEZWFsbG9jYXRpb25CcmVha3BvaW50KCJvcGVyYXRvciBkZWxldGVbXSIpCisKKworY2xhc3MgUHJpbnRIZWFwUG9pbnRlcihnZGIuQ29tbWFuZCk6CisgICAgIiIiCisgICAgQ3VzdG9tIGNvbW1hbmQgdG8gcHJpbnQgbWVtb3J5IGFsbG9jYXRlZCBhdCBkeW5hbWljIHRpbWUKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoUHJpbnRIZWFwUG9pbnRlciwgc2VsZikuX19pbml0X18oInByaW50X3B0ciIsIGdkYi5DT01NQU5EX1VTRVIpCisKKyAgICBkZWYgY29tcGxldGUoc2VsZiwgdGV4dCwgd29yZCk6CisgICAgICAgIHJldHVybiBnZGIuQ09NUExFVEVfQ09NTUFORAorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdzLCBmcm9tX3R0eT1UcnVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBnZGIucGFyc2VfYW5kX2V2YWwoYXJncykKKyAgICAgICAgICAgIGlmIHZhbHVlLnR5cGUuY29kZSA9PSBnZGIuVFlQRV9DT0RFX1BUUjoKKyAgICAgICAgICAgICAgICBwcmludCgiVHlwZSA6ICIsIHZhbHVlLnR5cGUpCisgICAgICAgICAgICAgICAgc3RhcnRpbmdfYWRkcmVzc19zdHJpbmcgPSBnZGIuZXhlY3V0ZSgKKyAgICAgICAgICAgICAgICAgICAgJ3AveCB7fScuZm9ybWF0KHZhbHVlKSwgdG9fc3RyaW5nPVRydWUpCisgICAgICAgICAgICAgICAgcHJpbnQoIkFkZHJlc3M6ICIsCisgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfZ2RiX2VxdWFscyhzdGFydGluZ19hZGRyZXNzX3N0cmluZykpCisgICAgICAgICAgICAgICAgaW50X2FkZHJlc3MgPSBwYXJzZV9hZGRyZXNzX3RvX2ludCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIHByaW50IG1lbW9yeQorICAgICAgICAgICAgICAgIHNlbGYucHJpbnRfaGVhcChpbnRfYWRkcmVzcykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHByaW50KCdObyBzeW1ib2wgZm91bmQhJykKKworICAgIGRlZiBwcmludF9oZWFwKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJpbnRzIHRoZSBtZW1vcnkgdGhhdCBpcyBiZWluZyBwb2ludGVkIGJ5IGFkZHJlc3MgaW4gaGV4IGZvcm1hdAorCisgICAgICAgIFBhcmFtZXRlcnMKKyAgICAgICAgLS0tLS0tLS0tCisgICAgICAgIGFkZHJlc3MgOiByYXcgcG9pbnRlcgorICAgICAgICAiIiIKKworICAgICAgICBtZW1vcnlfc2l6ZSA9IEhlYXBNYXBwaW5nLmdldChhZGRyZXNzKQorICAgICAgICBpZiBtZW1vcnlfc2l6ZToKKyAgICAgICAgICAgIHByaW50KCdMZW5ndGggOicsIG1lbW9yeV9zaXplKQorICAgICAgICAgICAgcmVzdWx0ID0gJycKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICB3aGlsZSBpIDwgbWVtb3J5X3NpemU6CisgICAgICAgICAgICAgICAgYnl0ZV9zdHJpbmcgPSBnZGIuZXhlY3V0ZSgKKyAgICAgICAgICAgICAgICAgICAgJ3gvMWJ4IHt9Jy5mb3JtYXQoYWRkcmVzcyksIHRvX3N0cmluZz1UcnVlKQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBieXRlX3N0cmluZy5zcGxpdCgnOicpWzFdLnN0cmlwKCkgKyAiICIKKyAgICAgICAgICAgICAgICBhZGRyZXNzICs9IDEKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgIHByaW50KHJlc3VsdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJObyBhZGRyZXNzIG1hcHBpbmcgZm91bmQhIikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIFdhdGNoSGVhcCgpCisgICAgUHJpbnRIZWFwUG9pbnRlcigpCmRpZmYgLS1naXQgYS9nZGIvaGVhcF9wcmludC90ZXN0L3NhbXBsZV9oZWFwX3Rlc3QuY2MgYi9nZGIvaGVhcF9wcmludC90ZXN0L3NhbXBsZV9oZWFwX3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzYzQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9oZWFwX3ByaW50L3Rlc3Qvc2FtcGxlX2hlYXBfdGVzdC5jYwpAQCAtMCwwICsxLDQ1IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxuZXc+CisKK2ludCBtYWluKCkKK3sKKyAgICBpbnQgbiA9IDEwOworCisgICAgLy8gRHluYW1pY2FsbHkgYWxsb2NhdGUgbWVtb3J5IHVzaW5nIG1hbGxvYygpCisgICAgaW50ICptYWxsb2NfcHRyID0gKGludCAqKW1hbGxvYyhuICogc2l6ZW9mKGludCkpOworCisgICAgaWYgKG1hbGxvY19wdHIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8vSnVzdCBGZWVkaW5nIGRhdGEKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1hbGxvY19wdHJbaV0gPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICAvL0ZvciBjaGVja2luZyByZWFsbG9jCisgICAgICAgIGludCBuZXdfbiA9IDIwOworICAgICAgICBtYWxsb2NfcHRyID0gKGludCAqKXJlYWxsb2MobWFsbG9jX3B0ciwgbmV3X24gKiBzaXplb2YoaW50KSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV3X247ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFsbG9jX3B0cltpXSA9IGkgKyAxOworICAgICAgICB9CisgICAgICAgIC8vRm9yIGNoZWNraW5nIGZyZWUKKyAgICAgICAgZnJlZShtYWxsb2NfcHRyKTsKKyAgICB9CisKKyAgICAvLyBEeW5hbWljYWxseSBhbGxvY2F0aW5nIG1lbW9yeSB1c2luZyBvcGVyYXRvciBuZXdbXQorICAgIGludCAqbmV3X3B0ciA9IG5ldyBpbnRbbl07CisgICAgaWYgKG5ld19wdHIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8vSnVzdCBmZWVkaW5nIGRhdGEKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld19wdHJbaV0gPSBpICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIC8vRm9yIGNoZWNraW5nIG9wZXJhdG9yIGRlbGV0ZVtdCisgICAgICAgIGRlbGV0ZVtdIG5ld19wdHI7CisgICAgfQorICAgIHByaW50ZigiRG9uZSIpOworICAgIHJldHVybiAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dkYi9oZWFwX3ByaW50L3Rlc3QvdGVzdF9oZWFwX3ByaW50X3NjcmlwdC5weSBiL2dkYi9oZWFwX3ByaW50L3Rlc3QvdGVzdF9oZWFwX3ByaW50X3NjcmlwdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTE4NTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2hlYXBfcHJpbnQvdGVzdC90ZXN0X2hlYXBfcHJpbnRfc2NyaXB0LnB5CkBAIC0wLDAgKzEsMTEzIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBnZGIKKworCitkZWYgZ2V0X24obl9zdHIpOgorICAgIHJldHVybiBpbnQobl9zdHIuc3BsaXQoIj0iKVsxXS5zdHJpcCgpKQorCisKK2NsYXNzIEhlYXBNZW1vcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZ2RiLmV4ZWN1dGUoJ3NldCBwYWdpbmF0aW9uIG9uJykKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImZpbGUgdGVzdC9zYW1wbGVfaGVhcF90ZXN0Lm8iKQorICAgICAgICBnZGIuZXhlY3V0ZSgic291cmNlIGhlYXBfcHJpbnRfc2NyaXB0LnB5IikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImRlbGV0ZSIpCisgICAgICAgIGdkYi5leGVjdXRlKCJ3YXRjaF9oZWFwIikKKworICAgIGRlZiBjaGVja19tZW1vcnkoc2VsZiwgbiwgYXJyYXlfcHRyX3N0ciwgb2Zmc2V0PTEpOgorICAgICAgICAiIiIKKyAgICAgICAgSXQgaXMgdXNlZCB0byB0ZXN0IHdoYXQgd2UgZ290IGZyb20gJ3ByaW50X3B0cicgaXMgd2hhdCB3ZSBleHBlY3QuCisgICAgICAgIFNhbXBsZSB0ZXN0IHByb2dyYW0gYWxsb2NhdGVzIGFycmF5IG9mIG4gaW50J3MgdXNpbmcgbWFsbG9jIGFuZCB0aGVuCisgICAgICAgIGFzc2lnbnMgMSB0byBuIHZhbHVlcyB0byB0aGF0IGFycmF5LiBTbyBjaGVja2luZyB0aGF0IG1hbGxvY19wdHJfc3RyCisgICAgICAgIGlzIDEgdG8gbiwgZm9sbG93aW5nIGJpZyBlbmRpYW4gc2l6ZSBhbmQgc2l6ZSBvZiBpbnQgYXMgMzIgYml0cworCisgICAgICAgIFBhcmFtZXRlcnMKKyAgICAgICAgLS0tLS0tLS0tLQorICAgICAgICBuIDogaW50CisgICAgICAgICAgICBhcnJheSBsZW5ndGgKKyAgICAgICAgYXJyYXlfcHRyX3N0ciA6IHN0cgorICAgICAgICAgICAgd2hvbGUgb3V0cHV0IGZyb20gcHJpbnRfcHRyIGNvbW1hbmQgaW5jbHVkaW5nIG1lbW9yeSBjb250ZW50CisgICAgICAgIG9mZnNldCA6IGludAorICAgICAgICAgICAgY2hlY2tpbmcgbWVtb3J5IGNvbnRlbnQgc3RhcnRzIGZyb20gb2Zmc2V0IHZhbHVlLiBCeSBkZWZhdWx0IGl0IGlzIDEKKyAgICAgICAgIiIiCisKKyAgICAgICAgZGF0YSA9IGFycmF5X3B0cl9zdHIuc3BsaXQoIlxuIilbM10KKyAgICAgICAgYnl0ZXNfZnJvbV9oZWFwID0gZGF0YS5zcGxpdCgiICIpCisgICAgICAgIGFjdHVhbF9zdGFydCA9IG9mZnNldAorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBuICogNCwgNCk6CisgICAgICAgICAgICBoZXhfc3RyID0gYnl0ZXNfZnJvbV9oZWFwW2krM11bMjpdCisgICAgICAgICAgICBoZXhfc3RyICs9IGJ5dGVzX2Zyb21faGVhcFtpKzJdWzI6XQorICAgICAgICAgICAgaGV4X3N0ciArPSBieXRlc19mcm9tX2hlYXBbaSsxXVsyOl0KKyAgICAgICAgICAgIGhleF9zdHIgKz0gYnl0ZXNfZnJvbV9oZWFwW2ldWzI6XQorICAgICAgICAgICAgaW50X29mX2hleCA9IGludChoZXhfc3RyLCAxNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX3N0YXJ0LCBpbnRfb2ZfaGV4KQorICAgICAgICAgICAgYWN0dWFsX3N0YXJ0ICs9IDEKKworICAgIGRlZiB0ZXN0X21hbGxvYyhzZWxmKToKKyAgICAgICAgcHJpbnQoIm1hbGxvYyB0ZXN0IikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImIgMjAiKQorICAgICAgICBnZGIuZXhlY3V0ZSgiciIpCisgICAgICAgIG5fc3RyID0gZ2RiLmV4ZWN1dGUoInByaW50IG4iLCB0b19zdHJpbmc9VHJ1ZSkKKyAgICAgICAgbiA9IGdldF9uKG5fc3RyKQorICAgICAgICBtYWxsb2NfcHRyX2FycmF5X3N0ciA9IGdkYi5leGVjdXRlKAorICAgICAgICAgICAgInByaW50X3B0ciBtYWxsb2NfcHRyIiwgdG9fc3RyaW5nPVRydWUpCisgICAgICAgIHByaW50KG1hbGxvY19wdHJfYXJyYXlfc3RyKQorICAgICAgICBzZWxmLmNoZWNrX21lbW9yeShuLCBtYWxsb2NfcHRyX2FycmF5X3N0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFRydWUpCisKKyAgICBkZWYgdGVzdF9yZWFsbG9jKHNlbGYpOgorICAgICAgICBwcmludCgicmVhbGxvYyB0ZXN0IikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImIgMjciKQorICAgICAgICBnZGIuZXhlY3V0ZSgiciIpCisgICAgICAgIG5ld19uID0gZ2RiLmV4ZWN1dGUoInByaW50IG5ld19uIiwgdG9fc3RyaW5nPVRydWUpCisgICAgICAgIG4gPSBnZXRfbihuZXdfbikKKyAgICAgICAgbWFsbG9jX3B0cl9zdHIgPSBnZGIuZXhlY3V0ZSgicHJpbnRfcHRyIG1hbGxvY19wdHIiLCB0b19zdHJpbmc9VHJ1ZSkKKyAgICAgICAgcHJpbnQobWFsbG9jX3B0cl9zdHIpCisgICAgICAgIHNlbGYuY2hlY2tfbWVtb3J5KG4sIG1hbGxvY19wdHJfc3RyKQorCisgICAgZGVmIHRlc3Rfb2Zmc2V0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdGNhc2UgdG8gdGVzdCByYXdfcG9pbnRlcnMgdGhhdCBhcmUgb2Zmc2V0CisgICAgICAgICIiIgorCisgICAgICAgIHByaW50KCJvZmZzZXQgdGVzdC4gd2UgaGF2ZSBhcnJheSBvZiAyMCAoODAgYnl0ZXMpIGFuZCBcCisgICAgICAgICAgICAgICAgd2Ugb2Zmc2V0IGl0IGJ5IDMsIHNvIG5ldyBsZW5ndGggc2hvdWxkIGJlIDY4IikKKyAgICAgICAgb2Zmc2V0ID0gMworICAgICAgICBnZGIuZXhlY3V0ZSgiYiAyNyIpCisgICAgICAgIGdkYi5leGVjdXRlKCJyIikKKyAgICAgICAgbmV3X24gPSBnZGIuZXhlY3V0ZSgicHJpbnQgbmV3X24iLCB0b19zdHJpbmc9VHJ1ZSkKKyAgICAgICAgbiA9IGdldF9uKG5ld19uKQorICAgICAgICBtYWxsb2NfcHRyX3N0ciA9IGdkYi5leGVjdXRlKAorICAgICAgICAgICAgInByaW50X3B0ciBtYWxsb2NfcHRyICsge30iLmZvcm1hdChvZmZzZXQpLCB0b19zdHJpbmc9VHJ1ZSkKKyAgICAgICAgcHJpbnQobWFsbG9jX3B0cl9zdHIpCisgICAgICAgIHNlbGYuY2hlY2tfbWVtb3J5KG4gLSBvZmZzZXQsIG1hbGxvY19wdHJfc3RyLCBvZmZzZXQrMSkKKworICAgIGRlZiB0ZXN0X2ZyZWUoc2VsZik6CisgICAgICAgIHByaW50KCJmcmVlIHRlc3QiKQorICAgICAgICBnZGIuZXhlY3V0ZSgiYiAyOCIpCisgICAgICAgIGdkYi5leGVjdXRlKCJyIikKKyAgICAgICAgbWFsbG9jX3B0cl9zdHIgPSBnZGIuZXhlY3V0ZSgicHJpbnRfcHRyIG1hbGxvY19wdHIiLCB0b19zdHJpbmc9VHJ1ZSkKKyAgICAgICAgZGF0YSA9IG1hbGxvY19wdHJfc3RyLnNwbGl0KCJcbiIpWzJdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTm8gYWRkcmVzcyBtYXBwaW5nIGZvdW5kISIpCisKKyAgICBkZWYgdGVzdF9uZXcoc2VsZik6CisgICAgICAgIHByaW50KCJvcGVyYXRvciBuZXdbXSB0ZXN0IikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImIgNDEiKQorICAgICAgICBnZGIuZXhlY3V0ZSgiciIpCisgICAgICAgIG5fc3RyID0gZ2RiLmV4ZWN1dGUoInByaW50IG4iLCB0b19zdHJpbmc9VHJ1ZSkKKyAgICAgICAgbiA9IGdldF9uKG5fc3RyKQorICAgICAgICBuZXdfcHRyX2FycmF5X3N0ciA9IGdkYi5leGVjdXRlKCJwcmludF9wdHIgbmV3X3B0ciIsIHRvX3N0cmluZz1UcnVlKQorICAgICAgICBzZWxmLmNoZWNrX21lbW9yeShuLCBuZXdfcHRyX2FycmF5X3N0cikKKworICAgIGRlZiB0ZXN0X2RlbGV0ZShzZWxmKToKKyAgICAgICAgcHJpbnQoIm9wZXJhdG9yIGRlbGV0ZVtdIikKKyAgICAgICAgZ2RiLmV4ZWN1dGUoImIgNDIiKQorICAgICAgICBnZGIuZXhlY3V0ZSgiciIpCisgICAgICAgIG5ld19wdHJfYXJyYXlfc3RyID0gZ2RiLmV4ZWN1dGUoInByaW50X3B0ciBuZXdfcHRyIiwgdG9fc3RyaW5nPVRydWUpCisgICAgICAgIGRhdGEgPSBuZXdfcHRyX2FycmF5X3N0ci5zcGxpdCgiXG4iKVsyXS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIk5vIGFkZHJlc3MgbWFwcGluZyBmb3VuZCEiKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9nZGIvcGFyYW1ldGVyc19leHRyYWN0LnB5IGIvZ2RiL3BhcmFtZXRlcnNfZXh0cmFjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWFmNzBjCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3BhcmFtZXRlcnNfZXh0cmFjdC5weQpAQCAtMCwwICsxLDI4OCBAQAoraW1wb3J0IG9zCitpbXBvcnQgcmUKKworIyBJZiBkb2luZyBpdCBvbiBkZXZpY2Ugd2l0aCBnZGJzZXJ2ZXIKK0RFVklDRSA9IG9zLmVudmlyb24uZ2V0KCdHREJTQ1JJUFRfT05fREVWSUNFJywgRmFsc2UpCisjIFBhdGggb2YgdGhlIGZpbGUgb24gZGV2aWNlCitERVZJQ0VfRklMRVBBVEggPSBvcy5lbnZpcm9uLmdldCgnR0RCU0NSSVBUX0ZJTEVOQU1FJywgTm9uZSkKKyMgR0RCU2VydmVyJ3MgcG9ydAorREVWSUNFX1BPUlQgPSBvcy5lbnZpcm9uLmdldCgnR0RCU0NSSVBUX0RFVklDRV9QT1JUJywgNDQ0NCkKKyMgU2VyaWFsIG51bWJlciBvZiBkZXZpY2UgZm9yIGFkYgorREVWSUNFX1NFUklBTCA9IG9zLmVudmlyb24uZ2V0KCdHREJTQ1JJUFRfREVWSUNFX1NFUklBTCcsIE5vbmUpCisKK2RlZiBjaGVja19kZXZpY2VfYXJncygpOgorICAgICIiIgorICAgIENoZWNrcyBpZiBGSUxFUEFUSCBpcyBwcm92aWRlZCBpZiB0aGUgZXhlY3V0aW9uIGlzIG9uIGRldmljZQorICAgICIiIgorICAgIGlmIG5vdCBERVZJQ0U6CisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IERFVklDRV9GSUxFUEFUSDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRmlsZW5hbWUgKEdEQlNDUklQVF9GSUxFUEFUSCkgbm90IHByb3ZpZGVkIikKKworY2xhc3MgUmVjb3JkUG9pbnQoZ2RiLkJyZWFrcG9pbnQpOgorICAgICIiIgorICAgIEEgY3VzdG9tIGJyZWFrcG9pbnQgdGhhdCByZWNvcmRzIHRoZSBhcmd1bWVudHMgd2hlbiB0aGUgYnJlYWtwb2ludCBpcyBoaXQgYW5kIGNvbnRpbnVlcworICAgIEFsc28gZW5hYmxlcyB0aGUgbmV4dCBicmVha3BvaW50IGFuZCBkaXNhYmxlcyBhbGwgdGhlIG9uZXMgYWZ0ZXIgaXQKKyAgICAiIiIKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0J3MgY2FsbGVkIHdoZW4gYSBicmVha3BvaW50IGlzIGhpdC4gSWYgd2UgcmV0dXJuIHRydWUsCisgICAgICAgIGl0IGhhbHRzIG90aGVyd2lzZSBpdCBjb250aW51ZXMKKyAgICAgICAgV2UgYWx3YXlzIHJldHVybiBmYWxzZSBiZWNhdXNlIHdlIGp1c3QgbmVlZCB0byByZWNvcmQgdGhlIHZhbHVlIGFuZCB3ZQorICAgICAgICBjYW4gZG8gaXQgd2l0aG91dCBoYWx0aW5nIHRoZSBwcm9ncmFtCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFyZ3Nbc2VsZi50aW1lc19oaXQgJSBzZWxmLmNvdW50XSA9IGdldF9mdW5jdGlvbl9hcmdzKCkKKyAgICAgICAgc2VsZi50aW1lc19oaXQgKz0gMQorCisgICAgICAgIGlmIHNlbGYubmV4dF9icCAhPSBOb25lOgorICAgICAgICAgICAgc2VsZi5uZXh0X2JwLnByZXZpb3VzX2hpdCgpCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcHJldmlvdXNfaGl0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYgdGhlIHByZXZpb3VzIGJyZWFrcG9pbnQgaXMgaGl0IHNvIGl0IGNhbiBlbmFibGUKKyAgICAgICAgaXRzZWxmIGFuZCBkaXNhYmxlIHRoZSBuZXh0IG9uZXMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZW5hYmxlZCA9IFRydWUKKworICAgICAgICBpZiBzZWxmLm5leHRfYnAgIT0gTm9uZToKKyAgICAgICAgICAgIHNlbGYubmV4dF9icC5wcm9wYWdhdGVfZGlzYWJsZSgpCisKKyAgICBkZWYgcHJvcGFnYXRlX2Rpc2FibGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBEaXNhYmxlZCBhbGwgdGhlIGJyZWFrcG9pbnRzIGFmdGVyIGl0c2VsZgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5lbmFibGVkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5uZXh0X2JwICE9IE5vbmU6CisgICAgICAgICAgICBzZWxmLm5leHRfYnAucHJvcGFnYXRlX2Rpc2FibGUoKQorCisgICAgZGVmIHByb2Nlc3NfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgT3JkZXJzIHRoZSByZWNvcmRlZCBhcmd1bWVudHMgaW50byB0aGUgcmlnaHQgb3JkZXIgKG9sZGVzdCB0byBuZXdlc3QpCisgICAgICAgICIiIgorICAgICAgICBjdXJyZW50X2hpdF9wb2ludCA9IHNlbGYudGltZXNfaGl0ICUgc2VsZi5jb3VudAorICAgICAgICAjIFNwbGl0IGF0IHRoZSBwb2ludCBvZiBjdXJyZW50X2hpdF9wb2ludCBiZWNhdXNlIGFsbCB0aGUgZW50cmllcyBhZnRlciBpdAorICAgICAgICAjIGFyZSBvbGRlciB0aGFuIHRoZSBvbmVzIGJlZm9yZSBpdAorICAgICAgICBzZWxmLnByb2Nlc3NlZF9hcmdzID0gc2VsZi5hcmdzW2N1cnJlbnRfaGl0X3BvaW50Ol0gKyBzZWxmLmFyZ3NbOmN1cnJlbnRfaGl0X3BvaW50XQorICAgICAgICBzZWxmLmN1cnJlbnRfYXJnX2lkeCA9IDAKKworICAgIGRlZiBnZXRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0cyB0aGUgY3VycmVudCBhcmd1bWVudCB2YWx1ZS4KKyAgICAgICAgU2hvdWxkIGJlIGNhbGxlZCB0aGUgc2FtZSBhbW91bnQgb2YgdGltZXMgYXMgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQKKyAgICAgICAgaW4gdGhlIHN0YWNrdHJhY2UKKyAgICAgICAgRmlyc3QgY2FsbCByZXR1cm5zIHRoZSBhcmd1bWVudHMgcmVjb3JkZWQgZm9yIHRoZSBmaXJzdCBjYWxsIGluIHRoZSBzdGFja3RyYWNlCisgICAgICAgIGFuZCBzbyBvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuY3VycmVudF9hcmdfaWR4ID49IGxlbihzZWxmLnByb2Nlc3NlZF9hcmdzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBnZXQgYXJndW1lbnRzIG1vcmUgdGltZXMgdGhhbiB0aGUgZnVuY3Rpb24gXAorICAgICAgICAgICAgICAgICAgICB3YXMgcHJlc2VudCBpbiBzdGFja3RyYWNlIikKKworICAgICAgICBjdXIgPSBzZWxmLnByb2Nlc3NlZF9hcmdzW3NlbGYuY3VycmVudF9hcmdfaWR4XQorICAgICAgICBzZWxmLmN1cnJlbnRfYXJnX2lkeCArPSAxCisgICAgICAgIHJldHVybiBjdXIKKworZGVmIGluaXRfZ2RiKCk6CisgICAgIiIiCisgICAgSW5pdGlhbGl6ZWQgdGhlIEdEQiBzcGVjaWZpYyBzdHVmZgorICAgICIiIgorICAgIGdkYi5leGVjdXRlKCdzZXQgcGFnaW5hdGlvbiBvZmYnKQorICAgIGdkYi5leGVjdXRlKCdzZXQgcHJpbnQgZnJhbWUtYXJndW1lbnRzIGFsbCcpCisgICAgaWYgREVWSUNFOgorICAgICAgICBnZGIuZXhlY3V0ZSgndGFyZ2V0IGV4dGVuZGVkLXJlbW90ZSA6e30nLmZvcm1hdChERVZJQ0VfUE9SVCkpCisgICAgICAgIGdkYi5leGVjdXRlKCdzZXQgcmVtb3RlIGV4ZWMtZmlsZSAvZGF0YS9sb2NhbC90bXAve30nLmZvcm1hdChERVZJQ0VfRklMRVBBVEgpKQorCitkZWYgaW5pdGlhbF9ydW4oKToKKyAgICAiIiIKKyAgICBUaGUgaW5pdGlhbCBydW4gb2YgdGhlIHByb2dyYW0gd2hpY2ggY2FwdHVyZXMgdGhlIHN0YWNrdHJhY2UgaW4gaW5pdC5sb2cgZmlsZQorICAgICIiIgorICAgIGdkYi5leGVjdXRlKCdyID4gaW5pdC5sb2cgMj4mMScsZnJvbV90dHk9VHJ1ZSwgdG9fc3RyaW5nPVRydWUpCisgICAgaWYgREVWSUNFOgorICAgICAgICBpZiBERVZJQ0VfU0VSSUFMOgorICAgICAgICAgICAgb3Muc3lzdGVtKCdhZGIgLXMgInt9IiBwdWxsIC9kYXRhL2xvY2FsL3RtcC9pbml0LmxvZycuZm9ybWF0KERFVklDRV9TRVJJQUwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3Muc3lzdGVtKCJhZGIgcHVsbCAvZGF0YS9sb2NhbC90bXAvaW5pdC5sb2ciKQorICAgIHdpdGggb3BlbigiaW5pdC5sb2ciLCAicmIiKSBhcyBmOgorICAgICAgICBvdXQgPSBmLnJlYWQoKS5kZWNvZGUoKQorICAgIHJldHVybiBvdXQKKworZGVmIGdkYl9leGl0KCk6CisgICAgIiIiCisgICAgRXhpdHMgdGhlIEdEQiBpbnN0YW5jZQorICAgICIiIgorICAgIGdkYi5leGVjdXRlKCdxJykKKworZGVmIGdldF9zdGFja3RyYWNlX2Z1bmN0aW9ucyhzdGFja3RyYWNlKToKKyAgICAiIiIKKyAgICBHZXRzIHRoZSBmdW5jdGlvbnMgZnJvbSBBU0FOL0hXQVNBTidzIHN0YWNrdHJhY2UKKyAgICBBcmdzOgorICAgICAgICBzdGFja3RyYWNlOiAoc3RyaW5nKSBBU0FOL0hXQVNBTidzIHN0YWNrdHJhY2Ugb3V0cHV0CisgICAgUmV0dXJuczoKKyAgICAgICAgZnVuY3Rpb25zOiAobGlzdCkgZnVuY3Rpb25zIGluIHRoZSBzdGFja3RyYWNlCisgICAgIiIiCisgICAgc3RhY2t0cmFjZV9zdGFydCA9IHN0YWNrdHJhY2Vbc3RhY2t0cmFjZS5pbmRleCgnPT1FUlJPUjogJyk6XS5zcGxpdCgiXG4iKQorICAgIGZ1bmN0aW9ucyA9IFtdCisKKyAgICAjIHNraXAgdGhlIGZpcnN0IHR3byBsaW5lcyBvZiBzdGFja3RyYWNlCisgICAgZm9yIGxpbmUgaW4gc3RhY2t0cmFjZV9zdGFydFsyOl06CisgICAgICAgIGlmIGxpbmUgPT0gIiI6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgRXh0cmFjdHMgdGhlIGZ1bmN0aW9uIG5hbWUgZnJvbSBhIGxpbmUgbGlrZSB0aGlzCisgICAgICAgICMgIiMwIDB4YWRkcmVzcyBpbiBmdW5jdGlvbl9uYW1lKCkgZmlsZS9wYXRoLmNjOnh4Onl5IgorICAgICAgICBmdW5jX25hbWUgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIiAiKVszXQorICAgICAgICBpZiAnKCcgaW4gZnVuY19uYW1lOgorICAgICAgICAgICAgZnVuY19uYW1lID0gZnVuY19uYW1lWzpmdW5jX25hbWUuaW5kZXgoJygnKV0KKworICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKGZ1bmNfbmFtZSkKKworICAgICNyZW1vdmUgbGFzdCBmdW5jdGlvbiBmcm9tIHN0YWNrdHJhY2UgYmVjYXVzZSBpdCB3b3VsZCBiZSBfc3RhcnQKKyAgICByZXR1cm4gZnVuY3Rpb25zCisKK2RlZiBwYXJzZV9mdW5jdGlvbl9hcmd1bWVudHMoZnVuY19pbmZvKToKKyAgICAiIiIKKyAgICBQYXJzZXMgdGhlIG91dHB1dCBvZiAnd2hhdGlzJyBjb21tYW5kIGludG8gYSBsaXN0IG9mIGFyZ3VtZW50cworICAgICJ2b2lkICh0ZXN0c3RydWN0KSIgLS0+IFsidGVzdHN0cnVjdCJdCisgICAgImludCAoaW50ICgqKShpbnQsIGNoYXIgKiosIGNoYXIgKiopLCBpbnQsIGNoYXIgKiosIGludCAoKikoaW50LCBjaGFyICoqLCBjaGFyICoqKSwKKyAgICB2b2lkICgqKSh2b2lkKSwgdm9pZCAoKikodm9pZCksIHZvaWQgKikiIC0tPiBbJ2ludCAoKikoaW50LCBjaGFyICoqLCBjaGFyICoqKScsCisgICAgJ2ludCcsICdjaGFyICoqJywgJ2ludCAoKikoaW50LCBjaGFyICoqLCBjaGFyICoqKScsICd2b2lkICgqKSh2b2lkKScsCisgICAgJ3ZvaWQgKCopKHZvaWQpJywgJyB2b2lkIConXQorCisgICAgQXJnczoKKyAgICAgICAgZnVuY19pbmZvOiAoc3RyaW5nKSBvdXRwdXQgb2YgZ2RiJ3MgJ3doYXRpcycgY29tbWFuZCBmb3IgYSBmdW5jdGlvbgorICAgIFJldHVybnM6CisgICAgICAgIHBhcnNlZF9wYXJhbXM6IChsaXN0KSBwYXJzZWQgcGFyYW1ldGVycyBvZiB0aGUgZnVuY3Rpb24KKyAgICAiIiIKKyAgICBpZiAnKCcgbm90IGluIGZ1bmNfaW5mbzoKKyAgICAgICAgcmV0dXJuIFtdCisgICAgZnVuY19wYXJhbXMgPSBmdW5jX2luZm9bZnVuY19pbmZvLmluZGV4KCcoJykrMTotMV0KKyAgICBwYXJlbnRoZXNlc19jb3VudCA9IDAKKyAgICBjdXJyZW50X3BhcmFtID0gIiIKKyAgICBwYXJzZWRfcGFyYW1zID0gW10KKworICAgIGZvciB0b2tlbiBpbiBmdW5jX3BhcmFtczoKKyAgICAgICAgIyBFc3NlbnRpYWxseSB0cnlpbmcgdG8gZ2V0IHRoZSBkYXRhIHR5cGVzIGZyb20gYSBmdW5jdGlvbiBkZWNsYXJhdGlvbgorICAgICAgICBpZiB0b2tlbiA9PSAnKCc6CisgICAgICAgICAgICBwYXJlbnRoZXNlc19jb3VudCArPSAxCisgICAgICAgIGVsaWYgdG9rZW4gPT0gJyknOgorICAgICAgICAgICAgcGFyZW50aGVzZXNfY291bnQgLT0gMQorCisgICAgICAgICMgSWYgd2UgYXJlIG5vdCBpbnNpZGUgYW55IHBhcmVuIGFuZCBzZWUgYSAnLCcgaXQgc2lnbmFscyB0aGUgc3RhcnQgb2YKKyAgICAgICAgI3RoZSBuZXh0IHBhcmFtZXRlcgorICAgICAgICBpZiB0b2tlbiA9PSAnLCcgYW5kIHBhcmVudGhlc2VzX2NvdW50ID09IDA6CisgICAgICAgICAgICBwYXJzZWRfcGFyYW1zLmFwcGVuZChjdXJyZW50X3BhcmFtLnN0cmlwKCkpCisgICAgICAgICAgICBjdXJyZW50X3BhcmFtID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN1cnJlbnRfcGFyYW0gKz0gdG9rZW4KKworICAgIHBhcnNlZF9wYXJhbXMuYXBwZW5kKGN1cnJlbnRfcGFyYW0pCisgICAgcmV0dXJuIHBhcnNlZF9wYXJhbXMKKworZGVmIHBhcnNlX3N0YWNrdHJhY2Uoc3RhY2t0cmFjZSk6CisgICAgIiIiCisgICAgUGFyc2VzIHRoZSBBU0FOL0hXQVNBTidzIHN0YWNrdHJhY2UgdG8gYSBsaXN0IG9mIGZ1bmN0aW9ucywgdGhlaXIgYWRkcmVzc2VzCisgICAgYW5kIGFyZ3VtZW50IHR5cGVzCisgICAgQXJnczoKKyAgICAgICAgc3RhY2t0cmFjZTogKHN0cmluZykgQVNBTi9IV0FTQU4ncyBzdGFja3RyYWNlIG91dHB1dAorICAgIFJldHVybnM6CisgICAgICAgIGZ1bmN0aW9uc19pbmZvOiAobGlzdCkgcGFyc2VkIGZ1bmN0aW9uIGluZm9ybWF0aW9uIGFzIGEgZGljdGlvbmFyeQorICAgICIiIgorICAgIHN0YWNrdHJhY2VfZnVuY3Rpb25zID0gZ2V0X3N0YWNrdHJhY2VfZnVuY3Rpb25zKHN0YWNrdHJhY2UpWzotMV0KKyAgICBmdW5jdGlvbnNfaW5mbyA9IFtdCisgICAgZm9yIGZ1bmN0aW9uIGluIHN0YWNrdHJhY2VfZnVuY3Rpb25zOgorICAgICAgICAjIEdldHMgdGhlIHZhbHVlIHJpZ2h0IGhhbmQgc2lkZSBvZiBnZGIncyB3aGF0aXMgY29tbWFuZC4KKyAgICAgICAgIyAidHlwZSA9IHtmdW5jdGlvbiBpbmZvfSIgLT4gIntmdW5jdGlvbiBpbmZvfSIKKyAgICAgICAgZnVuY19pbmZvID0gZ2RiLmV4ZWN1dGUoJ3doYXRpcyB7fScuZm9ybWF0KGZ1bmN0aW9uKSwKKyAgICAgICAgICAgICAgICB0b19zdHJpbmc9VHJ1ZSkuc3BsaXQoJyA9ICcpWzFdLnN0cmlwKCkKKyAgICAgICAgIyBVc2VzIGdkYidzIHgvaSB0byBwcmludCBpdHMgYWRkcmVzcyBhbmQgcGFyc2UgaXQgZnJvbSBoZXggdG8gaW50CisgICAgICAgIGFkZHJlc3MgPSBpbnQoZ2RiLmV4ZWN1dGUoIngvaSB7fSIuZm9ybWF0KGZ1bmN0aW9uKSwKKyAgICAgICAgICAgIHRvX3N0cmluZz1UcnVlKS5zdHJpcCgpLnNwbGl0KCIgIilbMF0sIDE2KQorICAgICAgICBmdW5jdGlvbnNfaW5mby5hcHBlbmQoeyduYW1lJzogZnVuY3Rpb24sICdhZGRyZXNzJzphZGRyZXNzLAorICAgICAgICAgICAgJ2FyZ3VtZW50cycgOiBwYXJzZV9mdW5jdGlvbl9hcmd1bWVudHMoZnVuY19pbmZvKX0pCisgICAgI0luIHRoZSBvcmRlciB0aGV5IGFyZSBjYWxsZWQgaW4gdGhlIGV4ZWN1dGlvbgorICAgIHJldHVybiBmdW5jdGlvbnNfaW5mb1s6Oi0xXQorCitkZWYgZ2V0X2Z1bmN0aW9uX2FyZ3MoKToKKyAgICAiIiIKKyAgICBHZXRzIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFyZ3VtZW50cworICAgICIiIgorICAgIGFyZ3MgPSBnZGIuZXhlY3V0ZSgnaW5mbyBhcmdzIC1xJywgdG9fc3RyaW5nPVRydWUpLnN0cmlwKCkKKyAgICByZXR1cm4gYXJncworCitkZWYgZnVuY3Rpb25zX3RvX2JyZWFrcG9pbnQocGFyc2VkX2Z1bmN0aW9ucyk6CisgICAgIiIiCisgICAgU2V0cyB0aGUgYnJlYWtwb2ludCBhdCBldmVyeSBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIGRpY3Rpb25hcnkgbWFwcGluZyB0aGUKKyAgICBmdW5jdGlvbiB0byBpdCdzIGJyZWFrcG9pbnQKKyAgICBBcmdzOgorICAgICAgICBwYXJzZWRfZnVuY3Rpb25zOiAobGlzdCkgZnVuY3Rpb25zIGluIHRoZSBzdGFja3RyYWNlIChpbiB0aGUgc2FtZSBvcmRlcikgYXMKKyAgICAgICAgZGljdGlvbmFyeSB3aXRoICJuYW1lIiByZWZlcnJpbmcgdG8gdGhlIGZ1bmN0aW9uIG5hbWUKKyAgICAgICAgKHsibmFtZSIgOiBmdW5jdGlvbl9uYW1lfSkKKyAgICBSZXR1cm5zOgorICAgICAgICBmdW5jdGlvbl9icmVha3BvaW50czogKGRpY3Rpb25hcnkpIG1hcHMgdGhlIGZ1bmN0aW9uIG5hbWUgdG8gaXRzCisgICAgICAgIGJyZWFrcG9pbnQgb2JqZWN0CisgICAgIiIiCisgICAgZnVuY3Rpb25fYnJlYWtwb2ludHMgPSB7fQorICAgIGxhc3RfYnAgPSBOb25lCisKKyAgICBmb3IgZnVuY3Rpb24gaW4gcmV2ZXJzZWQocGFyc2VkX2Z1bmN0aW9ucyk6CisgICAgICAgIGZ1bmN0aW9uX25hbWUgPSBmdW5jdGlvblsnbmFtZSddCisgICAgICAgIGlmIGZ1bmN0aW9uX25hbWUgaW4gZnVuY3Rpb25fYnJlYWtwb2ludHM6CisgICAgICAgICAgICBmdW5jdGlvbl9icmVha3BvaW50c1tmdW5jdGlvbl9uYW1lXS5jb3VudCArPSAxCisgICAgICAgICAgICBmdW5jdGlvbl9icmVha3BvaW50c1tmdW5jdGlvbl9uYW1lXS5hcmdzLmFwcGVuZChOb25lKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBjdXJfYnAgPSBSZWNvcmRQb2ludCgie30iLmZvcm1hdChmdW5jdGlvbl9uYW1lKSkKKyAgICAgICAgY3VyX2JwLmNvdW50ID0gMQorICAgICAgICBjdXJfYnAudGltZXNfaGl0ID0gMAorICAgICAgICBjdXJfYnAuYXJncyA9IFtdCisgICAgICAgIGN1cl9icC5hcmdzLmFwcGVuZChOb25lKQorICAgICAgICBjdXJfYnAubmV4dF9icCA9IGxhc3RfYnAKKworICAgICAgICBmdW5jdGlvbl9icmVha3BvaW50c1tmdW5jdGlvblsnbmFtZSddXSA9IGN1cl9icAorICAgICAgICBsYXN0X2JwID0gY3VyX2JwCisKKyAgICByZXR1cm4gZnVuY3Rpb25fYnJlYWtwb2ludHMKKworZGVmIHJ1bihwYXJzZWRfZnVuY3Rpb25zKToKKyAgICAiIiIKKyAgICBSdW5zIHRoZSB3aG9sZSB0aGluZyBieSBzZXR0aW5nIHVwIGJyZWFrcG9pbnRzIGFuZCBwcmludGluZyB0aGVtIGFmdGVyCisgICAgZXhjZWN1dGlvbiBpcyBkb25lCisgICAgQXJnczoKKyAgICAgICAgcGFyc2VkX2Z1bmN0aW9uczogQSBsaXN0IG9mIGZ1bmN0aW9ucyBpbiB0aGUgc3RhY2t0cmFjZSAoaW4gdGhlIHNhbWUgb3JkZXIpCisgICAgICAgIGFzIGRpY3Rpb25hcnkgd2l0aCAibmFtZSIgcmVmZXJyaW5nIHRvIHRoZSBmdW5jdGlvbiBuYW1lCisgICAgICAgICh7Im5hbWUiIDogZnVuY3Rpb25fbmFtZX0pCisgICAgIiIiCisgICAgbmFtZXMgPSBbZnVuY3Rpb25bJ25hbWUnXSBmb3IgZnVuY3Rpb24gaW4gcGFyc2VkX2Z1bmN0aW9uc10KKyAgICBicmVha3BvaW50cyA9IGZ1bmN0aW9uc190b19icmVha3BvaW50KHBhcnNlZF9mdW5jdGlvbnMpCisKKyAgICAjRGlzYWJsZSBhbGwgYnJlYWtwb2ludHMgYXQgc3RhcnQKKyAgICBmb3IgYnAgaW4gYnJlYWtwb2ludHM6CisgICAgICAgIGJyZWFrcG9pbnRzW2JwXS5lbmFibGVkID0gRmFsc2UKKworICAgIGJyZWFrcG9pbnRzW25hbWVzWzBdXS5lbmFibGVkID0gVHJ1ZQorCisgICAgZ2RiLmV4ZWN1dGUoJ3InKQorICAgIGZvciBicmVha3BvaW50IGluIGJyZWFrcG9pbnRzOgorICAgICAgICBicmVha3BvaW50c1ticmVha3BvaW50XS5wcm9jZXNzX2FyZ3VtZW50cygpCisKKyAgICBmdW5jdGlvbl9hcmdzID0gW10KKyAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tIikKKyAgICAgICAgcHJpbnQoIkZ1bmN0aW9uIC0+IHt9Ii5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgZnVuY3Rpb25fYXJncy5hcHBlbmQoeydmdW5jdGlvbic6bmFtZSwKKyAgICAgICAgICAgICdhcmd1bWVudHMnIDogYnJlYWtwb2ludHNbbmFtZV0uZ2V0X2FyZ3VtZW50cygpfSkKKyAgICAgICAgcHJpbnQoZnVuY3Rpb25fYXJnc1stMV1bJ2FyZ3VtZW50cyddKQorCisgICAgcmV0dXJuIGZ1bmN0aW9uX2FyZ3MKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGNoZWNrX2RldmljZV9hcmdzKCkKKyAgICBpbml0X2dkYigpCisgICAgaW5pdGlhbF9vdXQgPSBpbml0aWFsX3J1bigpCisgICAgZnVuY3Rpb25fZGF0YSA9IHBhcnNlX3N0YWNrdHJhY2UoaW5pdGlhbF9vdXQpCisgICAgcnVuKGZ1bmN0aW9uX2RhdGEpCisgICAgZ2RiX2V4aXQoKQpkaWZmIC0tZ2l0IGEvcmVtb3RlX3Byb3Zpc2lvbmluZy9PV05FUlMgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL09XTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGE2NzExCi0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9PV05FUlMKQEAgLTAsMCArMSwzIEBACitqYmlyZXNAZ29vZ2xlLmNvbQorc3dpbGxkZW5AZ29vZ2xlLmNvbQord2Vkc29uYWZAZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL0FuZHJvaWQuYnAgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDFmN2MwCi0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwxNiBAQAorcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAorfQorCithbmRyb2lkX2FwcCB7CisgICAgbmFtZTogIkF0dGVzdGF0aW9uVGVzdFRvb2wiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImphdmEvKiovKi5qYXZhIiwKKyAgICBdLAorICAgIG1hbmlmZXN0OiAiQW5kcm9pZE1hbmlmZXN0LnhtbCIsCisgICAgcmVzb3VyY2VfZGlyczogWyJyZXMiXSwKKyAgICBzdGF0aWNfbGliczogWyJhbmRyb2lkeC5hcHBjb21wYXRfYXBwY29tcGF0IiwKKyAgICAgICAgICAgICAgICAgICJib3VuY3ljYXN0bGUtdW5idW5kbGVkIiwKKyAgICAgICAgICAgICAgICAgICJndWF2YSJdLAorICAgIHBsYXRmb3JtX2FwaXM6IHRydWUsCit9CmRpZmYgLS1naXQgYS9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZjAxZTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBwYWNrYWdlPSJjb20uZ29vZ2xlLmF0dGVzdGF0aW9uZXhhbXBsZSI+CisKKyAgICA8YXBwbGljYXRpb24KKyAgICAgICAgYW5kcm9pZDphbGxvd0JhY2t1cD0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDppY29uPSJAbWlwbWFwL2ljX2xhdW5jaGVyIj4KKyAgICAgICAgPGFjdGl2aXR5CisgICAgICAgICAgICBhbmRyb2lkOm5hbWU9Ii5BdHRlc3RhdGlvbkFjdGl2aXR5IgorICAgICAgICAgICAgYW5kcm9pZDpleHBvcnRlZD0idHJ1ZSI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisKKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKyAgICA8L2FwcGxpY2F0aW9uPgorCis8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL1JFQURNRSBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5MjY1NAotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9SRUFETUUKQEAgLTAsMCArMSw4IEBACitSdW4gdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBydW4gdGhpcyBhdHRlc3RhdGlvbiB0ZXN0IG9uIGRldmljZS4gRnJvbSB0aGUgcm9vdCBvZiB0aGUgdHJlZToKKz4gLiBidWlsZC9lbnZzZXR1cC5zaAorPiBsdW5jaCA8PHlvdXJfZGV2aWNlX3RhcmdldD4+Cis+IG0gQXR0ZXN0YXRpb25UZXN0VG9vbAorPiBweXRob24gdG9vbHMvc2VjdXJpdHkvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2F0dGVzdGF0aW9uX3Rlc3RfaG9zdC5weQorCitBbnkgZmFpbHVyZXMgZm91bmQgZHVyaW5nIGV4ZWN1dGlvbiB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIHRlcm1pbmFsIGluIHRoZSBmb3JtYXQgb2Y6Cis+IEF0dGVzdGF0aW9uRmFpbDogPDxEZXNjcmlwdGlvbiBvZiBmYWlsdXJlPj4KZGlmZiAtLWdpdCBhL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9hdHRlc3RhdGlvbl90ZXN0X2hvc3QucHkgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvYXR0ZXN0YXRpb25fdGVzdF9ob3N0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzg0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvYXR0ZXN0YXRpb25fdGVzdF9ob3N0LnB5CkBAIC0wLDAgKzEsMzggQEAKK2Zyb20gc3lzIGltcG9ydCBhcmd2CitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQorCitBUEtfRElSID0gJyR7QU5EUk9JRF9QUk9EVUNUX09VVH0vc3lzdGVtL2FwcC9BdHRlc3RhdGlvblRlc3RUb29sL0F0dGVzdGF0aW9uVGVzdFRvb2wuYXBrJworRkFJTFVSRV9UQUcgPSAnQXR0ZXN0YXRpb25GYWlsJworRkFJTFVSRV9QUkVGSVggPSAnRmFpbHVyZTogJworRklOSVNIRURfVEFHID0gJ0F0dGVzdGF0aW9uRmluaXNoZWQnCitJTkZPX1RBRyA9ICdBdHRlc3RhdGlvbkZhaWxJbmZvJworSU5GT19QUkVGSVggPSAnICcgKiBsZW4oRkFJTFVSRV9QUkVGSVgpCitkZXZudWxsID0gb3Blbihvcy5kZXZudWxsLCAnd2InKQorCisjIENsZWFyIGxvZ2NhdAorc3VicHJvY2Vzcy5jYWxsKCdhZGIgbG9nY2F0IC1jJywgc2hlbGw9VHJ1ZSwgc3Rkb3V0PWRldm51bGwpCitzdWJwcm9jZXNzLmNhbGwoJ2FkYiBpbnN0YWxsIC1yICcgKyBBUEtfRElSLCBzaGVsbD1UcnVlLCBzdGRvdXQ9ZGV2bnVsbCkKK3N1YnByb2Nlc3MuY2FsbCgnYWRiIHNoZWxsIGFtIHN0YXJ0IC1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIC1uIGNvbS5nb29nbGUuYXR0ZXN0YXRpb25leGFtcGxlLy5BdHRlc3RhdGlvbkFjdGl2aXR5JywKKyAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLCBzdGRvdXQ9ZGV2bnVsbCkKK2ZpbmlzaGVkID0gRmFsc2UKK3JlYWRfcmV0cnkgPSAwCitmYWlsdXJlcyA9IDAKK3doaWxlIG5vdCBmaW5pc2hlZCBhbmQgcmVhZF9yZXRyeSA8IDU6CisgICAgdGltZS5zbGVlcCgxKQorICAgIGxvZ2NhdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnYWRiJywgJ2xvZ2NhdCcsICctZCddLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgZm9yIGxpbmUgaW4gbG9nY2F0LnNwbGl0KCdcbicpOgorICAgICAgICBpZiBJTkZPX1RBRyBpbiBsaW5lOgorICAgICAgICAgICAgcHJpbnQgSU5GT19QUkVGSVggKyBsaW5lW2xpbmUuaW5kZXgoJ0F0dGVzdGF0aW9uRmFpbEluZm8nKSArIGxlbignQXR0ZXN0YXRpb25GYWlsSW5mbzonKTpdCisgICAgICAgIGVsaWYgRkFJTFVSRV9UQUcgaW4gbGluZToKKyAgICAgICAgICAgIGZhaWx1cmVzICs9IDEKKyAgICAgICAgICAgIHByaW50IEZBSUxVUkVfUFJFRklYICsgbGluZVtsaW5lLmluZGV4KCdBdHRlc3RhdGlvbkZhaWwnKSArIGxlbignQXR0ZXN0YXRpb25GYWlsOicpOl0KKyAgICAgICAgZWxpZiBGSU5JU0hFRF9UQUcgaW4gbGluZSBhbmQgbm90IGZpbmlzaGVkOgorICAgICAgICAgICAgcHJpbnQgJ0ZpbmlzaGVkLiBGYWlsdXJlczogJyArIHN0cihmYWlsdXJlcykKKyAgICAgICAgICAgIGZpbmlzaGVkID0gVHJ1ZQorICAgICAgICAgICAgYnJlYWsKKyAgICByZWFkX3JldHJ5ICs9IDEKKyAgICBpZiByZWFkX3JldHJ5IGlzIDU6CisgICAgICAgIHByaW50ICdBdHRlc3RhdGlvbiB0ZXN0IGRpZCBub3QgY29tcGxldGUsIGNoZWNrIGxvZ2NhdCB0byBkZXRlcm1pbmUgdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3InCitzdWJwcm9jZXNzLmNhbGwoJ2FkYiB1bmluc3RhbGwgY29tLmdvb2dsZS5hdHRlc3RhdGlvbmV4YW1wbGUnLCBzaGVsbD1UcnVlLCBzdGRvdXQ9ZGV2bnVsbCkKZGlmZiAtLWdpdCBhL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9qYXZhL2NvbS9nb29nbGUvYXR0ZXN0YXRpb25leGFtcGxlL0FzbjFVdGlscy5qYXZhIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2phdmEvY29tL2dvb2dsZS9hdHRlc3RhdGlvbmV4YW1wbGUvQXNuMVV0aWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkYzYyYgotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9qYXZhL2NvbS9nb29nbGUvYXR0ZXN0YXRpb25leGFtcGxlL0FzbjFVdGlscy5qYXZhCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZ29vZ2xlLmF0dGVzdGF0aW9uZXhhbXBsZTsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlU2V0OworCitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkFTTjFCb29sZWFuOworaW1wb3J0IG9yZy5ib3VuY3ljYXN0bGUuYXNuMS5BU04xRW5jb2RhYmxlOworaW1wb3J0IG9yZy5ib3VuY3ljYXN0bGUuYXNuMS5BU04xRW51bWVyYXRlZDsKK2ltcG9ydCBvcmcuYm91bmN5Y2FzdGxlLmFzbjEuQVNOMUlucHV0U3RyZWFtOworaW1wb3J0IG9yZy5ib3VuY3ljYXN0bGUuYXNuMS5BU04xSW50ZWdlcjsKK2ltcG9ydCBvcmcuYm91bmN5Y2FzdGxlLmFzbjEuQVNOMU9jdGV0U3RyaW5nOworaW1wb3J0IG9yZy5ib3VuY3ljYXN0bGUuYXNuMS5BU04xUHJpbWl0aXZlOworaW1wb3J0IG9yZy5ib3VuY3ljYXN0bGUuYXNuMS5BU04xU2VxdWVuY2U7CitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkFTTjFTZXQ7CitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkRFUk9jdGV0U3RyaW5nOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5sYW5nLlN0cmluZzsKK2ltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitwdWJsaWMgY2xhc3MgQXNuMVV0aWxzIHsKKworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldEludGVnZXJGcm9tQXNuMShBU04xRW5jb2RhYmxlIGFzbjFWYWx1ZSkKKyAgICAgICAgICAgIHRocm93cyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24geworICAgICAgICBpZiAoYXNuMVZhbHVlIGluc3RhbmNlb2YgQVNOMUludGVnZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBiaWdJbnRlZ2VyVG9JbnQoKChBU04xSW50ZWdlcikgYXNuMVZhbHVlKS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChhc24xVmFsdWUgaW5zdGFuY2VvZiBBU04xRW51bWVyYXRlZCkgeworICAgICAgICAgICAgcmV0dXJuIGJpZ0ludGVnZXJUb0ludCgoKEFTTjFFbnVtZXJhdGVkKSBhc24xVmFsdWUpLmdldFZhbHVlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQsICIgKyBhc24xVmFsdWUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGZvdW5kLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBMb25nIGdldExvbmdGcm9tQXNuMShBU04xRW5jb2RhYmxlIGFzbjFWYWx1ZSkgdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChhc24xVmFsdWUgaW5zdGFuY2VvZiBBU04xSW50ZWdlcikgeworICAgICAgICAgICAgcmV0dXJuIGJpZ0ludGVnZXJUb0xvbmcoKChBU04xSW50ZWdlcikgYXNuMVZhbHVlKS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkLCAiICsgYXNuMVZhbHVlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBmb3VuZC4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGdldEJ5dGVBcnJheUZyb21Bc24xKEFTTjFFbmNvZGFibGUgYXNuMUVuY29kYWJsZSkKKyAgICAgICAgICAgIHRocm93cyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24geworICAgICAgICBpZiAoYXNuMUVuY29kYWJsZSA9PSBudWxsIHx8ICEoYXNuMUVuY29kYWJsZSBpbnN0YW5jZW9mIERFUk9jdGV0U3RyaW5nKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbigiRXhwZWN0ZWQgREVST2N0ZXRTdHJpbmciKTsKKyAgICAgICAgfQorICAgICAgICBBU04xT2N0ZXRTdHJpbmcgZGVyT2N0ZWN0U3RyaW5nID0gKEFTTjFPY3RldFN0cmluZykgYXNuMUVuY29kYWJsZTsKKyAgICAgICAgcmV0dXJuIGRlck9jdGVjdFN0cmluZy5nZXRPY3RldHMoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEFTTjFFbmNvZGFibGUgZ2V0QXNuMUVuY29kYWJsZUZyb21CeXRlcyhieXRlW10gYnl0ZXMpCisgICAgICAgICAgICB0aHJvd3MgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IChBU04xSW5wdXRTdHJlYW0gYXNuMUlucHV0U3RyZWFtID0gbmV3IEFTTjFJbnB1dFN0cmVhbShieXRlcykpIHsKKyAgICAgICAgICAgIHJldHVybiBhc24xSW5wdXRTdHJlYW0ucmVhZE9iamVjdCgpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgRW5jb2RhYmxlIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEFTTjFTZXF1ZW5jZSBnZXRBc24xU2VxdWVuY2VGcm9tQnl0ZXMoYnl0ZVtdIGJ5dGVzKQorICAgICAgICAgICAgdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIHRyeSAoQVNOMUlucHV0U3RyZWFtIGFzbjFJbnB1dFN0cmVhbSA9IG5ldyBBU04xSW5wdXRTdHJlYW0oYnl0ZXMpKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0QXNuMVNlcXVlbmNlRnJvbVN0cmVhbShhc24xSW5wdXRTdHJlYW0pOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgU0VRVUVOQ0UiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgQVNOMVNlcXVlbmNlIGdldEFzbjFTZXF1ZW5jZUZyb21TdHJlYW0oZmluYWwgQVNOMUlucHV0U3RyZWFtIGFzbjFJbnB1dFN0cmVhbSkKKyAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgQVNOMVByaW1pdGl2ZSBhc24xUHJpbWl0aXZlID0gYXNuMUlucHV0U3RyZWFtLnJlYWRPYmplY3QoKTsKKyAgICAgICAgaWYgKCEoYXNuMVByaW1pdGl2ZSBpbnN0YW5jZW9mIEFTTjFPY3RldFN0cmluZykpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBvY3RldCBzdHJlYW0sIGZvdW5kICIgKyBhc24xUHJpbWl0aXZlLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgKEFTTjFJbnB1dFN0cmVhbSBzZXFJbnB1dFN0cmVhbSA9IG5ldyBBU04xSW5wdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgKChBU04xT2N0ZXRTdHJpbmcpIGFzbjFQcmltaXRpdmUpLmdldE9jdGV0cygpKSkgeworICAgICAgICAgICAgYXNuMVByaW1pdGl2ZSA9IHNlcUlucHV0U3RyZWFtLnJlYWRPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghKGFzbjFQcmltaXRpdmUgaW5zdGFuY2VvZiBBU04xU2VxdWVuY2UpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBzZXF1ZW5jZSwgZm91bmQgIiArIGFzbjFQcmltaXRpdmUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChBU04xU2VxdWVuY2UpIGFzbjFQcmltaXRpdmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFNldDxJbnRlZ2VyPiBnZXRJbnRlZ2Vyc0Zyb21Bc24xU2V0KEFTTjFFbmNvZGFibGUgc2V0KQorICAgICAgICAgICAgdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIGlmICghKHNldCBpbnN0YW5jZW9mIEFTTjFTZXQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgc2V0LCBmb3VuZCAiICsgc2V0LmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEltbXV0YWJsZVNldC5CdWlsZGVyPEludGVnZXI+IGJ1aWxkZXIgPSBJbW11dGFibGVTZXQuYnVpbGRlcigpOworICAgICAgICBmb3IgKEVudW1lcmF0aW9uPD8+IGUgPSAoKEFTTjFTZXQpIHNldCkuZ2V0T2JqZWN0cygpOyBlLmhhc01vcmVFbGVtZW50cygpOykgeworICAgICAgICAgICAgYnVpbGRlci5hZGQoZ2V0SW50ZWdlckZyb21Bc24xKChBU04xSW50ZWdlcikgZS5uZXh0RWxlbWVudCgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmdGcm9tQXNuMU9jdGV0U3RyZWFtQXNzdW1pbmdVVEY4KEFTTjFFbmNvZGFibGUgZW5jb2RhYmxlKQorICAgICAgICAgICAgdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiwgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB7CisgICAgICAgIGlmICghKGVuY29kYWJsZSBpbnN0YW5jZW9mIEFTTjFPY3RldFN0cmluZykpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBvY3RldCBzdHJpbmcsIGZvdW5kICIgKyBlbmNvZGFibGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgQVNOMU9jdGV0U3RyaW5nIG9jdGV0U3RyaW5nID0gKEFTTjFPY3RldFN0cmluZykgZW5jb2RhYmxlOworICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhvY3RldFN0cmluZy5nZXRPY3RldHMoKSwgIlVURi04Iik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBEYXRlIGdldERhdGVGcm9tQXNuMShBU04xUHJpbWl0aXZlIHZhbHVlKSB0aHJvd3MgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGdldExvbmdGcm9tQXNuMSh2YWx1ZSkpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRCb29sZWFuRnJvbUFzbjEoQVNOMUVuY29kYWJsZSB2YWx1ZSkKKyAgICAgICAgICAgIHRocm93cyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24geworICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIEFTTjFCb29sZWFuKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGJvb2xlYW4sIGZvdW5kICIgKyB2YWx1ZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICgoQVNOMUJvb2xlYW4pIHZhbHVlKS5pc1RydWUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgYmlnSW50ZWdlclRvSW50KEJpZ0ludGVnZXIgYmlnSW50KSB0aHJvd3MgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKGJpZ0ludC5jb21wYXJlVG8oQmlnSW50ZWdlci52YWx1ZU9mKEludGVnZXIuTUFYX1ZBTFVFKSkgPiAwCisgICAgICAgICAgICAgICAgfHwgYmlnSW50LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pIDwgMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbigiSU5URUdFUiBvdXQgb2YgYm91bmRzIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJpZ0ludC5pbnRWYWx1ZSgpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGxvbmcgYmlnSW50ZWdlclRvTG9uZyhCaWdJbnRlZ2VyIGJpZ0ludCkgdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChiaWdJbnQuY29tcGFyZVRvKEJpZ0ludGVnZXIudmFsdWVPZihMb25nLk1BWF9WQUxVRSkpID4gMAorICAgICAgICAgICAgICAgIHx8IGJpZ0ludC5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA8IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24oIklOVEVHRVIgb3V0IG9mIGJvdW5kcyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiaWdJbnQubG9uZ1ZhbHVlKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9qYXZhL2NvbS9nb29nbGUvYXR0ZXN0YXRpb25leGFtcGxlL0F0dGVzdGF0aW9uLmphdmEgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvamF2YS9jb20vZ29vZ2xlL2F0dGVzdGF0aW9uZXhhbXBsZS9BdHRlc3RhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGZmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvamF2YS9jb20vZ29vZ2xlL2F0dGVzdGF0aW9uZXhhbXBsZS9BdHRlc3RhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZ29vZ2xlLmF0dGVzdGF0aW9uZXhhbXBsZTsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmJhc2UuQ2hhck1hdGNoZXI7CitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaW8uQmFzZUVuY29kaW5nOworCitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkFTTjFTZXF1ZW5jZTsKKworaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZTsKKworLyoqCisgKiBQYXJzZXMgYW4gYXR0ZXN0YXRpb24gY2VydGlmaWNhdGUgYW5kIHByb3ZpZGVzIGFuIGVhc3ktdG8tdXNlIGludGVyZmFjZSBmb3IgZXhhbWluaW5nIHRoZQorICogY29udGVudHMuCisgKi8KK3B1YmxpYyBjbGFzcyBBdHRlc3RhdGlvbiB7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfREVTQ1JJUFRJT05fT0lEID0gIjEuMy42LjEuNC4xLjExMTI5LjIuMS4xNyI7CisgICAgc3RhdGljIGZpbmFsIGludCBBVFRFU1RBVElPTl9WRVJTSU9OX0lOREVYID0gMDsKKyAgICBzdGF0aWMgZmluYWwgaW50IEFUVEVTVEFUSU9OX1NFQ1VSSVRZX0xFVkVMX0lOREVYID0gMTsKKyAgICBzdGF0aWMgZmluYWwgaW50IEtFWU1BU1RFUl9WRVJTSU9OX0lOREVYID0gMjsKKyAgICBzdGF0aWMgZmluYWwgaW50IEtFWU1BU1RFUl9TRUNVUklUWV9MRVZFTF9JTkRFWCA9IDM7CisgICAgc3RhdGljIGZpbmFsIGludCBBVFRFU1RBVElPTl9DSEFMTEVOR0VfSU5ERVggPSA0OworICAgIHN0YXRpYyBmaW5hbCBpbnQgVU5JUVVFX0lEX0lOREVYID0gNTsKKyAgICBzdGF0aWMgZmluYWwgaW50IFNXX0VORk9SQ0VEX0lOREVYID0gNjsKKyAgICBzdGF0aWMgZmluYWwgaW50IFRFRV9FTkZPUkNFRF9JTkRFWCA9IDc7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9TRUNVUklUWV9MRVZFTF9TT0ZUV0FSRSA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fU0VDVVJJVFlfTEVWRUxfVFJVU1RFRF9FTlZJUk9OTUVOVCA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fU0VDVVJJVFlfTEVWRUxfU1RST05HQk9YID0gMjsKKworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBoYXZlQXR0ZXN0YXRpb247CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgYXR0ZXN0YXRpb25WZXJzaW9uOworICAgIHByaXZhdGUgZmluYWwgaW50IGF0dGVzdGF0aW9uU2VjdXJpdHlMZXZlbDsKKyAgICBwcml2YXRlIGZpbmFsIGludCBrZXltYXN0ZXJWZXJzaW9uOworICAgIHByaXZhdGUgZmluYWwgaW50IGtleW1hc3RlclNlY3VyaXR5TGV2ZWw7CisgICAgcHJpdmF0ZSBmaW5hbCBieXRlW10gYXR0ZXN0YXRpb25DaGFsbGVuZ2U7CisgICAgcHJpdmF0ZSBmaW5hbCBieXRlW10gdW5pcXVlSWQ7CisgICAgcHJpdmF0ZSBmaW5hbCBBdXRob3JpemF0aW9uTGlzdCBzb2Z0d2FyZUVuZm9yY2VkOworICAgIHByaXZhdGUgZmluYWwgQXV0aG9yaXphdGlvbkxpc3QgdGVlRW5mb3JjZWQ7CisKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4ge0Bjb2RlIEF0dGVzdGF0aW9ufSBvYmplY3QgZnJvbSB0aGUgcHJvdmlkZWQge0BsaW5rIFg1MDlDZXJ0aWZpY2F0ZX0sCisgICAgICogZXh0cmFjdGluZyB0aGUgYXR0ZXN0YXRpb24gZGF0YSBmcm9tIHRoZSBhdHRlc3RhdGlvbiBleHRlbnNpb24uCisgICAgICoKKyAgICAgKiBAdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiBpZiB0aGUgY2VydGlmaWNhdGUgZG9lcyBub3QgY29udGFpbiBhIHByb3Blcmx5LWZvcm1hdHRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVzdGF0aW9uIGV4dGVuc2lvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXR0ZXN0YXRpb24oWDUwOUNlcnRpZmljYXRlIHg1MDlDZXJ0KSB0aHJvd3MgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgQVNOMVNlcXVlbmNlIHNlcSA9IGdldEF0dGVzdGF0aW9uU2VxdWVuY2UoeDUwOUNlcnQpOworICAgICAgICBpZiAoc2VxID09IG51bGwpIHsKKyAgICAgICAgICAgIGhhdmVBdHRlc3RhdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgYXR0ZXN0YXRpb25WZXJzaW9uID0gMDsKKyAgICAgICAgICAgIGF0dGVzdGF0aW9uU2VjdXJpdHlMZXZlbCA9IDA7CisgICAgICAgICAgICBrZXltYXN0ZXJWZXJzaW9uID0gMDsKKyAgICAgICAgICAgIGtleW1hc3RlclNlY3VyaXR5TGV2ZWwgPSAwOworICAgICAgICAgICAgYXR0ZXN0YXRpb25DaGFsbGVuZ2UgPSBudWxsOworICAgICAgICAgICAgdW5pcXVlSWQgPSBudWxsOworICAgICAgICAgICAgc29mdHdhcmVFbmZvcmNlZCA9IG51bGw7CisgICAgICAgICAgICB0ZWVFbmZvcmNlZCA9IG51bGw7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBoYXZlQXR0ZXN0YXRpb24gPSB0cnVlOworICAgICAgICBhdHRlc3RhdGlvblZlcnNpb24gPQorICAgICAgICAgICAgICAgIEFzbjFVdGlscy5nZXRJbnRlZ2VyRnJvbUFzbjEoc2VxLmdldE9iamVjdEF0KEFUVEVTVEFUSU9OX1ZFUlNJT05fSU5ERVgpKTsKKyAgICAgICAgYXR0ZXN0YXRpb25TZWN1cml0eUxldmVsID0KKyAgICAgICAgICAgICAgICBBc24xVXRpbHMuZ2V0SW50ZWdlckZyb21Bc24xKHNlcS5nZXRPYmplY3RBdChBVFRFU1RBVElPTl9TRUNVUklUWV9MRVZFTF9JTkRFWCkpOworICAgICAgICBrZXltYXN0ZXJWZXJzaW9uID0gQXNuMVV0aWxzLmdldEludGVnZXJGcm9tQXNuMShzZXEuZ2V0T2JqZWN0QXQoS0VZTUFTVEVSX1ZFUlNJT05fSU5ERVgpKTsKKyAgICAgICAga2V5bWFzdGVyU2VjdXJpdHlMZXZlbCA9CisgICAgICAgICAgICAgICAgQXNuMVV0aWxzLmdldEludGVnZXJGcm9tQXNuMShzZXEuZ2V0T2JqZWN0QXQoS0VZTUFTVEVSX1NFQ1VSSVRZX0xFVkVMX0lOREVYKSk7CisKKyAgICAgICAgYXR0ZXN0YXRpb25DaGFsbGVuZ2UgPQorICAgICAgICAgICAgICAgIEFzbjFVdGlscy5nZXRCeXRlQXJyYXlGcm9tQXNuMSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcS5nZXRPYmplY3RBdChBdHRlc3RhdGlvbi5BVFRFU1RBVElPTl9DSEFMTEVOR0VfSU5ERVgpKTsKKworICAgICAgICB1bmlxdWVJZCA9IEFzbjFVdGlscy5nZXRCeXRlQXJyYXlGcm9tQXNuMShzZXEuZ2V0T2JqZWN0QXQoQXR0ZXN0YXRpb24uVU5JUVVFX0lEX0lOREVYKSk7CisKKyAgICAgICAgc29mdHdhcmVFbmZvcmNlZCA9IG5ldyBBdXRob3JpemF0aW9uTGlzdChzZXEuZ2V0T2JqZWN0QXQoU1dfRU5GT1JDRURfSU5ERVgpKTsKKyAgICAgICAgdGVlRW5mb3JjZWQgPSBuZXcgQXV0aG9yaXphdGlvbkxpc3Qoc2VxLmdldE9iamVjdEF0KFRFRV9FTkZPUkNFRF9JTkRFWCkpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHNlY3VyaXR5TGV2ZWxUb1N0cmluZyhpbnQgYXR0ZXN0YXRpb25TZWN1cml0eUxldmVsKSB7CisgICAgICAgIHN3aXRjaCAoYXR0ZXN0YXRpb25TZWN1cml0eUxldmVsKSB7CisgICAgICAgICAgICBjYXNlIEtNX1NFQ1VSSVRZX0xFVkVMX1NPRlRXQVJFOgorICAgICAgICAgICAgICAgIHJldHVybiAiU29mdHdhcmUiOworICAgICAgICAgICAgY2FzZSBLTV9TRUNVUklUWV9MRVZFTF9UUlVTVEVEX0VOVklST05NRU5UOgorICAgICAgICAgICAgICAgIHJldHVybiAiVEVFIjsKKyAgICAgICAgICAgIGNhc2UgS01fU0VDVVJJVFlfTEVWRUxfU1RST05HQk9YOgorICAgICAgICAgICAgICAgIHJldHVybiAiU3Ryb25nQm94IjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0QXR0ZXN0YXRpb25WZXJzaW9uKCkgeworICAgICAgICByZXR1cm4gYXR0ZXN0YXRpb25WZXJzaW9uOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0QXR0ZXN0YXRpb25TZWN1cml0eUxldmVsKCkgeworICAgICAgICByZXR1cm4gYXR0ZXN0YXRpb25TZWN1cml0eUxldmVsOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0S2V5bWFzdGVyVmVyc2lvbigpIHsKKyAgICAgICAgcmV0dXJuIGtleW1hc3RlclZlcnNpb247CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRLZXltYXN0ZXJTZWN1cml0eUxldmVsKCkgeworICAgICAgICByZXR1cm4ga2V5bWFzdGVyU2VjdXJpdHlMZXZlbDsKKyAgICB9CisKKyAgICBwdWJsaWMgYnl0ZVtdIGdldEF0dGVzdGF0aW9uQ2hhbGxlbmdlKCkgeworICAgICAgICByZXR1cm4gYXR0ZXN0YXRpb25DaGFsbGVuZ2U7CisgICAgfQorCisgICAgcHVibGljIGJ5dGVbXSBnZXRVbmlxdWVJZCgpIHsKKyAgICAgICAgcmV0dXJuIHVuaXF1ZUlkOworICAgIH0KKworICAgIHB1YmxpYyBBdXRob3JpemF0aW9uTGlzdCBnZXRTb2Z0d2FyZUVuZm9yY2VkKCkgeworICAgICAgICByZXR1cm4gc29mdHdhcmVFbmZvcmNlZDsKKyAgICB9CisKKyAgICBwdWJsaWMgQXV0aG9yaXphdGlvbkxpc3QgZ2V0VGVlRW5mb3JjZWQoKSB7CisgICAgICAgIHJldHVybiB0ZWVFbmZvcmNlZDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBpZiAoIWhhdmVBdHRlc3RhdGlvbikgeworICAgICAgICAgICAgcmV0dXJuICJObyBhdHRlc3RhdGlvbiI7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmdCdWlsZGVyIHMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBzLmFwcGVuZCgiQXR0ZXN0YXRpb24gdmVyc2lvbjogIiArIGF0dGVzdGF0aW9uVmVyc2lvbik7CisgICAgICAgIHMuYXBwZW5kKCJcbkF0dGVzdGF0aW9uIHNlY3VyaXR5OiAiICsgc2VjdXJpdHlMZXZlbFRvU3RyaW5nKGF0dGVzdGF0aW9uU2VjdXJpdHlMZXZlbCkpOworICAgICAgICBzLmFwcGVuZCgiXG5LTSB2ZXJzaW9uOiAiICsga2V5bWFzdGVyVmVyc2lvbik7CisgICAgICAgIHMuYXBwZW5kKCJcbktNIHNlY3VyaXR5OiAiICsgc2VjdXJpdHlMZXZlbFRvU3RyaW5nKGtleW1hc3RlclNlY3VyaXR5TGV2ZWwpKTsKKworICAgICAgICBzLmFwcGVuZCgiXG5DaGFsbGVuZ2UiKTsKKyAgICAgICAgU3RyaW5nIHN0cmluZ0NoYWxsZW5nZSA9IG5ldyBTdHJpbmcoYXR0ZXN0YXRpb25DaGFsbGVuZ2UpOworICAgICAgICBpZiAoQ2hhck1hdGNoZXIuYXNjaWkoKS5tYXRjaGVzQWxsT2Yoc3RyaW5nQ2hhbGxlbmdlKSkgeworICAgICAgICAgICAgcy5hcHBlbmQoIjogWyIgKyBzdHJpbmdDaGFsbGVuZ2UgKyAiXSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcy5hcHBlbmQoIiAoYmFzZTY0KTogWyIgKyBCYXNlRW5jb2RpbmcuYmFzZTY0KCkuZW5jb2RlKGF0dGVzdGF0aW9uQ2hhbGxlbmdlKSArICJdIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVuaXF1ZUlkICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcblVuaXF1ZSBJRCAoYmFzZTY0KTogWyIgKyBCYXNlRW5jb2RpbmcuYmFzZTY0KCkuZW5jb2RlKHVuaXF1ZUlkKSArICJdIik7CisgICAgICAgIH0KKworICAgICAgICBzLmFwcGVuZCgiXG5cbi0tIFNXIGVuZm9yY2VkIC0tIik7CisgICAgICAgIHMuYXBwZW5kKHNvZnR3YXJlRW5mb3JjZWQpOworICAgICAgICBzLmFwcGVuZCgiXG5cbi0tIFRFRSBlbmZvcmNlZCAtLSIpOworICAgICAgICBzLmFwcGVuZCh0ZWVFbmZvcmNlZCk7CisgICAgICAgIHMuYXBwZW5kKCJcbiIpOworCisgICAgICAgIHJldHVybiBzLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBBU04xU2VxdWVuY2UgZ2V0QXR0ZXN0YXRpb25TZXF1ZW5jZShYNTA5Q2VydGlmaWNhdGUgeDUwOUNlcnQpCisgICAgICAgICAgICB0aHJvd3MgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgYnl0ZVtdIGF0dGVzdGF0aW9uRXh0ZW5zaW9uQnl0ZXMgPSB4NTA5Q2VydC5nZXRFeHRlbnNpb25WYWx1ZShLRVlfREVTQ1JJUFRJT05fT0lEKTsKKyAgICAgICAgaWYgKGF0dGVzdGF0aW9uRXh0ZW5zaW9uQnl0ZXMgPT0gbnVsbCB8fCBhdHRlc3RhdGlvbkV4dGVuc2lvbkJ5dGVzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQXNuMVV0aWxzLmdldEFzbjFTZXF1ZW5jZUZyb21CeXRlcyhhdHRlc3RhdGlvbkV4dGVuc2lvbkJ5dGVzKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9qYXZhL2NvbS9nb29nbGUvYXR0ZXN0YXRpb25leGFtcGxlL0F0dGVzdGF0aW9uQWN0aXZpdHkuamF2YSBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9qYXZhL2NvbS9nb29nbGUvYXR0ZXN0YXRpb25leGFtcGxlL0F0dGVzdGF0aW9uQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmI4Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2phdmEvY29tL2dvb2dsZS9hdHRlc3RhdGlvbmV4YW1wbGUvQXR0ZXN0YXRpb25BY3Rpdml0eS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKK3BhY2thZ2UgY29tLmdvb2dsZS5hdHRlc3RhdGlvbmV4YW1wbGU7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKKworcHVibGljIGNsYXNzIEF0dGVzdGF0aW9uQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIHJ1blRlc3RzKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHJ1blRlc3RzKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbmV3IEF0dGVzdGF0aW9uVGVzdCgpLmV4ZWN1dGUoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvamF2YS9jb20vZ29vZ2xlL2F0dGVzdGF0aW9uZXhhbXBsZS9BdHRlc3RhdGlvbkFwcGxpY2F0aW9uSWQuamF2YSBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9qYXZhL2NvbS9nb29nbGUvYXR0ZXN0YXRpb25leGFtcGxlL0F0dGVzdGF0aW9uQXBwbGljYXRpb25JZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYmQyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvamF2YS9jb20vZ29vZ2xlL2F0dGVzdGF0aW9uZXhhbXBsZS9BdHRlc3RhdGlvbkFwcGxpY2F0aW9uSWQuamF2YQpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0CisgKiBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UKKyAqIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZ29vZ2xlLmF0dGVzdGF0aW9uZXhhbXBsZTsKKworaW1wb3J0IG9yZy5ib3VuY3ljYXN0bGUuYXNuMS5BU04xRW5jb2RhYmxlOworaW1wb3J0IG9yZy5ib3VuY3ljYXN0bGUuYXNuMS5BU04xU2VxdWVuY2U7CitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkFTTjFTZXQ7CisKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdDsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5TaWduYXR1cmU7CisKK3B1YmxpYyBjbGFzcyBBdHRlc3RhdGlvbkFwcGxpY2F0aW9uSWQgaW1wbGVtZW50cyBqYXZhLmxhbmcuQ29tcGFyYWJsZTxBdHRlc3RhdGlvbkFwcGxpY2F0aW9uSWQ+IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUEFDS0FHRV9JTkZPU19JTkRFWCA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNJR05BVFVSRV9ESUdFU1RTX0lOREVYID0gMTsKKworICAgIHByaXZhdGUgZmluYWwgTGlzdDxBdHRlc3RhdGlvblBhY2thZ2VJbmZvPiBwYWNrYWdlSW5mb3M7CisgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PGJ5dGVbXT4gc2lnbmF0dXJlRGlnZXN0czsKKworICAgIHB1YmxpYyBBdHRlc3RhdGlvbkFwcGxpY2F0aW9uSWQoQ29udGV4dCBjb250ZXh0KQorICAgICAgICAgICAgdGhyb3dzIE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiwgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIGludCB1aWQgPSBjb250ZXh0LmdldEFwcGxpY2F0aW9uSW5mbygpLnVpZDsKKyAgICAgICAgU3RyaW5nW10gcGFja2FnZU5hbWVzID0gcG0uZ2V0UGFja2FnZXNGb3JVaWQodWlkKTsKKyAgICAgICAgaWYgKHBhY2thZ2VOYW1lcyA9PSBudWxsIHx8IHBhY2thZ2VOYW1lcy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IE5hbWVOb3RGb3VuZEV4Y2VwdGlvbigiTm8gbmFtZXMgZm91bmQgZm9yIHVpZCIpOworICAgICAgICB9CisgICAgICAgIHBhY2thZ2VJbmZvcyA9IG5ldyBBcnJheUxpc3Q8QXR0ZXN0YXRpb25QYWNrYWdlSW5mbz4oKTsKKyAgICAgICAgZm9yIChTdHJpbmcgcGFja2FnZU5hbWUgOiBwYWNrYWdlTmFtZXMpIHsKKyAgICAgICAgICAgIC8vIGdldCB0aGUgcGFja2FnZSBpbmZvIGZvciB0aGUgZ2l2ZW4gcGFja2FnZSBuYW1lIGluY2x1ZGluZworICAgICAgICAgICAgLy8gdGhlIHNpZ25hdHVyZXMKKyAgICAgICAgICAgIFBhY2thZ2VJbmZvIHBhY2thZ2VJbmZvID0gcG0uZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWUsIDApOworICAgICAgICAgICAgcGFja2FnZUluZm9zLmFkZChuZXcgQXR0ZXN0YXRpb25QYWNrYWdlSW5mbyhwYWNrYWdlTmFtZSwgcGFja2FnZUluZm8udmVyc2lvbkNvZGUpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUaGUgaW5mb3MgbXVzdCBiZSBzb3J0ZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBDb21wYXJhYmxlIHJlbGllcyBvbiBpdC4KKyAgICAgICAgcGFja2FnZUluZm9zLnNvcnQobnVsbCk7CisKKyAgICAgICAgLy8gY29tcHV0ZSB0aGUgc2hhMjU2IGRpZ2VzdHMgb2YgdGhlIHNpZ25hdHVyZSBibG9icworICAgICAgICBzaWduYXR1cmVEaWdlc3RzID0gbmV3IEFycmF5TGlzdDxieXRlW10+KCk7CisgICAgICAgIFBhY2thZ2VJbmZvIHBhY2thZ2VJbmZvID0gcG0uZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWVzWzBdLCBQYWNrYWdlTWFuYWdlci5HRVRfU0lHTkFUVVJFUyk7CisgICAgICAgIGZvciAoU2lnbmF0dXJlIHNpZ25hdHVyZSA6IHBhY2thZ2VJbmZvLnNpZ25hdHVyZXMpIHsKKyAgICAgICAgICAgIE1lc3NhZ2VEaWdlc3Qgc2hhMjU2ID0gTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZSgiU0hBLTI1NiIpOworICAgICAgICAgICAgc2lnbmF0dXJlRGlnZXN0cy5hZGQoc2hhMjU2LmRpZ2VzdChzaWduYXR1cmUudG9CeXRlQXJyYXkoKSkpOworICAgICAgICB9CisgICAgICAgIC8vIFRoZSBkaWdlc3RzIG11c3QgYmUgc29ydGVkLiB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ29tcGFyYWJsZSByZWxpZXMgb24gaXQKKyAgICAgICAgc2lnbmF0dXJlRGlnZXN0cy5zb3J0KG5ldyBCeXRlQXJyYXlDb21wYXJhdG9yKCkpOworICAgIH0KKworICAgIHB1YmxpYyBBdHRlc3RhdGlvbkFwcGxpY2F0aW9uSWQoQVNOMUVuY29kYWJsZSBhc24xRW5jb2RhYmxlKQorICAgICAgICAgICAgdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIGlmICghKGFzbjFFbmNvZGFibGUgaW5zdGFuY2VvZiBBU04xU2VxdWVuY2UpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgc2VxdWVuY2UgZm9yIEF0dGVzdGF0aW9uQXBwbGljYXRpb25JZCwgZm91bmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYXNuMUVuY29kYWJsZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU04xU2VxdWVuY2Ugc2VxdWVuY2UgPSAoQVNOMVNlcXVlbmNlKSBhc24xRW5jb2RhYmxlOworICAgICAgICBwYWNrYWdlSW5mb3MgPSBwYXJzZUF0dGVzdGF0aW9uUGFja2FnZUluZm9zKHNlcXVlbmNlLmdldE9iamVjdEF0KFBBQ0tBR0VfSU5GT1NfSU5ERVgpKTsKKyAgICAgICAgLy8gVGhlIGluZm9zIG11c3QgYmUgc29ydGVkLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ29tcGFyYWJsZSByZWxpZXMgb24gaXQuCisgICAgICAgIHBhY2thZ2VJbmZvcy5zb3J0KG51bGwpOworICAgICAgICBzaWduYXR1cmVEaWdlc3RzID0gcGFyc2VTaWduYXR1cmVzKHNlcXVlbmNlLmdldE9iamVjdEF0KFNJR05BVFVSRV9ESUdFU1RTX0lOREVYKSk7CisgICAgICAgIC8vIFRoZSBkaWdlc3RzIG11c3QgYmUgc29ydGVkLiB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ29tcGFyYWJsZSByZWxpZXMgb24gaXQKKyAgICAgICAgc2lnbmF0dXJlRGlnZXN0cy5zb3J0KG5ldyBCeXRlQXJyYXlDb21wYXJhdG9yKCkpOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PEF0dGVzdGF0aW9uUGFja2FnZUluZm8+IGdldEF0dGVzdGF0aW9uUGFja2FnZUluZm9zKCkgeworICAgICAgICByZXR1cm4gcGFja2FnZUluZm9zOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PGJ5dGVbXT4gZ2V0U2lnbmF0dXJlRGlnZXN0cygpIHsKKyAgICAgICAgcmV0dXJuIHNpZ25hdHVyZURpZ2VzdHM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgIGludCBub09mSW5mb3MgPSBwYWNrYWdlSW5mb3Muc2l6ZSgpOworICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIGZvciAoQXR0ZXN0YXRpb25QYWNrYWdlSW5mbyBpbmZvIDogcGFja2FnZUluZm9zKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoIlxuIyMjIFBhY2thZ2UgaW5mbyAiICsgaSArICIvIiArIG5vT2ZJbmZvcyArICIgIyMjXG4iKTsKKyAgICAgICAgICAgIHNiLmFwcGVuZChpbmZvKTsKKyAgICAgICAgfQorICAgICAgICBpID0gMTsKKyAgICAgICAgaW50IG5vT2ZTaWdzID0gc2lnbmF0dXJlRGlnZXN0cy5zaXplKCk7CisgICAgICAgIGZvciAoYnl0ZVtdIHNpZyA6IHNpZ25hdHVyZURpZ2VzdHMpIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgiXG5TaWduYXR1cmUgZGlnZXN0ICIgKyBpKysgKyAiLyIgKyBub09mU2lncyArICI6Iik7CisgICAgICAgICAgICBmb3IgKGJ5dGUgYiA6IHNpZykgeworICAgICAgICAgICAgICAgIHNiLmFwcGVuZChTdHJpbmcuZm9ybWF0KCIgJTAyWCIsIGIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhBdHRlc3RhdGlvbkFwcGxpY2F0aW9uSWQgb3RoZXIpIHsKKyAgICAgICAgaW50IHJlcyA9IEludGVnZXIuY29tcGFyZShwYWNrYWdlSW5mb3Muc2l6ZSgpLCBvdGhlci5wYWNrYWdlSW5mb3Muc2l6ZSgpKTsKKyAgICAgICAgaWYgKHJlcyAhPSAwKSByZXR1cm4gcmVzOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhY2thZ2VJbmZvcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgcmVzID0gcGFja2FnZUluZm9zLmdldChpKS5jb21wYXJlVG8ob3RoZXIucGFja2FnZUluZm9zLmdldChpKSk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICAgICAgcmVzID0gSW50ZWdlci5jb21wYXJlKHNpZ25hdHVyZURpZ2VzdHMuc2l6ZSgpLCBvdGhlci5zaWduYXR1cmVEaWdlc3RzLnNpemUoKSk7CisgICAgICAgIGlmIChyZXMgIT0gMCkgcmV0dXJuIHJlczsKKyAgICAgICAgQnl0ZUFycmF5Q29tcGFyYXRvciBjbXAgPSBuZXcgQnl0ZUFycmF5Q29tcGFyYXRvcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpZ25hdHVyZURpZ2VzdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHJlcyA9IGNtcC5jb21wYXJlKHNpZ25hdHVyZURpZ2VzdHMuZ2V0KGkpLCBvdGhlci5zaWduYXR1cmVEaWdlc3RzLmdldChpKSk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKKyAgICAgICAgcmV0dXJuIChvIGluc3RhbmNlb2YgQXR0ZXN0YXRpb25BcHBsaWNhdGlvbklkKQorICAgICAgICAgICAgICAgICYmICgwID09IGNvbXBhcmVUbygoQXR0ZXN0YXRpb25BcHBsaWNhdGlvbklkKSBvKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBMaXN0PEF0dGVzdGF0aW9uUGFja2FnZUluZm8+IHBhcnNlQXR0ZXN0YXRpb25QYWNrYWdlSW5mb3MoQVNOMUVuY29kYWJsZSBhc24xRW5jb2RhYmxlKQorICAgICAgICAgICAgdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIGlmICghKGFzbjFFbmNvZGFibGUgaW5zdGFuY2VvZiBBU04xU2V0KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIHNldCBmb3IgQXR0ZXN0YXRpb25BcHBsaWNhdGlvbnNJbmZvcywgZm91bmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYXNuMUVuY29kYWJsZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU04xU2V0IHNldCA9IChBU04xU2V0KSBhc24xRW5jb2RhYmxlOworICAgICAgICBMaXN0PEF0dGVzdGF0aW9uUGFja2FnZUluZm8+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8QXR0ZXN0YXRpb25QYWNrYWdlSW5mbz4oKTsKKyAgICAgICAgZm9yIChBU04xRW5jb2RhYmxlIGUgOiBzZXQpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hZGQobmV3IEF0dGVzdGF0aW9uUGFja2FnZUluZm8oZSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBMaXN0PGJ5dGVbXT4gcGFyc2VTaWduYXR1cmVzKEFTTjFFbmNvZGFibGUgYXNuMUVuY29kYWJsZSkKKyAgICAgICAgICAgIHRocm93cyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24geworICAgICAgICBpZiAoIShhc24xRW5jb2RhYmxlIGluc3RhbmNlb2YgQVNOMVNldCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24oIkV4cGVjdGVkIHNldCBmb3IgU2lnbmF0dXJlIGRpZ2VzdHMsIGZvdW5kICIKKyAgICAgICAgICAgICAgICAgICAgKyBhc24xRW5jb2RhYmxlLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTTjFTZXQgc2V0ID0gKEFTTjFTZXQpIGFzbjFFbmNvZGFibGU7CisgICAgICAgIExpc3Q8Ynl0ZVtdPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PGJ5dGVbXT4oKTsKKworICAgICAgICBmb3IgKEFTTjFFbmNvZGFibGUgZSA6IHNldCkgeworICAgICAgICAgICAgcmVzdWx0LmFkZChBc24xVXRpbHMuZ2V0Qnl0ZUFycmF5RnJvbUFzbjEoZSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBCeXRlQXJyYXlDb21wYXJhdG9yIGltcGxlbWVudHMgamF2YS51dGlsLkNvbXBhcmF0b3I8Ynl0ZVtdPiB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoYnl0ZVtdIGEsIGJ5dGVbXSBiKSB7CisgICAgICAgICAgICBpbnQgcmVzID0gSW50ZWdlci5jb21wYXJlKGEubGVuZ3RoLCBiLmxlbmd0aCk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApIHJldHVybiByZXM7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICByZXMgPSBCeXRlLmNvbXBhcmUoYVtpXSwgYltpXSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSByZXR1cm4gcmVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvamF2YS9jb20vZ29vZ2xlL2F0dGVzdGF0aW9uZXhhbXBsZS9BdHRlc3RhdGlvblBhY2thZ2VJbmZvLmphdmEgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvamF2YS9jb20vZ29vZ2xlL2F0dGVzdGF0aW9uZXhhbXBsZS9BdHRlc3RhdGlvblBhY2thZ2VJbmZvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjYWY3YQotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9qYXZhL2NvbS9nb29nbGUvYXR0ZXN0YXRpb25leGFtcGxlL0F0dGVzdGF0aW9uUGFja2FnZUluZm8uamF2YQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQKKyAqIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZQorICogaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5nb29nbGUuYXR0ZXN0YXRpb25leGFtcGxlOworCitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkFTTjFFbmNvZGFibGU7CitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkFTTjFTZXF1ZW5jZTsKKworaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb247CisKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBBdHRlc3RhdGlvblBhY2thZ2VJbmZvIGltcGxlbWVudHMgamF2YS5sYW5nLkNvbXBhcmFibGU8QXR0ZXN0YXRpb25QYWNrYWdlSW5mbz4geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQQUNLQUdFX05BTUVfSU5ERVggPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWRVJTSU9OX0lOREVYID0gMTsKKworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lOworICAgIHByaXZhdGUgZmluYWwgaW50IHZlcnNpb247CisKKyAgICBwdWJsaWMgQXR0ZXN0YXRpb25QYWNrYWdlSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB2ZXJzaW9uKSB7CisgICAgICAgIHRoaXMucGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsKKyAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICB9CisKKyAgICBwdWJsaWMgQXR0ZXN0YXRpb25QYWNrYWdlSW5mbyhBU04xRW5jb2RhYmxlIGFzbjFFbmNvZGFibGUpIHRocm93cyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24geworICAgICAgICBpZiAoIShhc24xRW5jb2RhYmxlIGluc3RhbmNlb2YgQVNOMVNlcXVlbmNlKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIHNlcXVlbmNlIGZvciBBdHRlc3RhdGlvblBhY2thZ2VJbmZvLCBmb3VuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhc24xRW5jb2RhYmxlLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTTjFTZXF1ZW5jZSBzZXF1ZW5jZSA9IChBU04xU2VxdWVuY2UpIGFzbjFFbmNvZGFibGU7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwYWNrYWdlTmFtZSA9IEFzbjFVdGlscy5nZXRTdHJpbmdGcm9tQXNuMU9jdGV0U3RyZWFtQXNzdW1pbmdVVEY4KAorICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZS5nZXRPYmplY3RBdChQQUNLQUdFX05BTUVfSU5ERVgpKTsKKyAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiQ29udmVydGluZyBvY3RldCBzdHJlYW0gdG8gU3RyaW5nIHRyaWdnZXJlZCBhbiBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgZSk7CisgICAgICAgIH0KKyAgICAgICAgdmVyc2lvbiA9IEFzbjFVdGlscy5nZXRJbnRlZ2VyRnJvbUFzbjEoc2VxdWVuY2UuZ2V0T2JqZWN0QXQoVkVSU0lPTl9JTkRFWCkpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoKSB7CisgICAgICAgIHJldHVybiBwYWNrYWdlTmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldFZlcnNpb24oKSB7CisgICAgICAgIHJldHVybiB2ZXJzaW9uOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nQnVpbGRlcigpLmFwcGVuZCgiUGFja2FnZSBuYW1lOiAiKS5hcHBlbmQoZ2V0UGFja2FnZU5hbWUoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCJcblZlcnNpb246ICIgKyBnZXRWZXJzaW9uKCkpLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBjb21wYXJlVG8oQXR0ZXN0YXRpb25QYWNrYWdlSW5mbyBvdGhlcikgeworICAgICAgICBpbnQgcmVzID0gcGFja2FnZU5hbWUuY29tcGFyZVRvKG90aGVyLnBhY2thZ2VOYW1lKTsKKyAgICAgICAgaWYgKHJlcyAhPSAwKSByZXR1cm4gcmVzOworICAgICAgICByZXMgPSBJbnRlZ2VyLmNvbXBhcmUodmVyc2lvbiwgb3RoZXIudmVyc2lvbik7CisgICAgICAgIGlmIChyZXMgIT0gMCkgcmV0dXJuIHJlczsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKKyAgICAgICAgcmV0dXJuIChvIGluc3RhbmNlb2YgQXR0ZXN0YXRpb25QYWNrYWdlSW5mbykKKyAgICAgICAgICAgICAgICAmJiAoMCA9PSBjb21wYXJlVG8oKEF0dGVzdGF0aW9uUGFja2FnZUluZm8pIG8pKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2phdmEvY29tL2dvb2dsZS9hdHRlc3RhdGlvbmV4YW1wbGUvQXR0ZXN0YXRpb25UZXN0LmphdmEgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvamF2YS9jb20vZ29vZ2xlL2F0dGVzdGF0aW9uZXhhbXBsZS9BdHRlc3RhdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODdkMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2phdmEvY29tL2dvb2dsZS9hdHRlc3RhdGlvbmV4YW1wbGUvQXR0ZXN0YXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwzMTcgQEAKK3BhY2thZ2UgY29tLmdvb2dsZS5hdHRlc3RhdGlvbmV4YW1wbGU7CisKK2ltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKK2ltcG9ydCBhbmRyb2lkLnNlY3VyaXR5LmtleXN0b3JlLktleUdlblBhcmFtZXRlclNwZWM7CitpbXBvcnQgYW5kcm9pZC5zZWN1cml0eS5rZXlzdG9yZS5LZXlQcm9wZXJ0aWVzOworaW1wb3J0IGFuZHJvaWQudXRpbC5CYXNlNjQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlU2V0OworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkdlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5JbnZhbGlkS2V5RXhjZXB0aW9uOworaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5UGFpckdlbmVyYXRvcjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LktleVN0b3JlOworaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoUHJvdmlkZXJFeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5Qcml2YXRlS2V5OworaW1wb3J0IGphdmEuc2VjdXJpdHkuUHVibGljS2V5OworaW1wb3J0IGphdmEuc2VjdXJpdHkuU2lnbmF0dXJlOworaW1wb3J0IGphdmEuc2VjdXJpdHkuU2lnbmF0dXJlRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVFeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlRmFjdG9yeTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlOworaW1wb3J0IGphdmEuc2VjdXJpdHkuc3BlYy5FQ0dlblBhcmFtZXRlclNwZWM7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOworCitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VjdXJpdHkua2V5c3RvcmUuS2V5UHJvcGVydGllcy5ESUdFU1RfU0hBMjU2OworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlY3VyaXR5LmtleXN0b3JlLktleVByb3BlcnRpZXMuS0VZX0FMR09SSVRITV9FQzsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5hdHRlc3RhdGlvbmV4YW1wbGUuUm9vdE9mVHJ1c3QuS01fVkVSSUZJRURfQk9PVF9WRVJJRklFRDsKKworLyoqCisgKiBBdHRlc3RhdGlvblRlc3QgZ2VuZXJhdGVzIGFuIEVDIEtleSBwYWlyLCB3aXRoIGF0dGVzdGF0aW9uLCBhbmQgZGlzcGxheXMgdGhlIHJlc3VsdCBpbiB0aGUKKyAqIFRleHRWaWV3IHByb3ZpZGVkIHRvIGl0cyBjb25zdHJ1Y3Rvci4KKyAqLworcHVibGljIGNsYXNzIEF0dGVzdGF0aW9uVGVzdCBleHRlbmRzIEFzeW5jVGFzazxWb2lkLCBTdHJpbmcsIFZvaWQ+IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1JJR0lOQVRJT05fVElNRV9PRkZTRVQgPSAxMDAwMDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05TVU1QVElPTl9USU1FX09GRlNFVCA9IDIwMDAwMDA7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS0VZX1VTQUdFX0JJVFNUUklOR19MRU5HVEggPSA5OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLRVlfVVNBR0VfRElHSVRBTF9TSUdOQVRVUkVfQklUX09GRlNFVCA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtFWV9VU0FHRV9LRVlfRU5DSVBIRVJNRU5UX0JJVF9PRkZTRVQgPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLRVlfVVNBR0VfREFUQV9FTkNJUEhFUk1FTlRfQklUX09GRlNFVCA9IDM7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1NfTUFKT1JfVkVSU0lPTl9NQVRDSF9HUk9VUF9OQU1FID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1NfTUlOT1JfVkVSU0lPTl9NQVRDSF9HUk9VUF9OQU1FID0gMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1NfU1VCTUlOT1JfVkVSU0lPTl9NQVRDSF9HUk9VUF9OQU1FID0gMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIE9TX1ZFUlNJT05fU1RSSU5HX1BBVFRFUk4gPSBQYXR0ZXJuCisgICAgICAgICAgICAuY29tcGlsZSgiKFswLTldezEsMn0pKD86XFwuKFswLTldezEsMn0pKT8oPzpcXC4oWzAtOV17MSwyfSkpPyg/OlteMC05Ll0rLiopPyIpOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9TX1BBVENIX0xFVkVMX1lFQVJfR1JPVVBfTkFNRSA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9TX1BBVENIX0xFVkVMX01PTlRIX0dST1VQX05BTUUgPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gT1NfUEFUQ0hfTEVWRUxfU1RSSU5HX1BBVFRFUk4gPSBQYXR0ZXJuCisgICAgICAgICAgICAuY29tcGlsZSgiKFswLTldezR9KS0oWzAtOV17Mn0pLVswLTldezJ9Iik7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fRVJST1JfSU5WQUxJRF9JTlBVVF9MRU5HVEggPSAtMjE7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklOSVNIRUQgPSAiQXR0ZXN0YXRpb25GaW5pc2hlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZBSUwgPSAiQXR0ZXN0YXRpb25GYWlsIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5GTyA9ICJBdHRlc3RhdGlvbkluZm8iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfREVTQ1JJUFRJT05fT0lEID0gIjEuMy42LjEuNC4xLjExMTI5LjIuMS4xNyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9VU0FHRV9PSUQgPSAiMi41LjI5LjE1IjsgIC8vIFN0YW5kYXJkIGtleSB1c2FnZSBleHRlbnNpb24uCisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR09PR0xFX1JPT1RfQ0VSVElGSUNBVEUgPQorICAgICAgICAgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuIgorICAgICAgICAgICAgICAgICAgICArICJNSUlGWURDQ0EwaWdBd0lCQWdJSkFPajZHV01VMHZvWU1BMEdDU3FHU0liM0RRRUJDd1VBTUJzeEdUQVhCZ05WIgorICAgICAgICAgICAgICAgICAgICArICJCQVVURUdZNU1qQXdPV1U0TlROaU5tSXdORFV3SGhjTk1UWXdOVEkyTVRZeU9EVXlXaGNOTWpZd05USTBNVFl5IgorICAgICAgICAgICAgICAgICAgICArICJPRFV5V2pBYk1Sa3dGd1lEVlFRRkV4Qm1PVEl3TURsbE9EVXpZalppTURRMU1JSUNJakFOQmdrcWhraUc5dzBCIgorICAgICAgICAgICAgICAgICAgICArICJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFyN2JIZ2l1eHB3SHNLN1F1aTh4VUZtT3I3NWd2TXNkL2RURURESmRTIgorICAgICAgICAgICAgICAgICAgICArICJTeHRmNkFuN3h5cXBSUjkwUEwyYWJ4TTFkRXFsWG5mMnRxdzFOZTRYd2w1amxSZmRuSkxtTjBwVHkvNGxqNC83IgorICAgICAgICAgICAgICAgICAgICArICJ0djBTazNpaUtreXBuRVV0UjZXZk1nSDBRWmZLSE0xK2RpK3k5VEZSdHY2eS8vMHJiK1QrVzhhOW5zTkwvZ2dqIgorICAgICAgICAgICAgICAgICAgICArICJuYXI4NjQ2MXFPMHJPczJjWGpwM2tPRzFGRUo1TVZtRm1CR3RucktwYTczWHBYeVRxUnhCL00wbjFuL1c5bkdxIgorICAgICAgICAgICAgICAgICAgICArICJDNEZTWWEwNFQ2TjVSSVpHQk4yejJNVDVJS0diRmxiQzhVclcwRHhXN0FZSW1RUWNIdEdsL20wMFFMVld1dEhRIgorICAgICAgICAgICAgICAgICAgICArICJvVkpZbkZQbFhUY0hZdkFTTHUrUmhoc2JEbXhNZ0pKMG1jRHB2c0M0UGp2QitUeHl3RWxnUzcwdkUwWG1MRCtPIgorICAgICAgICAgICAgICAgICAgICArICJKdHZzQnNsSFp2UEJLQ09kVDBNUyt0Z1NPSWZnYSt6MVoxZzcrRFZhZ2Y3cXV2bWFnOGpmUGlveUt2eG5LL0VnIgorICAgICAgICAgICAgICAgICAgICArICJzVFVWaTJnaHpxOHdtMjd1ZC9tSU03QVkycUVPUlI4R28zVFZCNEh6V1FncFpydDNpNU1JbENhWTUwNEx6U1JpIgorICAgICAgICAgICAgICAgICAgICArICJpZ0hDekFQbEh3cytXMHJCNU4rZXI1LzJwSktuZkJTRGlDaUZBVnRDTE9aN2dMaU1tMGpoTzJCNnRVWEhJLytNIgorICAgICAgICAgICAgICAgICAgICArICJSUGp5MDJpNTlsSU5NUlJldjU2R0t0Y2Q5cU8vMGtVSldkWlRkQTJYb1M4Mml4UHZadFhRcFVwdUwxMmFiKzlFIgorICAgICAgICAgICAgICAgICAgICArICJhREs4WjRSSEpZWWZDVDNRNXZOQVhhaVdRKzhQVFdtMlFnQlIvYmt3U1djK05wVUZnTlBOOVB2UWk4V0VnNVVtIgorICAgICAgICAgICAgICAgICAgICArICJBR01DQXdFQUFhT0JwakNCb3pBZEJnTlZIUTRFRmdRVU5tSGhBSHlJQlFsUmkwUnNSLzhhVE1ucVR4SXdId1lEIgorICAgICAgICAgICAgICAgICAgICArICJWUjBqQkJnd0ZvQVVObUhoQUh5SUJRbFJpMFJzUi84YVRNbnFUeEl3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFPIgorICAgICAgICAgICAgICAgICAgICArICJCZ05WSFE4QkFmOEVCQU1DQVlZd1FBWURWUjBmQkRrd056QTFvRE9nTVlZdmFIUjBjSE02THk5aGJtUnliMmxrIgorICAgICAgICAgICAgICAgICAgICArICJMbWR2YjJkc1pXRndhWE11WTI5dEwyRjBkR1Z6ZEdGMGFXOXVMMk55YkM4d0RRWUpLb1pJaHZjTkFRRUxCUUFEIgorICAgICAgICAgICAgICAgICAgICArICJnZ0lCQUNESXc0MUwzS2xYRzBhTWlTLy9jcXJHK0VTaEhVR284SE5zdzMwVzFrSnRqbjZVQndSTTZqbm1pd2ZCIgorICAgICAgICAgICAgICAgICAgICArICJQYjhWQTkxY2hiMnZzc0F0WDJ6YlR2cUJKOStMQlBHQ2R3L0U1M1JiZjg2cWh4S2FpQUhPanB2QXk1WTNtMDBtIgorICAgICAgICAgICAgICAgICAgICArICJxQzB3L1p3dmp1MXR3YjR2aExhSjVOa1VKWXNVUzdybUpLSEhCbkVUTGk4R0ZxaUVzcVRXcEcvNmliWUN2N3JZIgorICAgICAgICAgICAgICAgICAgICArICJEQkpEY1I5VzYyQlc5amZJb0JRY3hVQ1VKb3VNUEgyNWxMTmNEYzFzc3F2QzJ2N2lVZ0k5TGVvTTFzTm92cVBtIgorICAgICAgICAgICAgICAgICAgICArICJRVWlHOXJIbGkxdlh4ekN5YU1UandmdGtKTGtmNjcyNERGaHVLdWcyaklUVjBRa1h2YUpXRjRuVWFIT1ROQTR1IgorICAgICAgICAgICAgICAgICAgICArICJKVTlXRHZaTEkxajgzQSsveG5BSlV1Y0l2L3pHSjFBTUgyYm9IcUY4Q1kxNkxwc1lnQnQ2dEt4eFdIMDBYY3lEIgorICAgICAgICAgICAgICAgICAgICArICJDZFcyS2xCQ2VxYlFQY3NGbVd5V3VneGRjZWtoWXNBV3lvU2Y4MThOVXNaZEJXQmFSL091a1hyTkxma1E3OUl5IgorICAgICAgICAgICAgICAgICAgICArICJab2haYnZhYk8vWCtNVlQzcnJpQW9LYzhvRTJVd3M2REYrNjBQVjcvV0lQak52WHlTZHFzcEltU043OG1mbHhEIgorICAgICAgICAgICAgICAgICAgICArICJxd0xxUkJZa0EzSTc1cXBwTEdHOXJwN1VDZFJqeE1sOFpEQmxkKzd5dkhWZ3QxY1Z6Sng5eG55R0NDMjNVYWljIgorICAgICAgICAgICAgICAgICAgICArICJNRFNYWXJCNEk0V0hYUEdqeGhadUN1UEJMVGRPTFU4WVJ2TVlkRXZZZWJXSE1wdndHQ0Y2YkF4M0pCcEllT1ExIgorICAgICAgICAgICAgICAgICAgICArICJ3REI1eTBVU2ljVjNZZ1lHbWkrTlpmaEE0VVJTaDc3WWQ2dXVKT0pFTlJhTlZUemtcbiIKKyAgICAgICAgICAgICAgICAgICAgKyAiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLSI7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgVm9pZCBkb0luQmFja2dyb3VuZChWb2lkLi4uIHBhcmFtcykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGVzdEVjQXR0ZXN0YXRpb24oKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5lKEZBSUwsICJTb21ldGhpbmcgaXMgd3JvbmcsIGNoZWNrIGRldGFpbGVkIGxvZ2NhdCBsb2dzOlxuIiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRlc3RFY0F0dGVzdGF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBlY0N1cnZlID0gInNlY3AyNTZyMSI7CisgICAgICAgIGludCBrZXlTaXplID0gMjU2OworICAgICAgICBieXRlW10gY2hhbGxlbmdlID0gImNoYWxsZW5nZSIuZ2V0Qnl0ZXMoKTsKKyAgICAgICAgU3RyaW5nIGtleXN0b3JlQWxpYXMgPSAidGVzdF9rZXkiOworCisgICAgICAgIEtleVN0b3JlIGtleVN0b3JlID0gS2V5U3RvcmUuZ2V0SW5zdGFuY2UoIkFuZHJvaWRLZXlTdG9yZSIpOworICAgICAgICBrZXlTdG9yZS5sb2FkKG51bGwpOworCisgICAgICAgIGtleVN0b3JlLmRlbGV0ZUVudHJ5KGtleXN0b3JlQWxpYXMpOworCisgICAgICAgIExvZy5kKElORk8sIkdlbmVyYXRpbmcga2V5IHBhaXIuLi4iKTsKKyAgICAgICAgRGF0ZSBzdGFydFRpbWUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIDEwMDApOworICAgICAgICBMb2cuZCgiKioqKiIsICJTdGFydCBUaW1lIGlzOiAiICsgc3RhcnRUaW1lLnRvU3RyaW5nKCkpOworICAgICAgICBEYXRlIG9yaWdpbmF0aW9uRW5kID0gbmV3IERhdGUoc3RhcnRUaW1lLmdldFRpbWUoKSArIE9SSUdJTkFUSU9OX1RJTUVfT0ZGU0VUKTsKKyAgICAgICAgRGF0ZSBjb25zdW1wdGlvbkVuZCA9IG5ldyBEYXRlKHN0YXJ0VGltZS5nZXRUaW1lKCkgKyBDT05TVU1QVElPTl9USU1FX09GRlNFVCk7CisgICAgICAgIEtleUdlblBhcmFtZXRlclNwZWMuQnVpbGRlciBidWlsZGVyID0gbmV3IEtleUdlblBhcmFtZXRlclNwZWMuQnVpbGRlcihrZXlzdG9yZUFsaWFzLAorICAgICAgICAgICAgICAgIEtleVByb3BlcnRpZXMuUFVSUE9TRV9TSUdOIHwgS2V5UHJvcGVydGllcy5QVVJQT1NFX1ZFUklGWSkKKyAgICAgICAgICAgICAgICAuc2V0QWxnb3JpdGhtUGFyYW1ldGVyU3BlYyhuZXcgRUNHZW5QYXJhbWV0ZXJTcGVjKGVjQ3VydmUpKQorICAgICAgICAgICAgICAgIC5zZXREaWdlc3RzKERJR0VTVF9TSEEyNTYpCisgICAgICAgICAgICAgICAgLnNldEF0dGVzdGF0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7CisKKyAgICAgICAgYnVpbGRlci5zZXRLZXlWYWxpZGl0eVN0YXJ0KHN0YXJ0VGltZSkKKyAgICAgICAgICAgICAgICAuc2V0S2V5VmFsaWRpdHlGb3JPcmlnaW5hdGlvbkVuZChvcmlnaW5hdGlvbkVuZCkKKyAgICAgICAgICAgICAgICAuc2V0S2V5VmFsaWRpdHlGb3JDb25zdW1wdGlvbkVuZChjb25zdW1wdGlvbkVuZCk7CisKKyAgICAgICAgZ2VuZXJhdGVLZXlQYWlyKEtFWV9BTEdPUklUSE1fRUMsIGJ1aWxkZXIuYnVpbGQoKSk7CisgICAgICAgIExvZy5kKElORk8sICJLZXkgcGFpciBnZW5lcmF0ZWRcblxuIik7CisKKyAgICAgICAgQ2VydGlmaWNhdGUgY2VydGlmaWNhdGVzW10gPSBrZXlTdG9yZS5nZXRDZXJ0aWZpY2F0ZUNoYWluKGtleXN0b3JlQWxpYXMpOworICAgICAgICBMb2cuZChJTkZPLCAiUmV0cmlldmVkIGNlcnRpZmljYXRlIGNoYWluIG9mIGxlbmd0aCAiICsgY2VydGlmaWNhdGVzLmxlbmd0aCArICJcbiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmVyaWZ5Q2VydGlmaWNhdGVTaWduYXR1cmVzKGNlcnRpZmljYXRlcyk7CisgICAgICAgIH0gY2F0Y2ggKEdlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZShGQUlMLCAiQ2VydGlmaWNhdGUgY2hhaW4gZG9lcyBub3QgdmVyaWZ5LiIsIGUpOworICAgICAgICB9CisKKyAgICAgICAgWDUwOUNlcnRpZmljYXRlIGF0dGVzdGF0aW9uQ2VydCA9IChYNTA5Q2VydGlmaWNhdGUpIGNlcnRpZmljYXRlc1swXTsKKyAgICAgICAgWDUwOUNlcnRpZmljYXRlIHNlY3VyZVJvb3QgPSAoWDUwOUNlcnRpZmljYXRlKSBDZXJ0aWZpY2F0ZUZhY3RvcnkKKyAgICAgICAgICAgICAgICAuZ2V0SW5zdGFuY2UoIlguNTA5IikuZ2VuZXJhdGVDZXJ0aWZpY2F0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR09PR0xFX1JPT1RfQ0VSVElGSUNBVEUuZ2V0Qnl0ZXMoKSkpOworICAgICAgICBYNTA5Q2VydGlmaWNhdGUgcm9vdENlcnQgPSAoWDUwOUNlcnRpZmljYXRlKSBjZXJ0aWZpY2F0ZXNbY2VydGlmaWNhdGVzLmxlbmd0aCAtIDFdOworICAgICAgICBpZiAoIUFycmF5cy5lcXVhbHMoc2VjdXJlUm9vdC5nZXRQdWJsaWNLZXkoKS5nZXRFbmNvZGVkKCksCisgICAgICAgICAgICAgICAgcm9vdENlcnQuZ2V0UHVibGljS2V5KCkuZ2V0RW5jb2RlZCgpKSkgeworICAgICAgICAgICAgTG9nLmUoRkFJTCwgInJvb3QgY2VydGlmaWNhdGUgcHVibGljIGtleSBkb2VzIG5vdCBtYXRjaCBHb29nbGUgcHVibGljIGtleSIpOworICAgICAgICB9CisgICAgICAgIHByaW50S2V5VXNhZ2UoYXR0ZXN0YXRpb25DZXJ0KTsKKworICAgICAgICBJbW11dGFibGVTZXQ8U3RyaW5nPiB1bmV4cGVjdGVkRXh0ZW5zaW9uT2lkcyA9CisgICAgICAgICAgICAgICAgKEltbXV0YWJsZVNldCkgcmV0cmlldmVVbmV4cGVjdGVkRXh0ZW5zaW9uT2lkcyhhdHRlc3RhdGlvbkNlcnQpOworICAgICAgICBpZiAoIXVuZXhwZWN0ZWRFeHRlbnNpb25PaWRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTG9nLmUoRkFJTCwgImF0dGVzdGF0aW9uIGNlcnRpZmljYXRlIGNvbnRhaW5zIHVuZXhwZWN0ZWQgT0lEcyIpOworICAgICAgICAgICAgZm9yIChTdHJpbmcgb2lkIDogdW5leHBlY3RlZEV4dGVuc2lvbk9pZHMudG9BcnJheShuZXcgU3RyaW5nW3VuZXhwZWN0ZWRFeHRlbnNpb25PaWRzLnNpemUoKV0pKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoRkFJTCwgIlVuZXhwZWN0ZWQgT0lEOiAiICsgb2lkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEF0dGVzdGF0aW9uIGF0dGVzdGF0aW9uID0gbmV3IEF0dGVzdGF0aW9uKGF0dGVzdGF0aW9uQ2VydCk7CisgICAgICAgIGlmICghQXJyYXlzLmVxdWFscyhhdHRlc3RhdGlvbi5nZXRBdHRlc3RhdGlvbkNoYWxsZW5nZSgpLCBjaGFsbGVuZ2UpKSB7CisgICAgICAgICAgICBVdGlscy5sb2dFcnJvcigiY2hhbGxlbmdlIG1pc21hdGNoXG5FeHBlY3RlZDoiLAorICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2UsIGF0dGVzdGF0aW9uLmdldEF0dGVzdGF0aW9uQ2hhbGxlbmdlKCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF0dGVzdGF0aW9uLmdldEF0dGVzdGF0aW9uU2VjdXJpdHlMZXZlbCgpICE9IDEpIHsKKyAgICAgICAgICAgIFV0aWxzLmxvZ0Vycm9yKCJBdHRlc3RhdGlvbiBjZXJ0IHJlcG9ydGluZyBub24tVEVFIHNlY3VyaXR5IGxldmVsIiwKKyAgICAgICAgICAgICAgICAgICAgMSwgYXR0ZXN0YXRpb24uZ2V0QXR0ZXN0YXRpb25TZWN1cml0eUxldmVsKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChhdHRlc3RhdGlvbi5nZXRLZXltYXN0ZXJTZWN1cml0eUxldmVsKCkgIT0gMSkgeworICAgICAgICAgICAgVXRpbHMubG9nRXJyb3IoIktleW1hc3RlciByZXBvcnRpbmcgbm9uLVRFRSBzZWN1cml0eSBsZXZlbCIsCisgICAgICAgICAgICAgICAgICAgIDEsIGF0dGVzdGF0aW9uLmdldEtleW1hc3RlclNlY3VyaXR5TGV2ZWwoKSk7CisgICAgICAgIH0KKworICAgICAgICBjaGVja1Jvb3RPZlRydXN0KGF0dGVzdGF0aW9uKTsKKworICAgICAgICBTaWduYXR1cmUgc2lnbmVyID0gU2lnbmF0dXJlLmdldEluc3RhbmNlKCJTSEEyNTZXaXRoRUNEU0EiKTsKKyAgICAgICAgS2V5U3RvcmUga2V5c3RvcmUgPSBLZXlTdG9yZS5nZXRJbnN0YW5jZSgiQW5kcm9pZEtleVN0b3JlIik7CisgICAgICAgIGtleXN0b3JlLmxvYWQobnVsbCk7CisKKyAgICAgICAgUHJpdmF0ZUtleSBrZXkgPSAoUHJpdmF0ZUtleSkga2V5c3RvcmUuZ2V0S2V5KGtleXN0b3JlQWxpYXMsIG51bGwpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc2lnbmVyLmluaXRTaWduKGtleSk7CisgICAgICAgICAgICBzaWduZXIudXBkYXRlKCJIZWxsbyIuZ2V0Qnl0ZXMoKSk7CisgICAgICAgICAgICBzaWduZXIuc2lnbigpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZShGQUlMLCJGYWlsZWQgdG8gc2lnbiB3aXRoIGdlbmVyYXRlZCBrZXkiLCBlKTsKKyAgICAgICAgfQorICAgICAgICBMb2cuZChGSU5JU0hFRCwgIlNpZ25pbmcgY29tcGxldGVkIik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGdlbmVyYXRlS2V5UGFpcihTdHJpbmcgYWxnb3JpdGhtLCBLZXlHZW5QYXJhbWV0ZXJTcGVjIHNwZWMpCisgICAgICAgICAgICB0aHJvd3MgTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uLCBOb1N1Y2hQcm92aWRlckV4Y2VwdGlvbiwKKyAgICAgICAgICAgIEludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb24geworICAgICAgICBLZXlQYWlyR2VuZXJhdG9yIGtleVBhaXJHZW5lcmF0b3IgPSBLZXlQYWlyR2VuZXJhdG9yLmdldEluc3RhbmNlKGFsZ29yaXRobSwKKyAgICAgICAgICAgICAgICAiQW5kcm9pZEtleVN0b3JlIik7CisgICAgICAgIGtleVBhaXJHZW5lcmF0b3IuaW5pdGlhbGl6ZShzcGVjKTsKKyAgICAgICAga2V5UGFpckdlbmVyYXRvci5nZW5lcmF0ZUtleVBhaXIoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdmVyaWZ5Q2VydGlmaWNhdGVTaWduYXR1cmVzKENlcnRpZmljYXRlW10gY2VydENoYWluKQorICAgICAgICAgICAgdGhyb3dzIEdlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiB7CisKKyAgICAgICAgZm9yIChDZXJ0aWZpY2F0ZSBjZXJ0IDogY2VydENoYWluKSB7CisgICAgICAgICAgICBmaW5hbCBieXRlW10gZGVyQ2VydCA9IGNlcnQuZ2V0RW5jb2RlZCgpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBlbUNlcnRQcmUgPSBCYXNlNjQuZW5jb2RlVG9TdHJpbmcoZGVyQ2VydCwgQmFzZTY0Lk5PX1dSQVApOworICAgICAgICAgICAgTG9nLmUoIioqKioiLCBwZW1DZXJ0UHJlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY2VydENoYWluLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBQdWJsaWNLZXkgcHViS2V5ID0gY2VydENoYWluW2ldLmdldFB1YmxpY0tleSgpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjZXJ0Q2hhaW5baSAtIDFdLnZlcmlmeShwdWJLZXkpOworICAgICAgICAgICAgfSBjYXRjaCAoSW52YWxpZEtleUV4Y2VwdGlvbiB8IENlcnRpZmljYXRlRXhjZXB0aW9uIHwgTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgIHwgTm9TdWNoUHJvdmlkZXJFeGNlcHRpb24gfCBTaWduYXR1cmVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24oIkZhaWxlZCB0byB2ZXJpZnkgY2VydGlmaWNhdGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBjZXJ0Q2hhaW5baSAtIDFdICsgIiB3aXRoIHB1YmxpYyBrZXkgIiArIGNlcnRDaGFpbltpXS5nZXRQdWJsaWNLZXkoKSwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA9PSBjZXJ0Q2hhaW4ubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgIC8vIExhc3QgY2VydCBpcyBzZWxmLXNpZ25lZC4KKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBjZXJ0Q2hhaW5baV0udmVyaWZ5KHB1YktleSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoQ2VydGlmaWNhdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSb290IGNlcnQgIiArIGNlcnRDaGFpbltpXSArICIgaXMgbm90IGNvcnJlY3RseSBzZWxmLXNpZ25lZCIsIGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBwcmludEtleVVzYWdlKFg1MDlDZXJ0aWZpY2F0ZSBhdHRlc3RhdGlvbkNlcnQpIHsKKyAgICAgICAgTG9nLmQoSU5GTywgIktleSB1c2FnZToiKTsKKyAgICAgICAgaWYgKGF0dGVzdGF0aW9uQ2VydC5nZXRLZXlVc2FnZSgpID09IG51bGwpIHsKKyAgICAgICAgICAgIExvZy5kKElORk8sICIgTk9ORVxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF0dGVzdGF0aW9uQ2VydC5nZXRLZXlVc2FnZSgpW0tFWV9VU0FHRV9ESUdJVEFMX1NJR05BVFVSRV9CSVRfT0ZGU0VUXSkgeworICAgICAgICAgICAgTG9nLmQoSU5GTywgIiBzaWduIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF0dGVzdGF0aW9uQ2VydC5nZXRLZXlVc2FnZSgpW0tFWV9VU0FHRV9EQVRBX0VOQ0lQSEVSTUVOVF9CSVRfT0ZGU0VUXSkgeworICAgICAgICAgICAgTG9nLmQoSU5GTywgIiBlbmNyeXB0X2RhdGEiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXR0ZXN0YXRpb25DZXJ0LmdldEtleVVzYWdlKClbS0VZX1VTQUdFX0tFWV9FTkNJUEhFUk1FTlRfQklUX09GRlNFVF0pIHsKKyAgICAgICAgICAgIExvZy5kKElORk8sICIgZW5jcnlwdF9rZXlzIik7CisgICAgICAgIH0KKyAgICAgICAgTG9nLmQoSU5GTywgIlxuIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBTZXQ8U3RyaW5nPiByZXRyaWV2ZVVuZXhwZWN0ZWRFeHRlbnNpb25PaWRzKFg1MDlDZXJ0aWZpY2F0ZSB4NTA5Q2VydCkgeworICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJsZVNldC5CdWlsZGVyPFN0cmluZz4oKQorICAgICAgICAgICAgICAgIC5hZGRBbGwoeDUwOUNlcnQuZ2V0Q3JpdGljYWxFeHRlbnNpb25PSURzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zdHJlYW0oKQorICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihzIC0+ICFLRVlfVVNBR0VfT0lELmVxdWFscyhzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5pdGVyYXRvcigpKQorICAgICAgICAgICAgICAgIC5hZGRBbGwoeDUwOUNlcnQuZ2V0Tm9uQ3JpdGljYWxFeHRlbnNpb25PSURzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zdHJlYW0oKQorICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihzIC0+ICFLRVlfREVTQ1JJUFRJT05fT0lELmVxdWFscyhzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5pdGVyYXRvcigpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworICAgIH0KKworCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrUm9vdE9mVHJ1c3QoQXR0ZXN0YXRpb24gYXR0ZXN0YXRpb24pIHsKKyAgICAgICAgUm9vdE9mVHJ1c3Qgcm9vdE9mVHJ1c3QgPSBhdHRlc3RhdGlvbi5nZXRUZWVFbmZvcmNlZCgpLmdldFJvb3RPZlRydXN0KCk7CisgICAgICAgIGlmIChyb290T2ZUcnVzdCA9PSBudWxsKSB7CisgICAgICAgICAgICBMb2cuZShGQUlMLCAiUm9vdCBvZiB0cnVzdCBpcyBudWxsIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJvb3RPZlRydXN0LmdldFZlcmlmaWVkQm9vdEtleSgpID09IG51bGwpIHsKKyAgICAgICAgICAgIExvZy5lKEZBSUwsICJWZXJpZmllZCBib290IGtleSBpcyBudWxsIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJvb3RPZlRydXN0LmdldFZlcmlmaWVkQm9vdEtleSgpLmxlbmd0aCA8IDMyKSB7CisgICAgICAgICAgICBMb2cuZShGQUlMLCAiVmVyaWZpZWQgYm9vdCBrZXkgaXMgbGVzcyB0aGFuIDMyIGJ5dGVzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQWxsWmVyb2VzKHJvb3RPZlRydXN0LmdldFZlcmlmaWVkQm9vdEtleSgpKSkgeworICAgICAgICAgICAgTG9nLmUoRkFJTCwgIlZlcmlmaWVkIGJvb3Qga2V5IGlzIGFsbCB6ZXJvcy4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJvb3RPZlRydXN0LmlzRGV2aWNlTG9ja2VkKCkpIHsKKyAgICAgICAgICAgIExvZy5lKEZBSUwsICJEZXZpY2UgaXNuJ3QgbG9ja2VkIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEtNX1ZFUklGSUVEX0JPT1RfVkVSSUZJRUQgIT0gcm9vdE9mVHJ1c3QuZ2V0VmVyaWZpZWRCb290U3RhdGUoKSkgeworICAgICAgICAgICAgVXRpbHMubG9nRXJyb3IoIlJvb3Qgb2YgdHJ1c3QgaXNuJ3QgcmVwb3J0aW5nIGJvb3QgdmVyaWZpZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgS01fVkVSSUZJRURfQk9PVF9WRVJJRklFRCwgcm9vdE9mVHJ1c3QuZ2V0VmVyaWZpZWRCb290U3RhdGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJvb3RPZlRydXN0LmdldFZlcmlmaWVkQm9vdEhhc2goKSA9PSBudWxsKSB7CisgICAgICAgICAgICBMb2cuZShGQUlMLCAiVmVyaWZpZWQgYm9vdCBoYXNoIGlzIG51bGwiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAocm9vdE9mVHJ1c3QuZ2V0VmVyaWZpZWRCb290SGFzaCgpLmxlbmd0aCAhPSAzMikgeworICAgICAgICAgICAgTG9nLmUoRkFJTCwgIlZlcmlmaWVkIGJvb3QgaGFzaCBpc24ndCAzMiBieXRlcyIpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0FsbFplcm9lcyhyb290T2ZUcnVzdC5nZXRWZXJpZmllZEJvb3RIYXNoKCkpKSB7CisgICAgICAgICAgICBMb2cuZShGQUlMLCAiVmVyaWZpZWQgYm9vdCBoYXNoIGlzIGFsbCB6ZXJvcy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBpc0FsbFplcm9lcyhieXRlW10gY2hlY2tBcnJheSkgeworICAgICAgICBmb3IgKGJ5dGUgYiA6IGNoZWNrQXJyYXkpIHsKKyAgICAgICAgICAgIGlmIChiICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2phdmEvY29tL2dvb2dsZS9hdHRlc3RhdGlvbmV4YW1wbGUvQXV0aG9yaXphdGlvbkxpc3QuamF2YSBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9qYXZhL2NvbS9nb29nbGUvYXR0ZXN0YXRpb25leGFtcGxlL0F1dGhvcml6YXRpb25MaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliMzE3ZQotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9qYXZhL2NvbS9nb29nbGUvYXR0ZXN0YXRpb25leGFtcGxlL0F1dGhvcml6YXRpb25MaXN0LmphdmEKQEAgLTAsMCArMSw2MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5nb29nbGUuYXR0ZXN0YXRpb25leGFtcGxlOworCitpbXBvcnQgYW5kcm9pZC5zZWN1cml0eS5rZXlzdG9yZS5LZXlQcm9wZXJ0aWVzOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLkpvaW5lcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZU1hcDsKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZVNldDsKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0Lkxpc3RzOworCitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkFTTjFFbmNvZGFibGU7CitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkFTTjFQcmltaXRpdmU7CitpbXBvcnQgb3JnLmJvdW5jeWNhc3RsZS5hc24xLkFTTjFTZXF1ZW5jZTsKK2ltcG9ydCBvcmcuYm91bmN5Y2FzdGxlLmFzbjEuQVNOMVNlcXVlbmNlUGFyc2VyOworaW1wb3J0IG9yZy5ib3VuY3ljYXN0bGUuYXNuMS5BU04xVGFnZ2VkT2JqZWN0OworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24uYmFzZS5GdW5jdGlvbnMuZm9yTWFwOworaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkNvbGxlY3Rpb25zMi50cmFuc2Zvcm07CisKK3B1YmxpYyBjbGFzcyBBdXRob3JpemF0aW9uTGlzdCB7CisgICAgLy8gQWxnb3JpdGhtIHZhbHVlcy4KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9BTEdPUklUSE1fUlNBID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9BTEdPUklUSE1fRUMgPSAzOworCisgICAgLy8gRUMgQ3VydmVzCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fRUNfQ1VSVkVfUDIyNCA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fRUNfQ1VSVkVfUDI1NiA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fRUNfQ1VSVkVfUDM4NCA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fRUNfQ1VSVkVfUDUyMSA9IDM7CisKKyAgICAvLyBQYWRkaW5nIG1vZGVzLgorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtNX1BBRF9OT05FID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9QQURfUlNBX09BRVAgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtNX1BBRF9SU0FfUFNTID0gMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9QQURfUlNBX1BLQ1MxXzFfNV9FTkNSWVBUID0gNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9QQURfUlNBX1BLQ1MxXzFfNV9TSUdOID0gNTsKKworICAgIC8vIERpZ2VzdCBtb2Rlcy4KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9ESUdFU1RfTk9ORSA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fRElHRVNUX01ENSA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fRElHRVNUX1NIQTEgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtNX0RJR0VTVF9TSEFfMl8yMjQgPSAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtNX0RJR0VTVF9TSEFfMl8yNTYgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtNX0RJR0VTVF9TSEFfMl8zODQgPSA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtNX0RJR0VTVF9TSEFfMl81MTIgPSA2OworCisgICAgLy8gS2V5IG9yaWdpbnMuCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fT1JJR0lOX0dFTkVSQVRFRCA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fT1JJR0lOX0lNUE9SVEVEID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9PUklHSU5fVU5LTk9XTiA9IDM7CisKKyAgICAvLyBPcGVyYXRpb24gUHVycG9zZXMuCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fUFVSUE9TRV9FTkNSWVBUID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9QVVJQT1NFX0RFQ1JZUFQgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtNX1BVUlBPU0VfU0lHTiA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fUFVSUE9TRV9WRVJJRlkgPSAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtNX1BVUlBPU0VfREVSSVZFX0tFWSA9IDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS01fUFVSUE9TRV9XUkFQX0tFWSA9IDU7CisKKyAgICAvLyBVc2VyIGF1dGhlbnRpY2F0b3JzLgorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhXX0FVVEhfUEFTU1dPUkQgPSAxIDw8IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSFdfQVVUSF9GSU5HRVJQUklOVCA9IDEgPDwgMTsKKworICAgIC8vIEtleW1hc3RlciB0YWcgY2xhc3NlcworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLTV9FTlVNID0gMSA8PCAyODsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fRU5VTV9SRVAgPSAyIDw8IDI4OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLTV9VSU5UID0gMyA8PCAyODsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVUxPTkcgPSA1IDw8IDI4OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLTV9EQVRFID0gNiA8PCAyODsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fQk9PTCA9IDcgPDwgMjg7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX0JZVEVTID0gOSA8PCAyODsKKworICAgIC8vIFRhZyBjbGFzcyByZW1vdmFsIG1hc2sKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS0VZTUFTVEVSX1RBR19UWVBFX01BU0sgPSAweDBGRkZGRkZGOworCisgICAgLy8gS2V5bWFzdGVyIHRhZ3MKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVEFHX1BVUlBPU0UgPSBLTV9FTlVNX1JFUCB8IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19BTEdPUklUSE0gPSBLTV9FTlVNIHwgMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVEFHX0tFWV9TSVpFID0gS01fVUlOVCB8IDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19ESUdFU1QgPSBLTV9FTlVNX1JFUCB8IDU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19QQURESU5HID0gS01fRU5VTV9SRVAgfCA2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLTV9UQUdfRUNfQ1VSVkUgPSBLTV9FTlVNIHwgMTA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19SU0FfUFVCTElDX0VYUE9ORU5UID0gS01fVUxPTkcgfCAyMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19BQ1RJVkVfREFURVRJTUUgPSBLTV9EQVRFIHwgNDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLTV9UQUdfT1JJR0lOQVRJT05fRVhQSVJFX0RBVEVUSU1FID0gS01fREFURSB8IDQwMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVEFHX1VTQUdFX0VYUElSRV9EQVRFVElNRSA9IEtNX0RBVEUgfCA0MDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19OT19BVVRIX1JFUVVJUkVEID0gS01fQk9PTCB8IDUwMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVEFHX1VTRVJfQVVUSF9UWVBFID0gS01fRU5VTSB8IDUwNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVEFHX0FMTE9XX1dISUxFX09OX0JPRFkgPSBLTV9CT09MIHwgNTA2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLTV9UQUdfQVVUSF9USU1FT1VUID0gS01fVUlOVCB8IDUwNTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVEFHX0FMTF9BUFBMSUNBVElPTlMgPSBLTV9CT09MIHwgNjAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLTV9UQUdfQVBQTElDQVRJT05fSUQgPSBLTV9CWVRFUyB8IDYwMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVEFHX0NSRUFUSU9OX0RBVEVUSU1FID0gS01fREFURSB8IDcwMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVEFHX09SSUdJTiA9IEtNX0VOVU0gfCA3MDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19ST0xMQkFDS19SRVNJU1RBTlQgPSBLTV9CT09MIHwgNzAzOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLTV9UQUdfUk9PVF9PRl9UUlVTVCA9IEtNX0JZVEVTIHwgNzA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBLTV9UQUdfT1NfVkVSU0lPTiA9IEtNX1VJTlQgfCA3MDU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19PU19QQVRDSExFVkVMID0gS01fVUlOVCB8IDcwNjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS01fVEFHX0FUVEVTVEFUSU9OX0FQUExJQ0FUSU9OX0lEID0gS01fQllURVMgfCA3MDk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19WRU5ET1JfUEFUQ0hMRVZFTCA9IEtNX1VJTlQgfCA3MTg7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEtNX1RBR19CT09UX1BBVENITEVWRUwgPSBLTV9VSU5UIHwgNzE5OworCisgICAgLy8gTWFwIGZvciBjb252ZXJ0aW5nIHBhZGRpbmcgdmFsdWVzIHRvIHN0cmluZ3MKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbW11dGFibGVNYXA8SW50ZWdlciwgU3RyaW5nPiBwYWRkaW5nTWFwID0gSW1tdXRhYmxlTWFwCisgICAgICAgICAgICAuPEludGVnZXIsIFN0cmluZz4gYnVpbGRlcigpCisgICAgICAgICAgICAucHV0KEtNX1BBRF9OT05FLCAiTk9ORSIpCisgICAgICAgICAgICAucHV0KEtNX1BBRF9SU0FfT0FFUCwgIk9BRVAiKQorICAgICAgICAgICAgLnB1dChLTV9QQURfUlNBX1BTUywgIlBTUyIpCisgICAgICAgICAgICAucHV0KEtNX1BBRF9SU0FfUEtDUzFfMV81X0VOQ1JZUFQsICJQS0NTMSBFTkNSWVBUIikKKyAgICAgICAgICAgIC5wdXQoS01fUEFEX1JTQV9QS0NTMV8xXzVfU0lHTiwgIlBLQ1MxIFNJR04iKQorICAgICAgICAgICAgLmJ1aWxkKCk7CisKKyAgICAvLyBNYXAgZm9yIGNvbnZlcnRpbmcgZGlnZXN0IHZhbHVlcyB0byBzdHJpbmdzCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW1tdXRhYmxlTWFwPEludGVnZXIsIFN0cmluZz4gZGlnZXN0TWFwID0gSW1tdXRhYmxlTWFwCisgICAgICAgICAgICAuPEludGVnZXIsIFN0cmluZz4gYnVpbGRlcigpCisgICAgICAgICAgICAucHV0KEtNX0RJR0VTVF9OT05FLCAiTk9ORSIpCisgICAgICAgICAgICAucHV0KEtNX0RJR0VTVF9NRDUsICJNRDUiKQorICAgICAgICAgICAgLnB1dChLTV9ESUdFU1RfU0hBMSwgIlNIQTEiKQorICAgICAgICAgICAgLnB1dChLTV9ESUdFU1RfU0hBXzJfMjI0LCAiU0hBMjI0IikKKyAgICAgICAgICAgIC5wdXQoS01fRElHRVNUX1NIQV8yXzI1NiwgIlNIQTI1NiIpCisgICAgICAgICAgICAucHV0KEtNX0RJR0VTVF9TSEFfMl8zODQsICJTSEEzODQiKQorICAgICAgICAgICAgLnB1dChLTV9ESUdFU1RfU0hBXzJfNTEyLCAiU0hBNTEyIikKKyAgICAgICAgICAgIC5idWlsZCgpOworCisgICAgLy8gTWFwIGZvciBjb252ZXJ0aW5nIHB1cnBvc2UgdmFsdWVzIHRvIHN0cmluZ3MKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbW11dGFibGVNYXA8SW50ZWdlciwgU3RyaW5nPiBwdXJwb3NlTWFwID0gSW1tdXRhYmxlTWFwCisgICAgICAgICAgICAuPEludGVnZXIsIFN0cmluZz4gYnVpbGRlcigpCisgICAgICAgICAgICAucHV0KEtNX1BVUlBPU0VfREVDUllQVCwgIkRFQ1JZUFQiKQorICAgICAgICAgICAgLnB1dChLTV9QVVJQT1NFX0VOQ1JZUFQsICJFTkNSWVBUIikKKyAgICAgICAgICAgIC5wdXQoS01fUFVSUE9TRV9TSUdOLCAiU0lHTiIpCisgICAgICAgICAgICAucHV0KEtNX1BVUlBPU0VfVkVSSUZZLCAiVkVSSUZZIikKKyAgICAgICAgICAgIC5idWlsZCgpOworCisgICAgcHJpdmF0ZSBTZXQ8SW50ZWdlcj4gcHVycG9zZXM7CisgICAgcHJpdmF0ZSBJbnRlZ2VyIGFsZ29yaXRobTsKKyAgICBwcml2YXRlIEludGVnZXIga2V5U2l6ZTsKKyAgICBwcml2YXRlIFNldDxJbnRlZ2VyPiBkaWdlc3RzOworICAgIHByaXZhdGUgU2V0PEludGVnZXI+IHBhZGRpbmdNb2RlczsKKyAgICBwcml2YXRlIEludGVnZXIgZWNDdXJ2ZTsKKyAgICBwcml2YXRlIExvbmcgcnNhUHVibGljRXhwb25lbnQ7CisgICAgcHJpdmF0ZSBEYXRlIGFjdGl2ZURhdGVUaW1lOworICAgIHByaXZhdGUgRGF0ZSBvcmlnaW5hdGlvbkV4cGlyZURhdGVUaW1lOworICAgIHByaXZhdGUgRGF0ZSB1c2FnZUV4cGlyZURhdGVUaW1lOworICAgIHByaXZhdGUgYm9vbGVhbiBub0F1dGhSZXF1aXJlZDsKKyAgICBwcml2YXRlIEludGVnZXIgdXNlckF1dGhUeXBlOworICAgIHByaXZhdGUgSW50ZWdlciBhdXRoVGltZW91dDsKKyAgICBwcml2YXRlIGJvb2xlYW4gYWxsb3dXaGlsZU9uQm9keTsKKyAgICBwcml2YXRlIGJvb2xlYW4gYWxsQXBwbGljYXRpb25zOworICAgIHByaXZhdGUgYnl0ZVtdIGFwcGxpY2F0aW9uSWQ7CisgICAgcHJpdmF0ZSBEYXRlIGNyZWF0aW9uRGF0ZVRpbWU7CisgICAgcHJpdmF0ZSBJbnRlZ2VyIG9yaWdpbjsKKyAgICBwcml2YXRlIGJvb2xlYW4gcm9sbGJhY2tSZXNpc3RhbnQ7CisgICAgcHJpdmF0ZSBSb290T2ZUcnVzdCByb290T2ZUcnVzdDsKKyAgICBwcml2YXRlIEludGVnZXIgb3NWZXJzaW9uOworICAgIHByaXZhdGUgSW50ZWdlciBvc1BhdGNoTGV2ZWw7CisgICAgcHJpdmF0ZSBJbnRlZ2VyIHZlbmRvclBhdGNoTGV2ZWw7CisgICAgcHJpdmF0ZSBJbnRlZ2VyIGJvb3RQYXRjaExldmVsOworICAgIHByaXZhdGUgQXR0ZXN0YXRpb25BcHBsaWNhdGlvbklkIGF0dGVzdGF0aW9uQXBwbGljYXRpb25JZDsKKworICAgIHB1YmxpYyBBdXRob3JpemF0aW9uTGlzdChBU04xRW5jb2RhYmxlIHNlcXVlbmNlKSB0aHJvd3MgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKCEoc2VxdWVuY2UgaW5zdGFuY2VvZiBBU04xU2VxdWVuY2UpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uKCJFeHBlY3RlZCBzZXF1ZW5jZSBmb3IgYXV0aG9yaXphdGlvbiBsaXN0LCBmb3VuZCAiCisgICAgICAgICAgICAgICAgICAgICsgc2VxdWVuY2UuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgQVNOMVNlcXVlbmNlUGFyc2VyIHBhcnNlciA9ICgoQVNOMVNlcXVlbmNlKSBzZXF1ZW5jZSkucGFyc2VyKCk7CisgICAgICAgIEFTTjFUYWdnZWRPYmplY3QgZW50cnkgPSBwYXJzZUFzbjFUYWdnZWRPYmplY3QocGFyc2VyKTsKKyAgICAgICAgZm9yICg7IGVudHJ5ICE9IG51bGw7IGVudHJ5ID0gcGFyc2VBc24xVGFnZ2VkT2JqZWN0KHBhcnNlcikpIHsKKyAgICAgICAgICAgIGludCB0YWcgPSBlbnRyeS5nZXRUYWdObygpOworICAgICAgICAgICAgQVNOMVByaW1pdGl2ZSB2YWx1ZSA9IGVudHJ5LmdldE9iamVjdCgpOworICAgICAgICAgICAgTG9nLmkoIkF0dGVzdGF0aW9uIiwgIlBhcnNpbmcgdGFnOiBbIiArIHRhZyArICJdLCB2YWx1ZTogWyIgKyB2YWx1ZSArICJdIik7CisgICAgICAgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24oIlVua25vd24gdGFnICIgKyB0YWcgKyAiIGZvdW5kIik7CisKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19QVVJQT1NFICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIHB1cnBvc2VzID0gQXNuMVV0aWxzLmdldEludGVnZXJzRnJvbUFzbjFTZXQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19BTEdPUklUSE0gJiBLRVlNQVNURVJfVEFHX1RZUEVfTUFTSzoKKyAgICAgICAgICAgICAgICAgICAgYWxnb3JpdGhtID0gQXNuMVV0aWxzLmdldEludGVnZXJGcm9tQXNuMSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS01fVEFHX0tFWV9TSVpFICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIGtleVNpemUgPSBBc24xVXRpbHMuZ2V0SW50ZWdlckZyb21Bc24xKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmkoIkF0dGVzdGF0aW9uIiwgIkZvdW5kIEtFWSBTSVpFLCB2YWx1ZTogIiArIGtleVNpemUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19ESUdFU1QgJiBLRVlNQVNURVJfVEFHX1RZUEVfTUFTSzoKKyAgICAgICAgICAgICAgICAgICAgZGlnZXN0cyA9IEFzbjFVdGlscy5nZXRJbnRlZ2Vyc0Zyb21Bc24xU2V0KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTV9UQUdfUEFERElORyAmIEtFWU1BU1RFUl9UQUdfVFlQRV9NQVNLOgorICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTW9kZXMgPSBBc24xVXRpbHMuZ2V0SW50ZWdlcnNGcm9tQXNuMVNldCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS01fVEFHX1JTQV9QVUJMSUNfRVhQT05FTlQgJiBLRVlNQVNURVJfVEFHX1RZUEVfTUFTSzoKKyAgICAgICAgICAgICAgICAgICAgcnNhUHVibGljRXhwb25lbnQgPSBBc24xVXRpbHMuZ2V0TG9uZ0Zyb21Bc24xKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTV9UQUdfTk9fQVVUSF9SRVFVSVJFRCAmIEtFWU1BU1RFUl9UQUdfVFlQRV9NQVNLOgorICAgICAgICAgICAgICAgICAgICBub0F1dGhSZXF1aXJlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS01fVEFHX0NSRUFUSU9OX0RBVEVUSU1FICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uRGF0ZVRpbWUgPSBBc24xVXRpbHMuZ2V0RGF0ZUZyb21Bc24xKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTV9UQUdfT1JJR0lOICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbiA9IEFzbjFVdGlscy5nZXRJbnRlZ2VyRnJvbUFzbjEodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19PU19WRVJTSU9OICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIG9zVmVyc2lvbiA9IEFzbjFVdGlscy5nZXRJbnRlZ2VyRnJvbUFzbjEodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19PU19QQVRDSExFVkVMICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIG9zUGF0Y2hMZXZlbCA9IEFzbjFVdGlscy5nZXRJbnRlZ2VyRnJvbUFzbjEodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19WRU5ET1JfUEFUQ0hMRVZFTCAmIEtFWU1BU1RFUl9UQUdfVFlQRV9NQVNLOgorICAgICAgICAgICAgICAgICAgICB2ZW5kb3JQYXRjaExldmVsID0gQXNuMVV0aWxzLmdldEludGVnZXJGcm9tQXNuMSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS01fVEFHX0JPT1RfUEFUQ0hMRVZFTCAmIEtFWU1BU1RFUl9UQUdfVFlQRV9NQVNLOgorICAgICAgICAgICAgICAgICAgICBib290UGF0Y2hMZXZlbCA9IEFzbjFVdGlscy5nZXRJbnRlZ2VyRnJvbUFzbjEodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19BQ1RJVkVfREFURVRJTUUgJiBLRVlNQVNURVJfVEFHX1RZUEVfTUFTSzoKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlRGF0ZVRpbWUgPSBBc24xVXRpbHMuZ2V0RGF0ZUZyb21Bc24xKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTV9UQUdfT1JJR0lOQVRJT05fRVhQSVJFX0RBVEVUSU1FICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbmF0aW9uRXhwaXJlRGF0ZVRpbWUgPSBBc24xVXRpbHMuZ2V0RGF0ZUZyb21Bc24xKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTV9UQUdfVVNBR0VfRVhQSVJFX0RBVEVUSU1FICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIHVzYWdlRXhwaXJlRGF0ZVRpbWUgPSBBc24xVXRpbHMuZ2V0RGF0ZUZyb21Bc24xKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTV9UQUdfQVBQTElDQVRJT05fSUQgJiBLRVlNQVNURVJfVEFHX1RZUEVfTUFTSzoKKyAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25JZCA9IEFzbjFVdGlscy5nZXRCeXRlQXJyYXlGcm9tQXNuMSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS01fVEFHX1JPTExCQUNLX1JFU0lTVEFOVCAmIEtFWU1BU1RFUl9UQUdfVFlQRV9NQVNLOgorICAgICAgICAgICAgICAgICAgICByb2xsYmFja1Jlc2lzdGFudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS01fVEFHX0FVVEhfVElNRU9VVCAmIEtFWU1BU1RFUl9UQUdfVFlQRV9NQVNLOgorICAgICAgICAgICAgICAgICAgICBhdXRoVGltZW91dCA9IEFzbjFVdGlscy5nZXRJbnRlZ2VyRnJvbUFzbjEodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19BTExPV19XSElMRV9PTl9CT0RZICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIGFsbG93V2hpbGVPbkJvZHkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19FQ19DVVJWRSAmIEtFWU1BU1RFUl9UQUdfVFlQRV9NQVNLOgorICAgICAgICAgICAgICAgICAgICBlY0N1cnZlID0gQXNuMVV0aWxzLmdldEludGVnZXJGcm9tQXNuMSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS01fVEFHX1VTRVJfQVVUSF9UWVBFICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIHVzZXJBdXRoVHlwZSA9IEFzbjFVdGlscy5nZXRJbnRlZ2VyRnJvbUFzbjEodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19ST09UX09GX1RSVVNUICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb290T2ZUcnVzdCA9IG5ldyBSb290T2ZUcnVzdCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZSgiQXR0ZXN0YXRpb25GYWlsIiwgIlJvb3Qgb2YgdHJ1c3QgcGFyc2luZyBmYWlsdXJlIiArIGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE9mVHJ1c3QgPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgS01fVEFHX0FUVEVTVEFUSU9OX0FQUExJQ0FUSU9OX0lEICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIGF0dGVzdGF0aW9uQXBwbGljYXRpb25JZCA9IG5ldyBBdHRlc3RhdGlvbkFwcGxpY2F0aW9uSWQoQXNuMVV0aWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEFzbjFFbmNvZGFibGVGcm9tQnl0ZXMoQXNuMVV0aWxzLmdldEJ5dGVBcnJheUZyb21Bc24xKHZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1RBR19BTExfQVBQTElDQVRJT05TICYgS0VZTUFTVEVSX1RBR19UWVBFX01BU0s6CisgICAgICAgICAgICAgICAgICAgIGFsbEFwcGxpY2F0aW9ucyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBhbGdvcml0aG1Ub1N0cmluZyhpbnQgYWxnb3JpdGhtKSB7CisgICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CisgICAgICAgICAgICBjYXNlIEtNX0FMR09SSVRITV9SU0E6CisgICAgICAgICAgICAgICAgcmV0dXJuICJSU0EiOworICAgICAgICAgICAgY2FzZSBLTV9BTEdPUklUSE1fRUM6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFQ0RTQSI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAiVW5rbm93biI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBwYWRkaW5nTW9kZXNUb1N0cmluZyhmaW5hbCBTZXQ8SW50ZWdlcj4gcGFkZGluZ01vZGVzKSB7CisgICAgICAgIHJldHVybiBqb2luU3RyaW5ncyh0cmFuc2Zvcm0ocGFkZGluZ01vZGVzLCBmb3JNYXAocGFkZGluZ01hcCwgIlVua25vd24iKSkpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhZGRpbmdNb2RlVG9TdHJpbmcoaW50IHBhZGRpbmdNb2RlKSB7CisgICAgICAgIHJldHVybiBmb3JNYXAocGFkZGluZ01hcCwgIlVua25vd24iKS5hcHBseShwYWRkaW5nTW9kZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZGlnZXN0c1RvU3RyaW5nKFNldDxJbnRlZ2VyPiBkaWdlc3RzKSB7CisgICAgICAgIHJldHVybiBqb2luU3RyaW5ncyh0cmFuc2Zvcm0oZGlnZXN0cywgZm9yTWFwKGRpZ2VzdE1hcCwgIlVua25vd24iKSkpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGRpZ2VzdFRvU3RyaW5nKGludCBkaWdlc3QpIHsKKyAgICAgICAgcmV0dXJuIGZvck1hcChkaWdlc3RNYXAsICJVbmtub3duIikuYXBwbHkoZGlnZXN0KTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBwdXJwb3Nlc1RvU3RyaW5nKFNldDxJbnRlZ2VyPiBwdXJwb3NlcykgeworICAgICAgICByZXR1cm4gam9pblN0cmluZ3ModHJhbnNmb3JtKHB1cnBvc2VzLCBmb3JNYXAocHVycG9zZU1hcCwgIlVua25vd24iKSkpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHVzZXJBdXRoVHlwZVRvU3RyaW5nKGludCB1c2VyQXV0aFR5cGUpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IHR5cGVzID0gTGlzdHMubmV3QXJyYXlMaXN0KCk7CisgICAgICAgIGlmICgodXNlckF1dGhUeXBlICYgSFdfQVVUSF9GSU5HRVJQUklOVCkgIT0gMCkKKyAgICAgICAgICAgIHR5cGVzLmFkZCgiRmluZ2VycHJpbnQiKTsKKyAgICAgICAgaWYgKCh1c2VyQXV0aFR5cGUgJiBIV19BVVRIX1BBU1NXT1JEKSAhPSAwKQorICAgICAgICAgICAgdHlwZXMuYWRkKCJQYXNzd29yZCIpOworICAgICAgICByZXR1cm4gam9pblN0cmluZ3ModHlwZXMpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG9yaWdpblRvU3RyaW5nKGludCBvcmlnaW4pIHsKKyAgICAgICAgc3dpdGNoIChvcmlnaW4pIHsKKyAgICAgICAgICAgIGNhc2UgS01fT1JJR0lOX0dFTkVSQVRFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkdlbmVyYXRlZCI7CisgICAgICAgICAgICBjYXNlIEtNX09SSUdJTl9JTVBPUlRFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkltcG9ydGVkIjsKKyAgICAgICAgICAgIGNhc2UgS01fT1JJR0lOX1VOS05PV046CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIChLTTApIjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBqb2luU3RyaW5ncyhDb2xsZWN0aW9uPFN0cmluZz4gY29sbGVjdGlvbikgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0J1aWxkZXIoKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoIlsiKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoSm9pbmVyLm9uKCIsICIpLmpvaW4oY29sbGVjdGlvbikpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiXSIpCisgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZvcm1hdERhdGUoRGF0ZSBkYXRlKSB7CisgICAgICAgIHJldHVybiBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoKS5mb3JtYXQoZGF0ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgQVNOMVRhZ2dlZE9iamVjdCBwYXJzZUFzbjFUYWdnZWRPYmplY3QoQVNOMVNlcXVlbmNlUGFyc2VyIHBhcnNlcikKKyAgICAgICAgICAgIHRocm93cyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24geworICAgICAgICBBU04xRW5jb2RhYmxlIGFzbjFFbmNvZGFibGUgPSBwYXJzZUFzbjFFbmNvZGFibGUocGFyc2VyKTsKKyAgICAgICAgaWYgKGFzbjFFbmNvZGFibGUgPT0gbnVsbCB8fCBhc24xRW5jb2RhYmxlIGluc3RhbmNlb2YgQVNOMVRhZ2dlZE9iamVjdCkgeworICAgICAgICAgICAgcmV0dXJuIChBU04xVGFnZ2VkT2JqZWN0KSBhc24xRW5jb2RhYmxlOworICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkV4cGVjdGVkIHRhZ2dlZCBvYmplY3QsIGZvdW5kICIgKyBhc24xRW5jb2RhYmxlLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBBU04xRW5jb2RhYmxlIHBhcnNlQXNuMUVuY29kYWJsZShBU04xU2VxdWVuY2VQYXJzZXIgcGFyc2VyKQorICAgICAgICAgICAgdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRPYmplY3QoKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIEFTTjEgc2VxdWVuY2UiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBTZXQ8SW50ZWdlcj4gZ2V0UHVycG9zZXMoKSB7CisgICAgICAgIHJldHVybiBwdXJwb3NlczsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRBbGdvcml0aG0oKSB7CisgICAgICAgIHJldHVybiBhbGdvcml0aG07CisgICAgfQorCisgICAgcHVibGljIEludGVnZXIgZ2V0S2V5U2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIGtleVNpemU7CisgICAgfQorCisgICAgcHVibGljIFNldDxJbnRlZ2VyPiBnZXREaWdlc3RzKCkgeworICAgICAgICByZXR1cm4gZGlnZXN0czsKKyAgICB9CisKKyAgICBwdWJsaWMgU2V0PEludGVnZXI+IGdldFBhZGRpbmdNb2RlcygpIHsKKyAgICAgICAgcmV0dXJuIHBhZGRpbmdNb2RlczsKKyAgICB9CisKKyAgICBwdWJsaWMgU2V0PFN0cmluZz4gZ2V0UGFkZGluZ01vZGVzQXNTdHJpbmdzKCkgdGhyb3dzIENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChwYWRkaW5nTW9kZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIEltbXV0YWJsZVNldC5vZigpOworICAgICAgICB9CisKKyAgICAgICAgSW1tdXRhYmxlU2V0LkJ1aWxkZXI8U3RyaW5nPiBidWlsZGVyID0gSW1tdXRhYmxlU2V0LmJ1aWxkZXIoKTsKKyAgICAgICAgZm9yIChpbnQgcGFkZGluZ01vZGUgOiBwYWRkaW5nTW9kZXMpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ01vZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1BBRF9OT05FOgorICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZChLZXlQcm9wZXJ0aWVzLkVOQ1JZUFRJT05fUEFERElOR19OT05FKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTV9QQURfUlNBX09BRVA6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkKEtleVByb3BlcnRpZXMuRU5DUllQVElPTl9QQURESU5HX1JTQV9PQUVQKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTV9QQURfUlNBX1BLQ1MxXzFfNV9FTkNSWVBUOgorICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZChLZXlQcm9wZXJ0aWVzLkVOQ1JZUFRJT05fUEFERElOR19SU0FfUEtDUzEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEtNX1BBRF9SU0FfUEtDUzFfMV81X1NJR046CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkKEtleVByb3BlcnRpZXMuU0lHTkFUVVJFX1BBRERJTkdfUlNBX1BLQ1MxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBLTV9QQURfUlNBX1BTUzoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGQoS2V5UHJvcGVydGllcy5TSUdOQVRVUkVfUEFERElOR19SU0FfUFNTKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IENlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbigiSW52YWxpZCBwYWRkaW5nIG1vZGUgIiArIHBhZGRpbmdNb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldEVjQ3VydmUoKSB7CisgICAgICAgIHJldHVybiBlY0N1cnZlOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZWNDdXJ2ZUFzU3RyaW5nKCkgeworICAgICAgICBpZiAoZWNDdXJ2ZSA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuICJOVUxMIjsKKworICAgICAgICBzd2l0Y2ggKGVjQ3VydmUpIHsKKyAgICAgICAgICAgIGNhc2UgS01fRUNfQ1VSVkVfUDIyNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gInNlY3AyMjRyMSI7CisgICAgICAgICAgICBjYXNlIEtNX0VDX0NVUlZFX1AyNTY6CisgICAgICAgICAgICAgICAgcmV0dXJuICJzZWNwMjU2cjEiOworICAgICAgICAgICAgY2FzZSBLTV9FQ19DVVJWRV9QMzg0OgorICAgICAgICAgICAgICAgIHJldHVybiAic2VjcDM4NHIxIjsKKyAgICAgICAgICAgIGNhc2UgS01fRUNfQ1VSVkVfUDUyMToKKyAgICAgICAgICAgICAgICByZXR1cm4gInNlY3A1MjFyMSI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgTG9uZyBnZXRSc2FQdWJsaWNFeHBvbmVudCgpIHsKKyAgICAgICAgcmV0dXJuIHJzYVB1YmxpY0V4cG9uZW50OworICAgIH0KKworICAgIHB1YmxpYyBEYXRlIGdldEFjdGl2ZURhdGVUaW1lKCkgeworICAgICAgICByZXR1cm4gYWN0aXZlRGF0ZVRpbWU7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0T3JpZ2luYXRpb25FeHBpcmVEYXRlVGltZSgpIHsKKyAgICAgICAgcmV0dXJuIG9yaWdpbmF0aW9uRXhwaXJlRGF0ZVRpbWU7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0VXNhZ2VFeHBpcmVEYXRlVGltZSgpIHsKKyAgICAgICAgcmV0dXJuIHVzYWdlRXhwaXJlRGF0ZVRpbWU7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNOb0F1dGhSZXF1aXJlZCgpIHsKKyAgICAgICAgcmV0dXJuIG5vQXV0aFJlcXVpcmVkOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldFVzZXJBdXRoVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIHVzZXJBdXRoVHlwZTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRBdXRoVGltZW91dCgpIHsKKyAgICAgICAgcmV0dXJuIGF1dGhUaW1lb3V0OworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzQWxsb3dXaGlsZU9uQm9keSgpIHsKKyAgICAgICAgcmV0dXJuIGFsbG93V2hpbGVPbkJvZHk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNBbGxBcHBsaWNhdGlvbnMoKSB7CisgICAgICAgIHJldHVybiBhbGxBcHBsaWNhdGlvbnM7CisgICAgfQorCisgICAgcHVibGljIGJ5dGVbXSBnZXRBcHBsaWNhdGlvbklkKCkgeworICAgICAgICByZXR1cm4gYXBwbGljYXRpb25JZDsKKyAgICB9CisKKyAgICBwdWJsaWMgRGF0ZSBnZXRDcmVhdGlvbkRhdGVUaW1lKCkgeworICAgICAgICByZXR1cm4gY3JlYXRpb25EYXRlVGltZTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRPcmlnaW4oKSB7CisgICAgICAgIHJldHVybiBvcmlnaW47CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNSb2xsYmFja1Jlc2lzdGFudCgpIHsKKyAgICAgICAgcmV0dXJuIHJvbGxiYWNrUmVzaXN0YW50OworICAgIH0KKworICAgIHB1YmxpYyBSb290T2ZUcnVzdCBnZXRSb290T2ZUcnVzdCgpIHsKKyAgICAgICAgcmV0dXJuIHJvb3RPZlRydXN0OworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldE9zVmVyc2lvbigpIHsKKyAgICAgICAgcmV0dXJuIG9zVmVyc2lvbjsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRPc1BhdGNoTGV2ZWwoKSB7CisgICAgICAgIHJldHVybiBvc1BhdGNoTGV2ZWw7CisgICAgfQorCisgICAgcHVibGljIEludGVnZXIgZ2V0VmVuZG9yUGF0Y2hMZXZlbCgpIHsgcmV0dXJuIHZlbmRvclBhdGNoTGV2ZWw7IH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldEJvb3RQYXRjaExldmVsKCkgeyByZXR1cm4gYm9vdFBhdGNoTGV2ZWw7IH0KKworICAgIHB1YmxpYyBBdHRlc3RhdGlvbkFwcGxpY2F0aW9uSWQgZ2V0QXR0ZXN0YXRpb25BcHBsaWNhdGlvbklkKCkgeworICAgICAgICByZXR1cm4gYXR0ZXN0YXRpb25BcHBsaWNhdGlvbklkOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICAgICAgaWYgKGFsZ29yaXRobSAhPSBudWxsKSB7CisgICAgICAgICAgICBzLmFwcGVuZCgiXG5BbGdvcml0aG06ICIpLmFwcGVuZChhbGdvcml0aG1Ub1N0cmluZyhhbGdvcml0aG0pKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlTaXplICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcbktleVNpemU6ICIpLmFwcGVuZChrZXlTaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwdXJwb3NlcyAhPSBudWxsICYmICFwdXJwb3Nlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcblB1cnBvc2VzOiAiKS5hcHBlbmQocHVycG9zZXNUb1N0cmluZyhwdXJwb3NlcykpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpZ2VzdHMgIT0gbnVsbCAmJiAhZGlnZXN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcbkRpZ2VzdHM6ICIpLmFwcGVuZChkaWdlc3RzVG9TdHJpbmcoZGlnZXN0cykpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhZGRpbmdNb2RlcyAhPSBudWxsICYmICFwYWRkaW5nTW9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBzLmFwcGVuZCgiXG5QYWRkaW5nIG1vZGVzOiAiKS5hcHBlbmQocGFkZGluZ01vZGVzVG9TdHJpbmcocGFkZGluZ01vZGVzKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZWNDdXJ2ZSAhPSBudWxsKSB7CisgICAgICAgICAgICBzLmFwcGVuZCgiXG5FQyBDdXJ2ZTogIikuYXBwZW5kKGVjQ3VydmVBc1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBsYWJlbCA9ICJcblJTQSBleHBvbmVudDogIjsKKyAgICAgICAgaWYgKHJzYVB1YmxpY0V4cG9uZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKGxhYmVsKS5hcHBlbmQocnNhUHVibGljRXhwb25lbnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZURhdGVUaW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcbkFjdGl2ZTogIikuYXBwZW5kKGZvcm1hdERhdGUoYWN0aXZlRGF0ZVRpbWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvcmlnaW5hdGlvbkV4cGlyZURhdGVUaW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcbk9yaWdpbmF0aW9uIGV4cGlyZTogIikuYXBwZW5kKGZvcm1hdERhdGUob3JpZ2luYXRpb25FeHBpcmVEYXRlVGltZSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzYWdlRXhwaXJlRGF0ZVRpbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgcy5hcHBlbmQoIlxuVXNhZ2UgZXhwaXJlOiAiKS5hcHBlbmQoZm9ybWF0RGF0ZSh1c2FnZUV4cGlyZURhdGVUaW1lKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW5vQXV0aFJlcXVpcmVkICYmIHVzZXJBdXRoVHlwZSAhPSBudWxsKSB7CisgICAgICAgICAgICBzLmFwcGVuZCgiXG5BdXRoIHR5cGVzOiAiKS5hcHBlbmQodXNlckF1dGhUeXBlVG9TdHJpbmcodXNlckF1dGhUeXBlKSk7CisgICAgICAgICAgICBpZiAoYXV0aFRpbWVvdXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbkF1dGggdGltZW91dDogIikuYXBwZW5kKGF1dGhUaW1lb3V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcHBsaWNhdGlvbklkICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcbkFwcGxpY2F0aW9uIElEOiAiKS5hcHBlbmQobmV3IFN0cmluZyhhcHBsaWNhdGlvbklkKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3JlYXRpb25EYXRlVGltZSAhPSBudWxsKSB7CisgICAgICAgICAgICBzLmFwcGVuZCgiXG5DcmVhdGVkOiAiKS5hcHBlbmQoZm9ybWF0RGF0ZShjcmVhdGlvbkRhdGVUaW1lKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3JpZ2luICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcbk9yaWdpbjogIikuYXBwZW5kKG9yaWdpblRvU3RyaW5nKG9yaWdpbikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJvbGxiYWNrUmVzaXN0YW50KSB7CisgICAgICAgICAgICBzLmFwcGVuZCgiXG5Sb2xsYmFjayByZXNpc3RhbnQ6IHRydWUiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyb290T2ZUcnVzdCAhPSBudWxsKSB7CisgICAgICAgICAgICBzLmFwcGVuZCgiXG5Sb290IG9mIFRydXN0OlxuIik7CisgICAgICAgICAgICBzLmFwcGVuZChyb290T2ZUcnVzdCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3NWZXJzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcbk9TIFZlcnNpb246ICIpLmFwcGVuZChvc1ZlcnNpb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9zUGF0Y2hMZXZlbCAhPSBudWxsKSB7CisgICAgICAgICAgICBzLmFwcGVuZCgiXG5PUyBQYXRjaGxldmVsOiAiKS5hcHBlbmQob3NQYXRjaExldmVsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZW5kb3JQYXRjaExldmVsICE9IG51bGwpIHsKKyAgICAgICAgICAgIHMuYXBwZW5kKCJcblZlbmRvciBQYXRjaGxldmVsOiAiKS5hcHBlbmQodmVuZG9yUGF0Y2hMZXZlbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYm9vdFBhdGNoTGV2ZWwgIT0gbnVsbCkgeworICAgICAgICAgICAgcy5hcHBlbmQoIlxuQm9vdCBQYXRjaGxldmVsOiAiKS5hcHBlbmQoYm9vdFBhdGNoTGV2ZWwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF0dGVzdGF0aW9uQXBwbGljYXRpb25JZCAhPSBudWxsKSB7CisgICAgICAgICAgICBzLmFwcGVuZCgiXG5BcHBsaWNhdGlvbiBJRDoiKS5hcHBlbmQoYXR0ZXN0YXRpb25BcHBsaWNhdGlvbklkLnRvU3RyaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvamF2YS9jb20vZ29vZ2xlL2F0dGVzdGF0aW9uZXhhbXBsZS9Sb290T2ZUcnVzdC5qYXZhIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2phdmEvY29tL2dvb2dsZS9hdHRlc3RhdGlvbmV4YW1wbGUvUm9vdE9mVHJ1c3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODIxYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2phdmEvY29tL2dvb2dsZS9hdHRlc3RhdGlvbmV4YW1wbGUvUm9vdE9mVHJ1c3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmdvb2dsZS5hdHRlc3RhdGlvbmV4YW1wbGU7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5pby5CYXNlRW5jb2Rpbmc7CisKK2ltcG9ydCBvcmcuYm91bmN5Y2FzdGxlLmFzbjEuQVNOMUVuY29kYWJsZTsKK2ltcG9ydCBvcmcuYm91bmN5Y2FzdGxlLmFzbjEuQVNOMVNlcXVlbmNlOworCitpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbjsKKworcHVibGljIGNsYXNzIFJvb3RPZlRydXN0IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVkVSSUZJRURfQk9PVF9LRVlfSU5ERVggPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERVZJQ0VfTE9DS0VEX0lOREVYID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVkVSSUZJRURfQk9PVF9TVEFURV9JTkRFWCA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZFUklGSUVEX0JPT1RfSEFTSF9JTkRFWCA9IDM7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9WRVJJRklFRF9CT09UX1ZFUklGSUVEID0gMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9WRVJJRklFRF9CT09UX1NFTEZfU0lHTkVEID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLTV9WRVJJRklFRF9CT09UX1VOVkVSSUZJRUQgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtNX1ZFUklGSUVEX0JPT1RfRkFJTEVEID0gMzsKKworICAgIHByaXZhdGUgZmluYWwgYnl0ZVtdIHZlcmlmaWVkQm9vdEtleTsKKyAgICBwcml2YXRlIGZpbmFsIGJ5dGVbXSB2ZXJpZmllZEJvb3RIYXNoOworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBkZXZpY2VMb2NrZWQ7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgdmVyaWZpZWRCb290U3RhdGU7CisKKyAgICBwdWJsaWMgUm9vdE9mVHJ1c3QoQVNOMUVuY29kYWJsZSBhc24xRW5jb2RhYmxlKSB0aHJvd3MgQ2VydGlmaWNhdGVQYXJzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKCEoYXNuMUVuY29kYWJsZSBpbnN0YW5jZW9mIEFTTjFTZXF1ZW5jZSkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24oIkV4cGVjdGVkIHNlcXVlbmNlIGZvciByb290IG9mIHRydXN0LCBmb3VuZCAiCisgICAgICAgICAgICAgICAgICAgICsgYXNuMUVuY29kYWJsZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBBU04xU2VxdWVuY2Ugc2VxdWVuY2UgPSAoQVNOMVNlcXVlbmNlKSBhc24xRW5jb2RhYmxlOworICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpICE9IDQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkluY29ycmVjdCBzaXplLCBhY3R1YWwgc2l6ZSBpczoiICsgc2VxdWVuY2Uuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICB2ZXJpZmllZEJvb3RLZXkgPQorICAgICAgICAgICAgICAgIEFzbjFVdGlscy5nZXRCeXRlQXJyYXlGcm9tQXNuMShzZXF1ZW5jZS5nZXRPYmplY3RBdChWRVJJRklFRF9CT09UX0tFWV9JTkRFWCkpOworICAgICAgICBkZXZpY2VMb2NrZWQgPSBBc24xVXRpbHMuZ2V0Qm9vbGVhbkZyb21Bc24xKHNlcXVlbmNlLmdldE9iamVjdEF0KERFVklDRV9MT0NLRURfSU5ERVgpKTsKKyAgICAgICAgdmVyaWZpZWRCb290U3RhdGUgPQorICAgICAgICAgICAgICAgIEFzbjFVdGlscy5nZXRJbnRlZ2VyRnJvbUFzbjEoc2VxdWVuY2UuZ2V0T2JqZWN0QXQoVkVSSUZJRURfQk9PVF9TVEFURV9JTkRFWCkpOworICAgICAgICB2ZXJpZmllZEJvb3RIYXNoID0KKyAgICAgICAgICAgICAgICBBc24xVXRpbHMuZ2V0Qnl0ZUFycmF5RnJvbUFzbjEoc2VxdWVuY2UuZ2V0T2JqZWN0QXQoVkVSSUZJRURfQk9PVF9IQVNIX0lOREVYKSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdmVyaWZpZWRCb290U3RhdGVUb1N0cmluZyhpbnQgdmVyaWZpZWRCb290U3RhdGUpIHsKKyAgICAgICAgc3dpdGNoICh2ZXJpZmllZEJvb3RTdGF0ZSkgeworICAgICAgICAgICAgY2FzZSBLTV9WRVJJRklFRF9CT09UX1ZFUklGSUVEOgorICAgICAgICAgICAgICAgIHJldHVybiAiVmVyaWZpZWQiOworICAgICAgICAgICAgY2FzZSBLTV9WRVJJRklFRF9CT09UX1NFTEZfU0lHTkVEOgorICAgICAgICAgICAgICAgIHJldHVybiAiU2VsZi1zaWduZWQiOworICAgICAgICAgICAgY2FzZSBLTV9WRVJJRklFRF9CT09UX1VOVkVSSUZJRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbnZlcmlmaWVkIjsKKyAgICAgICAgICAgIGNhc2UgS01fVkVSSUZJRURfQk9PVF9GQUlMRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJGYWlsZWQiOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlVua25vd24iOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJ5dGVbXSBnZXRWZXJpZmllZEJvb3RLZXkoKSB7CisgICAgICAgIHJldHVybiB2ZXJpZmllZEJvb3RLZXk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNEZXZpY2VMb2NrZWQoKSB7CisgICAgICAgIHJldHVybiBkZXZpY2VMb2NrZWQ7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRWZXJpZmllZEJvb3RTdGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIHZlcmlmaWVkQm9vdFN0YXRlOworICAgIH0KKworICAgIHB1YmxpYyBieXRlW10gZ2V0VmVyaWZpZWRCb290SGFzaCgpIHsgcmV0dXJuIHZlcmlmaWVkQm9vdEhhc2g7IH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nQnVpbGRlcigpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiVmVyaWZpZWQgYm9vdCBLZXk6ICIpCisgICAgICAgICAgICAgICAgLmFwcGVuZChCYXNlRW5jb2RpbmcuYmFzZTY0KCkuZW5jb2RlKHZlcmlmaWVkQm9vdEtleSkpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiXG5EZXZpY2UgbG9ja2VkOiAiKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoZGV2aWNlTG9ja2VkKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoIlxuVmVyaWZpZWQgYm9vdCBzdGF0ZTogIikKKyAgICAgICAgICAgICAgICAuYXBwZW5kKHZlcmlmaWVkQm9vdFN0YXRlVG9TdHJpbmcodmVyaWZpZWRCb290U3RhdGUpKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoIlxuVmVyaWZpZWQgYm9vdCBoYXNoOiAiKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoQmFzZUVuY29kaW5nLmJhc2U2NCgpLmVuY29kZSh2ZXJpZmllZEJvb3RIYXNoKSkKKyAgICAgICAgICAgICAgICAudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvamF2YS9jb20vZ29vZ2xlL2F0dGVzdGF0aW9uZXhhbXBsZS9VdGlscy5qYXZhIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2phdmEvY29tL2dvb2dsZS9hdHRlc3RhdGlvbmV4YW1wbGUvVXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTNkOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL2phdmEvY29tL2dvb2dsZS9hdHRlc3RhdGlvbmV4YW1wbGUvVXRpbHMuamF2YQpAQCAtMCwwICsxLDIyIEBACitwYWNrYWdlIGNvbS5nb29nbGUuYXR0ZXN0YXRpb25leGFtcGxlOworCitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKK3B1YmxpYyBjbGFzcyBVdGlscyB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFJTCA9ICJBdHRlc3RhdGlvbkZhaWwiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBSUxfSU5GTyA9ICJBdHRlc3RhdGlvbkZhaWxJbmZvIjsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IGV4cGVjdGVkLCBpbnQgYWN0dWFsKSB7CisgICAgICAgIExvZy5lKEZBSUwsIG1lc3NhZ2UpOworICAgICAgICBMb2cuZShGQUlMX0lORk8sICJFeHBlY3RlZDogIiArIGV4cGVjdGVkKTsKKyAgICAgICAgTG9nLmUoRkFJTF9JTkZPLCAiQWN0dWFsOiAiICsgYWN0dWFsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGJ5dGVbXSBleHBlY3RlZCwgYnl0ZVtdIGFjdHVhbCkgeworICAgICAgICBMb2cuZShGQUlMLCBtZXNzYWdlKTsKKyAgICAgICAgTG9nLmUoRkFJTF9JTkZPLCAiRXhwZWN0ZWQ6ICIgKyBBcnJheXMudG9TdHJpbmcoZXhwZWN0ZWQpKTsKKyAgICAgICAgTG9nLmUoRkFJTF9JTkZPLCAiQWN0dWFsOiAiICsgQXJyYXlzLnRvU3RyaW5nKGFjdHVhbCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9yZXMvbGF5b3V0L2FjdGl2aXR5X2F0dGVzdGF0aW9uLnhtbCBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9yZXMvbGF5b3V0L2FjdGl2aXR5X2F0dGVzdGF0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFmZmVkCi0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy9sYXlvdXQvYWN0aXZpdHlfYXR0ZXN0YXRpb24ueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8YW5kcm9pZC5zdXBwb3J0LmRlc2lnbi53aWRnZXQuQ29vcmRpbmF0b3JMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOmFwcD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy1hdXRvIgorICAgIHhtbG5zOnRvb2xzPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS90b29scyIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6Zml0c1N5c3RlbVdpbmRvd3M9InRydWUiCisgICAgdG9vbHM6Y29udGV4dD0iY29tLmdvb2dsZS5hdHRlc3RhdGlvbmV4YW1wbGUuQXR0ZXN0YXRpb25BY3Rpdml0eSI+CisKKyAgICA8YW5kcm9pZC5zdXBwb3J0LmRlc2lnbi53aWRnZXQuQXBwQmFyTGF5b3V0CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOnRoZW1lPSJAc3R5bGUvQXBwVGhlbWUuQXBwQmFyT3ZlcmxheSI+CisKKyAgICAgICAgPGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuVG9vbGJhcgorICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90b29sYmFyIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iP2F0dHIvYWN0aW9uQmFyU2l6ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iP2F0dHIvY29sb3JQcmltYXJ5IgorICAgICAgICAgICAgYXBwOnBvcHVwVGhlbWU9IkBzdHlsZS9BcHBUaGVtZS5Qb3B1cE92ZXJsYXkiIC8+CisKKyAgICA8L2FuZHJvaWQuc3VwcG9ydC5kZXNpZ24ud2lkZ2V0LkFwcEJhckxheW91dD4KKworICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9jb250ZW50X2F0dGVzdGF0aW9uIiAvPgorCisgICAgPGFuZHJvaWQuc3VwcG9ydC5kZXNpZ24ud2lkZ2V0LkZsb2F0aW5nQWN0aW9uQnV0dG9uCisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZmFiIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iYm90dG9tfGVuZCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSJAZGltZW4vZmFiX21hcmdpbiIKKyAgICAgICAgYXBwOnNyY0NvbXBhdD0iQGFuZHJvaWQ6ZHJhd2FibGUvYnRuX3N0YXJfYmlnX29uIiAvPgorCis8L2FuZHJvaWQuc3VwcG9ydC5kZXNpZ24ud2lkZ2V0LkNvb3JkaW5hdG9yTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy9sYXlvdXQvY29udGVudF9hdHRlc3RhdGlvbi54bWwgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL2xheW91dC9jb250ZW50X2F0dGVzdGF0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzU5ZWYyCi0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy9sYXlvdXQvY29udGVudF9hdHRlc3RhdGlvbi54bWwKQEAgLTAsMCArMSwyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxSZWxhdGl2ZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6YXBwPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzLWF1dG8iCisgICAgeG1sbnM6dG9vbHM9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Rvb2xzIgorICAgIGFuZHJvaWQ6aWQ9IkAraWQvY29udGVudF9hdHRlc3RhdGlvbiIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iQGRpbWVuL2FjdGl2aXR5X3ZlcnRpY2FsX21hcmdpbiIKKyAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSJAZGltZW4vYWN0aXZpdHlfaG9yaXpvbnRhbF9tYXJnaW4iCisgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IkBkaW1lbi9hY3Rpdml0eV9ob3Jpem9udGFsX21hcmdpbiIKKyAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IkBkaW1lbi9hY3Rpdml0eV92ZXJ0aWNhbF9tYXJnaW4iCisgICAgdG9vbHM6Y29udGV4dD0iY29tLmdvb2dsZS5hdHRlc3RhdGlvbmV4YW1wbGUuQXR0ZXN0YXRpb25BY3Rpdml0eSIKKyAgICB0b29sczpzaG93SW49IkBsYXlvdXQvYWN0aXZpdHlfYXR0ZXN0YXRpb24iPgorCisgICAgPFRleHRWaWV3CisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dHZpZXciCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOm1heExpbmVzPSIxMDAwMCIKKyAgICAgICAgYW5kcm9pZDpzY3JvbGxiYXJzPSJ2ZXJ0aWNhbCIKKyAgICAgICAgYW5kcm9pZDp0ZXh0PSIiCisgICAgICAgIGFuZHJvaWQ6c2Nyb2xsYmFyQWx3YXlzRHJhd1ZlcnRpY2FsVHJhY2s9ImZhbHNlIgorICAgICAgICBhbmRyb2lkOnNjcm9sbGJhckFsd2F5c0RyYXdIb3Jpem9udGFsVHJhY2s9ImZhbHNlIgorICAgICAgICBhbmRyb2lkOnNjcm9sbEhvcml6b250YWxseT0iZmFsc2UiIC8+Cis8L1JlbGF0aXZlTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy9tZW51L21lbnVfYXR0ZXN0YXRpb24ueG1sIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy9tZW51L21lbnVfYXR0ZXN0YXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMzQxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL21lbnUvbWVudV9hdHRlc3RhdGlvbi54bWwKQEAgLTAsMCArMSwxMCBAQAorPG1lbnUgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOmFwcD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy1hdXRvIgorICAgIHhtbG5zOnRvb2xzPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS90b29scyIKKyAgICB0b29sczpjb250ZXh0PSJjb20uZ29vZ2xlLmF0dGVzdGF0aW9uZXhhbXBsZS5BdHRlc3RhdGlvbkFjdGl2aXR5Ij4KKyAgICA8aXRlbQorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FjdGlvbl9zZXR0aW5ncyIKKyAgICAgICAgYW5kcm9pZDpvcmRlckluQ2F0ZWdvcnk9IjEwMCIKKyAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9hY3Rpb25fc2V0dGluZ3MiCisgICAgICAgIGFwcDpzaG93QXNBY3Rpb249Im5ldmVyIiAvPgorPC9tZW51PgpkaWZmIC0tZ2l0IGEvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy9taXBtYXAtaGRwaS9pY19sYXVuY2hlci5wbmcgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL21pcG1hcC1oZHBpL2ljX2xhdW5jaGVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGU2OWJjCi0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy9taXBtYXAtaGRwaS9pY19sYXVuY2hlci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy92YWx1ZXMtdjIxL3N0eWxlcy54bWwgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL3ZhbHVlcy12MjEvc3R5bGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmJkZDQwCi0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy92YWx1ZXMtdjIxL3N0eWxlcy54bWwKQEAgLTAsMCArMSw5IEBACis8cmVzb3VyY2VzPgorCisgICAgPHN0eWxlIG5hbWU9IkFwcFRoZW1lLk5vQWN0aW9uQmFyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93QWN0aW9uQmFyIj5mYWxzZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93Tm9UaXRsZSI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dEcmF3c1N5c3RlbUJhckJhY2tncm91bmRzIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnN0YXR1c0JhckNvbG9yIj5AYW5kcm9pZDpjb2xvci90cmFuc3BhcmVudDwvaXRlbT4KKyAgICA8L3N0eWxlPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL3ZhbHVlcy13ODIwZHAvZGltZW5zLnhtbCBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9yZXMvdmFsdWVzLXc4MjBkcC9kaW1lbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZmM4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL3ZhbHVlcy13ODIwZHAvZGltZW5zLnhtbApAQCAtMCwwICsxLDYgQEAKKzxyZXNvdXJjZXM+CisgICAgPCEtLSBFeGFtcGxlIGN1c3RvbWl6YXRpb24gb2YgZGltZW5zaW9ucyBvcmlnaW5hbGx5IGRlZmluZWQgaW4gcmVzL3ZhbHVlcy9kaW1lbnMueG1sCisgICAgICAgICAoc3VjaCBhcyBzY3JlZW4gbWFyZ2lucykgZm9yIHNjcmVlbnMgd2l0aCBtb3JlIHRoYW4gODIwZHAgb2YgYXZhaWxhYmxlIHdpZHRoLiBUaGlzCisgICAgICAgICB3b3VsZCBpbmNsdWRlIDciIGFuZCAxMCIgZGV2aWNlcyBpbiBsYW5kc2NhcGUgKH45NjBkcCBhbmQgfjEyODBkcCByZXNwZWN0aXZlbHkpLiAtLT4KKyAgICA8ZGltZW4gbmFtZT0iYWN0aXZpdHlfaG9yaXpvbnRhbF9tYXJnaW4iPjY0ZHA8L2RpbWVuPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL3ZhbHVlcy9jb2xvcnMueG1sIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy92YWx1ZXMvY29sb3JzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWIzZTljCi0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy92YWx1ZXMvY29sb3JzLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8cmVzb3VyY2VzPgorICAgIDxjb2xvciBuYW1lPSJjb2xvclByaW1hcnkiPiMzRjUxQjU8L2NvbG9yPgorICAgIDxjb2xvciBuYW1lPSJjb2xvclByaW1hcnlEYXJrIj4jMzAzRjlGPC9jb2xvcj4KKyAgICA8Y29sb3IgbmFtZT0iY29sb3JBY2NlbnQiPiNGRjQwODE8L2NvbG9yPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL3ZhbHVlcy9kaW1lbnMueG1sIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy92YWx1ZXMvZGltZW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTJjYjdiCi0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlX3Byb3Zpc2lvbmluZy9hdHRlc3RhdGlvbl90ZXN0aW5nL3Jlcy92YWx1ZXMvZGltZW5zLnhtbApAQCAtMCwwICsxLDYgQEAKKzxyZXNvdXJjZXM+CisgICAgPCEtLSBEZWZhdWx0IHNjcmVlbiBtYXJnaW5zLCBwZXIgdGhlIEFuZHJvaWQgRGVzaWduIGd1aWRlbGluZXMuIC0tPgorICAgIDxkaW1lbiBuYW1lPSJhY3Rpdml0eV9ob3Jpem9udGFsX21hcmdpbiI+MTZkcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9ImFjdGl2aXR5X3ZlcnRpY2FsX21hcmdpbiI+MTZkcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9ImZhYl9tYXJnaW4iPjE2ZHA8L2RpbWVuPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2Y2IyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDQgQEAKKzxyZXNvdXJjZXM+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSI+QXR0ZXN0YXRpb25FeGFtcGxlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fc2V0dGluZ3MiPlNldHRpbmdzPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3JlbW90ZV9wcm92aXNpb25pbmcvYXR0ZXN0YXRpb25fdGVzdGluZy9yZXMvdmFsdWVzL3N0eWxlcy54bWwgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWI5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGVfcHJvdmlzaW9uaW5nL2F0dGVzdGF0aW9uX3Rlc3RpbmcvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzxyZXNvdXJjZXM+CisKKyAgICA8IS0tIEJhc2UgYXBwbGljYXRpb24gdGhlbWUuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJBcHBUaGVtZSIgcGFyZW50PSJUaGVtZS5BcHBDb21wYXQuTGlnaHQuRGFya0FjdGlvbkJhciI+CisgICAgICAgIDwhLS0gQ3VzdG9taXplIHlvdXIgdGhlbWUgaGVyZS4gLS0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNvbG9yUHJpbWFyeSI+QGNvbG9yL2NvbG9yUHJpbWFyeTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iY29sb3JQcmltYXJ5RGFyayI+QGNvbG9yL2NvbG9yUHJpbWFyeURhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImNvbG9yQWNjZW50Ij5AY29sb3IvY29sb3JBY2NlbnQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJBcHBUaGVtZS5Ob0FjdGlvbkJhciI+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0FjdGlvbkJhciI+ZmFsc2U8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd05vVGl0bGUiPnRydWU8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJBcHBUaGVtZS5BcHBCYXJPdmVybGF5IiBwYXJlbnQ9IlRoZW1lT3ZlcmxheS5BcHBDb21wYXQuRGFyay5BY3Rpb25CYXIiIC8+CisKKyAgICA8c3R5bGUgbmFtZT0iQXBwVGhlbWUuUG9wdXBPdmVybGF5IiBwYXJlbnQ9IlRoZW1lT3ZlcmxheS5BcHBDb21wYXQuTGlnaHQiIC8+CisKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvc2FuaXRpemVyLXN0YXR1cy9BbmRyb2lkLmJwIGIvc2FuaXRpemVyLXN0YXR1cy9BbmRyb2lkLmJwCmluZGV4IDg2NTAxZGYuLjc0Zjg2M2MgMTAwNjQ0Ci0tLSBhL3Nhbml0aXplci1zdGF0dXMvQW5kcm9pZC5icAorKysgYi9zYW5pdGl6ZXItc3RhdHVzL0FuZHJvaWQuYnAKQEAgLTEsMzcgKzEsMzEgQEAKLWNjX2RlZmF1bHRzIHsKLSAgICBuYW1lOiAic2FuaXRpemVyLXN0YXR1c19kZWZhdWx0cyIsCitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsidG9vbHNfc2VjdXJpdHlfc2FuaXRpemVyLXN0YXR1c19saWNlbnNlIl0sCit9CiAKLSAgICBjX3N0ZDogImMxMSIsCisvLyBBZGRlZCBhdXRvbWF0aWNhbGx5IGJ5IGEgbGFyZ2Utc2NhbGUtY2hhbmdlCisvLyBodHRwOi8vZ28vYW5kcm9pZC1saWNlbnNlLWZhcQorbGljZW5zZSB7CisgICAgbmFtZTogInRvb2xzX3NlY3VyaXR5X3Nhbml0aXplci1zdGF0dXNfbGljZW5zZSIsCisgICAgdmlzaWJpbGl0eTogWyI6X19zdWJwYWNrYWdlc19fIl0sCisgICAgbGljZW5zZV9raW5kczogWworICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMCIsCisgICAgXSwKKyAgICBsaWNlbnNlX3RleHQ6IFsKKyAgICAgICAgIk5PVElDRSIsCisgICAgXSwKK30KKworY2NfYmluYXJ5IHsKKyAgICBuYW1lOiAic2FuaXRpemVyLXN0YXR1cyIsCisKKyAgICBzcmNzOiBbInNhbml0aXplci1zdGF0dXMuY3BwIl0sCiAgICAgY2ZsYWdzOiBbCiAgICAgICAgICItV2FsbCIsCiAgICAgICAgICItV2Vycm9yIiwKICAgICAgICAgIi1PMCIsCiAgICAgXSwKLX0KIAotc2FuaXRpemVyX3N0YXR1c19saWJyYXJ5X3NoYXJlZCB7Ci0gICAgbmFtZTogImxpYnNhbml0aXplci1zdGF0dXMiLAotICAgIGRlZmF1bHRzOiBbInNhbml0aXplci1zdGF0dXNfZGVmYXVsdHMiXSwKLQotICAgIHNyY3M6IFsic2FuaXRpemVyLXN0YXR1cy5jIl0sCi19Ci0KLWNjX2JpbmFyeSB7Ci0gICAgbmFtZTogInNhbml0aXplci1zdGF0dXMiLAotICAgIGRlZmF1bHRzOiBbInNhbml0aXplci1zdGF0dXNfZGVmYXVsdHMiXSwKLQotICAgIHNyY3M6IFsibWFpbi5jIl0sCi0gICAgc2hhcmVkX2xpYnM6IFsibGlic2FuaXRpemVyLXN0YXR1cyJdLAotfQotCi1ib290c3RyYXBfZ29fcGFja2FnZSB7Ci0gICAgbmFtZTogInNvb25nLXNhbml0aXplcl9zdGF0dXMiLAotICAgIHBrZ1BhdGg6ICJhbmRyb2lkL3Nvb25nL3NlY3VyaXR5L3NhbnRpemVyc19zdGF0dXMiLAotICAgIGRlcHM6IFsKLSAgICAgICAgImJsdWVwcmludCIsCi0gICAgICAgICJzb29uZy1hbmRyb2lkIiwKLSAgICAgICAgInNvb25nLWNjIiwKKyAgICBoZWFkZXJfbGliczogWworICAgICAgICAiYmlvbmljX2xpYmNfcGxhdGZvcm1faGVhZGVycyIsCiAgICAgXSwKLSAgICBzcmNzOiBbInNhbml0aXplci1zdGF0dXMuZ28iXSwKLSAgICBwbHVnaW5Gb3I6IFsic29vbmdfYnVpbGQiXSwKIH0KZGlmZiAtLWdpdCBhL3Nhbml0aXplci1zdGF0dXMvbWFpbi5jIGIvc2FuaXRpemVyLXN0YXR1cy9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxODZjY2QuLjAwMDAwMDAKLS0tIGEvc2FuaXRpemVyLXN0YXR1cy9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWludCBzYW5pdGl6ZXJfc3RhdHVzKGludCBhcmdjLCBjaGFyKiogYXJndik7Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewotICAgIHJldHVybiBzYW5pdGl6ZXJfc3RhdHVzKGFyZ2MsIGFyZ3YpOwotfQpkaWZmIC0tZ2l0IGEvc2FuaXRpemVyLXN0YXR1cy9zYW5pdGl6ZXItc3RhdHVzLmMgYi9zYW5pdGl6ZXItc3RhdHVzL3Nhbml0aXplci1zdGF0dXMuY3BwCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJlbmFtZSBmcm9tIHNhbml0aXplci1zdGF0dXMvc2FuaXRpemVyLXN0YXR1cy5jCnJlbmFtZSB0byBzYW5pdGl6ZXItc3RhdHVzL3Nhbml0aXplci1zdGF0dXMuY3BwCmluZGV4IDE0NzMwZjEuLjllMDdlNjEgMTAwNjQ0Ci0tLSBhL3Nhbml0aXplci1zdGF0dXMvc2FuaXRpemVyLXN0YXR1cy5jCisrKyBiL3Nhbml0aXplci1zdGF0dXMvc2FuaXRpemVyLXN0YXR1cy5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPHBhdGhzLmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPHB3ZC5oPgpAQCAtMjcsMTQgKzI4LDI1IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KIAotLy8gY3Jhc2hlcyBpZiBidWlsdCB3aXRoIC1mc2FuaXRpemU9YWRkcmVzcwotdm9pZCB0ZXN0X2NyYXNoX21hbGxvYygpIHsKLSAgdm9sYXRpbGUgY2hhciogaGVhcCA9IG1hbGxvYygzMik7CisjaW5jbHVkZSA8YmlvbmljL210ZS5oPgorCisvLyBjcmFzaGVzIGlmIGJ1aWx0IHdpdGggLWZzYW5pdGl6ZT17YWRkcmVzcyxod2FkZHJlc3N9Cit2b2lkIHRlc3RfY3Jhc2hfbWFsbG9jX292ZXJmbG93KCkgeworICB2b2xhdGlsZSBjaGFyKiBoZWFwID0gcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBjaGFyICo+KG1hbGxvYygzMikpOwogICBoZWFwWzMyXSA9IGhlYXBbMzJdOwotICBwcmludGYoIihIVylBU0FOOiBIZWFwIFRlc3QgRmFpbGVkXG4iKTsKKyAgcHJpbnRmKCJIZWFwIE92ZXJmbG93IFRlc3QgRmFpbGVkXG4iKTsKK30KKworLy8gY3Jhc2hlcyBpZiBidWlsdCB3aXRoIC1mc2FuaXRpemU9e2FkZHJlc3MsaHdhZGRyZXNzc30KK3ZvaWQgdGVzdF9jcmFzaF9tYWxsb2NfdWFmKCkgeworICB2b2xhdGlsZSBjaGFyKiBoZWFwID0gcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBjaGFyICo+KG1hbGxvYygzMikpOworICBmcmVlKCh2b2lkICopaGVhcCk7CisgIGhlYXBbMF0gPSBoZWFwWzBdOworICBwcmludGYoIkhlYXAgVUFGIFRlc3QgRmFpbGVkXG4iKTsKIH0KIAogLy8gY3Jhc2hlcyBpZiBidWlsdCB3aXRoIC1mc2FuaXRpemU9YWRkcmVzcwpAQCAtNDYsOCArNTgsOCBAQAogfQogCiB2b2lkIHRlc3RfY3Jhc2hfcHRocmVhZF9tdXRleF91bmxvY2soKSB7Ci0gIHZvbGF0aWxlIGNoYXIqIGhlYXAgPSBtYWxsb2MoMzIpOwotICBwdGhyZWFkX211dGV4X3VubG9jaygodm9pZCopJmhlYXBbMzJdKTsKKyAgdm9sYXRpbGUgY2hhciogaGVhcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgY2hhciAqPihtYWxsb2MoMzIpKTsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soKHB0aHJlYWRfbXV0ZXhfdCopJmhlYXBbMzJdKTsKICAgcHJpbnRmKCJIV0FTQU46IExpYmMgVGVzdCBGYWlsZWRcbiIpOwogfQogCkBAIC02NSw3ICs3Nyw3IEBACiB2b2lkIHRlc3RfbXNhbl9jcmFzaF9zdGFjaygpIHsKICAgdm9sYXRpbGUgaW50IHN0YWNrWzEwXTsKICAgc3RhY2tbNV0gPSAwOwotICBpZiAoc3RhY2tbMF0pIHsKKyAgaWYgKHN0YWNrWzBdKSB7IC8vIE5PTElOVAogICAgIHN0YWNrWzBdID0gMTsKICAgfQogICBwcmludGYoIk1TQU46IFN0YWNrIFRlc3QgRmFpbGVkXG4iKTsKQEAgLTExMCw3ICsxMjIsNyBAQAogLy8gY3Jhc2hlcyB3aXRoIEdXUC1BU2FuCiB2b2lkIHRlc3RfY3Jhc2hfZ3dwX2FzYW4oKSB7CiAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHV1BfQVNBTl9JVEVSQVRJT05TX1RPX0VOU1VSRV9DUkFTSDsgKytpICkgewotICAgIHZvbGF0aWxlIGNoYXIgKnggPSBtYWxsb2MoMSk7CisgICAgdm9sYXRpbGUgY2hhciogeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgY2hhciAqPihtYWxsb2MoMSkpOwogICAgIGZyZWUoKHZvaWQqKSB4KTsKICAgICAqeCA9IDA7CiAgIH0KQEAgLTE1Nyw3ICsxNjksNyBAQAogICByZXR1cm4gMDsKIH0KIAotaW50IHNhbml0aXplcl9zdGF0dXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KSB7CitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpIHsKICAgaW50IHRlc3RfZXZlcnl0aGluZyA9IDA7CiAgIGludCBmYWlsdXJlcyA9IDA7CiAKQEAgLTE2NywxMiArMTc5LDEzIEBACiAgIGlmICh0ZXN0X2V2ZXJ5dGhpbmcgfHwgaGF2ZV9vcHRpb24oImFzYW4iLCBhcmd2LCBhcmdjKSkgewogICAgIGludCBhc2FuX2ZhaWx1cmVzID0gMDsKIAotI2lmICFkZWZpbmVkKEFORFJPSURfU0FOSVRJWkVfQUREUkVTUykKKyNpZiAhX19oYXNfZmVhdHVyZShhZGRyZXNzX3Nhbml0aXplcikKICAgICBhc2FuX2ZhaWx1cmVzICs9IDE7CiAgICAgcHJpbnRmKCJBU0FOOiBDb21waWxlciBmbGFncyBmYWlsZWQhXG4iKTsKICNlbmRpZgogCi0gICAgYXNhbl9mYWlsdXJlcyArPSB0ZXN0KHRlc3RfY3Jhc2hfbWFsbG9jKTsKKyAgICBhc2FuX2ZhaWx1cmVzICs9IHRlc3QodGVzdF9jcmFzaF9tYWxsb2Nfb3ZlcmZsb3cpOworICAgIGFzYW5fZmFpbHVyZXMgKz0gdGVzdCh0ZXN0X2NyYXNoX21hbGxvY191YWYpOwogICAgIGFzYW5fZmFpbHVyZXMgKz0gdGVzdCh0ZXN0X2NyYXNoX3N0YWNrKTsKICAgICBhc2FuX2ZhaWx1cmVzICs9IGRhdGFfYXNhbl9leGlzdHMoKTsKIApAQCAtMTg1LDEyICsxOTgsMTMgQEAKICAgaWYgKHRlc3RfZXZlcnl0aGluZyB8fCBoYXZlX29wdGlvbigiaHdhc2FuIiwgYXJndiwgYXJnYykpIHsKICAgICBpbnQgaHdhc2FuX2ZhaWx1cmVzID0gMDsKIAotI2lmICFkZWZpbmVkKEFORFJPSURfU0FOSVRJWkVfSFdBRERSRVNTKQorI2lmICFfX2hhc19mZWF0dXJlKGh3YWRkcmVzc19zYW5pdGl6ZXIpCiAgICAgaHdhc2FuX2ZhaWx1cmVzICs9IDE7CiAgICAgcHJpbnRmKCJIV0FTQU46IENvbXBpbGVyIGZsYWdzIGZhaWxlZCFcbiIpOwogI2VuZGlmCiAKLSAgICBod2FzYW5fZmFpbHVyZXMgKz0gdGVzdCh0ZXN0X2NyYXNoX21hbGxvYyk7CisgICAgaHdhc2FuX2ZhaWx1cmVzICs9IHRlc3QodGVzdF9jcmFzaF9tYWxsb2Nfb3ZlcmZsb3cpOworICAgIGh3YXNhbl9mYWlsdXJlcyArPSB0ZXN0KHRlc3RfY3Jhc2hfbWFsbG9jX3VhZik7CiAgICAgaHdhc2FuX2ZhaWx1cmVzICs9IHRlc3QodGVzdF9jcmFzaF9zdGFjayk7CiAgICAgaHdhc2FuX2ZhaWx1cmVzICs9IHRlc3QodGVzdF9jcmFzaF9wdGhyZWFkX211dGV4X3VubG9jayk7CiAKQEAgLTIwMCwyMCArMjE0LDYgQEAKICAgICBmYWlsdXJlcyArPSBod2FzYW5fZmFpbHVyZXM7CiAgIH0KIAotICBpZih0ZXN0X2V2ZXJ5dGhpbmcgfHwgaGF2ZV9vcHRpb24oImNvdiIsIGFyZ3YsIGFyZ2MpKSB7Ci0gICAgaW50IGNvdl9mYWlsdXJlcyA9IDA7Ci0KLSNpZm5kZWYgQU5EUk9JRF9TQU5JVElaRV9DT1ZFUkFHRQotICAgIHByaW50ZigiQ09WOiBDb21waWxlciBmbGFncyBmYWlsZWQhXG4iKTsKLSAgICBjb3ZfZmFpbHVyZXMgKz0gMTsKLSNlbmRpZgotCi0gICAgaWYgKCFjb3ZfZmFpbHVyZXMpCi0gICAgICBwcmludGYoIkNPVjogT0tcbiIpOwotCi0gICAgZmFpbHVyZXMgKz0gY292X2ZhaWx1cmVzOwotICB9Ci0KICAgaWYgKHRlc3RfZXZlcnl0aGluZyB8fCBoYXZlX29wdGlvbigibXNhbiIsIGFyZ3YsIGFyZ2MpKSB7CiAgICAgaW50IG1zYW5fZmFpbHVyZXMgPSAwOwogCkBAIC0yNjksNSArMjY5LDM4IEBACiAgICAgZmFpbHVyZXMgKz0gZ3dwX2FzYW5fZmFpbHVyZXM7CiAgIH0KIAorICBpZiAodGVzdF9ldmVyeXRoaW5nIHx8IGhhdmVfb3B0aW9uKCJtdGUiLCBhcmd2LCBhcmdjKSkgeworICAgIGludCBtdGVfZmFpbHVyZXMgPSAwOworCisgICAgaWYgKCEobXRlX3N1cHBvcnRlZCgpICYmICFfX2hhc19mZWF0dXJlKGFkZHJlc3Nfc2FuaXRpemVyKSAmJgorICAgICAgICAgICFfX2hhc19mZWF0dXJlKGh3YWRkcmVzc19zYW5pdGl6ZXIpKSkgeworICAgICAgbXRlX2ZhaWx1cmVzICs9IDE7CisgICAgICBwcmludGYoIk1URTogTm90IHN1cHBvcnRlZFxuIik7CisgICAgfQorCisgICAgbXRlX2ZhaWx1cmVzICs9IHRlc3QodGVzdF9jcmFzaF9tYWxsb2Nfb3ZlcmZsb3cpOworICAgIG10ZV9mYWlsdXJlcyArPSB0ZXN0KHRlc3RfY3Jhc2hfbWFsbG9jX3VhZik7CisKKyAgICBpbnQgdGFnZ2VkX2FkZHJfY3RybCA9IHByY3RsKFBSX0dFVF9UQUdHRURfQUREUl9DVFJMLCAwLCAwLCAwLCAwKTsKKyAgICBpZiAodGFnZ2VkX2FkZHJfY3RybCA8IDApIHsKKyAgICAgIG10ZV9mYWlsdXJlcyArPSAxOworICAgICAgcHJpbnRmKCJNVEU6IFBSX0dFVF9UQUdHRURfQUREUl9DVFJMIGZhaWxlZFxuIik7CisgICAgfQorCisgICAgSGVhcFRhZ2dpbmdMZXZlbCBoZWFwX3RhZ2dpbmdfbGV2ZWwgPSBNX0hFQVBfVEFHR0lOR19MRVZFTF9TWU5DOworICAgIGlmIChtYWxsb3B0KE1fQklPTklDX1NFVF9IRUFQX1RBR0dJTkdfTEVWRUwsIGhlYXBfdGFnZ2luZ19sZXZlbCkgPT0gMCkgeworICAgICAgbXRlX2ZhaWx1cmVzICs9IDE7CisgICAgICBwcmludGYoIk1URTogbWFsbG9wdCBmYWlsZWRcbiIpOworICAgIH0KKworICAgIG10ZV9mYWlsdXJlcyArPSB0ZXN0KHRlc3RfY3Jhc2hfbWFsbG9jX292ZXJmbG93KTsKKyAgICBtdGVfZmFpbHVyZXMgKz0gdGVzdCh0ZXN0X2NyYXNoX21hbGxvY191YWYpOworCisgICAgaWYgKCFtdGVfZmFpbHVyZXMpCisgICAgICBwcmludGYoIk1URTogT0tcbiIpOworCisgICAgZmFpbHVyZXMgKz0gbXRlX2ZhaWx1cmVzOworICB9CisKICAgcmV0dXJuIGZhaWx1cmVzID4gMCA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL3Nhbml0aXplci1zdGF0dXMvc2FuaXRpemVyLXN0YXR1cy5nbyBiL3Nhbml0aXplci1zdGF0dXMvc2FuaXRpemVyLXN0YXR1cy5nbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3NWU5Zi4uMDAwMDAwMAotLS0gYS9zYW5pdGl6ZXItc3RhdHVzL3Nhbml0aXplci1zdGF0dXMuZ28KKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1wYWNrYWdlIHNhbml0aXplcl9zdGF0dXMKLQotaW1wb3J0ICgKLQkiYW5kcm9pZC9zb29uZy9hbmRyb2lkIgotCSJhbmRyb2lkL3Nvb25nL2NjIgotKQotCi1mdW5jIGluaXQoKSB7Ci0JYW5kcm9pZC5SZWdpc3Rlck1vZHVsZVR5cGUoInNhbml0aXplcl9zdGF0dXNfbGlicmFyeV9zaGFyZWQiLAotCQlsaWJyYXJ5RmFjdG9yeSkKLX0KLQotZnVuYyBsaWJyYXJ5RmFjdG9yeSgpIGFuZHJvaWQuTW9kdWxlIHsKLQltb2R1bGUgOj0gY2MuTGlicmFyeVNoYXJlZEZhY3RvcnkoKQotCWFuZHJvaWQuQWRkTG9hZEhvb2sobW9kdWxlLCBsb2FkSG9vaykKLQlyZXR1cm4gbW9kdWxlCi19Ci0KLWZ1bmMgbG9hZEhvb2soY3R4IGFuZHJvaWQuTG9hZEhvb2tDb250ZXh0KSB7Ci0JdHlwZSBwcm9wcyBzdHJ1Y3QgewotCQlDZmxhZ3MgW11zdHJpbmcKLQl9Ci0KLQlwIDo9ICZwcm9wc3t9Ci0KLQlzYW5pdGl6ZXJzIDo9IGN0eC5Db25maWcoKS5TYW5pdGl6ZURldmljZSgpCi0KLQlpZiBhbmRyb2lkLkluTGlzdCgiYWRkcmVzcyIsIHNhbml0aXplcnMpIHsKLQkJcC5DZmxhZ3MgPSBhcHBlbmQocC5DZmxhZ3MsICItREFORFJPSURfU0FOSVRJWkVfQUREUkVTUz0xIikKLQl9Ci0JaWYgYW5kcm9pZC5Jbkxpc3QoImh3YWRkcmVzcyIsIHNhbml0aXplcnMpIHsKLQkJcC5DZmxhZ3MgPSBhcHBlbmQocC5DZmxhZ3MsICItREFORFJPSURfU0FOSVRJWkVfSFdBRERSRVNTPTEiKQotCX0KLQlpZiBhbmRyb2lkLkluTGlzdCgiY292ZXJhZ2UiLCBzYW5pdGl6ZXJzKSB7Ci0JCXAuQ2ZsYWdzID0gYXBwZW5kKHAuQ2ZsYWdzLCAiLURBTkRST0lEX1NBTklUSVpFX0NPVkVSQUdFPTEiKQotCX0KLQotCWN0eC5BcHBlbmRQcm9wZXJ0aWVzKHApCi19Cg==