ZGlmZiAtLWdpdCBhL3N3L2RldmljZS9zaWxpY29uX2NyZWF0b3Ivcm9tX2V4dHMvbWFuaWZlc3QucnMudHBsIGIvc3cvZGV2aWNlL3NpbGljb25fY3JlYXRvci9yb21fZXh0cy9tYW5pZmVzdC5ycy50cGwKaW5kZXggNmI3MWY4ZS4uMzRiZDI4NCAxMDA2NDQKLS0tIGEvc3cvZGV2aWNlL3NpbGljb25fY3JlYXRvci9yb21fZXh0cy9tYW5pZmVzdC5ycy50cGwKKysrIGIvc3cvZGV2aWNlL3NpbGljb25fY3JlYXRvci9yb21fZXh0cy9tYW5pZmVzdC5ycy50cGwKQEAgLTEwLDIwICsxMCwyMSBAQAogLy8gICAgIC0tb3V0cHV0LWRpcj08ZGVzdGluYXRpb24gZGlyPgogLy8gICAgIC0tb3V0cHV0LWZpbGVzPXJ1c3QKIAorcHViIHN0cnVjdCBNYW5pZmVzdEZpZWxkIHsKKyAgICBwdWIgb2Zmc2V0OiB1c2l6ZSwKKyAgICBwdWIgc2l6ZV9ieXRlczogdXNpemUsCit9CisKICUgZm9yIG5hbWUsIHJlZ2lvbiBpbiByZWdpb25zOgotLy8vIE1hbmlmZXN0IGZpZWxkICR7bmFtZX0gb2Zmc2V0IGZyb20gdGhlIGJhc2UuCi1wdWIgY29uc3QgJHtyZWdpb24ub2Zmc2V0X25hbWUoKS5hc19jX2RlZmluZSgpfTp1MzIgPSAke3JlZ2lvbi5iYXNlX2FkZHJ9OwotCi0vLy8gTWFuaWZlc3QgZmllbGQgJHtuYW1lfSBzaXplIGluIGJ5dGVzLgotcHViIGNvbnN0ICR7cmVnaW9uLnNpemVfYnl0ZXNfbmFtZSgpLmFzX2NfZGVmaW5lKCl9OnUzMiA9ICR7cmVnaW9uLnNpemVfYnl0ZXN9OwotCi0vLy8gTWFuaWZlc3QgZmllbGQgJHtuYW1lfSBzaXplIGluIHdvcmRzLgotcHViIGNvbnN0ICR7cmVnaW9uLnNpemVfd29yZHNfbmFtZSgpLmFzX2NfZGVmaW5lKCl9OnUzMiA9ICR7cmVnaW9uLnNpemVfd29yZHN9OworcHViIGNvbnN0ICR7cmVnaW9uLm5hbWUuYXNfY19kZWZpbmUoKX06IE1hbmlmZXN0RmllbGQgPSBNYW5pZmVzdEZpZWxkIHsKKyAgICBvZmZzZXQ6ICR7cmVnaW9uLmJhc2VfYWRkcn0sCisgICAgc2l6ZV9ieXRlczogJHtyZWdpb24uc2l6ZV9ieXRlc30sCit9OwogCiAlIGVuZGZvcgogCiAlIGZvciBuYW1lLCBvZmZzZXQgaW4gb2Zmc2V0czoKIC8vLyBNYW5pZmVzdCBvZmZzZXQgJHtuYW1lfSBmcm9tIHRoZSBiYXNlLgotcHViIGNvbnN0ICR7b2Zmc2V0Lm9mZnNldF9uYW1lKCkuYXNfY19kZWZpbmUoKX06dTMyID0gJHtvZmZzZXQub2Zmc2V0fTsKK3B1YiBjb25zdCAke29mZnNldC5vZmZzZXRfbmFtZSgpLmFzX2NfZGVmaW5lKCl9OnVzaXplID0gJHtvZmZzZXQub2Zmc2V0fTsKIAogJWVuZGZvcgpkaWZmIC0tZ2l0IGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9DYXJnby5sb2NrIGIvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9DYXJnby5sb2NrCmluZGV4IDQ4M2MwYjEuLjc3NWY1OTQgMTAwNjQ0Ci0tLSBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvQ2FyZ28ubG9jaworKysgYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL0NhcmdvLmxvY2sKQEAgLTEsMTkgKzEsMTAgQEAKICMgVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgQGdlbmVyYXRlZCBieSBDYXJnby4KICMgSXQgaXMgbm90IGludGVuZGVkIGZvciBtYW51YWwgZWRpdGluZy4KIFtbcGFja2FnZV1dCi1uYW1lID0gImFoby1jb3Jhc2ljayIKLXZlcnNpb24gPSAiMC43LjE1IgorbmFtZSA9ICJhbnlob3ciCit2ZXJzaW9uID0gIjEuMC40MCIKIHNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKLWNoZWNrc3VtID0gIjc0MDRmZWJmZmFhNDdkYWM4MWFhNDRkYmE3MTUyM2M5ZDA2OWIxYmRjNTBhNzdkYjQxMTk1MTQ5ZTE3ZjY4ZTUiCi1kZXBlbmRlbmNpZXMgPSBbCi0gIm1lbWNociIsCi1dCi0KLVtbcGFja2FnZV1dCi1uYW1lID0gImF1dG9jZmciCi12ZXJzaW9uID0gIjEuMC4xIgotc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgotY2hlY2tzdW0gPSAiY2RiMDMxZGQ3OGUyODczMWQ4N2Q1NmNjOGZmZWY0YThmMzZjYTI2YzM4ZmUyZGU3MDA1NDNlNjI3ZjhhNDY0YSIKK2NoZWNrc3VtID0gIjI4YjJjZDkyZGI1Y2JkNzRlOGU1MDI4ZjdlMjdkZDdhYTMwOTBlODllNGYyYTE5N2NjN2M4ZGZiNjljNzA2M2IiCiAKIFtbcGFja2FnZV1dCiBuYW1lID0gImNmZy1pZiIKQEAgLTMzLDI4ICsyNCw2IEBACiBdCiAKIFtbcGFja2FnZV1dCi1uYW1lID0gImxhenlfc3RhdGljIgotdmVyc2lvbiA9ICIwLjIuMTEiCi1zb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCi1jaGVja3N1bSA9ICI3NmYwMzNjN2FkNjE0NDVjNWIzNDdjNzM4MmRkMTIzNzg0N2ViMWJjZTU5MGZlNTAzNjVkY2IzM2Q1NDZiZTczIgotCi1bW3BhY2thZ2VdXQotbmFtZSA9ICJsYXp5X3N0YXRpYyIKLXZlcnNpb24gPSAiMS40LjAiCi1zb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCi1jaGVja3N1bSA9ICJlMmFiYWQyM2ZiYzQyYjM3MDBmMmYyNzk4NDRkYzgzMmFkYjJiMmViMDY5YjJkZjkxOGY0NTVjNGUxOGNjNjQ2IgotCi1bW3BhY2thZ2VdXQotbmFtZSA9ICJsaW5rZWQtaGFzaC1tYXAiCi12ZXJzaW9uID0gIjAuMy4wIgotc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgotY2hlY2tzdW0gPSAiNmQyNjIwNDVjNWI4N2MwODYxYjNmMDA0NjEwYWZkMGUyYzg1MWUyOTA4ZDA4YjZjODcwY2JiOWQ1ZjQ5NGVjZCIKLWRlcGVuZGVuY2llcyA9IFsKLSAic2VyZGUiLAotICJzZXJkZV90ZXN0IiwKLV0KLQotW1twYWNrYWdlXV0KIG5hbWUgPSAibG9nIgogdmVyc2lvbiA9ICIwLjQuMTEiCiBzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCkBAIC02NCwxMiArMzMsNiBAQAogXQogCiBbW3BhY2thZ2VdXQotbmFtZSA9ICJtZW1jaHIiCi12ZXJzaW9uID0gIjIuMy40Igotc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgotY2hlY2tzdW0gPSAiMGVlMWM0N2FhYTI1NmVjYWJjYWVhMzUxZWFlNGE5YjAxZWYzOWVkODEwMDA0ZTI5OGQyNTExZWQyODRiMTUyNSIKLQotW1twYWNrYWdlXV0KIG5hbWUgPSAibXVuZGFuZSIKIHZlcnNpb24gPSAiMC40LjQiCiBzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCkBAIC03OSwyNCArNDIsNiBAQAogXQogCiBbW3BhY2thZ2VdXQotbmFtZSA9ICJudW0tdHJhaXRzIgotdmVyc2lvbiA9ICIwLjEuNDMiCi1zb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCi1jaGVja3N1bSA9ICI5MmU1MTEzZTlmZDRjYzE0ZGVkOGU0OTk0MjlmMzk2YTIwZjk4Yzc3MmE0N2NjODYyMmE3MzZlMWVjODQzYzMxIgotZGVwZW5kZW5jaWVzID0gWwotICJudW0tdHJhaXRzIDAuMi4xNCIsCi1dCi0KLVtbcGFja2FnZV1dCi1uYW1lID0gIm51bS10cmFpdHMiCi12ZXJzaW9uID0gIjAuMi4xNCIKLXNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKLWNoZWNrc3VtID0gIjlhNjRiMWVjNWNkYTI1ODZlMjg0NzIyNDg2ZDgwMmFjZjFmN2RiZGM2MjNlMmJmYzU3ZTY1Y2ExY2QwOTkyOTAiCi1kZXBlbmRlbmNpZXMgPSBbCi0gImF1dG9jZmciLAotXQotCi1bW3BhY2thZ2VdXQogbmFtZSA9ICJwbGFpbiIKIHZlcnNpb24gPSAiMC4yLjMiCiBzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCkBAIC0xMTIsMTAgKzU3LDEzIEBACiBdCiAKIFtbcGFja2FnZV1dCi1uYW1lID0gInF1b3RlIgotdmVyc2lvbiA9ICIwLjMuMTUiCituYW1lID0gInByb2MtbWFjcm8yIgordmVyc2lvbiA9ICIxLjAuMjYiCiBzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCi1jaGVja3N1bSA9ICI3YTZlOTIwYjY1YzY1ZjEwYjJhZTY1YzgzMWE4MWEwNzNhODllZGQyOGM3Y2NlODk0NzViZmY0NjdhYjQxNjdhIgorY2hlY2tzdW0gPSAiYTE1MjAxMzIxNWRjYTI3MzU3N2UxOGQyYmYwMGZhODYyYjg5YjI0MTY5ZmI3OGM0Yzk1YWViMDc5OTJjOWNlYyIKK2RlcGVuZGVuY2llcyA9IFsKKyAidW5pY29kZS14aWQgMC4yLjIiLAorXQogCiBbW3BhY2thZ2VdXQogbmFtZSA9ICJxdW90ZSIKQEAgLTEyMyw0OSArNzEsMzEgQEAKIHNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKIGNoZWNrc3VtID0gIjZjZTIzYjZiODcwZThmOTRmODFmYjBhMzYzZDY1ZDg2Njc1ODg0YjM0YTA5MDQzYzgxZTU1NjJmMTFjMWY4ZTEiCiBkZXBlbmRlbmNpZXMgPSBbCi0gInByb2MtbWFjcm8yIiwKKyAicHJvYy1tYWNybzIgMC40LjMwIiwKIF0KIAogW1twYWNrYWdlXV0KLW5hbWUgPSAicmVnZXgiCi12ZXJzaW9uID0gIjEuNC4yIgorbmFtZSA9ICJxdW90ZSIKK3ZlcnNpb24gPSAiMS4wLjkiCiBzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCi1jaGVja3N1bSA9ICIzOGNmMmMxM2VkNDc0NWRlOTFhNWViODM0ZTExYzAwYmNjMzcwOWU3NzMxNzNiMmNlNGM1NmM5ZmJkZTA0YjljIgorY2hlY2tzdW0gPSAiYzNkMGI5NzQ1ZGMyZGViZjUwN2M4NDIyZGUwNWQ3MjI2Y2MxZjA2NDQyMTZkZmRmZWFkOTg4ZjliMWFiMzJhNyIKIGRlcGVuZGVuY2llcyA9IFsKLSAiYWhvLWNvcmFzaWNrIiwKLSAibWVtY2hyIiwKLSAicmVnZXgtc3ludGF4IiwKLSAidGhyZWFkX2xvY2FsIiwKLV0KLQotW1twYWNrYWdlXV0KLW5hbWUgPSAicmVnZXgtc3ludGF4IgotdmVyc2lvbiA9ICIwLjYuMjEiCi1zb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCi1jaGVja3N1bSA9ICIzYjE4MWJhMmRjZjA3YWFjY2FkNTQ0OGU4ZWFkNThkYjViNzQyY2Y4NWRmZTAzNWUyMjI3ZjEzN2E1MzlhMTg5IgotCi1bW3BhY2thZ2VdXQotbmFtZSA9ICJyb21fZXh0X2NvbmZpZyIKLXZlcnNpb24gPSAiMC4xLjAiCi1kZXBlbmRlbmNpZXMgPSBbCi0gInNlcmRlIiwKLSAic2VyZGUtaGpzb24iLAotICJzZXJkZV9kZXJpdmUiLAorICJwcm9jLW1hY3JvMiAxLjAuMjYiLAogXQogCiBbW3BhY2thZ2VdXQogbmFtZSA9ICJyb21fZXh0X2ltYWdlIgogdmVyc2lvbiA9ICIwLjEuMCIKIGRlcGVuZGVuY2llcyA9IFsKLSAicm9tX2V4dF9jb25maWciLAorICJ0aGlzZXJyb3IiLAogXQogCiBbW3BhY2thZ2VdXQogbmFtZSA9ICJyb21fZXh0X3NpZ25lciIKIHZlcnNpb24gPSAiMC4xLjAiCiBkZXBlbmRlbmNpZXMgPSBbCisgImFueWhvdyIsCiAgIm11bmRhbmUiLAotICJyb21fZXh0X2NvbmZpZyIsCiAgInJvbV9leHRfaW1hZ2UiLAogXQogCkBAIC0xOTQsNyArMTI0LDcgQEAKIHNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKIGNoZWNrc3VtID0gIjhmMWFhOTZjNDVlN2Y1YTkxY2I3ZmFiZTdiMjc5ZjAyZmVhNzEyNjIzOWZjNDBiNzMyMzE2ZThiNmEyZDBmY2IiCiBkZXBlbmRlbmNpZXMgPSBbCi0gInByb2MtbWFjcm8yIiwKKyAicHJvYy1tYWNybzIgMC40LjMwIiwKICAicXVvdGUgMC42LjEzIiwKICAic3luIDAuMTUuNDQiLAogXQpAQCAtMjE1LDEwMCArMTQ1LDU1IEBACiBjaGVja3N1bSA9ICIzODhhMWRmMjUzZWNhMDg1NTBiZWY2YzcyMzkyY2ZlN2MzMDkxNGJmNDFkZjUyNjliNjhjYmQ2ZmY4ZjU3MGEzIgogCiBbW3BhY2thZ2VdXQotbmFtZSA9ICJzZXJkZSIKLXZlcnNpb24gPSAiMC44LjIzIgotc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgotY2hlY2tzdW0gPSAiOWRhZDNmNzU5OTE5YjkyYzMwNjhjNjk2YzE1YzNkMTcyMzgyMzQ0OThiYmRjYzgwZjJjNDY5NjA2Zjk0OGFjOCIKLQotW1twYWNrYWdlXV0KLW5hbWUgPSAic2VyZGUtaGpzb24iCi12ZXJzaW9uID0gIjAuOC4yIgotc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgotY2hlY2tzdW0gPSAiMGI4MzNjNWFkNjdkNTJjZWQ1ZjU5MzhiMjk4MGYzMmE5YzFjNWVmMDQ3ZjBiNGZiMzEyN2U3YTQyM2M3NjE1MyIKLWRlcGVuZGVuY2llcyA9IFsKLSAibGF6eV9zdGF0aWMgMC4yLjExIiwKLSAibGlua2VkLWhhc2gtbWFwIiwKLSAibnVtLXRyYWl0cyAwLjEuNDMiLAotICJyZWdleCIsCi0gInNlcmRlIiwKLV0KLQotW1twYWNrYWdlXV0KLW5hbWUgPSAic2VyZGVfY29kZWdlbiIKLXZlcnNpb24gPSAiMC44LjIzIgotc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgotY2hlY2tzdW0gPSAiYTRjNWQ4YTMzMDg3ZDg5ODRmOTUzNWRhYTYyYTY0OThhMDhmNjQ3NjA1MGIwMGFiOTMzOWRkODQ3ZTRjMjVjYyIKLWRlcGVuZGVuY2llcyA9IFsKLSAicXVvdGUgMC4zLjE1IiwKLSAic2VyZGVfY29kZWdlbl9pbnRlcm5hbHMiLAotICJzeW4gMC4xMC44IiwKLV0KLQotW1twYWNrYWdlXV0KLW5hbWUgPSAic2VyZGVfY29kZWdlbl9pbnRlcm5hbHMiCi12ZXJzaW9uID0gIjAuMTEuMyIKLXNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKLWNoZWNrc3VtID0gImFmYWQ3OTI0YTAwOWY4NTlmMzgwZTRhMmUzYTUwOWE4NDVjMmFjNjY0MzVmY2VhZDc0YTRkOTgzYjIxYWU4MDYiCi1kZXBlbmRlbmNpZXMgPSBbCi0gInN5biAwLjEwLjgiLAotXQotCi1bW3BhY2thZ2VdXQotbmFtZSA9ICJzZXJkZV9kZXJpdmUiCi12ZXJzaW9uID0gIjAuOC4yMyIKLXNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKLWNoZWNrc3VtID0gImNlNDRlNWY0MjY0YjM5ZTlkMjljODc1MzU3YjdjYzNlYmRmYjk2N2JiOWUyMmJmYjVlNDRmZmE0MDBhZjUzMDYiCi1kZXBlbmRlbmNpZXMgPSBbCi0gInNlcmRlX2NvZGVnZW4iLAotXQotCi1bW3BhY2thZ2VdXQotbmFtZSA9ICJzZXJkZV90ZXN0IgotdmVyc2lvbiA9ICIwLjguMjMiCi1zb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCi1jaGVja3N1bSA9ICIxMTBiM2RiZGY4NjA3ZWM0OTNjMjJkNWQ5NDc3NTMyODJmM2JhZTczYzBmNTZkMzIyYWYxZThjNzhlNGMyM2Q1IgotZGVwZW5kZW5jaWVzID0gWwotICJzZXJkZSIsCi1dCi0KLVtbcGFja2FnZV1dCi1uYW1lID0gInN5biIKLXZlcnNpb24gPSAiMC4xMC44Igotc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgotY2hlY2tzdW0gPSAiNThmZDA5ZGY1OTU2NWRiMzM5OWVmYmJhMzRiYThhMmZlYzEzMDc1MTFlYmQyNDVkMDA2MWZmOWQ0MjY5MTY3MyIKLWRlcGVuZGVuY2llcyA9IFsKLSAicXVvdGUgMC4zLjE1IiwKLSAidW5pY29kZS14aWQgMC4wLjQiLAotXQotCi1bW3BhY2thZ2VdXQogbmFtZSA9ICJzeW4iCiB2ZXJzaW9uID0gIjAuMTUuNDQiCiBzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCiBjaGVja3N1bSA9ICI5Y2E0YjNiNjlhNzdjYmUxZmZjOWUxOTg3ODFiN2FjYjBjNzM2NWE4ODM2NzBlOGYxYzFiYzY2ZmJhNzlhNWM1IgogZGVwZW5kZW5jaWVzID0gWwotICJwcm9jLW1hY3JvMiIsCisgInByb2MtbWFjcm8yIDAuNC4zMCIsCiAgInF1b3RlIDAuNi4xMyIsCiAgInVuaWNvZGUteGlkIDAuMS4wIiwKIF0KIAogW1twYWNrYWdlXV0KLW5hbWUgPSAidGhyZWFkX2xvY2FsIgotdmVyc2lvbiA9ICIxLjAuMSIKK25hbWUgPSAic3luIgordmVyc2lvbiA9ICIxLjAuNzIiCiBzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCi1jaGVja3N1bSA9ICJkNDBjNmQxYjY5NzQ1YTZlYzZmYjFjYTcxNzkxNDg0OGRhNGI0NGFlMjlkOWIzMDgwY2JlZTkxZDcyYTY5YjE0IgorY2hlY2tzdW0gPSAiYTFlOGNkYmVmYjc5YTlhNWE2NWUwZGI4YjQ3YjcyM2VlOTA3YjdjN2Y4NDk2Yzc2YTE3NzBiNWMzMTBiYWI4MiIKIGRlcGVuZGVuY2llcyA9IFsKLSAibGF6eV9zdGF0aWMgMS40LjAiLAorICJwcm9jLW1hY3JvMiAxLjAuMjYiLAorICJxdW90ZSAxLjAuOSIsCisgInVuaWNvZGUteGlkIDAuMi4yIiwKIF0KIAogW1twYWNrYWdlXV0KLW5hbWUgPSAidW5pY29kZS14aWQiCi12ZXJzaW9uID0gIjAuMC40IgorbmFtZSA9ICJ0aGlzZXJyb3IiCit2ZXJzaW9uID0gIjEuMC4yNCIKIHNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKLWNoZWNrc3VtID0gIjhjMWY4NjBkN2QyOWNmMDJjYjJmM2YzNTlmZDM1OTkxYWYzZDMwYmFjNTJjNTdkMjY1YTNjNDYxMDc0Y2I0ZGMiCitjaGVja3N1bSA9ICJlMGY0YTY1NTk3MDk0ZDQ0ODNkZGFlZDEzNGY0MDliMmNiN2MxYmVjY2YyNTIwMWE5ZjczYzcxOTI1NGZhOThlIgorZGVwZW5kZW5jaWVzID0gWworICJ0aGlzZXJyb3ItaW1wbCIsCitdCisKK1tbcGFja2FnZV1dCituYW1lID0gInRoaXNlcnJvci1pbXBsIgordmVyc2lvbiA9ICIxLjAuMjQiCitzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCitjaGVja3N1bSA9ICI3NzY1MTg5NjEwZDgyNDFhNDQ1Mjk4MDZkNmZkMWYyZTBhMDg3MzQzMTNhMzVkNWIzYTU1NmY5MmIzODFmM2MwIgorZGVwZW5kZW5jaWVzID0gWworICJwcm9jLW1hY3JvMiAxLjAuMjYiLAorICJxdW90ZSAxLjAuOSIsCisgInN5biAxLjAuNzIiLAorXQogCiBbW3BhY2thZ2VdXQogbmFtZSA9ICJ1bmljb2RlLXhpZCIKIHZlcnNpb24gPSAiMC4xLjAiCiBzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCiBjaGVja3N1bSA9ICJmYzcyMzA0Nzk2ZDA4MThlMzU3ZWFkNGUwMDBkMTljOWMxNzRhYjIzZGMxMTA5M2FjOTE5MDU0ZDIwYTZhN2ZjIgorCitbW3BhY2thZ2VdXQorbmFtZSA9ICJ1bmljb2RlLXhpZCIKK3ZlcnNpb24gPSAiMC4yLjIiCitzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCitjaGVja3N1bSA9ICI4Y2NiODJkNjFmODBhNjYzZWZlMWY3ODdhNTFiMTZiNWE1MWUzMzE0ZDZhYzM2NWIwODYzOWY1MjM4N2IzM2YzIgpkaWZmIC0tZ2l0IGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9DYXJnby50b21sIGIvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9DYXJnby50b21sCmluZGV4IDllZDJhZjguLjRhZWViM2UgMTAwNjQ0Ci0tLSBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvQ2FyZ28udG9tbAorKysgYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL0NhcmdvLnRvbWwKQEAgLTEwLDcgKzEwLDYgQEAKIAogW3dvcmtzcGFjZV0KIG1lbWJlcnMgPSBbCi0gICAgImNvbmZpZyIsCiAgICAgImltYWdlIgogXQogCkBAIC0yNSw4ICsyNCw4IEBACiBkZWJ1ZyA9IHRydWUKIAogW2RlcGVuZGVuY2llc10KLXJvbV9leHRfY29uZmlnID0geyBwYXRoID0gImNvbmZpZyIgfQogcm9tX2V4dF9pbWFnZSA9IHsgcGF0aCA9ICJpbWFnZSIgfQorYW55aG93ID0gIjEuMC40MCIKIAogW2RlcGVuZGVuY2llcy5tdW5kYW5lXQogdmVyc2lvbiA9ICIwLjQuNCIKZGlmZiAtLWdpdCBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvY29uZmlnL0NhcmdvLnRvbWwgYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2NvbmZpZy9DYXJnby50b21sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTQ1NTkzLi4wMDAwMDAwCi0tLSBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvY29uZmlnL0NhcmdvLnRvbWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jIENvcHlyaWdodCBsb3dSSVNDIGNvbnRyaWJ1dG9ycy4KLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCwgc2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0KLVtwYWNrYWdlXQotbmFtZSA9ICJyb21fZXh0X2NvbmZpZyIKLXZlcnNpb24gPSAiMC4xLjAiCi1hdXRob3JzID0gWyJsb3dSSVNDIGNvbnRyaWJ1dG9ycyJdCi1lZGl0aW9uID0gIjIwMTgiCi0KLVtkZXBlbmRlbmNpZXNdCi1zZXJkZSA9ICIwLjgiCi1zZXJkZV9kZXJpdmUgPSAiMC44Igotc2VyZGUtaGpzb24gPSAiMC44IgpkaWZmIC0tZ2l0IGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9jb25maWcvc3JjL2xpYi5ycyBiL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvY29uZmlnL3NyYy9saWIucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNjI0ODkuLjAwMDAwMDAKLS0tIGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9jb25maWcvc3JjL2xpYi5ycworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IGxvd1JJU0MgY29udHJpYnV0b3JzLgotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCwgc2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAotCi1wdWIgbW9kIHBhcnNlcjsKZGlmZiAtLWdpdCBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvY29uZmlnL3NyYy9wYXJzZXIucnMgYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2NvbmZpZy9zcmMvcGFyc2VyLnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmNhYjFmLi4wMDAwMDAwCi0tLSBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvY29uZmlnL3NyYy9wYXJzZXIucnMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgbG93UklTQyBjb250cmlidXRvcnMuCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLCBzZWUgTElDRU5TRSBmb3IgZGV0YWlscy4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi0KLXVzZSBzdGQ6OmZzOwotdXNlIHN0ZDo6cGF0aDo6UGF0aDsKLXVzZSBzdGQ6OnBhdGg6OlBhdGhCdWY7Ci0KLXVzZSBzZXJkZV9kZXJpdmU6OkRlc2VyaWFsaXplOwotdXNlIHNlcmRlX2hqc29uOjpWYWx1ZTsKLQotLy8vIENvbmZpZ3VyYXRpb24gdXNlZCBmb3IgdGhlIG1hbmlmZXN0IGluaXRpYWxpc2F0aW9uLgotI1tkZXJpdmUoRGVzZXJpYWxpemUsIERlYnVnKV0KLXB1YiBzdHJ1Y3QgUGFyc2VkQ29uZmlnIHsKLSAgICBwdWIgaW5wdXRfZmlsZXM6IElucHV0RmlsZXMsCi0gICAgcHViIHBlcmlwaGVyYWxfbG9ja2Rvd25faW5mbzogUGVyaXBoZXJhbExvY2tkb3duSW5mbywKLSAgICBwdWIgbWFuaWZlc3RfaWRlbnRpZmllcjogU3RyaW5nLAotICAgIHB1YiBpbWFnZV92ZXJzaW9uOiBTdHJpbmcsCi0gICAgcHViIGV4dGVuc2lvbnM6IFtFeHRlbnNpb247IDRdLAotfQotCi0vLy8gSW5wdXQgZmlsZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHNpZ25pbmcuCi0jW2Rlcml2ZShEZXNlcmlhbGl6ZSwgRGVidWcpXQotcHViIHN0cnVjdCBJbnB1dEZpbGVzIHsKLSAgICBwdWIgaW1hZ2VfcGF0aDogUGF0aEJ1ZiwKLSAgICBwdWIgcHJpdmF0ZV9rZXlfZGVyX3BhdGg6IFBhdGhCdWYsCi0gICAgcHViIHVzYWdlX2NvbnN0cmFpbnRzX3BhdGg6IFBhdGhCdWYsCi0gICAgcHViIHN5c3RlbV9zdGF0ZV92YWx1ZV9wYXRoOiBQYXRoQnVmLAotfQotCi0vLy8gUGVyaXBoZXJhbCBMb2NrZG93biBJbmZvcm1hdGlvbiBjb25maWd1cmF0aW9uIGRhdGEuCi0vLy8KLS8vLyBUaGlzIGRhdGEgaXMgdXNlZCB0byBwcm9kdWNlIDEyOC1iaXQgZW5jb2RlZCBtYW5pZmVzdCBmaWVsZC4KLSNbZGVyaXZlKERlc2VyaWFsaXplLCBEZWJ1ZyldCi1wdWIgc3RydWN0IFBlcmlwaGVyYWxMb2NrZG93bkluZm8gewotICAgIHB1YiB2YWx1ZTogdTMyLAotfQotCi0vLy8gUk9NX0VYVC4KLSNbZGVyaXZlKERlc2VyaWFsaXplLCBEZWJ1ZyldCi1wdWIgc3RydWN0IEV4dGVuc2lvbiB7Ci0gICAgcHViIG9mZnNldDogU3RyaW5nLAotICAgIHB1YiBjaGVja3N1bTogU3RyaW5nLAotfQotCi1pbXBsIFBhcnNlZENvbmZpZyB7Ci0gICAgcHViIGZuIG5ldyhjb25maWc6ICZQYXRoKSAtPiBTZWxmIHsKLSAgICAgICAgLy8gUmVhZCB0aGUgZW50aXJlIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAgICAgICAgbGV0IGNvbmZpZ19kYXRhID0gZnM6OnJlYWRfdG9fc3RyaW5nKGNvbmZpZykKLSAgICAgICAgICAgIC5leHBlY3QoIkZhaWxlZCB0byByZWFkIHRoZSBjb25maWcgZmlsZSEiKTsKLQotICAgICAgICBsZXQgZGF0YTogVmFsdWUgPSBzZXJkZV9oanNvbjo6ZnJvbV9zdHIoJmNvbmZpZ19kYXRhKQotICAgICAgICAgICAgLmV4cGVjdCgiRmFpbGVkIHRvIHBhcnNlIHRoZSBoanNvbiBjb25maWcgZmlsZSEiKTsKLQotICAgICAgICBsZXQgZGVzZXJpYWxpemVkOiBQYXJzZWRDb25maWcgPSBzZXJkZV9oanNvbjo6ZnJvbV92YWx1ZShkYXRhKQotICAgICAgICAgICAgLmV4cGVjdCgiRmFpbGVkIHRvIGRlc2VyaWFsaXplIGhqc29uIGNvbmZpZyBkYXRhISIpOwotCi0gICAgICAgIGRlc2VyaWFsaXplZAotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvZGV2L2NvbmZpZy5oanNvbiBiL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvZGV2L2NvbmZpZy5oanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdkMjVmNy4uMDAwMDAwMAotLS0gYS9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2Rldi9jb25maWcuaGpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vLyBDb3B5cmlnaHQgbG93UklTQyBjb250cmlidXRvcnMuCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLCBzZWUgTElDRU5TRSBmb3IgZGV0YWlscy4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCi17Ci0gIGlucHV0X2ZpbGVzOiB7Ci0gICAgaW1hZ2VfcGF0aDogInN3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvZGV2L3JvbV9leHRfYmxhbmtfaW1hZ2UuYmluIiwKLSAgICBwcml2YXRlX2tleV9kZXJfcGF0aDogInN3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvZGV2L3Rlc3Rfa2V5X3ByaXZhdGUuZGVyIiwKLSAgICB1c2FnZV9jb25zdHJhaW50c19wYXRoOiAic3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9kZXYvdXNhZ2VfY29uc3RyYWludHMuYmluIiwKLSAgICBzeXN0ZW1fc3RhdGVfdmFsdWVfcGF0aDogInN3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvZGV2L3N5c3RlbV9zdGF0ZV92YWx1ZS5iaW4iLAotICB9LAotICAvLyBUQkQKLSAgcGVyaXBoZXJhbF9sb2NrZG93bl9pbmZvOiB7Ci0gICAgdmFsdWU6IDAsCi0gIH0sCi0gIG1hbmlmZXN0X2lkZW50aWZpZXI6ICI0Mzk4MSIsCi0gIGltYWdlX3ZlcnNpb246ICIweGRlYWRiZWVmIiwKLSAgZXh0ZW5zaW9uczogWwotICAgIHsKLSAgICAgIG9mZnNldDogIjB4ZGVhZGJlZWYiLAotICAgICAgY2hlY2tzdW06ICIweGRlYWRiZWVmIiwKLSAgICB9LAotICAgIHsKLSAgICAgIG9mZnNldDogIjB4ZGVhZGJlZWYiLAotICAgICAgY2hlY2tzdW06ICIweGRlYWRiZWVmIiwKLSAgICB9LAotICAgIHsKLSAgICAgIG9mZnNldDogIjB4ZGVhZGJlZWYiLAotICAgICAgY2hlY2tzdW06ICIweGRlYWRiZWVmIiwKLSAgICB9LAotICAgIHsKLSAgICAgIG9mZnNldDogIjB4ZGVhZGJlZWYiLAotICAgICAgY2hlY2tzdW06ICIweGRlYWRiZWVmIiwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9kZXYvcm9tX2V4dF9ibGFua19pbWFnZS5iaW4gYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2Rldi9yb21fZXh0X2JsYW5rX2ltYWdlLmJpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZkNzQwNS4uMDAwMDAwMAotLS0gYS9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2Rldi9yb21fZXh0X2JsYW5rX2ltYWdlLmJpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvZGV2L3N5c3RlbV9zdGF0ZV92YWx1ZS5iaW4gYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2Rldi9zeXN0ZW1fc3RhdGVfdmFsdWUuYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjQ4ZmQ3Li4wMDAwMDAwCi0tLSBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvZGV2L3N5c3RlbV9zdGF0ZV92YWx1ZS5iaW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi2lpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvZGV2L3Rlc3Rfa2V5X3ByaXZhdGUuZGVyIGIvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9kZXYvdGVzdF9rZXlfcHJpdmF0ZS5kZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NGYzYmMuLjAwMDAwMDAKLS0tIGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9kZXYvdGVzdF9rZXlfcHJpdmF0ZS5kZXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2Rldi91c2FnZV9jb25zdHJhaW50cy5iaW4gYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2Rldi91c2FnZV9jb25zdHJhaW50cy5iaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NDhmZDcuLjAwMDAwMDAKLS0tIGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9kZXYvdXNhZ2VfY29uc3RyYWludHMuYmluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2ltYWdlL0NhcmdvLnRvbWwgYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2ltYWdlL0NhcmdvLnRvbWwKaW5kZXggNTgxMDUzMS4uMzVjYjIzMCAxMDA2NDQKLS0tIGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9pbWFnZS9DYXJnby50b21sCisrKyBiL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvaW1hZ2UvQ2FyZ28udG9tbApAQCAtOSw0ICs5LDQgQEAKIGVkaXRpb24gPSAiMjAxOCIKIAogW2RlcGVuZGVuY2llc10KLXJvbV9leHRfY29uZmlnID0geyBwYXRoID0gIi4uL2NvbmZpZyIgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3RoaXNlcnJvciA9ICIxLjAuMjQiCmRpZmYgLS1naXQgYS9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2ltYWdlL3NyYy9pbWFnZS5ycyBiL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvaW1hZ2Uvc3JjL2ltYWdlLnJzCmluZGV4IGZmZWM0OGMuLjJlYWM4YWQgMTAwNjQ0Ci0tLSBhL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvaW1hZ2Uvc3JjL2ltYWdlLnJzCisrKyBiL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvaW1hZ2Uvc3JjL2ltYWdlLnJzCkBAIC02LDIwNCArNiw2NyBAQAogIyFbZGVueSh1bnVzZWQpXQogIyFbZGVueSh1bnNhZmVfY29kZSldCiAKLXVzZSBzdGQ7Ci11c2Ugc3RkOjpmZmk6Ok9zU3RyaW5nOwotdXNlIHN0ZDo6ZnM7Ci11c2Ugc3RkOjpwYXRoOjpQYXRoOwotdXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsKLXVzZSBzdGQ6OnRpbWU6OlN5c3RlbVRpbWU7Ci11c2Ugc3RkOjp0aW1lOjpVTklYX0VQT0NIOwotCiB1c2UgY3JhdGU6Om1hbmlmZXN0OwotdXNlIHJvbV9leHRfY29uZmlnOjpwYXJzZXI6OlBhcnNlZENvbmZpZzsKLXVzZSByb21fZXh0X2NvbmZpZzo6cGFyc2VyOjpQZXJpcGhlcmFsTG9ja2Rvd25JbmZvOwordXNlIHRoaXNlcnJvcjo6RXJyb3I7CiAKLS8vLyBTdHJpcHBlZCBiaW5hcnkgaW1hZ2UgYnVmZmVyLgotcHViIHN0cnVjdCBSYXdJbWFnZSB7CisjW2Rlcml2ZShFcnJvciwgRGVidWcsIFBhcnRpYWxFcSldCitwdWIgZW51bSBJbWFnZUVycm9yIHsKKyAgICAjW2Vycm9yKCJFeHBlY3RlZCBhdCBtb3N0IHtsZW59IGJ5dGVzIGZvciBvZmZzZXQge29mZnNldH0sIHJlY2VpdmVkIHtkYXRhX2xlbn0uIildCisgICAgRmllbGREYXRhIHsKKyAgICAgICAgb2Zmc2V0OiB1c2l6ZSwKKyAgICAgICAgbGVuOiB1c2l6ZSwKKyAgICAgICAgZGF0YV9sZW46IHVzaXplLAorICAgIH0sCit9CisKKy8vLyBBIHRoaW4gd3JhcHBlciBhcm91bmQgYSBWZWMgdG8gaGVscCB3aXRoIHNldHRpbmcgUk9NX0VYVCBtYW5pZmVzdCBmaWVsZHMuCisjW2Rlcml2ZShEZWJ1ZyldCitwdWIgc3RydWN0IEltYWdlIHsKICAgICBkYXRhOiBWZWM8dTg+LAotICAgIHBhdGg6IFBhdGhCdWYsCiB9CiAKLS8vLyBCdWZmZXIgbWFuaXB1bGF0aW9uIEFQSS4KLWltcGwgUmF3SW1hZ2UgewotICAgIC8vLyBDcmVhdGVzIHRoZSBuZXcgaW1hZ2UgYnVmZmVyLgotICAgIC8vLwotICAgIC8vLyBUaGUgZGF0YSBpcyByZWFkIGZyb20gdGhlIHJlcXVlc3RlZCByYXcgYmluYXJ5IGZpbGUuCi0gICAgcHViIGZuIG5ldyhpbWFnZV9wYXRoOiAmUGF0aCkgLT4gU2VsZiB7Ci0gICAgICAgIGxldCBkYXRhID0gZnM6OnJlYWQoaW1hZ2VfcGF0aCkuZXhwZWN0KCJGYWlsZWQgdG8gcmVhZCB0aGUgaW1hZ2UhIik7Ci0KLSAgICAgICAgUmF3SW1hZ2UgewotICAgICAgICAgICAgZGF0YTogZGF0YSwKLSAgICAgICAgICAgIHBhdGg6IGltYWdlX3BhdGgudG9fcGF0aF9idWYoKSwKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vLyBVcGRhdGVzIHRoZSBmaWVsZHMgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgotICAgIC8vLwotICAgIC8vLyBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGltYWdlIG1hbmlmZXN0IGRhdGEgd2l0aCB2YWx1ZXMgcGFyc2VkIGZyb20KLSAgICAvLy8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAoa25vd24gYWhlYWQgb2YgdGltZSkuIFNvbWUgb2YgdGhlIG90aGVyIGZpZWxkcwotICAgIC8vLyBsaWtlIHNpZ25hdHVyZSBrZXkgcHVibGljIGV4cG9uZW50IGFuZCBtb2R1bHVzLCBhcmUgb2J0YWluZWQgYXQKLSAgICAvLy8gcnVuLXRpbWUuCi0gICAgcHViIGZuIHVwZGF0ZV9zdGF0aWNfZmllbGRzKCZtdXQgc2VsZiwgY29uZmlnOiAmUGFyc2VkQ29uZmlnKSB7Ci0gICAgICAgIC8vIFRPRE86IGNoZWNrcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29uZmlnIHZhbHVlcyAoc3RyaW5ncykgYXJlIG5vdAotICAgICAgICAvLyAgICAgICBiaWdnZXIgdGhhbiB0aGUgYWN0dWFsIGZpZWxkIHNpemUuCi0KLSAgICAgICAgbGV0IG11dCB1cGRhdGUgPSB8dmFsdWUsIG9mZnNldHwgewotICAgICAgICAgICAgbGV0IGJ5dGVzID0gc3RyX3RvX3ZlY191OCh2YWx1ZSk7Ci0gICAgICAgICAgICBzZWxmLnVwZGF0ZV9maWVsZCgmYnl0ZXMsIG9mZnNldCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdXBkYXRlKAotICAgICAgICAgICAgJmNvbmZpZy5tYW5pZmVzdF9pZGVudGlmaWVyLAotICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfTUFOSUZFU1RfSURFTlRJRklFUl9PRkZTRVQsCi0gICAgICAgICk7Ci0gICAgICAgIHVwZGF0ZSgKLSAgICAgICAgICAgICZjb25maWcuaW1hZ2VfdmVyc2lvbiwKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0lNQUdFX1ZFUlNJT05fT0ZGU0VULAotICAgICAgICApOwotCi0gICAgICAgIGxldCBvZmZzZXRzID0gWwotICAgICAgICAgICAgKAotICAgICAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjBfT0ZGU0VUX09GRlNFVCwKLSAgICAgICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04wX0NIRUNLU1VNX09GRlNFVCwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAoCi0gICAgICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfRVhURU5TSU9OMV9PRkZTRVRfT0ZGU0VULAotICAgICAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjFfQ0hFQ0tTVU1fT0ZGU0VULAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICgKLSAgICAgICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04yX09GRlNFVF9PRkZTRVQsCi0gICAgICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfRVhURU5TSU9OMl9DSEVDS1NVTV9PRkZTRVQsCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgKAotICAgICAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjNfT0ZGU0VUX09GRlNFVCwKLSAgICAgICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04zX0NIRUNLU1VNX09GRlNFVCwKLSAgICAgICAgICAgICksCi0gICAgICAgIF07Ci0gICAgICAgIGZvciAoaSwgb2Zmc2V0KSBpbiBvZmZzZXRzLml0ZXIoKS5lbnVtZXJhdGUoKSB7Ci0gICAgICAgICAgICB1cGRhdGUoJmNvbmZpZy5leHRlbnNpb25zW2ldLm9mZnNldCwgb2Zmc2V0LjApOwotICAgICAgICAgICAgdXBkYXRlKCZjb25maWcuZXh0ZW5zaW9uc1tpXS5jaGVja3N1bSwgb2Zmc2V0LjEpOwotICAgICAgICB9Ci0KLSAgICAgICAgbGV0IHVzYWdlX2NvbnN0cmFpbnRzX3BhdGggPSAmY29uZmlnLmlucHV0X2ZpbGVzLnVzYWdlX2NvbnN0cmFpbnRzX3BhdGg7Ci0gICAgICAgIHNlbGYudXBkYXRlX3VzYWdlX2NvbnN0cmFpbnRzX2ZpZWxkKHVzYWdlX2NvbnN0cmFpbnRzX3BhdGgpOwotCi0gICAgICAgIGxldCBsb2NrZG93bl9pbmZvID0gJmNvbmZpZy5wZXJpcGhlcmFsX2xvY2tkb3duX2luZm87Ci0gICAgICAgIHNlbGYudXBkYXRlX3BlcmlwaGVyYWxfbG9ja2Rvd25faW5mb19maWVsZChsb2NrZG93bl9pbmZvKTsKLSAgICB9Ci0KLSAgICAvLy8gVXBkYXRlcyBST01fRVhUIG1hbmlmZXN0IHRpbWVzdGFtcCBmaWVsZC4KLSAgICAvLy8KLSAgICAvLy8gVGhlIGdlbmVyYXRlZCB0aW1lIHN0YW1wIGlzIHU2NC4gTm9ybWFsbHkgdGltZSBzdGFtcCBpcyBhIHNpZ25lZAotICAgIC8vLyBpbnRlZ2VyLCBob3dldmVyIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cgaW50byBhICJuZWdhdGl2ZSIuCi0gICAgcHViIGZuIHVwZGF0ZV90aW1lc3RhbXBfZmllbGQoJm11dCBzZWxmKSB7Ci0gICAgICAgIGxldCBkdXJhdGlvbiA9IFN5c3RlbVRpbWU6Om5vdygpCi0gICAgICAgICAgICAuZHVyYXRpb25fc2luY2UoVU5JWF9FUE9DSCkKLSAgICAgICAgICAgIC5leHBlY3QoIkZhaWxlZCB0byBvYnRhaW4gdGhlIGN1cnJlbnQgdGltZSEiKTsKLQotICAgICAgICBsZXQgYnl0ZXMgPSBkdXJhdGlvbi5hc19zZWNzKCkudG9fbGVfYnl0ZXMoKTsKLSAgICAgICAgc2VsZi51cGRhdGVfZmllbGQoJmJ5dGVzLCBtYW5pZmVzdDo6Uk9NX0VYVF9JTUFHRV9USU1FU1RBTVBfT0ZGU0VUKTsKLSAgICB9Ci0KLSAgICAvLy8gVXBkYXRlcyBST01fRVhUIG1hbmlmZXN0IHNpZ25hdHVyZSBrZXkgcHVibGljIGV4cG9uZW50IGZpZWxkLgotICAgIHB1YiBmbiB1cGRhdGVfZXhwb25lbnRfZmllbGQoJm11dCBzZWxmLCBleHBvbmVudDogJlt1OF0pIHsKLSAgICAgICAgc2VsZi51cGRhdGVfZmllbGQoCi0gICAgICAgICAgICBleHBvbmVudCwKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX1NJR05BVFVSRV9LRVlfUFVCTElDX0VYUE9ORU5UX09GRlNFVCwKLSAgICAgICAgKTsKLSAgICB9Ci0KLSAgICAvLy8gVXBkYXRlcyBST01fRVhUIG1hbmlmZXN0IHNpZ25hdHVyZSBrZXkgbW9kdWx1cyBmaWVsZC4KLSAgICBwdWIgZm4gdXBkYXRlX21vZHVsdXNfZmllbGQoJm11dCBzZWxmLCBtb2R1bHVzOiAmW3U4XSkgewotICAgICAgICBzZWxmLnVwZGF0ZV9maWVsZCgKLSAgICAgICAgICAgIG1vZHVsdXMsCi0gICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9TSUdOQVRVUkVfS0VZX01PRFVMVVNfT0ZGU0VULAotICAgICAgICApOwotICAgIH0KLQotICAgIC8vLyBVcGRhdGVzIFJPTV9FWFQgbWFuaWZlc3Qgc2lnbmF0dXJlIGZpZWxkLgotICAgIHB1YiBmbiB1cGRhdGVfc2lnbmF0dXJlX2ZpZWxkKCZtdXQgc2VsZiwgc2lnbmF0dXJlOiAmW3U4XSkgewotICAgICAgICBzZWxmLnVwZGF0ZV9maWVsZChzaWduYXR1cmUsIG1hbmlmZXN0OjpST01fRVhUX0lNQUdFX1NJR05BVFVSRV9PRkZTRVQpOwotICAgIH0KLQotICAgIC8vLyBSZXR1cm5zIHRoZSBwb3J0aW9uIG9mIHRoZSBpbWFnZSB1c2VkIGZvciBzaWduaW5nLgotICAgIC8vLwotICAgIC8vLyBNYW5pZmVzdCBpZGVudGlmaWVyIGFuZCB0aGUgc2lnbmF0dXJlIGl0c2VsZiBhcmUgbm90IHNpZ25lZC4gVGhlIHJlc3QKLSAgICAvLy8gb2YgdGhlIGltYWdlLCBpbmNsdWRpbmcgYWxsIHRoZSBtYW5pZmVzdCBmaWVsZHMgdGhhdCBmb2xsb3cgdGhlCi0gICAgLy8vIHNpZ25hdHVyZSBmaWVsZC4KLSAgICBwdWIgZm4gZGF0YV90b19zaWduKCZzZWxmKSAtPiAmW3U4XSB7Ci0gICAgICAgIGxldCBvZmZzZXQgPSBtYW5pZmVzdDo6Uk9NX0VYVF9TSUdORURfQVJFQV9TVEFSVF9PRkZTRVQgYXMgdXNpemU7Ci0gICAgICAgICZzZWxmLmRhdGFbb2Zmc2V0Li5dCi0gICAgfQotCi0gICAgLy8vIFdyaXRlcyB0aGUgaW1hZ2UgYnVmZmVyIGNvbnRlbnRzIGludG8gYSBmaWxlLgotICAgIC8vLwotICAgIC8vLyBQbGFjZXMgdGhlIG5ldyBmaWxlIGFsb25nc2lkZSB0aGUgb3JpZ2luYWwsIHdpdGggYSAibmV3XyIgcHJlZml4LgotICAgIHB1YiBmbiB3cml0ZV9maWxlKCZzZWxmKSB7Ci0gICAgICAgIGxldCBmaWxlX25hbWUgPQotICAgICAgICAgICAgc2VsZi5wYXRoLmZpbGVfbmFtZSgpLmV4cGVjdCgiRmFpbGVkIHRvIGdldCBmaWxlIHN0ZW0hIik7Ci0KLSAgICAgICAgbGV0IG11dCBuZXdfZmlsZV9uYW1lID0gT3NTdHJpbmc6OmZyb20oIm5ld18iKTsKLSAgICAgICAgbmV3X2ZpbGVfbmFtZS5wdXNoKGZpbGVfbmFtZSk7Ci0KLSAgICAgICAgbGV0IG91dHB1dF9maWxlID0gc2VsZi5wYXRoLndpdGhfZmlsZV9uYW1lKG5ld19maWxlX25hbWUpOwotCi0gICAgICAgIGZzOjp3cml0ZShvdXRwdXRfZmlsZSwgJnNlbGYuZGF0YSkKLSAgICAgICAgICAgIC5leHBlY3QoIkZhaWxlZCB0byB3cml0ZSB0aGUgbmV3IGJpbmFyeSBmaWxlISIpOwotICAgIH0KLQotICAgIC8vLyBVcGRhdGVzIFJPTV9FWFQgbWFuaWZlc3QgdXNhZ2UgY29uc3RyYWludHMgZmllbGQuCi0gICAgZm4gdXBkYXRlX3VzYWdlX2NvbnN0cmFpbnRzX2ZpZWxkKCZtdXQgc2VsZiwgcGF0aDogJlBhdGgpIHsKLSAgICAgICAgLy8gVXBkYXRlIGZpZWxkcyBmcm9tIGNvbmZpZy4KLSAgICAgICAgbGV0IHVzYWdlX2NvbnN0cmFpbnRzID0KLSAgICAgICAgICAgIGZzOjpyZWFkKHBhdGgpLmV4cGVjdCgiRmFpbGVkIHRvIHJlYWQgdXNhZ2UgY29uc3RyYWludHMhIik7Ci0gICAgICAgIHNlbGYudXBkYXRlX2ZpZWxkKAotICAgICAgICAgICAgJnVzYWdlX2NvbnN0cmFpbnRzLAotICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfVVNBR0VfQ09OU1RSQUlOVFNfT0ZGU0VULAotICAgICAgICApOwotICAgIH0KLQotICAgIC8vLyBVcGRhdGVzIFJPTV9FWFQgbWFuaWZlc3QgcGVyaXBoZXJhbCBsb2NrZG93biBpbmZvIGZpZWxkLgotICAgIC8vLwotICAgIC8vLyBUaGUgaW5mb3JtYXRpb24gaXMgZW5jb2RlZCBpbnRvIHRoZSAxMjgtYml0IGJpbmFyeSBibG9iLgotICAgIGZuIHVwZGF0ZV9wZXJpcGhlcmFsX2xvY2tkb3duX2luZm9fZmllbGQoCitpbXBsIEltYWdlIHsKKyAgICAvLy8gU2V0cyB0aGUgdmFsdWUgb2YgYSBST01fRVhUIG1hbmlmZXN0IGZpZWxkLgorICAgIHB1YiBmbiBzZXRfbWFuaWZlc3RfZmllbGQ8ST4oCiAgICAgICAgICZtdXQgc2VsZiwKLSAgICAgICAgX2luZm86ICZQZXJpcGhlcmFsTG9ja2Rvd25JbmZvLAotICAgICkgewotICAgICAgICAvLyBUT0RPOiBnZW5lcmF0ZSB0aGUgcGVyaXBoZXJhbF9sb2NrZG93bl9ibG9iIGZyb20KLSAgICAgICAgLy8gICAgICAgUGVyaXBoZXJhbExvY2tkb3duSW5mbywgbWVhbndoaWxlIHVzZSBhIGhhcmQtY29kZWQgdmVjdG9yLgotCi0gICAgICAgIHNlbGYudXBkYXRlX2ZpZWxkKAotICAgICAgICAgICAgJlsweEE1OyAxNl0sCi0gICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9QRVJJUEhFUkFMX0xPQ0tET1dOX0lORk9fT0ZGU0VULAotICAgICAgICApOworICAgICAgICBmaWVsZDogJm1hbmlmZXN0OjpNYW5pZmVzdEZpZWxkLAorICAgICAgICBmaWVsZF9kYXRhOiBJLAorICAgICkgLT4gUmVzdWx0PCgpLCBJbWFnZUVycm9yPgorICAgIHdoZXJlCisgICAgICAgIEk6IEludG9JdGVyYXRvcjxJdGVtID0gdTg+LAorICAgICAgICBJOjpJbnRvSXRlcjogRXhhY3RTaXplSXRlcmF0b3IsCisgICAgeworICAgICAgICBsZXQgZmllbGRfZGF0YSA9IGZpZWxkX2RhdGEuaW50b19pdGVyKCk7CisgICAgICAgIGlmIGZpZWxkX2RhdGEubGVuKCkgPiBmaWVsZC5zaXplX2J5dGVzIHsKKyAgICAgICAgICAgIEVycihJbWFnZUVycm9yOjpGaWVsZERhdGEgeworICAgICAgICAgICAgICAgIG9mZnNldDogZmllbGQub2Zmc2V0LAorICAgICAgICAgICAgICAgIGxlbjogZmllbGQuc2l6ZV9ieXRlcywKKyAgICAgICAgICAgICAgICBkYXRhX2xlbjogZmllbGRfZGF0YS5sZW4oKSwKKyAgICAgICAgICAgIH0pCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZWxmLmRhdGEuc3BsaWNlKAorICAgICAgICAgICAgICAgIGZpZWxkLm9mZnNldC4uKGZpZWxkLm9mZnNldCArIGZpZWxkX2RhdGEubGVuKCkpLAorICAgICAgICAgICAgICAgIGZpZWxkX2RhdGEsCisgICAgICAgICAgICApOworICAgICAgICAgICAgT2soKCkpCisgICAgICAgIH0KICAgICB9CiAKLSAgICAvLy8gVXBkYXRlcyBhIFJPTV9FWFQgbWFuaWZlc3QgZmllbGQuCi0gICAgLy8vCi0gICAgLy8vIEdlbmVyaWMgZnVuY3Rpb24sIGlzIHVzZWQgYnkgdGhlIHNwZWNpZmljIGZpZWxkIHVwZGF0ZSBjb3VudGVycGFydHMuCi0gICAgZm4gdXBkYXRlX2ZpZWxkKCZtdXQgc2VsZiwgZmllbGRfZGF0YTogJlt1OF0sIGZpZWxkX29mZnNldDogdTMyKSB7Ci0gICAgICAgIGxldCBiZWdpbiA9IGZpZWxkX29mZnNldCBhcyB1c2l6ZTsKLSAgICAgICAgbGV0IGVuZCA9IGJlZ2luICsgZmllbGRfZGF0YS5sZW4oKTsKLSAgICAgICAgc2VsZi5kYXRhLnNwbGljZShiZWdpbi4uZW5kLCBmaWVsZF9kYXRhLml0ZXIoKS5jbG9uZWQoKSk7CisgICAgLy8vIFJldHVybnMgdGhlIHNpZ25lZCBieXRlcyBvZiB0aGUgaW1hZ2UuCisgICAgcHViIGZuIHNpZ25lZF9ieXRlcygmc2VsZikgLT4gJlt1OF0geworICAgICAgICAmc2VsZi5kYXRhW21hbmlmZXN0OjpST01fRVhUX1NJR05FRF9BUkVBX1NUQVJUX09GRlNFVC4uXQogICAgIH0KIH0KIAotZm4gc3RyX3RvX3U2NCh2YWw6ICZzdHIpIC0+IHU2NCB7Ci0gICAgbWF0Y2ggdmFsLnN0cmlwX3ByZWZpeCgiMHgiKSB7Ci0gICAgICAgIFNvbWUocykgPT4gdTY0Ojpmcm9tX3N0cl9yYWRpeChzLCAxNiksCi0gICAgICAgIE5vbmUgPT4gdTY0Ojpmcm9tX3N0cl9yYWRpeCh2YWwsIDEwKSwKK2ltcGwgQXNSZWY8W3U4XT4gZm9yIEltYWdlIHsKKyAgICBmbiBhc19yZWYoJnNlbGYpIC0+ICZbdThdIHsKKyAgICAgICAgJnNlbGYuZGF0YQogICAgIH0KLSAgICAuZXhwZWN0KCJGYWlsZWQgdG8gcGFyc2Ugc3RyaW5nIHRvIHU2NCEiKQogfQogCi0vLy8gQ29udmVydHMgaGV4L2RlY2ltYWwgdWludCBzdHJpbmcgaW50byBhIGxpdHRsZSBlbmRpYW4gYnl0ZSB2ZWN0b3IuCi0vLy8KLS8vLyBOb3RlOiBvbmx5IHVuZGVyc3RhbmRzIHZhbHVlcyB1cCB0byB1NjQ6Ok1BWC4KLWZuIHN0cl90b192ZWNfdTgoczogJnN0cikgLT4gVmVjPHU4PiB7Ci0gICAgbWF0Y2ggc3RyX3RvX3U2NChzKS50b19sZV9ieXRlcygpIHsKLSAgICAgICAgW2EsIGIsIGMsIGQsIDAsIDAsIDAsIDBdID0+IHZlYyFbYSwgYiwgYywgZF0sCi0gICAgICAgIGJ5dGVzID0+IGJ5dGVzLnRvX3ZlYygpLAoraW1wbCBGcm9tPFZlYzx1OD4+IGZvciBJbWFnZSB7CisgICAgZm4gZnJvbShkYXRhOiBWZWM8dTg+KSAtPiBTZWxmIHsKKyAgICAgICAgSW1hZ2UgeyBkYXRhIH0KICAgICB9CiB9CiAKQEAgLTIxMSwxNDkgKzc0LDQ1IEBACiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKIAotICAgIHVzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOwotICAgIHVzZSBzdGQ6OmVudjsKLQotICAgIHVzZSByb21fZXh0X2NvbmZpZzo6cGFyc2VyOjpFeHRlbnNpb247Ci0gICAgdXNlIHJvbV9leHRfY29uZmlnOjpwYXJzZXI6OklucHV0RmlsZXM7Ci0KLSAgICBzdGF0aWMgREVWX1JFTEFUSVZFX1BBVEg6ICZzdHIgPSAic3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9kZXYiOworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3NldF9tYW5pZmVzdF9maWVsZCgpIC0+IFJlc3VsdDwoKSwgSW1hZ2VFcnJvcj4geworICAgICAgICBsZXQgbXV0IGltYWdlID0gSW1hZ2U6OmZyb20odmVjIVswOyAxMDI0XSk7CisgICAgICAgIGxldCBmaWVsZCA9IG1hbmlmZXN0OjpST01fRVhUX0lNQUdFX0xFTkdUSDsKKyAgICAgICAgbGV0IHZhbDogW3U4OyA0XSA9IFsweEE1OyA0XTsKKyAgICAgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKCZmaWVsZCwgdmFsLml0ZXIoKS5jbG9uZWQoKSk/OworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgaW1hZ2UuYXNfcmVmKClbZmllbGQub2Zmc2V0Li5maWVsZC5vZmZzZXQgKyBmaWVsZC5zaXplX2J5dGVzXSwKKyAgICAgICAgICAgIHZhbAorICAgICAgICApOworICAgICAgICBPaygoKSkKKyAgICB9CiAKICAgICAjW3Rlc3RdCi0gICAgZm4gdGVzdF91cGRhdGVfc3RhdGljX2ZpZWxkcygpIHsKLSAgICAgICAgbGV0IHNvdXJjZV9yb290ID0gZW52Ojp2YXIoIk1FU09OX1NPVVJDRV9ST09UIikKLSAgICAgICAgICAgIC5leHBlY3QoIkZhaWxlZCwgRU5WIHZhcmlhYmxlIG5vdCBzZXQhIik7CisgICAgZm4gdGVzdF9zZXRfbWFuaWZlc3RfZmllbGRfZXJyb3IoKSB7CisgICAgICAgIGxldCBtdXQgaW1hZ2UgPSBJbWFnZTo6ZnJvbSh2ZWMhWzA7IDEwMjRdKTsKKyAgICAgICAgbGV0IGZpZWxkID0gbWFuaWZlc3Q6OlJPTV9FWFRfSU1BR0VfTEVOR1RIOworICAgICAgICBsZXQgdmFsOiBbdTg7IDZdID0gWzB4QTU7IDZdOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKCZmaWVsZCwgdmFsLml0ZXIoKS5jbG9uZWQoKSksCisgICAgICAgICAgICBFcnIoSW1hZ2VFcnJvcjo6RmllbGREYXRhIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQ6IGZpZWxkLm9mZnNldCwKKyAgICAgICAgICAgICAgICBsZW46IGZpZWxkLnNpemVfYnl0ZXMsCisgICAgICAgICAgICAgICAgZGF0YV9sZW46IDYKKyAgICAgICAgICAgIH0pCisgICAgICAgICk7CisgICAgfQogCi0gICAgICAgIGxldCBkZXZfcGF0aCA9IFBhdGg6Om5ldygmc291cmNlX3Jvb3QpLmpvaW4oREVWX1JFTEFUSVZFX1BBVEgpOwotICAgICAgICBsZXQgZnVsbF9wYXRoID0gfHBhdGh8IGRldl9wYXRoLmpvaW4ocGF0aCk7Ci0KLSAgICAgICAgbGV0IGNvbmZpZyA9IFBhcnNlZENvbmZpZyB7Ci0gICAgICAgICAgICBpbnB1dF9maWxlczogSW5wdXRGaWxlcyB7Ci0gICAgICAgICAgICAgICAgaW1hZ2VfcGF0aDogZnVsbF9wYXRoKCJyb21fZXh0X2JsYW5rX2ltYWdlLmJpbiIpLAotICAgICAgICAgICAgICAgIHByaXZhdGVfa2V5X2Rlcl9wYXRoOiBQYXRoQnVmOjpmcm9tKCIiKSwKLSAgICAgICAgICAgICAgICB1c2FnZV9jb25zdHJhaW50c19wYXRoOiBmdWxsX3BhdGgoInVzYWdlX2NvbnN0cmFpbnRzLmJpbiIpLAotICAgICAgICAgICAgICAgIHN5c3RlbV9zdGF0ZV92YWx1ZV9wYXRoOiBQYXRoQnVmOjpmcm9tKCIiKSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBwZXJpcGhlcmFsX2xvY2tkb3duX2luZm86IFBlcmlwaGVyYWxMb2NrZG93bkluZm8geyB2YWx1ZTogMCB9LAotICAgICAgICAgICAgbWFuaWZlc3RfaWRlbnRpZmllcjogU3RyaW5nOjpmcm9tKCIweDExMTExMTExIiksCi0gICAgICAgICAgICBpbWFnZV92ZXJzaW9uOiBTdHJpbmc6OmZyb20oIjB4MjIyMjIyMjIiKSwKLSAgICAgICAgICAgIGV4dGVuc2lvbnM6IFsKLSAgICAgICAgICAgICAgICBFeHRlbnNpb24gewotICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IFN0cmluZzo6ZnJvbSgiMHgzMzMzMzMzMyIpLAotICAgICAgICAgICAgICAgICAgICBjaGVja3N1bTogU3RyaW5nOjpmcm9tKCIweDQ0NDQ0NDQ0IiksCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBFeHRlbnNpb24gewotICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IFN0cmluZzo6ZnJvbSgiMHg1NTU1NTU1NSIpLAotICAgICAgICAgICAgICAgICAgICBjaGVja3N1bTogU3RyaW5nOjpmcm9tKCIweDU1NTU1NTU1IiksCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBFeHRlbnNpb24gewotICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IFN0cmluZzo6ZnJvbSgiMHg2NjY2NjY2NiIpLAotICAgICAgICAgICAgICAgICAgICBjaGVja3N1bTogU3RyaW5nOjpmcm9tKCIweDY2NjY2NjY2IiksCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBFeHRlbnNpb24gewotICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IFN0cmluZzo6ZnJvbSgiMHg3Nzc3Nzc3NyIpLAotICAgICAgICAgICAgICAgICAgICBjaGVja3N1bTogU3RyaW5nOjpmcm9tKCIweDc3Nzc3Nzc3IiksCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH07Ci0KLSAgICAgICAgbGV0IG11dCB0ZXN0X2l0ZW1zOiBIYXNoTWFwPHVzaXplLCBWZWM8dTg+PiA9IEhhc2hNYXA6Om5ldygpOwotCi0gICAgICAgIGxldCBtdXQgYWRkX3Rlc3RfaXRlbSA9IHxrZXksIHZhbDogVmVjPHU4PiwgZXhwZWN0ZWRfc2l6ZXwgewotICAgICAgICAgICAgYXNzZXJ0X2VxISh2YWwubGVuKCksIGV4cGVjdGVkX3NpemUgYXMgdXNpemUpOwotICAgICAgICAgICAgdGVzdF9pdGVtcy5pbnNlcnQoa2V5IGFzIHVzaXplLCB2YWwpOwotICAgICAgICB9OwotCi0gICAgICAgIGFkZF90ZXN0X2l0ZW0oCi0gICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9NQU5JRkVTVF9JREVOVElGSUVSX09GRlNFVCwKLSAgICAgICAgICAgIHN0cl90b192ZWNfdTgoJmNvbmZpZy5tYW5pZmVzdF9pZGVudGlmaWVyKSwKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX01BTklGRVNUX0lERU5USUZJRVJfU0laRV9CWVRFUywKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zaWduZWRfYnl0ZXMoKSAtPiBSZXN1bHQ8KCksIEltYWdlRXJyb3I+IHsKKyAgICAgICAgbGV0IG11dCBpbWFnZSA9IEltYWdlOjpmcm9tKHZlYyFbMDsgMTAyNF0pOworICAgICAgICBsZXQgZmllbGQgPSBtYW5pZmVzdDo6Uk9NX0VYVF9JTUFHRV9TSUdOQVRVUkU7CisgICAgICAgIGxldCB2YWw6IFt1ODsgbWFuaWZlc3Q6OlJPTV9FWFRfSU1BR0VfU0lHTkFUVVJFLnNpemVfYnl0ZXNdID0KKyAgICAgICAgICAgIFsweEE1OyBtYW5pZmVzdDo6Uk9NX0VYVF9JTUFHRV9TSUdOQVRVUkUuc2l6ZV9ieXRlc107CisgICAgICAgIGltYWdlLnNldF9tYW5pZmVzdF9maWVsZCgmZmllbGQsIHZhbC5pdGVyKCkuY2xvbmVkKCkpPzsKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgIGltYWdlLmFzX3JlZigpW2ZpZWxkLm9mZnNldC4uZmllbGQub2Zmc2V0ICsgZmllbGQuc2l6ZV9ieXRlc10sCisgICAgICAgICAgICB2YWwKICAgICAgICAgKTsKLSAgICAgICAgYWRkX3Rlc3RfaXRlbSgKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0lNQUdFX1ZFUlNJT05fT0ZGU0VULAotICAgICAgICAgICAgc3RyX3RvX3ZlY191OCgmY29uZmlnLmltYWdlX3ZlcnNpb24pLAotICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfSU1BR0VfVkVSU0lPTl9TSVpFX0JZVEVTLAotICAgICAgICApOwotICAgICAgICBhZGRfdGVzdF9pdGVtKAotICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfRVhURU5TSU9OMF9PRkZTRVRfT0ZGU0VULAotICAgICAgICAgICAgc3RyX3RvX3ZlY191OCgmY29uZmlnLmV4dGVuc2lvbnNbMF0ub2Zmc2V0KSwKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjBfT0ZGU0VUX1NJWkVfQllURVMsCi0gICAgICAgICk7Ci0gICAgICAgIGFkZF90ZXN0X2l0ZW0oCi0gICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04xX09GRlNFVF9PRkZTRVQsCi0gICAgICAgICAgICBzdHJfdG9fdmVjX3U4KCZjb25maWcuZXh0ZW5zaW9uc1sxXS5vZmZzZXQpLAotICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfRVhURU5TSU9OMV9PRkZTRVRfU0laRV9CWVRFUywKLSAgICAgICAgKTsKLSAgICAgICAgYWRkX3Rlc3RfaXRlbSgKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjJfT0ZGU0VUX09GRlNFVCwKLSAgICAgICAgICAgIHN0cl90b192ZWNfdTgoJmNvbmZpZy5leHRlbnNpb25zWzJdLm9mZnNldCksCi0gICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04yX09GRlNFVF9TSVpFX0JZVEVTLAotICAgICAgICApOwotICAgICAgICBhZGRfdGVzdF9pdGVtKAotICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfRVhURU5TSU9OM19PRkZTRVRfT0ZGU0VULAotICAgICAgICAgICAgc3RyX3RvX3ZlY191OCgmY29uZmlnLmV4dGVuc2lvbnNbM10ub2Zmc2V0KSwKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjNfT0ZGU0VUX1NJWkVfQllURVMsCi0gICAgICAgICk7Ci0gICAgICAgIGFkZF90ZXN0X2l0ZW0oCi0gICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04wX0NIRUNLU1VNX09GRlNFVCwKLSAgICAgICAgICAgIHN0cl90b192ZWNfdTgoJmNvbmZpZy5leHRlbnNpb25zWzBdLmNoZWNrc3VtKSwKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjBfQ0hFQ0tTVU1fU0laRV9CWVRFUywKLSAgICAgICAgKTsKLSAgICAgICAgYWRkX3Rlc3RfaXRlbSgKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjFfQ0hFQ0tTVU1fT0ZGU0VULAotICAgICAgICAgICAgc3RyX3RvX3ZlY191OCgmY29uZmlnLmV4dGVuc2lvbnNbMV0uY2hlY2tzdW0pLAotICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfRVhURU5TSU9OMV9DSEVDS1NVTV9TSVpFX0JZVEVTLAotICAgICAgICApOwotICAgICAgICBhZGRfdGVzdF9pdGVtKAotICAgICAgICAgICAgbWFuaWZlc3Q6OlJPTV9FWFRfRVhURU5TSU9OMl9DSEVDS1NVTV9PRkZTRVQsCi0gICAgICAgICAgICBzdHJfdG9fdmVjX3U4KCZjb25maWcuZXh0ZW5zaW9uc1syXS5jaGVja3N1bSksCi0gICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04yX0NIRUNLU1VNX1NJWkVfQllURVMsCi0gICAgICAgICk7Ci0gICAgICAgIGFkZF90ZXN0X2l0ZW0oCi0gICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04zX0NIRUNLU1VNX09GRlNFVCwKLSAgICAgICAgICAgIHN0cl90b192ZWNfdTgoJmNvbmZpZy5leHRlbnNpb25zWzNdLmNoZWNrc3VtKSwKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjNfQ0hFQ0tTVU1fU0laRV9CWVRFUywKLSAgICAgICAgKTsKLSAgICAgICAgYWRkX3Rlc3RfaXRlbSgKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX1VTQUdFX0NPTlNUUkFJTlRTX09GRlNFVCwKLSAgICAgICAgICAgIGZzOjpyZWFkKCZjb25maWcuaW5wdXRfZmlsZXMudXNhZ2VfY29uc3RyYWludHNfcGF0aCkKLSAgICAgICAgICAgICAgICAuZXhwZWN0KCJGYWlsZWQgdG8gcmVhZCB1c2FnZSBjb25zdHJhaW50cyEiKSwKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX1VTQUdFX0NPTlNUUkFJTlRTX1NJWkVfQllURVMsCi0gICAgICAgICk7Ci0gICAgICAgIGFkZF90ZXN0X2l0ZW0oCi0gICAgICAgICAgICBtYW5pZmVzdDo6Uk9NX0VYVF9QRVJJUEhFUkFMX0xPQ0tET1dOX0lORk9fT0ZGU0VULAotICAgICAgICAgICAgWzB4QTU7IDE2XS50b192ZWMoKSwKLSAgICAgICAgICAgIG1hbmlmZXN0OjpST01fRVhUX1BFUklQSEVSQUxfTE9DS0RPV05fSU5GT19TSVpFX0JZVEVTLAotICAgICAgICApOwotCi0gICAgICAgIGxldCBtdXQgaW1hZ2UgPSBSYXdJbWFnZTo6bmV3KCZjb25maWcuaW5wdXRfZmlsZXMuaW1hZ2VfcGF0aCk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGltYWdlIGlzIGJsYW5rIHRvIHN0YXJ0IHdpdGguCi0gICAgICAgIGFzc2VydF9lcSEoaW1hZ2UuZGF0YSwgdmVjIVswOyBpbWFnZS5kYXRhLmxlbigpXSk7Ci0KLSAgICAgICAgaW1hZ2UudXBkYXRlX3N0YXRpY19maWVsZHMoJmNvbmZpZyk7Ci0KLSAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5IHNpbmdsZSBieXRlIGluIHRoZSBpbWFnZSwgaWYgaXQgYmVsb25ncyB0byBhCi0gICAgICAgIC8vIGZpZWxkIHVuZGVyIHRlc3QgLSBjb21wYXJlIHdpdGggdGhlIHJlc3BlY3RpdmUgYHRlc3RfdHVwbGVgIGZpZWxkLAotICAgICAgICAvLyBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHplcm8uCi0gICAgICAgIGxldCBtdXQgaSA9IDA7Ci0gICAgICAgIHdoaWxlIGkgPCBpbWFnZS5kYXRhLmxlbigpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBieXRlIGlzIHBhcnQgb2YgdGhlIGZpZWxkcyB1bmRlciB0ZXN0LgotICAgICAgICAgICAgbWF0Y2ggdGVzdF9pdGVtcy5nZXQoJmkpIHsKLSAgICAgICAgICAgICAgICBTb21lKHgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBmaWVsZCB1bmRlciB0ZXN0IHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbgotICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgIGZvciBieXRlIGluIHggewotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxISgqYnl0ZSwgaW1hZ2UuZGF0YVtpXSwgImluZGV4ID0ge30iLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBfID0+IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IG90aGVyIGJ5dGVzIGFyZSB6ZXJvLgotICAgICAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKGltYWdlLmRhdGFbaV0sIDAsICJpbmRleCA9IHt9IiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgT2soKCkpCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9pbWFnZS9zcmMvbWFuaWZlc3QucnMgYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2ltYWdlL3NyYy9tYW5pZmVzdC5ycwppbmRleCA1YzZiNDczLi4yOTU5OTY0IDEwMDY0NAotLS0gYS9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2ltYWdlL3NyYy9tYW5pZmVzdC5ycworKysgYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL2ltYWdlL3NyYy9tYW5pZmVzdC5ycwpAQCAtMTAsMTY0ICsxMCwxMDIgQEAKIC8vICAgICAtLW91dHB1dC1kaXI9PGRlc3RpbmF0aW9uIGRpcj4KIC8vICAgICAtLW91dHB1dC1maWxlcz1ydXN0CiAKLS8vLyBNYW5pZmVzdCBmaWVsZCBtYW5pZmVzdF9pZGVudGlmaWVyIG9mZnNldCBmcm9tIHRoZSBiYXNlLgotcHViIGNvbnN0IFJPTV9FWFRfTUFOSUZFU1RfSURFTlRJRklFUl9PRkZTRVQ6IHUzMiA9IDA7CitwdWIgc3RydWN0IE1hbmlmZXN0RmllbGQgeworICAgIHB1YiBvZmZzZXQ6IHVzaXplLAorICAgIHB1YiBzaXplX2J5dGVzOiB1c2l6ZSwKK30KIAotLy8vIE1hbmlmZXN0IGZpZWxkIG1hbmlmZXN0X2lkZW50aWZpZXIgc2l6ZSBpbiBieXRlcy4KLXB1YiBjb25zdCBST01fRVhUX01BTklGRVNUX0lERU5USUZJRVJfU0laRV9CWVRFUzogdTMyID0gNDsKK3B1YiBjb25zdCBST01fRVhUX01BTklGRVNUX0lERU5USUZJRVI6IE1hbmlmZXN0RmllbGQgPSBNYW5pZmVzdEZpZWxkIHsKKyAgICBvZmZzZXQ6IDAsCisgICAgc2l6ZV9ieXRlczogNCwKK307CiAKLS8vLyBNYW5pZmVzdCBmaWVsZCBtYW5pZmVzdF9pZGVudGlmaWVyIHNpemUgaW4gd29yZHMuCi1wdWIgY29uc3QgUk9NX0VYVF9NQU5JRkVTVF9JREVOVElGSUVSX1NJWkVfV09SRFM6IHUzMiA9IDE7CitwdWIgY29uc3QgUk9NX0VYVF9JTUFHRV9TSUdOQVRVUkU6IE1hbmlmZXN0RmllbGQgPSBNYW5pZmVzdEZpZWxkIHsKKyAgICBvZmZzZXQ6IDgsCisgICAgc2l6ZV9ieXRlczogMzg0LAorfTsKIAotLy8vIE1hbmlmZXN0IGZpZWxkIGltYWdlX3NpZ25hdHVyZSBvZmZzZXQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX0lNQUdFX1NJR05BVFVSRV9PRkZTRVQ6IHUzMiA9IDg7CitwdWIgY29uc3QgUk9NX0VYVF9JTUFHRV9MRU5HVEg6IE1hbmlmZXN0RmllbGQgPSBNYW5pZmVzdEZpZWxkIHsKKyAgICBvZmZzZXQ6IDM5MiwKKyAgICBzaXplX2J5dGVzOiA0LAorfTsKIAotLy8vIE1hbmlmZXN0IGZpZWxkIGltYWdlX3NpZ25hdHVyZSBzaXplIGluIGJ5dGVzLgotcHViIGNvbnN0IFJPTV9FWFRfSU1BR0VfU0lHTkFUVVJFX1NJWkVfQllURVM6IHUzMiA9IDM4NDsKK3B1YiBjb25zdCBST01fRVhUX0lNQUdFX1ZFUlNJT046IE1hbmlmZXN0RmllbGQgPSBNYW5pZmVzdEZpZWxkIHsKKyAgICBvZmZzZXQ6IDM5NiwKKyAgICBzaXplX2J5dGVzOiA0LAorfTsKIAotLy8vIE1hbmlmZXN0IGZpZWxkIGltYWdlX3NpZ25hdHVyZSBzaXplIGluIHdvcmRzLgotcHViIGNvbnN0IFJPTV9FWFRfSU1BR0VfU0lHTkFUVVJFX1NJWkVfV09SRFM6IHUzMiA9IDk2OworcHViIGNvbnN0IFJPTV9FWFRfSU1BR0VfVElNRVNUQU1QOiBNYW5pZmVzdEZpZWxkID0gTWFuaWZlc3RGaWVsZCB7CisgICAgb2Zmc2V0OiA0MDAsCisgICAgc2l6ZV9ieXRlczogOCwKK307CiAKLS8vLyBNYW5pZmVzdCBmaWVsZCBpbWFnZV9sZW5ndGggb2Zmc2V0IGZyb20gdGhlIGJhc2UuCi1wdWIgY29uc3QgUk9NX0VYVF9JTUFHRV9MRU5HVEhfT0ZGU0VUOiB1MzIgPSAzOTI7CitwdWIgY29uc3QgUk9NX0VYVF9TSUdOQVRVUkVfS0VZX1BVQkxJQ19FWFBPTkVOVDogTWFuaWZlc3RGaWVsZCA9CisgICAgTWFuaWZlc3RGaWVsZCB7CisgICAgICAgIG9mZnNldDogNDA4LAorICAgICAgICBzaXplX2J5dGVzOiA0LAorICAgIH07CiAKLS8vLyBNYW5pZmVzdCBmaWVsZCBpbWFnZV9sZW5ndGggc2l6ZSBpbiBieXRlcy4KLXB1YiBjb25zdCBST01fRVhUX0lNQUdFX0xFTkdUSF9TSVpFX0JZVEVTOiB1MzIgPSA0OworcHViIGNvbnN0IFJPTV9FWFRfVVNBR0VfQ09OU1RSQUlOVFM6IE1hbmlmZXN0RmllbGQgPSBNYW5pZmVzdEZpZWxkIHsKKyAgICBvZmZzZXQ6IDQxNiwKKyAgICBzaXplX2J5dGVzOiAzMiwKK307CiAKLS8vLyBNYW5pZmVzdCBmaWVsZCBpbWFnZV9sZW5ndGggc2l6ZSBpbiB3b3Jkcy4KLXB1YiBjb25zdCBST01fRVhUX0lNQUdFX0xFTkdUSF9TSVpFX1dPUkRTOiB1MzIgPSAxOworcHViIGNvbnN0IFJPTV9FWFRfUEVSSVBIRVJBTF9MT0NLRE9XTl9JTkZPOiBNYW5pZmVzdEZpZWxkID0gTWFuaWZlc3RGaWVsZCB7CisgICAgb2Zmc2V0OiA0NDgsCisgICAgc2l6ZV9ieXRlczogMTYsCit9OwogCi0vLy8gTWFuaWZlc3QgZmllbGQgaW1hZ2VfdmVyc2lvbiBvZmZzZXQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX0lNQUdFX1ZFUlNJT05fT0ZGU0VUOiB1MzIgPSAzOTY7CitwdWIgY29uc3QgUk9NX0VYVF9TSUdOQVRVUkVfS0VZX01PRFVMVVM6IE1hbmlmZXN0RmllbGQgPSBNYW5pZmVzdEZpZWxkIHsKKyAgICBvZmZzZXQ6IDQ2NCwKKyAgICBzaXplX2J5dGVzOiAzODQsCit9OwogCi0vLy8gTWFuaWZlc3QgZmllbGQgaW1hZ2VfdmVyc2lvbiBzaXplIGluIGJ5dGVzLgotcHViIGNvbnN0IFJPTV9FWFRfSU1BR0VfVkVSU0lPTl9TSVpFX0JZVEVTOiB1MzIgPSA0OworcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OMF9PRkZTRVQ6IE1hbmlmZXN0RmllbGQgPSBNYW5pZmVzdEZpZWxkIHsKKyAgICBvZmZzZXQ6IDg0OCwKKyAgICBzaXplX2J5dGVzOiA0LAorfTsKIAotLy8vIE1hbmlmZXN0IGZpZWxkIGltYWdlX3ZlcnNpb24gc2l6ZSBpbiB3b3Jkcy4KLXB1YiBjb25zdCBST01fRVhUX0lNQUdFX1ZFUlNJT05fU0laRV9XT1JEUzogdTMyID0gMTsKK3B1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjBfQ0hFQ0tTVU06IE1hbmlmZXN0RmllbGQgPSBNYW5pZmVzdEZpZWxkIHsKKyAgICBvZmZzZXQ6IDg1MiwKKyAgICBzaXplX2J5dGVzOiA0LAorfTsKIAotLy8vIE1hbmlmZXN0IGZpZWxkIGltYWdlX3RpbWVzdGFtcCBvZmZzZXQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX0lNQUdFX1RJTUVTVEFNUF9PRkZTRVQ6IHUzMiA9IDQwMDsKK3B1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjFfT0ZGU0VUOiBNYW5pZmVzdEZpZWxkID0gTWFuaWZlc3RGaWVsZCB7CisgICAgb2Zmc2V0OiA4NTYsCisgICAgc2l6ZV9ieXRlczogNCwKK307CiAKLS8vLyBNYW5pZmVzdCBmaWVsZCBpbWFnZV90aW1lc3RhbXAgc2l6ZSBpbiBieXRlcy4KLXB1YiBjb25zdCBST01fRVhUX0lNQUdFX1RJTUVTVEFNUF9TSVpFX0JZVEVTOiB1MzIgPSA4OworcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OMV9DSEVDS1NVTTogTWFuaWZlc3RGaWVsZCA9IE1hbmlmZXN0RmllbGQgeworICAgIG9mZnNldDogODYwLAorICAgIHNpemVfYnl0ZXM6IDQsCit9OwogCi0vLy8gTWFuaWZlc3QgZmllbGQgaW1hZ2VfdGltZXN0YW1wIHNpemUgaW4gd29yZHMuCi1wdWIgY29uc3QgUk9NX0VYVF9JTUFHRV9USU1FU1RBTVBfU0laRV9XT1JEUzogdTMyID0gMjsKK3B1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjJfT0ZGU0VUOiBNYW5pZmVzdEZpZWxkID0gTWFuaWZlc3RGaWVsZCB7CisgICAgb2Zmc2V0OiA4NjQsCisgICAgc2l6ZV9ieXRlczogNCwKK307CiAKLS8vLyBNYW5pZmVzdCBmaWVsZCBzaWduYXR1cmVfa2V5X3B1YmxpY19leHBvbmVudCBvZmZzZXQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX1NJR05BVFVSRV9LRVlfUFVCTElDX0VYUE9ORU5UX09GRlNFVDogdTMyID0gNDA4OworcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OMl9DSEVDS1NVTTogTWFuaWZlc3RGaWVsZCA9IE1hbmlmZXN0RmllbGQgeworICAgIG9mZnNldDogODY4LAorICAgIHNpemVfYnl0ZXM6IDQsCit9OwogCi0vLy8gTWFuaWZlc3QgZmllbGQgc2lnbmF0dXJlX2tleV9wdWJsaWNfZXhwb25lbnQgc2l6ZSBpbiBieXRlcy4KLXB1YiBjb25zdCBST01fRVhUX1NJR05BVFVSRV9LRVlfUFVCTElDX0VYUE9ORU5UX1NJWkVfQllURVM6IHUzMiA9IDQ7CitwdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04zX09GRlNFVDogTWFuaWZlc3RGaWVsZCA9IE1hbmlmZXN0RmllbGQgeworICAgIG9mZnNldDogODcyLAorICAgIHNpemVfYnl0ZXM6IDQsCit9OwogCi0vLy8gTWFuaWZlc3QgZmllbGQgc2lnbmF0dXJlX2tleV9wdWJsaWNfZXhwb25lbnQgc2l6ZSBpbiB3b3Jkcy4KLXB1YiBjb25zdCBST01fRVhUX1NJR05BVFVSRV9LRVlfUFVCTElDX0VYUE9ORU5UX1NJWkVfV09SRFM6IHUzMiA9IDE7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCB1c2FnZV9jb25zdHJhaW50cyBvZmZzZXQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX1VTQUdFX0NPTlNUUkFJTlRTX09GRlNFVDogdTMyID0gNDE2OwotCi0vLy8gTWFuaWZlc3QgZmllbGQgdXNhZ2VfY29uc3RyYWludHMgc2l6ZSBpbiBieXRlcy4KLXB1YiBjb25zdCBST01fRVhUX1VTQUdFX0NPTlNUUkFJTlRTX1NJWkVfQllURVM6IHUzMiA9IDMyOwotCi0vLy8gTWFuaWZlc3QgZmllbGQgdXNhZ2VfY29uc3RyYWludHMgc2l6ZSBpbiB3b3Jkcy4KLXB1YiBjb25zdCBST01fRVhUX1VTQUdFX0NPTlNUUkFJTlRTX1NJWkVfV09SRFM6IHUzMiA9IDg7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBwZXJpcGhlcmFsX2xvY2tkb3duX2luZm8gb2Zmc2V0IGZyb20gdGhlIGJhc2UuCi1wdWIgY29uc3QgUk9NX0VYVF9QRVJJUEhFUkFMX0xPQ0tET1dOX0lORk9fT0ZGU0VUOiB1MzIgPSA0NDg7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBwZXJpcGhlcmFsX2xvY2tkb3duX2luZm8gc2l6ZSBpbiBieXRlcy4KLXB1YiBjb25zdCBST01fRVhUX1BFUklQSEVSQUxfTE9DS0RPV05fSU5GT19TSVpFX0JZVEVTOiB1MzIgPSAxNjsKLQotLy8vIE1hbmlmZXN0IGZpZWxkIHBlcmlwaGVyYWxfbG9ja2Rvd25faW5mbyBzaXplIGluIHdvcmRzLgotcHViIGNvbnN0IFJPTV9FWFRfUEVSSVBIRVJBTF9MT0NLRE9XTl9JTkZPX1NJWkVfV09SRFM6IHUzMiA9IDQ7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBzaWduYXR1cmVfa2V5X21vZHVsdXMgb2Zmc2V0IGZyb20gdGhlIGJhc2UuCi1wdWIgY29uc3QgUk9NX0VYVF9TSUdOQVRVUkVfS0VZX01PRFVMVVNfT0ZGU0VUOiB1MzIgPSA0NjQ7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBzaWduYXR1cmVfa2V5X21vZHVsdXMgc2l6ZSBpbiBieXRlcy4KLXB1YiBjb25zdCBST01fRVhUX1NJR05BVFVSRV9LRVlfTU9EVUxVU19TSVpFX0JZVEVTOiB1MzIgPSAzODQ7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBzaWduYXR1cmVfa2V5X21vZHVsdXMgc2l6ZSBpbiB3b3Jkcy4KLXB1YiBjb25zdCBST01fRVhUX1NJR05BVFVSRV9LRVlfTU9EVUxVU19TSVpFX1dPUkRTOiB1MzIgPSA5NjsKLQotLy8vIE1hbmlmZXN0IGZpZWxkIGV4dGVuc2lvbjBfb2Zmc2V0IG9mZnNldCBmcm9tIHRoZSBiYXNlLgotcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OMF9PRkZTRVRfT0ZGU0VUOiB1MzIgPSA4NDg7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBleHRlbnNpb24wX29mZnNldCBzaXplIGluIGJ5dGVzLgotcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OMF9PRkZTRVRfU0laRV9CWVRFUzogdTMyID0gNDsKLQotLy8vIE1hbmlmZXN0IGZpZWxkIGV4dGVuc2lvbjBfb2Zmc2V0IHNpemUgaW4gd29yZHMuCi1wdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04wX09GRlNFVF9TSVpFX1dPUkRTOiB1MzIgPSAxOwotCi0vLy8gTWFuaWZlc3QgZmllbGQgZXh0ZW5zaW9uMF9jaGVja3N1bSBvZmZzZXQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjBfQ0hFQ0tTVU1fT0ZGU0VUOiB1MzIgPSA4NTI7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBleHRlbnNpb24wX2NoZWNrc3VtIHNpemUgaW4gYnl0ZXMuCi1wdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04wX0NIRUNLU1VNX1NJWkVfQllURVM6IHUzMiA9IDQ7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBleHRlbnNpb24wX2NoZWNrc3VtIHNpemUgaW4gd29yZHMuCi1wdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04wX0NIRUNLU1VNX1NJWkVfV09SRFM6IHUzMiA9IDE7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBleHRlbnNpb24xX29mZnNldCBvZmZzZXQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjFfT0ZGU0VUX09GRlNFVDogdTMyID0gODU2OwotCi0vLy8gTWFuaWZlc3QgZmllbGQgZXh0ZW5zaW9uMV9vZmZzZXQgc2l6ZSBpbiBieXRlcy4KLXB1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjFfT0ZGU0VUX1NJWkVfQllURVM6IHUzMiA9IDQ7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBleHRlbnNpb24xX29mZnNldCBzaXplIGluIHdvcmRzLgotcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OMV9PRkZTRVRfU0laRV9XT1JEUzogdTMyID0gMTsKLQotLy8vIE1hbmlmZXN0IGZpZWxkIGV4dGVuc2lvbjFfY2hlY2tzdW0gb2Zmc2V0IGZyb20gdGhlIGJhc2UuCi1wdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04xX0NIRUNLU1VNX09GRlNFVDogdTMyID0gODYwOwotCi0vLy8gTWFuaWZlc3QgZmllbGQgZXh0ZW5zaW9uMV9jaGVja3N1bSBzaXplIGluIGJ5dGVzLgotcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OMV9DSEVDS1NVTV9TSVpFX0JZVEVTOiB1MzIgPSA0OwotCi0vLy8gTWFuaWZlc3QgZmllbGQgZXh0ZW5zaW9uMV9jaGVja3N1bSBzaXplIGluIHdvcmRzLgotcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OMV9DSEVDS1NVTV9TSVpFX1dPUkRTOiB1MzIgPSAxOwotCi0vLy8gTWFuaWZlc3QgZmllbGQgZXh0ZW5zaW9uMl9vZmZzZXQgb2Zmc2V0IGZyb20gdGhlIGJhc2UuCi1wdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04yX09GRlNFVF9PRkZTRVQ6IHUzMiA9IDg2NDsKLQotLy8vIE1hbmlmZXN0IGZpZWxkIGV4dGVuc2lvbjJfb2Zmc2V0IHNpemUgaW4gYnl0ZXMuCi1wdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04yX09GRlNFVF9TSVpFX0JZVEVTOiB1MzIgPSA0OwotCi0vLy8gTWFuaWZlc3QgZmllbGQgZXh0ZW5zaW9uMl9vZmZzZXQgc2l6ZSBpbiB3b3Jkcy4KLXB1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjJfT0ZGU0VUX1NJWkVfV09SRFM6IHUzMiA9IDE7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBleHRlbnNpb24yX2NoZWNrc3VtIG9mZnNldCBmcm9tIHRoZSBiYXNlLgotcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OMl9DSEVDS1NVTV9PRkZTRVQ6IHUzMiA9IDg2ODsKLQotLy8vIE1hbmlmZXN0IGZpZWxkIGV4dGVuc2lvbjJfY2hlY2tzdW0gc2l6ZSBpbiBieXRlcy4KLXB1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjJfQ0hFQ0tTVU1fU0laRV9CWVRFUzogdTMyID0gNDsKLQotLy8vIE1hbmlmZXN0IGZpZWxkIGV4dGVuc2lvbjJfY2hlY2tzdW0gc2l6ZSBpbiB3b3Jkcy4KLXB1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjJfQ0hFQ0tTVU1fU0laRV9XT1JEUzogdTMyID0gMTsKLQotLy8vIE1hbmlmZXN0IGZpZWxkIGV4dGVuc2lvbjNfb2Zmc2V0IG9mZnNldCBmcm9tIHRoZSBiYXNlLgotcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OM19PRkZTRVRfT0ZGU0VUOiB1MzIgPSA4NzI7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBleHRlbnNpb24zX29mZnNldCBzaXplIGluIGJ5dGVzLgotcHViIGNvbnN0IFJPTV9FWFRfRVhURU5TSU9OM19PRkZTRVRfU0laRV9CWVRFUzogdTMyID0gNDsKLQotLy8vIE1hbmlmZXN0IGZpZWxkIGV4dGVuc2lvbjNfb2Zmc2V0IHNpemUgaW4gd29yZHMuCi1wdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04zX09GRlNFVF9TSVpFX1dPUkRTOiB1MzIgPSAxOwotCi0vLy8gTWFuaWZlc3QgZmllbGQgZXh0ZW5zaW9uM19jaGVja3N1bSBvZmZzZXQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX0VYVEVOU0lPTjNfQ0hFQ0tTVU1fT0ZGU0VUOiB1MzIgPSA4NzY7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBleHRlbnNpb24zX2NoZWNrc3VtIHNpemUgaW4gYnl0ZXMuCi1wdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04zX0NIRUNLU1VNX1NJWkVfQllURVM6IHUzMiA9IDQ7Ci0KLS8vLyBNYW5pZmVzdCBmaWVsZCBleHRlbnNpb24zX2NoZWNrc3VtIHNpemUgaW4gd29yZHMuCi1wdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04zX0NIRUNLU1VNX1NJWkVfV09SRFM6IHUzMiA9IDE7CitwdWIgY29uc3QgUk9NX0VYVF9FWFRFTlNJT04zX0NIRUNLU1VNOiBNYW5pZmVzdEZpZWxkID0gTWFuaWZlc3RGaWVsZCB7CisgICAgb2Zmc2V0OiA4NzYsCisgICAgc2l6ZV9ieXRlczogNCwKK307CiAKIC8vLyBNYW5pZmVzdCBvZmZzZXQgc2lnbmVkX2FyZWFfc3RhcnQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX1NJR05FRF9BUkVBX1NUQVJUX09GRlNFVDogdTMyID0gMzkyOworcHViIGNvbnN0IFJPTV9FWFRfU0lHTkVEX0FSRUFfU1RBUlRfT0ZGU0VUOiB1c2l6ZSA9IDM5MjsKIAogLy8vIE1hbmlmZXN0IG9mZnNldCBpbnRlcnJ1cHRfdmVjdG9yIGZyb20gdGhlIGJhc2UuCi1wdWIgY29uc3QgUk9NX0VYVF9JTlRFUlJVUFRfVkVDVE9SX09GRlNFVDogdTMyID0gMTAyNDsKK3B1YiBjb25zdCBST01fRVhUX0lOVEVSUlVQVF9WRUNUT1JfT0ZGU0VUOiB1c2l6ZSA9IDEwMjQ7CiAKIC8vLyBNYW5pZmVzdCBvZmZzZXQgZW50cnlfcG9pbnQgZnJvbSB0aGUgYmFzZS4KLXB1YiBjb25zdCBST01fRVhUX0VOVFJZX1BPSU5UX09GRlNFVDogdTMyID0gMTE1MjsKK3B1YiBjb25zdCBST01fRVhUX0VOVFJZX1BPSU5UX09GRlNFVDogdXNpemUgPSAxMTUyOwpkaWZmIC0tZ2l0IGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9zcmMvbWFpbi5ycyBiL3N3L2hvc3Qvcm9tX2V4dF9pbWFnZV90b29scy9zaWduZXIvc3JjL21haW4ucnMKaW5kZXggYzc2MGQ4OS4uMDIzYWEzNyAxMDA2NDQKLS0tIGEvc3cvaG9zdC9yb21fZXh0X2ltYWdlX3Rvb2xzL3NpZ25lci9zcmMvbWFpbi5ycworKysgYi9zdy9ob3N0L3JvbV9leHRfaW1hZ2VfdG9vbHMvc2lnbmVyL3NyYy9tYWluLnJzCkBAIC05LDkxICs5LDE4NiBAQAogdXNlIHN0ZDo6ZW52OwogdXNlIHN0ZDo6ZnM7CiB1c2Ugc3RkOjpwYXRoOjpQYXRoOwordXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsKIAotdXNlIHJvbV9leHRfY29uZmlnOjpwYXJzZXI6OlBhcnNlZENvbmZpZzsKLXVzZSByb21fZXh0X2ltYWdlOjppbWFnZTo6UmF3SW1hZ2U7Cit1c2Ugcm9tX2V4dF9pbWFnZTo6aW1hZ2U6OkltYWdlOwordXNlIHJvbV9leHRfaW1hZ2U6Om1hbmlmZXN0OwogCiB1c2UgbXVuZGFuZTo6aGFzaDo6U2hhMjU2OwogdXNlIG11bmRhbmU6OnB1YmxpYzo6cnNhOjpSc2FQa2NzMXYxNTsKLXVzZSBtdW5kYW5lOjpwdWJsaWM6OnJzYTo6UnNhUHJpdktleTsKLXVzZSBtdW5kYW5lOjpwdWJsaWM6OnJzYTo6UnNhU2lnbmF0dXJlOwogdXNlIG11bmRhbmU6OnB1YmxpYzo6cnNhOjpCMzA3MjsKIHVzZSBtdW5kYW5lOjpwdWJsaWM6OkRlclByaXZhdGVLZXk7CiB1c2UgbXVuZGFuZTo6cHVibGljOjpTaWduYXR1cmU7CiAKLWZuIG1haW4oKSB7Ci0gICAgbGV0IGFyZzogU3RyaW5nID0gZW52OjphcmdzKCkubnRoKDEpLmV4cGVjdCgiQ29uZmlnIHBhdGggaXMgbWlzc2luZyIpOwordXNlIGFueWhvdzo6YmFpbDsKK3VzZSBhbnlob3c6OmVuc3VyZTsKK3VzZSBhbnlob3c6OkNvbnRleHQ7Cit1c2UgYW55aG93OjpSZXN1bHQ7CiAKLSAgICBsZXQgY29uZmlnX3BhdGggPSBQYXRoOjpuZXcoJmFyZyk7CisvLyBUeXBlIGFsaWFzZXMgZm9yIGNvbnZlbmllbmNlLgordHlwZSBJbWFnZVNpZ25hdHVyZSA9CisgICAgbXVuZGFuZTo6cHVibGljOjpyc2E6OlJzYVNpZ25hdHVyZTxCMzA3MiwgUnNhUGtjczF2MTUsIFNoYTI1Nj47Cit0eXBlIFByaXZhdGVLZXkgPSBtdW5kYW5lOjpwdWJsaWM6OnJzYTo6UnNhUHJpdktleTxCMzA3Mj47CiAKLSAgICAvLyBQYXJzZSB0aGUgY29uZmlnLgotICAgIGxldCBjb25maWcgPSBQYXJzZWRDb25maWc6Om5ldygmY29uZmlnX3BhdGgpOwotCi0gICAgLy8gUmVhZCByYXcgYmluYXJ5LgotICAgIGxldCBtdXQgaW1hZ2UgPSBSYXdJbWFnZTo6bmV3KCZjb25maWcuaW5wdXRfZmlsZXMuaW1hZ2VfcGF0aCk7Ci0KLSAgICAvLyBHZXQgdGhlIHByaXZhdGUga2V5IHVzZWQgZm9yIHNpZ25hdHVyZSBnZW5lcmF0aW9uLiBJdCBpcyBhbHNvIHVzZWQgdG8KLSAgICAvLyBleHRyYWN0IGtleSBwdWJsaWMgZXhwb25lbnQgYW5kIG1vZHVsdXMuCi0gICAgbGV0IHByaXZhdGVfa2V5X2RlciA9IGZzOjpyZWFkKCZjb25maWcuaW5wdXRfZmlsZXMucHJpdmF0ZV9rZXlfZGVyX3BhdGgpCi0gICAgICAgIC5leHBlY3QoIkZhaWxlZCB0byByZWFkIHRoZSBpbWFnZSEiKTsKLQotICAgIC8vIFVwZGF0ZSAic2lnbmVkIiBtYW5pZmVzdCBmaWVsZHMuCi0gICAgaW1hZ2UudXBkYXRlX3N0YXRpY19maWVsZHMoJmNvbmZpZyk7Ci0KLSAgICAvLyBDb252ZXJ0IEFTTi4xIERFUiBwcml2YXRlIGtleSBpbnRvIE11bmRhbmUgUnNhUHJpdktleS4KLSAgICBsZXQgcHJpdmF0ZV9rZXkgPSBSc2FQcml2S2V5OjpwYXJzZV9mcm9tX2RlcigmcHJpdmF0ZV9rZXlfZGVyKQotICAgICAgICAuZXhwZWN0KCJGYWlsZWQgdG8gcGFyc2UgcHJpdmF0ZSBrZXkhIik7Ci0KLSAgICBsZXQgbXV0IGV4cG9uZW50ID0gcHJpdmF0ZV9rZXkucHVibGljX2V4cG9uZW50X2JlKCk7Ci0gICAgLy8gRW5jb2RlIHB1YmxpYyBrZXkgY29tcG9uZW50cyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIuCi0gICAgZXhwb25lbnQucmV2ZXJzZSgpOwotICAgIGltYWdlLnVwZGF0ZV9leHBvbmVudF9maWVsZCgmZXhwb25lbnQpOwotCi0gICAgbGV0IG11dCBtb2R1bHVzID0gcHJpdmF0ZV9rZXkucHVibGljX21vZHVsdXNfYmUoKTsKLSAgICAvLyBFbmNvZGUgcHVibGljIGtleSBjb21wb25lbnRzIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci4KLSAgICBtb2R1bHVzLnJldmVyc2UoKTsKLSAgICBpbWFnZS51cGRhdGVfbW9kdWx1c19maWVsZCgmbW9kdWx1cyk7Ci0KLSAgICAvLyBQcm9kdWNlIHRoZSBzaWduYXR1cmUgZnJvbSBjb25jYXRlbmF0ZWQgc3lzdGVtX3N0YXRlX3ZhbHVlLAotICAgIC8vIGRldmljZV91c2FnZV92YWx1ZSBhbmQgdGhlIHBvcnRpb24gb2YgdGhlICJzaWduZWQiIHBvcnRpb24gb2YgdGhlIGltYWdlLgotICAgIGltYWdlLnVwZGF0ZV90aW1lc3RhbXBfZmllbGQoKTsKLSAgICBsZXQgaW1hZ2Vfc2lnbl9kYXRhID0gaW1hZ2UuZGF0YV90b19zaWduKCk7Ci0gICAgbGV0IGRldmljZV91c2FnZV92YWx1ZSA9Ci0gICAgICAgICZkZXZpY2VfdXNhZ2VfdmFsdWUoJmNvbmZpZy5pbnB1dF9maWxlcy51c2FnZV9jb25zdHJhaW50c19wYXRoKTsKLSAgICBsZXQgc3lzdGVtX3N0YXRlX3ZhbHVlID0KLSAgICAgICAgJnN5c3RlbV9zdGF0ZV92YWx1ZSgmY29uZmlnLmlucHV0X2ZpbGVzLnN5c3RlbV9zdGF0ZV92YWx1ZV9wYXRoKTsKLQotICAgIGxldCBtdXQgbWVzc2FnZV90b19zaWduID0gVmVjOjo8dTg+OjpuZXcoKTsKLSAgICBtZXNzYWdlX3RvX3NpZ24uZXh0ZW5kX2Zyb21fc2xpY2Uoc3lzdGVtX3N0YXRlX3ZhbHVlKTsKLSAgICBtZXNzYWdlX3RvX3NpZ24uZXh0ZW5kX2Zyb21fc2xpY2UoZGV2aWNlX3VzYWdlX3ZhbHVlKTsKLSAgICBtZXNzYWdlX3RvX3NpZ24uZXh0ZW5kX2Zyb21fc2xpY2UoaW1hZ2Vfc2lnbl9kYXRhKTsKLQotICAgIGxldCBzaWduYXR1cmUgPSBSc2FTaWduYXR1cmU6OjxCMzA3MiwgUnNhUGtjczF2MTUsIFNoYTI1Nj46OnNpZ24oCi0gICAgICAgICZwcml2YXRlX2tleSwKLSAgICAgICAgJm1lc3NhZ2VfdG9fc2lnbiwKLSAgICApCi0gICAgLmV4cGVjdCgiRmFpbGVkIHRvIHNpZ24hIik7Ci0KLSAgICBpbWFnZS51cGRhdGVfc2lnbmF0dXJlX2ZpZWxkKCZzaWduYXR1cmUuYnl0ZXMoKSk7Ci0KLSAgICAvLyBUaGUgd2hvbGUgaW1hZ2UgaGFzIGJlZW4gdXBkYXRlZCBhbmQgc2lnbmVkLCB3cml0ZSB0aGUgcmVzdWx0IHRvIGRpc2suCi0gICAgaW1hZ2Uud3JpdGVfZmlsZSgpOworLy8gVE9ETzogUmVtb3ZlIHRoaXMgc3RydWN0IHdoZW4gdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGludGVncmF0ZWQgaW50byBgb3BlbnRpdGFudG9vbGAuCitzdHJ1Y3QgQXJncyB7CisgICAgaW5wdXQ6IFBhdGhCdWYsCisgICAgcHJpdl9rZXk6IFBhdGhCdWYsCisgICAgb3V0cHV0OiBQYXRoQnVmLAogfQogCi0vLy8gR2VuZXJhdGVzIHRoZSBkZXZpY2UgdXNhZ2UgdmFsdWUuCi0vLy8KLS8vLyBUaGlzIHZhbHVlIGlzIGV4dHJhcG9sYXRlZCBmcm9tIHRoZSBST01fRVhUIG1hbmlmZXN0IHVzYWdlX2NvbnN0cmFpbnRzCi0vLy8gZmllbGQsIGFuZCBkb2VzIG5vdCByZXNpZGUgaW4gdGhlIFJPTV9FWFQgbWFuaWZlc3QgZGlyZWN0bHkuCi1wdWIgZm4gZGV2aWNlX3VzYWdlX3ZhbHVlKHBhdGg6ICZQYXRoKSAtPiBWZWM8dTg+IHsKLSAgICBsZXQgX3VzYWdlX2NvbnN0cmFpbnRzID0KLSAgICAgICAgZnM6OnJlYWQocGF0aCkuZXhwZWN0KCJGYWlsZWQgdG8gcmVhZCB1c2FnZSBjb25zdHJhaW50cyEiKTsKLQotICAgIC8vIFRPRE86IGdlbmVyYXRlIHRoZSBkZXZpY2VfdXNhZ2VfdmFsdWUgZnJvbSB1c2FnZV9jb25zdHJhaW50cy4KLSAgICAvLyAgICAgICBtZWFud2hpbGUgdXNlIGEgImR1bW15IiBoYXJkLWNvZGVkIHZlY3Rvci4KLSAgICB2ZWMhWzB4QTU7IDEwMjRdCitpbXBsIEFyZ3MgeworICAgIHB1YiBmbiBuZXcoYXJnczogZW52OjpBcmdzT3MpIC0+IFJlc3VsdDxBcmdzPiB7CisgICAgICAgIGxldCBhcmdzID0gYXJncy5za2lwKDEpLmNvbGxlY3Q6OjxWZWM8Xz4+KCk7CisgICAgICAgIG1hdGNoIGFyZ3MuYXNfc2xpY2UoKSB7CisgICAgICAgICAgICBbaW5wdXQsIHByaXZfa2V5LCBvdXRwdXRdID0+IE9rKEFyZ3MgeworICAgICAgICAgICAgICAgICAgICBpbnB1dDogUGF0aEJ1Zjo6ZnJvbShpbnB1dCksCisgICAgICAgICAgICAgICAgICAgIHByaXZfa2V5OiBQYXRoQnVmOjpmcm9tKHByaXZfa2V5KSwKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiBQYXRoQnVmOjpmcm9tKG91dHB1dCksCisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICBhcmdzID0+IGJhaWwhKCJFeHBlY3RlZCBleGFjdGx5IDMgcG9zaXRpb25hbCBhcmd1bWVudHM6IGlucHV0LCBwcml2YXRlIGtleSwgYW5kIG91dHB1dCwgZ290OiB7fS4iLCBhcmdzLmxlbigpKSwKKyAgICAgICAgfQorICAgIH0KIH0KIAotLy8vIE9idGFpbnMgdGhlIHN5c3RlbSBzdGF0ZSB2YWx1ZSBmcm9tIHRoZSBiaW5hcnkgb24gZGlzay4KLXB1YiBmbiBzeXN0ZW1fc3RhdGVfdmFsdWUocGF0aDogJlBhdGgpIC0+IFZlYzx1OD4gewotICAgIGZzOjpyZWFkKHBhdGgpLmV4cGVjdCgiRmFpbGVkIHRvIHJlYWQgc3lzdGVtIHN0YXRlIHZhbHVlISIpCisvLy8gUGFyc2VzIGFuIHVuc2lnbmVkIGJpZy1lbmRpYW4gaGV4IHN0cmluZyBpbnRvIGEgbGl0dGxlLWVuZGlhbiBieXRlIHZlY3Rvci4KK2ZuIHBhcnNlX2hleF9zdHIoaGV4X3N0cjogJnN0cikgLT4gUmVzdWx0PFZlYzx1OD4+IHsKKyAgICBlbnN1cmUhKAorICAgICAgICBoZXhfc3RyLnN0YXJ0c193aXRoKCIweCIpCisgICAgICAgICAgICAmJiBoZXhfc3RyLmxlbigpID4gMgorICAgICAgICAgICAgJiYgaGV4X3N0ci5sZW4oKSAlIDIgPT0gMCwKKyAgICAgICAgIkludmFsaWQgaGV4IHN0cmluZzoge30iLAorICAgICAgICBoZXhfc3RyCisgICAgKTsKKyAgICBsZXQgYnl0ZXMgPSAoMi4uaGV4X3N0ci5sZW4oKSkKKyAgICAgICAgLnN0ZXBfYnkoMikKKyAgICAgICAgLm1hcCh8aXwgdTg6OmZyb21fc3RyX3JhZGl4KCZoZXhfc3RyW2kuLmkgKyAyXSwgMTYpKQorICAgICAgICAucmV2KCkKKyAgICAgICAgLmNvbGxlY3Q6OjxSZXN1bHQ8XywgXz4+KCk/OworICAgIE9rKGJ5dGVzKQorfQorCisvLy8gVXBkYXRlcyB0aGUgbWFuaWZlc3Qgb2YgYW4gaW1hZ2UuCisvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIG11c3QgdXNlIGEgcHVibGljIGtleS4KK2ZuIHVwZGF0ZV9pbWFnZV9tYW5pZmVzdCgKKyAgICBpbWFnZTogJm11dCBJbWFnZSwKKyAgICBrZXk6IGltcGwgQXNSZWY8UGF0aD4sCispIC0+IFJlc3VsdDwoKT4geworICAgIGxldCBrZXkgPSBmczo6cmVhZCgma2V5KS53aXRoX2NvbnRleHQofHwgeworICAgICAgICBmb3JtYXQhKCJGYWlsZWQgdG8gcmVhZCB0aGUga2V5IGZyb20gYHt9YC4iLCBrZXkuYXNfcmVmKCkuZGlzcGxheSgpKQorICAgIH0pPzsKKyAgICBsZXQga2V5ID0KKyAgICAgICAgUHJpdmF0ZUtleTo6cGFyc2VfZnJvbV9kZXIoJmtleSkuY29udGV4dCgiRmFpbGVkIHRvIHBhcnNlIHRoZSBrZXkuIik/OworCisgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKAorICAgICAgICAmbWFuaWZlc3Q6OlJPTV9FWFRfU0lHTkFUVVJFX0tFWV9QVUJMSUNfRVhQT05FTlQsCisgICAgICAgIGtleS5wdWJsaWNfZXhwb25lbnRfYmUoKS5pdGVyKCkucmV2KCkuY2xvbmVkKCksCisgICAgKT87CisgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKAorICAgICAgICAmbWFuaWZlc3Q6OlJPTV9FWFRfU0lHTkFUVVJFX0tFWV9NT0RVTFVTLAorICAgICAgICBrZXkucHVibGljX21vZHVsdXNfYmUoKS5pdGVyKCkucmV2KCkuY2xvbmVkKCksCisgICAgKT87CisgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKAorICAgICAgICAmbWFuaWZlc3Q6OlJPTV9FWFRfTUFOSUZFU1RfSURFTlRJRklFUiwKKyAgICAgICAgcGFyc2VfaGV4X3N0cigiMHg0NTUyNTQ0ZiIpPywKKyAgICApPzsKKworICAgIGltYWdlLnNldF9tYW5pZmVzdF9maWVsZCgKKyAgICAgICAgJm1hbmlmZXN0OjpST01fRVhUX0lNQUdFX1ZFUlNJT04sCisgICAgICAgIC8vIFRPRE86IFVzZSBpbnRvX2l0ZXIgb25jZSBpdCdzIHN0YWJpbGl6ZWQgKGZvciBhbGwgdXNhZ2VzIGluIHRoaXMgZmlsZSkuCisgICAgICAgIHN0ZDo6YXJyYXk6OkludG9JdGVyOjpuZXcoMF91MzIudG9fbGVfYnl0ZXMoKSksCisgICAgKT87CisKKyAgICAvLyBUT0RPOiBEbyB3ZSBuZWVkIHRoZXNlIGZpZWxkcz8KKyAgICBsZXQgZXh0ZW5zaW9ucyA9IFsKKyAgICAgICAgKAorICAgICAgICAgICAgJm1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjBfT0ZGU0VULAorICAgICAgICAgICAgJm1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjBfQ0hFQ0tTVU0sCisgICAgICAgICksCisgICAgICAgICgKKyAgICAgICAgICAgICZtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04xX09GRlNFVCwKKyAgICAgICAgICAgICZtYW5pZmVzdDo6Uk9NX0VYVF9FWFRFTlNJT04xX0NIRUNLU1VNLAorICAgICAgICApLAorICAgICAgICAoCisgICAgICAgICAgICAmbWFuaWZlc3Q6OlJPTV9FWFRfRVhURU5TSU9OMl9PRkZTRVQsCisgICAgICAgICAgICAmbWFuaWZlc3Q6OlJPTV9FWFRfRVhURU5TSU9OMl9DSEVDS1NVTSwKKyAgICAgICAgKSwKKyAgICAgICAgKAorICAgICAgICAgICAgJm1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjNfT0ZGU0VULAorICAgICAgICAgICAgJm1hbmlmZXN0OjpST01fRVhUX0VYVEVOU0lPTjNfQ0hFQ0tTVU0sCisgICAgICAgICksCisgICAgXTsKKyAgICBmb3IgZmllbGRzIGluICZleHRlbnNpb25zIHsKKyAgICAgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKAorICAgICAgICAgICAgZmllbGRzLjAsCisgICAgICAgICAgICBzdGQ6OmFycmF5OjpJbnRvSXRlcjo6bmV3KDBfdTMyLnRvX2xlX2J5dGVzKCkpLAorICAgICAgICApPzsKKyAgICAgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKAorICAgICAgICAgICAgZmllbGRzLjEsCisgICAgICAgICAgICBzdGQ6OmFycmF5OjpJbnRvSXRlcjo6bmV3KDBfdTMyLnRvX2xlX2J5dGVzKCkpLAorICAgICAgICApPzsKKyAgICB9CisgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKAorICAgICAgICAmbWFuaWZlc3Q6OlJPTV9FWFRfVVNBR0VfQ09OU1RSQUlOVFMsCisgICAgICAgIHN0ZDo6YXJyYXk6OkludG9JdGVyOjpuZXcoCisgICAgICAgICAgICBbMDsgbWFuaWZlc3Q6OlJPTV9FWFRfVVNBR0VfQ09OU1RSQUlOVFMuc2l6ZV9ieXRlc10sCisgICAgICAgICksCisgICAgKT87CisgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKAorICAgICAgICAmbWFuaWZlc3Q6OlJPTV9FWFRfUEVSSVBIRVJBTF9MT0NLRE9XTl9JTkZPLAorICAgICAgICBzdGQ6OmFycmF5OjpJbnRvSXRlcjo6bmV3KAorICAgICAgICAgICAgWzA7IG1hbmlmZXN0OjpST01fRVhUX1BFUklQSEVSQUxfTE9DS0RPV05fSU5GTy5zaXplX2J5dGVzXSwKKyAgICAgICAgKSwKKyAgICApPzsKKyAgICBpbWFnZS5zZXRfbWFuaWZlc3RfZmllbGQoCisgICAgICAgICZtYW5pZmVzdDo6Uk9NX0VYVF9JTUFHRV9USU1FU1RBTVAsCisgICAgICAgIHN0ZDo6YXJyYXk6OkludG9JdGVyOjpuZXcoMF91NjQudG9fbGVfYnl0ZXMoKSksCisgICAgKT87CisKKyAgICBPaygoKSkKK30KKworLy8vIENhbGN1bGF0ZXMgdGhlIHNpZ25hdHVyZSBmb3IgdGhlIHNpZ25lZCBwb3J0aW9uIG9mIGFuIGltYWdlLgorZm4gY2FsY3VsYXRlX2ltYWdlX3NpZ25hdHVyZSgKKyAgICBpbWFnZTogJkltYWdlLAorICAgIGtleTogaW1wbCBBc1JlZjxQYXRoPiwKKykgLT4gUmVzdWx0PEltYWdlU2lnbmF0dXJlPiB7CisgICAgbGV0IGtleSA9IGZzOjpyZWFkKCZrZXkpLndpdGhfY29udGV4dCh8fCB7CisgICAgICAgIGZvcm1hdCEoIkZhaWxlZCB0byByZWFkIGtleSBmcm9tIGB7fWAuIiwga2V5LmFzX3JlZigpLmRpc3BsYXkoKSkKKyAgICB9KT87CisgICAgbGV0IGtleSA9CisgICAgICAgIFByaXZhdGVLZXk6OnBhcnNlX2Zyb21fZGVyKCZrZXkpLmNvbnRleHQoIkZhaWxlZCB0byBwYXJzZSB0aGUga2V5LiIpPzsKKyAgICBsZXQgc2lnID0gSW1hZ2VTaWduYXR1cmU6OnNpZ24oJmtleSwgaW1hZ2Uuc2lnbmVkX2J5dGVzKCkpCisgICAgICAgIC5jb250ZXh0KCJGYWlsZWQgdG8gc2lnbiB0aGUgaW1hZ2UuIik/OworICAgIE9rKHNpZykKK30KKworLy8vIFVwZGF0ZXMgdGhlIHNpZ25hdHVyZSBvZiBhbiBpbWFnZS4KK2ZuIHVwZGF0ZV9pbWFnZV9zaWduYXR1cmUoCisgICAgaW1hZ2U6ICZtdXQgSW1hZ2UsCisgICAgc2lnbmF0dXJlOiBJbWFnZVNpZ25hdHVyZSwKKykgLT4gUmVzdWx0PCgpPiB7CisgICAgaW1hZ2Uuc2V0X21hbmlmZXN0X2ZpZWxkKAorICAgICAgICAmbWFuaWZlc3Q6OlJPTV9FWFRfSU1BR0VfU0lHTkFUVVJFLAorICAgICAgICBzaWduYXR1cmUuYnl0ZXMoKS5pdGVyKCkucmV2KCkuY2xvbmVkKCksCisgICAgKT87CisgICAgT2soKCkpCit9CisKK2ZuIG1haW4oKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICBsZXQgYXJncyA9IEFyZ3M6Om5ldyhlbnY6OmFyZ3Nfb3MoKSk/OworICAgIGxldCBtdXQgaW1hZ2UgPSBJbWFnZTo6ZnJvbShmczo6cmVhZCgmYXJncy5pbnB1dCkud2l0aF9jb250ZXh0KHx8IHsKKyAgICAgICAgZm9ybWF0ISgiRmFpbGVkIHRvIHJlYWQgdGhlIGltYWdlIGZyb20ge30iLCBhcmdzLmlucHV0LmRpc3BsYXkoKSkKKyAgICB9KT8pOworCisgICAgLy8gVE9ETyBmb3IgYSBmdXR1cmUgcmVmYWN0b3IgaW50byBvcGVudGl0YW50b29sOiBUaGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgc2hvdWxkIGJlbG9uZyB0byBhCisgICAgLy8gU2lnbmVyIHN0cnVjdCBhbmQgc2hvdWxkIG1vdmUgaW50byB0aGUgaW1hZ2UgY3JhdGUuCisgICAgLy8gVE9ETzogVGhpcyBtdXN0IHVzZSB0aGUgcHVibGljIGtleS4KKyAgICB1cGRhdGVfaW1hZ2VfbWFuaWZlc3QoJm11dCBpbWFnZSwgJmFyZ3MucHJpdl9rZXkpPzsKKyAgICBsZXQgc2lnID0gY2FsY3VsYXRlX2ltYWdlX3NpZ25hdHVyZSgmaW1hZ2UsICZhcmdzLnByaXZfa2V5KT87CisgICAgdXBkYXRlX2ltYWdlX3NpZ25hdHVyZSgmbXV0IGltYWdlLCBzaWcpPzsKKyAgICBmczo6d3JpdGUoJmFyZ3Mub3V0cHV0LCBpbWFnZSkud2l0aF9jb250ZXh0KHx8IHsKKyAgICAgICAgZm9ybWF0ISgiRmFpbGVkIHRvIHdyaXRlIHRoZSBpbWFnZSB0byB7fSIsIGFyZ3Mub3V0cHV0LmRpc3BsYXkoKSkKKyAgICB9KT87CisgICAgT2soKCkpCiB9Cg==