Name: series-workflowkcht7 Phase: Succeeded StartedAt: 2026-08-02 02:56:13 +0000 UTC FinishedAt: 2026-08-02 06:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[0] Phase: Succeeded StartedAt: 2026-08-02 02:56:13 +0000 UTC FinishedAt: 2026-08-02 03:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 02:56:13 +0000 UTC FinishedAt: 2026-08-02 03:00:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "3c7d7f908d574277a845423ec32250a8d8df44c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_SMM", "KVM_AMD_SEV", "KVM_INTEL_TDX", "INTEL_TDX_HOST", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "KVM_INTEL", "KVM_AMD", "AMD_IOMMU", "CMA", "X86_X2APIC", "X86_MCE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "3c7d7f908d574277a845423ec32250a8d8df44c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_SMM", "KVM_AMD_SEV", "KVM_INTEL_TDX", "INTEL_TDX_HOST", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "KVM_INTEL", "KVM_AMD", "AMD_IOMMU", "CMA", "X86_X2APIC", "X86_MCE" ], "series_id": "f2f1e814-e4cd-4687-a5bc-67644b9b12b3" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "emulator_leave_smm" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9TTU0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7WDg2X01DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtdWxhdG9yX2xlYXZlX3NtbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBLVk0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgd2hlbiBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIEl0IG1vZGlmaWVzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIGNoZWNrIGlmIHVuaGFuZGxlYWJsZSBlbXVsYXRpb24gaXMgcmVxdWlyZWQsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgdmNwdV9wcmVfcnVuYCBvcCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHRvIHN1cHBvcnQgdGhpcyBjaGVjay4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gdGVzdCB0aGlzIG5ldyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJhYjg3YTgzNzg2ZDMzNWE2YjI3ZDVkZDI1YjhmNTIxZWNkNGJjNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDAyOjU4OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA1Y2IxMzJlY2EzYzM1Li5lMjEzYzlhZTNlMzAxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTYzLDExICYjNDM7NjMsMTIgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChmbHVzaF9yZW1vdGVfdGxic19yYW5nZSlcbiAjZW5kaWZcbiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndmEpXG4gS1ZNX1g4Nl9PUChmbHVzaF90bGJfZ3Vlc3QpXG4tS1ZNX1g4Nl9PUCh2Y3B1X3ByZV9ydW4pXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKVxuIEtWTV9YODZfT1AodmNwdV9ydW4pXG4gS1ZNX1g4Nl9PUChoYW5kbGVfZXhpdClcbiBLVk1fWDg2X09QKHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh1cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKVxuIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpXG4gS1ZNX1g4Nl9PUChnZXRfaW50ZXJydXB0X3NoYWRvdylcbiBLVk1fWDg2X09QKHBhdGNoX2h5cGVyY2FsbClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggN2EyNTg4MzE2MTZmYS4uMjgzODQ3NjE5ZmY4OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTg2LDEzICYjNDM7MTU4NiwxNSBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0ICovXG4gXHR2b2lkICgqZmx1c2hfdGxiX2d1ZXN0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuLVx0aW50ICgqdmNwdV9wcmVfcnVuKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztcdGJvb2wgKCp2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gKCp2Y3B1X3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgdTY0IHJ1bl9mbGFncyk7XG4gXHRpbnQgKCpoYW5kbGVfZXhpdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBleGl0X2Zhc3RwYXRoKTtcbiBcdGludCAoKnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXHR2b2lkICgqdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztcdGJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztcbiBcdHZvaWQgKCpzZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWFzayk7XG4gXHR1MzIgKCpnZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCpwYXRjaF9oeXBlcmNhbGwpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc21tLmMgYi9hcmNoL3g4Ni9rdm0vc21tLmNcbmluZGV4IGE0NDY0ODdiZGQ1Y2YuLjY1NmEzOGRhZDdlN2EgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zbW0uY1xuQEAgLTY0OSw2ICYjNDM7NjQ5LDEwIEBAIGludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4gI2VuZGlmXG4gXHRcdHJldCA9IHJzbV9sb2FkX3N0YXRlXzMyKGN0eHQsIFx1MDAyNnNtcmFtLnNtcmFtMzIpO1xuIFxuJiM0MztcdGlmIChyZXQgPT0gWDg2RU1VTF9DT05USU5VRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAga3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKVxuJiM0MztcdFx0cmV0ID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIFJTTSBmYWlscyBhbmQgdHJpZ2dlcnMgc2h1dGRvd24sIGFyY2hpdGVjdHVyYWxseSB0aGUgc2h1dGRvd25cbiBcdCAqIG9jY3VycyAqYmVmb3JlKiB0aGUgdHJhbnNpdGlvbiB0byBndWVzdCBtb2RlLiAgQnV0IGR1ZSB0byBLVk0mIzM5O3NcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggOTBhMDhkMzZkODQzZC4uZmNiNDFkZmRlNGMwMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0zNTU2LDYgJiM0MzszNTU2LDExIEBAIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRfX3Nldl9lc191bm1hcF9naGNiKHN2bSk7XG4gfVxuIFxuJiM0Mztib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0b19rdm1fc2V2X2luZm8odmNwdS1cdTAwM2Vrdm0pLVx1MDAzZW5lZWRfaW5pdDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgcHJlX3Nldl9ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4ge1xuIFx0c3RydWN0IHN2bV9jcHVfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcdTAwMjZzdm1fZGF0YSwgY3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggYzFlNmQ2MjUxMmI5NS4uOWQ2MDdiOThiZDA2NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC00NDAwLDE2ICYjNDM7NDQwMCw2IEBAIHN0YXRpYyB2b2lkIHN2bV9jYW5jZWxfaW5qZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHZjcHUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHN2bV92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4tXHRpZiAodG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLSNlbmRpZlxuLVxuLVx0cmV0dXJuIDE7XG4tfVxuLVxuIHN0YXRpYyBmYXN0cGF0aF90IHN2bV9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbkBAIC01Mzc2LDcgJiM0Mzs1MzY2LDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLFxuIFx0LmZsdXNoX3RsYl9ndWVzdCA9IHN2bV9mbHVzaF90bGJfZ3Vlc3QsXG4gXG4tXHQudmNwdV9wcmVfcnVuID0gc3ZtX3ZjcHVfcHJlX3J1bixcbiBcdC52Y3B1X3J1biA9IHN2bV92Y3B1X3J1bixcbiBcdC5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gc3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG5AQCAtNTQzNCw2ICYjNDM7NTQyMyw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbiYjNDM7XHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uLFxuIFx0LmRldl9nZXRfYXR0ciA9IHNldl9kZXZfZ2V0X2F0dHIsXG4gXHQubWVtX2VuY19pb2N0bCA9IHNldl9tZW1fZW5jX2lvY3RsLFxuIFx0Lm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCBhMzI3YmY3NTFlY2Q1Li42NmI0NGI1NDYwOGU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTk3OSw2ICYjNDM7OTc5LDcgQEAgdm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVcbiB2b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4mIzQzO2Jvb2wgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncCk7XG4gaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX2VuY19yZWdpb24gKnJhbmdlKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCAwNGY5ODZlM2Q0MzlhLi4wZmYzMjMwZmQ5NWU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMTQwLDEyICYjNDM7MTQwLDEwIEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHZteF92Y3B1X3B1dCh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGludCB2dF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0MztzdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbi1cdFx0cmV0dXJuIHRkeF92Y3B1X3ByZV9ydW4odmNwdSk7XG4tXG4tXHRyZXR1cm4gdm14X3ZjcHVfcHJlX3J1bih2Y3B1KTtcbiYjNDM7XHRyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24odmNwdSk7XG4gfVxuIFxuIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbkBAIC0xNjUsNiAmIzQzOzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKHRvX3Z0KHZjcHUpLVx1MDAzZWVtdWxhdGlvbl9yZXF1aXJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB2dF9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiB7XG4gXHRpZiAodW5saWtlbHkoaXNfdGRfdmNwdSh2Y3B1KSkpXG5AQCAtOTM5LDExICYjNDM7OTQ3LDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuZmx1c2hfdGxiX2d2YSA9IHZ0X29wKGZsdXNoX3RsYl9ndmEpLFxuIFx0LmZsdXNoX3RsYl9ndWVzdCA9IHZ0X29wKGZsdXNoX3RsYl9ndWVzdCksXG4gXG4tXHQudmNwdV9wcmVfcnVuID0gdnRfb3AodmNwdV9wcmVfcnVuKSxcbiYjNDM7XHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuIFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuIFx0LmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLFxuIFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiBcdC51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuJiM0MztcdC51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksXG4gXHQuc2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChzZXRfaW50ZXJydXB0X3NoYWRvdyksXG4gXHQuZ2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChnZXRfaW50ZXJydXB0X3NoYWRvdyksXG4gXHQucGF0Y2hfaHlwZXJjYWxsID0gdnRfb3AocGF0Y2hfaHlwZXJjYWxsKSxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggZDFhZjBhNzUyZTk3ZS4uYjI3MmMyMDU4NmE3NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC04OTcsMTMgJiM0Mzs4OTcsMTAgQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfVU5JTklUSUFMSVpFRDtcbiB9XG4gXG4taW50IHRkeF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mztib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAodW5saWtlbHkodG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbi1cdFx0ICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0cmV0dXJuIDE7XG4mIzQzO1x0cmV0dXJuIHRvX3RkeCh2Y3B1KS1cdTAwM2VzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8XG4mIzQzO1x0ICAgICAgIHRvX2t2bV90ZHgodmNwdS1cdTAwM2Vrdm0pLVx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTRiOWFjN2ZlZDlmMC4uNzYxNjBhZGY4Mjk3MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MDM1LDcgJiM0Mzs2MDM1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJiMzOTt0IGZhaXRoZnVsbHkgZW11bGF0ZSB0aGVcbiAgKiBjdXJyZW50IHZDUFUgc3RhdGUuXG4gICovXG4tc3RhdGljIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mztib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcbkBAIC02MTEwLDE2ICYjNDM7NjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHtcbi1cdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbi19XG4tXG4gLypcbiAgKiBJbmRpY2F0ZSBhIGJ1c3ktd2FpdGluZyB2Y3B1IGluIHNwaW5sb2NrLiBXZSBkbyBub3QgZW5hYmxlIHRoZSBQQVVTRVxuICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDQwOTg1ODA3NDI0NjIuLmNkYjM4ZDk0MGNmYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0yMSw3ICYjNDM7MjEsNiBAQCBpbnQgdm14X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTtcbiB2b2lkIHZteF92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZteF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XG4gdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XG5AQCAtMzEsNiAmIzQzOzMwLDcgQEAgaW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCk7XG4gdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBpbnQgdm14X3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKTtcbkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcbiB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbi1pbnQgdGR4X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mztib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcbiB2b2lkIHRkeF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCAwZjFhODI5MDMyYzA2Li5kOTRiNTkxNDBjNDUyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC04ODY3LDcgJiM0Mzs4ODY3LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7XG4mIzQzO1x0aWYgKGt2bV94ODZfY2FsbCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSh2Y3B1KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKSB7XG4mIzQzO1x0XHRrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0KHZjcHUpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMTtcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuaW5kZXggNTc4MjgzODkzYWIzNy4uYzgzNzkxMjRiMzE3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwcm9jZXNzb3IuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzbW0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZteC5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbkBAIC05LDkgJiM0MzsxMCwyMyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gXG4tI2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDIwMDBcbiYjNDM7I2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDgwXG4gXG4tc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICYjNDM7IDB4ZmUwMC4gIFRSIHN0YXJ0cyBhdFxuJiM0MzsgKiBvZmZzZXQgMHhmZTkwLCBhbmQgYXR0cmlidXRlcyBpcyB0aGUgc2Vjb25kIDE2LWJpdCBmaWVsZCBpbiB0aGUgZGVzY3JpcHRvci5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVFx0MHhmZTkyXG4mIzQzOyNkZWZpbmUgU01SQU1fR1BBXHRcdFx0MHgxMDAwMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTTUkgaGFuZGxlciB0aGF0IHJ1bnMgaW4gMTYtYml0IFJlYWwgTW9kZS4gIFN5bmNzIHdpdGggTDAgdmlhIHBvcnQgSS9PLCB0aGVuXG4mIzQzOyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4mIzQzO1x0MHhlNCwgQVJCSVRSQVJZX0lPX1BPUlQsXHQvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqL1xuJiM0MztcdDB4MGYsIDB4YWEsXHRcdFx0LyogUlNNICovXG4mIzQzO307XG4gXG4gc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIHtcbkBAIC0xOSw4ICYjNDM7MzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXG4gXHQgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW5cbiBcdCAqIGFyYml0cmFyeSBwb3J0LlxuIFx0ICovXG4tXHRhc20gdm9sYXRpbGUoXCYjMzQ7aW5iICUlZHgsICUlYWxcJiMzNDtcbi1cdFx0ICAgICA6IDogW3BvcnRdIFwmIzM0O2RcJiMzNDsgKEFSQklUUkFSWV9JT19QT1JUKSA6IFwmIzM0O3JheFwmIzM0Oyk7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luYiAkXCYjMzQ7IF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSBcJiMzNDssICUlYWxcJiMzNDtcbiYjNDM7XHRcdCAgICAgOjo6IFwmIzM0O3JheFwmIzM0Oyk7XG4mIzQzO1x0R1VFU1RfRkFJTChcJiMzNDtMMiByZXN1bWVkIGFmdGVyIHN0dWZmaW5nIGludmFsaWQgZ3Vlc3Qgc3RhdGVcJiMzNDspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbkBAIC00NiwzNSAmIzQzOzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3J1bl90b19pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgd2FudF9sMilcbiB7XG4tXHRndmFfdCB2bXhfcGFnZXNfZ3ZhO1xuLVx0c3RydWN0IGt2bV9zcmVncyBzcmVncztcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHN0cnVjdCBrdm1fcnVuICpydW47XG4tXHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1x0c3RydWN0IGt2bV9ydW4gKnJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuIFxuLVx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpO1xuJiM0MztcdHZjcHVfcnVuKHZjcHUpO1xuIFxuLVx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiYjNDM7XHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xuIFxuLVx0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXG4tXHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2dm14X3BhZ2VzX2d2YSk7XG4tXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIHZteF9wYWdlc19ndmEpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJ1bi1cdTAwM2Vpby5wb3J0ID09IEFSQklUUkFSWV9JT19QT1JUIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICghIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpID09IHdhbnRfbDIgIHx8XG4mIzQzO1x0XHQgICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX1g4Nl9HVUVTVF9NT0RFKSksXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgSU4gZnJvbSBwb3J0IDB4JXggZnJvbSBMJXUsIGdvdCBwb3J0IDB4JXggZnJvbSBMJXVcJiMzNDssXG4mIzQzO1x0XHQgICAgQVJCSVRSQVJZX0lPX1BPUlQsIDEgJiM0Mzsgd2FudF9sMiwgcnVuLVx1MDAzZWlvLnBvcnQsXG4mIzQzO1x0XHQgICAgMSAmIzQzOyAhIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTtcbiYjNDM7fVxuIFxuLVx0dmNwdV9ydW4odmNwdSk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bV9jcmVhdGVfYW5kX3J1bl9sMihzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiBcbi1cdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuJiM0MztcdC8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzICh2bXhfcGFnZXMpLiAqL1xuJiM0MztcdHZjcHVfYWxsb2Nfdm14KHZtLCBcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcbiYjNDM7XHR2Y3B1X2FyZ3Nfc2V0KCp2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cbiBcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXG4gXHQgKi9cbi1cdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4mIzQzO1x0dmNwdV9ydW5fdG9faW8oKnZjcHUsIHRydWUpO1xuIFxuLVx0VEVTVF9BU1NFUlQocnVuLVx1MDAzZWlvLnBvcnQgPT0gQVJCSVRSQVJZX0lPX1BPUlQsXG4tXHRcdCAgICBcJiMzNDtFeHBlY3RlZCBJTiBmcm9tIHBvcnQgJWQgZnJvbSBMMiwgZ290IHBvcnQgJWRcJiMzNDssXG4tXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQpO1xuJiM0MztcdHJldHVybiB2bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXHUwMDI2dmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogU3R1ZmYgaW52YWxpZCBndWVzdCBzdGF0ZSBmb3IgTDIgYnkgbWFraW5nIFRSIHVudXNhYmxlLiAgVGhlIG5leHRcbkBAIC05Niw0ICYjNDM7MTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRkZWZhdWx0OlxuIFx0XHRURVNUX0ZBSUwoXCYjMzQ7VW5leHBlY3RlZCB1Y2FsbDogJWx1XCYjMzQ7LCB1Yy5jbWQpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1MTYgKnRyX2F0dHJzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X1NNTSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXHUwMDI2dmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW5qZWN0IFNNSSB3aGlsZSBMMiBpcyBhY3RpdmUsIHJ1biB0aGUgdkNQVSB0byBnZXQgSS9PIGV4aXQgZnJvbSBMMSxcbiYjNDM7XHQgKiB0aGVuIHN0dWZmIFRSIGluIHRoZSBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc28gdGhhdCBSU00gcmVzdG9yZXNcbiYjNDM7XHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNldHVwX3NtcmFtKHZtLCB2Y3B1LCBTTVJBTV9HUEEsIHNtaV9oYW5kbGVyLCBzaXplb2Yoc21pX2hhbmRsZXIpKTtcbiYjNDM7XHRpbmplY3Rfc21pKHZjcHUpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bl90b19pbyh2Y3B1LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBpbiBTTVJBTSB0byBtYWtlIFRSIHVudXNhYmxlLiAqL1xuJiM0MztcdHRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgJiM0MzsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XG4mIzQzO1x0KnRyX2F0dHJzIFx1MDAyNj0gfkJJVCg3KTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9ydW4odmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIFJTTSwgTDEgZ2V0cyB0aGUgU0hVVERPV04gYmVjYXVzZSBSU00gaXMgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWRcbiYjNDM7XHQgKiB0byByZXN1bHQgaW4gc2h1dGRvd24gaWYgdGhlIENQVSBkZXRlY3RzIGludmFsaWQgc3RhdGUgaW4gU01SQU0uXG4mIzQzO1x0ICovXG4mIzQzO1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX1NIVVRET1dOKTtcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4mIzQzO1xuJiM0MztcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZSgpO1xuJiM0MztcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9TTU0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7WDg2X01DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtdWxhdG9yX2xlYXZlX3NtbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBLVk0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgd2hlbiBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIEl0IG1vZGlmaWVzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIGNoZWNrIGlmIHVuaGFuZGxlYWJsZSBlbXVsYXRpb24gaXMgcmVxdWlyZWQsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgdmNwdV9wcmVfcnVuYCBvcCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHRvIHN1cHBvcnQgdGhpcyBjaGVjay4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gdGVzdCB0aGlzIG5ldyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhYjg3YTgzNzg2ZDMzNWE2YjI3ZDVkZDI1YjhmNTIxZWNkNGJjNzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDAyOjU4OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKaW5kZXggNWNiMTMyZWNhM2MzNS4uZTIxM2M5YWUzZTMwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCkBAIC02MywxMSAmIzQzOzYzLDEyIEBAIEtWTV9YODZfT1BfT1BUSU9OQUwoZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpCiAjZW5kaWYKIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d2YSkKIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d1ZXN0KQotS1ZNX1g4Nl9PUCh2Y3B1X3ByZV9ydW4pCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pCiBLVk1fWDg2X09QKHZjcHVfcnVuKQogS1ZNX1g4Nl9PUChoYW5kbGVfZXhpdCkKIEtWTV9YODZfT1Aoc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikKIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKQogS1ZNX1g4Nl9PUChzZXRfaW50ZXJydXB0X3NoYWRvdykKIEtWTV9YODZfT1AoZ2V0X2ludGVycnVwdF9zaGFkb3cpCiBLVk1fWDg2X09QKHBhdGNoX2h5cGVyY2FsbCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDdhMjU4ODMxNjE2ZmEuLjI4Mzg0NzYxOWZmODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTU4NiwxMyAmIzQzOzE1ODYsMTUgQEAgc3RydWN0IGt2bV94ODZfb3BzIHsKIAkgKi8KIAl2b2lkICgqZmx1c2hfdGxiX2d1ZXN0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi0JaW50ICgqdmNwdV9wcmVfcnVuKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzOwlib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAllbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiAoKnZjcHVfcnVuKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCQkgIHU2NCBydW5fZmxhZ3MpOwogCWludCAoKmhhbmRsZV9leGl0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCWVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGV4aXRfZmFzdHBhdGgpOwogCWludCAoKnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJdm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0MzsJYm9vbCAoKnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7CiAJdm9pZCAoKnNldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKTsKIAl1MzIgKCpnZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAl2b2lkICgqcGF0Y2hfaHlwZXJjYWxsKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc21tLmMgYi9hcmNoL3g4Ni9rdm0vc21tLmMKaW5kZXggYTQ0NjQ4N2JkZDVjZi4uNjU2YTM4ZGFkN2U3YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3NtbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zbW0uYwpAQCAtNjQ5LDYgJiM0Mzs2NDksMTAgQEAgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKICNlbmRpZgogCQlyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCAmYW1wO3NtcmFtLnNtcmFtMzIpOwogCiYjNDM7CWlmIChyZXQgPT0gWDg2RU1VTF9DT05USU5VRSAmYW1wOyZhbXA7CiYjNDM7CSAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpCiYjNDM7CQlyZXQgPSBYODZFTVVMX1VOSEFORExFQUJMRTsKJiM0MzsKIAkvKgogCSAqIElmIFJTTSBmYWlscyBhbmQgdHJpZ2dlcnMgc2h1dGRvd24sIGFyY2hpdGVjdHVyYWxseSB0aGUgc2h1dGRvd24KIAkgKiBvY2N1cnMgKmJlZm9yZSogdGhlIHRyYW5zaXRpb24gdG8gZ3Vlc3QgbW9kZS4gIEJ1dCBkdWUgdG8gS1ZNJiMzOTtzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA5MGEwOGQzNmQ4NDNkLi5mY2I0MWRmZGU0YzAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTM1NTYsNiAmIzQzOzM1NTYsMTEgQEAgdm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlfX3Nldl9lc191bm1hcF9naGNiKHN2bSk7CiB9CiAKJiM0Mztib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0b19rdm1fc2V2X2luZm8odmNwdS0mZ3Q7a3ZtKS0mZ3Q7bmVlZF9pbml0OwomIzQzO30KJiM0MzsKIGludCBwcmVfc2V2X3J1bihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKCZhbXA7c3ZtX2RhdGEsIGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCBjMWU2ZDYyNTEyYjk1Li45ZDYwN2I5OGJkMDY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTQ0MDAsMTYgJiM0Mzs0NDAwLDYgQEAgc3RhdGljIHZvaWQgc3ZtX2NhbmNlbF9pbmplY3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHZjcHUpOwogfQogCi1zdGF0aWMgaW50IHN2bV92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVgotCWlmICh0b19rdm1fc2V2X2luZm8odmNwdS0mZ3Q7a3ZtKS0mZ3Q7bmVlZF9pbml0KQotCQlyZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBmYXN0cGF0aF90IHN2bV9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKQEAgLTUzNzYsNyAmIzQzOzUzNjYsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLAogCS5mbHVzaF90bGJfZ3Vlc3QgPSBzdm1fZmx1c2hfdGxiX2d1ZXN0LAogCi0JLnZjcHVfcHJlX3J1biA9IHN2bV92Y3B1X3ByZV9ydW4sCiAJLnZjcHVfcnVuID0gc3ZtX3ZjcHVfcnVuLAogCS5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCwKIAkuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHN2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLApAQCAtNTQzNCw2ICYjNDM7NTQyMyw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0gewogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVYKJiM0MzsJLnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiwKIAkuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0ciwKIAkubWVtX2VuY19pb2N0bCA9IHNldl9tZW1fZW5jX2lvY3RsLAogCS5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCmluZGV4IGEzMjdiZjc1MWVjZDUuLjY2YjQ0YjU0NjA4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtOTc5LDYgJiM0Mzs5NzksNyBAQCB2b2lkIHNldl9lc19wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHNldl9lc19zYXZlX2FyZQogdm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CiAKICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVYKJiM0Mztib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncCk7CiBpbnQgc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQlzdHJ1Y3Qga3ZtX2VuY19yZWdpb24gKnJhbmdlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKaW5kZXggMDRmOTg2ZTNkNDM5YS4uMGZmMzIzMGZkOTVlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKQEAgLTE0MCwxMiAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdm14X3ZjcHVfcHV0KHZjcHUpOwogfQogCi1zdGF0aWMgaW50IHZ0X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7c3RhdGljIGJvb2wgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaWYgKGlzX3RkX3ZjcHUodmNwdSkpCi0JCXJldHVybiB0ZHhfdmNwdV9wcmVfcnVuKHZjcHUpOwotCi0JcmV0dXJuIHZteF92Y3B1X3ByZV9ydW4odmNwdSk7CiYjNDM7CXJldHVybiBpc190ZF92Y3B1KHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpOwogfQogCiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpCkBAIC0xNjUsNiAmIzQzOzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKGlzX3RkX3ZjcHUodmNwdSkpIHsKJiM0MzsJCVdBUk5fT05fT05DRSh0b192dCh2Y3B1KS0mZ3Q7ZW11bGF0aW9uX3JlcXVpcmVkKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB2dF9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbykKIHsKIAlpZiAodW5saWtlbHkoaXNfdGRfdmNwdSh2Y3B1KSkpCkBAIC05MzksMTEgJiM0Mzs5NDcsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkuZmx1c2hfdGxiX2d2YSA9IHZ0X29wKGZsdXNoX3RsYl9ndmEpLAogCS5mbHVzaF90bGJfZ3Vlc3QgPSB2dF9vcChmbHVzaF90bGJfZ3Vlc3QpLAogCi0JLnZjcHVfcHJlX3J1biA9IHZ0X29wKHZjcHVfcHJlX3J1biksCiYjNDM7CS52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gdnRfb3BfdGR4X29ubHkodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiksCiAJLnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLAogCS5oYW5kbGVfZXhpdCA9IHZ0X29wKGhhbmRsZV9leGl0KSwKIAkuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLAomIzQzOwkudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLAogCS5zZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKHNldF9pbnRlcnJ1cHRfc2hhZG93KSwKIAkuZ2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChnZXRfaW50ZXJydXB0X3NoYWRvdyksCiAJLnBhdGNoX2h5cGVyY2FsbCA9IHZ0X29wKHBhdGNoX2h5cGVyY2FsbCksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwppbmRleCBkMWFmMGE3NTJlOTdlLi5iMjcyYzIwNTg2YTc0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTg5NywxMyAmIzQzOzg5NywxMCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXRkeC0mZ3Q7c3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7CiB9CiAKLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mztib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAodW5saWtlbHkodG9fdGR4KHZjcHUpLSZndDtzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8Ci0JCSAgICAgdG9fa3ZtX3RkeCh2Y3B1LSZndDtrdm0pLSZndDtzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDE7CiYjNDM7CXJldHVybiB0b190ZHgodmNwdSktJmd0O3N0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHwKJiM0MzsJICAgICAgIHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7c3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEU7CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKaW5kZXggZTRiOWFjN2ZlZDlmMC4uNzYxNjBhZGY4Mjk3MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC02MDM1LDcgJiM0Mzs2MDM1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAgKiB3aXRoIHVuc3Jlc3RyaWN0ZWQgZ3Vlc3QgbW9kZSBkaXNhYmxlZCkgYW5kIEtWTSBjYW4mIzM5O3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZQogICogY3VycmVudCB2Q1BVIHN0YXRlLgogICovCi1zdGF0aWMgYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7Ym9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKQEAgLTYxMTAsMTYgJiM0Mzs2MTEwLDYgQEAgc3RhdGljIGludCBoYW5kbGVfaW52YWxpZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIDE7CiB9CiAKLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHsKLQkJa3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KIC8qCiAgKiBJbmRpY2F0ZSBhIGJ1c3ktd2FpdGluZyB2Y3B1IGluIHNwaW5sb2NrLiBXZSBkbyBub3QgZW5hYmxlIHRoZSBQQVVTRQogICogZXhpdGluZywgc28gb25seSBnZXQgaGVyZSBvbiBjcHUgd2l0aCBQQVVTRS1Mb29wLUV4aXRpbmcuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCmluZGV4IDQwOTg1ODA3NDI0NjIuLmNkYjM4ZDk0MGNmYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCkBAIC0yMSw3ICYjNDM7MjEsNiBAQCBpbnQgdm14X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTsKIGludCB2bXhfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtKTsKIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBmYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpOwogdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTsKQEAgLTMxLDYgJiM0MzszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpOwogdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCB2bXhfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pOwogI2lmZGVmIENPTkZJR19LVk1fU01NCiBpbnQgdm14X3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKTsKQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB0ZHhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7CiB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpOwotaW50IHRkeF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mztib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpOwogdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtODg2Nyw3ICYjNDM7ODg2NywxNSBAQCBzdGF0aWMgaW50IGt2bV94ODZfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgICAgIWt2bV9hcGljX2luaXRfc2lwaV9hbGxvd2VkKHZjcHUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBrdm1feDg2X2NhbGwodmNwdV9wcmVfcnVuKSh2Y3B1KTsKJiM0MzsJaWYgKGt2bV94ODZfY2FsbCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSh2Y3B1KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoa3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKSB7CiYjNDM7CQlrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0KHZjcHUpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYwppbmRleCA1NzgyODM4OTNhYjM3Li5jODM3OTEyNGIzMTcyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbW0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZteC5oJiMzNDsKIAogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwpAQCAtOSw5ICYjNDM7MTAsMjMgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAKLSNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHgyMDAwCiYjNDM7I2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDgwCiAKLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsvKgomIzQzOyAqIFRoZSA2NC1iaXQgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHN0YXJ0cyBhdCBTTUJBU0UgJiM0MzsgMHhmZTAwLiAgVFIgc3RhcnRzIGF0CiYjNDM7ICogb2Zmc2V0IDB4ZmU5MCwgYW5kIGF0dHJpYnV0ZXMgaXMgdGhlIHNlY29uZCAxNi1iaXQgZmllbGQgaW4gdGhlIGRlc2NyaXB0b3IuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUCTB4ZmU5MgomIzQzOyNkZWZpbmUgU01SQU1fR1BBCQkJMHgxMDAwMDAwCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTTUkgaGFuZGxlciB0aGF0IHJ1bnMgaW4gMTYtYml0IFJlYWwgTW9kZS4gIFN5bmNzIHdpdGggTDAgdmlhIHBvcnQgSS9PLCB0aGVuCiYjNDM7ICogZXhlY3V0ZXMgUlNNIHRvIHRyaWdnZXIgdGhlIGNvbnN1bXB0aW9uIG9mIGludmFsaWQgZ3Vlc3Qgc3RhdGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7CiYjNDM7CTB4ZTQsIEFSQklUUkFSWV9JT19QT1JULAkvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqLwomIzQzOwkweDBmLCAweGFhLAkJCS8qIFJTTSAqLwomIzQzO307CiAKIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZCkKIHsKQEAgLTE5LDggJiM0MzszNCw5IEBAIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZCkKIAkgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW4KIAkgKiBhcmJpdHJhcnkgcG9ydC4KIAkgKi8KLQlhc20gdm9sYXRpbGUoJiMzNDtpbmIgJSVkeCwgJSVhbCYjMzQ7Ci0JCSAgICAgOiA6IFtwb3J0XSAmIzM0O2QmIzM0OyAoQVJCSVRSQVJZX0lPX1BPUlQpIDogJiMzNDtyYXgmIzM0Oyk7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O2luYiAkJiMzNDsgX19zdHJpbmdpZnkoQVJCSVRSQVJZX0lPX1BPUlQpICYjMzQ7LCAlJWFsJiMzNDsKJiM0MzsJCSAgICAgOjo6ICYjMzQ7cmF4JiMzNDspOwomIzQzOwlHVUVTVF9GQUlMKCYjMzQ7TDIgcmVzdW1lZCBhZnRlciBzdHVmZmluZyBpbnZhbGlkIGd1ZXN0IHN0YXRlJiMzNDspOwogfQogCiBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKQEAgLTQ2LDM1ICYjNDM7NjIsNTAgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3N0YXRpYyB2b2lkIHZjcHVfcnVuX3RvX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YW50X2wyKQogewotCWd2YV90IHZteF9wYWdlc19ndmE7Ci0Jc3RydWN0IGt2bV9zcmVncyBzcmVnczsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV9ydW4gKnJ1bjsKLQlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LSZndDtydW47CiAKLQlURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7CiYjNDM7CXZjcHVfcnVuKHZjcHUpOwogCi0Jdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGwxX2d1ZXN0X2NvZGUpOwomIzQzOwlURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pOwogCi0JLyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovCi0JdmNwdV9hbGxvY192bXgodm0sICZhbXA7dm14X3BhZ2VzX2d2YSk7Ci0JdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTsKJiM0MzsJVEVTVF9BU1NFUlQocnVuLSZndDtpby5wb3J0ID09IEFSQklUUkFSWV9JT19QT1JUICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoISEocnVuLSZndDtmbGFncyAmYW1wOyBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSA9PSB3YW50X2wyICB8fAomIzQzOwkJICAgICAha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfR1VFU1RfTU9ERSkpLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgSU4gZnJvbSBwb3J0IDB4JXggZnJvbSBMJXUsIGdvdCBwb3J0IDB4JXggZnJvbSBMJXUmIzM0OywKJiM0MzsJCSAgICBBUkJJVFJBUllfSU9fUE9SVCwgMSAmIzQzOyB3YW50X2wyLCBydW4tJmd0O2lvLnBvcnQsCiYjNDM7CQkgICAgMSAmIzQzOyAhIShydW4tJmd0O2ZsYWdzICZhbXA7IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTsKJiM0Mzt9CiAKLQl2Y3B1X3J1bih2Y3B1KTsKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqdm1fY3JlYXRlX2FuZF9ydW5fbDIoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSkKJiM0Mzt7CiYjNDM7CWd2YV90IHZteF9wYWdlc19ndmE7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGwxX2d1ZXN0X2NvZGUpOwogCi0JcnVuID0gdmNwdS0mZ3Q7cnVuOwomIzQzOwkvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi8KJiM0MzsJdmNwdV9hbGxvY192bXgodm0sICZhbXA7dm14X3BhZ2VzX2d2YSk7CiYjNDM7CXZjcHVfYXJnc19zZXQoKnZjcHUsIDEsIHZteF9wYWdlc19ndmEpOwogCiAJLyoKIAkgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi4KIAkgKiBSdW5uaW5nIEwxIHNob3VsZCBsYXVuY2ggTDIgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIGV4aXQgdG8gdXNlcnNwYWNlLgogCSAqLwotCVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7CiYjNDM7CXZjcHVfcnVuX3RvX2lvKCp2Y3B1LCB0cnVlKTsKIAotCVRFU1RfQVNTRVJUKHJ1bi0mZ3Q7aW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCwKLQkJICAgICYjMzQ7RXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkJiMzNDssCi0JCSAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLSZndDtpby5wb3J0KTsKJiM0MzsJcmV0dXJuIHZtOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMigmYW1wO3ZjcHUpOwogCiAJLyoKIAkgKiBTdHVmZiBpbnZhbGlkIGd1ZXN0IHN0YXRlIGZvciBMMiBieSBtYWtpbmcgVFIgdW51c2FibGUuICBUaGUgbmV4dApAQCAtOTYsNCAmIzQzOzEyNyw0OSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWRlZmF1bHQ6CiAJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgdWNhbGw6ICVsdSYjMzQ7LCB1Yy5jbWQpOwogCX0KJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGVfcnNtKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwl1MTYgKnRyX2F0dHJzOwomIzQzOwomIzQzOwlpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X1NNTSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoJmFtcDt2Y3B1KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5qZWN0IFNNSSB3aGlsZSBMMiBpcyBhY3RpdmUsIHJ1biB0aGUgdkNQVSB0byBnZXQgSS9PIGV4aXQgZnJvbSBMMSwKJiM0MzsJICogdGhlbiBzdHVmZiBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHNvIHRoYXQgUlNNIHJlc3RvcmVzCiYjNDM7CSAqIGludmFsaWQgTDIgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlzZXR1cF9zbXJhbSh2bSwgdmNwdSwgU01SQU1fR1BBLCBzbWlfaGFuZGxlciwgc2l6ZW9mKHNtaV9oYW5kbGVyKSk7CiYjNDM7CWluamVjdF9zbWkodmNwdSk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuX3RvX2lvKHZjcHUsIGZhbHNlKTsKJiM0MzsKJiM0MzsJLyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovCiYjNDM7CXRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgJiM0MzsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7CiYjNDM7CSp0cl9hdHRycyAmYW1wOz0gfkJJVCg3KTsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvciBSU00sIEwxIGdldHMgdGhlIFNIVVRET1dOIGJlY2F1c2UgUlNNIGlzIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkCiYjNDM7CSAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS4KJiM0MzsJICovCiYjNDM7CVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9TSFVURE9XTik7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTsKJiM0MzsKJiM0MzsJdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKCk7CiYjNDM7CXRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkxOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSB4ODYgUGF0Y2g6IEZvY3VzIG9uIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHR3ZWFrcyB0aGUgS1ZNIHg4NiBvcGVyYXRpb25zLiBJdCYjMzk7cyBhZGRpbmcgYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgdG8gdGhlIGBzdHJ1Y3Qga3ZtX3g4Nl9vcHNgLiBJIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyB0b3VjaGluZyBzb21lIGNvcmUgYXJlYXM6IGBhcmNoL3g4Ni9rdm0vc21tLmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCwgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AsIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBLVk0gZGVhbHMgd2l0aCB1bmhhbmRsZWFibGUgZW11bGF0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZXhpdGluZyBTTU0gdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIFNwZWNpZmljYWxseSwgaWYgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGlzIHNldCwgaXQgd2lsbCByZXR1cm4gYFg4NkVNVUxfVU5IQU5ETEVBQkxFYCB3aXRoaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyByZWZhY3RvcmluZyB0aGUgYHZjcHVfcHJlX3J1bmAgbG9naWMsIHNwbGl0dGluZyBpdCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgdGhhdCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgZmxhZy4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgY29kZSBldmVuIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbD8gR2l2ZW4gdGhlIGZpbGUgY2hhbmdlcywgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzLiBJdCYjMzk7cyBtb2RpZnlpbmcgY29yZSBLVk0geDg2IGxvZ2ljLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhY3RpdmUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNpbmNlIEtWTSBpcyB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yLiBXZSBrbm93IHN5emthbGxlciBpcyBnb2luZyB0byBoaXQgS1ZNIGhhcmQgd2l0aCB0aGUgYC9kZXYva3ZtYCBpbnRlcmZhY2UsIHNvIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGVzdGVkIGZvciBzdXJlLgoKTm93LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBwYXJ0cyB0aGF0IGFyZSBuZXcgb3IgY2hhbmdlZDoKCiogICBgZW11bGF0b3JfbGVhdmVfc21tYCAobW9kaWZpZWQpCiogICBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gCiogICBgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAKKiAgIGB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYAoqICAgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYAoqICAgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYAoqICAgYGt2bV94ODZfdmNwdV9wcmVfcnVuYCAobW9kaWZpZWQpCgpgZW11bGF0b3JfbGVhdmVfc21tYCBqdW1wcyBvdXQgaW1tZWRpYXRlbHkgYXMgYSBnb29kIHRhcmdldC4gSSBrbm93IHRoYXQmIzM5O3MgY2FsbGVkIHdoZW4gZW11bGF0aW5nIHRoZSBSU00gaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIG9mdGVuIGEgc291cmNlIG9mIGJ1Z3MgaW4gaHlwZXJ2aXNvcnMuIFRoZW4gSSBub3RlIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAgaXMgYSBnb29kIG9uZSwgYnV0IHdhaXQsIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLi4uIGFoLCBubyB3YWl0LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGNhbGxzIGl0LCB3aGljaCBpcyB0aGUgbWFpbiBlbnRyeSBmb3IgdGhlIGBLVk1fUlVOYCBpb2N0bC4gSXQmIzM5O3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4KCk9rYXksIGxldCYjMzk7cyBmb2N1cyBvbiBgZW11bGF0b3JfbGVhdmVfc21tYC4gSSYjMzk7bGwgZGlnIGludG8gaXQgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhbmQgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCB0byBmb2xsb3cgdGhlIHBhdGggYW5kIGNoZWNrIHRoZWlyIHVzYWdlcy4gTm93IGl0JiMzOTtzIHRpbWUgdG8gdGVzdCwgdGVzdCwgdGVzdC4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgdmVyaWZ5IHRoaXMgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW11bGF0b3JfbGVhdmVfc21tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc21tLmM9NTE2PXN0YXRpYyBpbnQgcnNtX2xvYWRfc3RhdGVfNjQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTU3Mi1cbmFyY2gveDg2L2t2bS9zbW0uYzo1NzM6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS9zbW0uYy01NzQte1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaD0xNTg9dm9pZCBlbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9zbW0uaDoxNTk6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XG5hcmNoL3g4Ni9rdm0vc21tLmgtMTYwLXZvaWQgcHJvY2Vzc19zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmg9MTYzPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbmFyY2gveDg2L2t2bS9zbW0uaC0xNjUtLypcbmFyY2gveDg2L2t2bS9zbW0uaDoxNjY6ICogZW11bGF0b3JfbGVhdmVfc21tIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBzbyB0aGVcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjctICogc3R1YiBpcyBkZWZpbmVkIGluIHg4Ni5jLlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc1OS0jaWZuZGVmIENPTkZJR19LVk1fU01NXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS94ODYuYy01NzYxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTg1Ni1cdC5pc19zbW0gICAgICAgICAgICAgID0gZW11bGF0b3JfaXNfc21tLFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4NTc6XHQubGVhdmVfc21tICAgICAgICAgICA9IGVtdWxhdG9yX2xlYXZlX3NtbSxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU4LVx0LnRyaXBsZV9mYXVsdCAgICAgICAgPSBlbXVsYXRvcl90cmlwbGVfZmF1bHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExODgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21lIEtWTSBjb2RlIGFuZCBub3RpY2luZyBhIHBhdHRlcm4uIEl0IGxvb2tzIGxpa2UgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AgaXMgbm9uLXN0YXRpYywgYnV0IG9ubHkgd2hlbiBgQ09ORklHX0tWTV9TTU1gIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIHN1Z2dlc3RzIGEgc3BlY2lmaWMgcHVycG9zZSByZWxhdGVkIHRvIFNNTSBoYW5kbGluZy4KCk5leHQsIEkgc2VlIHRoYXQgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgaXMgYWxzbyBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyBpdCYjMzk7cyBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZSB3aXRoaW4gdGhlIEtWTSBzeXN0ZW0sIHBlcmhhcHMgdG8gaW5kaWNhdGUgc29tZSBraW5kIG9mIHN0YXRlIG9yIHJlcXVpcmVtZW50IGR1cmluZyBWTVggb3BlcmF0aW9ucy4gVGhlbiB0aGVyZSBhcmUgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgYW5kIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBCb3RoIG9mIHRoZXNlIGFyZSBhbHNvIG5vbi1zdGF0aWMuIFRoZSBuYW1lcyBhcmUgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhleSYjMzk7cmUgZmxhZ3Mgb3IgaW5kaWNhdG9ycyBmb3Igd2hldGhlciBhIFZDUFUgbmVlZHMgc29tZSBpbml0aWFsaXphdGlvbiBzcGVjaWZpYyB0byBURFggb3IgU0VWLgoKR2l2ZW4gdGhlc2Ugb2JzZXJ2YXRpb25zLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEkgd2FudCB0byBjb25maXJtIGhvdyBgQ09ORklHX0tWTV9TTU1gLCBgQ09ORklHX0tWTV9BTURfU0VWYCwgYW5kIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgKGlmIGl0IGV4aXN0cykgYXJlIGRlZmluZWQgYW5kIHJlbGF0ZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBmb3IgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHByb3ZpZGUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlaXIgdXNlIGluIHRoZSB3aWRlciBLVk0gYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fU01NJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNzM9Y29uZmlnIEtWTV9JT0FQSUNcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB2aXJ0dWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IEtWTSBhbmQgQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVik6CgoqKkludmVzdGlnYXRpbmcgQU1EIFNFViBTdXBwb3J0IGluIEtWTSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgdGhlIGBDT05GSUdfS1ZNX0FNRF9TRVZgIG9wdGlvbi4gVGhpcyBpcyB0aGUgY3JpdGljYWwgZmxhZzsgaXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIEtWTSBidWlsZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBBTUQmIzM5O3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbi4gV2l0aG91dCBpdCwgU0VWIGZlYXR1cmVzIGFyZSBzaW1wbHkgbm90IGF2YWlsYWJsZSwgYW5kIGFueSBhdHRlbXB0IHRvIHV0aWxpemUgdGhlbSB3aWxsIGZhaWwsIG9yIHdvcnNlLCBzaWxlbnRseSBkZWdyYWRlIHNlY3VyaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZDsgaXTigJlzIGZ1bmRhbWVudGFsIHRvIHV0aWxpemluZyBTRVYmIzM5O3Mgc2VjdXJpdHkgYmVuZWZpdHMg4oCTIHByb3RlY3RpbmcgVk0gZGF0YSBldmVuIGZyb20gdGhlIGh5cGVydmlzb3IgaXRzZWxmLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGlmIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIGluIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEludGVsIFREWCBTdXBwb3J0KioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHRoYXQgc3VwcG9ydHMgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgdGhlIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdvdWxkIGJlIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBpbmRpY2F0b3IuIEkgbWlnaHQgYWxzbyBleHBhbmQgdGhpcyBzZWFyY2ggdG8gaW5jbHVkZSByZWxhdGVkLCB0aG91Z2ggcG9zc2libHkgbGVzcyBzcGVjaWZpYywgY29uZmlndXJhdGlvbiBmbGFncy4gVGhpcyBpbW1lZGlhdGUgY2hlY2sgd2lsbCBzYXZlIGEgbG90IG9mIHRpbWUgYnkgdGVsbGluZyBtZSBpZiBURFggaXMgZXZlbiBvbiB0aGUgdGFibGUuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBuZXh0IHN0ZXBzLCBtYXliZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIG9yIHRvIGRpZyBpbnRvIG1vcmUgc3VidGxlIGRpZmZlcmVuY2VzIGluIHRoZSBjb2RlLiBJIGp1c3Qgd2FudCBhIHF1aWNrIHBvaW50ZXIgdG8gdGVsbCBtZSB3aGVyZSB0byBnbyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQ2hlY2tpbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBJbnRlbCBURFgqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlc2Ugc3BlY2lmaWMgS1ZNIGZlYXR1cmVzOiBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBqdW1wcyB0byBtaW5kIGlzIHdoZXRoZXIgYEtWTV9JTlRFTF9URFhgIGlzIGFjdHVhbGx5IHRoZSAqY29ycmVjdCogY29uZmlndXJhdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBmb3IsIG9yIGlmIHdlIG5lZWQgdG8gYXNzZXNzIHRoZSB3aG9sZSBzdWl0ZSB0byBwcm9wZXJseSB1c2UgdGhlIHRhcmdldCBmZWF0dXJlLiBJdCBzZWVtcyBsb2dpY2FsIHRvIHN0YXJ0IHRoZXJlLiBTbywgbGV0JiMzOTtzIGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSByaWdodCBjb25maWcgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWF5IHJlbGF0ZSBvciBhcmUgcmVxdWlyZWQuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcgYSBzeXN0ZW0gdG8gdXNlIFREWC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qS1ZNX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTA5OiAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXHUwMDI2XHUwMDI2IEVYUEVSVFxuYXJjaC94ODYva3ZtL0tjb25maWctMTEwLSAgICAgICAgaGVscFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTI0Olx0ZGVwZW5kcyBvbiBYODZfU0dYIFx1MDAyNlx1MDAyNiBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipEZWx2aW5nIGludG8gdGhlIERlcGVuZGVuY2llcyBvZiBLVk1fSU5URUxfVERYKioKCk9rYXksIHNvIGBLVk1fSU5URUxfVERYYC4gUmlnaHQuIFdoYXQgZXhhY3RseSBhcmUgdGhlIGRlcGVuZGVuY2llcyBvbiB0aGF0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgaXQgaGluZ2VzIG9uLCBiZWNhdXNlIGlmIEkmIzM5O20gZ29pbmcgdG8gY29uZmlndXJlIHRoaXMgcHJvcGVybHksIEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBkaXZlIHN0cmFpZ2h0IGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHVzdWFsbHkgbGl2ZSwgc28gdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMuIEnigJltIGJldHRpbmcgdGhlIGFuc3dlciBpcyBidXJpZWQgaW4gdGhlcmUgc29tZXdoZXJlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXG4gMTMxOlx0XG4gMTMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIEtWTV9JTlRFTF9URFhcbiAxMzU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuIDEzNjpcdFx0ZGVmYXVsdCB5XG4gMTM3Olx0XHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG4gMTM4Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxMzk6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbiAxNDA6XHRcdGhlbHBcbiAxNDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXG4gMTQyOlx0XHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY3kgR3JhcGggRGVlcCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBgS1ZNX0lOVEVMX1REWGAgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsaWVzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS4gTm93LCBsZXQgbWUgcXVpY2tseSBwaXZvdCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEFNRCBzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSByZWxhdGlvbnNoaXAgaXMgd2l0aCBgS1ZNX0FNRF9TRVZgLiBJIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIGFuZCB2ZXJpZnkgbXkgY3VycmVudCBtZW50YWwgbW9kZWwgb2YgdGhlIGludGVyZGVwZW5kZW5jaWVzIGluIHRoZXNlIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcy4gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSB1cHN0cmVhbSBjaGFuZ2VzIHRvbywgdG8gaWRlbnRpZnkgYW55IHJlY2VudCByZWxldmFudCBkZXZlbG9wbWVudHMgb3IgYnVnZml4ZXMuIFRoaXMgbWlnaHQgYWxzbyBwcm92aWRlIGNsdWVzIGFib3V0IGhvdyB0aGUgSW50ZWwgYW5kIEFNRCBpbXBsZW1lbnRhdGlvbnMgYXJlIGNvbnZlcmdpbmcsIG9yIGRpdmVyZ2luZywgb3ZlciB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTY2Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTY3Olx0XHRoZWxwXG4gMTY4Olx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcbiAxNjk6XHRcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIEtWTV9BTURfU0VWIGFuZCBSZWxhdGVkIE1vZHVsZXMqKgoKQWxyaWdodCwgSSBzZWUgdGhlIGRlcGVuZGVuY3kgdHJlZSBmb3IgYEtWTV9BTURfU0VWYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgbGV2ZXJhZ2VzIGBLVk1fQU1EYCwgaXMgYnVpbHQgZm9yIGBYODZfNjRgIGFyY2hpdGVjdHVyZXMsIGFuZCBuZWVkcyBgQ1JZUFRPX0RFVl9TUF9QU1BgIGZvciBpdHMgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zLiBTZWVtcyBsb2dpY2FsLCBnaXZlbiBTRVYmIzM5O3Mgc2VjdXJpdHkgZmVhdHVyZXMuIE5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgZGV0YWlscyBvZiBTRVYsIEkgd2FudCB0byBxdWlja2x5IGNoZWNrIHRoZSBzdGF0dXMgYW5kIGRlcGVuZGVuY2llcyBvZiBgS1ZNX1NNTWAgYXMgYSBwcmVsaW1pbmFyeS4gVW5kZXJzdGFuZGluZyBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIEtWTSBjb21wb25lbnRzLCBwYXJ0aWN1bGFybHkgb24gQU1EIHBsYXRmb3JtcywgaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSXQgbWF5IGJlIGtleSB0byBhIGhvbGlzdGljIGFyY2hpdGVjdHVyZSByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFxuIDE4MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE4MjpcdFxuIDE4MzpcdGNvbmZpZyBLVk1fU01NXG4gMTg0Olx0XHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4gMTg1Olx0XHRkZWZhdWx0IHlcbiAxODY6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDE4NzpcdFx0aGVscFxuIDE4ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pXG4gMTg5Olx0XHQgIGluIHZpcnR1YWwgbWFjaGluZXMuICBUaGlzIGNhbiBiZSB1c2VkIGJ5IHRoZSB2aXJ0dWFsIG1hY2hpbmVcbiAxOTA6XHRcdCAgZmlybXdhcmUgdG8gaW1wbGVtZW50IFVFRkkgc2VjdXJlIGJvb3QuXG4gMTkxOlx0XG4gMTkyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTkzOlx0XG4gMTk0Olx0Y29uZmlnIEtWTV9IWVBFUlZcbiAxOTU6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4gMTk2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAxOTc6XHRcdGRlZmF1bHQgeVxuIDE5ODpcdFx0aGVscFxuIDE5OTpcdFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgSGFyZHdhcmUgVmlydHVhbGl6YXRpb24gRXh0ZW5zaW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgS1ZNLXJlbGF0ZWQgZXh0ZW5zaW9uczogYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBhbmQgYEtWTV9JTlRFTF9URFhgLiBJbW1lZGlhdGVseSwgdGhlIHByZXNlbmNlIG9mIHRoZXNlIHRocmVlIGluZGljYXRlcyB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGVuaGFuY2VtZW50cy4gYEtWTV9TTU1gIGxpa2VseSBkZWFscyB3aXRoIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gYEtWTV9BTURfU0VWYCBkZWZpbml0ZWx5IHJlbGF0ZXMgdG8gQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24sIGEgY3J1Y2lhbCBmZWF0dXJlIGZvciBkYXRhIGNvbmZpZGVudGlhbGl0eSBhbmQgaW50ZWdyaXR5IGluIFZNcy4gQW5kIHRoZW4gd2UgaGF2ZSBgS1ZNX0lOVEVMX1REWGAuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgSW50ZWwmIzM5O3MgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGBJTlRFTF9URFhfSE9TVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBob3N0IHNpZGUgaW1wbGVtZW50YXRpb24gYW5kIGltcGxpY2F0aW9ucy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGFzcGVjdHMgdGhhdCB0aGV5IHdhbnQgbWUgdG8gZm9jdXMgb24/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IExldCYjMzk7cyBjaGVjayBgSU5URUxfVERYX0hPU1RgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5URUxfVERYX0hPU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBsaW5lIG9mIHRob3VnaHQsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyYjMzk7cyBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIGxpa2UgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgSU5URUxfVERYX0hPU1QqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUuICpJTlRFTF9URFhfSE9TVCouIFNvdW5kcyBsaWtlIGl0JiMzOTtzIGEga2V5IGNvbXBvbmVudCBmb3IgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgb24gdGhlIGhvc3Qgc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgc3BlY2lmaWNhbGx5IGZyb20gYSBzeXN0ZW0gZGVzaWduIGFuZCBpbnRlZ3JhdGlvbiBwZXJzcGVjdGl2ZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQgKklOVEVMX1REWF9IT1NUKiByZWxpZXMgb24gdG8gZnVuY3Rpb24/IFdoYXQgbGlicmFyaWVzLCBrZXJuZWwgbW9kdWxlcywgb3Igb3RoZXIgcGllY2VzIG9mIHRoZSBpbmZyYXN0cnVjdHVyZSBkb2VzIHRoaXMgY29tcG9uZW50IG5lZWQ/JiMzNDsgUGVyaGFwcyBpdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgZmlybXdhcmUgcmV2aXNpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQklPUy4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcyB0aGlzOiAmIzM0O1doZXJlIGRvZXMgdGhpcyBmaXQgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHRydXN0ZWQgZW52aXJvbm1lbnQsIHRoZSBob3N0JiMzOTtzIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCBwb3RlbnRpYWxseSBhbnkgdmlydHVhbGl6YXRpb24gbGF5ZXJzIGluIHBsYXkuIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnRzLCBjb21wYXRpYmlsaXR5IGNvbmNlcm5zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gdGVsbHMgdXMgYWJvdXQgd2hhdCB0aGUgY29kZSBpcyBkb2luZyBvciByZXF1aXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjE4NjE6XHRcbjE4NjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4NjM6XHRcbjE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgZGVwZW5kZW5jaWVzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSB0aG91Z2h0cyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYElOVEVMX1REWF9IT1NUYCBoaW5nZXMgb24gYSBoYW5kZnVsIG9mIGNyaXRpY2FsIHByZXJlcXVpc2l0ZXMuIEl0JiMzOTtzIGJ1aWx0IHVwb24gdGhlIGZvdW5kYXRpb24gb2YgYENQVV9TVVBfSU5URUxgLCBvZiBjb3Vyc2UsIHRoYXQmIzM5O3MgZXhwZWN0ZWQgZm9yIGFueSBJbnRlbC1zcGVjaWZpYyBmZWF0dXJlLiBgWDg2XzY0YCBpcyBmdW5kYW1lbnRhbDsgNjQtYml0IGFyY2hpdGVjdHVyZSBpcyBhIGdpdmVuIGluIHRoaXMgY29udGV4dC4gYEtWTV9JTlRFTGAgaXMgY3J1Y2lhbCwgZ2l2ZW4gdGhhdCB3ZSBhcmUgZGlzY3Vzc2luZyB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBGdXJ0aGVybW9yZSwgYFg4Nl9YMkFQSUNgIGlzIGFsc28gYSBjcml0aWNhbCBkZXBlbmRlbmN5OyB0aGlzIHBvaW50cyB0byBBZHZhbmNlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFQSUMpIHVzYWdlLCB3aGljaCBpcyBrZXkgZm9yIGVmZmljaWVudCBpbnRlcnJ1cHQgaGFuZGxpbmcgaW4gbW9kZXJuIG11bHRpLWNvcmUgc3lzdGVtcywgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBgQ09OVElHX0FMTE9DYCBpcyBuZWNlc3NhcnkgYXMgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBhbiBpbXBvcnRhbnQgY29tcG9uZW50IGZvciB0aGUgaXNvbGF0aW9uIHByb2Nlc3MgdGhhdCBURFggcHJvdmlkZXMuIEZpbmFsbHksIGBYODZfTUNFYCwgb3IgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gc3VwcG9ydCwgcGxheXMgYSBrZXkgcGFydCBpbiB0aGUgcmVsaWFiaWxpdHkgYW5kIGVycm9yIGhhbmRsaW5nLCBlbnN1cmluZyByb2J1c3Qgb3BlcmF0aW9uIHdpdGhpbiB0aGlzIHNlY3VyZSBlbnZpcm9ubWVudC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZGVsdmUgaW50byBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBUaGlzIHdpbGwgYmUgYW5vdGhlciBzZXQgb2YgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBlbnRhaWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZz0yMz1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfQ1JZUFRPXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzozODpjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhcyByZXF1ZXN0ZWQ6CgoqKkRlcGVuZGVuY3kgQ2hlY2s6IENSWVBUT19ERVZfU1BfUFNQKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGUgYENSWVBUT19ERVZfU1BfUFNQYCBtb2R1bGUuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIGFuZCB0byBlbnN1cmUgSeKAmW0gb3BlcmF0aW5nIGluIGEgc2FmZSBhbmQgZWZmZWN0aXZlIG1hbm5lciwgSSBoYXZlIHRvIGZpcnN0IG1ldGljdWxvdXNseSBleGFtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIHNlcnZpY2VzIGl0IHJlbGllcyB1cG9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGNyZWF0aW5nIGEgY29tcHJlaGVuc2l2ZSBkZXBlbmRlbmN5IGdyYXBoIHRvIHZpc3VhbGl6ZSB0aGUgY29ubmVjdGlvbnMuIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBkZXBlbmRlbmNpZXM/IFRoaXMgY291bGQgbWVhbiBwb3RlbnRpYWwgc2VjdXJpdHkgcmlza3MuIERvIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyB2ZXJzaW9ucywgb3IgYW0gSSBkZWFsaW5nIHdpdGggYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXNzdWVzPyBUaGlzIGlzIGEgY29yZSBwYXJ0IG9mIG15IGV2YWx1YXRpb24gb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSB1cGRhdGVzIG9yIGNoYW5nZXMgSSYjMzk7bSBjb25zaWRlcmluZyB3b24mIzM5O3QgaW5hZHZlcnRlbnRseSBicmVhayBleGlzdGluZyBmdW5jdGlvbmFsaXRpZXMuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdFx0ICBDb3Byb2Nlc3Nvci4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgb2ZmbG9hZCBvZiBTSEEgYW5kIEFFUyBhbGdvcml0aG1zLlxuICAzNjpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcF9jcnlwdG8uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXG4gIDM5Olx0XHRib29sIFwmIzM0O1BsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcJiMzNDtcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcdTAwMjZcdTAwMjYgWDg2XzY0IFx1MDAyNlx1MDAyNiBBTURfSU9NTVVcbiAgNDI6XHRcdHNlbGVjdCBQQ0lfVFNNIGlmIFBDSVxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0IFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkuXG4gIDQ1Olx0XHQgVGhlIFBTUCBpcyBhIGRlZGljYXRlZCBwcm9jZXNzb3IgdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBrZXlcbiAgNDY6XHRcdCBtYW5hZ2VtZW50IGNvbW1hbmRzIGluIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgbW9kZSxcbiAgNDc6XHRcdCBhbG9uZyB3aXRoIHNvZnR3YXJlLWJhc2VkIFRydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IChURUUpIHRvXG4gIDQ4Olx0XHQgZW5hYmxlIHRoaXJkLXBhcnR5IHRydXN0ZWQgYXBwbGljYXRpb25zLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERUJVR0ZTXG4gIDUxOlx0XHRib29sIFwmIzM0O0VuYWJsZSBDQ1AgSW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbiAgNTI6XHRcdGRlZmF1bHQgblxuICA1MzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX0NDUFxuICA1NDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaXMgaXMgYSBicmllZiBtZW50YWwgbm90ZToKCioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgY29udGluZ2VudCBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBsaWtlbHkgYSBzZWN1cml0eS1mb2N1c2VkIG1vZHVsZSBvciBzdWJzeXN0ZW0gdGhhdCByZXF1aXJlcyBjZXJ0YWluIGhhcmR3YXJlIGFuZCB1bmRlcmx5aW5nIGNyeXB0b2dyYXBoaWMgc2VydmljZXMuIE5vdywgZ2l2ZW4gdGhhdCBkZXBlbmRlbmN5IGNoYWluLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcmUgY29tcG9uZW50IGl0IHJlbGllcyB1cG9uIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBiZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoYXQgY29tcG9uZW50IGRpcmVjdGx5IGRpY3RhdGVzIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgb2YgdGhlIGNvbXBvbmVudHMgd2hpY2ggYXJlIGRlcGVuZGVudCB1cG9uIGl0LiBJIG11c3QgY2hlY2sgb24gYENSWVBUT19ERVZfQ0NQX0REYCB0byBzZWUgaWYgdGhhdCYjMzk7cyBjb25maWd1cmVkIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcbiAgIDU6XHRcdGRlZmF1bHQgbVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxuICAgODpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7Q3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcdTAwMjZcdTAwMjYgRE1BREVWSUNFU1xuICAxNDpcdFx0c2VsZWN0IEhXX1JBTkRPTVxuICAxNTpcdFx0c2VsZWN0IERNQV9FTkdJTkVcbiAgMTY6XHRcdHNlbGVjdCBDUllQVE9fU0hBMVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTZcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxuICAyMDpcdFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTUzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBTeW1ib2xzKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuIFRoZSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0lOVEVMX1REWGAsIGBJTlRFTF9URFhfSE9TVGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBCdXQgaGFuZyBvbiwgYEtWTV9TTU1gIGlzIGFscmVhZHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgdGhlIG90aGVyIHR3bywgYEtWTV9BTURfU0VWYCBhbmQgYEtWTV9JTlRFTF9URFhgIGFyZSBhbHNvIGxpa2VseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGNvbnRpbmdlbnQgb24gZGVwZW5kZW5jaWVzLiBTbywgdGhlIGVzc2VudGlhbCBjb25maWdzIHdpbGwgYmUgdGhlc2Ugc2l4LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZm9jdXMgc3ltYm9scywgdGhlc2UgYXJlIGtleTogYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGFuZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSByZWFjaGFibGUsIG5vdCBzdGF0aWMsIGFuZCByZWxldmFudC4KCkkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgYWxsIHRoZSBzeW1ib2xzIGFyZSBpbmRlZWQgbm9uLXN0YXRpYzogYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AsIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGluIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCwgYW5kIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBQZXJmZWN0LiBUaG9zZSB0d28gb3RoZXIgdm14IHN5bWJvbHMgYXJlIHN0YXRpYywgc28gSSBjYW4gaWdub3JlIHRob3NlLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGFyZSB0aGVzZSB1c2VmdWwgc3ltYm9scz8gYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgdHJpZ2dlcmVkIHdoZW4gZXhlY3V0aW5nIGFuIFJTTSBpbnN0cnVjdGlvbiB3aGljaCBpcyB1c2VkIHRvIGxlYXZlIFNNTSwgc28gdGhhdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE1ha2VzIHNlbnNlLgoKYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBpcyB2ZXJ5IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQmIzM5O3MgdGhlIG1haW4gbG9vcCBmb3IgcnVubmluZyBhIHZDUFUhIFNvLCBpdOKAmXMgZXhlY3V0ZWQgb24gZXZlcnkgYEtWTV9SVU5gIGlvY3RsLCBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgVGhlIHF1ZXN0aW9uIGlzOiBpcyBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gICphbHdheXMqIGNhbGxlZD8gVGhhdCBuZWVkcyBjb25maXJtYXRpb24sIGFuZCBjb3VsZCBiZSBhIHZlcnkgdmFsdWFibGUgcGxhY2UgdG8gZm9jdXMgYXR0ZW50aW9uIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feDg2X3ZjcHVfcHJlX3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTg4MDA9c3RhdGljIGludCBjb21wbGV0ZV9lbXVsYXRlZF9tbWlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODg0My1cbmFyY2gveDg2L2t2bS94ODYuYzo4ODQ0OnN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg4NDUte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04ODgxPWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg5ODEtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODk4MjpcdHIgPSBrdm1feDg2X3ZjcHVfcHJlX3J1bih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy04OTgzLVx0aWYgKHIgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE1MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDY0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSG90LVBhdGggRnVuY3Rpb25zIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBuZXcgY29kZSBpbnRlZ3JhdGVzIGludG8gdGhlIEtWTSB4ODYgYXJjaGl0ZWN0dXJlLiBJIHNlZSB0aGF0IGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAgaXMgY2FsbGVkIHJpZ2h0IGF0IHRoZSBzdGFydCBvZiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0IG1lYW5zIGZ1bmN0aW9ucyBsaWtlIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYW5kIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYXJlIGJlaW5nIGNhbGxlZCAqZXZlcnkqIHRpbWUgYSBgS1ZNX1JVTmAgaW9jdGwgaXMgaXNzdWVkLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCBmdW5jdGlvbnMsIGJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBsaXN0aW5nIHRob3NlIHRvIHByZXZlbnQgc2tld2luZyB0ZXN0IGRpc3RyaWJ1dGlvbnMuIE1ha2VzIHNlbnNlLiBGdXp6aW5nIGEgc2ltcGxlIGJvb2xlYW4gcmV0dXJuIGlzbiYjMzk7dCBnb2luZyB0byBiZSBzdXBlciBmcnVpdGZ1bCBhbnl3YXkuCgpBbHJpZ2h0LCB3aGF0IGVsc2UgaXMgY2FsbGVkIGZyb20gdGhhdCBwcmUtcnVuIGZ1bmN0aW9uPyBBaCwgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYC4gSXQmIzM5O3MgYWxzbyBjYWxsZWQgZnJvbSB0aGVyZSwgdmlhIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBvcC4gU28gYWdhaW4sIGhvdC1wYXRoLiBHb3R0YSBhdm9pZCB0aGF0IG9uZS4KCldhaXQsIG5vdyBJIHNlZSB0aGF0IGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgaXMgYWxzbyBjYWxsZWQgZnJvbSBgZW11bGF0b3JfbGVhdmVfc21tYC4gQWhhISBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBMb29raW5nIGF0IHRoZSBjb2RlOgoKYGBgYwoJaWYgKHJldCA9PSBYODZFTVVMX0NPTlRJTlVFICZhbXA7JmFtcDsKCSAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpCgkJcmV0ID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CmBgYAoKSXQmIzM5O3MgYmVpbmcgY2FsbGVkIGluc2lkZSBgZW11bGF0b3JfbGVhdmVfc21tYC4gU28sIHRoZSBxdWVzdGlvbiBpczogaXMgKnRoYXQqIGEgaG90LXBhdGggZnVuY3Rpb24/IE5vLCBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGV4ZWN1dGluZyB0aGUgUlNNIGluc3RydWN0aW9uLiBUaGF0JiMzOTtzIGEgZ3JlYXQgY2FuZGlkYXRlISBUaGF0JiMzOTtzIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcy4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHkuIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgaXMgaG90LXBhdGguIFRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgY2FsbGluZyBpdCBmcm9tIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAuIFRoZSBwYXRjaCBqdXN0IHJlZmFjdG9yZWQgYW5kIHJlbmFtZWQgdGhlIG9wIHRvIGNhbGwgZnJvbSBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gIGFuZCAqYWxzbyogZnJvbSBgZW11bGF0b3JfbGVhdmVfc21tYC4gU28gdGhlICpuZXcqIGxvZ2ljIGlzIGluIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLiBMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoYXQuCgpZZXAsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHNlZW1zIHRvIGJlIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guIFRoZSByZXN0IGlzIHJlZmFjdG9yaW5nIHRvIGFsbG93IGNhbGxpbmcgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGZyb20gdGhlIG5ldyBlbnRyeSBwb2ludC4KClNvLCBpbiBzdW1tYXJ5LCBmdXp6aW5nIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHNlZW1zIGxpa2UgdGhlIGJlc3QgYXBwcm9hY2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3ZteC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDMwOlx0XHRyZXR1cm4gMTtcbjYwMzE6XHR9XG42MDMyOlx0XG42MDMzOlx0LypcbjYwMzQ6XHQgKiBSZXR1cm5zIHRydWUgaWYgZW11bGF0aW9uIGlzIHJlcXVpcmVkIChkdWUgdG8gdGhlIHZDUFUgaGF2aW5nIGludmFsaWQgc3RhdGVcbjYwMzU6XHQgKiB3aXRoIHVuc3Jlc3RyaWN0ZWQgZ3Vlc3QgbW9kZSBkaXNhYmxlZCkgYW5kIEtWTSBjYW4mIzM5O3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZVxuNjAzNjpcdCAqIGN1cnJlbnQgdkNQVSBzdGF0ZS5cbjYwMzc6XHQgKi9cbjYwMzg6XHRib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjYwMzk6XHR7XG42MDQwOlx0XHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbjYwNDE6XHRcbjYwNDI6XHRcdGlmICghdm14LVx1MDAzZXZ0LmVtdWxhdGlvbl9yZXF1aXJlZClcbjYwNDM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNjA0NDpcdFxuNjA0NTpcdFx0LypcbjYwNDY6XHRcdCAqIEl0IGlzIGFyY2hpdGVjdHVyYWxseSBpbXBvc3NpYmxlIGZvciBlbXVsYXRpb24gdG8gYmUgcmVxdWlyZWQgd2hlbiBhXG42MDQ3Olx0XHQgKiBuZXN0ZWQgVk0tRW50ZXIgaXMgcGVuZGluZyBjb21wbGV0aW9uLCBhcyBWTS1FbnRlciB3aWxsIFZNLUZhaWwgaWZcbjYwNDg6XHRcdCAqIGd1ZXN0IHN0YXRlIGlzIGludmFsaWQgYW5kIHVucmVzdHJpY3RlZCBndWVzdCBpcyBkaXNhYmxlZCwgaS5lLiBLVk1cbjYwNDk6XHRcdCAqIHNob3VsZCBzeW50aGVzaXplIFZNLUZhaWwgaW5zdGVhZCBlbXVsYXRpb24gTDIgY29kZS4gIFRoaXMgcGF0aCBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzIGZvciBhIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgZmxhZyBpcyBqdXN0IGEgc2ltcGxlIGNoZWNrLCBub3RoaW5nIGNvbXBsZXggdGhlcmUuIFRoZSBwYXRjaCBhZGRzIGEgdGVzdCwgc3BlY2lmaWNhbGx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBiZWluZyB0ZXN0ZWQuIFRoZSB0ZXN0JiMzOTtzIGxvZ2ljIGlzIGFsbCBhYm91dCBpbmplY3RpbmcgYW4gU01JIHdoaWxlIEwyIGlzIHJ1bm5pbmcsIGZvcmNpbmcgYW4gSS9PIGV4aXQgZnJvbSBMMSwgbWFuaXB1bGF0aW5nIFRSIGluIHRoZSBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEsIGFuZCB0aGVuIGV4cGVjdGluZyBhIFNIVVRET1dOIGV4aXQgZHVlIHRvIGludmFsaWQgTDIgc3RhdGUgb24gUlNNLiBUaGlzIGlzIGEgdmVyeSBjbGVhciB0ZXN0IG9mIHRoYXQgbmV3IGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGxvZ2ljLgoKVGhhdCBtYWtlcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0aGUga2V5IGZ1bmN0aW9uLiBNeSBmb2N1cyBpcyBlbnRpcmVseSB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlnIG9wdGlvbnMuIElzIGBLVk1fU01NYCBzdWZmaWNpZW50PyBXZWxsLCB0aGlzIHRlc3QgaXMgVk1YLXNwZWNpZmljLCBzbyBjbGVhcmx5IGBLVk1fSU5URUxgIGlzIGEgbXVzdC1oYXZlLiBBbmQgc2luY2UgdGhlIHRlc3Qgc3BlY2lmaWNhbGx5IHRhcmdldHMgYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBLVk1fU01NYCBpcyBlc3NlbnRpYWwuIFRoZSByZWZhY3RvcmVkIGNvZGUgbmVlZHMgYEtWTV9BTURfU0VWYCBhbmQgYEtWTV9JTlRFTF9URFhgIHRvIGNvbXBpbGUgYW5kIGJlIHRlc3RlZCB0b28uCgpMZXQmIzM5O3MgbGlzdCB0aGVzZSBkZXBlbmRlbmNpZXMgZXhwbGljaXRseToKCiogICBgS1ZNX1NNTWAKKiAgIGBLVk1fQU1EX1NFVmAKKiAgIGBLVk1fSU5URUxfVERYYAoqICAgYElOVEVMX1REWF9IT1NUYAoqICAgYENSWVBUT19ERVZfU1BfUFNQYAoqICAgYENSWVBUT19ERVZfQ0NQX0REYAoKSG9sZCBvbiwgZG8gd2UgYWxzbyBuZWVkIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAgZXhwbGljaXRseT8gVGhleSBhcmUgdXN1YWxseSBlbmFibGVkIGluIHN5emthbGxlciBieSBkZWZhdWx0LCBidXQgdGhlcmUmIzM5O3Mgbm8gaGFybSBpbiBpbmNsdWRpbmcgdGhlbSwganVzdCBpbiBjYXNlLiBUaGV5IGFyZSB0cmlzdGF0ZSwgc28gc3BlY2lmeWluZyB0aGVtIHdvbiYjMzk7dCBiZSBhbiBpc3N1ZS4gV2FpdCwgYSBiaXQgbW9yZSBkaWdnaW5nLiBJdCBsb29rcyBsaWtlIGBLVk1fSU5URUxfVERYYCBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EX1NFVmAgZGVwZW5kcyBvbiBgS1ZNX0FNRGAuIFNvLCB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KCkp1c3QgdG8gYmUgc3VyZSwgaXMgYEtWTV9TTU1gIGEgZGVmYXVsdC1lbmFibGVkIG9wdGlvbj8gWWVzLCBpdCBpcyBzZXQgdG8gYGRlZmF1bHQgeWAsIGJ1dCBpdCYjMzk7cyBzdGlsbCBwcnVkZW50IHRvIHNwZWNpZnkgaXQgZGlyZWN0bHkuCgpPa2F5LCBpcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0cnVseSB0aGUgb25seSBmdW5jdGlvbiBvZiBpbnRlcmVzdD8gQXJlIHRoZXJlIGFueSBvdGhlcnMgdGhhdCBhcmUgbm90IHBlcmZvcm1hbmNlLWNyaXRpY2FsPyBMZXQmIzM5O3MgY2hlY2suIEFoLCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFyZSBwZXJmb3JtYW5jZS1jcml0aWNhbC4gU28sIHllcywgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgdGhlIG9ubHkgZm9jdXMgaGVyZS4KCkZpbmFsbHksIGlzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGV4cG9ydGVkLCBvciBpcyBpdCBzdGF0aWM/IEl0JiMzOTtzIG5vbi1zdGF0aWMgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AuIEJ1dCBob2xkIG9uLCBpZiBgQ09ORklHX0tWTV9TTU1gIGlzICpub3QqIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIGl0JiMzOTtzIGRlZmluZWQgYXMgc3RhdGljIGlubGluZSBvciBzdGF0aWMuIEhvd2V2ZXIsIHdpdGggYENPTkZJR19LVk1fU01NPXlgLCBpdCYjMzk7cyBpbmRlZWQgbm9uLXN0YXRpYyBpbiBgc21tLmNgLgoKVGhlcmVmb3JlLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaW4gYHNtbS5jYCBmb3IgY29ycmVjdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTcyLVxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3NtbS5jLTU3NC17XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3NtbS5oOjE1OTppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjAtdm9pZCBwcm9jZXNzX3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc1OS0jaWZuZGVmIENPTkZJR19LVk1fU01NXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS94ODYuYy01NzYxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSU00gSW5zdHJ1Y3Rpb24gRW11bGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgUlNNIGluc3RydWN0aW9uIGVtdWxhdGlvbiB3aXRoaW4gS1ZNLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIHJlc2lkZXMgaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAgd2l0aGluIGBzbW0uY2AuIEkgY29uZmlybWVkIHRoYXQgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBpcyBpbmRlZWQgKm5vdCogc3RhdGljLCB3aGljaCBpcyBnb29kIGZvciBpbnN0cnVtZW50YXRpb24uCgpJIGRpZCBhIHF1aWNrIHNjYW4gb2YgYHNtbS5jYCBhbmQgbm90ZWQgdGhhdCBgcnNtX2xvYWRfc3RhdGVfMzJgIGFuZCBgcnNtX2xvYWRfc3RhdGVfNjRgIGFyZSBzdGF0aWMsIGFuZCBgZW11bGF0b3JfbGVhdmVfc21tYCBpcywgb2YgY291cnNlLCB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHRoZSBSU00gaW5zdHJ1Y3Rpb24uCgpUaGUgbWVhdCBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiBgZW11bGF0b3JfbGVhdmVfc21tYC4gU3BlY2lmaWNhbGx5LCBpdCBjYWxscyBhIGZ1bmN0aW9uLCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAsIGFuZCwgaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHRoZSByb3V0aW5lIHJldHVybnMgYFg4NkVNVUxfVU5IQU5ETEVBQkxFYC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBkZWFsIHdpdGggaW52YWxpZCBndWVzdCBzdGF0ZSBkdXJpbmcgYW4gUlNNIHRyYW5zaXRpb24sIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGlzc3Vlcy4KClRoZSByZXN0IG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHJlZmFjdG9yaW5nLiBJdCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gY2hlY2sgbG9naWMgaW50byBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGFuZCBpdCBtYWtlcyBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYXZhaWxhYmxlIGFzIGEgc2VwYXJhdGUgb3BlcmF0aW9uIHRvIHN1cHBvcnQgdGhpcyBuZXcgY2hlY2suIFRoZSBsb2dpYyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGhhbmRsZSBwb3RlbnRpYWxseSB1bmhhbmRsZWFibGUgc2NlbmFyaW9zIGR1cmluZyBSU00uCgpUaGVyZWZvcmUsIGZyb20gYSB0ZXN0aW5nIHBlcnNwZWN0aXZlLCBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyB0aGUga2V5IHRhcmdldC4gVGhlIG5ldyBjb25kaXRpb24gaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2hvdWxkIGJlIHRoZSBmb2N1cyBvZiBmdXp6aW5nIGVmZm9ydHMuCgpOb3csIGZvciBjb25maWd1cmluZyBhIHRlc3RpbmcgZW52aXJvbm1lbnQsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBzb21lIGtleSBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGRlcGVuZGVudCBvbiBzb21lIHNwZWNpZmljIGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGBLVk1fSU5URUxfVERYYCwgYElOVEVMX1REWF9IT1NUYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYWxsIG9mIHRoZXNlIGFyZSBwcmVzZW50IGFuZCBlbmFibGVkLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IGBLVk1fSU5URUxfVERYYCBhbmQgYElOVEVMX1REWF9IT1NUYCBtaWdodCBub3QgYmUgaW4gZXZlcnkga2VybmVsIHZlcnNpb24sIGJ1dCB0aGV5IGFyZSBhdmFpbGFibGUgaGVyZS4KCkZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZXR1cCwgYW5kIHRvIG1pbmltaXplIHRoZSByaXNrIG9mIG1pc3Npbmcgc29tZXRoaW5nLCBJJiMzOTtsbCBhbHNvIGFkZCBhIGZldyBzdGFuZGFyZCBjb25maWd1cmF0aW9uczogYFg4Nl82NGAsIGBDUFVfU1VQX0lOVEVMYCwgYENQVV9TVVBfQU1EYCwgYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYFg4Nl9NQ0VgLiBBZGRpdGlvbmFsbHksIEkmIzM5O2xsIGVuYWJsZSBgQU1EX0lPTU1VYCB0byBlbnN1cmUgdGhhdCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGZ1bmN0aW9ucyBjb3JyZWN0bHkuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNC1cdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozMzpjb25maWcgQU1EX0lPTU1VX0lPTU1VRkRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXHRib29sIFwmIzM0O0VuYWJsZSBJT01NVUZEIGZlYXR1cmVzIGZvciBBTUQgSU9NTVUgKEVYUEVSSU1FTlRBTClcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQyLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXHRib29sIFwmIzM0O0VuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGEgU2VjdXJlIEtWTSBFbnZpcm9ubWVudCoqCgpBbHJpZ2h0LCB0aGUgc3lzdGVtIGRlZmluaXRlbHkgaGFzIGBBTURfSU9NTVVgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBjb25maWd1cmF0aW9uLCBhcyB0aGlzIGlzIGdvaW5nIHRvIGJlIG15IHRob3VnaHQgcHJvY2VzcyBmb3Igc2V0dGluZyB1cCBhIHNlY3VyZSBLVk0gZW52aXJvbm1lbnQuIEkmIzM5O20gZ29pbmcgdG8gcmVmaW5lIHRoaXMgbGlzdCB0byBtYWtlIGl0IGEgYml0IG1vcmUgY29tcGxldGUsIGFuZCBJJiMzOTtsbCBpbmNsdWRlIHRoaW5ncyB0aGF0IEkga25vdyBhcmUgaW1wb3J0YW50IGZvciB0aGlzIHNwZWNpZmljIHNjZW5hcmlvOgpgS1ZNX1NNTWAsIHRoYXQmIzM5O3MgYSBuZWNlc3NpdHkKYEtWTV9BTURfU0VWYCBpcyBkZWZpbml0ZWx5IGltcG9ydGFudCB3aXRoIEFNRCBJT01NVQpgS1ZNX0lOVEVMX1REWGAsIGxldCYjMzk7cyBhZGQgdGhhdCBmb3IgY29tcGxldGVuZXNzCmBJTlRFTF9URFhfSE9TVGAsIHRoYXQgb25lIHRvby4KYENSWVBUT19ERVZfU1BfUFNQYCB3aWxsIGJlIHVzZWZ1bApgQ1JZUFRPX0RFVl9DQ1BfRERgLCBJIGNhbiBzZWUgdGhvc2UgdHdvIGJlaW5nIHVzZWZ1bCBpbiBjb25qdW5jdGlvbi4KYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYCwgYmFzaWMgS1ZNLCBvZiBjb3Vyc2UuCmBBTURfSU9NTVVgLCBhZ2FpbiwganVzdCBtYWtpbmcgc3VyZS4KCk9rYXksIG5vdyBsZXQmIzM5O3MgdGhpbmsgY3JpdGljYWxseSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGluY2x1ZGluZyBgS1ZNX0lOVEVMX1REWGAgLiBJIHJlbWVtYmVyIHRoYXQgaXQgZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RgLCBhbmQgdGhhdCBpbiB0dXJuIGRlcGVuZHMgb24gYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gSG1tLCBJIHNob3VsZCBwcm9iYWJseSBhZGQgdGhvc2UgZGVwZW5kZW5jaWVzIHRvIHRoZSBjb25maWcganVzdCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgZXZlcnl0aGluZyYjMzk7cyBwcm9wZXJseSBlbmFibGVkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzb2xpZCwgYW5kIEkmIzM5O20gbm90IGNoYXNpbmcgZG93biBzb21lIG9ic2N1cmUgZGVwZW5kZW5jeSBsYXRlci4gU28gbGV0JiMzOTtzIGFkZDoKYFg4Nl9YMkFQSUNgCmBDT05USUdfQUxMT0NgCmBYODZfTUNFYAoKTm93IGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBgQ09OVElHX0FMTE9DYCBpcyBhY3R1YWxseSBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgdGhlbiByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT05USUdfQUxMT0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03MDk9Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG4tLVxubW0vS2NvbmZpZy03MTgtXG5tbS9LY29uZmlnOjcxOTpjb25maWcgQ09OVElHX0FMTE9DXG5tbS9LY29uZmlnLTcyMC1cdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFx1MDAyNlx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNTIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaGlua2luZyBvbiBDT05USUdfQUxMT0MqKgoKT2theSwgc28gYENPTlRJR19BTExPQ2AgaXMgYSBgZGVmX2Jvb2xgLCB3aGljaCBtZWFucyBJIGRvbiYjMzk7dCBnZXQgZGlyZWN0IGNvbnRyb2wgb3ZlciB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQuIEl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50LCBhbmQgcmlnaHQgbm93LCB0aGUgbG9naWMgaXMgdGllZCB0byBgTUVNT1JZX0lTT0xBVElPTiAmYW1wOyZhbXA7IENPTVBBQ1RJT05gIG9yIGBDTUFgLiBIbW0sIHJhdGhlciB0aGFuIHVudGFuZ2xpbmcgYSBtb3JlIGNvbXBsZXggY29uZGl0aW9uYWwsIGl0IGxvb2tzIGxpa2UgYENNQWAgaXMgdGhlIHNpbXBsZXN0IHBhdGggdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQganVzdCBhZGQgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgQ01BYC4gVGhhdCYjMzk7cyB0aGUgbW9zdCBleHBlZGllbnQgYW5kIGxpa2VseSB0aGUgbW9zdCByZWxpYWJsZSBhcHByb2FjaCBhdCB0aGlzIGp1bmN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ01BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi0tXG5tbS9LY29uZmlnLTEwNjYtXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODEtXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwODMtXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4Ny1cbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5NC1cbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXG5tbS9LY29uZmlnLTEwOTYtXHRpbnQgXCYjMzQ7TWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGlzIHByb2JsZW0uIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgYENNQWAg4oCTIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvci4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBmb2N1cyBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgYSBjaGFsbGVuZ2UgYXJvdW5kIGZyYWdtZW50YXRpb24sIGxhcmdlIGFsbG9jYXRpb25zLCBvciBwZXJoYXBzIE5VTUEgY29uc2lkZXJhdGlvbnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYFg4Nl9YMkFQSUNgLiBUaGlzIGlzIGNsZWFybHkgaW5kaWNhdGluZyBhbiB4ODYgYXJjaGl0ZWN0dXJlIHdpdGggdGhlIFgyQVBJQyBmZWF0dXJlIGVuYWJsZWQuIFRoaXMgaW1tZWRpYXRlbHkgaW1wbGllcyBhIHNjYWxlIG9mIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgLSB0aGluayBpbnRlcnJ1cHQgaGFuZGxpbmcsIElQSSBwZXJmb3JtYW5jZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb24gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEl0IGFsc28gaW1wbGllcyBhIGNlcnRhaW4gbGV2ZWwgb2Ygc3lzdGVtIGNvbmZpZ3VyYXRpb24gLSBjb3JlIGNvdW50LCBCSU9TIHNldHRpbmdzLCBhbmQgT1Mga2VybmVsIG9wdGlvbnMgd2lsbCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgaW50ZXJyZWxhdGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvLCBgQ01BYCBhbmQgYFg4Nl9YMkFQSUNgLCBtaWdodCBpbnRlcmFjdCBvciBjb25mbGljdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgcG90ZW50aWFsbHkgcHJvZm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfWDJBUElDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NDM2PWNvbmZpZyBTTVBcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTQ1OC1cbmFyY2gveDg2L0tjb25maWc6NDU5OmNvbmZpZyBYODZfWDJBUElDXG5hcmNoL3g4Ni9LY29uZmlnLTQ2MC1cdGJvb2wgXCYjMzQ7eDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIENQVSBFcnJvciBIYW5kbGluZyBNZWNoYW5pc21zKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgYFg4Nl9YMkFQSUNgIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25zaWRlciBpdHMgaW1wbGljYXRpb25zIGZvciBpbnRlci1wcm9jZXNzb3IgY29tbXVuaWNhdGlvbiBhbmQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGVycm9yIGhhbmRsaW5nLiBJcyB0aGlzIGdvaW5nIHRvIGJlIHRoZSAqcHJpbWFyeSogbWVjaGFuaXNtIHdlJiMzOTtyZSB1c2luZyBmb3Igc2lnbmFsaW5nIGVycm9ycz8gT3IgaXMgaXQgYSBzZWNvbmRhcnkgc3lzdGVtPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIGFyY2hpdGVjdHVyZXMgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGFjcm9zcyBkaWZmZXJlbnQgY29yZXMgYW5kIHNvY2tldHM/IEkgbmVlZCB0byBjb25zaWRlciB0aGUgb3ZlcmhlYWQgb2YgdGhpcyBhcHByb2FjaC4KCk5vdywgbGV0JiMzOTtzIHBpdm90IHRvIGBYODZfTUNFYC4gVGhpcyBmZWVscyBsaWtlIHRoZSBtb3JlIGxpa2VseSBjYW5kaWRhdGUgZm9yIG91ciBjb3JlIGhhcmR3YXJlIGVycm9yIHJlcG9ydGluZy4gTXkgbWluZCBpcyBhbHJlYWR5IGp1bXBpbmcgdG8gdGhlIHNwZWNpZmljIG1hY2hpbmUgY2hlY2sgYXJjaGl0ZWN0dXJlIHJlZ2lzdGVycyBhbmQgdGhlIGZsb3cgb2YgZXJyb3IgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgT1MmIzM5O3MgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMuIElzIGl0IGdvaW5nIHRvIGJlIGEgc2ltcGxlIG5vdGlmaWNhdGlvbiwgb3Igd2lsbCB3ZSBoYXZlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgcmVzcG9uc2UgdG8gZGlmZmVyZW50IGVycm9yIHR5cGVzPyBXaGF0IGFib3V0IGVycm9yIGNvbnRhaW5tZW50PyBBbmQgbWVtb3J5IGVycm9yIGNvcnJlY3Rpb24gY2FwYWJpbGl0aWVzPyBUaGUgc3BlY2lmaWMgTVNScyBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXJyb3IgY29kZXMgYXJlIHRvcCBvZiBtaW5kLiBOZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGhvdyB0aGlzIHBsYXlzIHdpdGggb3RoZXIgZXJyb3IgbW9kZWxzIGxpa2UgcGFyaXR5IGFuZCBFQ0MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfTUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTExNz1jb25maWcgWDg2X1JFUk9VVEVfRk9SX0JST0tFTl9CT09UX0lSUVNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTExMzktXG5hcmNoL3g4Ni9LY29uZmlnOjExNDA6Y29uZmlnIFg4Nl9NQ0VcbmFyY2gveDg2L0tjb25maWctMTE0MS1cdGJvb2wgXCYjMzQ7TWFjaGluZSBDaGVjayAvIG92ZXJoZWF0aW5nIHJlcG9ydGluZ1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMTE0OS1cbmFyY2gveDg2L0tjb25maWc6MTE1MDpjb25maWcgWDg2X01DRUxPR19MRUdBQ1lcbmFyY2gveDg2L0tjb25maWctMTE1MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZGVwcmVjYXRlZCAvZGV2L21jZWxvZyBjaGFyYWN0ZXIgZGV2aWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTU3LVxuYXJjaC94ODYvS2NvbmZpZzoxMTU4OmNvbmZpZyBYODZfTUNFX0lOVEVMXG5hcmNoL3g4Ni9LY29uZmlnLTExNTktXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTY1LVxuYXJjaC94ODYvS2NvbmZpZzoxMTY2OmNvbmZpZyBYODZfTUNFX0FNRFxuYXJjaC94ODYvS2NvbmZpZy0xMTY3LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gveDg2L0tjb25maWc9MTE3ND1jb25maWcgWDg2X0FOQ0lFTlRfTUNFXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTgxLVxuYXJjaC94ODYvS2NvbmZpZzoxMTgyOmNvbmZpZyBYODZfTUNFX1RIUkVTSE9MRFxuYXJjaC94ODYvS2NvbmZpZy0xMTgzLVx0ZGVwZW5kcyBvbiBYODZfTUNFX0FNRCB8fCBYODZfTUNFX0lOVEVMXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTg1LVxuYXJjaC94ODYvS2NvbmZpZzoxMTg2OmNvbmZpZyBYODZfTUNFX0lOSkVDVFxuYXJjaC94ODYvS2NvbmZpZy0xMTg3LVx0ZGVwZW5kcyBvbiBYODZfTUNFIFx1MDAyNlx1MDAyNiBYODZfTE9DQUxfQVBJQyBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NjMKCQkJCQkJCW91dHB1dDogMjc1CgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgWDg2X01DRWAgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIGBYODZfTUNFYCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBLVk0gaGFuZGxlcyBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdGhyb3VnaCB0aGUgUlNNIGluc3RydWN0aW9uLiBUaGUgY29uZmlncyBpbiBwbGF5IGFyZSBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGBLVk1fSU5URUxfVERYYCwgYElOVEVMX1REWF9IT1NUYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYEFNRF9JT01NVWAsIGBDTUFgLCBgWDg2X1gyQVBJQ2AsIGFuZCwgb2YgY291cnNlLCBgWDg2X01DRWAuCgpUaGUgaGVhcnQgb2YgdGhlIG1hdHRlciBpcyB0aGUgYGVtdWxhdG9yX2xlYXZlX3NtbWAgZnVuY3Rpb24uIFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgaW52YWxpZCBndWVzdCBzdGF0ZSBpc24mIzM5O3QgaGFuZGxlZCBjb3JyZWN0bHkgd2hlbiBhIGd1ZXN0IGV4aXRzIFNNTSB1c2luZyBSU00uIFRoZSBmaXggbW9kaWZpZXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gY2hlY2sgaWYgdGhlIHJlcXVpcmVkIGVtdWxhdGlvbiBpcyB1bmhhbmRsZWFibGUsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgYXJvdW5kIHRoaXMgbmV3IGNoZWNrLCBtb3Zpbmcgc29tZSBsb2dpYyBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZG8gd2UgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cz8mIzM0OyBUaGUgcGF0Y2gmIzM5O3MgY29yZSBsb2dpYyBjaGFuZ2UgaGFwcGVucyBpbiBgZW11bGF0b3JfbGVhdmVfc21tYCwgc28gdGhhdCYjMzk7cyB0aGUgbmF0dXJhbCBmaXJzdCB0YXJnZXQuCgpJIGNvbnNpZGVyZWQgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhcyBhIHBvc3NpYmxlIGZvY3VzIHN5bWJvbC4gSG93ZXZlciwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgZW11bGF0b3JfbGVhdmVfc21tYCBhbmQgYGt2bV94ODZfdmNwdV9wcmVfcnVuYC4gSWYgd2UgZm9jdXMgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAsIHdlJiMzOTtsbCBpbmhlcmVudGx5IGhpdCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFueXdheSwgbWFraW5nIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGEgc3VmZmljaWVudCwgYW5kIHBlcmhhcHMgbW9yZSBkaXJlY3QsIHBvaW50IG9mIGF0dGFjay4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgZnJvbSB1c2Vyc3BhY2U/IFRoZSBhbnN3ZXIgaXMgeWVzLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiBlbXVsYXRpbmcgdGhlIFJTTSBpbnN0cnVjdGlvbiwgd2hpY2ggaXMgYSAxNi1iaXQgaW5zdHJ1Y3Rpb24gKDB4MEYgMHhBQSkgZXhlY3V0YWJsZSBieSB0aGUgZ3Vlc3QgaW4gU01NLiBUaGUgUlNNIGluc3RydWN0aW9uIGVmZmVjdGl2ZWx5IGhhbmRsZXMgdGhlIGV4aXQgZnJvbSBTTU0uIFN5emthbGxlciBjYW4gZ2VuZXJhdGUgdGhpcyBpbnN0cnVjdGlvbiBhbmQgZXhlY3V0ZSBpdCB3aXRoaW4gdGhlIFZNLiBUbyBjb25maXJtLCBJIGRvdWJsZS1jaGVja2VkLCBhbmQgZm91bmQgdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCB0ZXN0LCB3aGljaCBpbmNsdWRlczoKCmBgYGMKc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7CgkweGU0LCBBUkJJVFJBUllfSU9fUE9SVCwJLyogSU4gJEFSQklUUkFSWV9JT19QT1JULCAlYWwgKi8KCTB4MGYsIDB4YWEsCQkJLyogUlNNICovCn07CmBgYAoKVGhpcyB0ZXN0IGNsZWFybHkgZGVtb25zdHJhdGVzIHRoZSByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFRoZXJlZm9yZSwgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgYWJzb2x1dGVseSB0aGUgY29ycmVjdCBmb2N1cyBzeW1ib2wuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7WDg2X1gyQVBJQyYjMzQ7LAogICAgJiMzNDtYODZfTUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW11bGF0b3JfbGVhdmVfc21tJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIEtWTSBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgaW52YWxpZCBndWVzdCBzdGF0ZSB3aGVuIGxlYXZpbmcgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgdGhlIFJTTSBpbnN0cnVjdGlvbi4gSXQgbW9kaWZpZXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gY2hlY2sgaWYgdW5oYW5kbGVhYmxlIGVtdWxhdGlvbiBpcyByZXF1aXJlZCwgYW5kIGlmIHNvLCByZXR1cm5zIGBYODZFTVVMX1VOSEFORExFQUJMRWAuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGB2Y3B1X3ByZV9ydW5gIG9wIGludG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgdG8gc3VwcG9ydCB0aGlzIGNoZWNrLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiBgZW11bGF0b3JfbGVhdmVfc21tYCB0byB0ZXN0IHRoaXMgbmV3IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtYODZfWDJBUElDJiMzNDssCiAgICAmIzM0O1g4Nl9NQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgS1ZNIGRvZXMgbm90IHByb3Blcmx5IGhhbmRsZSBpbnZhbGlkIGd1ZXN0IHN0YXRlIHdoZW4gbGVhdmluZyBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIHZpYSB0aGUgUlNNIGluc3RydWN0aW9uLiBJdCBtb2RpZmllcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0byBjaGVjayBpZiB1bmhhbmRsZWFibGUgZW11bGF0aW9uIGlzIHJlcXVpcmVkLCBhbmQgaWYgc28sIHJldHVybnMgYFg4NkVNVUxfVU5IQU5ETEVBQkxFYC4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHZjcHVfcHJlX3J1bmAgb3AgaW50byBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYW5kIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCB0byBzdXBwb3J0IHRoaXMgY2hlY2suIFdlIHNob3VsZCBmb2N1cyBmdXp6aW5nIG9uIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIHRlc3QgdGhpcyBuZXcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODowNy43ODQzNTMzOThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NjU3NjUzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIlg4Nl9YMkFQSUNcIixcbiAgICBcIlg4Nl9NQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbXVsYXRvcl9sZWF2ZV9zbW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBLVk0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgd2hlbiBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIEl0IG1vZGlmaWVzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIGNoZWNrIGlmIHVuaGFuZGxlYWJsZSBlbXVsYXRpb24gaXMgcmVxdWlyZWQsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgdmNwdV9wcmVfcnVuYCBvcCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHRvIHN1cHBvcnQgdGhpcyBjaGVjay4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gdGVzdCB0aGlzIG5ldyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MDcuNzg0MzYwNzc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzAzNTY2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyYWI4N2E4Mzc4NmQzMzVhNmIyN2Q1ZGQyNWI4ZjUyMWVjZDRiYzc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDI6NTg6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5pbmRleCA1Y2IxMzJlY2EzYzM1Li5lMjEzYzlhZTNlMzAxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuQEAgLTYzLDExICs2MywxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKVxcbiAjZW5kaWZcXG4gS1ZNX1g4Nl9PUChmbHVzaF90bGJfZ3ZhKVxcbiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndWVzdClcXG4tS1ZNX1g4Nl9PUCh2Y3B1X3ByZV9ydW4pXFxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKVxcbiBLVk1fWDg2X09QKHZjcHVfcnVuKVxcbiBLVk1fWDg2X09QKGhhbmRsZV9leGl0KVxcbiBLVk1fWDg2X09QKHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKVxcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZClcXG4gS1ZNX1g4Nl9PUChzZXRfaW50ZXJydXB0X3NoYWRvdylcXG4gS1ZNX1g4Nl9PUChnZXRfaW50ZXJydXB0X3NoYWRvdylcXG4gS1ZNX1g4Nl9PUChwYXRjaF9oeXBlcmNhbGwpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggN2EyNTg4MzE2MTZmYS4uMjgzODQ3NjE5ZmY4OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xNTg2LDEzICsxNTg2LDE1IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdCAqL1xcbiBcXHR2b2lkICgqZmx1c2hfdGxiX2d1ZXN0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4tXFx0aW50ICgqdmNwdV9wcmVfcnVuKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitcXHRib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gKCp2Y3B1X3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBydW5fZmxhZ3MpO1xcbiBcXHRpbnQgKCpoYW5kbGVfZXhpdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBleGl0X2Zhc3RwYXRoKTtcXG4gXFx0aW50ICgqc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0dm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rXFx0Ym9vbCAoKnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK1xcbiBcXHR2b2lkICgqc2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1hc2spO1xcbiBcXHR1MzIgKCpnZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0dm9pZCAoKnBhdGNoX2h5cGVyY2FsbCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc21tLmMgYi9hcmNoL3g4Ni9rdm0vc21tLmNcXG5pbmRleCBhNDQ2NDg3YmRkNWNmLi42NTZhMzhkYWQ3ZTdhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zbW0uY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zbW0uY1xcbkBAIC02NDksNiArNjQ5LDEwIEBAIGludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuICNlbmRpZlxcbiBcXHRcXHRyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCBcXHUwMDI2c21yYW0uc21yYW0zMik7XFxuIFxcbitcXHRpZiAocmV0ID09IFg4NkVNVUxfQ09OVElOVUUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSlcXG4rXFx0XFx0cmV0ID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBJZiBSU00gZmFpbHMgYW5kIHRyaWdnZXJzIHNodXRkb3duLCBhcmNoaXRlY3R1cmFsbHkgdGhlIHNodXRkb3duXFxuIFxcdCAqIG9jY3VycyAqYmVmb3JlKiB0aGUgdHJhbnNpdGlvbiB0byBndWVzdCBtb2RlLiAgQnV0IGR1ZSB0byBLVk0nc1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IDkwYTA4ZDM2ZDg0M2QuLmZjYjQxZGZkZTRjMDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtMzU1Niw2ICszNTU2LDExIEBAIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdF9fc2V2X2VzX3VubWFwX2doY2Ioc3ZtKTtcXG4gfVxcbiBcXG4rYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2VuZWVkX2luaXQ7XFxuK31cXG4rXFxuIGludCBwcmVfc2V2X3J1bihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZzdm1fZGF0YSwgY3B1KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG5pbmRleCBjMWU2ZDYyNTEyYjk1Li45ZDYwN2I5OGJkMDY3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTQ0MDAsMTYgKzQ0MDAsNiBAQCBzdGF0aWMgdm9pZCBzdm1fY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHZjcHUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHN2bV92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG4tXFx0aWYgKHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2VuZWVkX2luaXQpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0jZW5kaWZcXG4tXFxuLVxcdHJldHVybiAxO1xcbi19XFxuLVxcbiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuQEAgLTUzNzYsNyArNTM2Niw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLFxcbiBcXHQuZmx1c2hfdGxiX2d1ZXN0ID0gc3ZtX2ZsdXNoX3RsYl9ndWVzdCxcXG4gXFxuLVxcdC52Y3B1X3ByZV9ydW4gPSBzdm1fdmNwdV9wcmVfcnVuLFxcbiBcXHQudmNwdV9ydW4gPSBzdm1fdmNwdV9ydW4sXFxuIFxcdC5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCxcXG4gXFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSBzdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcXG5AQCAtNTQzNCw2ICs1NDIzLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbitcXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uLFxcbiBcXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcXG4gXFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcXG4gXFx0Lm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IGEzMjdiZjc1MWVjZDUuLjY2YjQ0YjU0NjA4ZTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG5AQCAtOTc5LDYgKzk3OSw3IEBAIHZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlXFxuIHZvaWQgc2V2X2VzX3VubWFwX2doY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xcbiBcXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbitib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcXG4gaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fZW5jX3JlZ2lvbiAqcmFuZ2UpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuaW5kZXggMDRmOTg2ZTNkNDM5YS4uMGZmMzIzMGZkOTVlOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuQEAgLTE0MCwxMiArMTQwLDEwIEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dm14X3ZjcHVfcHV0KHZjcHUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZ0X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3N0YXRpYyBib29sIHZ0X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbi1cXHRcXHRyZXR1cm4gdGR4X3ZjcHVfcHJlX3J1bih2Y3B1KTtcXG4tXFxuLVxcdHJldHVybiB2bXhfdmNwdV9wcmVfcnVuKHZjcHUpO1xcbitcXHRyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24odmNwdSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcXG5AQCAtMTY1LDYgKzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0cmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuK1xcdFxcdFdBUk5fT05fT05DRSh0b192dCh2Y3B1KS1cXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdnRfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KGlzX3RkX3ZjcHUodmNwdSkpKVxcbkBAIC05MzksMTEgKzk0NywxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQuZmx1c2hfdGxiX2d2YSA9IHZ0X29wKGZsdXNoX3RsYl9ndmEpLFxcbiBcXHQuZmx1c2hfdGxiX2d1ZXN0ID0gdnRfb3AoZmx1c2hfdGxiX2d1ZXN0KSxcXG4gXFxuLVxcdC52Y3B1X3ByZV9ydW4gPSB2dF9vcCh2Y3B1X3ByZV9ydW4pLFxcbitcXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxcbiBcXHQudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksXFxuIFxcdC5oYW5kbGVfZXhpdCA9IHZ0X29wKGhhbmRsZV9leGl0KSxcXG4gXFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcXG4gXFx0LnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXFxuK1xcdC51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksXFxuIFxcdC5zZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKHNldF9pbnRlcnJ1cHRfc2hhZG93KSxcXG4gXFx0LmdldF9pbnRlcnJ1cHRfc2hhZG93ID0gdnRfb3AoZ2V0X2ludGVycnVwdF9zaGFkb3cpLFxcbiBcXHQucGF0Y2hfaHlwZXJjYWxsID0gdnRfb3AocGF0Y2hfaHlwZXJjYWxsKSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5pbmRleCBkMWFmMGE3NTJlOTdlLi5iMjcyYzIwNTg2YTc0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTg5NywxMyArODk3LDEwIEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHRkeC1cXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7XFxuIH1cXG4gXFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rYm9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0aWYgKHVubGlrZWx5KHRvX3RkeCh2Y3B1KS1cXHUwMDNlc3RhdGUgIT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCB8fFxcbi1cXHRcXHQgICAgIHRvX2t2bV90ZHgodmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdHJldHVybiAxO1xcbitcXHRyZXR1cm4gdG9fdGR4KHZjcHUpLVxcdTAwM2VzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8XFxuK1xcdCAgICAgICB0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFO1xcbiB9XFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCBlNGI5YWM3ZmVkOWYwLi43NjE2MGFkZjgyOTcwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTYwMzUsNyArNjAzNSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiAgKiB3aXRoIHVuc3Jlc3RyaWN0ZWQgZ3Vlc3QgbW9kZSBkaXNhYmxlZCkgYW5kIEtWTSBjYW4ndCBmYWl0aGZ1bGx5IGVtdWxhdGUgdGhlXFxuICAqIGN1cnJlbnQgdkNQVSBzdGF0ZS5cXG4gICovXFxuLXN0YXRpYyBib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XFxuIFxcbkBAIC02MTEwLDE2ICs2MTEwLDYgQEAgc3RhdGljIGludCBoYW5kbGVfaW52YWxpZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0aWYgKHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpKSB7XFxuLVxcdFxcdGt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMTtcXG4tfVxcbi1cXG4gLypcXG4gICogSW5kaWNhdGUgYSBidXN5LXdhaXRpbmcgdmNwdSBpbiBzcGlubG9jay4gV2UgZG8gbm90IGVuYWJsZSB0aGUgUEFVU0VcXG4gICogZXhpdGluZywgc28gb25seSBnZXQgaGVyZSBvbiBjcHUgd2l0aCBQQVVTRS1Mb29wLUV4aXRpbmcuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcXG5pbmRleCA0MDk4NTgwNzQyNDYyLi5jZGIzOGQ5NDBjZmI3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcXG5AQCAtMjEsNyArMjEsNiBAQCBpbnQgdm14X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTtcXG4gdm9pZCB2bXhfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSk7XFxuIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4taW50IHZteF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcXG4gdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xcbkBAIC0zMSw2ICszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xcbiB2b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCB2bXhfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pO1xcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cXG4gaW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7XFxuQEAgLTEzNyw3ICsxMzcsNyBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdGR4X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xcbiB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK2Jvb2wgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcXG4gdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtODg2Nyw3ICs4ODY3LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgICAgIWt2bV9hcGljX2luaXRfc2lwaV9hbGxvd2VkKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHJldHVybiBrdm1feDg2X2NhbGwodmNwdV9wcmVfcnVuKSh2Y3B1KTtcXG4rXFx0aWYgKGt2bV94ODZfY2FsbCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSh2Y3B1KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoa3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKSB7XFxuK1xcdFxcdGt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcXG5pbmRleCA1NzgyODM4OTNhYjM3Li5jODM3OTEyNGIzMTcyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXFxuQEAgLTIsNiArMiw3IEBAXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJwcm9jZXNzb3IuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtbS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuQEAgLTksOSArMTAsMjMgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gXFxuLSNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHgyMDAwXFxuKyNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHg4MFxcbiBcXG4tc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtO1xcbisvKlxcbisgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICsgMHhmZTAwLiAgVFIgc3RhcnRzIGF0XFxuKyAqIG9mZnNldCAweGZlOTAsIGFuZCBhdHRyaWJ1dGVzIGlzIHRoZSBzZWNvbmQgMTYtYml0IGZpZWxkIGluIHRoZSBkZXNjcmlwdG9yLlxcbisgKi9cXG4rI2RlZmluZSBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUXFx0MHhmZTkyXFxuKyNkZWZpbmUgU01SQU1fR1BBXFx0XFx0XFx0MHgxMDAwMDAwXFxuK1xcbisvKlxcbisgKiBTTUkgaGFuZGxlciB0aGF0IHJ1bnMgaW4gMTYtYml0IFJlYWwgTW9kZS4gIFN5bmNzIHdpdGggTDAgdmlhIHBvcnQgSS9PLCB0aGVuXFxuKyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLlxcbisgKi9cXG4rc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7XFxuK1xcdDB4ZTQsIEFSQklUUkFSWV9JT19QT1JULFxcdC8qIElOICRBUkJJVFJBUllfSU9fUE9SVCwgJWFsICovXFxuK1xcdDB4MGYsIDB4YWEsXFx0XFx0XFx0LyogUlNNICovXFxuK307XFxuIFxcbiBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXFxuIHtcXG5AQCAtMTksOCArMzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXFxuIFxcdCAqIEdlbmVyYXRlIGFuIGV4aXQgdG8gTDAgdXNlcnNwYWNlLCBpLmUuIG1haW4oKSwgdmlhIEkvTyB0byBhblxcbiBcXHQgKiBhcmJpdHJhcnkgcG9ydC5cXG4gXFx0ICovXFxuLVxcdGFzbSB2b2xhdGlsZShcXFwiaW5iICUlZHgsICUlYWxcXFwiXFxuLVxcdFxcdCAgICAgOiA6IFtwb3J0XSBcXFwiZFxcXCIgKEFSQklUUkFSWV9JT19QT1JUKSA6IFxcXCJyYXhcXFwiKTtcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCJpbmIgJFxcXCIgX19zdHJpbmdpZnkoQVJCSVRSQVJZX0lPX1BPUlQpIFxcXCIsICUlYWxcXFwiXFxuK1xcdFxcdCAgICAgOjo6IFxcXCJyYXhcXFwiKTtcXG4rXFx0R1VFU1RfRkFJTChcXFwiTDIgcmVzdW1lZCBhZnRlciBzdHVmZmluZyBpbnZhbGlkIGd1ZXN0IHN0YXRlXFxcIik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbkBAIC00NiwzNSArNjIsNTAgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4rc3RhdGljIHZvaWQgdmNwdV9ydW5fdG9faW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhbnRfbDIpXFxuIHtcXG4tXFx0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcXG4tXFx0c3RydWN0IGt2bV9zcmVncyBzcmVncztcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX3J1biAqcnVuO1xcbi1cXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuK1xcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVxcdTAwM2VydW47XFxuIFxcbi1cXHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XFxuK1xcdHZjcHVfcnVuKHZjcHUpO1xcbiBcXG4tXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgbDFfZ3Vlc3RfY29kZSk7XFxuK1xcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuIFxcbi1cXHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi9cXG4tXFx0dmNwdV9hbGxvY192bXgodm0sIFxcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcXG4tXFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcXG4rXFx0VEVTVF9BU1NFUlQocnVuLVxcdTAwM2Vpby5wb3J0ID09IEFSQklUUkFSWV9JT19QT1JUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoISEocnVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpID09IHdhbnRfbDIgIHx8XFxuK1xcdFxcdCAgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X0dVRVNUX01PREUpKSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBJTiBmcm9tIHBvcnQgMHgleCBmcm9tIEwldSwgZ290IHBvcnQgMHgleCBmcm9tIEwldVxcXCIsXFxuK1xcdFxcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgMSArIHdhbnRfbDIsIHJ1bi1cXHUwMDNlaW8ucG9ydCxcXG4rXFx0XFx0ICAgIDEgKyAhIShydW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX1JVTl9YODZfR1VFU1RfTU9ERSkpO1xcbit9XFxuIFxcbi1cXHR2Y3B1X3J1bih2Y3B1KTtcXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtX2NyZWF0ZV9hbmRfcnVuX2wyKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUpXFxuK3tcXG4rXFx0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcbitcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGwxX2d1ZXN0X2NvZGUpO1xcbiBcXG4tXFx0cnVuID0gdmNwdS1cXHUwMDNlcnVuO1xcbitcXHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi9cXG4rXFx0dmNwdV9hbGxvY192bXgodm0sIFxcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcXG4rXFx0dmNwdV9hcmdzX3NldCgqdmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cXG4gXFx0ICogUnVubmluZyBMMSBzaG91bGQgbGF1bmNoIEwyIHdpdGhvdXQgdHJpZ2dlcmluZyBhbiBleGl0IHRvIHVzZXJzcGFjZS5cXG4gXFx0ICovXFxuLVxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcdHZjcHVfcnVuX3RvX2lvKCp2Y3B1LCB0cnVlKTtcXG4gXFxuLVxcdFRFU1RfQVNTRVJUKHJ1bi1cXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCxcXG4tXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBJTiBmcm9tIHBvcnQgJWQgZnJvbSBMMiwgZ290IHBvcnQgJWRcXFwiLFxcbi1cXHRcXHQgICAgQVJCSVRSQVJZX0lPX1BPUlQsIHJ1bi1cXHUwMDNlaW8ucG9ydCk7XFxuK1xcdHJldHVybiB2bTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9zcmVncyBzcmVncztcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMihcXHUwMDI2dmNwdSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTdHVmZiBpbnZhbGlkIGd1ZXN0IHN0YXRlIGZvciBMMiBieSBtYWtpbmcgVFIgdW51c2FibGUuICBUaGUgbmV4dFxcbkBAIC05Niw0ICsxMjcsNDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0VEVTVF9GQUlMKFxcXCJVbmV4cGVjdGVkIHVjYWxsOiAlbHVcXFwiLCB1Yy5jbWQpO1xcbiBcXHR9XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20odm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHR1MTYgKnRyX2F0dHJzO1xcbitcXG4rXFx0aWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX1g4Nl9TTU0pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR2bSA9IHZtX2NyZWF0ZV9hbmRfcnVuX2wyKFxcdTAwMjZ2Y3B1KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEluamVjdCBTTUkgd2hpbGUgTDIgaXMgYWN0aXZlLCBydW4gdGhlIHZDUFUgdG8gZ2V0IEkvTyBleGl0IGZyb20gTDEsXFxuK1xcdCAqIHRoZW4gc3R1ZmYgVFIgaW4gdGhlIFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzbyB0aGF0IFJTTSByZXN0b3Jlc1xcbitcXHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0c2V0dXBfc21yYW0odm0sIHZjcHUsIFNNUkFNX0dQQSwgc21pX2hhbmRsZXIsIHNpemVvZihzbWlfaGFuZGxlcikpO1xcbitcXHRpbmplY3Rfc21pKHZjcHUpO1xcbitcXG4rXFx0dmNwdV9ydW5fdG9faW8odmNwdSwgZmFsc2UpO1xcbitcXG4rXFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovXFxuK1xcdHRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgKyBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUKTtcXG4rXFx0KnRyX2F0dHJzIFxcdTAwMjY9IH5CSVQoNyk7XFxuK1xcbitcXHR2Y3B1X3J1bih2Y3B1KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZvciBSU00sIEwxIGdldHMgdGhlIFNIVVRET1dOIGJlY2F1c2UgUlNNIGlzIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkXFxuK1xcdCAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS5cXG4rXFx0ICovXFxuK1xcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9TSFVURE9XTik7XFxuK1xcdGt2bV92bV9mcmVlKHZtKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XFxuK1xcbitcXHR0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUoKTtcXG4rXFx0dGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlX3JzbSgpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjA4LjQxNTc5NTE1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODAzNDMwNjEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fU01NXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiWDg2X1gyQVBJQ1wiLFxuICAgIFwiWDg2X01DRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtdWxhdG9yX2xlYXZlX3NtbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIEtWTSBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgaW52YWxpZCBndWVzdCBzdGF0ZSB3aGVuIGxlYXZpbmcgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgdGhlIFJTTSBpbnN0cnVjdGlvbi4gSXQgbW9kaWZpZXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gY2hlY2sgaWYgdW5oYW5kbGVhYmxlIGVtdWxhdGlvbiBpcyByZXF1aXJlZCwgYW5kIGlmIHNvLCByZXR1cm5zIGBYODZFTVVMX1VOSEFORExFQUJMRWAuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGB2Y3B1X3ByZV9ydW5gIG9wIGludG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgdG8gc3VwcG9ydCB0aGlzIGNoZWNrLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiBgZW11bGF0b3JfbGVhdmVfc21tYCB0byB0ZXN0IHRoaXMgbmV3IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYWI4N2E4Mzc4NmQzMzVhNmIyN2Q1ZGQyNWI4ZjUyMWVjZDRiYzc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwMjo1ODowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA1Y2IxMzJlY2EzYzM1Li5lMjEzYzlhZTNlMzAxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTYzLDExICs2MywxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKVxuICNlbmRpZlxuIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d2YSlcbiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndWVzdClcbi1LVk1fWDg2X09QKHZjcHVfcHJlX3J1bilcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbilcbiBLVk1fWDg2X09QKHZjcHVfcnVuKVxuIEtWTV9YODZfT1AoaGFuZGxlX2V4aXQpXG4gS1ZNX1g4Nl9PUChza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKVxuIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpXG4gS1ZNX1g4Nl9PUChnZXRfaW50ZXJydXB0X3NoYWRvdylcbiBLVk1fWDg2X09QKHBhdGNoX2h5cGVyY2FsbClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggN2EyNTg4MzE2MTZmYS4uMjgzODQ3NjE5ZmY4OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTg2LDEzICsxNTg2LDE1IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCpmbHVzaF90bGJfZ3Vlc3QpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4tXHRpbnQgKCp2Y3B1X3ByZV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rXHRib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uICgqdmNwdV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0XHQgIHU2NCBydW5fZmxhZ3MpO1xuIFx0aW50ICgqaGFuZGxlX2V4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZXhpdF9mYXN0cGF0aCk7XG4gXHRpbnQgKCpza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitcdGJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK1xuIFx0dm9pZCAoKnNldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKTtcbiBcdHUzMiAoKmdldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnBhdGNoX2h5cGVyY2FsbCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zbW0uYyBiL2FyY2gveDg2L2t2bS9zbW0uY1xuaW5kZXggYTQ0NjQ4N2JkZDVjZi4uNjU2YTM4ZGFkN2U3YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zbW0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3NtbS5jXG5AQCAtNjQ5LDYgKzY0OSwxMCBAQCBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuICNlbmRpZlxuIFx0XHRyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCBcdTAwMjZzbXJhbS5zbXJhbTMyKTtcbiBcbitcdGlmIChyZXQgPT0gWDg2RU1VTF9DT05USU5VRSBcdTAwMjZcdTAwMjZcbitcdCAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpXG4rXHRcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuK1xuIFx0LypcbiBcdCAqIElmIFJTTSBmYWlscyBhbmQgdHJpZ2dlcnMgc2h1dGRvd24sIGFyY2hpdGVjdHVyYWxseSB0aGUgc2h1dGRvd25cbiBcdCAqIG9jY3VycyAqYmVmb3JlKiB0aGUgdHJhbnNpdGlvbiB0byBndWVzdCBtb2RlLiAgQnV0IGR1ZSB0byBLVk0nc1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA5MGEwOGQzNmQ4NDNkLi5mY2I0MWRmZGU0YzAyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTM1NTYsNiArMzU1NiwxMSBAQCB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0X19zZXZfZXNfdW5tYXBfZ2hjYihzdm0pO1xuIH1cbiBcbitib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gdG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQ7XG4rfVxuK1xuIGludCBwcmVfc2V2X3J1bihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFx1MDAyNnN2bV9kYXRhLCBjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBjMWU2ZDYyNTEyYjk1Li45ZDYwN2I5OGJkMDY3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTQ0MDAsMTYgKzQ0MDAsNiBAQCBzdGF0aWMgdm9pZCBzdm1fY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuLVx0aWYgKHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlbmVlZF9pbml0KVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0jZW5kaWZcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5AQCAtNTM3Niw3ICs1MzY2LDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLFxuIFx0LmZsdXNoX3RsYl9ndWVzdCA9IHN2bV9mbHVzaF90bGJfZ3Vlc3QsXG4gXG4tXHQudmNwdV9wcmVfcnVuID0gc3ZtX3ZjcHVfcHJlX3J1bixcbiBcdC52Y3B1X3J1biA9IHN2bV92Y3B1X3J1bixcbiBcdC5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gc3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG5AQCAtNTQzNCw2ICs1NDIzLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuK1x0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbiBcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxuIFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggYTMyN2JmNzUxZWNkNS4uNjZiNDRiNTQ2MDhlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC05NzksNiArOTc5LDcgQEAgdm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVcbiB2b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4rYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcbiBpbnQgc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fZW5jX3JlZ2lvbiAqcmFuZ2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDA0Zjk4NmUzZDQzOWEuLjBmZjMyMzBmZDk1ZTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xNDAsMTIgKzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2bXhfdmNwdV9wdXQodmNwdSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdnRfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbi1cdFx0cmV0dXJuIHRkeF92Y3B1X3ByZV9ydW4odmNwdSk7XG4tXG4tXHRyZXR1cm4gdm14X3ZjcHVfcHJlX3J1bih2Y3B1KTtcbitcdHJldHVybiBpc190ZF92Y3B1KHZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG5AQCAtMTY1LDYgKzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuK1x0XHRXQVJOX09OX09OQ0UodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpO1xuK31cbitcbiBzdGF0aWMgaW50IHZ0X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIHtcbiBcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcbkBAIC05MzksMTEgKzk0NywxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSxcbiBcdC5mbHVzaF90bGJfZ3Vlc3QgPSB2dF9vcChmbHVzaF90bGJfZ3Vlc3QpLFxuIFxuLVx0LnZjcHVfcHJlX3J1biA9IHZ0X29wKHZjcHVfcHJlX3J1biksXG4rXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuIFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuIFx0LmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLFxuIFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiBcdC51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuK1x0LnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQgPSB2dF9vcCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSxcbiBcdC5zZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKHNldF9pbnRlcnJ1cHRfc2hhZG93KSxcbiBcdC5nZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKGdldF9pbnRlcnJ1cHRfc2hhZG93KSxcbiBcdC5wYXRjaF9oeXBlcmNhbGwgPSB2dF9vcChwYXRjaF9oeXBlcmNhbGwpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBkMWFmMGE3NTJlOTdlLi5iMjcyYzIwNTg2YTc0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTg5NywxMyArODk3LDEwIEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7XG4gfVxuIFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAodW5saWtlbHkodG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbi1cdFx0ICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gdG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbitcdCAgICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGU0YjlhYzdmZWQ5ZjAuLjc2MTYwYWRmODI5NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjAzNSw3ICs2MDM1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJ3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZVxuICAqIGN1cnJlbnQgdkNQVSBzdGF0ZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG5AQCAtNjExMCwxNiArNjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHtcbi1cdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbi19XG4tXG4gLypcbiAgKiBJbmRpY2F0ZSBhIGJ1c3ktd2FpdGluZyB2Y3B1IGluIHNwaW5sb2NrLiBXZSBkbyBub3QgZW5hYmxlIHRoZSBQQVVTRVxuICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDQwOTg1ODA3NDI0NjIuLmNkYjM4ZDk0MGNmYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0yMSw3ICsyMSw2IEBAIGludCB2bXhfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcbiB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcbkBAIC0zMSw2ICszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuIHZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBpbnQgdm14X3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKTtcbkBAIC0xMzcsNyArMTM3LDcgQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xuIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rYm9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XG4gdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODg2Nyw3ICs4ODY3LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7XG4rXHRpZiAoa3ZtX3g4Nl9jYWxsKHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pKHZjcHUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpIHtcbitcdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMTtcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuaW5kZXggNTc4MjgzODkzYWIzNy4uYzgzNzkxMjRiMzE3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbkBAIC0yLDYgKzIsNyBAQFxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzbW0uaFwiXG4gI2luY2x1ZGUgXCJ2bXguaFwiXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbkBAIC05LDkgKzEwLDIzIEBAXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gXG4tI2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDIwMDBcbisjZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4ODBcbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqdm07XG4rLypcbisgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICsgMHhmZTAwLiAgVFIgc3RhcnRzIGF0XG4rICogb2Zmc2V0IDB4ZmU5MCwgYW5kIGF0dHJpYnV0ZXMgaXMgdGhlIHNlY29uZCAxNi1iaXQgZmllbGQgaW4gdGhlIGRlc2NyaXB0b3IuXG4rICovXG4rI2RlZmluZSBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUXHQweGZlOTJcbisjZGVmaW5lIFNNUkFNX0dQQVx0XHRcdDB4MTAwMDAwMFxuK1xuKy8qXG4rICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlblxuKyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLlxuKyAqL1xuK3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuK1x0MHhlNCwgQVJCSVRSQVJZX0lPX1BPUlQsXHQvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqL1xuK1x0MHgwZiwgMHhhYSxcdFx0XHQvKiBSU00gKi9cbit9O1xuIFxuIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiB7XG5AQCAtMTksOCArMzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXG4gXHQgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW5cbiBcdCAqIGFyYml0cmFyeSBwb3J0LlxuIFx0ICovXG4tXHRhc20gdm9sYXRpbGUoXCJpbmIgJSVkeCwgJSVhbFwiXG4tXHRcdCAgICAgOiA6IFtwb3J0XSBcImRcIiAoQVJCSVRSQVJZX0lPX1BPUlQpIDogXCJyYXhcIik7XG4rXHRhc20gdm9sYXRpbGUoXCJpbmIgJFwiIF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSBcIiwgJSVhbFwiXG4rXHRcdCAgICAgOjo6IFwicmF4XCIpO1xuK1x0R1VFU1RfRkFJTChcIkwyIHJlc3VtZWQgYWZ0ZXIgc3R1ZmZpbmcgaW52YWxpZCBndWVzdCBzdGF0ZVwiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG5AQCAtNDYsMzUgKzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3N0YXRpYyB2b2lkIHZjcHVfcnVuX3RvX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YW50X2wyKVxuIHtcbi1cdGd2YV90IHZteF9wYWdlc19ndmE7XG4tXHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV9ydW4gKnJ1bjtcbi1cdHN0cnVjdCB1Y2FsbCB1YztcbitcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbi1cdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbitcdHZjcHVfcnVuKHZjcHUpO1xuIFxuLVx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbitcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4gXG4tXHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi9cbi1cdHZjcHVfYWxsb2Nfdm14KHZtLCBcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcbi1cdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XG4rXHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpID09IHdhbnRfbDIgIHx8XG4rXHRcdCAgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X0dVRVNUX01PREUpKSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0IDB4JXggZnJvbSBMJXUsIGdvdCBwb3J0IDB4JXggZnJvbSBMJXVcIixcbitcdFx0ICAgIEFSQklUUkFSWV9JT19QT1JULCAxICsgd2FudF9sMiwgcnVuLVx1MDAzZWlvLnBvcnQsXG4rXHRcdCAgICAxICsgISEocnVuLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSk7XG4rfVxuIFxuLVx0dmNwdV9ydW4odmNwdSk7XG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtX2NyZWF0ZV9hbmRfcnVuX2wyKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUpXG4re1xuK1x0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiBcbi1cdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuK1x0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXG4rXHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2dm14X3BhZ2VzX2d2YSk7XG4rXHR2Y3B1X2FyZ3Nfc2V0KCp2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cbiBcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXG4gXHQgKi9cbi1cdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4rXHR2Y3B1X3J1bl90b19pbygqdmNwdSwgdHJ1ZSk7XG4gXG4tXHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCxcbi1cdFx0ICAgIFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkXCIsXG4tXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQpO1xuK1x0cmV0dXJuIHZtO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV9hbmRfcnVuX2wyKFx1MDAyNnZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIFN0dWZmIGludmFsaWQgZ3Vlc3Qgc3RhdGUgZm9yIEwyIGJ5IG1ha2luZyBUUiB1bnVzYWJsZS4gIFRoZSBuZXh0XG5AQCAtOTYsNCArMTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRkZWZhdWx0OlxuIFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIHVjYWxsOiAlbHVcIiwgdWMuY21kKTtcbiBcdH1cbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlX3JzbSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0dTE2ICp0cl9hdHRycztcbitcbitcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfU01NKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMihcdTAwMjZ2Y3B1KTtcbitcbitcdC8qXG4rXHQgKiBJbmplY3QgU01JIHdoaWxlIEwyIGlzIGFjdGl2ZSwgcnVuIHRoZSB2Q1BVIHRvIGdldCBJL08gZXhpdCBmcm9tIEwxLFxuK1x0ICogdGhlbiBzdHVmZiBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHNvIHRoYXQgUlNNIHJlc3RvcmVzXG4rXHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxuK1x0ICovXG4rXHRzZXR1cF9zbXJhbSh2bSwgdmNwdSwgU01SQU1fR1BBLCBzbWlfaGFuZGxlciwgc2l6ZW9mKHNtaV9oYW5kbGVyKSk7XG4rXHRpbmplY3Rfc21pKHZjcHUpO1xuK1xuK1x0dmNwdV9ydW5fdG9faW8odmNwdSwgZmFsc2UpO1xuK1xuK1x0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovXG4rXHR0cl9hdHRycyA9IGFkZHJfZ3BhMmh2YSh2bSwgU01SQU1fR1BBICsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XG4rXHQqdHJfYXR0cnMgXHUwMDI2PSB+QklUKDcpO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXG4rXHQvKlxuK1x0ICogRm9yIFJTTSwgTDEgZ2V0cyB0aGUgU0hVVERPV04gYmVjYXVzZSBSU00gaXMgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWRcbitcdCAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS5cbitcdCAqL1xuK1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX1NIVVRET1dOKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4rXG4rXHR0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUoKTtcbitcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODowOC40MTU3OTc1MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgzNTk0ODIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSB4ODYgUGF0Y2g6IEZvY3VzIG9uIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCB0d2Vha3MgdGhlIEtWTSB4ODYgb3BlcmF0aW9ucy4gSXQncyBhZGRpbmcgYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgdG8gdGhlIGBzdHJ1Y3Qga3ZtX3g4Nl9vcHNgLiBJIGltbWVkaWF0ZWx5IHNlZSBpdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBhcmVhczogYGFyY2gveDg2L2t2bS9zbW0uY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgLCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0IG1lYW5zIGl0J3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgS1ZNIGRlYWxzIHdpdGggdW5oYW5kbGVhYmxlIGVtdWxhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGV4aXRpbmcgU01NIHZpYSB0aGUgUlNNIGluc3RydWN0aW9uLiBTcGVjaWZpY2FsbHksIGlmIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpcyBzZXQsIGl0IHdpbGwgcmV0dXJuIGBYODZFTVVMX1VOSEFORExFQUJMRWAgd2l0aGluIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLiBJdCBsb29rcyBsaWtlIGl0J3MgYWxzbyByZWZhY3RvcmluZyB0aGUgYHZjcHVfcHJlX3J1bmAgbG9naWMsIHNwbGl0dGluZyBpdCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgdGhhdCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgZmxhZy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsPyBHaXZlbiB0aGUgZmlsZSBjaGFuZ2VzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIEl0J3MgbW9kaWZ5aW5nIGNvcmUgS1ZNIHg4NiBsb2dpYywgYW5kIGl0J3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhY3RpdmUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNpbmNlIEtWTSBpcyB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yLiBXZSBrbm93IHN5emthbGxlciBpcyBnb2luZyB0byBoaXQgS1ZNIGhhcmQgd2l0aCB0aGUgYC9kZXYva3ZtYCBpbnRlcmZhY2UsIHNvIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGVzdGVkIGZvciBzdXJlLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgcGFydHMgdGhhdCBhcmUgbmV3IG9yIGNoYW5nZWQ6XG5cbiogICBgZW11bGF0b3JfbGVhdmVfc21tYCAobW9kaWZpZWQpXG4qICAgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYFxuKiAgIGB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYFxuKiAgIGB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYFxuKiAgIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmBcbiogICBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgXG4qICAgYGt2bV94ODZfdmNwdV9wcmVfcnVuYCAobW9kaWZpZWQpXG5cbmBlbXVsYXRvcl9sZWF2ZV9zbW1gIGp1bXBzIG91dCBpbW1lZGlhdGVseSBhcyBhIGdvb2QgdGFyZ2V0LiBJIGtub3cgdGhhdCdzIGNhbGxlZCB3aGVuIGVtdWxhdGluZyB0aGUgUlNNIGluc3RydWN0aW9uLCB3aGljaCBpcyBvZnRlbiBhIHNvdXJjZSBvZiBidWdzIGluIGh5cGVydmlzb3JzLiBUaGVuIEkgbm90ZSBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gIGlzIGEgZ29vZCBvbmUsIGJ1dCB3YWl0LCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLi4uIGFoLCBubyB3YWl0LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGNhbGxzIGl0LCB3aGljaCBpcyB0aGUgbWFpbiBlbnRyeSBmb3IgdGhlIGBLVk1fUlVOYCBpb2N0bC4gSXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBsZXQncyBmb2N1cyBvbiBgZW11bGF0b3JfbGVhdmVfc21tYC4gSSdsbCBkaWcgaW50byBpdCBpbiBgYXJjaC94ODYva3ZtL3NtbS5jYC4gVGhlbiBJJ2xsIGNoZWNrIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgdG8gZm9sbG93IHRoZSBwYXRoIGFuZCBjaGVjayB0aGVpciB1c2FnZXMuIE5vdyBpdCdzIHRpbWUgdG8gdGVzdCwgdGVzdCwgdGVzdC4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgdmVyaWZ5IHRoaXMgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODoxOS4yNTE3NDg5MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjk2MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtdWxhdG9yX2xlYXZlX3NtbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy01NzItXFxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbmFyY2gveDg2L2t2bS9zbW0uYy01NzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxNTk6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2MC12b2lkIHByb2Nlc3Nfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmg9MTYzPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2NS0vKlxcbmFyY2gveDg2L2t2bS9zbW0uaDoxNjY6ICogZW11bGF0b3JfbGVhdmVfc21tIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBzbyB0aGVcXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTY3LSAqIHN0dWIgaXMgZGVmaW5lZCBpbiB4ODYuYy5cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc2MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU2LVxcdC5pc19zbW0gICAgICAgICAgICAgID0gZW11bGF0b3JfaXNfc21tLFxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODU3OlxcdC5sZWF2ZV9zbW0gICAgICAgICAgID0gZW11bGF0b3JfbGVhdmVfc21tLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU4LVxcdC50cmlwbGVfZmF1bHQgICAgICAgID0gZW11bGF0b3JfdHJpcGxlX2ZhdWx0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODoxOS4zNjQwNTI1MDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODczMjY4NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWUgS1ZNIGNvZGUgYW5kIG5vdGljaW5nIGEgcGF0dGVybi4gSXQgbG9va3MgbGlrZSBgZW11bGF0b3JfbGVhdmVfc21tYCBpbiBgYXJjaC94ODYva3ZtL3NtbS5jYCBpcyBub24tc3RhdGljLCBidXQgb25seSB3aGVuIGBDT05GSUdfS1ZNX1NNTWAgaXMgZW5hYmxlZC4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzdWdnZXN0cyBhIHNwZWNpZmljIHB1cnBvc2UgcmVsYXRlZCB0byBTTU0gaGFuZGxpbmcuXG5cbk5leHQsIEkgc2VlIHRoYXQgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgaXMgYWxzbyBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyBpdCdzIGV4cG9ydGVkIGZvciB1c2UgZWxzZXdoZXJlIHdpdGhpbiB0aGUgS1ZNIHN5c3RlbSwgcGVyaGFwcyB0byBpbmRpY2F0ZSBzb21lIGtpbmQgb2Ygc3RhdGUgb3IgcmVxdWlyZW1lbnQgZHVyaW5nIFZNWCBvcGVyYXRpb25zLiBUaGVuIHRoZXJlIGFyZSBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGluIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCBhbmQgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIEJvdGggb2YgdGhlc2UgYXJlIGFsc28gbm9uLXN0YXRpYy4gVGhlIG5hbWVzIGFyZSBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgc28gSSdtIHRoaW5raW5nIHRoZXkncmUgZmxhZ3Mgb3IgaW5kaWNhdG9ycyBmb3Igd2hldGhlciBhIFZDUFUgbmVlZHMgc29tZSBpbml0aWFsaXphdGlvbiBzcGVjaWZpYyB0byBURFggb3IgU0VWLlxuXG5HaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSB3YW50IHRvIGNvbmZpcm0gaG93IGBDT05GSUdfS1ZNX1NNTWAsIGBDT05GSUdfS1ZNX0FNRF9TRVZgLCBhbmQgYENPTkZJR19LVk1fSU5URUxfVERYYCAoaWYgaXQgZXhpc3RzKSBhcmUgZGVmaW5lZCBhbmQgcmVsYXRlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb25zIGZvciB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgcHJvdmlkZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciB1c2UgaW4gdGhlIHdpZGVyIEtWTSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjI0LjIzNzMyNDM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ1NzU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1NNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE3Mz1jb25maWcgS1ZNX0lPQVBJQ1xcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MjQuMzQ4Nzg5MzMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMDcxMDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHZpcnR1YWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgS1ZNIGFuZCBBTUQncyBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpOlxuXG4qKkludmVzdGlnYXRpbmcgQU1EIFNFViBTdXBwb3J0IGluIEtWTSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgYENPTkZJR19LVk1fQU1EX1NFVmAgb3B0aW9uLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBmbGFnOyBpdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgS1ZNIGJ1aWxkIGluY2x1ZGVzIHN1cHBvcnQgZm9yIEFNRCdzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24uIFdpdGhvdXQgaXQsIFNFViBmZWF0dXJlcyBhcmUgc2ltcGx5IG5vdCBhdmFpbGFibGUsIGFuZCBhbnkgYXR0ZW1wdCB0byB1dGlsaXplIHRoZW0gd2lsbCBmYWlsLCBvciB3b3JzZSwgc2lsZW50bHkgZGVncmFkZSBzZWN1cml0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGVuYWJsZWQ7IGl04oCZcyBmdW5kYW1lbnRhbCB0byB1dGlsaXppbmcgU0VWJ3Mgc2VjdXJpdHkgYmVuZWZpdHMg4oCTIHByb3RlY3RpbmcgVk0gZGF0YSBldmVuIGZyb20gdGhlIGh5cGVydmlzb3IgaXRzZWxmLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgaG93IGl0J3MgZGVmaW5lZCBhbmQgaWYgdGhlcmUgYW55IGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MjcuNDQ5NTAzNzMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTIzNzM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjI3LjU2ODc0NzgwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDEwMDg1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSW50ZWwgVERYIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHRoYXQgc3VwcG9ydHMgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgdGhlIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdvdWxkIGJlIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBpbmRpY2F0b3IuIEkgbWlnaHQgYWxzbyBleHBhbmQgdGhpcyBzZWFyY2ggdG8gaW5jbHVkZSByZWxhdGVkLCB0aG91Z2ggcG9zc2libHkgbGVzcyBzcGVjaWZpYywgY29uZmlndXJhdGlvbiBmbGFncy4gVGhpcyBpbW1lZGlhdGUgY2hlY2sgd2lsbCBzYXZlIGEgbG90IG9mIHRpbWUgYnkgdGVsbGluZyBtZSBpZiBURFggaXMgZXZlbiBvbiB0aGUgdGFibGUuIElmIHRoYXQncyB0aGUgY2FzZSwgSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIG5leHQgc3RlcHMsIG1heWJlIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgb3IgdG8gZGlnIGludG8gbW9yZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlIGNvZGUuIEkganVzdCB3YW50IGEgcXVpY2sgcG9pbnRlciB0byB0ZWxsIG1lIHdoZXJlIHRvIGdvIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MzAuNTY5NzU4OTQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzcwNjM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODozMC42Njc0NzczNzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzAzMzQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgSW50ZWwgVERYKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGVzZSBzcGVjaWZpYyBLVk0gZmVhdHVyZXM6IGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBLVk1fSU5URUxfVERYYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgd2hldGhlciBgS1ZNX0lOVEVMX1REWGAgaXMgYWN0dWFsbHkgdGhlICpjb3JyZWN0KiBjb25maWd1cmF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yLCBvciBpZiB3ZSBuZWVkIHRvIGFzc2VzcyB0aGUgd2hvbGUgc3VpdGUgdG8gcHJvcGVybHkgdXNlIHRoZSB0YXJnZXQgZmVhdHVyZS4gSXQgc2VlbXMgbG9naWNhbCB0byBzdGFydCB0aGVyZS4gU28sIGxldCdzIGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSByaWdodCBjb25maWcgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWF5IHJlbGF0ZSBvciBhcmUgcmVxdWlyZWQuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcgYSBzeXN0ZW0gdG8gdXNlIFREWC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODozMy45NDA1MTM4MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDYxOTcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipLVk1fSU5URUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwOTogICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFxcdTAwMjZcXHUwMDI2IEVYUEVSVFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTExMC0gICAgICAgIGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiU29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMjQ6XFx0ZGVwZW5kcyBvbiBYODZfU0dYIFxcdTAwMjZcXHUwMDI2IEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjM0LjA2MTEzOTI4MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxMjk5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIERlcGVuZGVuY2llcyBvZiBLVk1fSU5URUxfVERYKipcblxuT2theSwgc28gYEtWTV9JTlRFTF9URFhgLiBSaWdodC4gV2hhdCBleGFjdGx5IGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoYXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBpdCBoaW5nZXMgb24sIGJlY2F1c2UgaWYgSSdtIGdvaW5nIHRvIGNvbmZpZ3VyZSB0aGlzIHByb3Blcmx5LCBJIG5lZWQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIExldCdzIHNlZS4uLiBJJ2xsIGRpdmUgc3RyYWlnaHQgaW50byBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1c3VhbGx5IGxpdmUsIHNvIHRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMuIEnigJltIGJldHRpbmcgdGhlIGFuc3dlciBpcyBidXJpZWQgaW4gdGhlcmUgc29tZXdoZXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MzcuMzMyNDQ1NDE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRjb25maWcgS1ZNX0lOVEVMX1REWFxcbiAxMzU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4gMTM2OlxcdFxcdGRlZmF1bHQgeVxcbiAxMzc6XFx0XFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbiAxMzg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDEzOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE0MDpcXHRcXHRoZWxwXFxuIDE0MTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxcbiAxNDI6XFx0XFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0Y29uZmlnIEtWTV9BTURcXG4gMTQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcXG4gMTQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MzcuMzMyNjA0Mjc5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzg2NTQ2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgR3JhcGggRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgYEtWTV9JTlRFTF9URFhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGllcyBvbiBgSU5URUxfVERYX0hPU1RgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgbGV0IG1lIHF1aWNrbHkgcGl2b3QgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBBTUQgc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcmVsYXRpb25zaGlwIGlzIHdpdGggYEtWTV9BTURfU0VWYC4gSSB3YW50IHRvIGNyb3NzLXJlZmVyZW5jZSBhbmQgdmVyaWZ5IG15IGN1cnJlbnQgbWVudGFsIG1vZGVsIG9mIHRoZSBpbnRlcmRlcGVuZGVuY2llcyBpbiB0aGVzZSB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXMuIEkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgdXBzdHJlYW0gY2hhbmdlcyB0b28sIHRvIGlkZW50aWZ5IGFueSByZWNlbnQgcmVsZXZhbnQgZGV2ZWxvcG1lbnRzIG9yIGJ1Z2ZpeGVzLiBUaGlzIG1pZ2h0IGFsc28gcHJvdmlkZSBjbHVlcyBhYm91dCBob3cgdGhlIEludGVsIGFuZCBBTUQgaW1wbGVtZW50YXRpb25zIGFyZSBjb252ZXJnaW5nLCBvciBkaXZlcmdpbmcsIG92ZXIgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjQwLjQxMTI2MjI1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXFxuIDE1MTpcXHRcXHQgIChTVk0pIGV4dGVuc2lvbnMuXFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDE1NDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1hbWQuXFxuIDE1NTpcXHRcXG4gMTU2OlxcdGNvbmZpZyBLVk1fQU1EX1NFVlxcbiAxNTc6XFx0XFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4gMTU4OlxcdFxcdGRlZmF1bHQgeVxcbiAxNTk6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fQU1EIFxcdTAwMjZcXHUwMDI2IFg4Nl82NFxcbiAxNjA6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcXHUwMDI2XFx1MDAyNiAhKEtWTV9BTUQ9eSBcXHUwMDI2XFx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxcbiAxNjE6XFx0XFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDE2MjpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gMTYzOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcbiAxNjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9SRUNMQUlNXFxuIDE2NTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTY3OlxcdFxcdGhlbHBcXG4gMTY4OlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIGVuY3J5cHRlZCBWTXMgd2hpY2ggdXNlIFNlY3VyZVxcbiAxNjk6XFx0XFx0ICBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo0MC40MTE0MTYzNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNTA4MjczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBLVk1fQU1EX1NFViBhbmQgUmVsYXRlZCBNb2R1bGVzKipcblxuQWxyaWdodCwgSSBzZWUgdGhlIGRlcGVuZGVuY3kgdHJlZSBmb3IgYEtWTV9BTURfU0VWYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBsZXZlcmFnZXMgYEtWTV9BTURgLCBpcyBidWlsdCBmb3IgYFg4Nl82NGAgYXJjaGl0ZWN0dXJlcywgYW5kIG5lZWRzIGBDUllQVE9fREVWX1NQX1BTUGAgZm9yIGl0cyBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIFNFVidzIHNlY3VyaXR5IGZlYXR1cmVzLiBOb3csIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGRldGFpbHMgb2YgU0VWLCBJIHdhbnQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIGFuZCBkZXBlbmRlbmNpZXMgb2YgYEtWTV9TTU1gIGFzIGEgcHJlbGltaW5hcnkuIFVuZGVyc3RhbmRpbmcgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBLVk0gY29tcG9uZW50cywgcGFydGljdWxhcmx5IG9uIEFNRCBwbGF0Zm9ybXMsIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEl0IG1heSBiZSBrZXkgdG8gYSBob2xpc3RpYyBhcmNoaXRlY3R1cmUgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM2MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6NDMuNzI2NTAyNzU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE4MjpcXHRcXG4gMTgzOlxcdGNvbmZpZyBLVk1fU01NXFxuIDE4NDpcXHRcXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4gMTg1OlxcdFxcdGRlZmF1bHQgeVxcbiAxODY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE4NzpcXHRcXHRoZWxwXFxuIDE4ODpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSlcXG4gMTg5OlxcdFxcdCAgaW4gdmlydHVhbCBtYWNoaW5lcy4gIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIHZpcnR1YWwgbWFjaGluZVxcbiAxOTA6XFx0XFx0ICBmaXJtd2FyZSB0byBpbXBsZW1lbnQgVUVGSSBzZWN1cmUgYm9vdC5cXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRjb25maWcgS1ZNX0hZUEVSVlxcbiAxOTU6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbiAxOTY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE5NzpcXHRcXHRkZWZhdWx0IHlcXG4gMTk4OlxcdFxcdGhlbHBcXG4gMTk5OlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo0My43MjY2MDg1NjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMzQ0OTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgSGFyZHdhcmUgVmlydHVhbGl6YXRpb24gRXh0ZW5zaW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEtWTS1yZWxhdGVkIGV4dGVuc2lvbnM6IGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBLVk1fSU5URUxfVERYYC4gSW1tZWRpYXRlbHksIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSB0aHJlZSBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGVuaGFuY2VtZW50cy4gYEtWTV9TTU1gIGxpa2VseSBkZWFscyB3aXRoIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gYEtWTV9BTURfU0VWYCBkZWZpbml0ZWx5IHJlbGF0ZXMgdG8gQU1EJ3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiwgYSBjcnVjaWFsIGZlYXR1cmUgZm9yIGRhdGEgY29uZmlkZW50aWFsaXR5IGFuZCBpbnRlZ3JpdHkgaW4gVk1zLiBBbmQgdGhlbiB3ZSBoYXZlIGBLVk1fSU5URUxfVERYYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoYXQncyBhbG1vc3QgY2VydGFpbmx5IEludGVsJ3MgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGBJTlRFTF9URFhfSE9TVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBob3N0IHNpZGUgaW1wbGVtZW50YXRpb24gYW5kIGltcGxpY2F0aW9ucy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGFzcGVjdHMgdGhhdCB0aGV5IHdhbnQgbWUgdG8gZm9jdXMgb24/IFdoYXQncyB0aGUgY29udGV4dD8gTGV0J3MgY2hlY2sgYElOVEVMX1REWF9IT1NUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjQ3LjE0MDA2MjgxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzI2NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTlRFTF9URFhfSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6NDcuMjc0Nzk3Mzc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDQwNzgxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGxpbmUgb2YgdGhvdWdodCwgdGFpbG9yZWQgZm9yIHNvbWVvbmUgd2hvJ3MgYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBsaWtlIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgSU5URUxfVERYX0hPU1QqKlxuXG5SaWdodCwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuICpJTlRFTF9URFhfSE9TVCouIFNvdW5kcyBsaWtlIGl0J3MgYSBrZXkgY29tcG9uZW50IGZvciBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBvbiB0aGUgaG9zdCBzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBzcGVjaWZpY2FsbHkgZnJvbSBhIHN5c3RlbSBkZXNpZ24gYW5kIGludGVncmF0aW9uIHBlcnNwZWN0aXZlLiBJJ20gdGhpbmtpbmcsIFwid2hhdCBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0ICpJTlRFTF9URFhfSE9TVCogcmVsaWVzIG9uIHRvIGZ1bmN0aW9uPyBXaGF0IGxpYnJhcmllcywga2VybmVsIG1vZHVsZXMsIG9yIG90aGVyIHBpZWNlcyBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUgZG9lcyB0aGlzIGNvbXBvbmVudCBuZWVkP1wiIFBlcmhhcHMgaXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMsIGZpcm13YXJlIHJldmlzaW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEJJT1MuIE15IHByaW1hcnkgcXVlc3Rpb24gaXMgdGhpczogXCJXaGVyZSBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZT9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSB0cnVzdGVkIGVudmlyb25tZW50LCB0aGUgaG9zdCdzIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCBwb3RlbnRpYWxseSBhbnkgdmlydHVhbGl6YXRpb24gbGF5ZXJzIGluIHBsYXkuIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnRzLCBjb21wYXRpYmlsaXR5IGNvbmNlcm5zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiB0ZWxscyB1cyBhYm91dCB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIG9yIHJlcXVpcmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjUxLjExODg3OTI5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODYwOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjE4NjE6XFx0XFxuMTg2MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTg2MzpcXHRcXG4xODY0OlxcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbjE4NjU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcbjE4NjY6XFx0XFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0lOVEVMXFxuMTg2NzpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NFxcbjE4Njg6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fSU5URUxcXG4xODY5OlxcdFxcdGRlcGVuZHMgb24gWDg2X1gyQVBJQ1xcbjE4NzA6XFx0XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xcbjE4NzE6XFx0XFx0ZGVwZW5kcyBvbiBDT05USUdfQUxMT0NcXG4xODcyOlxcdFxcdGRlcGVuZHMgb24gWDg2X01DRVxcbjE4NzM6XFx0XFx0aGVscFxcbjE4NzQ6XFx0XFx0ICBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBwcm90ZWN0cyBndWVzdCBWTXMgZnJvbSBtYWxpY2lvdXNcXG4xODc1OlxcdFxcdCAgaG9zdCBhbmQgY2VydGFpbiBwaHlzaWNhbCBhdHRhY2tzLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBuZWNlc3NhcnkgVERYXFxuMTg3NjpcXHRcXHQgIHN1cHBvcnQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHJ1biBjb25maWRlbnRpYWwgVk1zLlxcbjE4Nzc6XFx0XFxuMTg3ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6NTEuMTE5MTI3NDI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDUxMTgzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgSU5URUxfVERYX0hPU1RgIGhpbmdlcyBvbiBhIGhhbmRmdWwgb2YgY3JpdGljYWwgcHJlcmVxdWlzaXRlcy4gSXQncyBidWlsdCB1cG9uIHRoZSBmb3VuZGF0aW9uIG9mIGBDUFVfU1VQX0lOVEVMYCwgb2YgY291cnNlLCB0aGF0J3MgZXhwZWN0ZWQgZm9yIGFueSBJbnRlbC1zcGVjaWZpYyBmZWF0dXJlLiBgWDg2XzY0YCBpcyBmdW5kYW1lbnRhbDsgNjQtYml0IGFyY2hpdGVjdHVyZSBpcyBhIGdpdmVuIGluIHRoaXMgY29udGV4dC4gYEtWTV9JTlRFTGAgaXMgY3J1Y2lhbCwgZ2l2ZW4gdGhhdCB3ZSBhcmUgZGlzY3Vzc2luZyB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBGdXJ0aGVybW9yZSwgYFg4Nl9YMkFQSUNgIGlzIGFsc28gYSBjcml0aWNhbCBkZXBlbmRlbmN5OyB0aGlzIHBvaW50cyB0byBBZHZhbmNlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFQSUMpIHVzYWdlLCB3aGljaCBpcyBrZXkgZm9yIGVmZmljaWVudCBpbnRlcnJ1cHQgaGFuZGxpbmcgaW4gbW9kZXJuIG11bHRpLWNvcmUgc3lzdGVtcywgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBgQ09OVElHX0FMTE9DYCBpcyBuZWNlc3NhcnkgYXMgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBhbiBpbXBvcnRhbnQgY29tcG9uZW50IGZvciB0aGUgaXNvbGF0aW9uIHByb2Nlc3MgdGhhdCBURFggcHJvdmlkZXMuIEZpbmFsbHksIGBYODZfTUNFYCwgb3IgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gc3VwcG9ydCwgcGxheXMgYSBrZXkgcGFydCBpbiB0aGUgcmVsaWFiaWxpdHkgYW5kIGVycm9yIGhhbmRsaW5nLCBlbnN1cmluZyByb2J1c3Qgb3BlcmF0aW9uIHdpdGhpbiB0aGlzIHNlY3VyZSBlbnZpcm9ubWVudC5cblxuTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGRlbHZlIGludG8gYENSWVBUT19ERVZfU1BfUFNQYC4gVGhpcyB3aWxsIGJlIGFub3RoZXIgc2V0IG9mIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBlbnRhaWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo1NC44NjQyNTA1ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODYwNTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjU1LjAyMjg2MzMzNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY0NjA1MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZDpcblxuKipEZXBlbmRlbmN5IENoZWNrOiBDUllQVE9fREVWX1NQX1BTUCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGUgYENSWVBUT19ERVZfU1BfUFNQYCBtb2R1bGUuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIGFuZCB0byBlbnN1cmUgSeKAmW0gb3BlcmF0aW5nIGluIGEgc2FmZSBhbmQgZWZmZWN0aXZlIG1hbm5lciwgSSBoYXZlIHRvIGZpcnN0IG1ldGljdWxvdXNseSBleGFtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIHNlcnZpY2VzIGl0IHJlbGllcyB1cG9uLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBjcmVhdGluZyBhIGNvbXByZWhlbnNpdmUgZGVwZW5kZW5jeSBncmFwaCB0byB2aXN1YWxpemUgdGhlIGNvbm5lY3Rpb25zLiBBcmUgdGhlcmUgYW55IGNyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgZGVwZW5kZW5jaWVzPyBUaGlzIGNvdWxkIG1lYW4gcG90ZW50aWFsIHNlY3VyaXR5IHJpc2tzLiBEbyB0aGV5IHJlcXVpcmUgc3BlY2lmaWMgdmVyc2lvbnMsIG9yIGFtIEkgZGVhbGluZyB3aXRoIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzc3Vlcz8gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiBteSBldmFsdWF0aW9uIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdXBkYXRlcyBvciBjaGFuZ2VzIEknbSBjb25zaWRlcmluZyB3b24ndCBpbmFkdmVydGVudGx5IGJyZWFrIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdGllcy4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo1OC4zODc0NzE4NzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cXG4gIDM2OlxcdFxcdCAgSWYgeW91IGNob29zZSAnTScgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwX2NyeXB0by5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXFxuICAzOTpcXHRcXHRib29sIFxcXCJQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXFxcIlxcbiAgNDA6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFxcdTAwMjZcXHUwMDI2IFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBBTURfSU9NTVVcXG4gIDQyOlxcdFxcdHNlbGVjdCBQQ0lfVFNNIGlmIFBDSVxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0IFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkuXFxuICA0NTpcXHRcXHQgVGhlIFBTUCBpcyBhIGRlZGljYXRlZCBwcm9jZXNzb3IgdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBrZXlcXG4gIDQ2OlxcdFxcdCBtYW5hZ2VtZW50IGNvbW1hbmRzIGluIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgbW9kZSxcXG4gIDQ3OlxcdFxcdCBhbG9uZyB3aXRoIHNvZnR3YXJlLWJhc2VkIFRydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IChURUUpIHRvXFxuICA0ODpcXHRcXHQgZW5hYmxlIHRoaXJkLXBhcnR5IHRydXN0ZWQgYXBwbGljYXRpb25zLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgQ1JZUFRPX0RFVl9DQ1BfREVCVUdGU1xcbiAgNTE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIENDUCBJbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4gIDUyOlxcdFxcdGRlZmF1bHQgblxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX0NDUFxcbiAgNTQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo1OC4zODc1OTQ5NjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNDg0NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpcyBpcyBhIGJyaWVmIG1lbnRhbCBub3RlOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgY29udGluZ2VudCBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGxpa2VseSBhIHNlY3VyaXR5LWZvY3VzZWQgbW9kdWxlIG9yIHN1YnN5c3RlbSB0aGF0IHJlcXVpcmVzIGNlcnRhaW4gaGFyZHdhcmUgYW5kIHVuZGVybHlpbmcgY3J5cHRvZ3JhcGhpYyBzZXJ2aWNlcy4gTm93LCBnaXZlbiB0aGF0IGRlcGVuZGVuY3kgY2hhaW4sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDUllQVE9fREVWX0NDUF9ERGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29yZSBjb21wb25lbnQgaXQgcmVsaWVzIHVwb24gaXMgY29uZmlndXJlZCBjb3JyZWN0bHksIGJlY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhhdCBjb21wb25lbnQgZGlyZWN0bHkgZGljdGF0ZXMgdGhlIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyBvZiB0aGUgY29tcG9uZW50cyB3aGljaCBhcmUgZGVwZW5kZW50IHVwb24gaXQuIEkgbXVzdCBjaGVjayBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgIHRvIHNlZSBpZiB0aGF0J3MgY29uZmlndXJlZCBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjAxLjYxMjQ0NDQ4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcXG4gICA1OlxcdFxcdGRlZmF1bHQgbVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxcbiAgIDg6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuICAxMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgRE1BREVWSUNFU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IEhXX1JBTkRPTVxcbiAgMTU6XFx0XFx0c2VsZWN0IERNQV9FTkdJTkVcXG4gIDE2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTZcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxcbiAgMjA6XFx0XFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjAxLjYxMjU2MzY5N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjYxODA1NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBTeW1ib2xzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGBLVk1fSU5URUxfVERYYCwgYElOVEVMX1REWF9IT1NUYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBDUllQVE9fREVWX0NDUF9ERGAuIEJ1dCBoYW5nIG9uLCBgS1ZNX1NNTWAgaXMgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCB0aGUgb3RoZXIgdHdvLCBgS1ZNX0FNRF9TRVZgIGFuZCBgS1ZNX0lOVEVMX1REWGAgYXJlIGFsc28gbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgY29udGluZ2VudCBvbiBkZXBlbmRlbmNpZXMuIFNvLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3Mgd2lsbCBiZSB0aGVzZSBzaXguXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZm9jdXMgc3ltYm9scywgdGhlc2UgYXJlIGtleTogYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGFuZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSByZWFjaGFibGUsIG5vdCBzdGF0aWMsIGFuZCByZWxldmFudC5cblxuSSd2ZSB2ZXJpZmllZCB0aGF0IGFsbCB0aGUgc3ltYm9scyBhcmUgaW5kZWVkIG5vbi1zdGF0aWM6IGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIGluIGBhcmNoL3g4Ni9rdm0vc21tLmNgLCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGFuZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gUGVyZmVjdC4gVGhvc2UgdHdvIG90aGVyIHZteCBzeW1ib2xzIGFyZSBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aG9zZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGFyZSB0aGVzZSB1c2VmdWwgc3ltYm9scz8gYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgdHJpZ2dlcmVkIHdoZW4gZXhlY3V0aW5nIGFuIFJTTSBpbnN0cnVjdGlvbiB3aGljaCBpcyB1c2VkIHRvIGxlYXZlIFNNTSwgc28gdGhhdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE1ha2VzIHNlbnNlLlxuXG5gc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGlzIHZlcnkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0J3MgdGhlIG1haW4gbG9vcCBmb3IgcnVubmluZyBhIHZDUFUhIFNvLCBpdOKAmXMgZXhlY3V0ZWQgb24gZXZlcnkgYEtWTV9SVU5gIGlvY3RsLCBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgVGhlIHF1ZXN0aW9uIGlzOiBpcyBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gICphbHdheXMqIGNhbGxlZD8gVGhhdCBuZWVkcyBjb25maXJtYXRpb24sIGFuZCBjb3VsZCBiZSBhIHZlcnkgdmFsdWFibGUgcGxhY2UgdG8gZm9jdXMgYXR0ZW50aW9uIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU1MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjEwLjI3NDM3MTk1MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzMDMwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3g4Nl92Y3B1X3ByZV9ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9ODgwMD1zdGF0aWMgaW50IGNvbXBsZXRlX2VtdWxhdGVkX21taW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg4NDMtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg4NDQ6c3RhdGljIGludCBrdm1feDg2X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg4NDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTg4ODE9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04OTgxLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4OTgyOlxcdHIgPSBrdm1feDg2X3ZjcHVfcHJlX3J1bih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODk4My1cXHRpZiAociBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OToxMC4zNzM2ODA0NTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEzNjU4MDAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSG90LVBhdGggRnVuY3Rpb25zIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgbmV3IGNvZGUgaW50ZWdyYXRlcyBpbnRvIHRoZSBLVk0geDg2IGFyY2hpdGVjdHVyZS4gSSBzZWUgdGhhdCBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gIGlzIGNhbGxlZCByaWdodCBhdCB0aGUgc3RhcnQgb2YgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdCBtZWFucyBmdW5jdGlvbnMgbGlrZSBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFyZSBiZWluZyBjYWxsZWQgKmV2ZXJ5KiB0aW1lIGEgYEtWTV9SVU5gIGlvY3RsIGlzIGlzc3VlZC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgaG90LXBhdGggZnVuY3Rpb25zLCBidXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgbGlzdGluZyB0aG9zZSB0byBwcmV2ZW50IHNrZXdpbmcgdGVzdCBkaXN0cmlidXRpb25zLiBNYWtlcyBzZW5zZS4gRnV6emluZyBhIHNpbXBsZSBib29sZWFuIHJldHVybiBpc24ndCBnb2luZyB0byBiZSBzdXBlciBmcnVpdGZ1bCBhbnl3YXkuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBpcyBjYWxsZWQgZnJvbSB0aGF0IHByZS1ydW4gZnVuY3Rpb24/IEFoLCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLiBJdCdzIGFsc28gY2FsbGVkIGZyb20gdGhlcmUsIHZpYSBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgb3AuIFNvIGFnYWluLCBob3QtcGF0aC4gR290dGEgYXZvaWQgdGhhdCBvbmUuXG5cbldhaXQsIG5vdyBJIHNlZSB0aGF0IGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgaXMgYWxzbyBjYWxsZWQgZnJvbSBgZW11bGF0b3JfbGVhdmVfc21tYC4gQWhhISBUaGF0J3MgaW50ZXJlc3RpbmcuIExvb2tpbmcgYXQgdGhlIGNvZGU6XG5cbmBgYGNcblx0aWYgKHJldCA9PSBYODZFTVVMX0NPTlRJTlVFIFx1MDAyNlx1MDAyNlxuXHQgICAga3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKVxuXHRcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuYGBgXG5cbkl0J3MgYmVpbmcgY2FsbGVkIGluc2lkZSBgZW11bGF0b3JfbGVhdmVfc21tYC4gU28sIHRoZSBxdWVzdGlvbiBpczogaXMgKnRoYXQqIGEgaG90LXBhdGggZnVuY3Rpb24/IE5vLCBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGV4ZWN1dGluZyB0aGUgUlNNIGluc3RydWN0aW9uLiBUaGF0J3MgYSBncmVhdCBjYW5kaWRhdGUhIFRoYXQncyB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseS4gYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpcyBob3QtcGF0aC4gVGhlIG9yaWdpbmFsIGxvZ2ljIHdhcyBjYWxsaW5nIGl0IGZyb20gYGt2bV94ODZfdmNwdV9wcmVfcnVuYC4gVGhlIHBhdGNoIGp1c3QgcmVmYWN0b3JlZCBhbmQgcmVuYW1lZCB0aGUgb3AgdG8gY2FsbCBmcm9tIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAgYW5kICphbHNvKiBmcm9tIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLiBTbyB0aGUgKm5ldyogbG9naWMgaXMgaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAuIExldCdzIGRvdWJsZSBjaGVjayB0aGF0LlxuXG5ZZXAsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHNlZW1zIHRvIGJlIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guIFRoZSByZXN0IGlzIHJlZmFjdG9yaW5nIHRvIGFsbG93IGNhbGxpbmcgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGZyb20gdGhlIG5ldyBlbnRyeSBwb2ludC5cblxuU28sIGluIHN1bW1hcnksIGZ1enppbmcgYGVtdWxhdG9yX2xlYXZlX3NtbWAgc2VlbXMgbGlrZSB0aGUgYmVzdCBhcHByb2FjaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE1MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OToxOS41MTAyNjUxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC92bXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDMwOlxcdFxcdHJldHVybiAxO1xcbjYwMzE6XFx0fVxcbjYwMzI6XFx0XFxuNjAzMzpcXHQvKlxcbjYwMzQ6XFx0ICogUmV0dXJucyB0cnVlIGlmIGVtdWxhdGlvbiBpcyByZXF1aXJlZCAoZHVlIHRvIHRoZSB2Q1BVIGhhdmluZyBpbnZhbGlkIHN0YXRlXFxuNjAzNTpcXHQgKiB3aXRoIHVuc3Jlc3RyaWN0ZWQgZ3Vlc3QgbW9kZSBkaXNhYmxlZCkgYW5kIEtWTSBjYW4ndCBmYWl0aGZ1bGx5IGVtdWxhdGUgdGhlXFxuNjAzNjpcXHQgKiBjdXJyZW50IHZDUFUgc3RhdGUuXFxuNjAzNzpcXHQgKi9cXG42MDM4OlxcdGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjYwMzk6XFx0e1xcbjYwNDA6XFx0XFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XFxuNjA0MTpcXHRcXG42MDQyOlxcdFxcdGlmICghdm14LVxcdTAwM2V2dC5lbXVsYXRpb25fcmVxdWlyZWQpXFxuNjA0MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNjA0NDpcXHRcXG42MDQ1OlxcdFxcdC8qXFxuNjA0NjpcXHRcXHQgKiBJdCBpcyBhcmNoaXRlY3R1cmFsbHkgaW1wb3NzaWJsZSBmb3IgZW11bGF0aW9uIHRvIGJlIHJlcXVpcmVkIHdoZW4gYVxcbjYwNDc6XFx0XFx0ICogbmVzdGVkIFZNLUVudGVyIGlzIHBlbmRpbmcgY29tcGxldGlvbiwgYXMgVk0tRW50ZXIgd2lsbCBWTS1GYWlsIGlmXFxuNjA0ODpcXHRcXHQgKiBndWVzdCBzdGF0ZSBpcyBpbnZhbGlkIGFuZCB1bnJlc3RyaWN0ZWQgZ3Vlc3QgaXMgZGlzYWJsZWQsIGkuZS4gS1ZNXFxuNjA0OTpcXHRcXHQgKiBzaG91bGQgc3ludGhlc2l6ZSBWTS1GYWlsIGluc3RlYWQgZW11bGF0aW9uIEwyIGNvZGUuICBUaGlzIHBhdGggaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6MTkuNTEwNjk5NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyOTY0NTczMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyBmb3IgYSBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgZmxhZyBpcyBqdXN0IGEgc2ltcGxlIGNoZWNrLCBub3RoaW5nIGNvbXBsZXggdGhlcmUuIFRoZSBwYXRjaCBhZGRzIGEgdGVzdCwgc3BlY2lmaWNhbGx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2Ygd2hhdCdzIGJlaW5nIHRlc3RlZC4gVGhlIHRlc3QncyBsb2dpYyBpcyBhbGwgYWJvdXQgaW5qZWN0aW5nIGFuIFNNSSB3aGlsZSBMMiBpcyBydW5uaW5nLCBmb3JjaW5nIGFuIEkvTyBleGl0IGZyb20gTDEsIG1hbmlwdWxhdGluZyBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhLCBhbmQgdGhlbiBleHBlY3RpbmcgYSBTSFVURE9XTiBleGl0IGR1ZSB0byBpbnZhbGlkIEwyIHN0YXRlIG9uIFJTTS4gVGhpcyBpcyBhIHZlcnkgY2xlYXIgdGVzdCBvZiB0aGF0IG5ldyBgZW11bGF0b3JfbGVhdmVfc21tYCBsb2dpYy5cblxuVGhhdCBtYWtlcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0aGUga2V5IGZ1bmN0aW9uLiBNeSBmb2N1cyBpcyBlbnRpcmVseSB0aGVyZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZyBvcHRpb25zLiBJcyBgS1ZNX1NNTWAgc3VmZmljaWVudD8gV2VsbCwgdGhpcyB0ZXN0IGlzIFZNWC1zcGVjaWZpYywgc28gY2xlYXJseSBgS1ZNX0lOVEVMYCBpcyBhIG11c3QtaGF2ZS4gQW5kIHNpbmNlIHRoZSB0ZXN0IHNwZWNpZmljYWxseSB0YXJnZXRzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBgS1ZNX1NNTWAgaXMgZXNzZW50aWFsLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5lZWRzIGBLVk1fQU1EX1NFVmAgYW5kIGBLVk1fSU5URUxfVERYYCB0byBjb21waWxlIGFuZCBiZSB0ZXN0ZWQgdG9vLlxuXG5MZXQncyBsaXN0IHRoZXNlIGRlcGVuZGVuY2llcyBleHBsaWNpdGx5OlxuXG4qICAgYEtWTV9TTU1gXG4qICAgYEtWTV9BTURfU0VWYFxuKiAgIGBLVk1fSU5URUxfVERYYFxuKiAgIGBJTlRFTF9URFhfSE9TVGBcbiogICBgQ1JZUFRPX0RFVl9TUF9QU1BgXG4qICAgYENSWVBUT19ERVZfQ0NQX0REYFxuXG5Ib2xkIG9uLCBkbyB3ZSBhbHNvIG5lZWQgYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYCBleHBsaWNpdGx5PyBUaGV5IGFyZSB1c3VhbGx5IGVuYWJsZWQgaW4gc3l6a2FsbGVyIGJ5IGRlZmF1bHQsIGJ1dCB0aGVyZSdzIG5vIGhhcm0gaW4gaW5jbHVkaW5nIHRoZW0sIGp1c3QgaW4gY2FzZS4gVGhleSBhcmUgdHJpc3RhdGUsIHNvIHNwZWNpZnlpbmcgdGhlbSB3b24ndCBiZSBhbiBpc3N1ZS4gV2FpdCwgYSBiaXQgbW9yZSBkaWdnaW5nLiBJdCBsb29rcyBsaWtlIGBLVk1fSU5URUxfVERYYCBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EX1NFVmAgZGVwZW5kcyBvbiBgS1ZNX0FNRGAuIFNvLCB3ZSdyZSBnb29kIHRoZXJlLlxuXG5KdXN0IHRvIGJlIHN1cmUsIGlzIGBLVk1fU01NYCBhIGRlZmF1bHQtZW5hYmxlZCBvcHRpb24/IFllcywgaXQgaXMgc2V0IHRvIGBkZWZhdWx0IHlgLCBidXQgaXQncyBzdGlsbCBwcnVkZW50IHRvIHNwZWNpZnkgaXQgZGlyZWN0bHkuXG5cbk9rYXksIGlzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRydWx5IHRoZSBvbmx5IGZ1bmN0aW9uIG9mIGludGVyZXN0PyBBcmUgdGhlcmUgYW55IG90aGVycyB0aGF0IGFyZSBub3QgcGVyZm9ybWFuY2UtY3JpdGljYWw/IExldCdzIGNoZWNrLiBBaCwgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhcmUgcGVyZm9ybWFuY2UtY3JpdGljYWwuIFNvLCB5ZXMsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIHRoZSBvbmx5IGZvY3VzIGhlcmUuXG5cbkZpbmFsbHksIGlzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGV4cG9ydGVkLCBvciBpcyBpdCBzdGF0aWM/IEl0J3Mgbm9uLXN0YXRpYyBpbiBgYXJjaC94ODYva3ZtL3NtbS5jYC4gQnV0IGhvbGQgb24sIGlmIGBDT05GSUdfS1ZNX1NNTWAgaXMgKm5vdCogZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgaXQncyBkZWZpbmVkIGFzIHN0YXRpYyBpbmxpbmUgb3Igc3RhdGljLiBIb3dldmVyLCB3aXRoIGBDT05GSUdfS1ZNX1NNTT15YCwgaXQncyBpbmRlZWQgbm9uLXN0YXRpYyBpbiBgc21tLmNgLlxuXG5UaGVyZWZvcmUsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBgZW11bGF0b3JfbGVhdmVfc21tYCBpbiBgc21tLmNgIGZvciBjb3JyZWN0bmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OToyOS44MDcxNjI3NjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDcyMDQ4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZW11bGF0b3JfbGVhdmVfc21tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3NtbS5jPTUxNj1zdGF0aWMgaW50IHJzbV9sb2FkX3N0YXRlXzY0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTU3Mi1cXG5hcmNoL3g4Ni9rdm0vc21tLmM6NTczOmludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL3NtbS5jLTU3NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmg9MTU4PXZvaWQgZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3NtbS5oOjE1OTppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTYwLXZvaWQgcHJvY2Vzc19zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc2MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjI5LjkzNzkwMDY2NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE3MzYxOTAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJTTSBJbnN0cnVjdGlvbiBFbXVsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgUlNNIGluc3RydWN0aW9uIGVtdWxhdGlvbiB3aXRoaW4gS1ZNLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIHJlc2lkZXMgaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAgd2l0aGluIGBzbW0uY2AuIEkgY29uZmlybWVkIHRoYXQgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBpcyBpbmRlZWQgKm5vdCogc3RhdGljLCB3aGljaCBpcyBnb29kIGZvciBpbnN0cnVtZW50YXRpb24uXG5cbkkgZGlkIGEgcXVpY2sgc2NhbiBvZiBgc21tLmNgIGFuZCBub3RlZCB0aGF0IGByc21fbG9hZF9zdGF0ZV8zMmAgYW5kIGByc21fbG9hZF9zdGF0ZV82NGAgYXJlIHN0YXRpYywgYW5kIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzLCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgdGhlIFJTTSBpbnN0cnVjdGlvbi5cblxuVGhlIG1lYXQgb2YgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB3aXRoaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgYSBmdW5jdGlvbiwgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLCBhbmQsIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgcm91dGluZSByZXR1cm5zIGBYODZFTVVMX1VOSEFORExFQUJMRWAuIEkgc2VlIHRoYXQgdGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byBkZWFsIHdpdGggaW52YWxpZCBndWVzdCBzdGF0ZSBkdXJpbmcgYW4gUlNNIHRyYW5zaXRpb24sIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGlzc3Vlcy5cblxuVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcmVmYWN0b3JpbmcuIEl0IG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBjaGVjayBsb2dpYyBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCwgYW5kIGl0IG1ha2VzIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhdmFpbGFibGUgYXMgYSBzZXBhcmF0ZSBvcGVyYXRpb24gdG8gc3VwcG9ydCB0aGlzIG5ldyBjaGVjay4gVGhlIGxvZ2ljIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaGFuZGxlIHBvdGVudGlhbGx5IHVuaGFuZGxlYWJsZSBzY2VuYXJpb3MgZHVyaW5nIFJTTS5cblxuVGhlcmVmb3JlLCBmcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZSwgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgdGhlIGtleSB0YXJnZXQuIFRoZSBuZXcgY29uZGl0aW9uIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNob3VsZCBiZSB0aGUgZm9jdXMgb2YgZnV6emluZyBlZmZvcnRzLlxuXG5Ob3csIGZvciBjb25maWd1cmluZyBhIHRlc3RpbmcgZW52aXJvbm1lbnQsIEknbSBnb2luZyB0byBsb29rIGF0IHNvbWUga2V5IEtjb25maWcgb3B0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgZGVwZW5kZW50IG9uIHNvbWUgc3BlY2lmaWMgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBlbmFibGUgYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0lOVEVMX1REWGAsIGBJTlRFTF9URFhfSE9TVGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYWxsIG9mIHRoZXNlIGFyZSBwcmVzZW50IGFuZCBlbmFibGVkLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCBgS1ZNX0lOVEVMX1REWGAgYW5kIGBJTlRFTF9URFhfSE9TVGAgbWlnaHQgbm90IGJlIGluIGV2ZXJ5IGtlcm5lbCB2ZXJzaW9uLCBidXQgdGhleSBhcmUgYXZhaWxhYmxlIGhlcmUuXG5cbkZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZXR1cCwgYW5kIHRvIG1pbmltaXplIHRoZSByaXNrIG9mIG1pc3Npbmcgc29tZXRoaW5nLCBJJ2xsIGFsc28gYWRkIGEgZmV3IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zOiBgWDg2XzY0YCwgYENQVV9TVVBfSU5URUxgLCBgQ1BVX1NVUF9BTURgLCBgWDg2X1gyQVBJQ2AsIGBDT05USUdfQUxMT0NgLCBgWDg2X01DRWAuIEFkZGl0aW9uYWxseSwgSSdsbCBlbmFibGUgYEFNRF9JT01NVWAgdG8gZW5zdXJlIHRoYXQgYENSWVBUT19ERVZfU1BfUFNQYCBmdW5jdGlvbnMgY29ycmVjdGx5LiBUaGlzIHNob3VsZCBwcm92aWRlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCBmb3IgdGVzdGluZyB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OTo0MC4xMTE1MjM3NDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzAzMjc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMi0jIEFNRCBJT01NVSBzdXBwb3J0XFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjQzOmNvbmZpZyBBTURfSU9NTVVfREVCVUdGU1xcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXFx0Ym9vbCBcXFwiRW5hYmxlIEFNRCBJT01NVSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NDAuMzM0NTY0MTExWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTk3OTQzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGEgU2VjdXJlIEtWTSBFbnZpcm9ubWVudCoqXG5cbkFscmlnaHQsIHRoZSBzeXN0ZW0gZGVmaW5pdGVseSBoYXMgYEFNRF9JT01NVWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiwgYXMgdGhpcyBpcyBnb2luZyB0byBiZSBteSB0aG91Z2h0IHByb2Nlc3MgZm9yIHNldHRpbmcgdXAgYSBzZWN1cmUgS1ZNIGVudmlyb25tZW50LiBJJ20gZ29pbmcgdG8gcmVmaW5lIHRoaXMgbGlzdCB0byBtYWtlIGl0IGEgYml0IG1vcmUgY29tcGxldGUsIGFuZCBJJ2xsIGluY2x1ZGUgdGhpbmdzIHRoYXQgSSBrbm93IGFyZSBpbXBvcnRhbnQgZm9yIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW86XG5gS1ZNX1NNTWAsIHRoYXQncyBhIG5lY2Vzc2l0eVxuYEtWTV9BTURfU0VWYCBpcyBkZWZpbml0ZWx5IGltcG9ydGFudCB3aXRoIEFNRCBJT01NVVxuYEtWTV9JTlRFTF9URFhgLCBsZXQncyBhZGQgdGhhdCBmb3IgY29tcGxldGVuZXNzXG5gSU5URUxfVERYX0hPU1RgLCB0aGF0IG9uZSB0b28uXG5gQ1JZUFRPX0RFVl9TUF9QU1BgIHdpbGwgYmUgdXNlZnVsXG5gQ1JZUFRPX0RFVl9DQ1BfRERgLCBJIGNhbiBzZWUgdGhvc2UgdHdvIGJlaW5nIHVzZWZ1bCBpbiBjb25qdW5jdGlvbi5cbmBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAsIGJhc2ljIEtWTSwgb2YgY291cnNlLlxuYEFNRF9JT01NVWAsIGFnYWluLCBqdXN0IG1ha2luZyBzdXJlLlxuXG5Pa2F5LCBub3cgbGV0J3MgdGhpbmsgY3JpdGljYWxseSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGluY2x1ZGluZyBgS1ZNX0lOVEVMX1REWGAgLiBJIHJlbWVtYmVyIHRoYXQgaXQgZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RgLCBhbmQgdGhhdCBpbiB0dXJuIGRlcGVuZHMgb24gYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gSG1tLCBJIHNob3VsZCBwcm9iYWJseSBhZGQgdGhvc2UgZGVwZW5kZW5jaWVzIHRvIHRoZSBjb25maWcganVzdCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgZXZlcnl0aGluZydzIHByb3Blcmx5IGVuYWJsZWQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVudmlyb25tZW50IGlzIHNvbGlkLCBhbmQgSSdtIG5vdCBjaGFzaW5nIGRvd24gc29tZSBvYnNjdXJlIGRlcGVuZGVuY3kgbGF0ZXIuIFNvIGxldCdzIGFkZDpcbmBYODZfWDJBUElDYFxuYENPTlRJR19BTExPQ2BcbmBYODZfTUNFYFxuXG5Ob3cgbGV0J3MganVzdCBtYWtlIHN1cmUgYENPTlRJR19BTExPQ2AgaXMgYWN0dWFsbHkgY29uZmlndXJlZCBjb3JyZWN0bHkgYW5kIHRoZW4gcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OTo0NS4xMzQzNjI0NTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjIzMzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09OVElHX0FMTE9DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG4tLVxcbm1tL0tjb25maWctNzE4LVxcbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0NcXG5tbS9LY29uZmlnLTcyMC1cXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcXHUwMDI2XFx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NDUuMzIwNjA0MzIzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTU5MDExMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhpbmtpbmcgb24gQ09OVElHX0FMTE9DKipcblxuT2theSwgc28gYENPTlRJR19BTExPQ2AgaXMgYSBgZGVmX2Jvb2xgLCB3aGljaCBtZWFucyBJIGRvbid0IGdldCBkaXJlY3QgY29udHJvbCBvdmVyIHdoZXRoZXIgaXQncyBlbmFibGVkLiBJdCdzIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50LCBhbmQgcmlnaHQgbm93LCB0aGUgbG9naWMgaXMgdGllZCB0byBgTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTmAgb3IgYENNQWAuIEhtbSwgcmF0aGVyIHRoYW4gdW50YW5nbGluZyBhIG1vcmUgY29tcGxleCBjb25kaXRpb25hbCwgaXQgbG9va3MgbGlrZSBgQ01BYCBpcyB0aGUgc2ltcGxlc3QgcGF0aCB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIEknbGwgZ28gYWhlYWQgYW5kIGp1c3QgYWRkIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYENNQWAuIFRoYXQncyB0aGUgbW9zdCBleHBlZGllbnQgYW5kIGxpa2VseSB0aGUgbW9zdCByZWxpYWJsZSBhcHByb2FjaCBhdCB0aGlzIGp1bmN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA1MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjQ4LjI3NjUwOTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzY1NTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuLS1cXG5tbS9LY29uZmlnLTEwNjYtXFxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNjgtXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDgxLVxcbm1tL0tjb25maWc6MTA4Mjpjb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwODMtXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDg3LVxcbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXFxubW0vS2NvbmZpZy0xMDg5LVxcdGJvb2wgXFxcIkNNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA5NC1cXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA5Ni1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NDguNDA0MTc0MjgyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTYxNzkwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgcHJvYmxlbS4gRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciBgQ01BYCDigJMgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGZvY3VzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBhIGNoYWxsZW5nZSBhcm91bmQgZnJhZ21lbnRhdGlvbiwgbGFyZ2UgYWxsb2NhdGlvbnMsIG9yIHBlcmhhcHMgTlVNQSBjb25zaWRlcmF0aW9ucy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBYODZfWDJBUElDYC4gVGhpcyBpcyBjbGVhcmx5IGluZGljYXRpbmcgYW4geDg2IGFyY2hpdGVjdHVyZSB3aXRoIHRoZSBYMkFQSUMgZmVhdHVyZSBlbmFibGVkLiBUaGlzIGltbWVkaWF0ZWx5IGltcGxpZXMgYSBzY2FsZSBvZiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIC0gdGhpbmsgaW50ZXJydXB0IGhhbmRsaW5nLCBJUEkgcGVyZm9ybWFuY2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJdCBhbHNvIGltcGxpZXMgYSBjZXJ0YWluIGxldmVsIG9mIHN5c3RlbSBjb25maWd1cmF0aW9uIC0gY29yZSBjb3VudCwgQklPUyBzZXR0aW5ncywgYW5kIE9TIGtlcm5lbCBvcHRpb25zIHdpbGwgbmVlZCB0byBiZSB1bmRlcnN0b29kIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvLCBgQ01BYCBhbmQgYFg4Nl9YMkFQSUNgLCBtaWdodCBpbnRlcmFjdCBvciBjb25mbGljdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgcG90ZW50aWFsbHkgcHJvZm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NTEuNzIwMzU4Njc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU1OTg1OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9YMkFQSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NDM2PWNvbmZpZyBTTVBcXG4tLVxcbmFyY2gveDg2L0tjb25maWctNDU4LVxcbmFyY2gveDg2L0tjb25maWc6NDU5OmNvbmZpZyBYODZfWDJBUElDXFxuYXJjaC94ODYvS2NvbmZpZy00NjAtXFx0Ym9vbCBcXFwieDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OTo1Mi4wMDU5NjkwMTlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMzY0MDgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIENQVSBFcnJvciBIYW5kbGluZyBNZWNoYW5pc21zKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGlzIGBYODZfWDJBUElDYCB0aGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgaXRzIGltcGxpY2F0aW9ucyBmb3IgaW50ZXItcHJvY2Vzc29yIGNvbW11bmljYXRpb24gYW5kIGludGVycnVwdCBkZWxpdmVyeSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBlcnJvciBoYW5kbGluZy4gSXMgdGhpcyBnb2luZyB0byBiZSB0aGUgKnByaW1hcnkqIG1lY2hhbmlzbSB3ZSdyZSB1c2luZyBmb3Igc2lnbmFsaW5nIGVycm9ycz8gT3IgaXMgaXQgYSBzZWNvbmRhcnkgc3lzdGVtPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIGFyY2hpdGVjdHVyZXMgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGFjcm9zcyBkaWZmZXJlbnQgY29yZXMgYW5kIHNvY2tldHM/IEkgbmVlZCB0byBjb25zaWRlciB0aGUgb3ZlcmhlYWQgb2YgdGhpcyBhcHByb2FjaC5cblxuTm93LCBsZXQncyBwaXZvdCB0byBgWDg2X01DRWAuIFRoaXMgZmVlbHMgbGlrZSB0aGUgbW9yZSBsaWtlbHkgY2FuZGlkYXRlIGZvciBvdXIgY29yZSBoYXJkd2FyZSBlcnJvciByZXBvcnRpbmcuIE15IG1pbmQgaXMgYWxyZWFkeSBqdW1waW5nIHRvIHRoZSBzcGVjaWZpYyBtYWNoaW5lIGNoZWNrIGFyY2hpdGVjdHVyZSByZWdpc3RlcnMgYW5kIHRoZSBmbG93IG9mIGVycm9yIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIE9TJ3MgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMuIElzIGl0IGdvaW5nIHRvIGJlIGEgc2ltcGxlIG5vdGlmaWNhdGlvbiwgb3Igd2lsbCB3ZSBoYXZlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgcmVzcG9uc2UgdG8gZGlmZmVyZW50IGVycm9yIHR5cGVzPyBXaGF0IGFib3V0IGVycm9yIGNvbnRhaW5tZW50PyBBbmQgbWVtb3J5IGVycm9yIGNvcnJlY3Rpb24gY2FwYWJpbGl0aWVzPyBUaGUgc3BlY2lmaWMgTVNScyBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXJyb3IgY29kZXMgYXJlIHRvcCBvZiBtaW5kLiBOZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGhvdyB0aGlzIHBsYXlzIHdpdGggb3RoZXIgZXJyb3IgbW9kZWxzIGxpa2UgcGFyaXR5IGFuZCBFQ0MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NTUuNjI5NjE0MDg1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkxNzI3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9NQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTExNz1jb25maWcgWDg2X1JFUk9VVEVfRk9SX0JST0tFTl9CT09UX0lSUVNcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTEzOS1cXG5hcmNoL3g4Ni9LY29uZmlnOjExNDA6Y29uZmlnIFg4Nl9NQ0VcXG5hcmNoL3g4Ni9LY29uZmlnLTExNDEtXFx0Ym9vbCBcXFwiTWFjaGluZSBDaGVjayAvIG92ZXJoZWF0aW5nIHJlcG9ydGluZ1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTE0OS1cXG5hcmNoL3g4Ni9LY29uZmlnOjExNTA6Y29uZmlnIFg4Nl9NQ0VMT0dfTEVHQUNZXFxuYXJjaC94ODYvS2NvbmZpZy0xMTUxLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGRlcHJlY2F0ZWQgL2Rldi9tY2Vsb2cgY2hhcmFjdGVyIGRldmljZVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTE1Ny1cXG5hcmNoL3g4Ni9LY29uZmlnOjExNTg6Y29uZmlnIFg4Nl9NQ0VfSU5URUxcXG5hcmNoL3g4Ni9LY29uZmlnLTExNTktXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTY1LVxcbmFyY2gveDg2L0tjb25maWc6MTE2Njpjb25maWcgWDg2X01DRV9BTURcXG5hcmNoL3g4Ni9LY29uZmlnLTExNjctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0xMTc0PWNvbmZpZyBYODZfQU5DSUVOVF9NQ0VcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTE4MS1cXG5hcmNoL3g4Ni9LY29uZmlnOjExODI6Y29uZmlnIFg4Nl9NQ0VfVEhSRVNIT0xEXFxuYXJjaC94ODYvS2NvbmZpZy0xMTgzLVxcdGRlcGVuZHMgb24gWDg2X01DRV9BTUQgfHwgWDg2X01DRV9JTlRFTFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTg1LVxcbmFyY2gveDg2L0tjb25maWc6MTE4Njpjb25maWcgWDg2X01DRV9JTkpFQ1RcXG5hcmNoL3g4Ni9LY29uZmlnLTExODctXFx0ZGVwZW5kcyBvbiBYODZfTUNFIFxcdTAwMjZcXHUwMDI2IFg4Nl9MT0NBTF9BUElDIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjU1LjgwODc5NTIyNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM4MjIyNzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYFg4Nl9NQ0VgIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gYFg4Nl9NQ0VgIGFuZCBzcGVjaWZpY2FsbHkgaG93IEtWTSBoYW5kbGVzIGxlYXZpbmcgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB0aHJvdWdoIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIFRoZSBjb25maWdzIGluIHBsYXkgYXJlIGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYEtWTV9JTlRFTF9URFhgLCBgSU5URUxfVERYX0hPU1RgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBgQU1EX0lPTU1VYCwgYENNQWAsIGBYODZfWDJBUElDYCwgYW5kLCBvZiBjb3Vyc2UsIGBYODZfTUNFYC5cblxuVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGZ1bmN0aW9uLiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgd2hlbiBhIGd1ZXN0IGV4aXRzIFNNTSB1c2luZyBSU00uIFRoZSBmaXggbW9kaWZpZXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gY2hlY2sgaWYgdGhlIHJlcXVpcmVkIGVtdWxhdGlvbiBpcyB1bmhhbmRsZWFibGUsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgYXJvdW5kIHRoaXMgbmV3IGNoZWNrLCBtb3Zpbmcgc29tZSBsb2dpYyBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkbyB3ZSBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzP1wiIFRoZSBwYXRjaCdzIGNvcmUgbG9naWMgY2hhbmdlIGhhcHBlbnMgaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAsIHNvIHRoYXQncyB0aGUgbmF0dXJhbCBmaXJzdCB0YXJnZXQuXG5cbkkgY29uc2lkZXJlZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFzIGEgcG9zc2libGUgZm9jdXMgc3ltYm9sLiBIb3dldmVyLCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGVtdWxhdG9yX2xlYXZlX3NtbWAgYW5kIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAuIElmIHdlIGZvY3VzIG9uIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCB3ZSdsbCBpbmhlcmVudGx5IGhpdCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFueXdheSwgbWFraW5nIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGEgc3VmZmljaWVudCwgYW5kIHBlcmhhcHMgbW9yZSBkaXJlY3QsIHBvaW50IG9mIGF0dGFjay5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBmcm9tIHVzZXJzcGFjZT8gVGhlIGFuc3dlciBpcyB5ZXMuIEl0J3MgY2FsbGVkIHdoZW4gZW11bGF0aW5nIHRoZSBSU00gaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIGEgMTYtYml0IGluc3RydWN0aW9uICgweDBGIDB4QUEpIGV4ZWN1dGFibGUgYnkgdGhlIGd1ZXN0IGluIFNNTS4gVGhlIFJTTSBpbnN0cnVjdGlvbiBlZmZlY3RpdmVseSBoYW5kbGVzIHRoZSBleGl0IGZyb20gU01NLiBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIHRoaXMgaW5zdHJ1Y3Rpb24gYW5kIGV4ZWN1dGUgaXQgd2l0aGluIHRoZSBWTS4gVG8gY29uZmlybSwgSSBkb3VibGUtY2hlY2tlZCwgYW5kIGZvdW5kIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY2AgdGVzdCwgd2hpY2ggaW5jbHVkZXM6XG5cbmBgYGNcbnN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuXHQweGU0LCBBUkJJVFJBUllfSU9fUE9SVCxcdC8qIElOICRBUkJJVFJBUllfSU9fUE9SVCwgJWFsICovXG5cdDB4MGYsIDB4YWEsXHRcdFx0LyogUlNNICovXG59O1xuYGBgXG5cblRoaXMgdGVzdCBjbGVhcmx5IGRlbW9uc3RyYXRlcyB0aGUgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIGFic29sdXRlbHkgdGhlIGNvcnJlY3QgZm9jdXMgc3ltYm9sLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjYzLCJPdXRwdXRUb2tlbnMiOjI3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMzowMDowNi4xOTEwMjY0OTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTkwNjYzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9TTU1cIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJYODZfWDJBUElDXCIsXG4gICAgXCJYODZfTUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW11bGF0b3JfbGVhdmVfc21tXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgS1ZNIGRvZXMgbm90IHByb3Blcmx5IGhhbmRsZSBpbnZhbGlkIGd1ZXN0IHN0YXRlIHdoZW4gbGVhdmluZyBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIHZpYSB0aGUgUlNNIGluc3RydWN0aW9uLiBJdCBtb2RpZmllcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0byBjaGVjayBpZiB1bmhhbmRsZWFibGUgZW11bGF0aW9uIGlzIHJlcXVpcmVkLCBhbmQgaWYgc28sIHJldHVybnMgYFg4NkVNVUxfVU5IQU5ETEVBQkxFYC4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHZjcHVfcHJlX3J1bmAgb3AgaW50byBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYW5kIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCB0byBzdXBwb3J0IHRoaXMgY2hlY2suIFdlIHNob3VsZCBmb2N1cyBmdXp6aW5nIG9uIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIHRlc3QgdGhpcyBuZXcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIlg4Nl9YMkFQSUNcIixcbiAgICBcIlg4Nl9NQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbXVsYXRvcl9sZWF2ZV9zbW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBLVk0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgd2hlbiBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIEl0IG1vZGlmaWVzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIGNoZWNrIGlmIHVuaGFuZGxlYWJsZSBlbXVsYXRpb24gaXMgcmVxdWlyZWQsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgdmNwdV9wcmVfcnVuYCBvcCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHRvIHN1cHBvcnQgdGhpcyBjaGVjay4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gdGVzdCB0aGlzIG5ldyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 02:56:13 +0000 UTC FinishedAt: 2026-08-02 03:00:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "3c7d7f908d574277a845423ec32250a8d8df44c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_SMM", "KVM_AMD_SEV", "KVM_INTEL_TDX", "INTEL_TDX_HOST", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "KVM_INTEL", "KVM_AMD", "AMD_IOMMU", "CMA", "X86_X2APIC", "X86_MCE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "3c7d7f908d574277a845423ec32250a8d8df44c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_SMM", "KVM_AMD_SEV", "KVM_INTEL_TDX", "INTEL_TDX_HOST", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "KVM_INTEL", "KVM_AMD", "AMD_IOMMU", "CMA", "X86_X2APIC", "X86_MCE" ], "series_id": "f2f1e814-e4cd-4687-a5bc-67644b9b12b3" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "emulator_leave_smm" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9TTU0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7WDg2X01DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtdWxhdG9yX2xlYXZlX3NtbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBLVk0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgd2hlbiBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIEl0IG1vZGlmaWVzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIGNoZWNrIGlmIHVuaGFuZGxlYWJsZSBlbXVsYXRpb24gaXMgcmVxdWlyZWQsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgdmNwdV9wcmVfcnVuYCBvcCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHRvIHN1cHBvcnQgdGhpcyBjaGVjay4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gdGVzdCB0aGlzIG5ldyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJhYjg3YTgzNzg2ZDMzNWE2YjI3ZDVkZDI1YjhmNTIxZWNkNGJjNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDAyOjU4OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA1Y2IxMzJlY2EzYzM1Li5lMjEzYzlhZTNlMzAxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTYzLDExICYjNDM7NjMsMTIgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChmbHVzaF9yZW1vdGVfdGxic19yYW5nZSlcbiAjZW5kaWZcbiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndmEpXG4gS1ZNX1g4Nl9PUChmbHVzaF90bGJfZ3Vlc3QpXG4tS1ZNX1g4Nl9PUCh2Y3B1X3ByZV9ydW4pXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKVxuIEtWTV9YODZfT1AodmNwdV9ydW4pXG4gS1ZNX1g4Nl9PUChoYW5kbGVfZXhpdClcbiBLVk1fWDg2X09QKHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh1cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKVxuIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpXG4gS1ZNX1g4Nl9PUChnZXRfaW50ZXJydXB0X3NoYWRvdylcbiBLVk1fWDg2X09QKHBhdGNoX2h5cGVyY2FsbClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggN2EyNTg4MzE2MTZmYS4uMjgzODQ3NjE5ZmY4OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTg2LDEzICYjNDM7MTU4NiwxNSBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0ICovXG4gXHR2b2lkICgqZmx1c2hfdGxiX2d1ZXN0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuLVx0aW50ICgqdmNwdV9wcmVfcnVuKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztcdGJvb2wgKCp2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gKCp2Y3B1X3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgdTY0IHJ1bl9mbGFncyk7XG4gXHRpbnQgKCpoYW5kbGVfZXhpdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBleGl0X2Zhc3RwYXRoKTtcbiBcdGludCAoKnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXHR2b2lkICgqdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztcdGJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztcbiBcdHZvaWQgKCpzZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWFzayk7XG4gXHR1MzIgKCpnZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCpwYXRjaF9oeXBlcmNhbGwpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc21tLmMgYi9hcmNoL3g4Ni9rdm0vc21tLmNcbmluZGV4IGE0NDY0ODdiZGQ1Y2YuLjY1NmEzOGRhZDdlN2EgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zbW0uY1xuQEAgLTY0OSw2ICYjNDM7NjQ5LDEwIEBAIGludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4gI2VuZGlmXG4gXHRcdHJldCA9IHJzbV9sb2FkX3N0YXRlXzMyKGN0eHQsIFx1MDAyNnNtcmFtLnNtcmFtMzIpO1xuIFxuJiM0MztcdGlmIChyZXQgPT0gWDg2RU1VTF9DT05USU5VRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAga3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKVxuJiM0MztcdFx0cmV0ID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIFJTTSBmYWlscyBhbmQgdHJpZ2dlcnMgc2h1dGRvd24sIGFyY2hpdGVjdHVyYWxseSB0aGUgc2h1dGRvd25cbiBcdCAqIG9jY3VycyAqYmVmb3JlKiB0aGUgdHJhbnNpdGlvbiB0byBndWVzdCBtb2RlLiAgQnV0IGR1ZSB0byBLVk0mIzM5O3NcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggOTBhMDhkMzZkODQzZC4uZmNiNDFkZmRlNGMwMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0zNTU2LDYgJiM0MzszNTU2LDExIEBAIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRfX3Nldl9lc191bm1hcF9naGNiKHN2bSk7XG4gfVxuIFxuJiM0Mztib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0b19rdm1fc2V2X2luZm8odmNwdS1cdTAwM2Vrdm0pLVx1MDAzZW5lZWRfaW5pdDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgcHJlX3Nldl9ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4ge1xuIFx0c3RydWN0IHN2bV9jcHVfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcdTAwMjZzdm1fZGF0YSwgY3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggYzFlNmQ2MjUxMmI5NS4uOWQ2MDdiOThiZDA2NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC00NDAwLDE2ICYjNDM7NDQwMCw2IEBAIHN0YXRpYyB2b2lkIHN2bV9jYW5jZWxfaW5qZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHZjcHUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHN2bV92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4tXHRpZiAodG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLSNlbmRpZlxuLVxuLVx0cmV0dXJuIDE7XG4tfVxuLVxuIHN0YXRpYyBmYXN0cGF0aF90IHN2bV9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbkBAIC01Mzc2LDcgJiM0Mzs1MzY2LDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLFxuIFx0LmZsdXNoX3RsYl9ndWVzdCA9IHN2bV9mbHVzaF90bGJfZ3Vlc3QsXG4gXG4tXHQudmNwdV9wcmVfcnVuID0gc3ZtX3ZjcHVfcHJlX3J1bixcbiBcdC52Y3B1X3J1biA9IHN2bV92Y3B1X3J1bixcbiBcdC5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gc3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG5AQCAtNTQzNCw2ICYjNDM7NTQyMyw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbiYjNDM7XHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uLFxuIFx0LmRldl9nZXRfYXR0ciA9IHNldl9kZXZfZ2V0X2F0dHIsXG4gXHQubWVtX2VuY19pb2N0bCA9IHNldl9tZW1fZW5jX2lvY3RsLFxuIFx0Lm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCBhMzI3YmY3NTFlY2Q1Li42NmI0NGI1NDYwOGU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTk3OSw2ICYjNDM7OTc5LDcgQEAgdm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVcbiB2b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4mIzQzO2Jvb2wgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncCk7XG4gaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX2VuY19yZWdpb24gKnJhbmdlKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCAwNGY5ODZlM2Q0MzlhLi4wZmYzMjMwZmQ5NWU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMTQwLDEyICYjNDM7MTQwLDEwIEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHZteF92Y3B1X3B1dCh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGludCB2dF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0MztzdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbi1cdFx0cmV0dXJuIHRkeF92Y3B1X3ByZV9ydW4odmNwdSk7XG4tXG4tXHRyZXR1cm4gdm14X3ZjcHVfcHJlX3J1bih2Y3B1KTtcbiYjNDM7XHRyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24odmNwdSk7XG4gfVxuIFxuIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbkBAIC0xNjUsNiAmIzQzOzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKHRvX3Z0KHZjcHUpLVx1MDAzZWVtdWxhdGlvbl9yZXF1aXJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB2dF9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiB7XG4gXHRpZiAodW5saWtlbHkoaXNfdGRfdmNwdSh2Y3B1KSkpXG5AQCAtOTM5LDExICYjNDM7OTQ3LDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuZmx1c2hfdGxiX2d2YSA9IHZ0X29wKGZsdXNoX3RsYl9ndmEpLFxuIFx0LmZsdXNoX3RsYl9ndWVzdCA9IHZ0X29wKGZsdXNoX3RsYl9ndWVzdCksXG4gXG4tXHQudmNwdV9wcmVfcnVuID0gdnRfb3AodmNwdV9wcmVfcnVuKSxcbiYjNDM7XHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuIFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuIFx0LmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLFxuIFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiBcdC51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuJiM0MztcdC51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksXG4gXHQuc2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChzZXRfaW50ZXJydXB0X3NoYWRvdyksXG4gXHQuZ2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChnZXRfaW50ZXJydXB0X3NoYWRvdyksXG4gXHQucGF0Y2hfaHlwZXJjYWxsID0gdnRfb3AocGF0Y2hfaHlwZXJjYWxsKSxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggZDFhZjBhNzUyZTk3ZS4uYjI3MmMyMDU4NmE3NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC04OTcsMTMgJiM0Mzs4OTcsMTAgQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfVU5JTklUSUFMSVpFRDtcbiB9XG4gXG4taW50IHRkeF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mztib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAodW5saWtlbHkodG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbi1cdFx0ICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0cmV0dXJuIDE7XG4mIzQzO1x0cmV0dXJuIHRvX3RkeCh2Y3B1KS1cdTAwM2VzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8XG4mIzQzO1x0ICAgICAgIHRvX2t2bV90ZHgodmNwdS1cdTAwM2Vrdm0pLVx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTRiOWFjN2ZlZDlmMC4uNzYxNjBhZGY4Mjk3MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MDM1LDcgJiM0Mzs2MDM1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJiMzOTt0IGZhaXRoZnVsbHkgZW11bGF0ZSB0aGVcbiAgKiBjdXJyZW50IHZDUFUgc3RhdGUuXG4gICovXG4tc3RhdGljIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mztib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcbkBAIC02MTEwLDE2ICYjNDM7NjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHtcbi1cdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbi19XG4tXG4gLypcbiAgKiBJbmRpY2F0ZSBhIGJ1c3ktd2FpdGluZyB2Y3B1IGluIHNwaW5sb2NrLiBXZSBkbyBub3QgZW5hYmxlIHRoZSBQQVVTRVxuICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDQwOTg1ODA3NDI0NjIuLmNkYjM4ZDk0MGNmYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0yMSw3ICYjNDM7MjEsNiBAQCBpbnQgdm14X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTtcbiB2b2lkIHZteF92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZteF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XG4gdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XG5AQCAtMzEsNiAmIzQzOzMwLDcgQEAgaW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCk7XG4gdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBpbnQgdm14X3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKTtcbkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcbiB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbi1pbnQgdGR4X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mztib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcbiB2b2lkIHRkeF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCAwZjFhODI5MDMyYzA2Li5kOTRiNTkxNDBjNDUyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC04ODY3LDcgJiM0Mzs4ODY3LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7XG4mIzQzO1x0aWYgKGt2bV94ODZfY2FsbCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSh2Y3B1KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKSB7XG4mIzQzO1x0XHRrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0KHZjcHUpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMTtcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuaW5kZXggNTc4MjgzODkzYWIzNy4uYzgzNzkxMjRiMzE3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwcm9jZXNzb3IuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzbW0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZteC5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbkBAIC05LDkgJiM0MzsxMCwyMyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gXG4tI2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDIwMDBcbiYjNDM7I2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDgwXG4gXG4tc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICYjNDM7IDB4ZmUwMC4gIFRSIHN0YXJ0cyBhdFxuJiM0MzsgKiBvZmZzZXQgMHhmZTkwLCBhbmQgYXR0cmlidXRlcyBpcyB0aGUgc2Vjb25kIDE2LWJpdCBmaWVsZCBpbiB0aGUgZGVzY3JpcHRvci5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVFx0MHhmZTkyXG4mIzQzOyNkZWZpbmUgU01SQU1fR1BBXHRcdFx0MHgxMDAwMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTTUkgaGFuZGxlciB0aGF0IHJ1bnMgaW4gMTYtYml0IFJlYWwgTW9kZS4gIFN5bmNzIHdpdGggTDAgdmlhIHBvcnQgSS9PLCB0aGVuXG4mIzQzOyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4mIzQzO1x0MHhlNCwgQVJCSVRSQVJZX0lPX1BPUlQsXHQvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqL1xuJiM0MztcdDB4MGYsIDB4YWEsXHRcdFx0LyogUlNNICovXG4mIzQzO307XG4gXG4gc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIHtcbkBAIC0xOSw4ICYjNDM7MzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXG4gXHQgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW5cbiBcdCAqIGFyYml0cmFyeSBwb3J0LlxuIFx0ICovXG4tXHRhc20gdm9sYXRpbGUoXCYjMzQ7aW5iICUlZHgsICUlYWxcJiMzNDtcbi1cdFx0ICAgICA6IDogW3BvcnRdIFwmIzM0O2RcJiMzNDsgKEFSQklUUkFSWV9JT19QT1JUKSA6IFwmIzM0O3JheFwmIzM0Oyk7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luYiAkXCYjMzQ7IF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSBcJiMzNDssICUlYWxcJiMzNDtcbiYjNDM7XHRcdCAgICAgOjo6IFwmIzM0O3JheFwmIzM0Oyk7XG4mIzQzO1x0R1VFU1RfRkFJTChcJiMzNDtMMiByZXN1bWVkIGFmdGVyIHN0dWZmaW5nIGludmFsaWQgZ3Vlc3Qgc3RhdGVcJiMzNDspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbkBAIC00NiwzNSAmIzQzOzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3J1bl90b19pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgd2FudF9sMilcbiB7XG4tXHRndmFfdCB2bXhfcGFnZXNfZ3ZhO1xuLVx0c3RydWN0IGt2bV9zcmVncyBzcmVncztcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHN0cnVjdCBrdm1fcnVuICpydW47XG4tXHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1x0c3RydWN0IGt2bV9ydW4gKnJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuIFxuLVx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpO1xuJiM0MztcdHZjcHVfcnVuKHZjcHUpO1xuIFxuLVx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiYjNDM7XHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xuIFxuLVx0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXG4tXHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2dm14X3BhZ2VzX2d2YSk7XG4tXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIHZteF9wYWdlc19ndmEpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJ1bi1cdTAwM2Vpby5wb3J0ID09IEFSQklUUkFSWV9JT19QT1JUIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICghIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpID09IHdhbnRfbDIgIHx8XG4mIzQzO1x0XHQgICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX1g4Nl9HVUVTVF9NT0RFKSksXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgSU4gZnJvbSBwb3J0IDB4JXggZnJvbSBMJXUsIGdvdCBwb3J0IDB4JXggZnJvbSBMJXVcJiMzNDssXG4mIzQzO1x0XHQgICAgQVJCSVRSQVJZX0lPX1BPUlQsIDEgJiM0Mzsgd2FudF9sMiwgcnVuLVx1MDAzZWlvLnBvcnQsXG4mIzQzO1x0XHQgICAgMSAmIzQzOyAhIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTtcbiYjNDM7fVxuIFxuLVx0dmNwdV9ydW4odmNwdSk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bV9jcmVhdGVfYW5kX3J1bl9sMihzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiBcbi1cdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuJiM0MztcdC8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzICh2bXhfcGFnZXMpLiAqL1xuJiM0MztcdHZjcHVfYWxsb2Nfdm14KHZtLCBcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcbiYjNDM7XHR2Y3B1X2FyZ3Nfc2V0KCp2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cbiBcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXG4gXHQgKi9cbi1cdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4mIzQzO1x0dmNwdV9ydW5fdG9faW8oKnZjcHUsIHRydWUpO1xuIFxuLVx0VEVTVF9BU1NFUlQocnVuLVx1MDAzZWlvLnBvcnQgPT0gQVJCSVRSQVJZX0lPX1BPUlQsXG4tXHRcdCAgICBcJiMzNDtFeHBlY3RlZCBJTiBmcm9tIHBvcnQgJWQgZnJvbSBMMiwgZ290IHBvcnQgJWRcJiMzNDssXG4tXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQpO1xuJiM0MztcdHJldHVybiB2bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXHUwMDI2dmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogU3R1ZmYgaW52YWxpZCBndWVzdCBzdGF0ZSBmb3IgTDIgYnkgbWFraW5nIFRSIHVudXNhYmxlLiAgVGhlIG5leHRcbkBAIC05Niw0ICYjNDM7MTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRkZWZhdWx0OlxuIFx0XHRURVNUX0ZBSUwoXCYjMzQ7VW5leHBlY3RlZCB1Y2FsbDogJWx1XCYjMzQ7LCB1Yy5jbWQpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1MTYgKnRyX2F0dHJzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X1NNTSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXHUwMDI2dmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW5qZWN0IFNNSSB3aGlsZSBMMiBpcyBhY3RpdmUsIHJ1biB0aGUgdkNQVSB0byBnZXQgSS9PIGV4aXQgZnJvbSBMMSxcbiYjNDM7XHQgKiB0aGVuIHN0dWZmIFRSIGluIHRoZSBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc28gdGhhdCBSU00gcmVzdG9yZXNcbiYjNDM7XHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNldHVwX3NtcmFtKHZtLCB2Y3B1LCBTTVJBTV9HUEEsIHNtaV9oYW5kbGVyLCBzaXplb2Yoc21pX2hhbmRsZXIpKTtcbiYjNDM7XHRpbmplY3Rfc21pKHZjcHUpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bl90b19pbyh2Y3B1LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBpbiBTTVJBTSB0byBtYWtlIFRSIHVudXNhYmxlLiAqL1xuJiM0MztcdHRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgJiM0MzsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XG4mIzQzO1x0KnRyX2F0dHJzIFx1MDAyNj0gfkJJVCg3KTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9ydW4odmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIFJTTSwgTDEgZ2V0cyB0aGUgU0hVVERPV04gYmVjYXVzZSBSU00gaXMgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWRcbiYjNDM7XHQgKiB0byByZXN1bHQgaW4gc2h1dGRvd24gaWYgdGhlIENQVSBkZXRlY3RzIGludmFsaWQgc3RhdGUgaW4gU01SQU0uXG4mIzQzO1x0ICovXG4mIzQzO1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX1NIVVRET1dOKTtcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4mIzQzO1xuJiM0MztcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZSgpO1xuJiM0MztcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9TTU0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7WDg2X01DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtdWxhdG9yX2xlYXZlX3NtbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBLVk0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgd2hlbiBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIEl0IG1vZGlmaWVzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIGNoZWNrIGlmIHVuaGFuZGxlYWJsZSBlbXVsYXRpb24gaXMgcmVxdWlyZWQsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgdmNwdV9wcmVfcnVuYCBvcCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHRvIHN1cHBvcnQgdGhpcyBjaGVjay4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gdGVzdCB0aGlzIG5ldyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhYjg3YTgzNzg2ZDMzNWE2YjI3ZDVkZDI1YjhmNTIxZWNkNGJjNzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDAyOjU4OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKaW5kZXggNWNiMTMyZWNhM2MzNS4uZTIxM2M5YWUzZTMwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCkBAIC02MywxMSAmIzQzOzYzLDEyIEBAIEtWTV9YODZfT1BfT1BUSU9OQUwoZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpCiAjZW5kaWYKIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d2YSkKIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d1ZXN0KQotS1ZNX1g4Nl9PUCh2Y3B1X3ByZV9ydW4pCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pCiBLVk1fWDg2X09QKHZjcHVfcnVuKQogS1ZNX1g4Nl9PUChoYW5kbGVfZXhpdCkKIEtWTV9YODZfT1Aoc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikKIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKQogS1ZNX1g4Nl9PUChzZXRfaW50ZXJydXB0X3NoYWRvdykKIEtWTV9YODZfT1AoZ2V0X2ludGVycnVwdF9zaGFkb3cpCiBLVk1fWDg2X09QKHBhdGNoX2h5cGVyY2FsbCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDdhMjU4ODMxNjE2ZmEuLjI4Mzg0NzYxOWZmODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTU4NiwxMyAmIzQzOzE1ODYsMTUgQEAgc3RydWN0IGt2bV94ODZfb3BzIHsKIAkgKi8KIAl2b2lkICgqZmx1c2hfdGxiX2d1ZXN0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi0JaW50ICgqdmNwdV9wcmVfcnVuKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzOwlib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAllbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiAoKnZjcHVfcnVuKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCQkgIHU2NCBydW5fZmxhZ3MpOwogCWludCAoKmhhbmRsZV9leGl0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCWVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGV4aXRfZmFzdHBhdGgpOwogCWludCAoKnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJdm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0MzsJYm9vbCAoKnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7CiAJdm9pZCAoKnNldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKTsKIAl1MzIgKCpnZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAl2b2lkICgqcGF0Y2hfaHlwZXJjYWxsKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc21tLmMgYi9hcmNoL3g4Ni9rdm0vc21tLmMKaW5kZXggYTQ0NjQ4N2JkZDVjZi4uNjU2YTM4ZGFkN2U3YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3NtbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zbW0uYwpAQCAtNjQ5LDYgJiM0Mzs2NDksMTAgQEAgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKICNlbmRpZgogCQlyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCAmYW1wO3NtcmFtLnNtcmFtMzIpOwogCiYjNDM7CWlmIChyZXQgPT0gWDg2RU1VTF9DT05USU5VRSAmYW1wOyZhbXA7CiYjNDM7CSAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpCiYjNDM7CQlyZXQgPSBYODZFTVVMX1VOSEFORExFQUJMRTsKJiM0MzsKIAkvKgogCSAqIElmIFJTTSBmYWlscyBhbmQgdHJpZ2dlcnMgc2h1dGRvd24sIGFyY2hpdGVjdHVyYWxseSB0aGUgc2h1dGRvd24KIAkgKiBvY2N1cnMgKmJlZm9yZSogdGhlIHRyYW5zaXRpb24gdG8gZ3Vlc3QgbW9kZS4gIEJ1dCBkdWUgdG8gS1ZNJiMzOTtzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA5MGEwOGQzNmQ4NDNkLi5mY2I0MWRmZGU0YzAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTM1NTYsNiAmIzQzOzM1NTYsMTEgQEAgdm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlfX3Nldl9lc191bm1hcF9naGNiKHN2bSk7CiB9CiAKJiM0Mztib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0b19rdm1fc2V2X2luZm8odmNwdS0mZ3Q7a3ZtKS0mZ3Q7bmVlZF9pbml0OwomIzQzO30KJiM0MzsKIGludCBwcmVfc2V2X3J1bihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKCZhbXA7c3ZtX2RhdGEsIGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCBjMWU2ZDYyNTEyYjk1Li45ZDYwN2I5OGJkMDY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTQ0MDAsMTYgJiM0Mzs0NDAwLDYgQEAgc3RhdGljIHZvaWQgc3ZtX2NhbmNlbF9pbmplY3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHZjcHUpOwogfQogCi1zdGF0aWMgaW50IHN2bV92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVgotCWlmICh0b19rdm1fc2V2X2luZm8odmNwdS0mZ3Q7a3ZtKS0mZ3Q7bmVlZF9pbml0KQotCQlyZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBmYXN0cGF0aF90IHN2bV9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKQEAgLTUzNzYsNyAmIzQzOzUzNjYsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLAogCS5mbHVzaF90bGJfZ3Vlc3QgPSBzdm1fZmx1c2hfdGxiX2d1ZXN0LAogCi0JLnZjcHVfcHJlX3J1biA9IHN2bV92Y3B1X3ByZV9ydW4sCiAJLnZjcHVfcnVuID0gc3ZtX3ZjcHVfcnVuLAogCS5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCwKIAkuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHN2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLApAQCAtNTQzNCw2ICYjNDM7NTQyMyw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0gewogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVYKJiM0MzsJLnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiwKIAkuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0ciwKIAkubWVtX2VuY19pb2N0bCA9IHNldl9tZW1fZW5jX2lvY3RsLAogCS5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCmluZGV4IGEzMjdiZjc1MWVjZDUuLjY2YjQ0YjU0NjA4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtOTc5LDYgJiM0Mzs5NzksNyBAQCB2b2lkIHNldl9lc19wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHNldl9lc19zYXZlX2FyZQogdm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CiAKICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVYKJiM0Mztib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncCk7CiBpbnQgc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQlzdHJ1Y3Qga3ZtX2VuY19yZWdpb24gKnJhbmdlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKaW5kZXggMDRmOTg2ZTNkNDM5YS4uMGZmMzIzMGZkOTVlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKQEAgLTE0MCwxMiAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdm14X3ZjcHVfcHV0KHZjcHUpOwogfQogCi1zdGF0aWMgaW50IHZ0X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7c3RhdGljIGJvb2wgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaWYgKGlzX3RkX3ZjcHUodmNwdSkpCi0JCXJldHVybiB0ZHhfdmNwdV9wcmVfcnVuKHZjcHUpOwotCi0JcmV0dXJuIHZteF92Y3B1X3ByZV9ydW4odmNwdSk7CiYjNDM7CXJldHVybiBpc190ZF92Y3B1KHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpOwogfQogCiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpCkBAIC0xNjUsNiAmIzQzOzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKGlzX3RkX3ZjcHUodmNwdSkpIHsKJiM0MzsJCVdBUk5fT05fT05DRSh0b192dCh2Y3B1KS0mZ3Q7ZW11bGF0aW9uX3JlcXVpcmVkKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB2dF9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbykKIHsKIAlpZiAodW5saWtlbHkoaXNfdGRfdmNwdSh2Y3B1KSkpCkBAIC05MzksMTEgJiM0Mzs5NDcsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkuZmx1c2hfdGxiX2d2YSA9IHZ0X29wKGZsdXNoX3RsYl9ndmEpLAogCS5mbHVzaF90bGJfZ3Vlc3QgPSB2dF9vcChmbHVzaF90bGJfZ3Vlc3QpLAogCi0JLnZjcHVfcHJlX3J1biA9IHZ0X29wKHZjcHVfcHJlX3J1biksCiYjNDM7CS52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gdnRfb3BfdGR4X29ubHkodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiksCiAJLnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLAogCS5oYW5kbGVfZXhpdCA9IHZ0X29wKGhhbmRsZV9leGl0KSwKIAkuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLAomIzQzOwkudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLAogCS5zZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKHNldF9pbnRlcnJ1cHRfc2hhZG93KSwKIAkuZ2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChnZXRfaW50ZXJydXB0X3NoYWRvdyksCiAJLnBhdGNoX2h5cGVyY2FsbCA9IHZ0X29wKHBhdGNoX2h5cGVyY2FsbCksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwppbmRleCBkMWFmMGE3NTJlOTdlLi5iMjcyYzIwNTg2YTc0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTg5NywxMyAmIzQzOzg5NywxMCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXRkeC0mZ3Q7c3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7CiB9CiAKLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mztib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAodW5saWtlbHkodG9fdGR4KHZjcHUpLSZndDtzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8Ci0JCSAgICAgdG9fa3ZtX3RkeCh2Y3B1LSZndDtrdm0pLSZndDtzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDE7CiYjNDM7CXJldHVybiB0b190ZHgodmNwdSktJmd0O3N0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHwKJiM0MzsJICAgICAgIHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7c3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEU7CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKaW5kZXggZTRiOWFjN2ZlZDlmMC4uNzYxNjBhZGY4Mjk3MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC02MDM1LDcgJiM0Mzs2MDM1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAgKiB3aXRoIHVuc3Jlc3RyaWN0ZWQgZ3Vlc3QgbW9kZSBkaXNhYmxlZCkgYW5kIEtWTSBjYW4mIzM5O3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZQogICogY3VycmVudCB2Q1BVIHN0YXRlLgogICovCi1zdGF0aWMgYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7Ym9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKQEAgLTYxMTAsMTYgJiM0Mzs2MTEwLDYgQEAgc3RhdGljIGludCBoYW5kbGVfaW52YWxpZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIDE7CiB9CiAKLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHsKLQkJa3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KIC8qCiAgKiBJbmRpY2F0ZSBhIGJ1c3ktd2FpdGluZyB2Y3B1IGluIHNwaW5sb2NrLiBXZSBkbyBub3QgZW5hYmxlIHRoZSBQQVVTRQogICogZXhpdGluZywgc28gb25seSBnZXQgaGVyZSBvbiBjcHUgd2l0aCBQQVVTRS1Mb29wLUV4aXRpbmcuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCmluZGV4IDQwOTg1ODA3NDI0NjIuLmNkYjM4ZDk0MGNmYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCkBAIC0yMSw3ICYjNDM7MjEsNiBAQCBpbnQgdm14X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTsKIGludCB2bXhfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtKTsKIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBmYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpOwogdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTsKQEAgLTMxLDYgJiM0MzszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpOwogdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCB2bXhfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pOwogI2lmZGVmIENPTkZJR19LVk1fU01NCiBpbnQgdm14X3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKTsKQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB0ZHhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7CiB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpOwotaW50IHRkeF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mztib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpOwogdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtODg2Nyw3ICYjNDM7ODg2NywxNSBAQCBzdGF0aWMgaW50IGt2bV94ODZfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgICAgIWt2bV9hcGljX2luaXRfc2lwaV9hbGxvd2VkKHZjcHUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBrdm1feDg2X2NhbGwodmNwdV9wcmVfcnVuKSh2Y3B1KTsKJiM0MzsJaWYgKGt2bV94ODZfY2FsbCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSh2Y3B1KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoa3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKSB7CiYjNDM7CQlrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0KHZjcHUpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYwppbmRleCA1NzgyODM4OTNhYjM3Li5jODM3OTEyNGIzMTcyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbW0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZteC5oJiMzNDsKIAogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwpAQCAtOSw5ICYjNDM7MTAsMjMgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAKLSNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHgyMDAwCiYjNDM7I2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDgwCiAKLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsvKgomIzQzOyAqIFRoZSA2NC1iaXQgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHN0YXJ0cyBhdCBTTUJBU0UgJiM0MzsgMHhmZTAwLiAgVFIgc3RhcnRzIGF0CiYjNDM7ICogb2Zmc2V0IDB4ZmU5MCwgYW5kIGF0dHJpYnV0ZXMgaXMgdGhlIHNlY29uZCAxNi1iaXQgZmllbGQgaW4gdGhlIGRlc2NyaXB0b3IuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUCTB4ZmU5MgomIzQzOyNkZWZpbmUgU01SQU1fR1BBCQkJMHgxMDAwMDAwCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTTUkgaGFuZGxlciB0aGF0IHJ1bnMgaW4gMTYtYml0IFJlYWwgTW9kZS4gIFN5bmNzIHdpdGggTDAgdmlhIHBvcnQgSS9PLCB0aGVuCiYjNDM7ICogZXhlY3V0ZXMgUlNNIHRvIHRyaWdnZXIgdGhlIGNvbnN1bXB0aW9uIG9mIGludmFsaWQgZ3Vlc3Qgc3RhdGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7CiYjNDM7CTB4ZTQsIEFSQklUUkFSWV9JT19QT1JULAkvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqLwomIzQzOwkweDBmLCAweGFhLAkJCS8qIFJTTSAqLwomIzQzO307CiAKIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZCkKIHsKQEAgLTE5LDggJiM0MzszNCw5IEBAIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZCkKIAkgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW4KIAkgKiBhcmJpdHJhcnkgcG9ydC4KIAkgKi8KLQlhc20gdm9sYXRpbGUoJiMzNDtpbmIgJSVkeCwgJSVhbCYjMzQ7Ci0JCSAgICAgOiA6IFtwb3J0XSAmIzM0O2QmIzM0OyAoQVJCSVRSQVJZX0lPX1BPUlQpIDogJiMzNDtyYXgmIzM0Oyk7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O2luYiAkJiMzNDsgX19zdHJpbmdpZnkoQVJCSVRSQVJZX0lPX1BPUlQpICYjMzQ7LCAlJWFsJiMzNDsKJiM0MzsJCSAgICAgOjo6ICYjMzQ7cmF4JiMzNDspOwomIzQzOwlHVUVTVF9GQUlMKCYjMzQ7TDIgcmVzdW1lZCBhZnRlciBzdHVmZmluZyBpbnZhbGlkIGd1ZXN0IHN0YXRlJiMzNDspOwogfQogCiBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKQEAgLTQ2LDM1ICYjNDM7NjIsNTAgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3N0YXRpYyB2b2lkIHZjcHVfcnVuX3RvX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YW50X2wyKQogewotCWd2YV90IHZteF9wYWdlc19ndmE7Ci0Jc3RydWN0IGt2bV9zcmVncyBzcmVnczsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV9ydW4gKnJ1bjsKLQlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LSZndDtydW47CiAKLQlURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7CiYjNDM7CXZjcHVfcnVuKHZjcHUpOwogCi0Jdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGwxX2d1ZXN0X2NvZGUpOwomIzQzOwlURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pOwogCi0JLyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovCi0JdmNwdV9hbGxvY192bXgodm0sICZhbXA7dm14X3BhZ2VzX2d2YSk7Ci0JdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTsKJiM0MzsJVEVTVF9BU1NFUlQocnVuLSZndDtpby5wb3J0ID09IEFSQklUUkFSWV9JT19QT1JUICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoISEocnVuLSZndDtmbGFncyAmYW1wOyBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSA9PSB3YW50X2wyICB8fAomIzQzOwkJICAgICAha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfR1VFU1RfTU9ERSkpLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgSU4gZnJvbSBwb3J0IDB4JXggZnJvbSBMJXUsIGdvdCBwb3J0IDB4JXggZnJvbSBMJXUmIzM0OywKJiM0MzsJCSAgICBBUkJJVFJBUllfSU9fUE9SVCwgMSAmIzQzOyB3YW50X2wyLCBydW4tJmd0O2lvLnBvcnQsCiYjNDM7CQkgICAgMSAmIzQzOyAhIShydW4tJmd0O2ZsYWdzICZhbXA7IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTsKJiM0Mzt9CiAKLQl2Y3B1X3J1bih2Y3B1KTsKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqdm1fY3JlYXRlX2FuZF9ydW5fbDIoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSkKJiM0Mzt7CiYjNDM7CWd2YV90IHZteF9wYWdlc19ndmE7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGwxX2d1ZXN0X2NvZGUpOwogCi0JcnVuID0gdmNwdS0mZ3Q7cnVuOwomIzQzOwkvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi8KJiM0MzsJdmNwdV9hbGxvY192bXgodm0sICZhbXA7dm14X3BhZ2VzX2d2YSk7CiYjNDM7CXZjcHVfYXJnc19zZXQoKnZjcHUsIDEsIHZteF9wYWdlc19ndmEpOwogCiAJLyoKIAkgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi4KIAkgKiBSdW5uaW5nIEwxIHNob3VsZCBsYXVuY2ggTDIgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIGV4aXQgdG8gdXNlcnNwYWNlLgogCSAqLwotCVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7CiYjNDM7CXZjcHVfcnVuX3RvX2lvKCp2Y3B1LCB0cnVlKTsKIAotCVRFU1RfQVNTRVJUKHJ1bi0mZ3Q7aW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCwKLQkJICAgICYjMzQ7RXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkJiMzNDssCi0JCSAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLSZndDtpby5wb3J0KTsKJiM0MzsJcmV0dXJuIHZtOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMigmYW1wO3ZjcHUpOwogCiAJLyoKIAkgKiBTdHVmZiBpbnZhbGlkIGd1ZXN0IHN0YXRlIGZvciBMMiBieSBtYWtpbmcgVFIgdW51c2FibGUuICBUaGUgbmV4dApAQCAtOTYsNCAmIzQzOzEyNyw0OSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWRlZmF1bHQ6CiAJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgdWNhbGw6ICVsdSYjMzQ7LCB1Yy5jbWQpOwogCX0KJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGVfcnNtKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwl1MTYgKnRyX2F0dHJzOwomIzQzOwomIzQzOwlpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X1NNTSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoJmFtcDt2Y3B1KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5qZWN0IFNNSSB3aGlsZSBMMiBpcyBhY3RpdmUsIHJ1biB0aGUgdkNQVSB0byBnZXQgSS9PIGV4aXQgZnJvbSBMMSwKJiM0MzsJICogdGhlbiBzdHVmZiBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHNvIHRoYXQgUlNNIHJlc3RvcmVzCiYjNDM7CSAqIGludmFsaWQgTDIgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlzZXR1cF9zbXJhbSh2bSwgdmNwdSwgU01SQU1fR1BBLCBzbWlfaGFuZGxlciwgc2l6ZW9mKHNtaV9oYW5kbGVyKSk7CiYjNDM7CWluamVjdF9zbWkodmNwdSk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuX3RvX2lvKHZjcHUsIGZhbHNlKTsKJiM0MzsKJiM0MzsJLyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovCiYjNDM7CXRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgJiM0MzsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7CiYjNDM7CSp0cl9hdHRycyAmYW1wOz0gfkJJVCg3KTsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvciBSU00sIEwxIGdldHMgdGhlIFNIVVRET1dOIGJlY2F1c2UgUlNNIGlzIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkCiYjNDM7CSAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS4KJiM0MzsJICovCiYjNDM7CVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9TSFVURE9XTik7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTsKJiM0MzsKJiM0MzsJdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKCk7CiYjNDM7CXRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkxOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSB4ODYgUGF0Y2g6IEZvY3VzIG9uIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHR3ZWFrcyB0aGUgS1ZNIHg4NiBvcGVyYXRpb25zLiBJdCYjMzk7cyBhZGRpbmcgYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgdG8gdGhlIGBzdHJ1Y3Qga3ZtX3g4Nl9vcHNgLiBJIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyB0b3VjaGluZyBzb21lIGNvcmUgYXJlYXM6IGBhcmNoL3g4Ni9rdm0vc21tLmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCwgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AsIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBLVk0gZGVhbHMgd2l0aCB1bmhhbmRsZWFibGUgZW11bGF0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZXhpdGluZyBTTU0gdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIFNwZWNpZmljYWxseSwgaWYgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGlzIHNldCwgaXQgd2lsbCByZXR1cm4gYFg4NkVNVUxfVU5IQU5ETEVBQkxFYCB3aXRoaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyByZWZhY3RvcmluZyB0aGUgYHZjcHVfcHJlX3J1bmAgbG9naWMsIHNwbGl0dGluZyBpdCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgdGhhdCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgZmxhZy4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgY29kZSBldmVuIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbD8gR2l2ZW4gdGhlIGZpbGUgY2hhbmdlcywgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzLiBJdCYjMzk7cyBtb2RpZnlpbmcgY29yZSBLVk0geDg2IGxvZ2ljLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhY3RpdmUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNpbmNlIEtWTSBpcyB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yLiBXZSBrbm93IHN5emthbGxlciBpcyBnb2luZyB0byBoaXQgS1ZNIGhhcmQgd2l0aCB0aGUgYC9kZXYva3ZtYCBpbnRlcmZhY2UsIHNvIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGVzdGVkIGZvciBzdXJlLgoKTm93LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBwYXJ0cyB0aGF0IGFyZSBuZXcgb3IgY2hhbmdlZDoKCiogICBgZW11bGF0b3JfbGVhdmVfc21tYCAobW9kaWZpZWQpCiogICBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gCiogICBgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAKKiAgIGB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYAoqICAgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYAoqICAgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYAoqICAgYGt2bV94ODZfdmNwdV9wcmVfcnVuYCAobW9kaWZpZWQpCgpgZW11bGF0b3JfbGVhdmVfc21tYCBqdW1wcyBvdXQgaW1tZWRpYXRlbHkgYXMgYSBnb29kIHRhcmdldC4gSSBrbm93IHRoYXQmIzM5O3MgY2FsbGVkIHdoZW4gZW11bGF0aW5nIHRoZSBSU00gaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIG9mdGVuIGEgc291cmNlIG9mIGJ1Z3MgaW4gaHlwZXJ2aXNvcnMuIFRoZW4gSSBub3RlIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAgaXMgYSBnb29kIG9uZSwgYnV0IHdhaXQsIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLi4uIGFoLCBubyB3YWl0LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGNhbGxzIGl0LCB3aGljaCBpcyB0aGUgbWFpbiBlbnRyeSBmb3IgdGhlIGBLVk1fUlVOYCBpb2N0bC4gSXQmIzM5O3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4KCk9rYXksIGxldCYjMzk7cyBmb2N1cyBvbiBgZW11bGF0b3JfbGVhdmVfc21tYC4gSSYjMzk7bGwgZGlnIGludG8gaXQgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhbmQgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCB0byBmb2xsb3cgdGhlIHBhdGggYW5kIGNoZWNrIHRoZWlyIHVzYWdlcy4gTm93IGl0JiMzOTtzIHRpbWUgdG8gdGVzdCwgdGVzdCwgdGVzdC4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgdmVyaWZ5IHRoaXMgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW11bGF0b3JfbGVhdmVfc21tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc21tLmM9NTE2PXN0YXRpYyBpbnQgcnNtX2xvYWRfc3RhdGVfNjQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTU3Mi1cbmFyY2gveDg2L2t2bS9zbW0uYzo1NzM6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS9zbW0uYy01NzQte1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaD0xNTg9dm9pZCBlbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9zbW0uaDoxNTk6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XG5hcmNoL3g4Ni9rdm0vc21tLmgtMTYwLXZvaWQgcHJvY2Vzc19zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmg9MTYzPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbmFyY2gveDg2L2t2bS9zbW0uaC0xNjUtLypcbmFyY2gveDg2L2t2bS9zbW0uaDoxNjY6ICogZW11bGF0b3JfbGVhdmVfc21tIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBzbyB0aGVcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjctICogc3R1YiBpcyBkZWZpbmVkIGluIHg4Ni5jLlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc1OS0jaWZuZGVmIENPTkZJR19LVk1fU01NXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS94ODYuYy01NzYxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTg1Ni1cdC5pc19zbW0gICAgICAgICAgICAgID0gZW11bGF0b3JfaXNfc21tLFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4NTc6XHQubGVhdmVfc21tICAgICAgICAgICA9IGVtdWxhdG9yX2xlYXZlX3NtbSxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU4LVx0LnRyaXBsZV9mYXVsdCAgICAgICAgPSBlbXVsYXRvcl90cmlwbGVfZmF1bHQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExODgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21lIEtWTSBjb2RlIGFuZCBub3RpY2luZyBhIHBhdHRlcm4uIEl0IGxvb2tzIGxpa2UgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AgaXMgbm9uLXN0YXRpYywgYnV0IG9ubHkgd2hlbiBgQ09ORklHX0tWTV9TTU1gIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIHN1Z2dlc3RzIGEgc3BlY2lmaWMgcHVycG9zZSByZWxhdGVkIHRvIFNNTSBoYW5kbGluZy4KCk5leHQsIEkgc2VlIHRoYXQgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgaXMgYWxzbyBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyBpdCYjMzk7cyBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZSB3aXRoaW4gdGhlIEtWTSBzeXN0ZW0sIHBlcmhhcHMgdG8gaW5kaWNhdGUgc29tZSBraW5kIG9mIHN0YXRlIG9yIHJlcXVpcmVtZW50IGR1cmluZyBWTVggb3BlcmF0aW9ucy4gVGhlbiB0aGVyZSBhcmUgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgYW5kIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBCb3RoIG9mIHRoZXNlIGFyZSBhbHNvIG5vbi1zdGF0aWMuIFRoZSBuYW1lcyBhcmUgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhleSYjMzk7cmUgZmxhZ3Mgb3IgaW5kaWNhdG9ycyBmb3Igd2hldGhlciBhIFZDUFUgbmVlZHMgc29tZSBpbml0aWFsaXphdGlvbiBzcGVjaWZpYyB0byBURFggb3IgU0VWLgoKR2l2ZW4gdGhlc2Ugb2JzZXJ2YXRpb25zLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEkgd2FudCB0byBjb25maXJtIGhvdyBgQ09ORklHX0tWTV9TTU1gLCBgQ09ORklHX0tWTV9BTURfU0VWYCwgYW5kIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgKGlmIGl0IGV4aXN0cykgYXJlIGRlZmluZWQgYW5kIHJlbGF0ZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBmb3IgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHByb3ZpZGUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlaXIgdXNlIGluIHRoZSB3aWRlciBLVk0gYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fU01NJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNzM9Y29uZmlnIEtWTV9JT0FQSUNcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB2aXJ0dWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IEtWTSBhbmQgQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVik6CgoqKkludmVzdGlnYXRpbmcgQU1EIFNFViBTdXBwb3J0IGluIEtWTSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgdGhlIGBDT05GSUdfS1ZNX0FNRF9TRVZgIG9wdGlvbi4gVGhpcyBpcyB0aGUgY3JpdGljYWwgZmxhZzsgaXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIEtWTSBidWlsZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBBTUQmIzM5O3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbi4gV2l0aG91dCBpdCwgU0VWIGZlYXR1cmVzIGFyZSBzaW1wbHkgbm90IGF2YWlsYWJsZSwgYW5kIGFueSBhdHRlbXB0IHRvIHV0aWxpemUgdGhlbSB3aWxsIGZhaWwsIG9yIHdvcnNlLCBzaWxlbnRseSBkZWdyYWRlIHNlY3VyaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZDsgaXTigJlzIGZ1bmRhbWVudGFsIHRvIHV0aWxpemluZyBTRVYmIzM5O3Mgc2VjdXJpdHkgYmVuZWZpdHMg4oCTIHByb3RlY3RpbmcgVk0gZGF0YSBldmVuIGZyb20gdGhlIGh5cGVydmlzb3IgaXRzZWxmLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGlmIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIGluIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEludGVsIFREWCBTdXBwb3J0KioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHRoYXQgc3VwcG9ydHMgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgdGhlIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdvdWxkIGJlIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBpbmRpY2F0b3IuIEkgbWlnaHQgYWxzbyBleHBhbmQgdGhpcyBzZWFyY2ggdG8gaW5jbHVkZSByZWxhdGVkLCB0aG91Z2ggcG9zc2libHkgbGVzcyBzcGVjaWZpYywgY29uZmlndXJhdGlvbiBmbGFncy4gVGhpcyBpbW1lZGlhdGUgY2hlY2sgd2lsbCBzYXZlIGEgbG90IG9mIHRpbWUgYnkgdGVsbGluZyBtZSBpZiBURFggaXMgZXZlbiBvbiB0aGUgdGFibGUuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBuZXh0IHN0ZXBzLCBtYXliZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIG9yIHRvIGRpZyBpbnRvIG1vcmUgc3VidGxlIGRpZmZlcmVuY2VzIGluIHRoZSBjb2RlLiBJIGp1c3Qgd2FudCBhIHF1aWNrIHBvaW50ZXIgdG8gdGVsbCBtZSB3aGVyZSB0byBnbyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQ2hlY2tpbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBJbnRlbCBURFgqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlc2Ugc3BlY2lmaWMgS1ZNIGZlYXR1cmVzOiBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBqdW1wcyB0byBtaW5kIGlzIHdoZXRoZXIgYEtWTV9JTlRFTF9URFhgIGlzIGFjdHVhbGx5IHRoZSAqY29ycmVjdCogY29uZmlndXJhdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBmb3IsIG9yIGlmIHdlIG5lZWQgdG8gYXNzZXNzIHRoZSB3aG9sZSBzdWl0ZSB0byBwcm9wZXJseSB1c2UgdGhlIHRhcmdldCBmZWF0dXJlLiBJdCBzZWVtcyBsb2dpY2FsIHRvIHN0YXJ0IHRoZXJlLiBTbywgbGV0JiMzOTtzIGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSByaWdodCBjb25maWcgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWF5IHJlbGF0ZSBvciBhcmUgcmVxdWlyZWQuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcgYSBzeXN0ZW0gdG8gdXNlIFREWC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qS1ZNX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTA5OiAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXHUwMDI2XHUwMDI2IEVYUEVSVFxuYXJjaC94ODYva3ZtL0tjb25maWctMTEwLSAgICAgICAgaGVscFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTI0Olx0ZGVwZW5kcyBvbiBYODZfU0dYIFx1MDAyNlx1MDAyNiBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipEZWx2aW5nIGludG8gdGhlIERlcGVuZGVuY2llcyBvZiBLVk1fSU5URUxfVERYKioKCk9rYXksIHNvIGBLVk1fSU5URUxfVERYYC4gUmlnaHQuIFdoYXQgZXhhY3RseSBhcmUgdGhlIGRlcGVuZGVuY2llcyBvbiB0aGF0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgaXQgaGluZ2VzIG9uLCBiZWNhdXNlIGlmIEkmIzM5O20gZ29pbmcgdG8gY29uZmlndXJlIHRoaXMgcHJvcGVybHksIEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBkaXZlIHN0cmFpZ2h0IGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHVzdWFsbHkgbGl2ZSwgc28gdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMuIEnigJltIGJldHRpbmcgdGhlIGFuc3dlciBpcyBidXJpZWQgaW4gdGhlcmUgc29tZXdoZXJlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXG4gMTMxOlx0XG4gMTMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIEtWTV9JTlRFTF9URFhcbiAxMzU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuIDEzNjpcdFx0ZGVmYXVsdCB5XG4gMTM3Olx0XHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG4gMTM4Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxMzk6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbiAxNDA6XHRcdGhlbHBcbiAxNDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXG4gMTQyOlx0XHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY3kgR3JhcGggRGVlcCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBgS1ZNX0lOVEVMX1REWGAgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsaWVzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS4gTm93LCBsZXQgbWUgcXVpY2tseSBwaXZvdCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEFNRCBzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSByZWxhdGlvbnNoaXAgaXMgd2l0aCBgS1ZNX0FNRF9TRVZgLiBJIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIGFuZCB2ZXJpZnkgbXkgY3VycmVudCBtZW50YWwgbW9kZWwgb2YgdGhlIGludGVyZGVwZW5kZW5jaWVzIGluIHRoZXNlIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcy4gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSB1cHN0cmVhbSBjaGFuZ2VzIHRvbywgdG8gaWRlbnRpZnkgYW55IHJlY2VudCByZWxldmFudCBkZXZlbG9wbWVudHMgb3IgYnVnZml4ZXMuIFRoaXMgbWlnaHQgYWxzbyBwcm92aWRlIGNsdWVzIGFib3V0IGhvdyB0aGUgSW50ZWwgYW5kIEFNRCBpbXBsZW1lbnRhdGlvbnMgYXJlIGNvbnZlcmdpbmcsIG9yIGRpdmVyZ2luZywgb3ZlciB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTY2Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTY3Olx0XHRoZWxwXG4gMTY4Olx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcbiAxNjk6XHRcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIEtWTV9BTURfU0VWIGFuZCBSZWxhdGVkIE1vZHVsZXMqKgoKQWxyaWdodCwgSSBzZWUgdGhlIGRlcGVuZGVuY3kgdHJlZSBmb3IgYEtWTV9BTURfU0VWYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgbGV2ZXJhZ2VzIGBLVk1fQU1EYCwgaXMgYnVpbHQgZm9yIGBYODZfNjRgIGFyY2hpdGVjdHVyZXMsIGFuZCBuZWVkcyBgQ1JZUFRPX0RFVl9TUF9QU1BgIGZvciBpdHMgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zLiBTZWVtcyBsb2dpY2FsLCBnaXZlbiBTRVYmIzM5O3Mgc2VjdXJpdHkgZmVhdHVyZXMuIE5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgZGV0YWlscyBvZiBTRVYsIEkgd2FudCB0byBxdWlja2x5IGNoZWNrIHRoZSBzdGF0dXMgYW5kIGRlcGVuZGVuY2llcyBvZiBgS1ZNX1NNTWAgYXMgYSBwcmVsaW1pbmFyeS4gVW5kZXJzdGFuZGluZyBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIEtWTSBjb21wb25lbnRzLCBwYXJ0aWN1bGFybHkgb24gQU1EIHBsYXRmb3JtcywgaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSXQgbWF5IGJlIGtleSB0byBhIGhvbGlzdGljIGFyY2hpdGVjdHVyZSByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFxuIDE4MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE4MjpcdFxuIDE4MzpcdGNvbmZpZyBLVk1fU01NXG4gMTg0Olx0XHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4gMTg1Olx0XHRkZWZhdWx0IHlcbiAxODY6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDE4NzpcdFx0aGVscFxuIDE4ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pXG4gMTg5Olx0XHQgIGluIHZpcnR1YWwgbWFjaGluZXMuICBUaGlzIGNhbiBiZSB1c2VkIGJ5IHRoZSB2aXJ0dWFsIG1hY2hpbmVcbiAxOTA6XHRcdCAgZmlybXdhcmUgdG8gaW1wbGVtZW50IFVFRkkgc2VjdXJlIGJvb3QuXG4gMTkxOlx0XG4gMTkyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTkzOlx0XG4gMTk0Olx0Y29uZmlnIEtWTV9IWVBFUlZcbiAxOTU6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4gMTk2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAxOTc6XHRcdGRlZmF1bHQgeVxuIDE5ODpcdFx0aGVscFxuIDE5OTpcdFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgSGFyZHdhcmUgVmlydHVhbGl6YXRpb24gRXh0ZW5zaW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgS1ZNLXJlbGF0ZWQgZXh0ZW5zaW9uczogYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBhbmQgYEtWTV9JTlRFTF9URFhgLiBJbW1lZGlhdGVseSwgdGhlIHByZXNlbmNlIG9mIHRoZXNlIHRocmVlIGluZGljYXRlcyB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGVuaGFuY2VtZW50cy4gYEtWTV9TTU1gIGxpa2VseSBkZWFscyB3aXRoIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gYEtWTV9BTURfU0VWYCBkZWZpbml0ZWx5IHJlbGF0ZXMgdG8gQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24sIGEgY3J1Y2lhbCBmZWF0dXJlIGZvciBkYXRhIGNvbmZpZGVudGlhbGl0eSBhbmQgaW50ZWdyaXR5IGluIFZNcy4gQW5kIHRoZW4gd2UgaGF2ZSBgS1ZNX0lOVEVMX1REWGAuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgSW50ZWwmIzM5O3MgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGBJTlRFTF9URFhfSE9TVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBob3N0IHNpZGUgaW1wbGVtZW50YXRpb24gYW5kIGltcGxpY2F0aW9ucy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGFzcGVjdHMgdGhhdCB0aGV5IHdhbnQgbWUgdG8gZm9jdXMgb24/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IExldCYjMzk7cyBjaGVjayBgSU5URUxfVERYX0hPU1RgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5URUxfVERYX0hPU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBsaW5lIG9mIHRob3VnaHQsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyYjMzk7cyBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIGxpa2UgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgSU5URUxfVERYX0hPU1QqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUuICpJTlRFTF9URFhfSE9TVCouIFNvdW5kcyBsaWtlIGl0JiMzOTtzIGEga2V5IGNvbXBvbmVudCBmb3IgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgb24gdGhlIGhvc3Qgc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgc3BlY2lmaWNhbGx5IGZyb20gYSBzeXN0ZW0gZGVzaWduIGFuZCBpbnRlZ3JhdGlvbiBwZXJzcGVjdGl2ZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQgKklOVEVMX1REWF9IT1NUKiByZWxpZXMgb24gdG8gZnVuY3Rpb24/IFdoYXQgbGlicmFyaWVzLCBrZXJuZWwgbW9kdWxlcywgb3Igb3RoZXIgcGllY2VzIG9mIHRoZSBpbmZyYXN0cnVjdHVyZSBkb2VzIHRoaXMgY29tcG9uZW50IG5lZWQ/JiMzNDsgUGVyaGFwcyBpdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgZmlybXdhcmUgcmV2aXNpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQklPUy4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcyB0aGlzOiAmIzM0O1doZXJlIGRvZXMgdGhpcyBmaXQgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHRydXN0ZWQgZW52aXJvbm1lbnQsIHRoZSBob3N0JiMzOTtzIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCBwb3RlbnRpYWxseSBhbnkgdmlydHVhbGl6YXRpb24gbGF5ZXJzIGluIHBsYXkuIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnRzLCBjb21wYXRpYmlsaXR5IGNvbmNlcm5zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gdGVsbHMgdXMgYWJvdXQgd2hhdCB0aGUgY29kZSBpcyBkb2luZyBvciByZXF1aXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjE4NjE6XHRcbjE4NjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4NjM6XHRcbjE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgZGVwZW5kZW5jaWVzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSB0aG91Z2h0cyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYElOVEVMX1REWF9IT1NUYCBoaW5nZXMgb24gYSBoYW5kZnVsIG9mIGNyaXRpY2FsIHByZXJlcXVpc2l0ZXMuIEl0JiMzOTtzIGJ1aWx0IHVwb24gdGhlIGZvdW5kYXRpb24gb2YgYENQVV9TVVBfSU5URUxgLCBvZiBjb3Vyc2UsIHRoYXQmIzM5O3MgZXhwZWN0ZWQgZm9yIGFueSBJbnRlbC1zcGVjaWZpYyBmZWF0dXJlLiBgWDg2XzY0YCBpcyBmdW5kYW1lbnRhbDsgNjQtYml0IGFyY2hpdGVjdHVyZSBpcyBhIGdpdmVuIGluIHRoaXMgY29udGV4dC4gYEtWTV9JTlRFTGAgaXMgY3J1Y2lhbCwgZ2l2ZW4gdGhhdCB3ZSBhcmUgZGlzY3Vzc2luZyB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBGdXJ0aGVybW9yZSwgYFg4Nl9YMkFQSUNgIGlzIGFsc28gYSBjcml0aWNhbCBkZXBlbmRlbmN5OyB0aGlzIHBvaW50cyB0byBBZHZhbmNlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFQSUMpIHVzYWdlLCB3aGljaCBpcyBrZXkgZm9yIGVmZmljaWVudCBpbnRlcnJ1cHQgaGFuZGxpbmcgaW4gbW9kZXJuIG11bHRpLWNvcmUgc3lzdGVtcywgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBgQ09OVElHX0FMTE9DYCBpcyBuZWNlc3NhcnkgYXMgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBhbiBpbXBvcnRhbnQgY29tcG9uZW50IGZvciB0aGUgaXNvbGF0aW9uIHByb2Nlc3MgdGhhdCBURFggcHJvdmlkZXMuIEZpbmFsbHksIGBYODZfTUNFYCwgb3IgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gc3VwcG9ydCwgcGxheXMgYSBrZXkgcGFydCBpbiB0aGUgcmVsaWFiaWxpdHkgYW5kIGVycm9yIGhhbmRsaW5nLCBlbnN1cmluZyByb2J1c3Qgb3BlcmF0aW9uIHdpdGhpbiB0aGlzIHNlY3VyZSBlbnZpcm9ubWVudC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZGVsdmUgaW50byBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBUaGlzIHdpbGwgYmUgYW5vdGhlciBzZXQgb2YgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBlbnRhaWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZz0yMz1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfQ1JZUFRPXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzozODpjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhcyByZXF1ZXN0ZWQ6CgoqKkRlcGVuZGVuY3kgQ2hlY2s6IENSWVBUT19ERVZfU1BfUFNQKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGUgYENSWVBUT19ERVZfU1BfUFNQYCBtb2R1bGUuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIGFuZCB0byBlbnN1cmUgSeKAmW0gb3BlcmF0aW5nIGluIGEgc2FmZSBhbmQgZWZmZWN0aXZlIG1hbm5lciwgSSBoYXZlIHRvIGZpcnN0IG1ldGljdWxvdXNseSBleGFtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIHNlcnZpY2VzIGl0IHJlbGllcyB1cG9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGNyZWF0aW5nIGEgY29tcHJlaGVuc2l2ZSBkZXBlbmRlbmN5IGdyYXBoIHRvIHZpc3VhbGl6ZSB0aGUgY29ubmVjdGlvbnMuIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBkZXBlbmRlbmNpZXM/IFRoaXMgY291bGQgbWVhbiBwb3RlbnRpYWwgc2VjdXJpdHkgcmlza3MuIERvIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyB2ZXJzaW9ucywgb3IgYW0gSSBkZWFsaW5nIHdpdGggYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXNzdWVzPyBUaGlzIGlzIGEgY29yZSBwYXJ0IG9mIG15IGV2YWx1YXRpb24gb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSB1cGRhdGVzIG9yIGNoYW5nZXMgSSYjMzk7bSBjb25zaWRlcmluZyB3b24mIzM5O3QgaW5hZHZlcnRlbnRseSBicmVhayBleGlzdGluZyBmdW5jdGlvbmFsaXRpZXMuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdFx0ICBDb3Byb2Nlc3Nvci4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgb2ZmbG9hZCBvZiBTSEEgYW5kIEFFUyBhbGdvcml0aG1zLlxuICAzNjpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcF9jcnlwdG8uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXG4gIDM5Olx0XHRib29sIFwmIzM0O1BsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcJiMzNDtcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcdTAwMjZcdTAwMjYgWDg2XzY0IFx1MDAyNlx1MDAyNiBBTURfSU9NTVVcbiAgNDI6XHRcdHNlbGVjdCBQQ0lfVFNNIGlmIFBDSVxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0IFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkuXG4gIDQ1Olx0XHQgVGhlIFBTUCBpcyBhIGRlZGljYXRlZCBwcm9jZXNzb3IgdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBrZXlcbiAgNDY6XHRcdCBtYW5hZ2VtZW50IGNvbW1hbmRzIGluIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgbW9kZSxcbiAgNDc6XHRcdCBhbG9uZyB3aXRoIHNvZnR3YXJlLWJhc2VkIFRydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IChURUUpIHRvXG4gIDQ4Olx0XHQgZW5hYmxlIHRoaXJkLXBhcnR5IHRydXN0ZWQgYXBwbGljYXRpb25zLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERUJVR0ZTXG4gIDUxOlx0XHRib29sIFwmIzM0O0VuYWJsZSBDQ1AgSW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbiAgNTI6XHRcdGRlZmF1bHQgblxuICA1MzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX0NDUFxuICA1NDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaXMgaXMgYSBicmllZiBtZW50YWwgbm90ZToKCioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgY29udGluZ2VudCBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBsaWtlbHkgYSBzZWN1cml0eS1mb2N1c2VkIG1vZHVsZSBvciBzdWJzeXN0ZW0gdGhhdCByZXF1aXJlcyBjZXJ0YWluIGhhcmR3YXJlIGFuZCB1bmRlcmx5aW5nIGNyeXB0b2dyYXBoaWMgc2VydmljZXMuIE5vdywgZ2l2ZW4gdGhhdCBkZXBlbmRlbmN5IGNoYWluLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcmUgY29tcG9uZW50IGl0IHJlbGllcyB1cG9uIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBiZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoYXQgY29tcG9uZW50IGRpcmVjdGx5IGRpY3RhdGVzIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgb2YgdGhlIGNvbXBvbmVudHMgd2hpY2ggYXJlIGRlcGVuZGVudCB1cG9uIGl0LiBJIG11c3QgY2hlY2sgb24gYENSWVBUT19ERVZfQ0NQX0REYCB0byBzZWUgaWYgdGhhdCYjMzk7cyBjb25maWd1cmVkIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcbiAgIDU6XHRcdGRlZmF1bHQgbVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxuICAgODpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7Q3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcdTAwMjZcdTAwMjYgRE1BREVWSUNFU1xuICAxNDpcdFx0c2VsZWN0IEhXX1JBTkRPTVxuICAxNTpcdFx0c2VsZWN0IERNQV9FTkdJTkVcbiAgMTY6XHRcdHNlbGVjdCBDUllQVE9fU0hBMVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTZcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxuICAyMDpcdFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTUzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBTeW1ib2xzKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMuIFRoZSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0lOVEVMX1REWGAsIGBJTlRFTF9URFhfSE9TVGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBCdXQgaGFuZyBvbiwgYEtWTV9TTU1gIGlzIGFscmVhZHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgdGhlIG90aGVyIHR3bywgYEtWTV9BTURfU0VWYCBhbmQgYEtWTV9JTlRFTF9URFhgIGFyZSBhbHNvIGxpa2VseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGNvbnRpbmdlbnQgb24gZGVwZW5kZW5jaWVzLiBTbywgdGhlIGVzc2VudGlhbCBjb25maWdzIHdpbGwgYmUgdGhlc2Ugc2l4LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZm9jdXMgc3ltYm9scywgdGhlc2UgYXJlIGtleTogYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGFuZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSByZWFjaGFibGUsIG5vdCBzdGF0aWMsIGFuZCByZWxldmFudC4KCkkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgYWxsIHRoZSBzeW1ib2xzIGFyZSBpbmRlZWQgbm9uLXN0YXRpYzogYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AsIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGluIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCwgYW5kIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBQZXJmZWN0LiBUaG9zZSB0d28gb3RoZXIgdm14IHN5bWJvbHMgYXJlIHN0YXRpYywgc28gSSBjYW4gaWdub3JlIHRob3NlLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGFyZSB0aGVzZSB1c2VmdWwgc3ltYm9scz8gYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgdHJpZ2dlcmVkIHdoZW4gZXhlY3V0aW5nIGFuIFJTTSBpbnN0cnVjdGlvbiB3aGljaCBpcyB1c2VkIHRvIGxlYXZlIFNNTSwgc28gdGhhdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE1ha2VzIHNlbnNlLgoKYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBpcyB2ZXJ5IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFRoYXQmIzM5O3MgdGhlIG1haW4gbG9vcCBmb3IgcnVubmluZyBhIHZDUFUhIFNvLCBpdOKAmXMgZXhlY3V0ZWQgb24gZXZlcnkgYEtWTV9SVU5gIGlvY3RsLCBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgVGhlIHF1ZXN0aW9uIGlzOiBpcyBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gICphbHdheXMqIGNhbGxlZD8gVGhhdCBuZWVkcyBjb25maXJtYXRpb24sIGFuZCBjb3VsZCBiZSBhIHZlcnkgdmFsdWFibGUgcGxhY2UgdG8gZm9jdXMgYXR0ZW50aW9uIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feDg2X3ZjcHVfcHJlX3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTg4MDA9c3RhdGljIGludCBjb21wbGV0ZV9lbXVsYXRlZF9tbWlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODg0My1cbmFyY2gveDg2L2t2bS94ODYuYzo4ODQ0OnN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg4NDUte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04ODgxPWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg5ODEtXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODk4MjpcdHIgPSBrdm1feDg2X3ZjcHVfcHJlX3J1bih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy04OTgzLVx0aWYgKHIgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE1MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDY0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSG90LVBhdGggRnVuY3Rpb25zIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBuZXcgY29kZSBpbnRlZ3JhdGVzIGludG8gdGhlIEtWTSB4ODYgYXJjaGl0ZWN0dXJlLiBJIHNlZSB0aGF0IGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAgaXMgY2FsbGVkIHJpZ2h0IGF0IHRoZSBzdGFydCBvZiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0IG1lYW5zIGZ1bmN0aW9ucyBsaWtlIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYW5kIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYXJlIGJlaW5nIGNhbGxlZCAqZXZlcnkqIHRpbWUgYSBgS1ZNX1JVTmAgaW9jdGwgaXMgaXNzdWVkLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCBmdW5jdGlvbnMsIGJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBsaXN0aW5nIHRob3NlIHRvIHByZXZlbnQgc2tld2luZyB0ZXN0IGRpc3RyaWJ1dGlvbnMuIE1ha2VzIHNlbnNlLiBGdXp6aW5nIGEgc2ltcGxlIGJvb2xlYW4gcmV0dXJuIGlzbiYjMzk7dCBnb2luZyB0byBiZSBzdXBlciBmcnVpdGZ1bCBhbnl3YXkuCgpBbHJpZ2h0LCB3aGF0IGVsc2UgaXMgY2FsbGVkIGZyb20gdGhhdCBwcmUtcnVuIGZ1bmN0aW9uPyBBaCwgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYC4gSXQmIzM5O3MgYWxzbyBjYWxsZWQgZnJvbSB0aGVyZSwgdmlhIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBvcC4gU28gYWdhaW4sIGhvdC1wYXRoLiBHb3R0YSBhdm9pZCB0aGF0IG9uZS4KCldhaXQsIG5vdyBJIHNlZSB0aGF0IGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgaXMgYWxzbyBjYWxsZWQgZnJvbSBgZW11bGF0b3JfbGVhdmVfc21tYC4gQWhhISBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBMb29raW5nIGF0IHRoZSBjb2RlOgoKYGBgYwoJaWYgKHJldCA9PSBYODZFTVVMX0NPTlRJTlVFICZhbXA7JmFtcDsKCSAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpCgkJcmV0ID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CmBgYAoKSXQmIzM5O3MgYmVpbmcgY2FsbGVkIGluc2lkZSBgZW11bGF0b3JfbGVhdmVfc21tYC4gU28sIHRoZSBxdWVzdGlvbiBpczogaXMgKnRoYXQqIGEgaG90LXBhdGggZnVuY3Rpb24/IE5vLCBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGV4ZWN1dGluZyB0aGUgUlNNIGluc3RydWN0aW9uLiBUaGF0JiMzOTtzIGEgZ3JlYXQgY2FuZGlkYXRlISBUaGF0JiMzOTtzIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcy4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHkuIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgaXMgaG90LXBhdGguIFRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgY2FsbGluZyBpdCBmcm9tIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAuIFRoZSBwYXRjaCBqdXN0IHJlZmFjdG9yZWQgYW5kIHJlbmFtZWQgdGhlIG9wIHRvIGNhbGwgZnJvbSBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gIGFuZCAqYWxzbyogZnJvbSBgZW11bGF0b3JfbGVhdmVfc21tYC4gU28gdGhlICpuZXcqIGxvZ2ljIGlzIGluIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLiBMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoYXQuCgpZZXAsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHNlZW1zIHRvIGJlIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guIFRoZSByZXN0IGlzIHJlZmFjdG9yaW5nIHRvIGFsbG93IGNhbGxpbmcgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGZyb20gdGhlIG5ldyBlbnRyeSBwb2ludC4KClNvLCBpbiBzdW1tYXJ5LCBmdXp6aW5nIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHNlZW1zIGxpa2UgdGhlIGJlc3QgYXBwcm9hY2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3ZteC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDMwOlx0XHRyZXR1cm4gMTtcbjYwMzE6XHR9XG42MDMyOlx0XG42MDMzOlx0LypcbjYwMzQ6XHQgKiBSZXR1cm5zIHRydWUgaWYgZW11bGF0aW9uIGlzIHJlcXVpcmVkIChkdWUgdG8gdGhlIHZDUFUgaGF2aW5nIGludmFsaWQgc3RhdGVcbjYwMzU6XHQgKiB3aXRoIHVuc3Jlc3RyaWN0ZWQgZ3Vlc3QgbW9kZSBkaXNhYmxlZCkgYW5kIEtWTSBjYW4mIzM5O3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZVxuNjAzNjpcdCAqIGN1cnJlbnQgdkNQVSBzdGF0ZS5cbjYwMzc6XHQgKi9cbjYwMzg6XHRib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjYwMzk6XHR7XG42MDQwOlx0XHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbjYwNDE6XHRcbjYwNDI6XHRcdGlmICghdm14LVx1MDAzZXZ0LmVtdWxhdGlvbl9yZXF1aXJlZClcbjYwNDM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNjA0NDpcdFxuNjA0NTpcdFx0LypcbjYwNDY6XHRcdCAqIEl0IGlzIGFyY2hpdGVjdHVyYWxseSBpbXBvc3NpYmxlIGZvciBlbXVsYXRpb24gdG8gYmUgcmVxdWlyZWQgd2hlbiBhXG42MDQ3Olx0XHQgKiBuZXN0ZWQgVk0tRW50ZXIgaXMgcGVuZGluZyBjb21wbGV0aW9uLCBhcyBWTS1FbnRlciB3aWxsIFZNLUZhaWwgaWZcbjYwNDg6XHRcdCAqIGd1ZXN0IHN0YXRlIGlzIGludmFsaWQgYW5kIHVucmVzdHJpY3RlZCBndWVzdCBpcyBkaXNhYmxlZCwgaS5lLiBLVk1cbjYwNDk6XHRcdCAqIHNob3VsZCBzeW50aGVzaXplIFZNLUZhaWwgaW5zdGVhZCBlbXVsYXRpb24gTDIgY29kZS4gIFRoaXMgcGF0aCBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzIGZvciBhIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgZmxhZyBpcyBqdXN0IGEgc2ltcGxlIGNoZWNrLCBub3RoaW5nIGNvbXBsZXggdGhlcmUuIFRoZSBwYXRjaCBhZGRzIGEgdGVzdCwgc3BlY2lmaWNhbGx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBiZWluZyB0ZXN0ZWQuIFRoZSB0ZXN0JiMzOTtzIGxvZ2ljIGlzIGFsbCBhYm91dCBpbmplY3RpbmcgYW4gU01JIHdoaWxlIEwyIGlzIHJ1bm5pbmcsIGZvcmNpbmcgYW4gSS9PIGV4aXQgZnJvbSBMMSwgbWFuaXB1bGF0aW5nIFRSIGluIHRoZSBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEsIGFuZCB0aGVuIGV4cGVjdGluZyBhIFNIVVRET1dOIGV4aXQgZHVlIHRvIGludmFsaWQgTDIgc3RhdGUgb24gUlNNLiBUaGlzIGlzIGEgdmVyeSBjbGVhciB0ZXN0IG9mIHRoYXQgbmV3IGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGxvZ2ljLgoKVGhhdCBtYWtlcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0aGUga2V5IGZ1bmN0aW9uLiBNeSBmb2N1cyBpcyBlbnRpcmVseSB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlnIG9wdGlvbnMuIElzIGBLVk1fU01NYCBzdWZmaWNpZW50PyBXZWxsLCB0aGlzIHRlc3QgaXMgVk1YLXNwZWNpZmljLCBzbyBjbGVhcmx5IGBLVk1fSU5URUxgIGlzIGEgbXVzdC1oYXZlLiBBbmQgc2luY2UgdGhlIHRlc3Qgc3BlY2lmaWNhbGx5IHRhcmdldHMgYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBLVk1fU01NYCBpcyBlc3NlbnRpYWwuIFRoZSByZWZhY3RvcmVkIGNvZGUgbmVlZHMgYEtWTV9BTURfU0VWYCBhbmQgYEtWTV9JTlRFTF9URFhgIHRvIGNvbXBpbGUgYW5kIGJlIHRlc3RlZCB0b28uCgpMZXQmIzM5O3MgbGlzdCB0aGVzZSBkZXBlbmRlbmNpZXMgZXhwbGljaXRseToKCiogICBgS1ZNX1NNTWAKKiAgIGBLVk1fQU1EX1NFVmAKKiAgIGBLVk1fSU5URUxfVERYYAoqICAgYElOVEVMX1REWF9IT1NUYAoqICAgYENSWVBUT19ERVZfU1BfUFNQYAoqICAgYENSWVBUT19ERVZfQ0NQX0REYAoKSG9sZCBvbiwgZG8gd2UgYWxzbyBuZWVkIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAgZXhwbGljaXRseT8gVGhleSBhcmUgdXN1YWxseSBlbmFibGVkIGluIHN5emthbGxlciBieSBkZWZhdWx0LCBidXQgdGhlcmUmIzM5O3Mgbm8gaGFybSBpbiBpbmNsdWRpbmcgdGhlbSwganVzdCBpbiBjYXNlLiBUaGV5IGFyZSB0cmlzdGF0ZSwgc28gc3BlY2lmeWluZyB0aGVtIHdvbiYjMzk7dCBiZSBhbiBpc3N1ZS4gV2FpdCwgYSBiaXQgbW9yZSBkaWdnaW5nLiBJdCBsb29rcyBsaWtlIGBLVk1fSU5URUxfVERYYCBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EX1NFVmAgZGVwZW5kcyBvbiBgS1ZNX0FNRGAuIFNvLCB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KCkp1c3QgdG8gYmUgc3VyZSwgaXMgYEtWTV9TTU1gIGEgZGVmYXVsdC1lbmFibGVkIG9wdGlvbj8gWWVzLCBpdCBpcyBzZXQgdG8gYGRlZmF1bHQgeWAsIGJ1dCBpdCYjMzk7cyBzdGlsbCBwcnVkZW50IHRvIHNwZWNpZnkgaXQgZGlyZWN0bHkuCgpPa2F5LCBpcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0cnVseSB0aGUgb25seSBmdW5jdGlvbiBvZiBpbnRlcmVzdD8gQXJlIHRoZXJlIGFueSBvdGhlcnMgdGhhdCBhcmUgbm90IHBlcmZvcm1hbmNlLWNyaXRpY2FsPyBMZXQmIzM5O3MgY2hlY2suIEFoLCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFyZSBwZXJmb3JtYW5jZS1jcml0aWNhbC4gU28sIHllcywgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgdGhlIG9ubHkgZm9jdXMgaGVyZS4KCkZpbmFsbHksIGlzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGV4cG9ydGVkLCBvciBpcyBpdCBzdGF0aWM/IEl0JiMzOTtzIG5vbi1zdGF0aWMgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AuIEJ1dCBob2xkIG9uLCBpZiBgQ09ORklHX0tWTV9TTU1gIGlzICpub3QqIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIGl0JiMzOTtzIGRlZmluZWQgYXMgc3RhdGljIGlubGluZSBvciBzdGF0aWMuIEhvd2V2ZXIsIHdpdGggYENPTkZJR19LVk1fU01NPXlgLCBpdCYjMzk7cyBpbmRlZWQgbm9uLXN0YXRpYyBpbiBgc21tLmNgLgoKVGhlcmVmb3JlLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaW4gYHNtbS5jYCBmb3IgY29ycmVjdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTcyLVxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3NtbS5jLTU3NC17XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3NtbS5oOjE1OTppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjAtdm9pZCBwcm9jZXNzX3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc1OS0jaWZuZGVmIENPTkZJR19LVk1fU01NXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS94ODYuYy01NzYxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSU00gSW5zdHJ1Y3Rpb24gRW11bGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgUlNNIGluc3RydWN0aW9uIGVtdWxhdGlvbiB3aXRoaW4gS1ZNLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIHJlc2lkZXMgaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAgd2l0aGluIGBzbW0uY2AuIEkgY29uZmlybWVkIHRoYXQgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBpcyBpbmRlZWQgKm5vdCogc3RhdGljLCB3aGljaCBpcyBnb29kIGZvciBpbnN0cnVtZW50YXRpb24uCgpJIGRpZCBhIHF1aWNrIHNjYW4gb2YgYHNtbS5jYCBhbmQgbm90ZWQgdGhhdCBgcnNtX2xvYWRfc3RhdGVfMzJgIGFuZCBgcnNtX2xvYWRfc3RhdGVfNjRgIGFyZSBzdGF0aWMsIGFuZCBgZW11bGF0b3JfbGVhdmVfc21tYCBpcywgb2YgY291cnNlLCB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHRoZSBSU00gaW5zdHJ1Y3Rpb24uCgpUaGUgbWVhdCBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiBgZW11bGF0b3JfbGVhdmVfc21tYC4gU3BlY2lmaWNhbGx5LCBpdCBjYWxscyBhIGZ1bmN0aW9uLCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAsIGFuZCwgaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHRoZSByb3V0aW5lIHJldHVybnMgYFg4NkVNVUxfVU5IQU5ETEVBQkxFYC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBkZWFsIHdpdGggaW52YWxpZCBndWVzdCBzdGF0ZSBkdXJpbmcgYW4gUlNNIHRyYW5zaXRpb24sIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGlzc3Vlcy4KClRoZSByZXN0IG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHJlZmFjdG9yaW5nLiBJdCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gY2hlY2sgbG9naWMgaW50byBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGFuZCBpdCBtYWtlcyBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYXZhaWxhYmxlIGFzIGEgc2VwYXJhdGUgb3BlcmF0aW9uIHRvIHN1cHBvcnQgdGhpcyBuZXcgY2hlY2suIFRoZSBsb2dpYyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGhhbmRsZSBwb3RlbnRpYWxseSB1bmhhbmRsZWFibGUgc2NlbmFyaW9zIGR1cmluZyBSU00uCgpUaGVyZWZvcmUsIGZyb20gYSB0ZXN0aW5nIHBlcnNwZWN0aXZlLCBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyB0aGUga2V5IHRhcmdldC4gVGhlIG5ldyBjb25kaXRpb24gaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2hvdWxkIGJlIHRoZSBmb2N1cyBvZiBmdXp6aW5nIGVmZm9ydHMuCgpOb3csIGZvciBjb25maWd1cmluZyBhIHRlc3RpbmcgZW52aXJvbm1lbnQsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBzb21lIGtleSBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGRlcGVuZGVudCBvbiBzb21lIHNwZWNpZmljIGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGBLVk1fSU5URUxfVERYYCwgYElOVEVMX1REWF9IT1NUYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYWxsIG9mIHRoZXNlIGFyZSBwcmVzZW50IGFuZCBlbmFibGVkLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IGBLVk1fSU5URUxfVERYYCBhbmQgYElOVEVMX1REWF9IT1NUYCBtaWdodCBub3QgYmUgaW4gZXZlcnkga2VybmVsIHZlcnNpb24sIGJ1dCB0aGV5IGFyZSBhdmFpbGFibGUgaGVyZS4KCkZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZXR1cCwgYW5kIHRvIG1pbmltaXplIHRoZSByaXNrIG9mIG1pc3Npbmcgc29tZXRoaW5nLCBJJiMzOTtsbCBhbHNvIGFkZCBhIGZldyBzdGFuZGFyZCBjb25maWd1cmF0aW9uczogYFg4Nl82NGAsIGBDUFVfU1VQX0lOVEVMYCwgYENQVV9TVVBfQU1EYCwgYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYFg4Nl9NQ0VgLiBBZGRpdGlvbmFsbHksIEkmIzM5O2xsIGVuYWJsZSBgQU1EX0lPTU1VYCB0byBlbnN1cmUgdGhhdCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGZ1bmN0aW9ucyBjb3JyZWN0bHkuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNC1cdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozMzpjb25maWcgQU1EX0lPTU1VX0lPTU1VRkRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXHRib29sIFwmIzM0O0VuYWJsZSBJT01NVUZEIGZlYXR1cmVzIGZvciBBTUQgSU9NTVUgKEVYUEVSSU1FTlRBTClcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQyLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXHRib29sIFwmIzM0O0VuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGEgU2VjdXJlIEtWTSBFbnZpcm9ubWVudCoqCgpBbHJpZ2h0LCB0aGUgc3lzdGVtIGRlZmluaXRlbHkgaGFzIGBBTURfSU9NTVVgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBjb25maWd1cmF0aW9uLCBhcyB0aGlzIGlzIGdvaW5nIHRvIGJlIG15IHRob3VnaHQgcHJvY2VzcyBmb3Igc2V0dGluZyB1cCBhIHNlY3VyZSBLVk0gZW52aXJvbm1lbnQuIEkmIzM5O20gZ29pbmcgdG8gcmVmaW5lIHRoaXMgbGlzdCB0byBtYWtlIGl0IGEgYml0IG1vcmUgY29tcGxldGUsIGFuZCBJJiMzOTtsbCBpbmNsdWRlIHRoaW5ncyB0aGF0IEkga25vdyBhcmUgaW1wb3J0YW50IGZvciB0aGlzIHNwZWNpZmljIHNjZW5hcmlvOgpgS1ZNX1NNTWAsIHRoYXQmIzM5O3MgYSBuZWNlc3NpdHkKYEtWTV9BTURfU0VWYCBpcyBkZWZpbml0ZWx5IGltcG9ydGFudCB3aXRoIEFNRCBJT01NVQpgS1ZNX0lOVEVMX1REWGAsIGxldCYjMzk7cyBhZGQgdGhhdCBmb3IgY29tcGxldGVuZXNzCmBJTlRFTF9URFhfSE9TVGAsIHRoYXQgb25lIHRvby4KYENSWVBUT19ERVZfU1BfUFNQYCB3aWxsIGJlIHVzZWZ1bApgQ1JZUFRPX0RFVl9DQ1BfRERgLCBJIGNhbiBzZWUgdGhvc2UgdHdvIGJlaW5nIHVzZWZ1bCBpbiBjb25qdW5jdGlvbi4KYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYCwgYmFzaWMgS1ZNLCBvZiBjb3Vyc2UuCmBBTURfSU9NTVVgLCBhZ2FpbiwganVzdCBtYWtpbmcgc3VyZS4KCk9rYXksIG5vdyBsZXQmIzM5O3MgdGhpbmsgY3JpdGljYWxseSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGluY2x1ZGluZyBgS1ZNX0lOVEVMX1REWGAgLiBJIHJlbWVtYmVyIHRoYXQgaXQgZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RgLCBhbmQgdGhhdCBpbiB0dXJuIGRlcGVuZHMgb24gYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gSG1tLCBJIHNob3VsZCBwcm9iYWJseSBhZGQgdGhvc2UgZGVwZW5kZW5jaWVzIHRvIHRoZSBjb25maWcganVzdCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgZXZlcnl0aGluZyYjMzk7cyBwcm9wZXJseSBlbmFibGVkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzb2xpZCwgYW5kIEkmIzM5O20gbm90IGNoYXNpbmcgZG93biBzb21lIG9ic2N1cmUgZGVwZW5kZW5jeSBsYXRlci4gU28gbGV0JiMzOTtzIGFkZDoKYFg4Nl9YMkFQSUNgCmBDT05USUdfQUxMT0NgCmBYODZfTUNFYAoKTm93IGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBgQ09OVElHX0FMTE9DYCBpcyBhY3R1YWxseSBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgdGhlbiByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT05USUdfQUxMT0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03MDk9Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG4tLVxubW0vS2NvbmZpZy03MTgtXG5tbS9LY29uZmlnOjcxOTpjb25maWcgQ09OVElHX0FMTE9DXG5tbS9LY29uZmlnLTcyMC1cdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFx1MDAyNlx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNTIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaGlua2luZyBvbiBDT05USUdfQUxMT0MqKgoKT2theSwgc28gYENPTlRJR19BTExPQ2AgaXMgYSBgZGVmX2Jvb2xgLCB3aGljaCBtZWFucyBJIGRvbiYjMzk7dCBnZXQgZGlyZWN0IGNvbnRyb2wgb3ZlciB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQuIEl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50LCBhbmQgcmlnaHQgbm93LCB0aGUgbG9naWMgaXMgdGllZCB0byBgTUVNT1JZX0lTT0xBVElPTiAmYW1wOyZhbXA7IENPTVBBQ1RJT05gIG9yIGBDTUFgLiBIbW0sIHJhdGhlciB0aGFuIHVudGFuZ2xpbmcgYSBtb3JlIGNvbXBsZXggY29uZGl0aW9uYWwsIGl0IGxvb2tzIGxpa2UgYENNQWAgaXMgdGhlIHNpbXBsZXN0IHBhdGggdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQganVzdCBhZGQgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgQ01BYC4gVGhhdCYjMzk7cyB0aGUgbW9zdCBleHBlZGllbnQgYW5kIGxpa2VseSB0aGUgbW9zdCByZWxpYWJsZSBhcHByb2FjaCBhdCB0aGlzIGp1bmN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ01BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi0tXG5tbS9LY29uZmlnLTEwNjYtXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODEtXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwODMtXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4Ny1cbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5NC1cbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXG5tbS9LY29uZmlnLTEwOTYtXHRpbnQgXCYjMzQ7TWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGlzIHByb2JsZW0uIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgYENNQWAg4oCTIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvci4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBmb2N1cyBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgYSBjaGFsbGVuZ2UgYXJvdW5kIGZyYWdtZW50YXRpb24sIGxhcmdlIGFsbG9jYXRpb25zLCBvciBwZXJoYXBzIE5VTUEgY29uc2lkZXJhdGlvbnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgYFg4Nl9YMkFQSUNgLiBUaGlzIGlzIGNsZWFybHkgaW5kaWNhdGluZyBhbiB4ODYgYXJjaGl0ZWN0dXJlIHdpdGggdGhlIFgyQVBJQyBmZWF0dXJlIGVuYWJsZWQuIFRoaXMgaW1tZWRpYXRlbHkgaW1wbGllcyBhIHNjYWxlIG9mIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgLSB0aGluayBpbnRlcnJ1cHQgaGFuZGxpbmcsIElQSSBwZXJmb3JtYW5jZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb24gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEl0IGFsc28gaW1wbGllcyBhIGNlcnRhaW4gbGV2ZWwgb2Ygc3lzdGVtIGNvbmZpZ3VyYXRpb24gLSBjb3JlIGNvdW50LCBCSU9TIHNldHRpbmdzLCBhbmQgT1Mga2VybmVsIG9wdGlvbnMgd2lsbCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgaW50ZXJyZWxhdGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvLCBgQ01BYCBhbmQgYFg4Nl9YMkFQSUNgLCBtaWdodCBpbnRlcmFjdCBvciBjb25mbGljdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgcG90ZW50aWFsbHkgcHJvZm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfWDJBUElDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NDM2PWNvbmZpZyBTTVBcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTQ1OC1cbmFyY2gveDg2L0tjb25maWc6NDU5OmNvbmZpZyBYODZfWDJBUElDXG5hcmNoL3g4Ni9LY29uZmlnLTQ2MC1cdGJvb2wgXCYjMzQ7eDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIENQVSBFcnJvciBIYW5kbGluZyBNZWNoYW5pc21zKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgYFg4Nl9YMkFQSUNgIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25zaWRlciBpdHMgaW1wbGljYXRpb25zIGZvciBpbnRlci1wcm9jZXNzb3IgY29tbXVuaWNhdGlvbiBhbmQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGVycm9yIGhhbmRsaW5nLiBJcyB0aGlzIGdvaW5nIHRvIGJlIHRoZSAqcHJpbWFyeSogbWVjaGFuaXNtIHdlJiMzOTtyZSB1c2luZyBmb3Igc2lnbmFsaW5nIGVycm9ycz8gT3IgaXMgaXQgYSBzZWNvbmRhcnkgc3lzdGVtPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIGFyY2hpdGVjdHVyZXMgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGFjcm9zcyBkaWZmZXJlbnQgY29yZXMgYW5kIHNvY2tldHM/IEkgbmVlZCB0byBjb25zaWRlciB0aGUgb3ZlcmhlYWQgb2YgdGhpcyBhcHByb2FjaC4KCk5vdywgbGV0JiMzOTtzIHBpdm90IHRvIGBYODZfTUNFYC4gVGhpcyBmZWVscyBsaWtlIHRoZSBtb3JlIGxpa2VseSBjYW5kaWRhdGUgZm9yIG91ciBjb3JlIGhhcmR3YXJlIGVycm9yIHJlcG9ydGluZy4gTXkgbWluZCBpcyBhbHJlYWR5IGp1bXBpbmcgdG8gdGhlIHNwZWNpZmljIG1hY2hpbmUgY2hlY2sgYXJjaGl0ZWN0dXJlIHJlZ2lzdGVycyBhbmQgdGhlIGZsb3cgb2YgZXJyb3IgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgT1MmIzM5O3MgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMuIElzIGl0IGdvaW5nIHRvIGJlIGEgc2ltcGxlIG5vdGlmaWNhdGlvbiwgb3Igd2lsbCB3ZSBoYXZlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgcmVzcG9uc2UgdG8gZGlmZmVyZW50IGVycm9yIHR5cGVzPyBXaGF0IGFib3V0IGVycm9yIGNvbnRhaW5tZW50PyBBbmQgbWVtb3J5IGVycm9yIGNvcnJlY3Rpb24gY2FwYWJpbGl0aWVzPyBUaGUgc3BlY2lmaWMgTVNScyBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXJyb3IgY29kZXMgYXJlIHRvcCBvZiBtaW5kLiBOZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGhvdyB0aGlzIHBsYXlzIHdpdGggb3RoZXIgZXJyb3IgbW9kZWxzIGxpa2UgcGFyaXR5IGFuZCBFQ0MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfTUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTExNz1jb25maWcgWDg2X1JFUk9VVEVfRk9SX0JST0tFTl9CT09UX0lSUVNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTExMzktXG5hcmNoL3g4Ni9LY29uZmlnOjExNDA6Y29uZmlnIFg4Nl9NQ0VcbmFyY2gveDg2L0tjb25maWctMTE0MS1cdGJvb2wgXCYjMzQ7TWFjaGluZSBDaGVjayAvIG92ZXJoZWF0aW5nIHJlcG9ydGluZ1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMTE0OS1cbmFyY2gveDg2L0tjb25maWc6MTE1MDpjb25maWcgWDg2X01DRUxPR19MRUdBQ1lcbmFyY2gveDg2L0tjb25maWctMTE1MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZGVwcmVjYXRlZCAvZGV2L21jZWxvZyBjaGFyYWN0ZXIgZGV2aWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTU3LVxuYXJjaC94ODYvS2NvbmZpZzoxMTU4OmNvbmZpZyBYODZfTUNFX0lOVEVMXG5hcmNoL3g4Ni9LY29uZmlnLTExNTktXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTY1LVxuYXJjaC94ODYvS2NvbmZpZzoxMTY2OmNvbmZpZyBYODZfTUNFX0FNRFxuYXJjaC94ODYvS2NvbmZpZy0xMTY3LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gveDg2L0tjb25maWc9MTE3ND1jb25maWcgWDg2X0FOQ0lFTlRfTUNFXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTgxLVxuYXJjaC94ODYvS2NvbmZpZzoxMTgyOmNvbmZpZyBYODZfTUNFX1RIUkVTSE9MRFxuYXJjaC94ODYvS2NvbmZpZy0xMTgzLVx0ZGVwZW5kcyBvbiBYODZfTUNFX0FNRCB8fCBYODZfTUNFX0lOVEVMXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTg1LVxuYXJjaC94ODYvS2NvbmZpZzoxMTg2OmNvbmZpZyBYODZfTUNFX0lOSkVDVFxuYXJjaC94ODYvS2NvbmZpZy0xMTg3LVx0ZGVwZW5kcyBvbiBYODZfTUNFIFx1MDAyNlx1MDAyNiBYODZfTE9DQUxfQVBJQyBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NjMKCQkJCQkJCW91dHB1dDogMjc1CgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgWDg2X01DRWAgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIGBYODZfTUNFYCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBLVk0gaGFuZGxlcyBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdGhyb3VnaCB0aGUgUlNNIGluc3RydWN0aW9uLiBUaGUgY29uZmlncyBpbiBwbGF5IGFyZSBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGBLVk1fSU5URUxfVERYYCwgYElOVEVMX1REWF9IT1NUYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYEFNRF9JT01NVWAsIGBDTUFgLCBgWDg2X1gyQVBJQ2AsIGFuZCwgb2YgY291cnNlLCBgWDg2X01DRWAuCgpUaGUgaGVhcnQgb2YgdGhlIG1hdHRlciBpcyB0aGUgYGVtdWxhdG9yX2xlYXZlX3NtbWAgZnVuY3Rpb24uIFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgaW52YWxpZCBndWVzdCBzdGF0ZSBpc24mIzM5O3QgaGFuZGxlZCBjb3JyZWN0bHkgd2hlbiBhIGd1ZXN0IGV4aXRzIFNNTSB1c2luZyBSU00uIFRoZSBmaXggbW9kaWZpZXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gY2hlY2sgaWYgdGhlIHJlcXVpcmVkIGVtdWxhdGlvbiBpcyB1bmhhbmRsZWFibGUsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgYXJvdW5kIHRoaXMgbmV3IGNoZWNrLCBtb3Zpbmcgc29tZSBsb2dpYyBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZG8gd2UgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cz8mIzM0OyBUaGUgcGF0Y2gmIzM5O3MgY29yZSBsb2dpYyBjaGFuZ2UgaGFwcGVucyBpbiBgZW11bGF0b3JfbGVhdmVfc21tYCwgc28gdGhhdCYjMzk7cyB0aGUgbmF0dXJhbCBmaXJzdCB0YXJnZXQuCgpJIGNvbnNpZGVyZWQgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhcyBhIHBvc3NpYmxlIGZvY3VzIHN5bWJvbC4gSG93ZXZlciwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgZW11bGF0b3JfbGVhdmVfc21tYCBhbmQgYGt2bV94ODZfdmNwdV9wcmVfcnVuYC4gSWYgd2UgZm9jdXMgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAsIHdlJiMzOTtsbCBpbmhlcmVudGx5IGhpdCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFueXdheSwgbWFraW5nIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGEgc3VmZmljaWVudCwgYW5kIHBlcmhhcHMgbW9yZSBkaXJlY3QsIHBvaW50IG9mIGF0dGFjay4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgZnJvbSB1c2Vyc3BhY2U/IFRoZSBhbnN3ZXIgaXMgeWVzLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiBlbXVsYXRpbmcgdGhlIFJTTSBpbnN0cnVjdGlvbiwgd2hpY2ggaXMgYSAxNi1iaXQgaW5zdHJ1Y3Rpb24gKDB4MEYgMHhBQSkgZXhlY3V0YWJsZSBieSB0aGUgZ3Vlc3QgaW4gU01NLiBUaGUgUlNNIGluc3RydWN0aW9uIGVmZmVjdGl2ZWx5IGhhbmRsZXMgdGhlIGV4aXQgZnJvbSBTTU0uIFN5emthbGxlciBjYW4gZ2VuZXJhdGUgdGhpcyBpbnN0cnVjdGlvbiBhbmQgZXhlY3V0ZSBpdCB3aXRoaW4gdGhlIFZNLiBUbyBjb25maXJtLCBJIGRvdWJsZS1jaGVja2VkLCBhbmQgZm91bmQgdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCB0ZXN0LCB3aGljaCBpbmNsdWRlczoKCmBgYGMKc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7CgkweGU0LCBBUkJJVFJBUllfSU9fUE9SVCwJLyogSU4gJEFSQklUUkFSWV9JT19QT1JULCAlYWwgKi8KCTB4MGYsIDB4YWEsCQkJLyogUlNNICovCn07CmBgYAoKVGhpcyB0ZXN0IGNsZWFybHkgZGVtb25zdHJhdGVzIHRoZSByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFRoZXJlZm9yZSwgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgYWJzb2x1dGVseSB0aGUgY29ycmVjdCBmb2N1cyBzeW1ib2wuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7WDg2X1gyQVBJQyYjMzQ7LAogICAgJiMzNDtYODZfTUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW11bGF0b3JfbGVhdmVfc21tJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIEtWTSBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgaW52YWxpZCBndWVzdCBzdGF0ZSB3aGVuIGxlYXZpbmcgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgdGhlIFJTTSBpbnN0cnVjdGlvbi4gSXQgbW9kaWZpZXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gY2hlY2sgaWYgdW5oYW5kbGVhYmxlIGVtdWxhdGlvbiBpcyByZXF1aXJlZCwgYW5kIGlmIHNvLCByZXR1cm5zIGBYODZFTVVMX1VOSEFORExFQUJMRWAuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGB2Y3B1X3ByZV9ydW5gIG9wIGludG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgdG8gc3VwcG9ydCB0aGlzIGNoZWNrLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiBgZW11bGF0b3JfbGVhdmVfc21tYCB0byB0ZXN0IHRoaXMgbmV3IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtYODZfWDJBUElDJiMzNDssCiAgICAmIzM0O1g4Nl9NQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgS1ZNIGRvZXMgbm90IHByb3Blcmx5IGhhbmRsZSBpbnZhbGlkIGd1ZXN0IHN0YXRlIHdoZW4gbGVhdmluZyBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIHZpYSB0aGUgUlNNIGluc3RydWN0aW9uLiBJdCBtb2RpZmllcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0byBjaGVjayBpZiB1bmhhbmRsZWFibGUgZW11bGF0aW9uIGlzIHJlcXVpcmVkLCBhbmQgaWYgc28sIHJldHVybnMgYFg4NkVNVUxfVU5IQU5ETEVBQkxFYC4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHZjcHVfcHJlX3J1bmAgb3AgaW50byBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYW5kIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCB0byBzdXBwb3J0IHRoaXMgY2hlY2suIFdlIHNob3VsZCBmb2N1cyBmdXp6aW5nIG9uIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIHRlc3QgdGhpcyBuZXcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODowNy43ODQzNTMzOThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NjU3NjUzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIlg4Nl9YMkFQSUNcIixcbiAgICBcIlg4Nl9NQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbXVsYXRvcl9sZWF2ZV9zbW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBLVk0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgd2hlbiBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIEl0IG1vZGlmaWVzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIGNoZWNrIGlmIHVuaGFuZGxlYWJsZSBlbXVsYXRpb24gaXMgcmVxdWlyZWQsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgdmNwdV9wcmVfcnVuYCBvcCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHRvIHN1cHBvcnQgdGhpcyBjaGVjay4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gdGVzdCB0aGlzIG5ldyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MDcuNzg0MzYwNzc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzAzNTY2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyYWI4N2E4Mzc4NmQzMzVhNmIyN2Q1ZGQyNWI4ZjUyMWVjZDRiYzc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDI6NTg6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5pbmRleCA1Y2IxMzJlY2EzYzM1Li5lMjEzYzlhZTNlMzAxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuQEAgLTYzLDExICs2MywxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKVxcbiAjZW5kaWZcXG4gS1ZNX1g4Nl9PUChmbHVzaF90bGJfZ3ZhKVxcbiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndWVzdClcXG4tS1ZNX1g4Nl9PUCh2Y3B1X3ByZV9ydW4pXFxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKVxcbiBLVk1fWDg2X09QKHZjcHVfcnVuKVxcbiBLVk1fWDg2X09QKGhhbmRsZV9leGl0KVxcbiBLVk1fWDg2X09QKHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKVxcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZClcXG4gS1ZNX1g4Nl9PUChzZXRfaW50ZXJydXB0X3NoYWRvdylcXG4gS1ZNX1g4Nl9PUChnZXRfaW50ZXJydXB0X3NoYWRvdylcXG4gS1ZNX1g4Nl9PUChwYXRjaF9oeXBlcmNhbGwpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggN2EyNTg4MzE2MTZmYS4uMjgzODQ3NjE5ZmY4OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xNTg2LDEzICsxNTg2LDE1IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdCAqL1xcbiBcXHR2b2lkICgqZmx1c2hfdGxiX2d1ZXN0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4tXFx0aW50ICgqdmNwdV9wcmVfcnVuKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitcXHRib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gKCp2Y3B1X3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBydW5fZmxhZ3MpO1xcbiBcXHRpbnQgKCpoYW5kbGVfZXhpdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBleGl0X2Zhc3RwYXRoKTtcXG4gXFx0aW50ICgqc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0dm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rXFx0Ym9vbCAoKnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK1xcbiBcXHR2b2lkICgqc2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1hc2spO1xcbiBcXHR1MzIgKCpnZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0dm9pZCAoKnBhdGNoX2h5cGVyY2FsbCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc21tLmMgYi9hcmNoL3g4Ni9rdm0vc21tLmNcXG5pbmRleCBhNDQ2NDg3YmRkNWNmLi42NTZhMzhkYWQ3ZTdhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zbW0uY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zbW0uY1xcbkBAIC02NDksNiArNjQ5LDEwIEBAIGludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuICNlbmRpZlxcbiBcXHRcXHRyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCBcXHUwMDI2c21yYW0uc21yYW0zMik7XFxuIFxcbitcXHRpZiAocmV0ID09IFg4NkVNVUxfQ09OVElOVUUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSlcXG4rXFx0XFx0cmV0ID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBJZiBSU00gZmFpbHMgYW5kIHRyaWdnZXJzIHNodXRkb3duLCBhcmNoaXRlY3R1cmFsbHkgdGhlIHNodXRkb3duXFxuIFxcdCAqIG9jY3VycyAqYmVmb3JlKiB0aGUgdHJhbnNpdGlvbiB0byBndWVzdCBtb2RlLiAgQnV0IGR1ZSB0byBLVk0nc1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IDkwYTA4ZDM2ZDg0M2QuLmZjYjQxZGZkZTRjMDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtMzU1Niw2ICszNTU2LDExIEBAIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdF9fc2V2X2VzX3VubWFwX2doY2Ioc3ZtKTtcXG4gfVxcbiBcXG4rYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2VuZWVkX2luaXQ7XFxuK31cXG4rXFxuIGludCBwcmVfc2V2X3J1bihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZzdm1fZGF0YSwgY3B1KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG5pbmRleCBjMWU2ZDYyNTEyYjk1Li45ZDYwN2I5OGJkMDY3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTQ0MDAsMTYgKzQ0MDAsNiBAQCBzdGF0aWMgdm9pZCBzdm1fY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHZjcHUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHN2bV92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG4tXFx0aWYgKHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2VuZWVkX2luaXQpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0jZW5kaWZcXG4tXFxuLVxcdHJldHVybiAxO1xcbi19XFxuLVxcbiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuQEAgLTUzNzYsNyArNTM2Niw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLFxcbiBcXHQuZmx1c2hfdGxiX2d1ZXN0ID0gc3ZtX2ZsdXNoX3RsYl9ndWVzdCxcXG4gXFxuLVxcdC52Y3B1X3ByZV9ydW4gPSBzdm1fdmNwdV9wcmVfcnVuLFxcbiBcXHQudmNwdV9ydW4gPSBzdm1fdmNwdV9ydW4sXFxuIFxcdC5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCxcXG4gXFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSBzdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcXG5AQCAtNTQzNCw2ICs1NDIzLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbitcXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uLFxcbiBcXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcXG4gXFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcXG4gXFx0Lm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IGEzMjdiZjc1MWVjZDUuLjY2YjQ0YjU0NjA4ZTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG5AQCAtOTc5LDYgKzk3OSw3IEBAIHZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlXFxuIHZvaWQgc2V2X2VzX3VubWFwX2doY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xcbiBcXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbitib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcXG4gaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fZW5jX3JlZ2lvbiAqcmFuZ2UpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuaW5kZXggMDRmOTg2ZTNkNDM5YS4uMGZmMzIzMGZkOTVlOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuQEAgLTE0MCwxMiArMTQwLDEwIEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dm14X3ZjcHVfcHV0KHZjcHUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZ0X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3N0YXRpYyBib29sIHZ0X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbi1cXHRcXHRyZXR1cm4gdGR4X3ZjcHVfcHJlX3J1bih2Y3B1KTtcXG4tXFxuLVxcdHJldHVybiB2bXhfdmNwdV9wcmVfcnVuKHZjcHUpO1xcbitcXHRyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24odmNwdSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcXG5AQCAtMTY1LDYgKzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0cmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XFxuK1xcdFxcdFdBUk5fT05fT05DRSh0b192dCh2Y3B1KS1cXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdnRfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KGlzX3RkX3ZjcHUodmNwdSkpKVxcbkBAIC05MzksMTEgKzk0NywxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQuZmx1c2hfdGxiX2d2YSA9IHZ0X29wKGZsdXNoX3RsYl9ndmEpLFxcbiBcXHQuZmx1c2hfdGxiX2d1ZXN0ID0gdnRfb3AoZmx1c2hfdGxiX2d1ZXN0KSxcXG4gXFxuLVxcdC52Y3B1X3ByZV9ydW4gPSB2dF9vcCh2Y3B1X3ByZV9ydW4pLFxcbitcXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxcbiBcXHQudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksXFxuIFxcdC5oYW5kbGVfZXhpdCA9IHZ0X29wKGhhbmRsZV9leGl0KSxcXG4gXFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcXG4gXFx0LnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXFxuK1xcdC51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksXFxuIFxcdC5zZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKHNldF9pbnRlcnJ1cHRfc2hhZG93KSxcXG4gXFx0LmdldF9pbnRlcnJ1cHRfc2hhZG93ID0gdnRfb3AoZ2V0X2ludGVycnVwdF9zaGFkb3cpLFxcbiBcXHQucGF0Y2hfaHlwZXJjYWxsID0gdnRfb3AocGF0Y2hfaHlwZXJjYWxsKSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5pbmRleCBkMWFmMGE3NTJlOTdlLi5iMjcyYzIwNTg2YTc0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTg5NywxMyArODk3LDEwIEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHRkeC1cXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7XFxuIH1cXG4gXFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rYm9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0aWYgKHVubGlrZWx5KHRvX3RkeCh2Y3B1KS1cXHUwMDNlc3RhdGUgIT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCB8fFxcbi1cXHRcXHQgICAgIHRvX2t2bV90ZHgodmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdHJldHVybiAxO1xcbitcXHRyZXR1cm4gdG9fdGR4KHZjcHUpLVxcdTAwM2VzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8XFxuK1xcdCAgICAgICB0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFO1xcbiB9XFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCBlNGI5YWM3ZmVkOWYwLi43NjE2MGFkZjgyOTcwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTYwMzUsNyArNjAzNSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiAgKiB3aXRoIHVuc3Jlc3RyaWN0ZWQgZ3Vlc3QgbW9kZSBkaXNhYmxlZCkgYW5kIEtWTSBjYW4ndCBmYWl0aGZ1bGx5IGVtdWxhdGUgdGhlXFxuICAqIGN1cnJlbnQgdkNQVSBzdGF0ZS5cXG4gICovXFxuLXN0YXRpYyBib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XFxuIFxcbkBAIC02MTEwLDE2ICs2MTEwLDYgQEAgc3RhdGljIGludCBoYW5kbGVfaW52YWxpZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0aWYgKHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpKSB7XFxuLVxcdFxcdGt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMTtcXG4tfVxcbi1cXG4gLypcXG4gICogSW5kaWNhdGUgYSBidXN5LXdhaXRpbmcgdmNwdSBpbiBzcGlubG9jay4gV2UgZG8gbm90IGVuYWJsZSB0aGUgUEFVU0VcXG4gICogZXhpdGluZywgc28gb25seSBnZXQgaGVyZSBvbiBjcHUgd2l0aCBQQVVTRS1Mb29wLUV4aXRpbmcuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcXG5pbmRleCA0MDk4NTgwNzQyNDYyLi5jZGIzOGQ5NDBjZmI3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcXG5AQCAtMjEsNyArMjEsNiBAQCBpbnQgdm14X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTtcXG4gdm9pZCB2bXhfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSk7XFxuIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4taW50IHZteF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcXG4gdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xcbkBAIC0zMSw2ICszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xcbiB2b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCB2bXhfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pO1xcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cXG4gaW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7XFxuQEAgLTEzNyw3ICsxMzcsNyBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdGR4X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xcbiB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK2Jvb2wgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcXG4gdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtODg2Nyw3ICs4ODY3LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgICAgIWt2bV9hcGljX2luaXRfc2lwaV9hbGxvd2VkKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHJldHVybiBrdm1feDg2X2NhbGwodmNwdV9wcmVfcnVuKSh2Y3B1KTtcXG4rXFx0aWYgKGt2bV94ODZfY2FsbCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSh2Y3B1KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoa3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKSB7XFxuK1xcdFxcdGt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcXG5pbmRleCA1NzgyODM4OTNhYjM3Li5jODM3OTEyNGIzMTcyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXFxuQEAgLTIsNiArMiw3IEBAXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJwcm9jZXNzb3IuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtbS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuQEAgLTksOSArMTAsMjMgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gXFxuLSNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHgyMDAwXFxuKyNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHg4MFxcbiBcXG4tc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtO1xcbisvKlxcbisgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICsgMHhmZTAwLiAgVFIgc3RhcnRzIGF0XFxuKyAqIG9mZnNldCAweGZlOTAsIGFuZCBhdHRyaWJ1dGVzIGlzIHRoZSBzZWNvbmQgMTYtYml0IGZpZWxkIGluIHRoZSBkZXNjcmlwdG9yLlxcbisgKi9cXG4rI2RlZmluZSBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUXFx0MHhmZTkyXFxuKyNkZWZpbmUgU01SQU1fR1BBXFx0XFx0XFx0MHgxMDAwMDAwXFxuK1xcbisvKlxcbisgKiBTTUkgaGFuZGxlciB0aGF0IHJ1bnMgaW4gMTYtYml0IFJlYWwgTW9kZS4gIFN5bmNzIHdpdGggTDAgdmlhIHBvcnQgSS9PLCB0aGVuXFxuKyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLlxcbisgKi9cXG4rc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7XFxuK1xcdDB4ZTQsIEFSQklUUkFSWV9JT19QT1JULFxcdC8qIElOICRBUkJJVFJBUllfSU9fUE9SVCwgJWFsICovXFxuK1xcdDB4MGYsIDB4YWEsXFx0XFx0XFx0LyogUlNNICovXFxuK307XFxuIFxcbiBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXFxuIHtcXG5AQCAtMTksOCArMzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXFxuIFxcdCAqIEdlbmVyYXRlIGFuIGV4aXQgdG8gTDAgdXNlcnNwYWNlLCBpLmUuIG1haW4oKSwgdmlhIEkvTyB0byBhblxcbiBcXHQgKiBhcmJpdHJhcnkgcG9ydC5cXG4gXFx0ICovXFxuLVxcdGFzbSB2b2xhdGlsZShcXFwiaW5iICUlZHgsICUlYWxcXFwiXFxuLVxcdFxcdCAgICAgOiA6IFtwb3J0XSBcXFwiZFxcXCIgKEFSQklUUkFSWV9JT19QT1JUKSA6IFxcXCJyYXhcXFwiKTtcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCJpbmIgJFxcXCIgX19zdHJpbmdpZnkoQVJCSVRSQVJZX0lPX1BPUlQpIFxcXCIsICUlYWxcXFwiXFxuK1xcdFxcdCAgICAgOjo6IFxcXCJyYXhcXFwiKTtcXG4rXFx0R1VFU1RfRkFJTChcXFwiTDIgcmVzdW1lZCBhZnRlciBzdHVmZmluZyBpbnZhbGlkIGd1ZXN0IHN0YXRlXFxcIik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbkBAIC00NiwzNSArNjIsNTAgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4rc3RhdGljIHZvaWQgdmNwdV9ydW5fdG9faW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhbnRfbDIpXFxuIHtcXG4tXFx0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcXG4tXFx0c3RydWN0IGt2bV9zcmVncyBzcmVncztcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX3J1biAqcnVuO1xcbi1cXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuK1xcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVxcdTAwM2VydW47XFxuIFxcbi1cXHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XFxuK1xcdHZjcHVfcnVuKHZjcHUpO1xcbiBcXG4tXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgbDFfZ3Vlc3RfY29kZSk7XFxuK1xcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuIFxcbi1cXHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi9cXG4tXFx0dmNwdV9hbGxvY192bXgodm0sIFxcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcXG4tXFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcXG4rXFx0VEVTVF9BU1NFUlQocnVuLVxcdTAwM2Vpby5wb3J0ID09IEFSQklUUkFSWV9JT19QT1JUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoISEocnVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpID09IHdhbnRfbDIgIHx8XFxuK1xcdFxcdCAgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X0dVRVNUX01PREUpKSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBJTiBmcm9tIHBvcnQgMHgleCBmcm9tIEwldSwgZ290IHBvcnQgMHgleCBmcm9tIEwldVxcXCIsXFxuK1xcdFxcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgMSArIHdhbnRfbDIsIHJ1bi1cXHUwMDNlaW8ucG9ydCxcXG4rXFx0XFx0ICAgIDEgKyAhIShydW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX1JVTl9YODZfR1VFU1RfTU9ERSkpO1xcbit9XFxuIFxcbi1cXHR2Y3B1X3J1bih2Y3B1KTtcXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtX2NyZWF0ZV9hbmRfcnVuX2wyKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUpXFxuK3tcXG4rXFx0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcbitcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGwxX2d1ZXN0X2NvZGUpO1xcbiBcXG4tXFx0cnVuID0gdmNwdS1cXHUwMDNlcnVuO1xcbitcXHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi9cXG4rXFx0dmNwdV9hbGxvY192bXgodm0sIFxcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcXG4rXFx0dmNwdV9hcmdzX3NldCgqdmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cXG4gXFx0ICogUnVubmluZyBMMSBzaG91bGQgbGF1bmNoIEwyIHdpdGhvdXQgdHJpZ2dlcmluZyBhbiBleGl0IHRvIHVzZXJzcGFjZS5cXG4gXFx0ICovXFxuLVxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcdHZjcHVfcnVuX3RvX2lvKCp2Y3B1LCB0cnVlKTtcXG4gXFxuLVxcdFRFU1RfQVNTRVJUKHJ1bi1cXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCxcXG4tXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBJTiBmcm9tIHBvcnQgJWQgZnJvbSBMMiwgZ290IHBvcnQgJWRcXFwiLFxcbi1cXHRcXHQgICAgQVJCSVRSQVJZX0lPX1BPUlQsIHJ1bi1cXHUwMDNlaW8ucG9ydCk7XFxuK1xcdHJldHVybiB2bTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9zcmVncyBzcmVncztcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMihcXHUwMDI2dmNwdSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTdHVmZiBpbnZhbGlkIGd1ZXN0IHN0YXRlIGZvciBMMiBieSBtYWtpbmcgVFIgdW51c2FibGUuICBUaGUgbmV4dFxcbkBAIC05Niw0ICsxMjcsNDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0VEVTVF9GQUlMKFxcXCJVbmV4cGVjdGVkIHVjYWxsOiAlbHVcXFwiLCB1Yy5jbWQpO1xcbiBcXHR9XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20odm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHR1MTYgKnRyX2F0dHJzO1xcbitcXG4rXFx0aWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX1g4Nl9TTU0pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR2bSA9IHZtX2NyZWF0ZV9hbmRfcnVuX2wyKFxcdTAwMjZ2Y3B1KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEluamVjdCBTTUkgd2hpbGUgTDIgaXMgYWN0aXZlLCBydW4gdGhlIHZDUFUgdG8gZ2V0IEkvTyBleGl0IGZyb20gTDEsXFxuK1xcdCAqIHRoZW4gc3R1ZmYgVFIgaW4gdGhlIFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzbyB0aGF0IFJTTSByZXN0b3Jlc1xcbitcXHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0c2V0dXBfc21yYW0odm0sIHZjcHUsIFNNUkFNX0dQQSwgc21pX2hhbmRsZXIsIHNpemVvZihzbWlfaGFuZGxlcikpO1xcbitcXHRpbmplY3Rfc21pKHZjcHUpO1xcbitcXG4rXFx0dmNwdV9ydW5fdG9faW8odmNwdSwgZmFsc2UpO1xcbitcXG4rXFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovXFxuK1xcdHRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgKyBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUKTtcXG4rXFx0KnRyX2F0dHJzIFxcdTAwMjY9IH5CSVQoNyk7XFxuK1xcbitcXHR2Y3B1X3J1bih2Y3B1KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZvciBSU00sIEwxIGdldHMgdGhlIFNIVVRET1dOIGJlY2F1c2UgUlNNIGlzIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkXFxuK1xcdCAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS5cXG4rXFx0ICovXFxuK1xcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9TSFVURE9XTik7XFxuK1xcdGt2bV92bV9mcmVlKHZtKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XFxuK1xcbitcXHR0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUoKTtcXG4rXFx0dGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlX3JzbSgpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjA4LjQxNTc5NTE1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODAzNDMwNjEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fU01NXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiWDg2X1gyQVBJQ1wiLFxuICAgIFwiWDg2X01DRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtdWxhdG9yX2xlYXZlX3NtbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIEtWTSBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgaW52YWxpZCBndWVzdCBzdGF0ZSB3aGVuIGxlYXZpbmcgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgdGhlIFJTTSBpbnN0cnVjdGlvbi4gSXQgbW9kaWZpZXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gY2hlY2sgaWYgdW5oYW5kbGVhYmxlIGVtdWxhdGlvbiBpcyByZXF1aXJlZCwgYW5kIGlmIHNvLCByZXR1cm5zIGBYODZFTVVMX1VOSEFORExFQUJMRWAuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGB2Y3B1X3ByZV9ydW5gIG9wIGludG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgdG8gc3VwcG9ydCB0aGlzIGNoZWNrLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiBgZW11bGF0b3JfbGVhdmVfc21tYCB0byB0ZXN0IHRoaXMgbmV3IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYWI4N2E4Mzc4NmQzMzVhNmIyN2Q1ZGQyNWI4ZjUyMWVjZDRiYzc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwMjo1ODowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA1Y2IxMzJlY2EzYzM1Li5lMjEzYzlhZTNlMzAxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTYzLDExICs2MywxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKVxuICNlbmRpZlxuIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d2YSlcbiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndWVzdClcbi1LVk1fWDg2X09QKHZjcHVfcHJlX3J1bilcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbilcbiBLVk1fWDg2X09QKHZjcHVfcnVuKVxuIEtWTV9YODZfT1AoaGFuZGxlX2V4aXQpXG4gS1ZNX1g4Nl9PUChza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKVxuIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpXG4gS1ZNX1g4Nl9PUChnZXRfaW50ZXJydXB0X3NoYWRvdylcbiBLVk1fWDg2X09QKHBhdGNoX2h5cGVyY2FsbClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggN2EyNTg4MzE2MTZmYS4uMjgzODQ3NjE5ZmY4OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTg2LDEzICsxNTg2LDE1IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCpmbHVzaF90bGJfZ3Vlc3QpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4tXHRpbnQgKCp2Y3B1X3ByZV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rXHRib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uICgqdmNwdV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0XHQgIHU2NCBydW5fZmxhZ3MpO1xuIFx0aW50ICgqaGFuZGxlX2V4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZXhpdF9mYXN0cGF0aCk7XG4gXHRpbnQgKCpza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitcdGJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK1xuIFx0dm9pZCAoKnNldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKTtcbiBcdHUzMiAoKmdldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnBhdGNoX2h5cGVyY2FsbCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zbW0uYyBiL2FyY2gveDg2L2t2bS9zbW0uY1xuaW5kZXggYTQ0NjQ4N2JkZDVjZi4uNjU2YTM4ZGFkN2U3YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zbW0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3NtbS5jXG5AQCAtNjQ5LDYgKzY0OSwxMCBAQCBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuICNlbmRpZlxuIFx0XHRyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCBcdTAwMjZzbXJhbS5zbXJhbTMyKTtcbiBcbitcdGlmIChyZXQgPT0gWDg2RU1VTF9DT05USU5VRSBcdTAwMjZcdTAwMjZcbitcdCAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpXG4rXHRcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuK1xuIFx0LypcbiBcdCAqIElmIFJTTSBmYWlscyBhbmQgdHJpZ2dlcnMgc2h1dGRvd24sIGFyY2hpdGVjdHVyYWxseSB0aGUgc2h1dGRvd25cbiBcdCAqIG9jY3VycyAqYmVmb3JlKiB0aGUgdHJhbnNpdGlvbiB0byBndWVzdCBtb2RlLiAgQnV0IGR1ZSB0byBLVk0nc1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA5MGEwOGQzNmQ4NDNkLi5mY2I0MWRmZGU0YzAyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTM1NTYsNiArMzU1NiwxMSBAQCB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0X19zZXZfZXNfdW5tYXBfZ2hjYihzdm0pO1xuIH1cbiBcbitib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gdG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQ7XG4rfVxuK1xuIGludCBwcmVfc2V2X3J1bihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFx1MDAyNnN2bV9kYXRhLCBjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBjMWU2ZDYyNTEyYjk1Li45ZDYwN2I5OGJkMDY3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTQ0MDAsMTYgKzQ0MDAsNiBAQCBzdGF0aWMgdm9pZCBzdm1fY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuLVx0aWYgKHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlbmVlZF9pbml0KVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0jZW5kaWZcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5AQCAtNTM3Niw3ICs1MzY2LDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLFxuIFx0LmZsdXNoX3RsYl9ndWVzdCA9IHN2bV9mbHVzaF90bGJfZ3Vlc3QsXG4gXG4tXHQudmNwdV9wcmVfcnVuID0gc3ZtX3ZjcHVfcHJlX3J1bixcbiBcdC52Y3B1X3J1biA9IHN2bV92Y3B1X3J1bixcbiBcdC5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gc3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG5AQCAtNTQzNCw2ICs1NDIzLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuK1x0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbiBcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxuIFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggYTMyN2JmNzUxZWNkNS4uNjZiNDRiNTQ2MDhlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC05NzksNiArOTc5LDcgQEAgdm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVcbiB2b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4rYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcbiBpbnQgc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fZW5jX3JlZ2lvbiAqcmFuZ2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDA0Zjk4NmUzZDQzOWEuLjBmZjMyMzBmZDk1ZTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xNDAsMTIgKzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2bXhfdmNwdV9wdXQodmNwdSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdnRfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbi1cdFx0cmV0dXJuIHRkeF92Y3B1X3ByZV9ydW4odmNwdSk7XG4tXG4tXHRyZXR1cm4gdm14X3ZjcHVfcHJlX3J1bih2Y3B1KTtcbitcdHJldHVybiBpc190ZF92Y3B1KHZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG5AQCAtMTY1LDYgKzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuK1x0XHRXQVJOX09OX09OQ0UodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpO1xuK31cbitcbiBzdGF0aWMgaW50IHZ0X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIHtcbiBcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcbkBAIC05MzksMTEgKzk0NywxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSxcbiBcdC5mbHVzaF90bGJfZ3Vlc3QgPSB2dF9vcChmbHVzaF90bGJfZ3Vlc3QpLFxuIFxuLVx0LnZjcHVfcHJlX3J1biA9IHZ0X29wKHZjcHVfcHJlX3J1biksXG4rXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuIFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuIFx0LmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLFxuIFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiBcdC51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuK1x0LnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQgPSB2dF9vcCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSxcbiBcdC5zZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKHNldF9pbnRlcnJ1cHRfc2hhZG93KSxcbiBcdC5nZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKGdldF9pbnRlcnJ1cHRfc2hhZG93KSxcbiBcdC5wYXRjaF9oeXBlcmNhbGwgPSB2dF9vcChwYXRjaF9oeXBlcmNhbGwpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBkMWFmMGE3NTJlOTdlLi5iMjcyYzIwNTg2YTc0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTg5NywxMyArODk3LDEwIEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7XG4gfVxuIFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAodW5saWtlbHkodG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbi1cdFx0ICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gdG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbitcdCAgICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGU0YjlhYzdmZWQ5ZjAuLjc2MTYwYWRmODI5NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjAzNSw3ICs2MDM1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJ3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZVxuICAqIGN1cnJlbnQgdkNQVSBzdGF0ZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG5AQCAtNjExMCwxNiArNjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHtcbi1cdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbi19XG4tXG4gLypcbiAgKiBJbmRpY2F0ZSBhIGJ1c3ktd2FpdGluZyB2Y3B1IGluIHNwaW5sb2NrLiBXZSBkbyBub3QgZW5hYmxlIHRoZSBQQVVTRVxuICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDQwOTg1ODA3NDI0NjIuLmNkYjM4ZDk0MGNmYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0yMSw3ICsyMSw2IEBAIGludCB2bXhfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcbiB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcbkBAIC0zMSw2ICszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuIHZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBpbnQgdm14X3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKTtcbkBAIC0xMzcsNyArMTM3LDcgQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xuIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rYm9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XG4gdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODg2Nyw3ICs4ODY3LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7XG4rXHRpZiAoa3ZtX3g4Nl9jYWxsKHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pKHZjcHUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpIHtcbitcdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMTtcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuaW5kZXggNTc4MjgzODkzYWIzNy4uYzgzNzkxMjRiMzE3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbkBAIC0yLDYgKzIsNyBAQFxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzbW0uaFwiXG4gI2luY2x1ZGUgXCJ2bXguaFwiXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbkBAIC05LDkgKzEwLDIzIEBAXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gXG4tI2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDIwMDBcbisjZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4ODBcbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqdm07XG4rLypcbisgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICsgMHhmZTAwLiAgVFIgc3RhcnRzIGF0XG4rICogb2Zmc2V0IDB4ZmU5MCwgYW5kIGF0dHJpYnV0ZXMgaXMgdGhlIHNlY29uZCAxNi1iaXQgZmllbGQgaW4gdGhlIGRlc2NyaXB0b3IuXG4rICovXG4rI2RlZmluZSBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUXHQweGZlOTJcbisjZGVmaW5lIFNNUkFNX0dQQVx0XHRcdDB4MTAwMDAwMFxuK1xuKy8qXG4rICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlblxuKyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLlxuKyAqL1xuK3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuK1x0MHhlNCwgQVJCSVRSQVJZX0lPX1BPUlQsXHQvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqL1xuK1x0MHgwZiwgMHhhYSxcdFx0XHQvKiBSU00gKi9cbit9O1xuIFxuIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiB7XG5AQCAtMTksOCArMzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXG4gXHQgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW5cbiBcdCAqIGFyYml0cmFyeSBwb3J0LlxuIFx0ICovXG4tXHRhc20gdm9sYXRpbGUoXCJpbmIgJSVkeCwgJSVhbFwiXG4tXHRcdCAgICAgOiA6IFtwb3J0XSBcImRcIiAoQVJCSVRSQVJZX0lPX1BPUlQpIDogXCJyYXhcIik7XG4rXHRhc20gdm9sYXRpbGUoXCJpbmIgJFwiIF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSBcIiwgJSVhbFwiXG4rXHRcdCAgICAgOjo6IFwicmF4XCIpO1xuK1x0R1VFU1RfRkFJTChcIkwyIHJlc3VtZWQgYWZ0ZXIgc3R1ZmZpbmcgaW52YWxpZCBndWVzdCBzdGF0ZVwiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG5AQCAtNDYsMzUgKzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3N0YXRpYyB2b2lkIHZjcHVfcnVuX3RvX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YW50X2wyKVxuIHtcbi1cdGd2YV90IHZteF9wYWdlc19ndmE7XG4tXHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV9ydW4gKnJ1bjtcbi1cdHN0cnVjdCB1Y2FsbCB1YztcbitcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbi1cdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbitcdHZjcHVfcnVuKHZjcHUpO1xuIFxuLVx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbitcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4gXG4tXHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi9cbi1cdHZjcHVfYWxsb2Nfdm14KHZtLCBcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcbi1cdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XG4rXHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpID09IHdhbnRfbDIgIHx8XG4rXHRcdCAgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X0dVRVNUX01PREUpKSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0IDB4JXggZnJvbSBMJXUsIGdvdCBwb3J0IDB4JXggZnJvbSBMJXVcIixcbitcdFx0ICAgIEFSQklUUkFSWV9JT19QT1JULCAxICsgd2FudF9sMiwgcnVuLVx1MDAzZWlvLnBvcnQsXG4rXHRcdCAgICAxICsgISEocnVuLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSk7XG4rfVxuIFxuLVx0dmNwdV9ydW4odmNwdSk7XG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtX2NyZWF0ZV9hbmRfcnVuX2wyKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUpXG4re1xuK1x0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiBcbi1cdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuK1x0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXG4rXHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2dm14X3BhZ2VzX2d2YSk7XG4rXHR2Y3B1X2FyZ3Nfc2V0KCp2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cbiBcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXG4gXHQgKi9cbi1cdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4rXHR2Y3B1X3J1bl90b19pbygqdmNwdSwgdHJ1ZSk7XG4gXG4tXHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCxcbi1cdFx0ICAgIFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkXCIsXG4tXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQpO1xuK1x0cmV0dXJuIHZtO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV9hbmRfcnVuX2wyKFx1MDAyNnZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIFN0dWZmIGludmFsaWQgZ3Vlc3Qgc3RhdGUgZm9yIEwyIGJ5IG1ha2luZyBUUiB1bnVzYWJsZS4gIFRoZSBuZXh0XG5AQCAtOTYsNCArMTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRkZWZhdWx0OlxuIFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIHVjYWxsOiAlbHVcIiwgdWMuY21kKTtcbiBcdH1cbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlX3JzbSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0dTE2ICp0cl9hdHRycztcbitcbitcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfU01NKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMihcdTAwMjZ2Y3B1KTtcbitcbitcdC8qXG4rXHQgKiBJbmplY3QgU01JIHdoaWxlIEwyIGlzIGFjdGl2ZSwgcnVuIHRoZSB2Q1BVIHRvIGdldCBJL08gZXhpdCBmcm9tIEwxLFxuK1x0ICogdGhlbiBzdHVmZiBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHNvIHRoYXQgUlNNIHJlc3RvcmVzXG4rXHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxuK1x0ICovXG4rXHRzZXR1cF9zbXJhbSh2bSwgdmNwdSwgU01SQU1fR1BBLCBzbWlfaGFuZGxlciwgc2l6ZW9mKHNtaV9oYW5kbGVyKSk7XG4rXHRpbmplY3Rfc21pKHZjcHUpO1xuK1xuK1x0dmNwdV9ydW5fdG9faW8odmNwdSwgZmFsc2UpO1xuK1xuK1x0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovXG4rXHR0cl9hdHRycyA9IGFkZHJfZ3BhMmh2YSh2bSwgU01SQU1fR1BBICsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XG4rXHQqdHJfYXR0cnMgXHUwMDI2PSB+QklUKDcpO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXG4rXHQvKlxuK1x0ICogRm9yIFJTTSwgTDEgZ2V0cyB0aGUgU0hVVERPV04gYmVjYXVzZSBSU00gaXMgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWRcbitcdCAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS5cbitcdCAqL1xuK1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX1NIVVRET1dOKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4rXG4rXHR0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUoKTtcbitcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODowOC40MTU3OTc1MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgzNTk0ODIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSB4ODYgUGF0Y2g6IEZvY3VzIG9uIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCB0d2Vha3MgdGhlIEtWTSB4ODYgb3BlcmF0aW9ucy4gSXQncyBhZGRpbmcgYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgdG8gdGhlIGBzdHJ1Y3Qga3ZtX3g4Nl9vcHNgLiBJIGltbWVkaWF0ZWx5IHNlZSBpdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBhcmVhczogYGFyY2gveDg2L2t2bS9zbW0uY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgLCBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0IG1lYW5zIGl0J3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgS1ZNIGRlYWxzIHdpdGggdW5oYW5kbGVhYmxlIGVtdWxhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGV4aXRpbmcgU01NIHZpYSB0aGUgUlNNIGluc3RydWN0aW9uLiBTcGVjaWZpY2FsbHksIGlmIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpcyBzZXQsIGl0IHdpbGwgcmV0dXJuIGBYODZFTVVMX1VOSEFORExFQUJMRWAgd2l0aGluIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLiBJdCBsb29rcyBsaWtlIGl0J3MgYWxzbyByZWZhY3RvcmluZyB0aGUgYHZjcHVfcHJlX3J1bmAgbG9naWMsIHNwbGl0dGluZyBpdCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgdGhhdCBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgZmxhZy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsPyBHaXZlbiB0aGUgZmlsZSBjaGFuZ2VzLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIEl0J3MgbW9kaWZ5aW5nIGNvcmUgS1ZNIHg4NiBsb2dpYywgYW5kIGl0J3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhY3RpdmUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNpbmNlIEtWTSBpcyB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yLiBXZSBrbm93IHN5emthbGxlciBpcyBnb2luZyB0byBoaXQgS1ZNIGhhcmQgd2l0aCB0aGUgYC9kZXYva3ZtYCBpbnRlcmZhY2UsIHNvIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGVzdGVkIGZvciBzdXJlLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgcGFydHMgdGhhdCBhcmUgbmV3IG9yIGNoYW5nZWQ6XG5cbiogICBgZW11bGF0b3JfbGVhdmVfc21tYCAobW9kaWZpZWQpXG4qICAgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYFxuKiAgIGB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYFxuKiAgIGB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYFxuKiAgIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmBcbiogICBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgXG4qICAgYGt2bV94ODZfdmNwdV9wcmVfcnVuYCAobW9kaWZpZWQpXG5cbmBlbXVsYXRvcl9sZWF2ZV9zbW1gIGp1bXBzIG91dCBpbW1lZGlhdGVseSBhcyBhIGdvb2QgdGFyZ2V0LiBJIGtub3cgdGhhdCdzIGNhbGxlZCB3aGVuIGVtdWxhdGluZyB0aGUgUlNNIGluc3RydWN0aW9uLCB3aGljaCBpcyBvZnRlbiBhIHNvdXJjZSBvZiBidWdzIGluIGh5cGVydmlzb3JzLiBUaGVuIEkgbm90ZSBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gIGlzIGEgZ29vZCBvbmUsIGJ1dCB3YWl0LCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLi4uIGFoLCBubyB3YWl0LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGNhbGxzIGl0LCB3aGljaCBpcyB0aGUgbWFpbiBlbnRyeSBmb3IgdGhlIGBLVk1fUlVOYCBpb2N0bC4gSXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBsZXQncyBmb2N1cyBvbiBgZW11bGF0b3JfbGVhdmVfc21tYC4gSSdsbCBkaWcgaW50byBpdCBpbiBgYXJjaC94ODYva3ZtL3NtbS5jYC4gVGhlbiBJJ2xsIGNoZWNrIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgdG8gZm9sbG93IHRoZSBwYXRoIGFuZCBjaGVjayB0aGVpciB1c2FnZXMuIE5vdyBpdCdzIHRpbWUgdG8gdGVzdCwgdGVzdCwgdGVzdC4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgdmVyaWZ5IHRoaXMgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODoxOS4yNTE3NDg5MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjk2MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtdWxhdG9yX2xlYXZlX3NtbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy01NzItXFxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbmFyY2gveDg2L2t2bS9zbW0uYy01NzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxNTk6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2MC12b2lkIHByb2Nlc3Nfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmg9MTYzPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2NS0vKlxcbmFyY2gveDg2L2t2bS9zbW0uaDoxNjY6ICogZW11bGF0b3JfbGVhdmVfc21tIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBzbyB0aGVcXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTY3LSAqIHN0dWIgaXMgZGVmaW5lZCBpbiB4ODYuYy5cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc2MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU2LVxcdC5pc19zbW0gICAgICAgICAgICAgID0gZW11bGF0b3JfaXNfc21tLFxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODU3OlxcdC5sZWF2ZV9zbW0gICAgICAgICAgID0gZW11bGF0b3JfbGVhdmVfc21tLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU4LVxcdC50cmlwbGVfZmF1bHQgICAgICAgID0gZW11bGF0b3JfdHJpcGxlX2ZhdWx0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODoxOS4zNjQwNTI1MDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODczMjY4NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWUgS1ZNIGNvZGUgYW5kIG5vdGljaW5nIGEgcGF0dGVybi4gSXQgbG9va3MgbGlrZSBgZW11bGF0b3JfbGVhdmVfc21tYCBpbiBgYXJjaC94ODYva3ZtL3NtbS5jYCBpcyBub24tc3RhdGljLCBidXQgb25seSB3aGVuIGBDT05GSUdfS1ZNX1NNTWAgaXMgZW5hYmxlZC4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzdWdnZXN0cyBhIHNwZWNpZmljIHB1cnBvc2UgcmVsYXRlZCB0byBTTU0gaGFuZGxpbmcuXG5cbk5leHQsIEkgc2VlIHRoYXQgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgaXMgYWxzbyBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyBpdCdzIGV4cG9ydGVkIGZvciB1c2UgZWxzZXdoZXJlIHdpdGhpbiB0aGUgS1ZNIHN5c3RlbSwgcGVyaGFwcyB0byBpbmRpY2F0ZSBzb21lIGtpbmQgb2Ygc3RhdGUgb3IgcmVxdWlyZW1lbnQgZHVyaW5nIFZNWCBvcGVyYXRpb25zLiBUaGVuIHRoZXJlIGFyZSBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGluIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCBhbmQgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIEJvdGggb2YgdGhlc2UgYXJlIGFsc28gbm9uLXN0YXRpYy4gVGhlIG5hbWVzIGFyZSBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgc28gSSdtIHRoaW5raW5nIHRoZXkncmUgZmxhZ3Mgb3IgaW5kaWNhdG9ycyBmb3Igd2hldGhlciBhIFZDUFUgbmVlZHMgc29tZSBpbml0aWFsaXphdGlvbiBzcGVjaWZpYyB0byBURFggb3IgU0VWLlxuXG5HaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSB3YW50IHRvIGNvbmZpcm0gaG93IGBDT05GSUdfS1ZNX1NNTWAsIGBDT05GSUdfS1ZNX0FNRF9TRVZgLCBhbmQgYENPTkZJR19LVk1fSU5URUxfVERYYCAoaWYgaXQgZXhpc3RzKSBhcmUgZGVmaW5lZCBhbmQgcmVsYXRlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb25zIGZvciB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgcHJvdmlkZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciB1c2UgaW4gdGhlIHdpZGVyIEtWTSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjI0LjIzNzMyNDM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ1NzU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1NNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE3Mz1jb25maWcgS1ZNX0lPQVBJQ1xcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MjQuMzQ4Nzg5MzMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMDcxMDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHZpcnR1YWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgS1ZNIGFuZCBBTUQncyBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpOlxuXG4qKkludmVzdGlnYXRpbmcgQU1EIFNFViBTdXBwb3J0IGluIEtWTSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgYENPTkZJR19LVk1fQU1EX1NFVmAgb3B0aW9uLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBmbGFnOyBpdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgS1ZNIGJ1aWxkIGluY2x1ZGVzIHN1cHBvcnQgZm9yIEFNRCdzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24uIFdpdGhvdXQgaXQsIFNFViBmZWF0dXJlcyBhcmUgc2ltcGx5IG5vdCBhdmFpbGFibGUsIGFuZCBhbnkgYXR0ZW1wdCB0byB1dGlsaXplIHRoZW0gd2lsbCBmYWlsLCBvciB3b3JzZSwgc2lsZW50bHkgZGVncmFkZSBzZWN1cml0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGVuYWJsZWQ7IGl04oCZcyBmdW5kYW1lbnRhbCB0byB1dGlsaXppbmcgU0VWJ3Mgc2VjdXJpdHkgYmVuZWZpdHMg4oCTIHByb3RlY3RpbmcgVk0gZGF0YSBldmVuIGZyb20gdGhlIGh5cGVydmlzb3IgaXRzZWxmLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgaG93IGl0J3MgZGVmaW5lZCBhbmQgaWYgdGhlcmUgYW55IGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MjcuNDQ5NTAzNzMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTIzNzM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjI3LjU2ODc0NzgwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDEwMDg1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSW50ZWwgVERYIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHRoYXQgc3VwcG9ydHMgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgdGhlIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdvdWxkIGJlIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBpbmRpY2F0b3IuIEkgbWlnaHQgYWxzbyBleHBhbmQgdGhpcyBzZWFyY2ggdG8gaW5jbHVkZSByZWxhdGVkLCB0aG91Z2ggcG9zc2libHkgbGVzcyBzcGVjaWZpYywgY29uZmlndXJhdGlvbiBmbGFncy4gVGhpcyBpbW1lZGlhdGUgY2hlY2sgd2lsbCBzYXZlIGEgbG90IG9mIHRpbWUgYnkgdGVsbGluZyBtZSBpZiBURFggaXMgZXZlbiBvbiB0aGUgdGFibGUuIElmIHRoYXQncyB0aGUgY2FzZSwgSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIG5leHQgc3RlcHMsIG1heWJlIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgb3IgdG8gZGlnIGludG8gbW9yZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlIGNvZGUuIEkganVzdCB3YW50IGEgcXVpY2sgcG9pbnRlciB0byB0ZWxsIG1lIHdoZXJlIHRvIGdvIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MzAuNTY5NzU4OTQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzcwNjM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODozMC42Njc0NzczNzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzAzMzQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgSW50ZWwgVERYKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGVzZSBzcGVjaWZpYyBLVk0gZmVhdHVyZXM6IGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBLVk1fSU5URUxfVERYYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgd2hldGhlciBgS1ZNX0lOVEVMX1REWGAgaXMgYWN0dWFsbHkgdGhlICpjb3JyZWN0KiBjb25maWd1cmF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yLCBvciBpZiB3ZSBuZWVkIHRvIGFzc2VzcyB0aGUgd2hvbGUgc3VpdGUgdG8gcHJvcGVybHkgdXNlIHRoZSB0YXJnZXQgZmVhdHVyZS4gSXQgc2VlbXMgbG9naWNhbCB0byBzdGFydCB0aGVyZS4gU28sIGxldCdzIGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSByaWdodCBjb25maWcgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWF5IHJlbGF0ZSBvciBhcmUgcmVxdWlyZWQuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcgYSBzeXN0ZW0gdG8gdXNlIFREWC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODozMy45NDA1MTM4MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDYxOTcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipLVk1fSU5URUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMDc9Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwOTogICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFxcdTAwMjZcXHUwMDI2IEVYUEVSVFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTExMC0gICAgICAgIGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiU29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMjQ6XFx0ZGVwZW5kcyBvbiBYODZfU0dYIFxcdTAwMjZcXHUwMDI2IEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjM0LjA2MTEzOTI4MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxMjk5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIERlcGVuZGVuY2llcyBvZiBLVk1fSU5URUxfVERYKipcblxuT2theSwgc28gYEtWTV9JTlRFTF9URFhgLiBSaWdodC4gV2hhdCBleGFjdGx5IGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoYXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBpdCBoaW5nZXMgb24sIGJlY2F1c2UgaWYgSSdtIGdvaW5nIHRvIGNvbmZpZ3VyZSB0aGlzIHByb3Blcmx5LCBJIG5lZWQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIExldCdzIHNlZS4uLiBJJ2xsIGRpdmUgc3RyYWlnaHQgaW50byBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1c3VhbGx5IGxpdmUsIHNvIHRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMuIEnigJltIGJldHRpbmcgdGhlIGFuc3dlciBpcyBidXJpZWQgaW4gdGhlcmUgc29tZXdoZXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MzcuMzMyNDQ1NDE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRjb25maWcgS1ZNX0lOVEVMX1REWFxcbiAxMzU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4gMTM2OlxcdFxcdGRlZmF1bHQgeVxcbiAxMzc6XFx0XFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbiAxMzg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDEzOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE0MDpcXHRcXHRoZWxwXFxuIDE0MTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxcbiAxNDI6XFx0XFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0Y29uZmlnIEtWTV9BTURcXG4gMTQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcXG4gMTQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6MzcuMzMyNjA0Mjc5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzg2NTQ2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgR3JhcGggRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgYEtWTV9JTlRFTF9URFhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGllcyBvbiBgSU5URUxfVERYX0hPU1RgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgbGV0IG1lIHF1aWNrbHkgcGl2b3QgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBBTUQgc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcmVsYXRpb25zaGlwIGlzIHdpdGggYEtWTV9BTURfU0VWYC4gSSB3YW50IHRvIGNyb3NzLXJlZmVyZW5jZSBhbmQgdmVyaWZ5IG15IGN1cnJlbnQgbWVudGFsIG1vZGVsIG9mIHRoZSBpbnRlcmRlcGVuZGVuY2llcyBpbiB0aGVzZSB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXMuIEkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgdXBzdHJlYW0gY2hhbmdlcyB0b28sIHRvIGlkZW50aWZ5IGFueSByZWNlbnQgcmVsZXZhbnQgZGV2ZWxvcG1lbnRzIG9yIGJ1Z2ZpeGVzLiBUaGlzIG1pZ2h0IGFsc28gcHJvdmlkZSBjbHVlcyBhYm91dCBob3cgdGhlIEludGVsIGFuZCBBTUQgaW1wbGVtZW50YXRpb25zIGFyZSBjb252ZXJnaW5nLCBvciBkaXZlcmdpbmcsIG92ZXIgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjQwLjQxMTI2MjI1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXFxuIDE1MTpcXHRcXHQgIChTVk0pIGV4dGVuc2lvbnMuXFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDE1NDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1hbWQuXFxuIDE1NTpcXHRcXG4gMTU2OlxcdGNvbmZpZyBLVk1fQU1EX1NFVlxcbiAxNTc6XFx0XFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4gMTU4OlxcdFxcdGRlZmF1bHQgeVxcbiAxNTk6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fQU1EIFxcdTAwMjZcXHUwMDI2IFg4Nl82NFxcbiAxNjA6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcXHUwMDI2XFx1MDAyNiAhKEtWTV9BTUQ9eSBcXHUwMDI2XFx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxcbiAxNjE6XFx0XFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDE2MjpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gMTYzOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcbiAxNjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9SRUNMQUlNXFxuIDE2NTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTY3OlxcdFxcdGhlbHBcXG4gMTY4OlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIGVuY3J5cHRlZCBWTXMgd2hpY2ggdXNlIFNlY3VyZVxcbiAxNjk6XFx0XFx0ICBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo0MC40MTE0MTYzNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNTA4MjczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBLVk1fQU1EX1NFViBhbmQgUmVsYXRlZCBNb2R1bGVzKipcblxuQWxyaWdodCwgSSBzZWUgdGhlIGRlcGVuZGVuY3kgdHJlZSBmb3IgYEtWTV9BTURfU0VWYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBsZXZlcmFnZXMgYEtWTV9BTURgLCBpcyBidWlsdCBmb3IgYFg4Nl82NGAgYXJjaGl0ZWN0dXJlcywgYW5kIG5lZWRzIGBDUllQVE9fREVWX1NQX1BTUGAgZm9yIGl0cyBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIFNFVidzIHNlY3VyaXR5IGZlYXR1cmVzLiBOb3csIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGRldGFpbHMgb2YgU0VWLCBJIHdhbnQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIGFuZCBkZXBlbmRlbmNpZXMgb2YgYEtWTV9TTU1gIGFzIGEgcHJlbGltaW5hcnkuIFVuZGVyc3RhbmRpbmcgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBLVk0gY29tcG9uZW50cywgcGFydGljdWxhcmx5IG9uIEFNRCBwbGF0Zm9ybXMsIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEl0IG1heSBiZSBrZXkgdG8gYSBob2xpc3RpYyBhcmNoaXRlY3R1cmUgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM2MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6NDMuNzI2NTAyNzU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE4MjpcXHRcXG4gMTgzOlxcdGNvbmZpZyBLVk1fU01NXFxuIDE4NDpcXHRcXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4gMTg1OlxcdFxcdGRlZmF1bHQgeVxcbiAxODY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE4NzpcXHRcXHRoZWxwXFxuIDE4ODpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSlcXG4gMTg5OlxcdFxcdCAgaW4gdmlydHVhbCBtYWNoaW5lcy4gIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIHZpcnR1YWwgbWFjaGluZVxcbiAxOTA6XFx0XFx0ICBmaXJtd2FyZSB0byBpbXBsZW1lbnQgVUVGSSBzZWN1cmUgYm9vdC5cXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRjb25maWcgS1ZNX0hZUEVSVlxcbiAxOTU6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbiAxOTY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE5NzpcXHRcXHRkZWZhdWx0IHlcXG4gMTk4OlxcdFxcdGhlbHBcXG4gMTk5OlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo0My43MjY2MDg1NjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMzQ0OTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgSGFyZHdhcmUgVmlydHVhbGl6YXRpb24gRXh0ZW5zaW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEtWTS1yZWxhdGVkIGV4dGVuc2lvbnM6IGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYW5kIGBLVk1fSU5URUxfVERYYC4gSW1tZWRpYXRlbHksIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSB0aHJlZSBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdGllcyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGVuaGFuY2VtZW50cy4gYEtWTV9TTU1gIGxpa2VseSBkZWFscyB3aXRoIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gYEtWTV9BTURfU0VWYCBkZWZpbml0ZWx5IHJlbGF0ZXMgdG8gQU1EJ3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiwgYSBjcnVjaWFsIGZlYXR1cmUgZm9yIGRhdGEgY29uZmlkZW50aWFsaXR5IGFuZCBpbnRlZ3JpdHkgaW4gVk1zLiBBbmQgdGhlbiB3ZSBoYXZlIGBLVk1fSU5URUxfVERYYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoYXQncyBhbG1vc3QgY2VydGFpbmx5IEludGVsJ3MgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGBJTlRFTF9URFhfSE9TVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBob3N0IHNpZGUgaW1wbGVtZW50YXRpb24gYW5kIGltcGxpY2F0aW9ucy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGFzcGVjdHMgdGhhdCB0aGV5IHdhbnQgbWUgdG8gZm9jdXMgb24/IFdoYXQncyB0aGUgY29udGV4dD8gTGV0J3MgY2hlY2sgYElOVEVMX1REWF9IT1NUYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjQ3LjE0MDA2MjgxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzI2NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTlRFTF9URFhfSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6NDcuMjc0Nzk3Mzc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDQwNzgxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGxpbmUgb2YgdGhvdWdodCwgdGFpbG9yZWQgZm9yIHNvbWVvbmUgd2hvJ3MgYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBsaWtlIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgSU5URUxfVERYX0hPU1QqKlxuXG5SaWdodCwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuICpJTlRFTF9URFhfSE9TVCouIFNvdW5kcyBsaWtlIGl0J3MgYSBrZXkgY29tcG9uZW50IGZvciBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBvbiB0aGUgaG9zdCBzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBzcGVjaWZpY2FsbHkgZnJvbSBhIHN5c3RlbSBkZXNpZ24gYW5kIGludGVncmF0aW9uIHBlcnNwZWN0aXZlLiBJJ20gdGhpbmtpbmcsIFwid2hhdCBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0ICpJTlRFTF9URFhfSE9TVCogcmVsaWVzIG9uIHRvIGZ1bmN0aW9uPyBXaGF0IGxpYnJhcmllcywga2VybmVsIG1vZHVsZXMsIG9yIG90aGVyIHBpZWNlcyBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUgZG9lcyB0aGlzIGNvbXBvbmVudCBuZWVkP1wiIFBlcmhhcHMgaXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMsIGZpcm13YXJlIHJldmlzaW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEJJT1MuIE15IHByaW1hcnkgcXVlc3Rpb24gaXMgdGhpczogXCJXaGVyZSBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZT9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSB0cnVzdGVkIGVudmlyb25tZW50LCB0aGUgaG9zdCdzIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCBwb3RlbnRpYWxseSBhbnkgdmlydHVhbGl6YXRpb24gbGF5ZXJzIGluIHBsYXkuIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnRzLCBjb21wYXRpYmlsaXR5IGNvbmNlcm5zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiB0ZWxscyB1cyBhYm91dCB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIG9yIHJlcXVpcmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjUxLjExODg3OTI5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODYwOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjE4NjE6XFx0XFxuMTg2MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTg2MzpcXHRcXG4xODY0OlxcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbjE4NjU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcbjE4NjY6XFx0XFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0lOVEVMXFxuMTg2NzpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NFxcbjE4Njg6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fSU5URUxcXG4xODY5OlxcdFxcdGRlcGVuZHMgb24gWDg2X1gyQVBJQ1xcbjE4NzA6XFx0XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xcbjE4NzE6XFx0XFx0ZGVwZW5kcyBvbiBDT05USUdfQUxMT0NcXG4xODcyOlxcdFxcdGRlcGVuZHMgb24gWDg2X01DRVxcbjE4NzM6XFx0XFx0aGVscFxcbjE4NzQ6XFx0XFx0ICBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBwcm90ZWN0cyBndWVzdCBWTXMgZnJvbSBtYWxpY2lvdXNcXG4xODc1OlxcdFxcdCAgaG9zdCBhbmQgY2VydGFpbiBwaHlzaWNhbCBhdHRhY2tzLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBuZWNlc3NhcnkgVERYXFxuMTg3NjpcXHRcXHQgIHN1cHBvcnQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHJ1biBjb25maWRlbnRpYWwgVk1zLlxcbjE4Nzc6XFx0XFxuMTg3ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTg6NTEuMTE5MTI3NDI2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDUxMTgzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgSU5URUxfVERYX0hPU1RgIGhpbmdlcyBvbiBhIGhhbmRmdWwgb2YgY3JpdGljYWwgcHJlcmVxdWlzaXRlcy4gSXQncyBidWlsdCB1cG9uIHRoZSBmb3VuZGF0aW9uIG9mIGBDUFVfU1VQX0lOVEVMYCwgb2YgY291cnNlLCB0aGF0J3MgZXhwZWN0ZWQgZm9yIGFueSBJbnRlbC1zcGVjaWZpYyBmZWF0dXJlLiBgWDg2XzY0YCBpcyBmdW5kYW1lbnRhbDsgNjQtYml0IGFyY2hpdGVjdHVyZSBpcyBhIGdpdmVuIGluIHRoaXMgY29udGV4dC4gYEtWTV9JTlRFTGAgaXMgY3J1Y2lhbCwgZ2l2ZW4gdGhhdCB3ZSBhcmUgZGlzY3Vzc2luZyB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBGdXJ0aGVybW9yZSwgYFg4Nl9YMkFQSUNgIGlzIGFsc28gYSBjcml0aWNhbCBkZXBlbmRlbmN5OyB0aGlzIHBvaW50cyB0byBBZHZhbmNlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFQSUMpIHVzYWdlLCB3aGljaCBpcyBrZXkgZm9yIGVmZmljaWVudCBpbnRlcnJ1cHQgaGFuZGxpbmcgaW4gbW9kZXJuIG11bHRpLWNvcmUgc3lzdGVtcywgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBgQ09OVElHX0FMTE9DYCBpcyBuZWNlc3NhcnkgYXMgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBhbiBpbXBvcnRhbnQgY29tcG9uZW50IGZvciB0aGUgaXNvbGF0aW9uIHByb2Nlc3MgdGhhdCBURFggcHJvdmlkZXMuIEZpbmFsbHksIGBYODZfTUNFYCwgb3IgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gc3VwcG9ydCwgcGxheXMgYSBrZXkgcGFydCBpbiB0aGUgcmVsaWFiaWxpdHkgYW5kIGVycm9yIGhhbmRsaW5nLCBlbnN1cmluZyByb2J1c3Qgb3BlcmF0aW9uIHdpdGhpbiB0aGlzIHNlY3VyZSBlbnZpcm9ubWVudC5cblxuTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGRlbHZlIGludG8gYENSWVBUT19ERVZfU1BfUFNQYC4gVGhpcyB3aWxsIGJlIGFub3RoZXIgc2V0IG9mIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBlbnRhaWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo1NC44NjQyNTA1ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODYwNTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU4OjU1LjAyMjg2MzMzNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY0NjA1MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZDpcblxuKipEZXBlbmRlbmN5IENoZWNrOiBDUllQVE9fREVWX1NQX1BTUCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGUgYENSWVBUT19ERVZfU1BfUFNQYCBtb2R1bGUuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIGFuZCB0byBlbnN1cmUgSeKAmW0gb3BlcmF0aW5nIGluIGEgc2FmZSBhbmQgZWZmZWN0aXZlIG1hbm5lciwgSSBoYXZlIHRvIGZpcnN0IG1ldGljdWxvdXNseSBleGFtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBsaWJyYXJpZXMsIG9yIHNlcnZpY2VzIGl0IHJlbGllcyB1cG9uLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBjcmVhdGluZyBhIGNvbXByZWhlbnNpdmUgZGVwZW5kZW5jeSBncmFwaCB0byB2aXN1YWxpemUgdGhlIGNvbm5lY3Rpb25zLiBBcmUgdGhlcmUgYW55IGNyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgZGVwZW5kZW5jaWVzPyBUaGlzIGNvdWxkIG1lYW4gcG90ZW50aWFsIHNlY3VyaXR5IHJpc2tzLiBEbyB0aGV5IHJlcXVpcmUgc3BlY2lmaWMgdmVyc2lvbnMsIG9yIGFtIEkgZGVhbGluZyB3aXRoIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzc3Vlcz8gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiBteSBldmFsdWF0aW9uIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdXBkYXRlcyBvciBjaGFuZ2VzIEknbSBjb25zaWRlcmluZyB3b24ndCBpbmFkdmVydGVudGx5IGJyZWFrIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdGllcy4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo1OC4zODc0NzE4NzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cXG4gIDM2OlxcdFxcdCAgSWYgeW91IGNob29zZSAnTScgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwX2NyeXB0by5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXFxuICAzOTpcXHRcXHRib29sIFxcXCJQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXFxcIlxcbiAgNDA6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFxcdTAwMjZcXHUwMDI2IFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBBTURfSU9NTVVcXG4gIDQyOlxcdFxcdHNlbGVjdCBQQ0lfVFNNIGlmIFBDSVxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0IFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkuXFxuICA0NTpcXHRcXHQgVGhlIFBTUCBpcyBhIGRlZGljYXRlZCBwcm9jZXNzb3IgdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBrZXlcXG4gIDQ2OlxcdFxcdCBtYW5hZ2VtZW50IGNvbW1hbmRzIGluIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgbW9kZSxcXG4gIDQ3OlxcdFxcdCBhbG9uZyB3aXRoIHNvZnR3YXJlLWJhc2VkIFRydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IChURUUpIHRvXFxuICA0ODpcXHRcXHQgZW5hYmxlIHRoaXJkLXBhcnR5IHRydXN0ZWQgYXBwbGljYXRpb25zLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgQ1JZUFRPX0RFVl9DQ1BfREVCVUdGU1xcbiAgNTE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIENDUCBJbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG4gIDUyOlxcdFxcdGRlZmF1bHQgblxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX0NDUFxcbiAgNTQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1ODo1OC4zODc1OTQ5NjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNDg0NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpcyBpcyBhIGJyaWVmIG1lbnRhbCBub3RlOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgY29udGluZ2VudCBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGxpa2VseSBhIHNlY3VyaXR5LWZvY3VzZWQgbW9kdWxlIG9yIHN1YnN5c3RlbSB0aGF0IHJlcXVpcmVzIGNlcnRhaW4gaGFyZHdhcmUgYW5kIHVuZGVybHlpbmcgY3J5cHRvZ3JhcGhpYyBzZXJ2aWNlcy4gTm93LCBnaXZlbiB0aGF0IGRlcGVuZGVuY3kgY2hhaW4sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDUllQVE9fREVWX0NDUF9ERGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29yZSBjb21wb25lbnQgaXQgcmVsaWVzIHVwb24gaXMgY29uZmlndXJlZCBjb3JyZWN0bHksIGJlY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhhdCBjb21wb25lbnQgZGlyZWN0bHkgZGljdGF0ZXMgdGhlIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyBvZiB0aGUgY29tcG9uZW50cyB3aGljaCBhcmUgZGVwZW5kZW50IHVwb24gaXQuIEkgbXVzdCBjaGVjayBvbiBgQ1JZUFRPX0RFVl9DQ1BfRERgIHRvIHNlZSBpZiB0aGF0J3MgY29uZmlndXJlZCBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjAxLjYxMjQ0NDQ4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcXG4gICA1OlxcdFxcdGRlZmF1bHQgbVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxcbiAgIDg6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuICAxMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgRE1BREVWSUNFU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IEhXX1JBTkRPTVxcbiAgMTU6XFx0XFx0c2VsZWN0IERNQV9FTkdJTkVcXG4gIDE2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTZcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxcbiAgMjA6XFx0XFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjAxLjYxMjU2MzY5N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjYxODA1NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBTeW1ib2xzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGBLVk1fSU5URUxfVERYYCwgYElOVEVMX1REWF9IT1NUYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBDUllQVE9fREVWX0NDUF9ERGAuIEJ1dCBoYW5nIG9uLCBgS1ZNX1NNTWAgaXMgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCB0aGUgb3RoZXIgdHdvLCBgS1ZNX0FNRF9TRVZgIGFuZCBgS1ZNX0lOVEVMX1REWGAgYXJlIGFsc28gbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgY29udGluZ2VudCBvbiBkZXBlbmRlbmNpZXMuIFNvLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3Mgd2lsbCBiZSB0aGVzZSBzaXguXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZm9jdXMgc3ltYm9scywgdGhlc2UgYXJlIGtleTogYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGFuZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSByZWFjaGFibGUsIG5vdCBzdGF0aWMsIGFuZCByZWxldmFudC5cblxuSSd2ZSB2ZXJpZmllZCB0aGF0IGFsbCB0aGUgc3ltYm9scyBhcmUgaW5kZWVkIG5vbi1zdGF0aWM6IGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIGluIGBhcmNoL3g4Ni9rdm0vc21tLmNgLCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AsIGFuZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gUGVyZmVjdC4gVGhvc2UgdHdvIG90aGVyIHZteCBzeW1ib2xzIGFyZSBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aG9zZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGFyZSB0aGVzZSB1c2VmdWwgc3ltYm9scz8gYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgdHJpZ2dlcmVkIHdoZW4gZXhlY3V0aW5nIGFuIFJTTSBpbnN0cnVjdGlvbiB3aGljaCBpcyB1c2VkIHRvIGxlYXZlIFNNTSwgc28gdGhhdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE1ha2VzIHNlbnNlLlxuXG5gc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGlzIHZlcnkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0J3MgdGhlIG1haW4gbG9vcCBmb3IgcnVubmluZyBhIHZDUFUhIFNvLCBpdOKAmXMgZXhlY3V0ZWQgb24gZXZlcnkgYEtWTV9SVU5gIGlvY3RsLCBhIGhvdC1wYXRoIGZ1bmN0aW9uLiAgVGhlIHF1ZXN0aW9uIGlzOiBpcyBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gICphbHdheXMqIGNhbGxlZD8gVGhhdCBuZWVkcyBjb25maXJtYXRpb24sIGFuZCBjb3VsZCBiZSBhIHZlcnkgdmFsdWFibGUgcGxhY2UgdG8gZm9jdXMgYXR0ZW50aW9uIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU1MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjEwLjI3NDM3MTk1MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzMDMwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3g4Nl92Y3B1X3ByZV9ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9ODgwMD1zdGF0aWMgaW50IGNvbXBsZXRlX2VtdWxhdGVkX21taW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg4NDMtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg4NDQ6c3RhdGljIGludCBrdm1feDg2X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg4NDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTg4ODE9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04OTgxLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4OTgyOlxcdHIgPSBrdm1feDg2X3ZjcHVfcHJlX3J1bih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODk4My1cXHRpZiAociBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OToxMC4zNzM2ODA0NTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEzNjU4MDAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSG90LVBhdGggRnVuY3Rpb25zIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgbmV3IGNvZGUgaW50ZWdyYXRlcyBpbnRvIHRoZSBLVk0geDg2IGFyY2hpdGVjdHVyZS4gSSBzZWUgdGhhdCBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gIGlzIGNhbGxlZCByaWdodCBhdCB0aGUgc3RhcnQgb2YgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdCBtZWFucyBmdW5jdGlvbnMgbGlrZSBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFyZSBiZWluZyBjYWxsZWQgKmV2ZXJ5KiB0aW1lIGEgYEtWTV9SVU5gIGlvY3RsIGlzIGlzc3VlZC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgaG90LXBhdGggZnVuY3Rpb25zLCBidXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgbGlzdGluZyB0aG9zZSB0byBwcmV2ZW50IHNrZXdpbmcgdGVzdCBkaXN0cmlidXRpb25zLiBNYWtlcyBzZW5zZS4gRnV6emluZyBhIHNpbXBsZSBib29sZWFuIHJldHVybiBpc24ndCBnb2luZyB0byBiZSBzdXBlciBmcnVpdGZ1bCBhbnl3YXkuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBpcyBjYWxsZWQgZnJvbSB0aGF0IHByZS1ydW4gZnVuY3Rpb24/IEFoLCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLiBJdCdzIGFsc28gY2FsbGVkIGZyb20gdGhlcmUsIHZpYSBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgb3AuIFNvIGFnYWluLCBob3QtcGF0aC4gR290dGEgYXZvaWQgdGhhdCBvbmUuXG5cbldhaXQsIG5vdyBJIHNlZSB0aGF0IGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgaXMgYWxzbyBjYWxsZWQgZnJvbSBgZW11bGF0b3JfbGVhdmVfc21tYC4gQWhhISBUaGF0J3MgaW50ZXJlc3RpbmcuIExvb2tpbmcgYXQgdGhlIGNvZGU6XG5cbmBgYGNcblx0aWYgKHJldCA9PSBYODZFTVVMX0NPTlRJTlVFIFx1MDAyNlx1MDAyNlxuXHQgICAga3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKVxuXHRcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuYGBgXG5cbkl0J3MgYmVpbmcgY2FsbGVkIGluc2lkZSBgZW11bGF0b3JfbGVhdmVfc21tYC4gU28sIHRoZSBxdWVzdGlvbiBpczogaXMgKnRoYXQqIGEgaG90LXBhdGggZnVuY3Rpb24/IE5vLCBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGV4ZWN1dGluZyB0aGUgUlNNIGluc3RydWN0aW9uLiBUaGF0J3MgYSBncmVhdCBjYW5kaWRhdGUhIFRoYXQncyB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseS4gYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpcyBob3QtcGF0aC4gVGhlIG9yaWdpbmFsIGxvZ2ljIHdhcyBjYWxsaW5nIGl0IGZyb20gYGt2bV94ODZfdmNwdV9wcmVfcnVuYC4gVGhlIHBhdGNoIGp1c3QgcmVmYWN0b3JlZCBhbmQgcmVuYW1lZCB0aGUgb3AgdG8gY2FsbCBmcm9tIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAgYW5kICphbHNvKiBmcm9tIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLiBTbyB0aGUgKm5ldyogbG9naWMgaXMgaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAuIExldCdzIGRvdWJsZSBjaGVjayB0aGF0LlxuXG5ZZXAsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHNlZW1zIHRvIGJlIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guIFRoZSByZXN0IGlzIHJlZmFjdG9yaW5nIHRvIGFsbG93IGNhbGxpbmcgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGZyb20gdGhlIG5ldyBlbnRyeSBwb2ludC5cblxuU28sIGluIHN1bW1hcnksIGZ1enppbmcgYGVtdWxhdG9yX2xlYXZlX3NtbWAgc2VlbXMgbGlrZSB0aGUgYmVzdCBhcHByb2FjaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE1MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OToxOS41MTAyNjUxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC92bXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDMwOlxcdFxcdHJldHVybiAxO1xcbjYwMzE6XFx0fVxcbjYwMzI6XFx0XFxuNjAzMzpcXHQvKlxcbjYwMzQ6XFx0ICogUmV0dXJucyB0cnVlIGlmIGVtdWxhdGlvbiBpcyByZXF1aXJlZCAoZHVlIHRvIHRoZSB2Q1BVIGhhdmluZyBpbnZhbGlkIHN0YXRlXFxuNjAzNTpcXHQgKiB3aXRoIHVuc3Jlc3RyaWN0ZWQgZ3Vlc3QgbW9kZSBkaXNhYmxlZCkgYW5kIEtWTSBjYW4ndCBmYWl0aGZ1bGx5IGVtdWxhdGUgdGhlXFxuNjAzNjpcXHQgKiBjdXJyZW50IHZDUFUgc3RhdGUuXFxuNjAzNzpcXHQgKi9cXG42MDM4OlxcdGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjYwMzk6XFx0e1xcbjYwNDA6XFx0XFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XFxuNjA0MTpcXHRcXG42MDQyOlxcdFxcdGlmICghdm14LVxcdTAwM2V2dC5lbXVsYXRpb25fcmVxdWlyZWQpXFxuNjA0MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNjA0NDpcXHRcXG42MDQ1OlxcdFxcdC8qXFxuNjA0NjpcXHRcXHQgKiBJdCBpcyBhcmNoaXRlY3R1cmFsbHkgaW1wb3NzaWJsZSBmb3IgZW11bGF0aW9uIHRvIGJlIHJlcXVpcmVkIHdoZW4gYVxcbjYwNDc6XFx0XFx0ICogbmVzdGVkIFZNLUVudGVyIGlzIHBlbmRpbmcgY29tcGxldGlvbiwgYXMgVk0tRW50ZXIgd2lsbCBWTS1GYWlsIGlmXFxuNjA0ODpcXHRcXHQgKiBndWVzdCBzdGF0ZSBpcyBpbnZhbGlkIGFuZCB1bnJlc3RyaWN0ZWQgZ3Vlc3QgaXMgZGlzYWJsZWQsIGkuZS4gS1ZNXFxuNjA0OTpcXHRcXHQgKiBzaG91bGQgc3ludGhlc2l6ZSBWTS1GYWlsIGluc3RlYWQgZW11bGF0aW9uIEwyIGNvZGUuICBUaGlzIHBhdGggaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6MTkuNTEwNjk5NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyOTY0NTczMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyBmb3IgYSBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgZmxhZyBpcyBqdXN0IGEgc2ltcGxlIGNoZWNrLCBub3RoaW5nIGNvbXBsZXggdGhlcmUuIFRoZSBwYXRjaCBhZGRzIGEgdGVzdCwgc3BlY2lmaWNhbGx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2Ygd2hhdCdzIGJlaW5nIHRlc3RlZC4gVGhlIHRlc3QncyBsb2dpYyBpcyBhbGwgYWJvdXQgaW5qZWN0aW5nIGFuIFNNSSB3aGlsZSBMMiBpcyBydW5uaW5nLCBmb3JjaW5nIGFuIEkvTyBleGl0IGZyb20gTDEsIG1hbmlwdWxhdGluZyBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhLCBhbmQgdGhlbiBleHBlY3RpbmcgYSBTSFVURE9XTiBleGl0IGR1ZSB0byBpbnZhbGlkIEwyIHN0YXRlIG9uIFJTTS4gVGhpcyBpcyBhIHZlcnkgY2xlYXIgdGVzdCBvZiB0aGF0IG5ldyBgZW11bGF0b3JfbGVhdmVfc21tYCBsb2dpYy5cblxuVGhhdCBtYWtlcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0aGUga2V5IGZ1bmN0aW9uLiBNeSBmb2N1cyBpcyBlbnRpcmVseSB0aGVyZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZyBvcHRpb25zLiBJcyBgS1ZNX1NNTWAgc3VmZmljaWVudD8gV2VsbCwgdGhpcyB0ZXN0IGlzIFZNWC1zcGVjaWZpYywgc28gY2xlYXJseSBgS1ZNX0lOVEVMYCBpcyBhIG11c3QtaGF2ZS4gQW5kIHNpbmNlIHRoZSB0ZXN0IHNwZWNpZmljYWxseSB0YXJnZXRzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBgS1ZNX1NNTWAgaXMgZXNzZW50aWFsLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5lZWRzIGBLVk1fQU1EX1NFVmAgYW5kIGBLVk1fSU5URUxfVERYYCB0byBjb21waWxlIGFuZCBiZSB0ZXN0ZWQgdG9vLlxuXG5MZXQncyBsaXN0IHRoZXNlIGRlcGVuZGVuY2llcyBleHBsaWNpdGx5OlxuXG4qICAgYEtWTV9TTU1gXG4qICAgYEtWTV9BTURfU0VWYFxuKiAgIGBLVk1fSU5URUxfVERYYFxuKiAgIGBJTlRFTF9URFhfSE9TVGBcbiogICBgQ1JZUFRPX0RFVl9TUF9QU1BgXG4qICAgYENSWVBUT19ERVZfQ0NQX0REYFxuXG5Ib2xkIG9uLCBkbyB3ZSBhbHNvIG5lZWQgYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYCBleHBsaWNpdGx5PyBUaGV5IGFyZSB1c3VhbGx5IGVuYWJsZWQgaW4gc3l6a2FsbGVyIGJ5IGRlZmF1bHQsIGJ1dCB0aGVyZSdzIG5vIGhhcm0gaW4gaW5jbHVkaW5nIHRoZW0sIGp1c3QgaW4gY2FzZS4gVGhleSBhcmUgdHJpc3RhdGUsIHNvIHNwZWNpZnlpbmcgdGhlbSB3b24ndCBiZSBhbiBpc3N1ZS4gV2FpdCwgYSBiaXQgbW9yZSBkaWdnaW5nLiBJdCBsb29rcyBsaWtlIGBLVk1fSU5URUxfVERYYCBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EX1NFVmAgZGVwZW5kcyBvbiBgS1ZNX0FNRGAuIFNvLCB3ZSdyZSBnb29kIHRoZXJlLlxuXG5KdXN0IHRvIGJlIHN1cmUsIGlzIGBLVk1fU01NYCBhIGRlZmF1bHQtZW5hYmxlZCBvcHRpb24/IFllcywgaXQgaXMgc2V0IHRvIGBkZWZhdWx0IHlgLCBidXQgaXQncyBzdGlsbCBwcnVkZW50IHRvIHNwZWNpZnkgaXQgZGlyZWN0bHkuXG5cbk9rYXksIGlzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRydWx5IHRoZSBvbmx5IGZ1bmN0aW9uIG9mIGludGVyZXN0PyBBcmUgdGhlcmUgYW55IG90aGVycyB0aGF0IGFyZSBub3QgcGVyZm9ybWFuY2UtY3JpdGljYWw/IExldCdzIGNoZWNrLiBBaCwgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhcmUgcGVyZm9ybWFuY2UtY3JpdGljYWwuIFNvLCB5ZXMsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIHRoZSBvbmx5IGZvY3VzIGhlcmUuXG5cbkZpbmFsbHksIGlzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGV4cG9ydGVkLCBvciBpcyBpdCBzdGF0aWM/IEl0J3Mgbm9uLXN0YXRpYyBpbiBgYXJjaC94ODYva3ZtL3NtbS5jYC4gQnV0IGhvbGQgb24sIGlmIGBDT05GSUdfS1ZNX1NNTWAgaXMgKm5vdCogZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgaXQncyBkZWZpbmVkIGFzIHN0YXRpYyBpbmxpbmUgb3Igc3RhdGljLiBIb3dldmVyLCB3aXRoIGBDT05GSUdfS1ZNX1NNTT15YCwgaXQncyBpbmRlZWQgbm9uLXN0YXRpYyBpbiBgc21tLmNgLlxuXG5UaGVyZWZvcmUsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBgZW11bGF0b3JfbGVhdmVfc21tYCBpbiBgc21tLmNgIGZvciBjb3JyZWN0bmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OToyOS44MDcxNjI3NjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDcyMDQ4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZW11bGF0b3JfbGVhdmVfc21tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3NtbS5jPTUxNj1zdGF0aWMgaW50IHJzbV9sb2FkX3N0YXRlXzY0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTU3Mi1cXG5hcmNoL3g4Ni9rdm0vc21tLmM6NTczOmludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL3NtbS5jLTU3NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmg9MTU4PXZvaWQgZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3NtbS5oOjE1OTppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTYwLXZvaWQgcHJvY2Vzc19zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc2MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjI5LjkzNzkwMDY2NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE3MzYxOTAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJTTSBJbnN0cnVjdGlvbiBFbXVsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgUlNNIGluc3RydWN0aW9uIGVtdWxhdGlvbiB3aXRoaW4gS1ZNLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIHJlc2lkZXMgaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAgd2l0aGluIGBzbW0uY2AuIEkgY29uZmlybWVkIHRoYXQgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBpcyBpbmRlZWQgKm5vdCogc3RhdGljLCB3aGljaCBpcyBnb29kIGZvciBpbnN0cnVtZW50YXRpb24uXG5cbkkgZGlkIGEgcXVpY2sgc2NhbiBvZiBgc21tLmNgIGFuZCBub3RlZCB0aGF0IGByc21fbG9hZF9zdGF0ZV8zMmAgYW5kIGByc21fbG9hZF9zdGF0ZV82NGAgYXJlIHN0YXRpYywgYW5kIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzLCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgdGhlIFJTTSBpbnN0cnVjdGlvbi5cblxuVGhlIG1lYXQgb2YgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB3aXRoaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgYSBmdW5jdGlvbiwgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLCBhbmQsIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgcm91dGluZSByZXR1cm5zIGBYODZFTVVMX1VOSEFORExFQUJMRWAuIEkgc2VlIHRoYXQgdGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byBkZWFsIHdpdGggaW52YWxpZCBndWVzdCBzdGF0ZSBkdXJpbmcgYW4gUlNNIHRyYW5zaXRpb24sIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGlzc3Vlcy5cblxuVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcmVmYWN0b3JpbmcuIEl0IG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBjaGVjayBsb2dpYyBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCwgYW5kIGl0IG1ha2VzIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhdmFpbGFibGUgYXMgYSBzZXBhcmF0ZSBvcGVyYXRpb24gdG8gc3VwcG9ydCB0aGlzIG5ldyBjaGVjay4gVGhlIGxvZ2ljIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaGFuZGxlIHBvdGVudGlhbGx5IHVuaGFuZGxlYWJsZSBzY2VuYXJpb3MgZHVyaW5nIFJTTS5cblxuVGhlcmVmb3JlLCBmcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZSwgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgdGhlIGtleSB0YXJnZXQuIFRoZSBuZXcgY29uZGl0aW9uIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNob3VsZCBiZSB0aGUgZm9jdXMgb2YgZnV6emluZyBlZmZvcnRzLlxuXG5Ob3csIGZvciBjb25maWd1cmluZyBhIHRlc3RpbmcgZW52aXJvbm1lbnQsIEknbSBnb2luZyB0byBsb29rIGF0IHNvbWUga2V5IEtjb25maWcgb3B0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgZGVwZW5kZW50IG9uIHNvbWUgc3BlY2lmaWMgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBlbmFibGUgYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0lOVEVMX1REWGAsIGBJTlRFTF9URFhfSE9TVGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYWxsIG9mIHRoZXNlIGFyZSBwcmVzZW50IGFuZCBlbmFibGVkLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCBgS1ZNX0lOVEVMX1REWGAgYW5kIGBJTlRFTF9URFhfSE9TVGAgbWlnaHQgbm90IGJlIGluIGV2ZXJ5IGtlcm5lbCB2ZXJzaW9uLCBidXQgdGhleSBhcmUgYXZhaWxhYmxlIGhlcmUuXG5cbkZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzZXR1cCwgYW5kIHRvIG1pbmltaXplIHRoZSByaXNrIG9mIG1pc3Npbmcgc29tZXRoaW5nLCBJJ2xsIGFsc28gYWRkIGEgZmV3IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zOiBgWDg2XzY0YCwgYENQVV9TVVBfSU5URUxgLCBgQ1BVX1NVUF9BTURgLCBgWDg2X1gyQVBJQ2AsIGBDT05USUdfQUxMT0NgLCBgWDg2X01DRWAuIEFkZGl0aW9uYWxseSwgSSdsbCBlbmFibGUgYEFNRF9JT01NVWAgdG8gZW5zdXJlIHRoYXQgYENSWVBUT19ERVZfU1BfUFNQYCBmdW5jdGlvbnMgY29ycmVjdGx5LiBUaGlzIHNob3VsZCBwcm92aWRlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCBmb3IgdGVzdGluZyB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OTo0MC4xMTE1MjM3NDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzAzMjc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMi0jIEFNRCBJT01NVSBzdXBwb3J0XFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjQzOmNvbmZpZyBBTURfSU9NTVVfREVCVUdGU1xcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXFx0Ym9vbCBcXFwiRW5hYmxlIEFNRCBJT01NVSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NDAuMzM0NTY0MTExWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTk3OTQzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGEgU2VjdXJlIEtWTSBFbnZpcm9ubWVudCoqXG5cbkFscmlnaHQsIHRoZSBzeXN0ZW0gZGVmaW5pdGVseSBoYXMgYEFNRF9JT01NVWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiwgYXMgdGhpcyBpcyBnb2luZyB0byBiZSBteSB0aG91Z2h0IHByb2Nlc3MgZm9yIHNldHRpbmcgdXAgYSBzZWN1cmUgS1ZNIGVudmlyb25tZW50LiBJJ20gZ29pbmcgdG8gcmVmaW5lIHRoaXMgbGlzdCB0byBtYWtlIGl0IGEgYml0IG1vcmUgY29tcGxldGUsIGFuZCBJJ2xsIGluY2x1ZGUgdGhpbmdzIHRoYXQgSSBrbm93IGFyZSBpbXBvcnRhbnQgZm9yIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW86XG5gS1ZNX1NNTWAsIHRoYXQncyBhIG5lY2Vzc2l0eVxuYEtWTV9BTURfU0VWYCBpcyBkZWZpbml0ZWx5IGltcG9ydGFudCB3aXRoIEFNRCBJT01NVVxuYEtWTV9JTlRFTF9URFhgLCBsZXQncyBhZGQgdGhhdCBmb3IgY29tcGxldGVuZXNzXG5gSU5URUxfVERYX0hPU1RgLCB0aGF0IG9uZSB0b28uXG5gQ1JZUFRPX0RFVl9TUF9QU1BgIHdpbGwgYmUgdXNlZnVsXG5gQ1JZUFRPX0RFVl9DQ1BfRERgLCBJIGNhbiBzZWUgdGhvc2UgdHdvIGJlaW5nIHVzZWZ1bCBpbiBjb25qdW5jdGlvbi5cbmBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAsIGJhc2ljIEtWTSwgb2YgY291cnNlLlxuYEFNRF9JT01NVWAsIGFnYWluLCBqdXN0IG1ha2luZyBzdXJlLlxuXG5Pa2F5LCBub3cgbGV0J3MgdGhpbmsgY3JpdGljYWxseSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGluY2x1ZGluZyBgS1ZNX0lOVEVMX1REWGAgLiBJIHJlbWVtYmVyIHRoYXQgaXQgZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RgLCBhbmQgdGhhdCBpbiB0dXJuIGRlcGVuZHMgb24gYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gSG1tLCBJIHNob3VsZCBwcm9iYWJseSBhZGQgdGhvc2UgZGVwZW5kZW5jaWVzIHRvIHRoZSBjb25maWcganVzdCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgZXZlcnl0aGluZydzIHByb3Blcmx5IGVuYWJsZWQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVudmlyb25tZW50IGlzIHNvbGlkLCBhbmQgSSdtIG5vdCBjaGFzaW5nIGRvd24gc29tZSBvYnNjdXJlIGRlcGVuZGVuY3kgbGF0ZXIuIFNvIGxldCdzIGFkZDpcbmBYODZfWDJBUElDYFxuYENPTlRJR19BTExPQ2BcbmBYODZfTUNFYFxuXG5Ob3cgbGV0J3MganVzdCBtYWtlIHN1cmUgYENPTlRJR19BTExPQ2AgaXMgYWN0dWFsbHkgY29uZmlndXJlZCBjb3JyZWN0bHkgYW5kIHRoZW4gcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OTo0NS4xMzQzNjI0NTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjIzMzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09OVElHX0FMTE9DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG4tLVxcbm1tL0tjb25maWctNzE4LVxcbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0NcXG5tbS9LY29uZmlnLTcyMC1cXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcXHUwMDI2XFx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NDUuMzIwNjA0MzIzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTU5MDExMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhpbmtpbmcgb24gQ09OVElHX0FMTE9DKipcblxuT2theSwgc28gYENPTlRJR19BTExPQ2AgaXMgYSBgZGVmX2Jvb2xgLCB3aGljaCBtZWFucyBJIGRvbid0IGdldCBkaXJlY3QgY29udHJvbCBvdmVyIHdoZXRoZXIgaXQncyBlbmFibGVkLiBJdCdzIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50LCBhbmQgcmlnaHQgbm93LCB0aGUgbG9naWMgaXMgdGllZCB0byBgTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTmAgb3IgYENNQWAuIEhtbSwgcmF0aGVyIHRoYW4gdW50YW5nbGluZyBhIG1vcmUgY29tcGxleCBjb25kaXRpb25hbCwgaXQgbG9va3MgbGlrZSBgQ01BYCBpcyB0aGUgc2ltcGxlc3QgcGF0aCB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIEknbGwgZ28gYWhlYWQgYW5kIGp1c3QgYWRkIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYENNQWAuIFRoYXQncyB0aGUgbW9zdCBleHBlZGllbnQgYW5kIGxpa2VseSB0aGUgbW9zdCByZWxpYWJsZSBhcHByb2FjaCBhdCB0aGlzIGp1bmN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA1MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjQ4LjI3NjUwOTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzY1NTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuLS1cXG5tbS9LY29uZmlnLTEwNjYtXFxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNjgtXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDgxLVxcbm1tL0tjb25maWc6MTA4Mjpjb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwODMtXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDg3LVxcbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXFxubW0vS2NvbmZpZy0xMDg5LVxcdGJvb2wgXFxcIkNNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA5NC1cXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA5Ni1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NDguNDA0MTc0MjgyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTYxNzkwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgcHJvYmxlbS4gRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciBgQ01BYCDigJMgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGZvY3VzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBhIGNoYWxsZW5nZSBhcm91bmQgZnJhZ21lbnRhdGlvbiwgbGFyZ2UgYWxsb2NhdGlvbnMsIG9yIHBlcmhhcHMgTlVNQSBjb25zaWRlcmF0aW9ucy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBYODZfWDJBUElDYC4gVGhpcyBpcyBjbGVhcmx5IGluZGljYXRpbmcgYW4geDg2IGFyY2hpdGVjdHVyZSB3aXRoIHRoZSBYMkFQSUMgZmVhdHVyZSBlbmFibGVkLiBUaGlzIGltbWVkaWF0ZWx5IGltcGxpZXMgYSBzY2FsZSBvZiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIC0gdGhpbmsgaW50ZXJydXB0IGhhbmRsaW5nLCBJUEkgcGVyZm9ybWFuY2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJdCBhbHNvIGltcGxpZXMgYSBjZXJ0YWluIGxldmVsIG9mIHN5c3RlbSBjb25maWd1cmF0aW9uIC0gY29yZSBjb3VudCwgQklPUyBzZXR0aW5ncywgYW5kIE9TIGtlcm5lbCBvcHRpb25zIHdpbGwgbmVlZCB0byBiZSB1bmRlcnN0b29kIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvLCBgQ01BYCBhbmQgYFg4Nl9YMkFQSUNgLCBtaWdodCBpbnRlcmFjdCBvciBjb25mbGljdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgcG90ZW50aWFsbHkgcHJvZm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NTEuNzIwMzU4Njc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU1OTg1OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9YMkFQSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NDM2PWNvbmZpZyBTTVBcXG4tLVxcbmFyY2gveDg2L0tjb25maWctNDU4LVxcbmFyY2gveDg2L0tjb25maWc6NDU5OmNvbmZpZyBYODZfWDJBUElDXFxuYXJjaC94ODYvS2NvbmZpZy00NjAtXFx0Ym9vbCBcXFwieDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMjo1OTo1Mi4wMDU5NjkwMTlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMzY0MDgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIENQVSBFcnJvciBIYW5kbGluZyBNZWNoYW5pc21zKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGlzIGBYODZfWDJBUElDYCB0aGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgaXRzIGltcGxpY2F0aW9ucyBmb3IgaW50ZXItcHJvY2Vzc29yIGNvbW11bmljYXRpb24gYW5kIGludGVycnVwdCBkZWxpdmVyeSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBlcnJvciBoYW5kbGluZy4gSXMgdGhpcyBnb2luZyB0byBiZSB0aGUgKnByaW1hcnkqIG1lY2hhbmlzbSB3ZSdyZSB1c2luZyBmb3Igc2lnbmFsaW5nIGVycm9ycz8gT3IgaXMgaXQgYSBzZWNvbmRhcnkgc3lzdGVtPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIGFyY2hpdGVjdHVyZXMgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGFjcm9zcyBkaWZmZXJlbnQgY29yZXMgYW5kIHNvY2tldHM/IEkgbmVlZCB0byBjb25zaWRlciB0aGUgb3ZlcmhlYWQgb2YgdGhpcyBhcHByb2FjaC5cblxuTm93LCBsZXQncyBwaXZvdCB0byBgWDg2X01DRWAuIFRoaXMgZmVlbHMgbGlrZSB0aGUgbW9yZSBsaWtlbHkgY2FuZGlkYXRlIGZvciBvdXIgY29yZSBoYXJkd2FyZSBlcnJvciByZXBvcnRpbmcuIE15IG1pbmQgaXMgYWxyZWFkeSBqdW1waW5nIHRvIHRoZSBzcGVjaWZpYyBtYWNoaW5lIGNoZWNrIGFyY2hpdGVjdHVyZSByZWdpc3RlcnMgYW5kIHRoZSBmbG93IG9mIGVycm9yIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIE9TJ3MgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMuIElzIGl0IGdvaW5nIHRvIGJlIGEgc2ltcGxlIG5vdGlmaWNhdGlvbiwgb3Igd2lsbCB3ZSBoYXZlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgcmVzcG9uc2UgdG8gZGlmZmVyZW50IGVycm9yIHR5cGVzPyBXaGF0IGFib3V0IGVycm9yIGNvbnRhaW5tZW50PyBBbmQgbWVtb3J5IGVycm9yIGNvcnJlY3Rpb24gY2FwYWJpbGl0aWVzPyBUaGUgc3BlY2lmaWMgTVNScyBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXJyb3IgY29kZXMgYXJlIHRvcCBvZiBtaW5kLiBOZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGhvdyB0aGlzIHBsYXlzIHdpdGggb3RoZXIgZXJyb3IgbW9kZWxzIGxpa2UgcGFyaXR5IGFuZCBFQ0MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDI6NTk6NTUuNjI5NjE0MDg1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkxNzI3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9NQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTExNz1jb25maWcgWDg2X1JFUk9VVEVfRk9SX0JST0tFTl9CT09UX0lSUVNcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTEzOS1cXG5hcmNoL3g4Ni9LY29uZmlnOjExNDA6Y29uZmlnIFg4Nl9NQ0VcXG5hcmNoL3g4Ni9LY29uZmlnLTExNDEtXFx0Ym9vbCBcXFwiTWFjaGluZSBDaGVjayAvIG92ZXJoZWF0aW5nIHJlcG9ydGluZ1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTE0OS1cXG5hcmNoL3g4Ni9LY29uZmlnOjExNTA6Y29uZmlnIFg4Nl9NQ0VMT0dfTEVHQUNZXFxuYXJjaC94ODYvS2NvbmZpZy0xMTUxLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGRlcHJlY2F0ZWQgL2Rldi9tY2Vsb2cgY2hhcmFjdGVyIGRldmljZVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTE1Ny1cXG5hcmNoL3g4Ni9LY29uZmlnOjExNTg6Y29uZmlnIFg4Nl9NQ0VfSU5URUxcXG5hcmNoL3g4Ni9LY29uZmlnLTExNTktXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTY1LVxcbmFyY2gveDg2L0tjb25maWc6MTE2Njpjb25maWcgWDg2X01DRV9BTURcXG5hcmNoL3g4Ni9LY29uZmlnLTExNjctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0xMTc0PWNvbmZpZyBYODZfQU5DSUVOVF9NQ0VcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTE4MS1cXG5hcmNoL3g4Ni9LY29uZmlnOjExODI6Y29uZmlnIFg4Nl9NQ0VfVEhSRVNIT0xEXFxuYXJjaC94ODYvS2NvbmZpZy0xMTgzLVxcdGRlcGVuZHMgb24gWDg2X01DRV9BTUQgfHwgWDg2X01DRV9JTlRFTFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTg1LVxcbmFyY2gveDg2L0tjb25maWc6MTE4Njpjb25maWcgWDg2X01DRV9JTkpFQ1RcXG5hcmNoL3g4Ni9LY29uZmlnLTExODctXFx0ZGVwZW5kcyBvbiBYODZfTUNFIFxcdTAwMjZcXHUwMDI2IFg4Nl9MT0NBTF9BUElDIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAyOjU5OjU1LjgwODc5NTIyNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM4MjIyNzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYFg4Nl9NQ0VgIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gYFg4Nl9NQ0VgIGFuZCBzcGVjaWZpY2FsbHkgaG93IEtWTSBoYW5kbGVzIGxlYXZpbmcgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB0aHJvdWdoIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIFRoZSBjb25maWdzIGluIHBsYXkgYXJlIGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYEtWTV9JTlRFTF9URFhgLCBgSU5URUxfVERYX0hPU1RgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBgQU1EX0lPTU1VYCwgYENNQWAsIGBYODZfWDJBUElDYCwgYW5kLCBvZiBjb3Vyc2UsIGBYODZfTUNFYC5cblxuVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGZ1bmN0aW9uLiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgd2hlbiBhIGd1ZXN0IGV4aXRzIFNNTSB1c2luZyBSU00uIFRoZSBmaXggbW9kaWZpZXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gY2hlY2sgaWYgdGhlIHJlcXVpcmVkIGVtdWxhdGlvbiBpcyB1bmhhbmRsZWFibGUsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgYXJvdW5kIHRoaXMgbmV3IGNoZWNrLCBtb3Zpbmcgc29tZSBsb2dpYyBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkbyB3ZSBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzP1wiIFRoZSBwYXRjaCdzIGNvcmUgbG9naWMgY2hhbmdlIGhhcHBlbnMgaW4gYGVtdWxhdG9yX2xlYXZlX3NtbWAsIHNvIHRoYXQncyB0aGUgbmF0dXJhbCBmaXJzdCB0YXJnZXQuXG5cbkkgY29uc2lkZXJlZCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFzIGEgcG9zc2libGUgZm9jdXMgc3ltYm9sLiBIb3dldmVyLCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGVtdWxhdG9yX2xlYXZlX3NtbWAgYW5kIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAuIElmIHdlIGZvY3VzIG9uIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCB3ZSdsbCBpbmhlcmVudGx5IGhpdCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFueXdheSwgbWFraW5nIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGEgc3VmZmljaWVudCwgYW5kIHBlcmhhcHMgbW9yZSBkaXJlY3QsIHBvaW50IG9mIGF0dGFjay5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgYGVtdWxhdG9yX2xlYXZlX3NtbWAgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBmcm9tIHVzZXJzcGFjZT8gVGhlIGFuc3dlciBpcyB5ZXMuIEl0J3MgY2FsbGVkIHdoZW4gZW11bGF0aW5nIHRoZSBSU00gaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIGEgMTYtYml0IGluc3RydWN0aW9uICgweDBGIDB4QUEpIGV4ZWN1dGFibGUgYnkgdGhlIGd1ZXN0IGluIFNNTS4gVGhlIFJTTSBpbnN0cnVjdGlvbiBlZmZlY3RpdmVseSBoYW5kbGVzIHRoZSBleGl0IGZyb20gU01NLiBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIHRoaXMgaW5zdHJ1Y3Rpb24gYW5kIGV4ZWN1dGUgaXQgd2l0aGluIHRoZSBWTS4gVG8gY29uZmlybSwgSSBkb3VibGUtY2hlY2tlZCwgYW5kIGZvdW5kIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY2AgdGVzdCwgd2hpY2ggaW5jbHVkZXM6XG5cbmBgYGNcbnN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuXHQweGU0LCBBUkJJVFJBUllfSU9fUE9SVCxcdC8qIElOICRBUkJJVFJBUllfSU9fUE9SVCwgJWFsICovXG5cdDB4MGYsIDB4YWEsXHRcdFx0LyogUlNNICovXG59O1xuYGBgXG5cblRoaXMgdGVzdCBjbGVhcmx5IGRlbW9uc3RyYXRlcyB0aGUgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIGFic29sdXRlbHkgdGhlIGNvcnJlY3QgZm9jdXMgc3ltYm9sLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjYzLCJPdXRwdXRUb2tlbnMiOjI3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMzowMDowNi4xOTEwMjY0OTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTkwNjYzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9TTU1cIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJYODZfWDJBUElDXCIsXG4gICAgXCJYODZfTUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW11bGF0b3JfbGVhdmVfc21tXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgS1ZNIGRvZXMgbm90IHByb3Blcmx5IGhhbmRsZSBpbnZhbGlkIGd1ZXN0IHN0YXRlIHdoZW4gbGVhdmluZyBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIHZpYSB0aGUgUlNNIGluc3RydWN0aW9uLiBJdCBtb2RpZmllcyBgZW11bGF0b3JfbGVhdmVfc21tYCB0byBjaGVjayBpZiB1bmhhbmRsZWFibGUgZW11bGF0aW9uIGlzIHJlcXVpcmVkLCBhbmQgaWYgc28sIHJldHVybnMgYFg4NkVNVUxfVU5IQU5ETEVBQkxFYC4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHZjcHVfcHJlX3J1bmAgb3AgaW50byBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYW5kIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCB0byBzdXBwb3J0IHRoaXMgY2hlY2suIFdlIHNob3VsZCBmb2N1cyBmdXp6aW5nIG9uIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIHRlc3QgdGhpcyBuZXcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIlg4Nl9YMkFQSUNcIixcbiAgICBcIlg4Nl9NQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbXVsYXRvcl9sZWF2ZV9zbW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBLVk0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGludmFsaWQgZ3Vlc3Qgc3RhdGUgd2hlbiBsZWF2aW5nIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIHRoZSBSU00gaW5zdHJ1Y3Rpb24uIEl0IG1vZGlmaWVzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIHRvIGNoZWNrIGlmIHVuaGFuZGxlYWJsZSBlbXVsYXRpb24gaXMgcmVxdWlyZWQsIGFuZCBpZiBzbywgcmV0dXJucyBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgdmNwdV9wcmVfcnVuYCBvcCBpbnRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHRvIHN1cHBvcnQgdGhpcyBjaGVjay4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gYGVtdWxhdG9yX2xlYXZlX3NtbWAgdG8gdGVzdCB0aGlzIG5ldyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[1] Phase: Succeeded StartedAt: 2026-08-02 03:00:19 +0000 UTC FinishedAt: 2026-08-02 03:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 03:00:19 +0000 UTC FinishedAt: 2026-08-02 03:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2] Phase: Succeeded StartedAt: 2026-08-02 03:00:19 +0000 UTC FinishedAt: 2026-08-02 06:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 03:00:19 +0000 UTC FinishedAt: 2026-08-02 06:52:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 03:00:19 +0000 UTC FinishedAt: 2026-08-02 03:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 03:00:19 +0000 UTC FinishedAt: 2026-08-02 03:00:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-convert-artifact-1852162202/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 03:00:53 +0000 UTC FinishedAt: 2026-08-02 03:27:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 03:00:53 +0000 UTC FinishedAt: 2026-08-02 03:27:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f2f45e16-a6fe-45cc-b844-9bdb15724b33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-convert-artifact-1852162202/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "c40258f8-ded1-431d-8a65-d325704c133b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-591728968/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 03:00:53 +0000 UTC FinishedAt: 2026-08-02 03:26:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f2f45e16-a6fe-45cc-b844-9bdb15724b33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-convert-artifact-1852162202/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "c40258f8-ded1-431d-8a65-d325704c133b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-591728968/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 03:27:15 +0000 UTC FinishedAt: 2026-08-02 03:27:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 03:27:15 +0000 UTC FinishedAt: 2026-08-02 03:27:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 03:27:15 +0000 UTC FinishedAt: 2026-08-02 03:27:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 03:27:15 +0000 UTC FinishedAt: 2026-08-02 03:27:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-convert-artifact-288664053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 03:27:36 +0000 UTC FinishedAt: 2026-08-02 03:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 03:27:37 +0000 UTC FinishedAt: 2026-08-02 03:29:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c40258f8-ded1-431d-8a65-d325704c133b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-591728968/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 03:29:36 +0000 UTC FinishedAt: 2026-08-02 03:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 03:29:36 +0000 UTC FinishedAt: 2026-08-02 03:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 03:29:36 +0000 UTC FinishedAt: 2026-08-02 03:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 03:29:37 +0000 UTC FinishedAt: 2026-08-02 03:49:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f2f45e16-a6fe-45cc-b844-9bdb15724b33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-convert-artifact-288664053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7c589b06-3fb5-4eee-87e5-973a04b9c97e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-2785389569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 03:29:37 +0000 UTC FinishedAt: 2026-08-02 03:49:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f2f45e16-a6fe-45cc-b844-9bdb15724b33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-convert-artifact-288664053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7c589b06-3fb5-4eee-87e5-973a04b9c97e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-2785389569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 03:49:15 +0000 UTC FinishedAt: 2026-08-02 03:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 03:49:15 +0000 UTC FinishedAt: 2026-08-02 03:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 03:49:15 +0000 UTC FinishedAt: 2026-08-02 03:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 03:49:15 +0000 UTC FinishedAt: 2026-08-02 03:51:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7c589b06-3fb5-4eee-87e5-973a04b9c97e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-2785389569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 03:51:15 +0000 UTC FinishedAt: 2026-08-02 06:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 03:51:15 +0000 UTC FinishedAt: 2026-08-02 06:52:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c40258f8-ded1-431d-8a65-d325704c133b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7c589b06-3fb5-4eee-87e5-973a04b9c97e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-591728968/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-2785389569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 03:51:15 +0000 UTC FinishedAt: 2026-08-02 03:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 03:51:15 +0000 UTC FinishedAt: 2026-08-02 03:51:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-convert-artifact-1362658778/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 03:51:15 +0000 UTC FinishedAt: 2026-08-02 03:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 03:51:15 +0000 UTC FinishedAt: 2026-08-02 03:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 03:51:16 +0000 UTC FinishedAt: 2026-08-02 03:51:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 03:51:36 +0000 UTC FinishedAt: 2026-08-02 06:52:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkcht7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["emulator_leave_smm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3c7d7f908d574277a845423ec32250a8d8df44c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","KVM_INTEL","KVM_AMD","AMD_IOMMU","CMA","X86_X2APIC","X86_MCE"],"series_id":"f2f1e814-e4cd-4687-a5bc-67644b9b12b3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 03:51:36 +0000 UTC FinishedAt: 2026-08-02 06:52:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c40258f8-ded1-431d-8a65-d325704c133b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7c589b06-3fb5-4eee-87e5-973a04b9c97e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-591728968/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-build-action-2785389569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkcht7/series-workflowkcht7-convert-artifact-1362658778/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}