Name: series-workflow4wc7m Phase: Succeeded StartedAt: 2026-08-01 19:26:58 +0000 UTC FinishedAt: 2026-08-01 20:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[0] Phase: Succeeded StartedAt: 2026-08-01 19:26:58 +0000 UTC FinishedAt: 2026-08-01 19:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 19:26:58 +0000 UTC FinishedAt: 2026-08-01 19:43:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "fff02191-90d5-4c05-89bf-46f5979f4da1" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_arch_vcpu_ioctl", "kvm_arch_vcpu_unlocked_ioctl", "kvm_arch_commit_memory_region", "kvm_s390_pv_create_cpu", "kvm_s390_pv_destroy_cpu", "kvm_s390_handle_b2", "kvm_s390_handle_b9", "kvm_s390_inject_vcpu", "kvm_s390_faultin_gfn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODUzYzY0MzI0OWJjNTMwYmIwMTI0NTQwMjczNWU2NTU2OTllZWU5NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTk6NDA6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ0MCw2ICYjNDM7NDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0Ym9vbCBza2V5X2VuYWJsZWQ7XG4gXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXG4gXHRib29sIGFjcnNfbG9hZGVkO1xuJiM0MztcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZcbiBcdHJldHVybiByYztcbiB9XG4gXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXG4ge1xuIFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcbiBcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XG4gXHR1bmlvbiBwdGUgKnB0ZXA7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbiYjNDM7XG4gXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFx1MDAyNmNyc3RlcCwgXHUwMDI2cHRlcCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC03NzEsMjEgJiM0Mzs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuIFxuIFx0XHRpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKVxuIFx0XHRcdHJldHVybiAwO1xuLVx0XHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XG4mIzQzO1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4gXHRwZ3N0ZSA9IG9sZDtcbiBcbiBcdGlmICghcHRlcC1cdTAwM2VoLmkpIHtcbi1cdFx0cmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpO1xuLVx0XHRwZ3N0ZS5ociA9IHJjIFx1MDAzZVx1MDAzZSAxO1xuJiM0MztcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuJiM0MztcdHNrZXktXHUwMDNlciB8PSBwZ3N0ZS5ncjtcbiYjNDM7XHRza2V5LVx1MDAzZWMgfD0gcGdzdGUuZ2M7XG4gXHRwZ3N0ZS5nciA9IDA7XG4gXG4gXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XG4gXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbi1cdHJldHVybiByYztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVx1MDAzZXByaXY7XG4gXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXHUwMDNldG9rZW4gfTtcbiBcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xuJiM0MztcdHVuaW9uIHBnc3RlIHBnc3RlO1xuIFxuIFx0bmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTtcbiBcbkBAIC04NTMsNyAmIzQzOzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0cGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4mIzQzO1x0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5AQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4mIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XG4gXG4gdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5AQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcbiBcdFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cbiBcdFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cdTAwM2VwZm4pKVxuIFx0XHRcdHJldHVybiBQR01fQUREUkVTU0lORztcbi1cdFx0LyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi9cbi1cdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4mIzQzO1x0XHRpZiAoaXNfc2lncGVuZGluZ19wZm4oZi1cdTAwM2VwZm4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHQvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXG4gXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVClcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYuLjlkYjY4ZTNhYzE3OGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtNDUsMTMgJiM0Mzs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xuIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4gXG4mIzQzO1x0c2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGlmIChzcmNfaWQpXG4gXHRcdCpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuO1xuIFxuQEAgLTYwLDEzICYjNDM7NjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxuIFxuIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4ge1xuLVx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07XG4mIzQzO1x0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXHRpbnQgZXhwZWN0LCByYztcbiBcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRvbGRfdmFsID0gUkVBRF9PTkNFKCpzaWdwX2N0cmwpO1xuIFx0b2xkX3ZhbC5jID0gMDtcbiBcbkBAIC04NCwxMCAmIzQzOzkwLDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiYjNDM7XHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbiYjNDM7XHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXG4mIzQzO1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7XG4gXG4gXHRXUklURV9PTkNFKHNpZ3BfY3RybC1cdTAwM2V2YWx1ZSwgMCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCAxNTBiNWRkMjE3MGUyLi5mZDhiYWRiMGQ1NzFjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC01NzEsNyAmIzQzOzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG4gXHRcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXHUwMDI2c2tleSwgMCwgMCwgMCk7XG4tXHRcdGlmIChyIFx1MDAzZT0gMClcbiYjNDM7XHRcdGlmIChyID09IDAgfHwgciA9PSAxKVxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxuQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOlxuLVx0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTtcbi1cdFx0aWYgKHIgXHUwMDNlIDApXG4tXHRcdFx0cmV0dXJuIHIgXHUwMDNjXHUwMDNjIDE7XG4mIzQzO1x0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcdTAwMjZza2V5KTtcbiYjNDM7XHRcdGlmICghcilcbiYjNDM7XHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XG4gfVxuIFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXG5AQCAtMTIxOSw4ICYjNDM7MTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuIFxuIC8qXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxuLSAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4mIzQzOyAqIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4mIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC0xMjY1LDcgJiM0MzsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4mIzQzOyAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbiAgKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oKSBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuQEAgLTEzMDAsNyAmIzQzOzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGludCByZXMgPSAtRU5YSU87XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRndWFyZChzcmN1KShcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuJiM0MztcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbiBcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5AQCAtMTMxMSw3ICYjNDM7MTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yMjE0LDcgJiM0MzsyMjE1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHR9XG4gXG4gXHRrdmZyZWUoa2V5cyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG5AQCAtMjI3Niw3ICYjNDM7MjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIG91dDpcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiAvKlxuQEAgLTIzODYsNyAmIzQzOzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qKlxuQEAgLTI5MzQsNiAmIzQzOzI5MzUsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRjYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDoge1xuIFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XG4gXG4mIzQzO1x0XHRyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcbiBcdFx0XHRicmVhaztcbkBAIC0yOTk4LDkgJiM0MzszMDAyLDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLVx0XHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuJiM0MztcdFx0XHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuIFx0XHRpZiAoIXIpIHtcbiBcdFx0XHRyID0gY29weV90b191c2VyKGFyZ3AsIFx1MDAyNmFyZ3MsIHNpemVvZihhcmdzKSk7XG4gXHRcdFx0aWYgKHIpXG5AQCAtMzAxNCw5ICYjNDM7MzAxNyw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4gXHRcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0Y2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7XG5AQCAtMzI0Nyw3ICYjNDM7MzI1MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NyeXB0b19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBzdGF0aWMgdm9pZCBzY2FfZGlzcG9zZShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0ZnJlZV9wYWdlc19leGFjdChrdm0tXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVx1MDAzZWFyY2guc2NhKSk7XG4mIzQzO1x0aWYgKGt2bS1cdTAwM2VhcmNoLnNjYSlcbiYjNDM7XHRcdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVx1MDAzZWFyY2guc2NhLCBzaXplb2YoKmt2bS1cdTAwM2VhcmNoLnNjYSkpO1xuIFx0a3ZtLVx1MDAzZWFyY2guc2NhID0gTlVMTDtcbiB9XG4gXG5AQCAtMzQ2MSw3ICYjNDM7MzQ2NSw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbiYjNDM7XHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGNsZWFyX2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuQEAgLTM0ODEsOCAmIzQzOzM0ODUsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdFdSSVRFX09OQ0Uoc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiBcdHNldF9iaXRfaW52KHZjcHUtXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXHUwMDNlbWNuKTtcbi1cdHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbkBAIC0zNjEzLDYgJiM0MzszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxuIFx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcbiYjNDM7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC0zNjc0LDcgJiM0MzszNjgxLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbykpO1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKVxuJiM0MztcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvID0gMDtcbiB9XG4gXG5AQCAtMzc5MiwyMSAmIzQzOzM4MDAsMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxuJiM0MztcbiBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2U7XG4mIzQzO1x0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XG4gXHRpbnQgcmM7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XG4tXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5tYylcbiYjNDM7XHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbiYjNDM7XHRpZiAoIW1jKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi1cdGlmICghc2llX3BhZ2UpIHtcbi1cdFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUodmNwdS1cdTAwM2VhcmNoLm1jKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLm1jID0gTlVMTDtcbiYjNDM7XHRpZiAoIXNpZV9wYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcdTAwMjZzaWVfcGFnZS1cdTAwM2VzaWVfYmxvY2s7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFx1MDAyNnNpZV9wYWdlLVx1MDAzZWl0ZGIpO1xuQEAgLTM4NDgsMTAgJiM0MzszODU2LDkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcbiBcbiBcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuIFx0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5nbWFwKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdFZNX0VWRU5UKHZjcHUtXHUwMDNla3ZtLCAzLCBcJiMzNDtjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXCYjMzQ7LFxuQEAgLTM4NTksMjAgJiM0MzszODY2LDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR0cmFjZV9rdm1fczM5MF9jcmVhdGVfdmNwdSh2Y3B1LVx1MDAzZXZjcHVfaWQsIHZjcHUsIHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuIFxuIFx0cmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpO1xuLVx0aWYgKHJjKVxuLVx0XHRnb3RvIG91dF91Y29udHJvbF91bmluaXQ7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2VjaGlsZHJlbl9sb2NrKVxuJiM0MztcdFx0XHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbiYjNDM7XHRcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuIFxuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5tYyA9IG5vX2ZyZWVfcHRyKG1jKTtcbiYjNDM7XHRzaWVfcGFnZSA9IE5VTEw7XG4gXHRrdm1fczM5MF91cGRhdGVfdG9wb2xvZ3lfY2hhbmdlX3JlcG9ydCh2Y3B1LVx1MDAzZWt2bSwgMSk7XG4gXHRyZXR1cm4gMDtcbi1cbi1vdXRfdWNvbnRyb2xfdW5pbml0OlxuLVx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdH1cbi1vdXRfZnJlZV9zaWVfYmxvY2s6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHJldHVybiByYztcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTUwMzksNiAmIzQzOzUwNDUsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1fcnVuLVx1MDAzZWt2bV9kaXJ0eV9yZWdzIFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xuJiM0MztcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0dmNwdV9sb2FkKHZjcHUpO1xuIFxuIFx0aWYgKGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkge1xuQEAgLTU0NDcsNiAmIzQzOzU0NTcsOCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuIFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIHMzOTBpcnEgPSB7fTtcbiBcbiYjNDM7XHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdGlmIChzMzkwaW50X3RvX3MzOTBpcnEoXHUwMDI2czM5MGludCwgXHUwMDI2czM5MGlycSkpXG5AQCAtNTUyMyw2ICYjNDM7NTUzNSwxMCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRsb25nIHI7XG4gXHR1MTYgcmMsIHJyYztcbiBcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbiYjNDM7XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDI0ICYjNDM7NTgxMCw0NCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGdzdGUgcGdzdGU7XG4mIzQzO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0aWYgKHBnc3RlLmNtbWFfZCkge1xuJiM0MztcdFx0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuJiM0MztcdH1cbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcbiBcdFx0XHRcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXG4ge1xuLVx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xuLVx0aW50IHJjID0gMDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07XG4mIzQzO1x0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xuJiM0MztcdGludCByYyA9IC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcbiBcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCFtYykge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4mIzQzO1x0aWYgKCFtYylcbiBcdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4mIzQzO3JldHJ5OlxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC51c2VfY21tYSBcdTAwMjZcdTAwMjYgb2xkKSB7XG4mIzQzO1x0XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlYmFzZV9nZm4gJiM0Mzsgb2xkLVx1MDAzZW5wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3dpdGNoIChjaGFuZ2UpIHtcbiBcdFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxuIFx0XHRcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZW5wYWdlcyk7XG5AQCAtNTgyNywxMyAmIzQzOzU4NjMsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJjID0gMDtcbiBcdFx0XHRXQVJOKDEsIFwmIzM0O1Vua25vd24gS1ZNIE1SIENIQU5HRTogJWRcXG5cJiMzNDssIGNoYW5nZSk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRpZiAocmMgPT0gLUVOT01FTSkge1xuJiM0MztcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAobWMpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4gb3V0OlxuIFx0aWYgKHJjKVxuIFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcblwmIzM0Oyk7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gXHRyZXR1cm47XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZ2FkZHI7XG4mIzQzO1x0dW5pb24gc2tleSBza2V5O1xuIFx0aW50IHJlZzEsIHJlZzI7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbiYjNDM7XHRcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkciksIFx1MDAyNnNrZXkpO1xuIFx0aWYgKHJjIFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJjO1xuLVx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7XG4mIzQzO1x0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFx1MDAzZVx1MDAzZSAxKSBcdTAwMjYgMyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiYjNDM7XHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgJiM0MzsyNDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZyZWVfc3Rvcl9iYXNlKVxuJiM0MztcdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbiYjNDM7XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4mIzQzO1x0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4mIzQzO1x0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuJiM0MztcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIHtcbiBcdGludCBjYztcbkBAIC0yNTgsMjQgJiM0MzsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFdBUk5fT05DRShjYywgXCYjMzQ7cHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwmIzM0OywgKnJjLCAqcnJjKTtcbiBcbiBcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xuLVx0aWYgKCFjYylcbi1cdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxuLVx0XHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xuLVxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcbi1cdG1lbXNldChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVx1MDAzZWFyY2gucHYpKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbi1cdC8qXG4tXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxuLVx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4tXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxuLVx0ICovXG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuLVx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XG4mIzQzO1x0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcbiBcbi1cdHJldHVybiBjYyA/IEVJTyA6IDA7XG4mIzQzO1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIFx0XHQgICAgIHV2Y2IuaGVhZGVyLnJyYyk7XG4gXG4gXHRpZiAoY2MpIHtcbi1cdFx0dTE2IGR1bW15O1xuLVxuLVx0XHRrdm1fczM5MF9wdl9kZXN0cm95X2NwdSh2Y3B1LCBcdTAwMjZkdW1teSwgXHUwMDI2ZHVtbXkpO1xuJiM0MztcdFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTgwOSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiYjNDM7XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5UUilcbiBcdFx0S1ZNX1VWX0VWRU5UKGt2bSwgMywgXCYjMzQ7UFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XCYjMzQ7LFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODUzYzY0MzI0OWJjNTMwYmIwMTI0NTQwMjczNWU2NTU2OTllZWU5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTk6NDA6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00NDAsNiAmIzQzOzQ0MCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAlib29sIHNrZXlfZW5hYmxlZDsKIAkvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovCiAJYm9vbCBhY3JzX2xvYWRlZDsKJiM0MzsJYm9vbCBpbml0aWFsaXplZDsKIAlzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjsKIAl1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvOwogCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2YKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbikKJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpCiB7CiAJdW5pb24gcGdzdGUgcGdzdGUsIG9sZDsKIAl1bmlvbiBjcnN0ZSAqY3JzdGVwOwogCXVuaW9uIHB0ZSAqcHRlcDsKIAlpbnQgcmM7CiAKJiM0MzsJc2tleS0mZ3Q7c2tleSA9IDA7CiYjNDM7CiAJcmMgPSBkYXRfZW50cnlfd2FsayhOVUxMLCBnZm4sIGFzY2UsIERBVF9XQUxLX0FOWSwgVEFCTEVfVFlQRV9QQUdFX1RBQkxFLCAmYW1wO2Nyc3RlcCwgJmFtcDtwdGVwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKQEAgLTc3MSwyMSAmIzQzOzc3MywyMyBAQCBpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pCiAKIAkJaWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcikKIAkJCXJldHVybiAwOwotCQlyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7CiYjNDM7CQlza2V5LSZndDtza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSkgJmx0OyZsdDsgMTsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKIAlwZ3N0ZSA9IG9sZDsKIAogCWlmICghcHRlcC0mZ3Q7aC5pKSB7Ci0JCXJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTsKLQkJcGdzdGUuaHIgPSByYyAmZ3Q7Jmd0OyAxOwomIzQzOwkJc2tleS0mZ3Q7c2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgJmx0OyZsdDsgMTsKJiM0MzsJCXBnc3RlLmhyID0gc2tleS0mZ3Q7cjsKIAl9Ci0JcmMgfD0gKHBnc3RlLmdyICZsdDsmbHQ7IDEpIHwgcGdzdGUuZ2M7CiYjNDM7CXNrZXktJmd0O3IgfD0gcGdzdGUuZ3I7CiYjNDM7CXNrZXktJmd0O2MgfD0gcGdzdGUuZ2M7CiAJcGdzdGUuZ3IgPSAwOwogCiAJZGF0X3VwZGF0ZV9wdGVwX3NkKG9sZCwgcGdzdGUsIHB0ZXApOwogCXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwotCXJldHVybiByYzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaykKQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWwKIAlzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay0mZ3Q7cHJpdjsKIAl1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtJmd0O3Rva2VuIH07CiAJdW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7CiYjNDM7CXVuaW9uIHBnc3RlIHBnc3RlOwogCiAJbmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTsKIApAQCAtODUzLDcgJiM0Mzs4NTgsMTEgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWwKIAlpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbCkKIAkJcmV0dXJuIDA7CiAKLQlkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay0mZ3Q7YXNjZSwgZmFsc2UpOwomIzQzOwlwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwomIzQzOwlwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLSZndDthc2NlLCBmYWxzZSk7CiYjNDM7CXBnc3RlLmNtbWFfZCA9IDA7CiYjNDM7CXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5oIGIvYXJjaC9zMzkwL2t2bS9kYXQuaAppbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmgKQEAgLTUzNyw3ICYjNDM7NTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2YKIAkJCXVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7CiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sCiAJCQkgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTsKLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7CiYjNDM7aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTsKIGxvbmcgZGF0X3Jlc2V0X3NrZXlzKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQpOwogCiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwppbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwpAQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmEKIAkJLyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi8KIAkJaWYgKGlzX25vc2xvdF9wZm4oZi0mZ3Q7cGZuKSkKIAkJCXJldHVybiBQR01fQUREUkVTU0lORzsKLQkJLyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi8KLQkJaWYgKGYtJmd0O3BmbiA9PSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovCiYjNDM7CQlpZiAoaXNfc2lncGVuZGluZ19wZm4oZi0mZ3Q7cGZuKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwogCQkvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovCiAJCWlmIChmLSZndDtwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCA5ZTNlNmIwZDcyYWQ2Li45ZGI2OGUzYWMxNzhmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTQ1LDEzICYjNDM7NDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjsKIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZCkKIHsKIAlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKLQl1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiYjNDM7CXVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDsKIAogCWlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKQogCQlyZXR1cm4gMDsKJiM0MzsJaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKQomIzQzOwkJcmV0dXJuIDA7CiAKIAlCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTsKIAomIzQzOwlzaWdwX2N0cmwgPSBzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiAJaWYgKHNyY19pZCkKIAkJKnNyY19pZCA9IHNpZ3BfY3RybC5zY247CiAKQEAgLTYwLDEzICYjNDM7NjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKQogCiBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKQogewotCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwotCXVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAl1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07CiYjNDM7CXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsOwogCWludCBleHBlY3QsIHJjOwogCiAJQlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7CiYjNDM7CWlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pLCB2Y3B1LSZndDtrdm0pKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJc2lncF9jdHJsID0gJmFtcDtzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiAJb2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTsKIAlvbGRfdmFsLmMgPSAwOwogCkBAIC04NCwxMCAmIzQzOzkwLDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpCiBzdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwotCXVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKJiM0MzsJdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDsKIAotCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiYjNDM7CWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpCiAJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSBhZnRlciB0aGUgYWJvdmUgY2hlY2ssIHRvIHByZXZlbnQgZ29pbmcgb3V0IG9mIGJvdW5kcyAqLwomIzQzOwlzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAlrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpOwogCiAJV1JJVEVfT05DRShzaWdwX2N0cmwtJmd0O3ZhbHVlLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAxNTBiNWRkMjE3MGUyLi5mZDhiYWRiMGQ1NzFjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC01NzEsNyAmIzQzOzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wCiAJc3dpdGNoIChvcCkgewogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRToKIAkJciA9IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShtYywgYXNjZSwgZ2ZuLCBza2V5LCAmYW1wO3NrZXksIDAsIDAsIDApOwotCQlpZiAociAmZ3Q7PSAwKQomIzQzOwkJaWYgKHIgPT0gMCB8fCByID09IDEpCiAJCQlyZXR1cm4gc2tleS5za2V5OwogCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6CkBAIC01ODAsMTQgJiM0Mzs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AKIAkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRToKLQkJciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7Ci0JCWlmIChyICZndDsgMCkKLQkJCXJldHVybiByICZsdDsmbHQ7IDE7CiYjNDM7CQlyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCAmYW1wO3NrZXkpOwomIzQzOwkJaWYgKCFyKQomIzQzOwkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmd0OyAwID8gLUVGQVVMVCA6IHI7CiB9CiAKIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovCkBAIC0xMjE5LDggJiM0MzsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpCiAKIC8qCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aAotICoga3ZtLSZndDtzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLAotICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS4KJiM0MzsgKiBrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKJiM0MzsgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLgogICovCiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB7CkBAIC0xMjY1LDcgJiM0MzsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKQogfQogCiAvKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tJmd0O3Nsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsCiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuCiAgKi8KIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKQpAQCAtMTMwMCw3ICYjNDM7MTMwMCw5IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sCiB7CiAJaW50IHJlcyA9IC1FTlhJTzsKIAotCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwlndWFyZChzcmN1KSgmYW1wO2t2bS0mZ3Q7c3JjdSk7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKTsKJiM0MzsKIAlzd2l0Y2ggKGF0dHItJmd0O2F0dHIpIHsKIAljYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDoKIAkJcmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7CkBAIC0xMzExLDcgJiM0MzsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSwKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIAogCXJldHVybiByZXM7CiB9CkBAIC0yMjE0LDcgJiM0MzsyMjE1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCiAJfQogCiAJa3ZmcmVlKGtleXMpOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmbHQ7PSAwID8gciA6IC1FRkFVTFQ7CiB9CiAKIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKQpAQCAtMjI3Niw3ICYjNDM7MjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKQogCWt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTsKIG91dDoKIAlrdmZyZWUoa2V5cyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogLyoKQEAgLTIzODYsNyAmIzQzOzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLAogCiAJc2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sICZhbXA7a3ZtLSZndDthcmNoLmdtYXAtJmd0O2ZsYWdzKTsKIAotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmbHQ7PSAwID8gciA6IC1FRkFVTFQ7CiB9CiAKIC8qKgpAQCAtMjkzNCw2ICYjNDM7MjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAljYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDogewogCQlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7CiAKJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKGt2bV9pc191Y29udHJvbChrdm0pKQomIzQzOwkJCWJyZWFrOwogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSkKIAkJCWJyZWFrOwpAQCAtMjk5OCw5ICYjNDM7MzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpCiAJCQlicmVhazsKLQkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7Ci0JCXIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgJmFtcDthcmdzKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKJiM0MzsJCXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jaykKJiM0MzsJCQlyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sICZhbXA7YXJncyk7CiAJCWlmICghcikgewogCQkJciA9IGNvcHlfdG9fdXNlcihhcmdwLCAmYW1wO2FyZ3MsIHNpemVvZihhcmdzKSk7CiAJCQlpZiAocikKQEAgLTMwMTQsOSAmIzQzOzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXIgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDthcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKQogCQkJYnJlYWs7Ci0JCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKTsKIAkJciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCAmYW1wO2FyZ3MpOwotCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCQlicmVhazsKIAl9CiAJY2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7CkBAIC0zMjQ3LDcgJiM0MzszMjUwLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY3J5cHRvX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogCiBzdGF0aWMgdm9pZCBzY2FfZGlzcG9zZShzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JZnJlZV9wYWdlc19leGFjdChrdm0tJmd0O2FyY2guc2NhLCBzaXplb2YoKmt2bS0mZ3Q7YXJjaC5zY2EpKTsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC5zY2EpCiYjNDM7CQlmcmVlX3BhZ2VzX2V4YWN0KGt2bS0mZ3Q7YXJjaC5zY2EsIHNpemVvZigqa3ZtLSZndDthcmNoLnNjYSkpOwogCWt2bS0mZ3Q7YXJjaC5zY2EgPSBOVUxMOwogfQogCkBAIC0zNDYxLDcgJiM0MzszNDY1LDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKIAotCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiYjNDM7CWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpCiAJCXJldHVybjsKIAogCWNsZWFyX2JpdF9pbnYodmNwdS0mZ3Q7dmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtJmd0O21jbik7CkBAIC0zNDgxLDggJiM0MzszNDg1LDggQEAgc3RhdGljIHZvaWQgc2NhX2FkZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKQogCQlyZXR1cm47CiAKJiM0MzsJV1JJVEVfT05DRShzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zZGEsIHZpcnRfdG9fcGh5cyh2Y3B1LSZndDthcmNoLnNpZV9ibG9jaykpOwogCXNldF9iaXRfaW52KHZjcHUtJmd0O3ZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLSZndDttY24pOwotCXNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LSZndDthcmNoLnNpZV9ibG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCkKQEAgLTM2MTMsNiAmIzQzOzM2MTcsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtJmd0O2t2bSwgNzQpIHx8IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX2luc3RyMCB8fAogCSAgICB2Y3B1LSZndDtrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlYykKIAkJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2ljdGwgfD0gSUNUTF9PUEVSRVhDOwomIzQzOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Y3B1LSZndDthcmNoLmluaXRpYWxpemVkLCB0cnVlKTsKIH0KIAogc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucikKQEAgLTM2NzQsNyAmIzQzOzM2ODEsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvKSk7CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Y2JybG8pCiYjNDM7CQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbykpOwogCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbyA9IDA7CiB9CiAKQEAgLTM3OTIsMjEgJiM0MzszODAwLDIxIEBAIGludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO0RFRklORV9GUkVFKHNpZV9wYWdlLCBzdHJ1Y3Qgc2llX3BhZ2UgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKF9UKSkpCiYjNDM7CiBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2U7CiYjNDM7CXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDsKJiM0MzsJc3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZSBfX2ZyZWUoc2llX3BhZ2UpID0gTlVMTDsKIAlpbnQgcmM7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7Ci0JdmNwdS0mZ3Q7YXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTsKLQlpZiAoIXZjcHUtJmd0O2FyY2gubWMpCiYjNDM7CW1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpOwomIzQzOwlpZiAoIW1jKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7Ci0JaWYgKCFzaWVfcGFnZSkgewotCQlrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LSZndDthcmNoLm1jKTsKLQkJdmNwdS0mZ3Q7YXJjaC5tYyA9IE5VTEw7CiYjNDM7CWlmICghc2llX3BhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrID0gJmFtcDtzaWVfcGFnZS0mZ3Q7c2llX2Jsb2NrOwogCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtpdGRiYSA9IHZpcnRfdG9fcGh5cygmYW1wO3NpZV9wYWdlLSZndDtpdGRiKTsKQEAgLTM4NDgsMTAgJiM0MzszODU2LDkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdmNwdS0mZ3Q7cnVuLSZndDtrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTOwogCiAJaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKSB7Ci0JCXJjID0gLUVOT01FTTsKIAkJdmNwdS0mZ3Q7YXJjaC5nbWFwID0gZ21hcF9uZXdfY2hpbGQodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmdtYXAsIC0xVUwpOwogCQlpZiAoIXZjcHUtJmd0O2FyY2guZ21hcCkKLQkJCWdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrOwomIzQzOwkJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCVZNX0VWRU5UKHZjcHUtJmd0O2t2bSwgMywgJiMzNDtjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwJiMzNDssCkBAIC0zODU5LDIwICYjNDM7Mzg2NiwxOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtJmd0O3ZjcHVfaWQsIHZjcHUsIHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKTsKIAogCXJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCQlzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmdtYXAtJmd0O2NoaWxkcmVuX2xvY2spCiYjNDM7CQkJCWdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtJmd0O2FyY2guZ21hcCk7CiYjNDM7CQkJdmNwdS0mZ3Q7YXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS0mZ3Q7YXJjaC5nbWFwKTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQogCiYjNDM7CXZjcHUtJmd0O2FyY2gubWMgPSBub19mcmVlX3B0cihtYyk7CiYjNDM7CXNpZV9wYWdlID0gTlVMTDsKIAlrdm1fczM5MF91cGRhdGVfdG9wb2xvZ3lfY2hhbmdlX3JlcG9ydCh2Y3B1LSZndDtrdm0sIDEpOwogCXJldHVybiAwOwotCi1vdXRfdWNvbnRyb2xfdW5pbml0OgotCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewotCQlnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LSZndDthcmNoLmdtYXApOwotCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LSZndDthcmNoLmdtYXApOwotCX0KLW91dF9mcmVlX3NpZV9ibG9jazoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7Ci0JcmV0dXJuIHJjOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC01MDM5LDYgJiM0Mzs1MDQ1LDEwIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgIGt2bV9ydW4tJmd0O2t2bV9kaXJ0eV9yZWdzICZhbXA7IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJdmNwdV9sb2FkKHZjcHUpOwogCiAJaWYgKGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkgewpAQCAtNTQ0Nyw2ICYjNDM7NTQ1Nyw4IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLAogCQlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7CiAJCXN0cnVjdCBrdm1fczM5MF9pcnEgczM5MGlycSA9IHt9OwogCiYjNDM7CQlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3MzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKHMzOTBpbnRfdG9fczM5MGlycSgmYW1wO3MzOTBpbnQsICZhbXA7czM5MGlycSkpCkBAIC01NTIzLDYgJiM0Mzs1NTM1LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAlsb25nIHI7CiAJdTE2IHJjLCBycmM7CiAKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJdmNwdV9sb2FkKHZjcHUpOwogCiAJc3dpdGNoIChpb2N0bCkgewpAQCAtNTc5NCwyNCAmIzQzOzU4MTAsNDQgQEAgaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspCiYjNDM7ewomIzQzOwl1bmlvbiBwZ3N0ZSBwZ3N0ZTsKJiM0MzsKJiM0MzsJcGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKJiM0MzsJaWYgKHBnc3RlLmNtbWFfZCkgewomIzQzOwkJcGdzdGUuY21tYV9kID0gMDsKJiM0MzsJCWF0b21pYzY0X2RlYyh3YWxrLSZndDtwcml2KTsKJiM0MzsJfQomIzQzOwlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLAogCQkJCWNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywKIAkJCQllbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKQogewotCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDsKLQlpbnQgcmMgPSAwOwomIzQzOwljb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07CiYjNDM7CXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDsKJiM0MzsJaW50IHJjID0gLUVOT01FTTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCiAJaWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSkKIAkJcmV0dXJuOwogCiAJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7Ci0JaWYgKCFtYykgewotCQlyYyA9IC1FTk9NRU07CiYjNDM7CWlmICghbWMpCiAJCWdvdG8gb3V0OwotCX0KLQomIzQzO3JldHJ5OgogCXNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCAmYW1wO2t2bS0mZ3Q7bW11X2xvY2spIHsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gudXNlX2NtbWEgJmFtcDsmYW1wOyBvbGQpIHsKJiM0MzsJCQlfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC0mZ3Q7YmFzZV9nZm4sIG9sZC0mZ3Q7YmFzZV9nZm4gJiM0Mzsgb2xkLSZndDtucGFnZXMsCiYjNDM7CQkJCQkgICAga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2UsICZhbXA7b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsCiYjNDM7CQkJCQkgICAgJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcyk7CiYjNDM7CQl9CiYjNDM7CiAJCXN3aXRjaCAoY2hhbmdlKSB7CiAJCWNhc2UgS1ZNX01SX0RFTEVURToKIAkJCXJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgb2xkLSZndDtiYXNlX2dmbiwgb2xkLSZndDtucGFnZXMpOwpAQCAtNTgyNywxMyAmIzQzOzU4NjMsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCWNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKJiM0MzsJCQlyYyA9IDA7CiAJCQlXQVJOKDEsICYjMzQ7VW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxuJiMzNDssIGNoYW5nZSk7CiAJCX0KIAl9CiYjNDM7CWlmIChyYyA9PSAtRU5PTUVNKSB7CiYjNDM7CQlyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIG91dDoKIAlpZiAocmMpCiAJCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cbiYjMzQ7KTsKLQlrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBnYWRkcjsKJiM0MzsJdW5pb24gc2tleSBza2V5OwogCWludCByZWcxLCByZWcyOwogCWludCByYzsKIApAQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpOwogCWdhZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgZ2FkZHIpOwogCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKLQkJcmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LSZndDthcmNoLmdtYXAtJmd0O2FzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTsKJiM0MzsJCXJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgJmFtcDtza2V5KTsKIAlpZiAocmMgJmd0OyAwKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTsKIAlpZiAocmMgJmx0OyAwKQogCQlyZXR1cm4gcmM7Ci0Ja3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7CiYjNDM7CWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSAmZ3Q7Jmd0OyAxKSAmYW1wOyAzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqLwogCQlrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTsKIAl9IGVsc2UgewotCQlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiYjNDM7CQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spCiYjNDM7CQkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O21tdV9sb2NrKQomIzQzOwkJCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiAJCWlmIChpICZsdDsgMCkKIAkJCXJldHVybiBpOwogCQkvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jCmluZGV4IDFiZWFjYzg0MWNhODUuLmIwMmUwMTU5ZDNjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3B2LmMKQEAgLTI0NCw2ICYjNDM7MjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSkKIAlrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIgPSBOVUxMOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKQomIzQzO3sKJiM0MzsJaWYgKGZyZWVfc3Rvcl9iYXNlKQomIzQzOwkJZnJlZV9wYWdlcyh2Y3B1LSZndDthcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7CiYjNDM7CWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jcHUgPSAwOwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7cHZfaGFuZGxlX2NvbmZpZyA9IDA7CiYjNDM7CW1lbXNldCgmYW1wO3ZjcHUtJmd0O2FyY2gucHYsIDAsIHNpemVvZih2Y3B1LSZndDthcmNoLnB2KSk7CiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtzZGYgPSAwOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLgomIzQzOwkgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2YKJiM0MzsJICogdGhlIGp1c3QgZnJlZWQgc2lkYS4KJiM0MzsJICovCiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtnYmVhID0gMTsKJiM0MzsJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiB7CiAJaW50IGNjOwpAQCAtMjU4LDI0ICYjNDM7Mjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiAJV0FSTl9PTkNFKGNjLCAmIzM0O3Byb3R2aXJ0IGRlc3Ryb3kgY3B1IGZhaWxlZCByYyAleCBycmMgJXgmIzM0OywgKnJjLCAqcnJjKTsKIAogCS8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqLwotCWlmICghY2MpCi0JCWZyZWVfcGFnZXModmNwdS0mZ3Q7YXJjaC5wdi5zdG9yX2Jhc2UsCi0JCQkgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTsKLQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7cHZfaGFuZGxlX2NwdSA9IDA7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jb25maWcgPSAwOwotCW1lbXNldCgmYW1wO3ZjcHUtJmd0O2FyY2gucHYsIDAsIHNpemVvZih2Y3B1LSZndDthcmNoLnB2KSk7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3NkZiA9IDA7Ci0JLyoKLQkgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLgotCSAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZgotCSAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuCi0JICovCi0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2diZWEgPSAxOwotCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOwomIzQzOwlrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCAhY2MpOwogCi0JcmV0dXJuIGNjID8gRUlPIDogMDsKJiM0MzsJcmV0dXJuIGNjID8gLUVJTyA6IDA7CiB9CiAKIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCkBAIC0zMTksOSAmIzQzOzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiAJCSAgICAgdXZjYi5oZWFkZXIucnJjKTsKIAogCWlmIChjYykgewotCQl1MTYgZHVtbXk7Ci0KLQkJa3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgJmFtcDtkdW1teSwgJmFtcDtkdW1teSk7CiYjNDM7CQlrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCB0cnVlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC04MDksNyAmIzQzOzgxMCw3IEBAIHN0YXRpYyBpbnQgdW5wYWNrX29uZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdTY0IHR3ZWFrLAogCQkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOKQomIzQzOwlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FQUdBSU4gJmFtcDsmYW1wOyByZXQgIT0gLUVJTlRSKQogCQlLVk1fVVZfRVZFTlQoa3ZtLCAzLCAmIzM0O1BST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleCYjMzQ7LAogCQkJICAgICB1dmNiLmdhZGRyLCAqcmMsICpycmMpOwogCXJldHVybiByZXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUzM5MCBLVk0gUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgdGhlIGBhcmNoL3MzOTAva3ZtL2AgZGlyZWN0b3J5LiBUaGlzIGlzIEtWTSBjb2RlLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSBzZWUgY2hhbmdlcyBpbiBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBrdm1fczM5MF9rZXlvcGAsIGFuZCBhIGJ1bmNoIG1vcmUsIGFsbCBkZWFsaW5nIHdpdGggVk0gc2V0dXAsIGNvbnRyb2wsIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gU2luY2UgdGhpcyBpcyBLVk0gb24gczM5MCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIEtWTSBpb2N0bHMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IENhbiB0aGlzIGJlIGZ1enplZD8gVGhlIHByb21wdCBtZW50aW9ucyBzY2VuYXJpb3Mgd2hlcmUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBpbiB3aGljaCBjYXNlIHdlIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQnV0IGhhbmcgb27igKYgczM5MCBLVk0gKmRvZXMqIHJlcXVpcmUgYW4gYWN0dWFsIHMzOTB4IGhvc3QgZm9yIHRoZSBLVk0gcGFydCwgZG9lc24mIzM5O3QgaXQ/IFFFTVUgY2FuIGVtdWxhdGUgczM5MHgsIGFuZCBTeXprYWxsZXIgc3VwcG9ydHMgczM5MHguIEJ1dCwgZG9lcyBTeXprYWxsZXIgcnVuIG9uIHMzOTB4PyBZZXMhIFllcywgaXQgZG9lcy4gVGhlcmVmb3JlLCB0aGVzZSBLVk0gaW9jdGxzIGFyZSByZWFjaGFibGUuIFNvLCB1bmxlc3MgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgeDg2XzY0LCB0aGVuIGl0IHdvdWxkIGJlIHJlYWNoYWJsZS4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgYXNrcyBhYm91dCBLVk0gZm9yIHMzOTB4LiBJdCBpcyByZWFjaGFibGUhIEluIGEgU3l6a2FsbGVyIGVudmlyb25tZW50IGl0IHdvdWxkIGJlLCBzaW5jZSBTeXprYWxsZXIgcnVucyBvbiBzMzkweC4gU28sIGdpdmVuIHRoYXQgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZnV6emluZyBzMzkweCwgSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4gVGhpcyBpcyBjb3JlIEtWTSBsb2dpYyBmb3IgczM5MCwgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldC4KCkxldCYjMzk7cyBxdWlja2x5IHNjYW4gdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgdGhhdCB0aGUgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBzaWduYXR1cmUgaGFzIGNoYW5nZWQuIFdlJiMzOTt2ZSBnb3QgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBub3cgaGFuZGxpbmcgYGlzX3NpZ3BlbmRpbmdfcGZuYC4gVGhlcmUgYXJlIGFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAgY2hlY2tzIGluIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIGNhbGxzLCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHVzaW5nIGEgZGlmZmVyZW50IGxvY2sgbm93LiBJJiMzOTttIHNlZWluZyBjaGVja3MgZm9yIHRoZSBgdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZGAgZmxhZyBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAuIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYWxzbyB1c2luZyBuZXcgbG9ja3MgYW5kIGZyZWUgb3BlcmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgZml4ZXMgZm9yIG1lbW9yeSBsZWFrcyBpbiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLgoKSSYjMzk7ZCBzYXkgbXkgZm9jdXMgc3ltYm9scyBmcm9tIHRoZSBkaWZmIGFyZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYW5kIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBLY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQuIGBDT05GSUdfS1ZNYCBpcyBkZWZpbml0ZWx5IG5lZWRlZC4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGJ1dCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgd2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gYW5kIFMzOTAgVWNvbnRyb2wgaW4gdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MYCBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSByZWxldmFudCBoZXJlLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgKmFjdHVhbGx5KiBiZWluZyB1dGlsaXplZCBpbiB0aGlzIHBhdGNoJiMzOTtzIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGEgcmVmZXJlbmNlIHRvIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkuIE5vdyBJIG5lZWQgdG8gbG9vayB1cCB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiB3aGF0IGBrdm1faXNfdWNvbnRyb2xgIGlzIGRvaW5nIGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9pc191Y29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9nbWFwLmM9ODk9c3RhdGljIHZvaWQgZ21hcF9hZGRfY2hpbGQoc3RydWN0IGdtYXAgKnBhcmVudCwgc3RydWN0IGdtYXAgKmNoaWxkKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExMzpcdGlmIChrdm1faXNfdWNvbnRyb2wocGFyZW50LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTQtXHRcdGNsZWFyX2JpdChHTUFQX0ZMQUdfT1dOU19QQUdFVEFCTEVTLCBcdTAwMjZjaGlsZC1cdTAwM2VmbGFncyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MTM9aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTYtXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjYxNzpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTQ1PXN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTUxLVx0XHRyZXR1cm4gMDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6NTI6XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtNTMtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9NjQ9c3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTcxLVx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjcyOlx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSwgdmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy03My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz05MD1zdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtOTQtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjk1Olx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTk2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODE4PXN0YXRpYyBpbnQgZmxpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzMS1cdGNhc2UgS1ZNX0RFVl9GTElDX0FQRl9FTkFCTEU6XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4MzI6XHRcdGlmIChrdm1faXNfdWNvbnRyb2woZGV2LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODM2LVx0Y2FzZSBLVk1fREVWX0ZMSUNfQVBGX0RJU0FCTEVfV0FJVDpcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgzNzpcdFx0aWYgKGt2bV9pc191Y29udHJvbChkZXYtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxMjE9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTMwLVx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfUzM5MF9BREFQVEVSOlxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTMxOlx0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxMzItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTYwMj1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NDUtXHRcdHIgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjY0NjpcdFx0aWYgKGhwYWdlIFx1MDAyNlx1MDAyNiAhKGt2bSBcdTAwMjZcdTAwMjYga3ZtX2lzX3Vjb250cm9sKGt2bSkpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY0Ny1cdFx0XHRyID0gMTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjUwLVx0XHRyID0gMDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2NTE6XHRcdGlmIChocGFnZV8yZyBcdTAwMjZcdTAwMjYgIShrdm0gXHUwMDI2XHUwMDI2IGt2bV9pc191Y29udHJvbChrdm0pKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NTItXHRcdFx0ciA9IDE7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc0Nj1pbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03NTMtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NzU0Olx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc1NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc4OD1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtODkyLVx0XHRcdHIgPSAtRUJVU1k7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6ODkzOlx0XHRlbHNlIGlmICghaHBhZ2UgfHwga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEgfHwga3ZtX2lzX3Vjb250cm9sKGt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtODk0LVx0XHRcdHIgPSAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05MTMtXHRcdFx0ciA9IC1FQlVTWTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo5MTQ6XHRcdH0gZWxzZSBpZiAoIWhwYWdlXzJnIHx8IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIHx8IGt2bV9pc191Y29udHJvbChrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtOTE1LVx0XHRcdHIgPSAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz05OTM9c3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDQwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEwNDE6XHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDQyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI2PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzOC1cdFx0ciA9IC1FSU5WQUw7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjkzOTpcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NDAtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM0MDU9dm9pZCBrdm1fYXJjaF92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDEyLVx0a3ZtX2NsZWFyX2FzeW5jX3BmX2NvbXBsZXRpb25fcXVldWUodmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQxMzpcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDE0LVx0XHRzY2FfZGVsX3ZjcHUodmNwdSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQxNzpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxOC1cdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwNT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTItXHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxMzpcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTQtXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzA5PXN0YXRpYyBpbnQga3ZtX3MzOTBfdmNwdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3MzMtXHRcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNiIHw9IEVDQl9URTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNzM0Olx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3MzUtXHRcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNiIHw9IEVDQl9TUEVDSTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzc5Nj1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5Ny17XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzc5ODpcdGlmICgha3ZtX2lzX3Vjb250cm9sKGt2bSkgXHUwMDI2XHUwMDI2ICFzY2FfY2FuX2FkZF92Y3B1KGt2bSwgaWQpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3OTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zODA1PWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM4NTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg1ODpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg1OS1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODY5LVx0aWYgKHJjKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg3MDpcdFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODcxLVx0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQzMjM9c3RhdGljIGludCB2Y3B1X3Vjb250cm9sX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90ICpnYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDMyNi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MzI3Olx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MzI4LVx0XHRyYyA9IGdtYXBfdWNhc190cmFuc2xhdGUodmNwdS1cdTAwM2VhcmNoLm1jLCB2Y3B1LVx1MDAzZWFyY2guZ21hcCwgZ2FkZHIpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NTU3PXN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3MC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTcxOlx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3Mi1cdFx0cmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ0MD1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ1OS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NDYwOlx0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDYxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NTI5PWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxMy1cdFx0ciA9IC1FSU5WQUw7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTYxNDpcdFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MTUtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MzEtXHRcdHIgPSAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MzI6XHRcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMzLVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzQ4PXZtX2ZhdWx0X3Qga3ZtX2FyY2hfdmNwdV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzUxLVx0aWYgKCh2bWYtXHUwMDNlcGdvZmYgPT0gS1ZNX1MzOTBfU0lFX1BBR0VfT0ZGU0VUKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NTI6XHRcdCBcdTAwMjZcdTAwMjYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTc1My1cdFx0dm1mLVx1MDAzZXBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3Njc9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NzEte1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NzI6XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkgXHUwMDI2XHUwMDI2IG5ldyBcdTAwMjZcdTAwMjYgbmV3LVx1MDAzZWlkIFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTc3My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU5MDE9bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTA2LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5MDc6XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTA4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9MTExPXN0YXRpYyBpbmxpbmUgaW50IGlzX3ZjcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTExNS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDoxMTY6c3RhdGljIGlubGluZSBpbnQga3ZtX2lzX3Vjb250cm9sKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0xMTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTExCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEtWTV9TMzkwX1VDT05UUk9MIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSB2YWxpZCBjb25maWcgb3B0aW9uLiBOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgaXQgcmVsaWVzIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIGFueSBwb3RlbnRpYWwgcHJlcmVxdWlzaXRlcyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGBLVk1fUzM5MF9VQ09OVFJPTGAgdG8gYmUgZW5hYmxlZC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBhIEtWTSBlbnZpcm9ubWVudCBvbiBzMzkwIGhhcmR3YXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzEyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtWTSBLY29uZmlnIGZvciBzMzkwIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhpcyBhcmVhIGJlY2F1c2UuLi4gd2VsbCwgSSBzdXNwZWN0IHRoZXJlJiMzOTtzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBvciBwb3NzaWJseSBwcm9ibGVtYXRpYyB0aGVyZS4gTXkgaW5pdGlhbCBndWVzcywgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYSBmZWF0dXJlIGZsYWcgcmVsYXRlZCB0byBLVk0gc3VwcG9ydCBvbiBzMzkwLiBQZXJoYXBzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIG5ldyBoYXJkd2FyZSBmZWF0dXJlLCBvciBhbiBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZyBvcHRpb25zLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gcHJvY2Vzc29yIGZlYXR1cmVzIG9yIHNwZWNpZmljIGh5cGVydmlzb3IgaW1wbGVtZW50YXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgS2NvbmZpZyBlbnRyeSAqZW5hYmxlcyogb3IgKmRpc2FibGVzKiBpbiBvcmRlciB0byBzZWUgaWYgaXQmIzM5O3MgaW1wYWN0aW5nIGEgY3VycmVudCBwcm9qZWN0LCBvciBmb3Igd2hhdCBpdCBtYXkgcmVsYXRlIGZvciBmdXR1cmUgZGVzaWduIGNvbmNlcm5zLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmNoaXRlY3R1cmFsIHNwZWNpZmljcyBvZiBzMzkwIGFuZCBob3cgS1ZNIGludGVncmF0ZXMgb24gdGhhdCBhcmNoaXRlY3R1cmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIGFsc28gd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGUgY3VycmVudCBjb25maWcgb3B0aW9uIHRvIGZ1dHVyZSBkZXNpZ25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICAzMTpcdFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gIDMyOlx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAzMzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgU3VwcG9ydCBob3N0aW5nIHBhcmF2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyB0aGUgU0lFXG4gIDM2Olx0XHQgIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdHkgb24gdGhlIG1haW5mcmFtZS4gVGhpcyBzaG91bGQgd29ya1xuICAzNzpcdFx0ICBvbiBhbnkgNjRiaXQgbWFjaGluZS5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxuICA0MDpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDQzOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBLVk1cbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgQWxsb3cgQ0FQX1NZU19BRE1JTiB1c2VycyB0byBjcmVhdGUgS1ZNIHZpcnR1YWwgbWFjaGluZXMgdGhhdCBhcmVcbiAgNTI6XHRcdCAgY29udHJvbGxlZCBieSB1c2Vyc3BhY2UuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDU1Olx0XG4gIDU2Olx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk4OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgIGFyZSB0aGUga2V5IGNvbmZpZ3MgaW52b2x2ZWQgaGVyZS4gV2FpdCBhIHNlY29uZCwgKmBLVk1gIGl0c2VsZiBpcyBhIHRyaXN0YXRlKi4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyBpdOKAmXMgaW5oZXJlbnRseSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIG90aGVyIGNyaXRlcmlhLCBzbyBhcyBsb25nIGFzIHRob3NlIGFyZSBtZXQgYEtWTWAgaXMgbm90IHRoZSBwcm9ibGVtIGFuZCBjYW4gYmUgY29uc2lkZXJlZCBhY3RpdmUuCgpOb3csIGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY3J1Y2lhbCBzZXR0aW5nIHNvbWV3aGVyZSBlbHNlLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgY29kZSB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBtYWtlIHN1cmUgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBhZGRyZXNzZWQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBhcmNoL3MzOTAva3ZtL3B2LmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgc3BvdCB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgY29uZmlndXJhdGlvbiBzZXR1cC4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjb25maWdzIGludGVyYWN0IGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW1wbGljaXQgZGVwZW5kZW5jeSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjQ0Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2NwdXNfdG9fcHYoc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ2MC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNDYxOlx0XHRyID0ga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSh2Y3B1LCByYywgcnJjKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNDYyLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VtdXRleCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM3MDk9c3RhdGljIGludCBrdm1fczM5MF92Y3B1X3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc4Ni1cdGlmIChrdm1fczM5MF9wdl9pc19wcm90ZWN0ZWQodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzc4NzpcdFx0cmMgPSBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHZjcHUsIFx1MDAyNnV2cmMsIFx1MDAyNnV2cnJjKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNzg4LVx0XHRpZiAocmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTMwNT1pbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6MzA2OmludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTMwNy1pbnQga3ZtX3MzOTBfcHZfc2V0X2FzaWRlKHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpO1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz0yNjU9aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTI4My1cbmFyY2gvczM5MC9rdm0vcHYuYzoyODQ6aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0vcHYuYy0yODUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHB2LmNgKioKCk9rYXksIHNvIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IGBwdi5jYCBhbmQgd2hldGhlciBpdCYjMzk7cyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBrZXJuZWwgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhlIGBhcmNoL3MzOTAva3ZtL01ha2VmaWxlYCBmaWxlIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciBLVk0gb24gczM5MCBpcyBkZWZpbmVkLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBvciBydWxlcyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBzb3VyY2UgZmlsZS4gVGltZSB0byBvcGVuIHRoYXQgdXAgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B2XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSAmIzQzOz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgJiM0Mzs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTS1TMzkwIENvbXBpbGF0aW9uIGFuZCBLZXkgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBLVk0tUzM5MCBjb2RlIGFuZCBob3cgaXQmIzM5O3MgY29tcGlsZWQuIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgcHYub2AsIGBkYXQuY2AsIGBmYXVsdGluLmNgLCBgaW50ZXJydXB0LmNgLCBga3ZtLXMzOTAuY2AsIGFuZCBgcHJpdi5jYCBhcmUgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYEtWTWAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCk15IGF0dGVudGlvbiB0aGVuIG1vdmVzIHRvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG9uZXMgYXJlIGtleSBoZXJlLCBzbyBJJiMzOTttIG5vdGluZyB0aGVzZSBkb3duIGFzIHBvdGVudGlhbCBhcmVhcyBvZiBpbnZlc3RpZ2F0aW9uOiBgS1ZNYCBhbmQgYEtWTV9TMzkwX1VDT05UUk9MYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUga2V5IHN5bWJvbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGBoYW5kbGVfcnJiZWAsIGFuZCBgaGFuZGxlX2Vzc2FgLgoKSG9sZCBvbiwgSSBzZWUgYSBjb25uZWN0aW9uIGhlcmUhIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9ycmJlYCBhbmQgYGt2bV9zMzkwX2tleW9wYC4gYGhhbmRsZV9ycmJlYCBpcyBkZWZpbml0ZWx5IGFuIGluc3RydWN0aW9uIGhhbmRsZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBga3ZtX3MzOTBfa2V5b3BgLiBJcyBpdCBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfZ3Vlc3Rfc2tleV9vcGA/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9rZXlvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NTA9c3RhdGljIHZvaWQgX19rdm1fczM5MF9leGl0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NjI6c3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjY9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDYxLVx0XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDYyOlx0XHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNjMtXHRcdHVuaW9uIHNrZXkgc2tleTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3NC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc1Olx0XHRyID0ga3ZtX3MzOTBfa2V5b3AobWMsIGt2bSwga29wLm9wZXJhdGlvbiwga29wLmd1ZXN0X2FkZHIsIHNrZXkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzYtXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MDgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX1MzOTBfS0VZT1AgTXlzdGVyeSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBrdm1fczM5MF9rZXlvcGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCwgc3BlY2lmaWNhbGx5IHdoZW4gaGFuZGxpbmcgYEtWTV9TMzkwX0tFWU9QYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBgS1ZNX1MzOTBfS0VZT1BgIGRvZXNuJiMzOTt0IHNvdW5kIGZhbWlsaWFyLCBhbmQgdGhhdCYjMzk7cyBub3QgZ29vZC4gSXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQgaW9jdGwuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBBaCwgcmlnaHQsIGBrdm1fczM5MF9rZXlvcGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGNsdWUuIEhtbSwgY291bGQgdGhpcyBiZSBhIHR5cG8/IFBlcmhhcHMgdGhlIGludGVuZGVkIGlvY3RsIGlzIGBLVk1fUzM5MF9aUENJX09QYD8gTm8sIHdhaXQsIHRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gYEtWTV9TMzkwX0tFWU9QYCBzdGlsbCBkb2VzbiYjMzk7dCBleGlzdCwgSSBuZWVkIHRvIGNoZWNrIGBrdm1fYXJjaF92bV9pb2N0bGAgYWdhaW4sIGFyb3VuZCBsaW5lIDMwNzUgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzA1MDpcdFx0fVxuMzA1MTpcdFx0Y2FzZSBLVk1fUzM5MF9NRU1fT1A6IHtcbjMwNTI6XHRcdFx0c3RydWN0IGt2bV9zMzkwX21lbV9vcCBtZW1fb3A7XG4zMDUzOlx0XG4zMDU0Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtZW1fb3AsIGFyZ3AsIHNpemVvZihtZW1fb3ApKSA9PSAwKVxuMzA1NTpcdFx0XHRcdHIgPSBrdm1fczM5MF92bV9tZW1fb3Aoa3ZtLCBcdTAwMjZtZW1fb3ApO1xuMzA1NjpcdFx0XHRlbHNlXG4zMDU3Olx0XHRcdFx0ciA9IC1FRkFVTFQ7XG4zMDU4Olx0XHRcdGJyZWFrO1xuMzA1OTpcdFx0fVxuMzA2MDpcdFx0Y2FzZSBLVk1fUzM5MF9LRVlPUDoge1xuMzA2MTpcdFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbjMwNjI6XHRcdFx0c3RydWN0IGt2bV9zMzkwX2tleW9wIGtvcDtcbjMwNjM6XHRcdFx0dW5pb24gc2tleSBza2V5O1xuMzA2NDpcdFxuMzA2NTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2a29wLCBhcmdwLCBzaXplb2Yoa29wKSkpIHtcbjMwNjY6XHRcdFx0XHRyID0gLUVGQVVMVDtcbjMwNjc6XHRcdFx0XHRicmVhaztcbjMwNjg6XHRcdFx0fVxuMzA2OTpcdFx0XHRza2V5LnNrZXkgPSBrb3Aua2V5O1xuMzA3MDpcdFxuMzA3MTpcdFx0XHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbjMwNzI6XHRcdFx0aWYgKCFtYylcbjMwNzM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMwNzQ6XHRcbjMwNzU6XHRcdFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcbjMwNzY6XHRcdFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuMzA3NzpcdFx0XHRpZiAociBcdTAwM2MgMClcbjMwNzg6XHRcdFx0XHRicmVhaztcbjMwNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2MTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNX1MzOTBfS0VZT1AgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBLVk1fUzM5MF9LRVlPUGAgaXMgaW5kZWVkIGFuIGlvY3RsLCBhcyBJIHN1c3BlY3RlZC4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3Q6CgoqICAgYGt2bV9hcmNoX3ZtX2lvY3RsYAoqICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgCiogICBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gCiogICBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAKKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAKKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YAoqICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YAoqICAgYGhhbmRsZV9ycmJlYAoqICAgYGhhbmRsZV9lc3NhYAoKV2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiB3YXJucyBhZ2FpbnN0IGZvY3VzaW5nIG9uIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIGJpYXNpbmcgdGhlIHRlc3QgZGlzdHJpYnV0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBhdm9pZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBLVk0sIGJ1dCBpdCYjMzk7cyAqdmVyeSogZnJlcXVlbnRseSBjYWxsZWQuCgpOb3csIHdoYXQgYWJvdXQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgPyBIbW0sIHRoZXkmIzM5O3JlIG1vcmUgZ2VuZXJpYywgYnV0IHRoZXkmIzM5O3JlIHRoZSBlbnRyeSBwb2ludHMgZm9yIGlvY3RscyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhleSYjMzk7cmUgcHJvYmFibHkgd29ydGggbG9va2luZyBhdC4KCkFoLCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLiBOb3cgd2hlcmUgaXMgdGhhdCBjYWxsZWQgZnJvbT8gSSB0aG91Z2h0IGl0IG1pZ2h0IGJlIHNvbWV0aGluZyBsaWtlIGBrdm1fdm1faW9jdGxfc2V0X2V4dGVuc2lvbmAsIGJ1dCBJIGRvbiYjMzk7dCB0aGluayB0aGF0JiMzOTtzIHJpZ2h0Li4uIElzIGl0IGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCB2aWEgYEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVGA/IE5vLCB3YWl0Li4uIGl0JiMzOTtzIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCB0aGF0IGNhbGxzIGl0LiBBbmQgd2hhdCYjMzk7cyBjYWxsaW5nICp0aGF0Kj8gSXMgaXQgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGNhbGwgY2hhaW4gZm9yIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyNzE9c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyOTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI5ODpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyOTktXHRcdFx0XHQgICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIwNDQ9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNjEtXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTjpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDYyOlx0XHRyZXQgPSBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKGt2bSwgYXR0cik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA2My1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIEtleSBLVk0vczM5MCBFbnRyeSBQb2ludHMqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZW50cnkgcG9pbnRzIGludG8gdGhlIEtWTS9zMzkwIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMgYXMgdGhlIHByZWZlcnJlZCBjYW5kaWRhdGVzLCBzaW5jZSB0aG9zZSByZXByZXNlbnQgd2VsbC1kZWZpbmVkIEFQSSBib3VuZGFyaWVzLgoKU28sICpga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAqIGlzIHRyaWdnZXJlZCBieSAqYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCosIHdoaWNoIGl0c2VsZiBpcyBhIGNvbnNlcXVlbmNlIG9mICpgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAqIGZyb20gdGhlIFZNLiBUaGF0IGRlZmluaXRlbHkgc2VlbXMgbGlrZSBhIHN0cm9uZyBwb2ludCBvZiBmb2N1cy4gSXQmIzM5O3MgYSBuaWNlLCBjbGVhbiBjYWxsIGNoYWluIHRvIHJlcHJlc2VudC4gSSYjMzk7dmUgZ290IHRoYXQgb25lLgoKTm93LCB3aGF0IGFib3V0IHRoZSBDTU1BIGJpdHMgZnVuY3Rpb25zPyAqYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgKiBhbmQgKmBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCogYXJlIGNhbGxlZCB2aWEgKmBrdm1fYXJjaF92bV9pb2N0bGAqLCBpbiByZXNwb25zZSB0byB0aGUgKmBLVk1fUzM5MF9HRVRfQ01NQV9CSVRTYCogYW5kICpgS1ZNX1MzOTBfU0VUX0NNTUFfQklUU2AqIGlvY3RscywgcmVzcGVjdGl2ZWx5LiBJIHRoaW5rIEkmIzM5O2xsIGFkZCAqYGt2bV9hcmNoX3ZtX2lvY3RsYCogYXMgYSBmb2N1cyBzeW1ib2wsIHNpbmNlIHRob3NlIGFyZSBob3cgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlbS4KCkkgbGlrZSAqYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgKiBhbmQgKmBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAqLiBUaGVzZSBzZWVtIGxpa2UgZ29vZCBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBDUFUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHNvIEkmIzM5O2xsIGFkZCB0aG9zZS4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBgaGFuZGxlX3JyYmVgIGFuZCBgaGFuZGxlX2Vzc2FgLiBUaGVzZSBhcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgZm9yIFJSQkUgYW5kIEVTU0EgaW5zdHJ1Y3Rpb25zLCByZXNwZWN0aXZlbHkuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhlbSwgc2luY2UgdGhleSBhcmUgc3RhdGljLiBCdXQsIGdpdmVuIHRoZWlyIHJvbGUgaW4gaW5zdHJ1Y3Rpb24gaGFuZGxpbmcsIEkmIzM5O20gZ29pbmcgdG8gY2hlY2suIAoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGluc3RydWN0aW9uIGhhbmRsZXJzLiBUaGV5ICphcmUqIGNhbGxlZCBpbnRlcm5hbGx5IHdoZW4gdGhlIGd1ZXN0IGV4ZWN1dGVzIHNwZWNpZmljIGluc3RydWN0aW9ucy4gU2hvdWxkIHRoZXkgYmUgaW5jbHVkZWQ/CgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGludGVyZmFjZXMgd2hpY2ggYXJlIG1vcmUgbGlrZWx5IHRvIGJlIHN0YWJsZSBBUEkuCgpJIHNlZSB0aGF0IGBrdm1fczM5MF9rZXlvcGAgaXMgc3RhdGljLCBidXQgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC4gSSB3YW50IHRvIGF2b2lkIGFkZGluZyBzdGF0aWMgb3IgaW5saW5lZCBmdW5jdGlvbnMuIEdpdmVuIHRoZSBndWlkYW5jZSB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLCBJIGFtIGdvaW5nIHRvIHRyeSB0byBpbmNsdWRlIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gdGhlIGxpc3QsIGluc3RlYWQuCgpSZXZpZXdpbmcgd2hhdCBJIGtub3cgc28gZmFyLCB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZToKCi0gICBga3ZtX2FyY2hfdm1faW9jdGxgCi0gICBga3ZtX2FyY2hfdmNwdV9pb2N0bGAKLSAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAKLSAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YAotICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YAoKSSB3aWxsIGFkZCB0aGVzZSB0byBteSBsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfcnJiZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHJpdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHJpdi5jPTI1Nz1zdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yODgtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyODk6c3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yOTAte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OT1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzktXHRjYXNlIDB4MmE6XG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5ODA6XHRcdHJldHVybiBoYW5kbGVfcnJiZSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MS1cdGNhc2UgMHgyYjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0MzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTS9zMzkwIEhhbmRsZXIgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YCwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhleSYjMzk7cmUgY2FsbGVkIGZyb20gdGhvc2Ugc3dpdGNoIHN0YXRlbWVudHMgd2l0aGluIHRoZSBLVk0vczM5MCBjb2RlLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHByb2JhYmx5IG5vdCBpbmxpbmVkIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGV5JiMzOTtyZSBwcmV0dHkgaGVmdHkgYW5kIGdldCBjYWxsZWQgZnJvbSBhIGxhcmdlIHN3aXRjaCwgd2hpY2ggc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGRlc2lnbi4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgYWRkIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgY292ZXJlZCBldmVyeXRoaW5nLiBXYWl0LCBoYW5nIG9uLi4uIGBrdm1fczM5MF9oYW5kbGVfYjJgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBoYW5kbGVfZXNzYWAgdG8gc2VlIHdoeSBpdCYjMzk7cyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LCB3aGF0IG90aGVyIGltcGxpY2F0aW9ucyB0aGlzIGRlc2lnbiBjaG9pY2UgaGFzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3QgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9MTE5MT1zdGF0aWMgdm9pZCBfZXNzYV9jbGVhcl9jYnJsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqY2JybCwgaW50IGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjE2LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTIxNzpzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTgte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyODQ9aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5My1cdGNhc2UgMHhhYjpcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTQ6XHRcdHJldHVybiBoYW5kbGVfZXNzYSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTUtXHRjYXNlIDB4YWY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDg3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYGt2bV9zMzkwX2hhbmRsZV9iOWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIEkgc2VlIHRoYXQgYGt2bV9zMzkwX2hhbmRsZV9iOWAgKmlzbiYjMzk7dCogZGVjbGFyZWQgYXMgc3RhdGljLiBHb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzIGluIHRoZSBTMzkwIEtWTSBpbXBsZW1lbnRhdGlvbi4gSSBzaG91bGQgY2hlY2sgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgIGFuZCBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AgbmV4dCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMuIEkga25vdyB0aGV5JiMzOTtyZSBwcm9iYWJseSBkZWZpbmVkIHdpdGhpbiBga3ZtLXMzOTAuY2AsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBpbnRlbmRlZCBzY29wZSBhbmQgdXNhZ2UuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9nZXRfY21tYV9iaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMTE9c3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyMjItICoga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIzOiAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyNC0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjI1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI2OC0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI2OTogKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oKSBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzAtICovXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyMjE9c3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyOTAtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjI5MTpzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyOTItXHRcdFx0XHQgIHN0cnVjdCBrdm1fczM5MF9jbW1hX2xvZyAqYXJncylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwMDUtXHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jaylcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDA2Olx0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAwNy1cdFx0aWYgKCFyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTU0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IHRoaW5raW5nIGdvZXMgbGlrZSB0aGlzOgoKKipBZGRyZXNzaW5nIFN0YXRpYyBGdW5jdGlvbiBDYWxscyBpbiBLVk0vczM5MCBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3Mgc3RhdGljLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCBmb3Igd2hhdCBJJiMzOTttIHRyeWluZyB0byBhY2hpZXZlLiBJIHRoaW5rIEkmIzM5O2xsIHVzZSBga3ZtX2FyY2hfdm1faW9jdGxgIGluc3RlYWQ7IHRoYXQgc2VlbXMgbGlrZSBhIG1vcmUgYXBwcm9wcmlhdGUgZW50cnkgcG9pbnQuIAoKTm93LCBtb3Zpbmcgb24sIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGluIGBpbnRlcnJ1cHQuY2A6IGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBzY2FfaW5qZWN0X2V4dF9jYWxsYCwgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgLiBUaGV5JiMzOTtyZSAqYWxzbyogc3RhdGljLCB3aGljaCBtZWFucyBJIGNhbiYjMzk7dCBqdXN0IGNhbGwgdGhlbSBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmJlaW5nKiBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjYV9pbmplY3RfZXh0X2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9NDU9c3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtNjMtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjY0OnN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTY1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1MDc9c3RhdGljIGludCBfX2luamVjdF9leHRjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTUyMy1cdGlmIChrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSBcdTAwMjZcdTAwMjYgIWt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKHZjcHUpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTI0Olx0XHRyZXR1cm4gc2NhX2luamVjdF9leHRfY2FsbCh2Y3B1LCBzcmNfaWQpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgwNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgX19pbmplY3RfZXh0Y2FsbGAqKgoKT2theSwgc28gYF9faW5qZWN0X2V4dGNhbGxgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgYW5kIHByb2JhYmx5IG5vdCBleHBvcnRlZCBmb3IgZ2VuZXJhbCB1c2UuIE15IG5leHQgc3RlcCBpcyBvYnZpb3VzOiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGViYXNlIHdoZXJlIGBfX2luamVjdF9leHRjYWxsYCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0IGFib3V0IGl0cyBwdXJwb3NlLCB0aGUgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24sIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pbmplY3RfZXh0Y2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNDkwPXN0YXRpYyBpbnQgX19pbmplY3RfcGZhdWx0X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTA2LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTA3OnN0YXRpYyBpbnQgX19pbmplY3RfZXh0Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTUwOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTA1PXN0YXRpYyBpbnQgZG9faW5qZWN0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTI4LVx0Y2FzZSBLVk1fUzM5MF9JTlRfRVhURVJOQUxfQ0FMTDpcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjEyOTpcdFx0cmMgPSBfX2luamVjdF9leHRjYWxsKHZjcHUsIGlycSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMzAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMyNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZG9faW5qZWN0X3ZjcHVgIEZ1bmN0aW9uKioKClJpZ2h0LCBgZG9faW5qZWN0X3ZjcHVgLiBUaGF0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIHRyaWNreSB0byB0cmFjZSwgZXNwZWNpYWxseSBpbiBhIGxhcmdlIGNvZGViYXNlLCBiZWNhdXNlIHlvdSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGVyZSBpdCAqaXMqIHVzZWQuIFNvLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBmb3IgYGRvX2luamVjdF92Y3B1YC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciBmaWd1cmluZyBvdXQgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgYW55IGlzc3VlcyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBvbmUgcG9wcyB1cC4gQSBxdWljayBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9faW5qZWN0X3ZjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA5NT12b2lkIGt2bV9zMzkwX2NsZWFyX3N0b3BfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMDQtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxMDU6c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEwNi17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTUwPWludCBrdm1fczM5MF9pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxNTUtXHRzcGluX2xvY2soXHUwMDI2bGktXHUwMDNlbG9jayk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNTY6XHRyYyA9IGRvX2luamVjdF92Y3B1KHZjcHUsIGlycSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxNTctXHRzcGluX3VubG9jayhcdTAwMjZsaS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxNjk9aW50IGt2bV9zMzkwX3NldF9pcnFfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqaXJxc3RhdGUsIGludCBsZW4pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTk1LVx0Zm9yIChuID0gMDsgbiBcdTAwM2MgbGVuIC8gc2l6ZW9mKCpidWYpOyBuJiM0MzsmIzQzOykge1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTk2Olx0XHRyID0gZG9faW5qZWN0X3ZjcHUodmNwdSwgXHUwMDI2YnVmW25dKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE5Ny1cdFx0aWYgKHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRm9jdXMgZm9yIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgbmF2aWdhdGUgdGhpcyBjb2RlLiBJIG5vdGljZSBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIGFuZCBga3ZtX3MzOTBfc2V0X2lycV9zdGF0ZWAgYXJlbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIHRoZW0gaW50ZXJlc3RpbmcgZW50cnkgcG9pbnRzLiBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIGluIHBhcnRpY3VsYXIgbG9va3MgbGlrZSBhIHByb21pc2luZyBmb2N1cyBzeW1ib2wuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgb3V0IGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYDsgdGhvc2UgYXJlIHVzdWFsbHkgZ29vZCBzcG90cyB0byBzdGFydCBkaWdnaW5nLgoKUmlnaHQsIGxldCYjMzk7cyBhc3NlbWJsZSBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scywgYSBzZXQgb2Yga2V5IGZ1bmN0aW9ucyB0aGF0IGNhbiBwcm92aWRlIGFuIG92ZXJ2aWV3IG9mIHRoZSBzdWJzeXN0ZW06CgotICAgYGt2bV9hcmNoX3ZtX2lvY3RsYAotICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgCi0gICBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gCi0gICBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAKLSAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAKLSAgIGBrdm1fczM5MF9oYW5kbGVfYjJgCi0gICBga3ZtX3MzOTBfaGFuZGxlX2I5YAotICAgYGt2bV9zMzkwX2luamVjdF92Y3B1YAoKQWgsIGhlcmUmIzM5O3MgYSB3cmlua2xlLiBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgaXMgc3RhdGljLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgYnV0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBrdm1fczM5MF92bV9zZXRfYXR0cmAuIE9rYXksIEkgY2FuIHVzZSB0aGF0IHRoZW4sIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgdGhlIHBhdGguIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoYXQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zZXRfYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDMxPXN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3RvcG9fY2hhbmdlX2luZGljYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDQzLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIwNDQ6c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA0NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjY9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTYxLVx0XHRcdGJyZWFrO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5NjI6XHRcdHIgPSBrdm1fczM5MF92bV9zZXRfYXR0cihrdm0sIFx1MDAyNmF0dHIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NjMtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA5MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIEtWTSBDb2RlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCYjMzk7cyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQgaGFzIGEgbGltaXRlZCBzY29wZSwgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZmlsZS4gQW5kIHRoZSBjYWxsIHNpdGUgaXMgYGt2bV9hcmNoX3ZtX2lvY3RsYC4gVGhhdCBzdWdnZXN0cyB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgb3IgY29udHJvbGxpbmcgZnVuY3Rpb24gZm9yIHRoaXMgYml0IG9mIGNvZGUuIFNvLCB0aGUgc2NvcGUgaXMgbmVhdGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIGJyb2FkZXIgYGt2bV9hcmNoX3ZtX2lvY3RsYCBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBvdXQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4gQWhhISBUaGlzIG9uZSBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIG9wZW5zIHVwIG1vcmUgcG9zc2liaWxpdGllcyBmb3IgaXRzIHVzYWdlLiBUaGlzIG1lYW5zIGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIHZhcmlvdXMgbG9jYXRpb25zIHdpdGhpbiB0aGUgS1ZNIGNvZGUuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHRyYWNlIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9mYXVsdGluLmM9MTU9Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE3LS8qXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxODogKiBrdm1fczM5MF9mYXVsdGluX2dmbigpIC0gaGFuZGxlIGEgZGF0IGZhdWx0LlxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTktICogQHZjcHU6IFRoZSB2Q1BVIHdob3NlIGdtYXAgaXMgdG8gYmUgZml4ZWQgdXAsIG9yIE5VTEwgaWYgb3BlcmF0aW5nIG9uIHRoZSBWTS5cbi0tXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zMi0gKi9cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjMzOmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzQte1xuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTE1LVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmg6MTY6aW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYpO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMTctaW50IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLCBnZm5fdCBnZm4sIGJvb2wgdyk7XG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaC0xOC1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oOjE5OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTIwLVx0XHRcdFx0XHQgICAgICBnZm5fdCBnZm4sIGJvb2wgd3IpXG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMjMtXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoyNDpcdHJldHVybiBrdm1fczM5MF9mYXVsdGluX2dmbih2Y3B1LCBrdm0sIFx1MDAyNmYpO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMjUtfVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTg4Mj1zdGF0aWMgaW50IGFjY2Vzc19ndWVzdF9wYWdlX3dpdGhfa2V5X2dwYShzdHJ1Y3Qga3ZtICprdm0sIGVudW0gZ2FjY19tb2RlIG1vZGUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MDItXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzo5MDM6XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKE5VTEwsIGt2bSwgXHUwMDI2ZmF1bHQpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTA0LVx0aWYgKHJjKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMzc9aW50IGNtcHhjaGdfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBpbnQgbGVuLCB1bmlvbiBrdm1fczM5MF9xdWFkICpvbGQsXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE1OS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjExNjA6XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKE5VTEwsIGt2bSwgXHUwMDI2ZmF1bHQpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE2MS1cdGlmIChyYylcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jPTM1OT1zdGF0aWMgaW50IGhhbmRsZV9tdnBnX3BlaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy0zNzItXHRkbyB7XG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjM3MzpcdFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbl9zaW1wbGUodmNwdSwgTlVMTCwgZ3BhX3RvX2dmbihzcmNhZGRyKSwgZmFsc2UpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy0zNzQtXHR9IHdoaWxlIChyYyA9PSAtRUFHQUlOKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTM4NC1cdGRvIHtcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6Mzg1Olx0XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZSh2Y3B1LCBOVUxMLCBncGFfdG9fZ2ZuKGRzdGFkZHIpLCB0cnVlKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtMzg2LVx0fSB3aGlsZSAocmMgPT0gLUVBR0FJTik7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQzMzk9c3RhdGljIGludCBrdm1fczM5MF9maXh1cF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MzQ4LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQzNDk6XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZSh2Y3B1LCBOVUxMLCBnZm4sIHRydWUpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzNTAtXHRpZiAocmMpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDM1MS1cdFx0cmV0dXJuIHJjO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQzNTI6XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZSh2Y3B1LCBOVUxMLCBnZm4gJiM0MzsgMSwgdHJ1ZSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDM1My1cdGlmIChyYylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDY0MD1zdGF0aWMgaW50IHZjcHVfZGF0X2ZhdWx0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBnYWRkciwgYm9vbCB3cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDY1MS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NjUyOlx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbih2Y3B1LCBOVUxMLCBcdTAwMjZmKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NjUzLVx0aWYgKHJjIFx1MDAzYz0gMClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUyOT1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2NTAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTY1MTpcdFx0XHRyID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm5fc2ltcGxlKHZjcHUsIE5VTEwsIGdwYV90b19nZm4oZ2FkZHIpLCBmYWxzZSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTY1Mi1cdFx0XHRpZiAociA9PSBQR01fQUREUkVTU0lORylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTkwMT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5MDktXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTkxMDpcdHJjID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm4odmNwdSwgTlVMTCwgXHUwMDI2Zik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTkxMS1cdGlmIChyYyA9PSBQR01fQUREUkVTU0lORylcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9MTQ3PWludCBrdm1fczM5MF9wdl9tYWtlX3NlY3VyZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIsIHZvaWQgKnV2Y2IpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTE2Mi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2gucHYuaW1wb3J0X2xvY2spIHtcbmFyY2gvczM5MC9rdm0vcHYuYzoxNjM6XHRcdHJjID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm4oTlVMTCwga3ZtLCBcdTAwMjZmKTtcbmFyY2gvczM5MC9rdm0vcHYuYy0xNjQtXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTc5MT1zdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2Vhayxcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtODA3LVx0aWYgKHJldCA9PSAtRU5YSU8pIHtcbmFyY2gvczM5MC9rdm0vcHYuYzo4MDg6XHRcdHJldCA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZShOVUxMLCBrdm0sIGdwYV90b19nZm4oYWRkciksIHRydWUpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTgwOS1cdFx0aWYgKCFyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjg4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTk3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0vczM5MCBDb2RlIFJldmlldyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGVzZSBLVk0vczM5MCBjaGFuZ2VzLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGV5IGFyZSBwcmV0dHkgc29saWQuIGBrdm1fczM5MF9mYXVsdGluX2dmbmAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLCBhcyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBwbGFjZXMsIGxpa2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4KCkkgc3RhcnRlZCB3aXRoIGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLCBidXQgSSYjMzk7dmUgbmFycm93ZWQgaXQgZG93bjoKCiogICBga3ZtX2FyY2hfdm1faW9jdGxgCiogICBga3ZtX2FyY2hfdmNwdV9pb2N0bGAKKiAgIGBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsYAoqICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYAoqICAgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgCiogICBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgCiogICBga3ZtX3MzOTBfaGFuZGxlX2IyYAoqICAgYGt2bV9zMzkwX2hhbmRsZV9iOWAKKiAgIGBrdm1fczM5MF9pbmplY3RfdmNwdWAKKiAgIGBrdm1fczM5MF9mYXVsdGluX2dmbmAKCkkgcmVhbGl6ZWQgYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBrdm1fczM5MF9oYW5kbGVfYjlgIGFyZSBpbnN0cnVjdGlvbiBoYW5kbGVycywgY2FsbGVkIGZyb20gYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFNvLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGVtLgoKSSB0aGVuIGxvb2tlZCBhdCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIEkgY2FuIHVzZSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIG9yIGp1c3QgYGt2bV9hcmNoX3ZtX2lvY3RsYCBzaW5jZSBpdCBpcyBzdGF0aWMuIGBrdm1fYXJjaF92bV9pb2N0bGAgc2VlbXMgZmluZS4KCkZvciBjb25maWd1cmF0aW9uLCBJIG5vdGVkIGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IGBLVk1fUzM5MF9VQ09OVFJPTGAgZGVwZW5kcyBvbiBgS1ZNYC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBzMzkwLXNwZWNpZmljIGNvbmZpZ3MgaW4gdGhlIGBLY29uZmlnYC4KCk5vdywgcmV2aWV3aW5nIHRoZSBjaGFuZ2VzLCB0aGVyZSBhcmUgc2V2ZXJhbCBrZXkgYXJlYXM6CgoqICAgKipgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgOioqIEl0cyBzaWduYXR1cmUgY2hhbmdlZCB0byBpbmNsdWRlIGB1bmlvbiBza2V5ICpza2V5YC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGhhbmRsZV9ycmJlYCBhbmQgYGt2bV9zMzkwX2tleW9wYCwgd2hlcmUgYGhhbmRsZV9ycmJlYCBpcyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfaGFuZGxlX2IyYCBhbmQgYGt2bV9zMzkwX2tleW9wYCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLgoqICAgKipga3ZtX3MzOTBfZmF1bHRpbl9nZm5gOioqIFRoZSBjaGFuZ2UgaW4gYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBub3cgcmV0dXJucyBgLUVJTlRSYCBpbnN0ZWFkIG9mIGAtRUFHQUlOYCB3aGVuIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgd29ydGggY2hlY2tpbmcgaW4gZGV0YWlsLgoqICAgKipgc2NhX2V4dF9jYWxsX3BlbmRpbmdgLCBgc2NhX2luamVjdF9leHRfY2FsbGAsIGBzY2FfY2xlYXJfZXh0X2NhbGxgOioqIEFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAgY2hlY2tzLiBDYWxsZWQgZnJvbSBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIGFuZCBga3ZtX3MzOTBfY2xlYXJfc3RvcF9pcnFgLgoqICAgKipga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmA6KiogVXNlcyBgc3JjdWAgYW5kIGBzbG90c19hcmNoX2xvY2tgLiBSZWFjaGFibGUgdGhyb3VnaCBga3ZtX2FyY2hfdm1faW9jdGxgIHZpYSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLgoqICAgKipga3ZtX2FyY2hfdm1faW9jdGxgOioqICBBZGRlZCBga3ZtX2lzX3Vjb250cm9sKGt2bSlgIGNoZWNrcyBmb3IgdGhlIGBLVk1fUzM5MF9JTlRFUlJVUFRgIGNhc2UuCiogICAqKmBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgOioqIEltcGxlbWVudHMgYHNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCwgdHJ1ZSlgCiogICAqKmBrdm1fYXJjaF92Y3B1X2NyZWF0ZWA6KiogUmVmYWN0b3JlZCBmb3IgbWVtb3J5IGxlYWsgZml4ZXMuCiogICAqKmBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6KiogQ2hlY2tzIGZvciBgc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpYCBiZWZvcmUgcnVubmluZy4KKiAgICoqYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgOioqIEFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAgY2hlY2tzLgoqICAgKipga3ZtX2FyY2hfdmNwdV9pb2N0bGA6KiogU2FtZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQxNT1zdGF0aWMgbG9uZyBrdm1fczM5MF92Y3B1X21lbXNpZGFfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDM5LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NDA6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ0MS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEZ1bmN0aW9uIENhbGwgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgLiBZZXMsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uIHdpdGhpbiBga3ZtLXMzOTAuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBob3cgaXQmIzM5O3MgYmVpbmcgaW52b2tlZC4gSXMgaXQgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2lvY3RsYD8gTm8sIG5vLCBuby4gYGt2bV92Y3B1X2lvY3RsYCBpcyBpbiBga3ZtX21haW4uY2AgdW5kZXIgYHZpcnQva3ZtYCwgSSBzaG91bGQga25vdyB0aGlzLiAqVGhhdCogZnVuY3Rpb24gY2FsbHMgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGluc3RlYWQuIEJ1dCBpcyBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGAgY2FsbGVkIGZyb20gdGhlcmU/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcy4gSSYjMzk7bGwgcXVpY2tseSBsb29rIGluIGBrdm1fbWFpbi5jYCBvciBwZXJoYXBzIGBrdm1faG9zdC5oYCBmb3IgdGhlIHByZWNpc2UgY2FsbCBjaGFpbi4gTmVlZCB0byB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTE4MjQ9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTE5NTgtXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxOTU5Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTk2MC1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNDYwPWludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTQ4NC1cbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTQ4NTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTQ4Ni1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmM9ODcxPXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmMtODk3LVxuYXJjaC9taXBzL2t2bS9taXBzLmM6ODk4Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuYXJjaC9taXBzL2t2bS9taXBzLmMtODk5LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0yMDE5PWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMDI0LVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjAyNTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIwMjYtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0yNDQ9dm1fZmF1bHRfdCBrdm1fYXJjaF92Y3B1X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI0OC1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNDk6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjUwLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQxNT1zdGF0aWMgbG9uZyBrdm1fczM5MF92Y3B1X21lbXNpZGFfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDM5LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NDA6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ0MS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTcxOTk9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcyNDQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzI0NTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbmFyY2gveDg2L2t2bS94ODYuYy03MjQ2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTU3Mj1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU3My1cdFx0XHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTU3NDpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU3NS1cdFx0XHRcdCAgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQzMy1cdCAqL1xudmlydC9rdm0va3ZtX21haW4uYzo0NDM0Olx0ciA9IGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0MzUtXHRpZiAociAhPSAtRU5PSU9DVExDTUQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTU4CgkJCQkJCQlvdXRwdXQ6IDI5NgoJCQkJCQkJdGhvdWdodHM6IDc2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0vczM5MCBBcmNoaXRlY3R1cmUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhhdCBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGAgaXMgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2lvY3RsYCAqYmVmb3JlKiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAuIFN0YW5kYXJkIEtWTSBmbG93LCBzbyBJJiMzOTtsbCBkZWZpbml0ZWx5IGluY2x1ZGUgaXQgaW4gdGhlIGZvY3VzIHN5bWJvbHMuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLiBUaGVzZSBhcmUgY3JpdGljYWwsIGFzIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMgYW5kIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgdmlhIGBLVk1fUzM5MF9QVl9DT01NQU5EYC4gRGVmaW5pdGVseSBpbmNsdWRpbmcgdGhlbS4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBpdCYjMzk7cyBjbGVhciB0aGF0IEtWTSBpdHNlbGYgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAgYXJlIHJlbGV2YW50LgoKU28gbXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGFyZTogYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGt2bV9zMzkwX2hhbmRsZV9iMmAsIGBrdm1fczM5MF9oYW5kbGVfYjlgLCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgLCBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4KCldhaXQsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBpcyBkZWZpbmVkIGluIGBwdi5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBkdXJpbmcgY29tcGlsYXRpb24uIE5vIG90aGVyIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQgZm9yIGBwdi5jYC4gSSB3aWxsIGRvdWJsZSBjaGVjayBgYXJjaC9zMzkwL2t2bS9NYWtlZmlsZWAganVzdCB0byBiZSBzdXJlLi4uIHllcCwgaXQmIzM5O3MgYWx3YXlzIGNvbXBpbGVkIGluLgoKTm93LCBmb3IgYEtWTV9TMzkwX1VDT05UUk9MYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBvcHRpb24gaXMgZGVmaW5lZCBhcyB3ZWxsLiBPa2F5LCB5ZXMsIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gZnV6eiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBpcyBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncywgbm9wZSwganVzdCB0aGF0IG9uZS4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyBpbmNsdWRlcyBjaGFuZ2VzIHRoYXQgZGlyZWN0bHkgaW1wYWN0IG1lbW9yeSByZWdpb25zLCBwYWdlIGZhdWx0cywgQ1BVIGxpZmVjeWNsZSBtYW5hZ2VtZW50IChjcmVhdGlvbi9kZXN0cnVjdGlvbiksIGludGVycnVwdCBpbmplY3Rpb24sIGFuZCBoYW5kbGluZyBvZiBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgKFJSQkUsIEVTU0EpLiBJbXBvcnRhbnRseSwgdGhlIGFkZGl0aW9uIG9mIGBLVk1fUzM5MF9VQ09OVFJPTGAgaW5kaWNhdGVzIHRoZSBoYW5kbGluZyBvZiB1c2VyLXNwYWNlIGNvbnRyb2xsZWQgVk1zLiBUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXkgYWxsIHdhcnJhbnQgZnV6emluZyB0byBpZGVudGlmeSBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0w8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TMzkwX1VDT05UUk9MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2IyJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iOSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9pbmplY3RfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9mYXVsdGluX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGluY2x1ZGluZyBoYW5kbGluZyBvZiBtZW1vcnkgcmVnaW9ucywgcGFnZSBmYXVsdHMsIHZpcnR1YWwgQ1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCBhbmQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgKFJSQkUsIEVTU0EpLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB1c2Vyc3BhY2UtY29udHJvbGxlZCBWTXMgKEtWTV9TMzkwX1VDT05UUk9MKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzAyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgdGhlIEFic2VuY2Ugb2YgYEtWTV9TMzkwX1VDT05UUk9MYCoqCgpIbW0sIHRoaXMgaXMgc3RyYW5nZS4gSSB3YXMgY2VydGFpbiBJIHdhcyBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBLVk1fUzM5MF9VQ09OVFJPTGAgc29tZXdoZXJlLCBidXQgbm93IGl0IHNlZW1zIHRvIGJlIGVsdWRpbmcgbWUuIFRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBJIHdhcyByZXZpZXdpbmcgc3VnZ2VzdGVkIGl0cyBleGlzdGVuY2UsIGJ1dCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgdGhyb3dpbmcgYW4gZXJyb3IuIEEgZGlzY3JlcGFuY3kgbGlrZSB0aGlzIGlzIHVzdWFsbHkgYSBzeW1wdG9tIG9mIGEgbWlzY29uZmlndXJhdGlvbiBvciBwb3RlbnRpYWxseSBzb21lIG91dGRhdGVkIGRvY3VtZW50YXRpb24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyBkb3VibGUgY2hlY2sgdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGRlbHZlIGJhY2sgaW50byBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cywgb3IgcGVyaGFwcyBtaXNpbnRlcnByZXRpbmcgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYXJjaGl0ZWN1cmUsIHNvIEkgbWF5IGJlIG1pc3Npbmcgc29tZXRoaW5nLCBpdCBjYW4mIzM5O3QgYmUgdGhhdCBpdCBkb2VzbiYjMzk7dCBleGlzdCwgY2FuIGl0PyBJIHdpbGwgbWV0aG9kaWNhbGx5IHNlYXJjaCBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY5MwoJCQkJCQkJb3V0cHV0OiAyODMKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgY2VydGFpbiBJJiMzOTtkIHNlZW4gYEtWTV9TMzkwX1VDT05UUk9MYCBzb21ld2hlcmXigKYgYW5kIHRoZXJlIGl0IGlzLCByaWdodCBpbiBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyBzdHJhbmdlLCBJIHdvbmRlciB3aHkgYHNldC1yZXN1bHRzYCBmbGFnZ2VkIGl0IGFzIG5vbi1leGlzdGVudD8gSG1tLCBtYXliZSB0aGUgdG9vbCBpcyBkZWZhdWx0aW5nIHRvIGNoZWNraW5nIGFnYWluc3QgdGhlIHg4Nl82NCBkZWZjb25maWcgb3Igc29tZSBvdGhlciBhcmNoaXRlY3R1cmU/IFRoYXQgd291bGQgZXhwbGFpbiBpdC4KClJpZ2h0LCB0aGlzIGlzIGFuIHMzOTAtc3BlY2lmaWMgY29uZmlnLiBUaGUgdG9vbCBwcm9iYWJseSBkb2VzbiYjMzk7dCBzZWUgaXQgYmVjYXVzZSBpdCYjMzk7cyBub3QgcGFydCBvZiB0aGUgbWFpbmxpbmUgYXJjaGl0ZWN0dXJlIGl0JiMzOTtzIGNoZWNraW5nIGFnYWluc3QuIEkmIzM5O2xsIG5lZWQgdG8gYWRqdXN0IG15IHN0cmF0ZWd5LiBJIHRoaW5rIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyBqdXN0IHRvIHVzZSB0aGUgYEtWTWAgb3B0aW9uLiBJZiB0aGUgdG9vbCBjb21wbGFpbnMgYWJvdXQgYEtWTV9TMzkwX1VDT05UUk9MYCwgSSYjMzk7bGwgb21pdCBpdCBlbnRpcmVseSBvciBqdXN0IHByb3ZpZGUgYEtWTWAgd2hpY2ggc2hvdWxkIGVuYWJsZSBldmVyeXRoaW5nIEkgbmVlZC4KCkxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB0aGUgY29uZmlnIG5hbWUgaXMgY29ycmVjdCwganVzdCB0byBiZSBzdXJlLi4uIFllcCwgY29uZmlybWVkOiBgY29uZmlnIEtWTV9TMzkwX1VDT05UUk9MYC4gT2theSwgSSYjMzk7bSBjb25maWRlbnQgbm93LiBJJiMzOTtsbCBqdXN0IHByb3ZpZGUgYEtWTWAgZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjImIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2I5JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIG1lbW9yeSByZWdpb25zLCBwYWdlIGZhdWx0cywgdmlydHVhbCBDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIGludGVycnVwdCBpbmplY3Rpb24sIGFuZCBzcGVjaWZpYyBpbnN0cnVjdGlvbiBoYW5kbGVycyAoUlJCRSwgRVNTQSkuIEl0IGFsc28gYWRkcyBjaGVja3MgZm9yIHVzZXJzcGFjZS1jb250cm9sbGVkIFZNcyAoS1ZNX1MzOTBfVUNPTlRST0wpLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjM1LjE0NDM4MDA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDkwMDkyNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfY3JlYXRlX2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iMlwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2I5XCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3RfdmNwdVwiLFxuICAgIFwia3ZtX3MzOTBfZmF1bHRpbl9nZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGluY2x1ZGluZyBoYW5kbGluZyBvZiBtZW1vcnkgcmVnaW9ucywgcGFnZSBmYXVsdHMsIHZpcnR1YWwgQ1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCBhbmQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgKFJSQkUsIEVTU0EpLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB1c2Vyc3BhY2UtY29udHJvbGxlZCBWTXMgKEtWTV9TMzkwX1VDT05UUk9MKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjM1LjE0NDM4NTE4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQyNTAzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NTNjNjQzMjQ5YmM1MzBiYjAxMjQ1NDAyNzM1ZTY1NTY5OWVlZTk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTk6NDA6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC00NDAsNiArNDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHRib29sIHNrZXlfZW5hYmxlZDtcXG4gXFx0LyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqL1xcbiBcXHRib29sIGFjcnNfbG9hZGVkO1xcbitcXHRib29sIGluaXRpYWxpemVkO1xcbiBcXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcXG4gXFx0dW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbztcXG4gXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbkBAIC03NTUsMTMgKzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxcbiB7XFxuIFxcdHVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7XFxuIFxcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XFxuIFxcdHVuaW9uIHB0ZSAqcHRlcDtcXG4gXFx0aW50IHJjO1xcbiBcXG4rXFx0c2tleS1cXHUwMDNlc2tleSA9IDA7XFxuK1xcbiBcXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFxcdTAwMjZjcnN0ZXAsIFxcdTAwMjZwdGVwKTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTc3MSwyMSArNzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcXG4gXFxuIFxcdFxcdGlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XFxuK1xcdFxcdHNrZXktXFx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcXG4gXFx0cGdzdGUgPSBvbGQ7XFxuIFxcbiBcXHRpZiAoIXB0ZXAtXFx1MDAzZWguaSkge1xcbi1cXHRcXHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XFxuLVxcdFxcdHBnc3RlLmhyID0gcmMgXFx1MDAzZVxcdTAwM2UgMTtcXG4rXFx0XFx0c2tleS1cXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgXFx1MDAzY1xcdTAwM2MgMTtcXG4rXFx0XFx0cGdzdGUuaHIgPSBza2V5LVxcdTAwM2VyO1xcbiBcXHR9XFxuLVxcdHJjIHw9IChwZ3N0ZS5nciBcXHUwMDNjXFx1MDAzYyAxKSB8IHBnc3RlLmdjO1xcbitcXHRza2V5LVxcdTAwM2VyIHw9IHBnc3RlLmdyO1xcbitcXHRza2V5LVxcdTAwM2VjIHw9IHBnc3RlLmdjO1xcbiBcXHRwZ3N0ZS5nciA9IDA7XFxuIFxcbiBcXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XFxuIFxcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbi1cXHRyZXR1cm4gcmM7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuQEAgLTg0Niw2ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxcbiBcXHRzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay1cXHUwMDNlcHJpdjtcXG4gXFx0dW5pb24gY3JzdGUgZHVtbXkgPSB7IC52YWwgPSBwLVxcdTAwM2V0b2tlbiB9O1xcbiBcXHR1bmlvbiBwdGUgbmV3X3B0ZSwgcHRlID0gUkVBRF9PTkNFKCpwdGVwKTtcXG4rXFx0dW5pb24gcGdzdGUgcGdzdGU7XFxuIFxcbiBcXHRuZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpO1xcbiBcXG5AQCAtODUzLDcgKzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxcbiBcXHRpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay1cXHUwMDNlYXNjZSwgZmFsc2UpO1xcbitcXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xcbitcXHRwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVxcdTAwM2Vhc2NlLCBmYWxzZSk7XFxuK1xcdHBnc3RlLmNtbWFfZCA9IDA7XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxcbkBAIC01MzcsNyArNTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZcXG4gXFx0XFx0XFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKTtcXG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRcXHRcXHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTtcXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTtcXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcXG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XFxuIFxcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuaW5kZXggZmVlODAwNDdiZDk0Zi4uM2NjNDVmN2Y1YjJkNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuQEAgLTkxLDkgKzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcXG4gXFx0XFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cXG4gXFx0XFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cXHUwMDNlcGZuKSlcXG4gXFx0XFx0XFx0cmV0dXJuIFBHTV9BRERSRVNTSU5HO1xcbi1cXHRcXHQvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqL1xcbi1cXHRcXHRpZiAoZi1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXFxuLVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHRcXHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXFxuK1xcdFxcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVxcdTAwM2VwZm4pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHRcXHQvKiBDaGVjayBpZiBpdCdzIHJlYWQtb25seSBtZW1vcnk7IGRvbid0IHRyeSB0byBhY3R1YWxseSBoYW5kbGUgdGhhdCBjYXNlLiAqL1xcbiBcXHRcXHRpZiAoZi1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuaW5kZXggOWUzZTZiMGQ3MmFkNi4uOWRiNjhlM2FjMTc4ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbkBAIC00NSwxMyArNDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjtcXG4gc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbi1cXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuK1xcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcXG4gXFxuIFxcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xcbiBcXG4rXFx0c2lncF9jdHJsID0gc2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xcbiBcXHRpZiAoc3JjX2lkKVxcbiBcXHRcXHQqc3JjX2lkID0gc2lncF9jdHJsLnNjbjtcXG4gXFxuQEAgLTYwLDEzICs2MywxNiBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuIFxcbiBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxcbiB7XFxuLVxcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbi1cXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgb2xkX3ZhbCwgbmV3X3ZhbCA9IHsuc2NuID0gc3JjX2lkLCAuYyA9IDF9O1xcbitcXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcXG4gXFx0aW50IGV4cGVjdCwgcmM7XFxuIFxcbiBcXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcXG4rXFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0c2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcXG4gXFx0b2xkX3ZhbC5jID0gMDtcXG4gXFxuQEAgLTg0LDEwICs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxcbiBzdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbi1cXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcXG4gXFxuLVxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuK1xcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cXG4rXFx0c2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcXG4gXFxuIFxcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVxcdTAwM2V2YWx1ZSwgMCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLmZkOGJhZGIwZDU3MWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxcbiBcXHRzd2l0Y2ggKG9wKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcXG4gXFx0XFx0ciA9IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShtYywgYXNjZSwgZ2ZuLCBza2V5LCBcXHUwMDI2c2tleSwgMCwgMCwgMCk7XFxuLVxcdFxcdGlmIChyIFxcdTAwM2U9IDApXFxuK1xcdFxcdGlmIChyID09IDAgfHwgciA9PSAxKVxcbiBcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxcbkBAIC01ODAsMTQgKzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxcbiBcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOlxcbi1cXHRcXHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTtcXG4tXFx0XFx0aWYgKHIgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gciBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcXHUwMDI2c2tleSk7XFxuK1xcdFxcdGlmICghcilcXG4rXFx0XFx0XFx0cmV0dXJuIHNrZXkuc2tleTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNlIDAgPyAtRUZBVUxUIDogcjtcXG4gfVxcbiBcXG4gLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi9cXG5AQCAtMTIxOSw4ICsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXFxuIFxcbiAvKlxcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxcbi0gKiBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuKyAqIGt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbisgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbiAgKi9cXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuQEAgLTEyNjUsNyArMTI2NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4gfVxcbiBcXG4gLypcXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuKyAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuICAqL1xcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG5AQCAtMTMwMCw3ICsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4ge1xcbiBcXHRpbnQgcmVzID0gLUVOWElPO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0Z3VhcmQoc3JjdSkoXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbitcXG4gXFx0c3dpdGNoIChhdHRyLVxcdTAwM2VhdHRyKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOlxcbiBcXHRcXHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcXG5AQCAtMTMxMSw3ICsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbkBAIC0yMjE0LDcgKzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG4gXFx0fVxcbiBcXG4gXFx0a3ZmcmVlKGtleXMpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG5AQCAtMjI3Niw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuIFxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4gb3V0OlxcbiBcXHRrdmZyZWUoa2V5cyk7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTIzODYsNyArMjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcbiBcXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjkzNCw2ICsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRjYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDoge1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XFxuIFxcbitcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTI5OTgsOSArMzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuLVxcdFxcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxcbitcXHRcXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4gXFx0XFx0aWYgKCFyKSB7XFxuIFxcdFxcdFxcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNmFyZ3MsIHNpemVvZihhcmdzKSk7XFxuIFxcdFxcdFxcdGlmIChyKVxcbkBAIC0zMDE0LDkgKzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuIFxcdFxcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcXG5AQCAtMzI0Nyw3ICszMjUwLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY3J5cHRvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gc3RhdGljIHZvaWQgc2NhX2Rpc3Bvc2Uoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVxcdTAwM2VhcmNoLnNjYSwgc2l6ZW9mKCprdm0tXFx1MDAzZWFyY2guc2NhKSk7XFxuK1xcdGlmIChrdm0tXFx1MDAzZWFyY2guc2NhKVxcbitcXHRcXHRmcmVlX3BhZ2VzX2V4YWN0KGt2bS1cXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVxcdTAwM2VhcmNoLnNjYSkpO1xcbiBcXHRrdm0tXFx1MDAzZWFyY2guc2NhID0gTlVMTDtcXG4gfVxcbiBcXG5AQCAtMzQ2MSw3ICszNDY1LDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4gXFxuLVxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuK1xcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGNsZWFyX2JpdF9pbnYodmNwdS1cXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXFx1MDAzZW1jbik7XFxuQEAgLTM0ODEsOCArMzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdFdSSVRFX09OQ0Uoc2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2RhLCB2aXJ0X3RvX3BoeXModmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4gXFx0c2V0X2JpdF9pbnYodmNwdS1cXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXFx1MDAzZW1jbik7XFxuLVxcdHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG5AQCAtMzYxMyw2ICszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XFxuIFxcdCAgICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcXG4gXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xcbitcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcXG5AQCAtMzY3NCw3ICszNjgxLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pKTtcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjYnJsbylcXG4rXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pKTtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvID0gMDtcXG4gfVxcbiBcXG5AQCAtMzc5MiwyMSArMzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxcbitcXG4gaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlO1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XFxuIFxcdGludCByYztcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4tXFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLm1jKVxcbitcXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4rXFx0aWYgKCFtYylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdHNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tXFx0aWYgKCFzaWVfcGFnZSkge1xcbi1cXHRcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVxcdTAwM2VhcmNoLm1jKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5tYyA9IE5VTEw7XFxuK1xcdGlmICghc2llX3BhZ2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayA9IFxcdTAwMjZzaWVfcGFnZS1cXHUwMDNlc2llX2Jsb2NrO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlaXRkYmEgPSB2aXJ0X3RvX3BoeXMoXFx1MDAyNnNpZV9wYWdlLVxcdTAwM2VpdGRiKTtcXG5AQCAtMzg0OCwxMCArMzg1Niw5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcXG4gXFxuIFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbi1cXHRcXHRyYyA9IC1FTk9NRU07XFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5nbWFwLCAtMVVMKTtcXG4gXFx0XFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmdtYXApXFxuLVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0Vk1fRVZFTlQodmNwdS1cXHUwMDNla3ZtLCAzLCBcXFwiY3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFxcXCIsXFxuQEAgLTM4NTksMjAgKzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbiBcXG4gXFx0cmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpO1xcbi1cXHRpZiAocmMpXFxuLVxcdFxcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlY2hpbGRyZW5fbG9jaylcXG4rXFx0XFx0XFx0XFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4rXFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4gXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XFxuK1xcdHNpZV9wYWdlID0gTlVMTDtcXG4gXFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cXHUwMDNla3ZtLCAxKTtcXG4gXFx0cmV0dXJuIDA7XFxuLVxcbi1vdXRfdWNvbnRyb2xfdW5pbml0Olxcbi1cXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4tXFx0fVxcbi1vdXRfZnJlZV9zaWVfYmxvY2s6XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4tXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTUwMzksNiArNTA0NSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgICAga3ZtX3J1bi1cXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXFxuK1xcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0dmNwdV9sb2FkKHZjcHUpO1xcbiBcXG4gXFx0aWYgKGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkge1xcbkBAIC01NDQ3LDYgKzU0NTcsOCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIHMzOTBpcnEgPSB7fTtcXG4gXFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChzMzkwaW50X3RvX3MzOTBpcnEoXFx1MDAyNnMzOTBpbnQsIFxcdTAwMjZzMzkwaXJxKSlcXG5AQCAtNTUyMyw2ICs1NTM1LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0bG9uZyByO1xcbiBcXHR1MTYgcmMsIHJyYztcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdHN3aXRjaCAoaW9jdGwpIHtcXG5AQCAtNTc5NCwyNCArNTgxMCw0NCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4re1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4rXFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdGlmIChwZ3N0ZS5jbW1hX2QpIHtcXG4rXFx0XFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0XFx0YXRvbWljNjRfZGVjKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHR9XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcXG4tXFx0aW50IHJjID0gMDtcXG4rXFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdGludCByYyA9IC1FTk9NRU07XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4gXFxuIFxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xcbi1cXHRpZiAoIW1jKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0aWYgKCFtYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuK3JldHJ5OlxcbiBcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4rXFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEgXFx1MDAyNlxcdTAwMjYgb2xkKSB7XFxuK1xcdFxcdFxcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVxcdTAwM2ViYXNlX2dmbiwgb2xkLVxcdTAwM2ViYXNlX2dmbiArIG9sZC1cXHUwMDNlbnBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIFxcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHN3aXRjaCAoY2hhbmdlKSB7XFxuIFxcdFxcdGNhc2UgS1ZNX01SX0RFTEVURTpcXG4gXFx0XFx0XFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBvbGQtXFx1MDAzZWJhc2VfZ2ZuLCBvbGQtXFx1MDAzZW5wYWdlcyk7XFxuQEAgLTU4MjcsMTMgKzU4NjMsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRyYyA9IDA7XFxuIFxcdFxcdFxcdFdBUk4oMSwgXFxcIlVua25vd24gS1ZNIE1SIENIQU5HRTogJWRcXFxcblxcXCIsIGNoYW5nZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbitcXHRcXHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4gb3V0OlxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcXFxuXFxcIik7XFxuLVxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4gXFx0cmV0dXJuO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuaW5kZXggYWQwZGRjNDMzYTczYy4uYjFiYTI0YzM0NmVmYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuQEAgLTI4OSw2ICsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcXG4rXFx0dW5pb24gc2tleSBza2V5O1xcbiBcXHRpbnQgcmVnMSwgcmVnMjtcXG4gXFx0aW50IHJjO1xcbiBcXG5AQCAtMzA3LDEyICszMDgsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpO1xcbiBcXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcXG4gXFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuLVxcdFxcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7XFxuK1xcdFxcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXFx1MDAyNnNrZXkpO1xcbiBcXHRpZiAocmMgXFx1MDAzZSAwKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcXG4gXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbi1cXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcXG4rXFx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFxcdTAwM2VcXHUwMDNlIDEpIFxcdTAwMjYgMyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMjYwLDggKzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0LyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi9cXG4gXFx0XFx0a3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbi1cXHRcXHRcXHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4rXFx0XFx0XFx0XFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5pbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHYuY1xcbkBAIC0yNDQsNiArMjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxcbit7XFxuK1xcdGlmIChmcmVlX3N0b3JfYmFzZSlcXG4rXFx0XFx0ZnJlZV9wYWdlcyh2Y3B1LVxcdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XFxuK1xcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XFxuK1xcdG1lbXNldChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXFx1MDAzZWFyY2gucHYpKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXNkZiA9IDA7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXFxuK1xcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxcbitcXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxcbitcXHQgKi9cXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdiZWEgPSAxO1xcbitcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcXG4rfVxcbitcXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuIHtcXG4gXFx0aW50IGNjO1xcbkBAIC0yNTgsMjQgKzI3Niw5IEBAIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiBcXHRXQVJOX09OQ0UoY2MsIFxcXCJwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4XFxcIiwgKnJjLCAqcnJjKTtcXG4gXFxuIFxcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xcbi1cXHRpZiAoIWNjKVxcbi1cXHRcXHRmcmVlX3BhZ2VzKHZjcHUtXFx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxcbi1cXHRcXHRcXHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcXG4tXFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XFxuLVxcdG1lbXNldChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXFx1MDAzZWFyY2gucHYpKTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXNkZiA9IDA7XFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXFxuLVxcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxcbi1cXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxcbi1cXHQgKi9cXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdiZWEgPSAxO1xcbi1cXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcXG4rXFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcXG4gXFxuLVxcdHJldHVybiBjYyA/IEVJTyA6IDA7XFxuK1xcdHJldHVybiBjYyA/IC1FSU8gOiAwO1xcbiB9XFxuIFxcbiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbkBAIC0zMTksOSArMzIyLDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4gXFx0XFx0ICAgICB1dmNiLmhlYWRlci5ycmMpO1xcbiBcXG4gXFx0aWYgKGNjKSB7XFxuLVxcdFxcdHUxNiBkdW1teTtcXG4tXFxuLVxcdFxcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFxcdTAwMjZkdW1teSwgXFx1MDAyNmR1bW15KTtcXG4rXFx0XFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXFxuIFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUFHQUlOKVxcbitcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVFIpXFxuIFxcdFxcdEtWTV9VVl9FVkVOVChrdm0sIDMsIFxcXCJQUk9UVklSVCBWTSBVTlBBQ0s6IGZhaWxlZCBhZGRyICVsbHggd2l0aCByYyAleCBycmMgJXhcXFwiLFxcbiBcXHRcXHRcXHQgICAgIHV2Y2IuZ2FkZHIsICpyYywgKnJyYyk7XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjM1LjQ2OTIyNjI0NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MTE2NTIzNzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjJcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iOVwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTNjNjQzMjQ5YmM1MzBiYjAxMjQ1NDAyNzM1ZTY1NTY5OWVlZTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxOTo0MDozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00NDAsNiArNDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0Ym9vbCBza2V5X2VuYWJsZWQ7XG4gXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXG4gXHRib29sIGFjcnNfbG9hZGVkO1xuK1x0Ym9vbCBpbml0aWFsaXplZDtcbiBcdHN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2O1xuIFx0dW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbztcbiBcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5pbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTc1NSwxMyArNzU1LDE1IEBAIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXG4ge1xuIFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcbiBcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XG4gXHR1bmlvbiBwdGUgKnB0ZXA7XG4gXHRpbnQgcmM7XG4gXG4rXHRza2V5LVx1MDAzZXNrZXkgPSAwO1xuK1xuIFx0cmMgPSBkYXRfZW50cnlfd2FsayhOVUxMLCBnZm4sIGFzY2UsIERBVF9XQUxLX0FOWSwgVEFCTEVfVFlQRV9QQUdFX1RBQkxFLCBcdTAwMjZjcnN0ZXAsIFx1MDAyNnB0ZXApO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5AQCAtNzcxLDIxICs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuIFxuIFx0XHRpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKVxuIFx0XHRcdHJldHVybiAwO1xuLVx0XHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XG4rXHRcdHNrZXktXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpIFx1MDAzY1x1MDAzYyAxO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdG9sZCA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuIFx0cGdzdGUgPSBvbGQ7XG4gXG4gXHRpZiAoIXB0ZXAtXHUwMDNlaC5pKSB7XG4tXHRcdHJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTtcbi1cdFx0cGdzdGUuaHIgPSByYyBcdTAwM2VcdTAwM2UgMTtcbitcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcdTAwM2NcdTAwM2MgMTtcbitcdFx0cGdzdGUuaHIgPSBza2V5LVx1MDAzZXI7XG4gXHR9XG4tXHRyYyB8PSAocGdzdGUuZ3IgXHUwMDNjXHUwMDNjIDEpIHwgcGdzdGUuZ2M7XG4rXHRza2V5LVx1MDAzZXIgfD0gcGdzdGUuZ3I7XG4rXHRza2V5LVx1MDAzZWMgfD0gcGdzdGUuZ2M7XG4gXHRwZ3N0ZS5nciA9IDA7XG4gXG4gXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XG4gXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbi1cdHJldHVybiByYztcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5AQCAtODQ2LDYgKzg1MCw3IEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXG4gXHRzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay1cdTAwM2Vwcml2O1xuIFx0dW5pb24gY3JzdGUgZHVtbXkgPSB7IC52YWwgPSBwLVx1MDAzZXRva2VuIH07XG4gXHR1bmlvbiBwdGUgbmV3X3B0ZSwgcHRlID0gUkVBRF9PTkNFKCpwdGVwKTtcbitcdHVuaW9uIHBnc3RlIHBnc3RlO1xuIFxuIFx0bmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTtcbiBcbkBAIC04NTMsNyArODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXG4gXHRpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4rXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuK1x0cGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4rXHRwZ3N0ZS5jbW1hX2QgPSAwO1xuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5AQCAtNTM3LDcgKzUzNyw3IEBAIGludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmXG4gXHRcdFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKTtcbiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXG4gXHRcdFx0ICAgICB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSwgYm9vbCBucSwgYm9vbCBtciwgYm9vbCBtYyk7XG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTtcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpO1xuIGxvbmcgZGF0X3Jlc2V0X3NrZXlzKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQpO1xuIFxuIHVuc2lnbmVkIGxvbmcgZGF0X2dldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuaW5kZXggZmVlODAwNDdiZDk0Zi4uM2NjNDVmN2Y1YjJkNyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuQEAgLTkxLDkgKzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcbiBcdFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cbiBcdFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cdTAwM2VwZm4pKVxuIFx0XHRcdHJldHVybiBQR01fQUREUkVTU0lORztcbi1cdFx0LyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi9cbi1cdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHRcdC8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi9cbitcdFx0aWYgKGlzX3NpZ3BlbmRpbmdfcGZuKGYtXHUwMDNlcGZuKSlcbitcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHQvKiBDaGVjayBpZiBpdCdzIHJlYWQtb25seSBtZW1vcnk7IGRvbid0IHRyeSB0byBhY3R1YWxseSBoYW5kbGUgdGhhdCBjYXNlLiAqL1xuIFx0XHRpZiAoZi1cdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA5ZTNlNmIwZDcyYWQ2Li45ZGI2OGUzYWMxNzhmIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuQEAgLTQ1LDEzICs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xuIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuK1x0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsO1xuIFxuIFx0aWYgKCFrdm1fczM5MF90ZXN0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCkpXG4gXHRcdHJldHVybiAwO1xuK1x0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4gXG4rXHRzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0aWYgKHNyY19pZClcbiBcdFx0KnNyY19pZCA9IHNpZ3BfY3RybC5zY247XG4gXG5AQCAtNjAsMTMgKzYzLDE2IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiBcbiBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHtcbi1cdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbi1cdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgb2xkX3ZhbCwgbmV3X3ZhbCA9IHsuc2NuID0gc3JjX2lkLCAuYyA9IDF9O1xuK1x0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuK1x0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcbiBcdGludCBleHBlY3QsIHJjO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4rXHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdG9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7XG4gXHRvbGRfdmFsLmMgPSAwO1xuIFxuQEAgLTg0LDEwICs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4rXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbitcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4rXG4rXHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXG4rXHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcbiBcbiBcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVx1MDAzZXZhbHVlLCAwKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLmZkOGJhZGIwZDU3MWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0c3dpdGNoIChvcCkge1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxuIFx0XHRyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksIFx1MDAyNnNrZXksIDAsIDAsIDApO1xuLVx0XHRpZiAociBcdTAwM2U9IDApXG4rXHRcdGlmIChyID09IDAgfHwgciA9PSAxKVxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxuQEAgLTU4MCwxNCArNTgwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1JSQkU6XG4tXHRcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4pO1xuLVx0XHRpZiAociBcdTAwM2UgMClcbi1cdFx0XHRyZXR1cm4gciBcdTAwM2NcdTAwM2MgMTtcbitcdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbiwgXHUwMDI2c2tleSk7XG4rXHRcdGlmICghcilcbitcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2UgMCA/IC1FRkFVTFQgOiByO1xuIH1cbiBcbiAvKiBTZWN0aW9uOiBkZXZpY2UgcmVsYXRlZCAqL1xuQEAgLTEyMTksOCArMTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuIFxuIC8qXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxuLSAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4rICoga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbisgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG5AQCAtMTI2NSw3ICsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG5AQCAtMTMwMCw3ICsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgcmVzID0gLUVOWElPO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRndWFyZChzcmN1KShcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4rXG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XG4gXHRcdHJlcyA9IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihrdm0pO1xuQEAgLTEzMTEsNyArMTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yMjE0LDcgKzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbiBcdH1cbiBcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuQEAgLTIyNzYsNyArMjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIG91dDpcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qXG5AQCAtMjM4Niw3ICsyMzg3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qKlxuQEAgLTI5MzQsNiArMjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcbitcdFx0ciA9IC1FSU5WQUw7XG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbitcdFx0XHRicmVhaztcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTI5OTgsOSArMzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi1cdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuK1x0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKTtcbiBcdFx0XHRpZiAocilcbkBAIC0zMDE0LDkgKzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4gXHRcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcbkBAIC0zMjQ3LDcgKzMyNTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gc3RhdGljIHZvaWQgc2NhX2Rpc3Bvc2Uoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVx1MDAzZWFyY2guc2NhLCBzaXplb2YoKmt2bS1cdTAwM2VhcmNoLnNjYSkpO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnNjYSlcbitcdFx0ZnJlZV9wYWdlc19leGFjdChrdm0tXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVx1MDAzZWFyY2guc2NhKSk7XG4gXHRrdm0tXHUwMDNlYXJjaC5zY2EgPSBOVUxMO1xuIH1cbiBcbkBAIC0zNDYxLDcgKzM0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbiBcbi1cdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4rXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGNsZWFyX2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuQEAgLTM0ODEsOCArMzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRXUklURV9PTkNFKHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEsIHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4gXHRzZXRfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG4tXHRzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5AQCAtMzYxMyw2ICszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxuIFx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcbitcbitcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC0zNjc0LDcgKzM2ODEsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4rXHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbylcbitcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvID0gMDtcbiB9XG4gXG5AQCAtMzc5MiwyMSArMzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rREVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbitcbiBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2U7XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xuIFx0aW50IHJjO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2llX3BhZ2UpICE9IDQwOTYpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gubWMpXG4rXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbitcdGlmICghbWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c2llX3BhZ2UgPSAoc3RydWN0IHNpZV9wYWdlICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFzaWVfcGFnZSkge1xuLVx0XHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBOVUxMO1xuK1x0aWYgKCFzaWVfcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrID0gXHUwMDI2c2llX3BhZ2UtXHUwMDNlc2llX2Jsb2NrO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpdGRiYSA9IHZpcnRfdG9fcGh5cyhcdTAwMjZzaWVfcGFnZS1cdTAwM2VpdGRiKTtcbkBAIC0zODQ4LDEwICszODU2LDkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcbiBcbiBcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuIFx0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5nbWFwKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwiY3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFwiLFxuQEAgLTM4NTksMjAgKzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gXG4gXHRyYyA9IGt2bV9zMzkwX3ZjcHVfc2V0dXAodmNwdSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcbitcdGlmIChyYykge1xuK1x0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4rXHRcdFx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4rXHRcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuIFxuK1x0dmNwdS1cdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xuK1x0c2llX3BhZ2UgPSBOVUxMO1xuIFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cdTAwM2Vrdm0sIDEpO1xuIFx0cmV0dXJuIDA7XG4tXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcbi1cdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHR9XG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHRyZXR1cm4gcmM7XG4gfVxuIFxuIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01MDM5LDYgKzUwNDUsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1fcnVuLVx1MDAzZWt2bV9kaXJ0eV9yZWdzIFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXG4rXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXG4gXHRpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7XG5AQCAtNTQ0Nyw2ICs1NDU3LDggQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2lycSBzMzkwaXJxID0ge307XG4gXG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0aWYgKHMzOTBpbnRfdG9fczM5MGlycShcdTAwMjZzMzkwaW50LCBcdTAwMjZzMzkwaXJxKSlcbkBAIC01NTIzLDYgKzU1MzUsMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0bG9uZyByO1xuIFx0dTE2IHJjLCBycmM7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDI0ICs1ODEwLDQ0IEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbit7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbitcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRpZiAocGdzdGUuY21tYV9kKSB7XG4rXHRcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuK1x0fVxuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbi1cdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbi1cdGludCByYyA9IDA7XG4rXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHRpbnQgcmMgPSAtRU5PTUVNO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFxuIFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIW1jKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbitcdGlmICghbWMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuK3JldHJ5OlxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIFx1MDAyNlx1MDAyNiBvbGQpIHtcbitcdFx0XHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZWJhc2VfZ2ZuICsgb2xkLVx1MDAzZW5wYWdlcyxcbitcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbitcdFx0fVxuK1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbkBAIC01ODI3LDEzICs1ODYzLDE4IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRjYXNlIEtWTV9NUl9GTEFHU19PTkxZOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuK1x0XHRcdHJjID0gMDtcbiBcdFx0XHRXQVJOKDEsIFwiVW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxcblwiLCBjaGFuZ2UpO1xuIFx0XHR9XG4gXHR9XG4rXHRpZiAocmMgPT0gLUVOT01FTSkge1xuK1x0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbiBvdXQ6XG4gXHRpZiAocmMpXG4gXHRcdHByX3dhcm4oXCJmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cIik7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gXHRyZXR1cm47XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcbitcdHVuaW9uIHNrZXkgc2tleTtcbiBcdGludCByZWcxLCByZWcyO1xuIFx0aW50IHJjO1xuIFxuQEAgLTMwNywxMiArMzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbitcdFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXHUwMDI2c2tleSk7XG4gXHRpZiAocmMgXHUwMDNlIDApXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmM7XG4tXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcbitcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2IDMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyNjAsOCArMTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgKzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IE5VTEw7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbit7XG4rXHRpZiAoZnJlZV9zdG9yX2Jhc2UpXG4rXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4rXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuK1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuK1x0LypcbitcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4rXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcbitcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4rXHQgKi9cbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4rXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbit9XG4rXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4ge1xuIFx0aW50IGNjO1xuQEAgLTI1OCwyNCArMjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRXQVJOX09OQ0UoY2MsIFwicHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwiLCAqcmMsICpycmMpO1xuIFxuIFx0LyogSW50ZW5kZWQgbWVtb3J5IGxlYWsgZm9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uICovXG4tXHRpZiAoIWNjKVxuLVx0XHRmcmVlX3BhZ2VzKHZjcHUtXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4tXHRcdFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4tXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuLVx0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuLVx0Lypcbi1cdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4tXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2Zcbi1cdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4tXHQgKi9cbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4tXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbitcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XG4gXG4tXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xuK1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgKzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRcdCAgICAgdXZjYi5oZWFkZXIucnJjKTtcbiBcbiBcdGlmIChjYykge1xuLVx0XHR1MTYgZHVtbXk7XG4tXG4tXHRcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFx1MDAyNmR1bW15LCBcdTAwMjZkdW1teSk7XG4rXHRcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbitcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlRSKVxuIFx0XHRLVk1fVVZfRVZFTlQoa3ZtLCAzLCBcIlBST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFwiLFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDozNS40NjkyMzAwOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgwMDQzMTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFMzOTAgS1ZNIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIG1vZGlmeWluZyB0aGUgYGFyY2gvczM5MC9rdm0vYCBkaXJlY3RvcnkuIFRoaXMgaXMgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGludGVyZXN0aW5nLiBJIHNlZSBjaGFuZ2VzIGluIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCwgYHNjYV9leHRfY2FsbF9wZW5kaW5nYCwgYGt2bV9zMzkwX2tleW9wYCwgYW5kIGEgYnVuY2ggbW9yZSwgYWxsIGRlYWxpbmcgd2l0aCBWTSBzZXR1cCwgY29udHJvbCwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBTaW5jZSB0aGlzIGlzIEtWTSBvbiBzMzkwLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IENhbiB0aGlzIGJlIGZ1enplZD8gVGhlIHByb21wdCBtZW50aW9ucyBzY2VuYXJpb3Mgd2hlcmUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBpbiB3aGljaCBjYXNlIHdlIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQnV0IGhhbmcgb27igKYgczM5MCBLVk0gKmRvZXMqIHJlcXVpcmUgYW4gYWN0dWFsIHMzOTB4IGhvc3QgZm9yIHRoZSBLVk0gcGFydCwgZG9lc24ndCBpdD8gUUVNVSBjYW4gZW11bGF0ZSBzMzkweCwgYW5kIFN5emthbGxlciBzdXBwb3J0cyBzMzkweC4gQnV0LCBkb2VzIFN5emthbGxlciBydW4gb24gczM5MHg/IFllcyEgWWVzLCBpdCBkb2VzLiBUaGVyZWZvcmUsIHRoZXNlIEtWTSBpb2N0bHMgYXJlIHJlYWNoYWJsZS4gU28sIHVubGVzcyB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyB4ODZfNjQsIHRoZW4gaXQgd291bGQgYmUgcmVhY2hhYmxlLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIGFib3V0IEtWTSBmb3IgczM5MHguIEl0IGlzIHJlYWNoYWJsZSEgSW4gYSBTeXprYWxsZXIgZW52aXJvbm1lbnQgaXQgd291bGQgYmUsIHNpbmNlIFN5emthbGxlciBydW5zIG9uIHMzOTB4LiBTbywgZ2l2ZW4gdGhhdCBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBmdXp6aW5nIHMzOTB4LCBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoaXMgaXMgY29yZSBLVk0gbG9naWMgZm9yIHMzOTAsIHNvIGl0J3MgYSBnb29kIHRhcmdldC5cblxuTGV0J3MgcXVpY2tseSBzY2FuIHRoZSBjb2RlIGNoYW5nZXMuIEkgc2VlIHRoYXQgdGhlIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgc2lnbmF0dXJlIGhhcyBjaGFuZ2VkLiBXZSd2ZSBnb3QgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBub3cgaGFuZGxpbmcgYGlzX3NpZ3BlbmRpbmdfcGZuYC4gVGhlcmUgYXJlIGFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pYCBjaGVja3MgaW4gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZXh0ZXJuYWwgY2FsbHMsIGFuZCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgaXMgdXNpbmcgYSBkaWZmZXJlbnQgbG9jayBub3cuIEknbSBzZWVpbmcgY2hlY2tzIGZvciB0aGUgYHZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZGAgZmxhZyBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAuIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYWxzbyB1c2luZyBuZXcgbG9ja3MgYW5kIGZyZWUgb3BlcmF0aW9ucy4gSSdtIHNlZWluZyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzIGluIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuXG5cbkknZCBzYXkgbXkgZm9jdXMgc3ltYm9scyBmcm9tIHRoZSBkaWZmIGFyZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYW5kIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IEtjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZC4gYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgbmVlZGVkLiBJJ2xsIHF1aWNrbHkgY2hlY2sgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBidXQgSSdtIHByZXR0eSBjb25maWRlbnQgd2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDo0Ni4yNjk2NjUzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxNDQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjQ2LjMxNDA4NTEyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTIwMjM5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBhbmQgUzM5MCBVY29udHJvbCBpbiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19LVk1fUzM5MF9VQ09OVFJPTGAgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaGVyZS4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzICphY3R1YWxseSogYmVpbmcgdXRpbGl6ZWQgaW4gdGhpcyBwYXRjaCdzIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGEgcmVmZXJlbmNlIHRvIGBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pYC4gUmlnaHQsIHNvIHRoYXQncyB0aGUga2V5LiBOb3cgSSBuZWVkIHRvIGxvb2sgdXAgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiB3aGF0IGBrdm1faXNfdWNvbnRyb2xgIGlzIGRvaW5nIGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDo0OS42MDYxMTE4ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4NjU4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2lzX3Vjb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9nbWFwLmM9ODk9c3RhdGljIHZvaWQgZ21hcF9hZGRfY2hpbGQoc3RydWN0IGdtYXAgKnBhcmVudCwgc3RydWN0IGdtYXAgKmNoaWxkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEyLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExMzpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHBhcmVudC1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTQtXFx0XFx0Y2xlYXJfYml0KEdNQVBfRkxBR19PV05TX1BBR0VUQUJMRVMsIFxcdTAwMjZjaGlsZC1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MTM9aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTYxNi1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjYxNzpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTgtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz00NT1zdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTUxLVxcdFxcdHJldHVybiAwO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6NTI6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtNTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTY0PXN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTcxLVxcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6NzI6XFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy03My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9OTA9c3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtOTQtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzo5NTpcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtOTYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODE4PXN0YXRpYyBpbnQgZmxpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODMxLVxcdGNhc2UgS1ZNX0RFVl9GTElDX0FQRl9FTkFCTEU6XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODMyOlxcdFxcdGlmIChrdm1faXNfdWNvbnRyb2woZGV2LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzMy1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzNi1cXHRjYXNlIEtWTV9ERVZfRkxJQ19BUEZfRElTQUJMRV9XQUlUOlxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgzNzpcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGRldi1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzgtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxMjE9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxMzAtXFx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfUzM5MF9BREFQVEVSOlxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzEzMTpcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTYwMj1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY0NS1cXHRcXHRyID0gMDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NjQ2OlxcdFxcdGlmIChocGFnZSBcXHUwMDI2XFx1MDAyNiAhKGt2bSBcXHUwMDI2XFx1MDAyNiBrdm1faXNfdWNvbnRyb2woa3ZtKSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY0Ny1cXHRcXHRcXHRyID0gMTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NTAtXFx0XFx0ciA9IDA7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjY1MTpcXHRcXHRpZiAoaHBhZ2VfMmcgXFx1MDAyNlxcdTAwMjYgIShrdm0gXFx1MDAyNlxcdTAwMjYga3ZtX2lzX3Vjb250cm9sKGt2bSkpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NTItXFx0XFx0XFx0ciA9IDE7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NzQ2PWludCBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzUzLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo3NTQ6XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03NTUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Nzg4PWludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTg5Mi1cXHRcXHRcXHRyID0gLUVCVVNZO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo4OTM6XFx0XFx0ZWxzZSBpZiAoIWhwYWdlIHx8IGt2bS1cXHUwMDNlYXJjaC51c2VfY21tYSB8fCBrdm1faXNfdWNvbnRyb2woa3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtODk0LVxcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTkxMy1cXHRcXHRcXHRyID0gLUVCVVNZO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo5MTQ6XFx0XFx0fSBlbHNlIGlmICghaHBhZ2VfMmcgfHwga3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hIHx8IGt2bV9pc191Y29udHJvbChrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTkxNS1cXHRcXHRcXHRyID0gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz05OTM9c3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwNDAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEwNDE6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDQyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjY9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzgtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5Mzk6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQwLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM0MDU9dm9pZCBrdm1fYXJjaF92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTItXFx0a3ZtX2NsZWFyX2FzeW5jX3BmX2NvbXBsZXRpb25fcXVldWUodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM0MTM6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxNC1cXHRcXHRzY2FfZGVsX3ZjcHUodmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxNi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQxNzpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxOC1cXHRcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlY2hpbGRyZW5fbG9jaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNjA1PXZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjEyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxMzpcXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTQtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXA7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzcwOT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3MzMtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWVjYiB8PSBFQ0JfVEU7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3MzQ6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzczNS1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZWNiIHw9IEVDQl9TUEVDSTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzk2PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5Ny17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3OTg6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2woa3ZtKSBcXHUwMDI2XFx1MDAyNiAhc2NhX2Nhbl9hZGRfdmNwdShrdm0sIGlkKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zODA1PWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg1Ny1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg1ODpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg1OS1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg2OS1cXHRpZiAocmMpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg3MDpcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg3MS1cXHRcXHRcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlY2hpbGRyZW5fbG9jaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00MzIzPXN0YXRpYyBpbnQgdmNwdV91Y29udHJvbF90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqZ2FkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDMyNi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDMyNzpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDMyOC1cXHRcXHRyYyA9IGdtYXBfdWNhc190cmFuc2xhdGUodmNwdS1cXHUwMDNlYXJjaC5tYywgdmNwdS1cXHUwMDNlYXJjaC5nbWFwLCBnYWRkcik7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDU1Nz1zdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU3MTpcXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NzItXFx0XFx0cmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDQwPWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0NTktXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NjA6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDYxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1Mjk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MTMtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MTQ6XFx0XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxNS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMxLVxcdFxcdHIgPSAtRUlOVkFMO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NjMyOlxcdFxcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MzMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc0OD12bV9mYXVsdF90IGt2bV9hcmNoX3ZjcHVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzUxLVxcdGlmICgodm1mLVxcdTAwM2VwZ29mZiA9PSBLVk1fUzM5MF9TSUVfUEFHRV9PRkZTRVQpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NTI6XFx0XFx0IFxcdTAwMjZcXHUwMDI2IChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTc1My1cXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3Njc9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTc3MS17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NzI6XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pIFxcdTAwMjZcXHUwMDI2IG5ldyBcXHUwMDI2XFx1MDAyNiBuZXctXFx1MDAzZWlkIFxcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzczLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU5MDE9bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5MDYtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5MDc6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTA4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTExMT1zdGF0aWMgaW5saW5lIGludCBpc192Y3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTExNS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6MTE2OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9pc191Y29udHJvbChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTExNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjQ5LjY1Njk4NDA4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTg5OTEyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fUzM5MF9VQ09OVFJPTCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHJpZ2h0LCB0aGF0J3MgZGVmaW5pdGVseSBhIHZhbGlkIGNvbmZpZyBvcHRpb24uIE5vdywgbGV0J3MgZmlndXJlIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZCBhbmQgd2hhdCBpdCByZWxpZXMgb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYW55IHBvdGVudGlhbCBwcmVyZXF1aXNpdGVzIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgYEtWTV9TMzkwX1VDT05UUk9MYCB0byBiZSBlbmFibGVkLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlIGluIGEgS1ZNIGVudmlyb25tZW50IG9uIHMzOTAgaGFyZHdhcmUuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MTEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDo1Mi44NzU5NzgzMDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyOTk4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDA6NTIuOTIxMjgxNzkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0ODM5MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtWTSBLY29uZmlnIGZvciBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ3LiBJJ20gZm9jdXNpbmcgb24gdGhpcyBhcmVhIGJlY2F1c2UuLi4gd2VsbCwgSSBzdXNwZWN0IHRoZXJlJ3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIG9yIHBvc3NpYmx5IHByb2JsZW1hdGljIHRoZXJlLiBNeSBpbml0aWFsIGd1ZXNzLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGEgZmVhdHVyZSBmbGFnIHJlbGF0ZWQgdG8gS1ZNIHN1cHBvcnQgb24gczM5MC4gUGVyaGFwcyBpdCdzIGRlYWxpbmcgd2l0aCBhIG5ldyBoYXJkd2FyZSBmZWF0dXJlLCBvciBhbiBvcHRpbWl6YXRpb24uIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlnIG9wdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBwcm9jZXNzb3IgZmVhdHVyZXMgb3Igc3BlY2lmaWMgaHlwZXJ2aXNvciBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBLY29uZmlnIGVudHJ5ICplbmFibGVzKiBvciAqZGlzYWJsZXMqIGluIG9yZGVyIHRvIHNlZSBpZiBpdCdzIGltcGFjdGluZyBhIGN1cnJlbnQgcHJvamVjdCwgb3IgZm9yIHdoYXQgaXQgbWF5IHJlbGF0ZSBmb3IgZnV0dXJlIGRlc2lnbiBjb25jZXJucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmNoaXRlY3R1cmFsIHNwZWNpZmljcyBvZiBzMzkwIGFuZCBob3cgS1ZNIGludGVncmF0ZXMgb24gdGhhdCBhcmNoaXRlY3R1cmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIGFsc28gd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGUgY3VycmVudCBjb25maWcgb3B0aW9uIHRvIGZ1dHVyZSBkZXNpZ25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjU2LjI2OTY3ODczNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICAzMTpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDMyOlxcdFxcdHNlbGVjdCBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXFxuICAzMzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgcGFyYXZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIHRoZSBTSUVcXG4gIDM2OlxcdFxcdCAgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0eSBvbiB0aGUgbWFpbmZyYW1lLiBUaGlzIHNob3VsZCB3b3JrXFxuICAzNzpcXHRcXHQgIG9uIGFueSA2NGJpdCBtYWNoaW5lLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2hcXG4gIDQwOlxcdFxcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA0MzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEtWTVxcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBBbGxvdyBDQVBfU1lTX0FETUlOIHVzZXJzIHRvIGNyZWF0ZSBLVk0gdmlydHVhbCBtYWNoaW5lcyB0aGF0IGFyZVxcbiAgNTI6XFx0XFx0ICBjb250cm9sbGVkIGJ5IHVzZXJzcGFjZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRlbmRpZiAjIFZJUlRVQUxJWkFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjU2LjI2OTczNjc2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI0NDM3NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAgYXJlIHRoZSBrZXkgY29uZmlncyBpbnZvbHZlZCBoZXJlLiBXYWl0IGEgc2Vjb25kLCAqYEtWTWAgaXRzZWxmIGlzIGEgdHJpc3RhdGUqLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgaXTigJlzIGluaGVyZW50bHkgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBvdGhlciBjcml0ZXJpYSwgc28gYXMgbG9uZyBhcyB0aG9zZSBhcmUgbWV0IGBLVk1gIGlzIG5vdCB0aGUgcHJvYmxlbSBhbmQgY2FuIGJlIGNvbnNpZGVyZWQgYWN0aXZlLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIHNldHRpbmcgc29tZXdoZXJlIGVsc2UuIExldCdzIGRlbHZlIGludG8gdGhlIGNvZGUgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgbWFrZSBzdXJlIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYWRkcmVzc2VkLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBhcmNoL3MzOTAva3ZtL3B2LmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgc3BvdCB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgY29uZmlndXJhdGlvbiBzZXR1cC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3MgaW50ZXJhY3QgYW5kIGlmIHRoZXJlJ3MgYW55IGltcGxpY2l0IGRlcGVuZGVuY3kgdGhhdCBJJ20gb3Zlcmxvb2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTg5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDo1OS45OTQxNzc1MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTE5Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI0NDc9c3RhdGljIGludCBrdm1fczM5MF9jcHVzX3RvX3B2KHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ2MC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VtdXRleCk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI0NjE6XFx0XFx0ciA9IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUodmNwdSwgcmMsIHJyYyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI0NjItXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VtdXRleCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzcwOT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3ODYtXFx0aWYgKGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3ODc6XFx0XFx0cmMgPSBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHZjcHUsIFxcdTAwMjZ1dnJjLCBcXHUwMDI2dXZycmMpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNzg4LVxcdFxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD0zMDU9aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozMDY6aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTMwNy1pbnQga3ZtX3MzOTBfcHZfc2V0X2FzaWRlKHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jPTI2NT1pbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yODMtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjI4NDppbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTowMC4wNDM3MDI3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE2OTg5NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBwdi5jYCoqXG5cbk9rYXksIHNvIEknbSB3b25kZXJpbmcgYWJvdXQgYHB2LmNgIGFuZCB3aGV0aGVyIGl0J3MgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMga2VybmVsIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhlIGBhcmNoL3MzOTAva3ZtL01ha2VmaWxlYCBmaWxlIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciBLVk0gb24gczM5MCBpcyBkZWZpbmVkLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIG9yIHJ1bGVzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLiBUaW1lIHRvIG9wZW4gdGhhdCB1cCBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjAyLjc2MDY5NDg2MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NjQ1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL01ha2VmaWxlPTEwPWt2bS15ICs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTE6a3ZtLXkgKz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMi1rdm0teSArPSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjAyLjgwODE2ODE4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTMyNDE1NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tUzM5MCBDb21waWxhdGlvbiBhbmQgS2V5IFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIEtWTS1TMzkwIGNvZGUgYW5kIGhvdyBpdCdzIGNvbXBpbGVkLiBSaWdodCBub3csIGl0IGxvb2tzIGxpa2UgYHB2Lm9gLCBgZGF0LmNgLCBgZmF1bHRpbi5jYCwgYGludGVycnVwdC5jYCwgYGt2bS1zMzkwLmNgLCBhbmQgYHByaXYuY2AgYXJlIGFsd2F5cyBjb21waWxlZCB3aGVuIGBLVk1gIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuTXkgYXR0ZW50aW9uIHRoZW4gbW92ZXMgdG8gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggb25lcyBhcmUga2V5IGhlcmUsIHNvIEknbSBub3RpbmcgdGhlc2UgZG93biBhcyBwb3RlbnRpYWwgYXJlYXMgb2YgaW52ZXN0aWdhdGlvbjogYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUga2V5IHN5bWJvbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb2RlLiBMZXQncyBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkOiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgLCBgaGFuZGxlX3JyYmVgLCBhbmQgYGhhbmRsZV9lc3NhYC5cblxuSG9sZCBvbiwgSSBzZWUgYSBjb25uZWN0aW9uIGhlcmUhIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9ycmJlYCBhbmQgYGt2bV9zMzkwX2tleW9wYC4gYGhhbmRsZV9ycmJlYCBpcyBkZWZpbml0ZWx5IGFuIGluc3RydWN0aW9uIGhhbmRsZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBga3ZtX3MzOTBfa2V5b3BgLiBJcyBpdCBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfZ3Vlc3Rfc2tleV9vcGA/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDM3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjA4LjM0MDU4Njc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxNzIzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfa2V5b3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA2MS1cXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA2MjpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDYzLVxcdFxcdHVuaW9uIHNrZXkgc2tleTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDc0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc1OlxcdFxcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzYtXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTowOC41MDI3NjQzNjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MjAwMDQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fUzM5MF9LRVlPUCBNeXN0ZXJ5KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBga3ZtX3MzOTBfa2V5b3BgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92bV9pb2N0bGAsIHNwZWNpZmljYWxseSB3aGVuIGhhbmRsaW5nIGBLVk1fUzM5MF9LRVlPUGAuIE15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZyDigJMgYEtWTV9TMzkwX0tFWU9QYCBkb2Vzbid0IHNvdW5kIGZhbWlsaWFyLCBhbmQgdGhhdCdzIG5vdCBnb29kLiBJdCdzIG5vdCBhIHN0YW5kYXJkIGlvY3RsLiBMZXQncyBkaWcgZGVlcGVyLiBBaCwgcmlnaHQsIGBrdm1fczM5MF9rZXlvcGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4gVGhhdCdzIGEgY2x1ZS4gSG1tLCBjb3VsZCB0aGlzIGJlIGEgdHlwbz8gUGVyaGFwcyB0aGUgaW50ZW5kZWQgaW9jdGwgaXMgYEtWTV9TMzkwX1pQQ0lfT1BgPyBObywgd2FpdCwgdGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIGBLVk1fUzM5MF9LRVlPUGAgc3RpbGwgZG9lc24ndCBleGlzdCwgSSBuZWVkIHRvIGNoZWNrIGBrdm1fYXJjaF92bV9pb2N0bGAgYWdhaW4sIGFyb3VuZCBsaW5lIDMwNzUgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzA4LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjEyLjU3NDc2ODA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzA1MDpcXHRcXHR9XFxuMzA1MTpcXHRcXHRjYXNlIEtWTV9TMzkwX01FTV9PUDoge1xcbjMwNTI6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX21lbV9vcCBtZW1fb3A7XFxuMzA1MzpcXHRcXG4zMDU0OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2bWVtX29wLCBhcmdwLCBzaXplb2YobWVtX29wKSkgPT0gMClcXG4zMDU1OlxcdFxcdFxcdFxcdHIgPSBrdm1fczM5MF92bV9tZW1fb3Aoa3ZtLCBcXHUwMDI2bWVtX29wKTtcXG4zMDU2OlxcdFxcdFxcdGVsc2VcXG4zMDU3OlxcdFxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjMwNTg6XFx0XFx0XFx0YnJlYWs7XFxuMzA1OTpcXHRcXHR9XFxuMzA2MDpcXHRcXHRjYXNlIEtWTV9TMzkwX0tFWU9QOiB7XFxuMzA2MTpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG4zMDYyOlxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XFxuMzA2MzpcXHRcXHRcXHR1bmlvbiBza2V5IHNrZXk7XFxuMzA2NDpcXHRcXG4zMDY1OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2a29wLCBhcmdwLCBzaXplb2Yoa29wKSkpIHtcXG4zMDY2OlxcdFxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjMwNjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzA2ODpcXHRcXHRcXHR9XFxuMzA2OTpcXHRcXHRcXHRza2V5LnNrZXkgPSBrb3Aua2V5O1xcbjMwNzA6XFx0XFxuMzA3MTpcXHRcXHRcXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4zMDcyOlxcdFxcdFxcdGlmICghbWMpXFxuMzA3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMDc0OlxcdFxcbjMwNzU6XFx0XFx0XFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcXG4zMDc2OlxcdFxcdFxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4zMDc3OlxcdFxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4zMDc4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMwNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjEyLjU3NTIwNTYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1ODM3Mjk5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNX1MzOTBfS0VZT1AgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgc28gYEtWTV9TMzkwX0tFWU9QYCBpcyBpbmRlZWQgYW4gaW9jdGwsIGFzIEkgc3VzcGVjdGVkLiBOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3Q6XG5cbiogICBga3ZtX2FyY2hfdm1faW9jdGxgXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYFxuKiAgIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYFxuKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmBcbiogICBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWBcbiogICBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgXG4qICAgYGhhbmRsZV9ycmJlYFxuKiAgIGBoYW5kbGVfZXNzYWBcblxuV2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiB3YXJucyBhZ2FpbnN0IGZvY3VzaW5nIG9uIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIGJpYXNpbmcgdGhlIHRlc3QgZGlzdHJpYnV0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBhdm9pZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIEtWTSwgYnV0IGl0J3MgKnZlcnkqIGZyZXF1ZW50bHkgY2FsbGVkLlxuXG5Ob3csIHdoYXQgYWJvdXQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgPyBIbW0sIHRoZXkncmUgbW9yZSBnZW5lcmljLCBidXQgdGhleSdyZSB0aGUgZW50cnkgcG9pbnRzIGZvciBpb2N0bHMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXkncmUgcHJvYmFibHkgd29ydGggbG9va2luZyBhdC5cblxuQWgsIGFuZCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIE5vdyB3aGVyZSBpcyB0aGF0IGNhbGxlZCBmcm9tPyBJIHRob3VnaHQgaXQgbWlnaHQgYmUgc29tZXRoaW5nIGxpa2UgYGt2bV92bV9pb2N0bF9zZXRfZXh0ZW5zaW9uYCwgYnV0IEkgZG9uJ3QgdGhpbmsgdGhhdCdzIHJpZ2h0Li4uIElzIGl0IGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCB2aWEgYEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVGA/IE5vLCB3YWl0Li4uIGl0J3MgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIHRoYXQgY2FsbHMgaXQuIEFuZCB3aGF0J3MgY2FsbGluZyAqdGhhdCo/IElzIGl0IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjYWxsIGNoYWluIGZvciBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2MTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MToxOS4xNTg5MzgyNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDAwNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyNzE9c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5Ny1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI5ODpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjk5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDQ0PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNjEtXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT046XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIwNjI6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihrdm0sIGF0dHIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYzLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MToxOS4yMDU5NDUwMDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIwNjAxNDY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBLZXkgS1ZNL3MzOTAgRW50cnkgUG9pbnRzKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBzaWduaWZpY2FudCBlbnRyeSBwb2ludHMgaW50byB0aGUgS1ZNL3MzOTAgYXJjaGl0ZWN0dXJlLiBJJ20gZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zIGFzIHRoZSBwcmVmZXJyZWQgY2FuZGlkYXRlcywgc2luY2UgdGhvc2UgcmVwcmVzZW50IHdlbGwtZGVmaW5lZCBBUEkgYm91bmRhcmllcy5cblxuU28sICpga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAqIGlzIHRyaWdnZXJlZCBieSAqYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCosIHdoaWNoIGl0c2VsZiBpcyBhIGNvbnNlcXVlbmNlIG9mICpgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAqIGZyb20gdGhlIFZNLiBUaGF0IGRlZmluaXRlbHkgc2VlbXMgbGlrZSBhIHN0cm9uZyBwb2ludCBvZiBmb2N1cy4gSXQncyBhIG5pY2UsIGNsZWFuIGNhbGwgY2hhaW4gdG8gcmVwcmVzZW50LiBJJ3ZlIGdvdCB0aGF0IG9uZS5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBDTU1BIGJpdHMgZnVuY3Rpb25zPyAqYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgKiBhbmQgKmBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCogYXJlIGNhbGxlZCB2aWEgKmBrdm1fYXJjaF92bV9pb2N0bGAqLCBpbiByZXNwb25zZSB0byB0aGUgKmBLVk1fUzM5MF9HRVRfQ01NQV9CSVRTYCogYW5kICpgS1ZNX1MzOTBfU0VUX0NNTUFfQklUU2AqIGlvY3RscywgcmVzcGVjdGl2ZWx5LiBJIHRoaW5rIEknbGwgYWRkICpga3ZtX2FyY2hfdm1faW9jdGxgKiBhcyBhIGZvY3VzIHN5bWJvbCwgc2luY2UgdGhvc2UgYXJlIGhvdyB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGVtLlxuXG5JIGxpa2UgKmBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCogYW5kICpga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgKi4gVGhlc2Ugc2VlbSBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gQ1BVIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBzbyBJJ2xsIGFkZCB0aG9zZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGBoYW5kbGVfcnJiZWAgYW5kIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSBpbnN0cnVjdGlvbiBoYW5kbGVycyBmb3IgUlJCRSBhbmQgRVNTQSBpbnN0cnVjdGlvbnMsIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGVtLCBzaW5jZSB0aGV5IGFyZSBzdGF0aWMuIEJ1dCwgZ2l2ZW4gdGhlaXIgcm9sZSBpbiBpbnN0cnVjdGlvbiBoYW5kbGluZywgSSdtIGdvaW5nIHRvIGNoZWNrLiBcblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMuIFRoZXkgKmFyZSogY2FsbGVkIGludGVybmFsbHkgd2hlbiB0aGUgZ3Vlc3QgZXhlY3V0ZXMgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLiBTaG91bGQgdGhleSBiZSBpbmNsdWRlZD9cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGluZGljYXRlIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IGhlbHBzIGZvY3VzIG15IGF0dGVudGlvbiBvbiBpbnRlcmZhY2VzIHdoaWNoIGFyZSBtb3JlIGxpa2VseSB0byBiZSBzdGFibGUgQVBJLlxuXG5JIHNlZSB0aGF0IGBrdm1fczM5MF9rZXlvcGAgaXMgc3RhdGljLCBidXQgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC4gSSB3YW50IHRvIGF2b2lkIGFkZGluZyBzdGF0aWMgb3IgaW5saW5lZCBmdW5jdGlvbnMuIEdpdmVuIHRoZSBndWlkYW5jZSB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLCBJIGFtIGdvaW5nIHRvIHRyeSB0byBpbmNsdWRlIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gdGhlIGxpc3QsIGluc3RlYWQuXG5cblJldmlld2luZyB3aGF0IEkga25vdyBzbyBmYXIsIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOlxuXG4tICAgYGt2bV9hcmNoX3ZtX2lvY3RsYFxuLSAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsYFxuLSAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmBcbi0gICBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWBcbi0gICBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgXG5cbkkgd2lsbCBhZGQgdGhlc2UgdG8gbXkgbGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5MDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6MjcuNDExOTcwMDE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5OTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfcnJiZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz0yNTc9c3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yODgtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6Mjg5OnN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTI5MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz05NTk9aW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzktXFx0Y2FzZSAweDJhOlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjk4MDpcXHRcXHRyZXR1cm4gaGFuZGxlX3JyYmUodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTgxLVxcdGNhc2UgMHgyYjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6MjcuNDU5ODc2MDY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODg1NDk0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9zMzkwIEhhbmRsZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBga3ZtX3MzOTBfaGFuZGxlX2IyYCBhbmQgYGt2bV9zMzkwX2hhbmRsZV9iOWAsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhleSdyZSBjYWxsZWQgZnJvbSB0aG9zZSBzd2l0Y2ggc3RhdGVtZW50cyB3aXRoaW4gdGhlIEtWTS9zMzkwIGNvZGUuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSBwcm9iYWJseSBub3QgaW5saW5lZCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhleSdyZSBwcmV0dHkgaGVmdHkgYW5kIGdldCBjYWxsZWQgZnJvbSBhIGxhcmdlIHN3aXRjaCwgd2hpY2ggc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGRlc2lnbi4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBhZGQgYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBrdm1fczM5MF9oYW5kbGVfYjlgIHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBjb3ZlcmVkIGV2ZXJ5dGhpbmcuIFdhaXQsIGhhbmcgb24uLi4gYGt2bV9zMzkwX2hhbmRsZV9iMmAgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBkaWcgaW50byBgaGFuZGxlX2Vzc2FgIHRvIHNlZSB3aHkgaXQncyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LCB3aGF0IG90aGVyIGltcGxpY2F0aW9ucyB0aGlzIGRlc2lnbiBjaG9pY2UgaGFzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3QgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjMxLjA0ODQyODgyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTA3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX2Vzc2FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmM9MTE5MT1zdGF0aWMgdm9pZCBfZXNzYV9jbGVhcl9jYnJsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqY2JybCwgaW50IGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTYtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTIxNzpzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjE4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyODQ9aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjkzLVxcdGNhc2UgMHhhYjpcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjk0OlxcdFxcdHJldHVybiBoYW5kbGVfZXNzYSh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjk1LVxcdGNhc2UgMHhhZjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6MzEuMDk0MTI3ODg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzU1MTQyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBrdm1fczM5MF9oYW5kbGVfYjlgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIEkgc2VlIHRoYXQgYGt2bV9zMzkwX2hhbmRsZV9iOWAgKmlzbid0KiBkZWNsYXJlZCBhcyBzdGF0aWMuIEdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cyBpbiB0aGUgUzM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEkgc2hvdWxkIGNoZWNrIGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYCBhbmQgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgIG5leHQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zLiBJIGtub3cgdGhleSdyZSBwcm9iYWJseSBkZWZpbmVkIHdpdGhpbiBga3ZtLXMzOTAuY2AsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhleSdyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtaWdodCBwcm92aWRlIHNvbWUgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIGludGVuZGVkIHNjb3BlIGFuZCB1c2FnZS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwODcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTozNy43Njk2NDQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI1MzQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9nZXRfY21tYV9iaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjExPXN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyMjItICoga3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyMjM6ICoga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSwgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyNC0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIyNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI2OC0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjY5OiAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzAtICovXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjIyMT1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMjkwLSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMjkxOnN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyOTItXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3MzOTBfY21tYV9sb2cgKmFyZ3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAwNS1cXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jaylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzAwNjpcXHRcXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAwNy1cXHRcXHRpZiAoIXIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6MzcuODE5OTAzOTI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODczMjA4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgdGhpbmtpbmcgZ29lcyBsaWtlIHRoaXM6XG5cbioqQWRkcmVzc2luZyBTdGF0aWMgRnVuY3Rpb24gQ2FsbHMgaW4gS1ZNL3MzOTAgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzIHN0YXRpYy4gVGhhdCdzIG5vdCBpZGVhbCBmb3Igd2hhdCBJJ20gdHJ5aW5nIHRvIGFjaGlldmUuIEkgdGhpbmsgSSdsbCB1c2UgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbnN0ZWFkOyB0aGF0IHNlZW1zIGxpa2UgYSBtb3JlIGFwcHJvcHJpYXRlIGVudHJ5IHBvaW50LiBcblxuTm93LCBtb3Zpbmcgb24sIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGluIGBpbnRlcnJ1cHQuY2A6IGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBzY2FfaW5qZWN0X2V4dF9jYWxsYCwgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgLiBUaGV5J3JlICphbHNvKiBzdGF0aWMsIHdoaWNoIG1lYW5zIEkgY2FuJ3QganVzdCBjYWxsIHRoZW0gZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmJlaW5nKiBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NDEuNzA3MjI3NjY0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5MDk2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NhX2luamVjdF9leHRfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9NDU9c3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy02My1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjY0OnN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy02NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1MDc9c3RhdGljIGludCBfX2luamVjdF9leHRjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTIzLVxcdGlmIChrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSBcXHUwMDI2XFx1MDAyNiAha3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUodmNwdSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTI0OlxcdFxcdHJldHVybiBzY2FfaW5qZWN0X2V4dF9jYWxsKHZjcHUsIHNyY19pZCk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTo0MS44NTkxNDI2ODJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MDUyMTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBfX2luamVjdF9leHRjYWxsYCoqXG5cbk9rYXksIHNvIGBfX2luamVjdF9leHRjYWxsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgYW5kIHByb2JhYmx5IG5vdCBleHBvcnRlZCBmb3IgZ2VuZXJhbCB1c2UuIE15IG5leHQgc3RlcCBpcyBvYnZpb3VzOiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJ20gZ29pbmcgdG8gZmluZCBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZWJhc2Ugd2hlcmUgYF9faW5qZWN0X2V4dGNhbGxgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQgYWJvdXQgaXRzIHB1cnBvc2UsIHRoZSBkYXRhIGl0J3Mgb3BlcmF0aW5nIG9uLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NDYuMTE5NjY3MDIyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjMwNTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2luamVjdF9leHRjYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNDkwPXN0YXRpYyBpbnQgX19pbmplY3RfcGZhdWx0X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MDYtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTA3OnN0YXRpYyBpbnQgX19pbmplY3RfZXh0Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MDgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTA1PXN0YXRpYyBpbnQgZG9faW5qZWN0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMjgtXFx0Y2FzZSBLVk1fUzM5MF9JTlRfRVhURVJOQUxfQ0FMTDpcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxMjk6XFx0XFx0cmMgPSBfX2luamVjdF9leHRjYWxsKHZjcHUsIGlycSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTMwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTo0Ni4xNjE5NzU2ODFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MjY1MTA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGRvX2luamVjdF92Y3B1YCBGdW5jdGlvbioqXG5cblJpZ2h0LCBgZG9faW5qZWN0X3ZjcHVgLiBUaGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zIGNhbiBzb21ldGltZXMgYmUgdHJpY2t5IHRvIHRyYWNlLCBlc3BlY2lhbGx5IGluIGEgbGFyZ2UgY29kZWJhc2UsIGJlY2F1c2UgeW91IG5lZWQgdG8ga25vdyBleGFjdGx5IHdoZXJlIGl0ICppcyogdXNlZC4gU28sIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzIGZvciBgZG9faW5qZWN0X3ZjcHVgLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBpdHMgcHVycG9zZSBhbmQsIHBvdGVudGlhbGx5LCBhbnkgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTGV0J3Mgc2VlIHdoZXJlIHRoaXMgb25lIHBvcHMgdXAuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzI0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NTAuMTA0NjI5NjI1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEwODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19pbmplY3RfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA5NT12b2lkIGt2bV9zMzkwX2NsZWFyX3N0b3BfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEwNC1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxMDU6c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMDYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTUwPWludCBrdm1fczM5MF9pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE1NS1cXHRzcGluX2xvY2soXFx1MDAyNmxpLVxcdTAwM2Vsb2NrKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNTY6XFx0cmMgPSBkb19pbmplY3RfdmNwdSh2Y3B1LCBpcnEpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE1Ny1cXHRzcGluX3VubG9jayhcXHUwMDI2bGktXFx1MDAzZWxvY2spO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMTY5PWludCBrdm1fczM5MF9zZXRfaXJxX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmlycXN0YXRlLCBpbnQgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTk1LVxcdGZvciAobiA9IDA7IG4gXFx1MDAzYyBsZW4gLyBzaXplb2YoKmJ1Zik7IG4rKykge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzE5NjpcXHRcXHRyID0gZG9faW5qZWN0X3ZjcHUodmNwdSwgXFx1MDAyNmJ1ZltuXSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTk3LVxcdFxcdGlmIChyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTo1MC4xNTE3NDI2ODVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyODI0MzQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEZvY3VzIGZvciBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBuYXZpZ2F0ZSB0aGlzIGNvZGUuIEkgbm90aWNlIGBrdm1fczM5MF9pbmplY3RfdmNwdWAgYW5kIGBrdm1fczM5MF9zZXRfaXJxX3N0YXRlYCBhcmVuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyB0aGVtIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cy4gYGt2bV9zMzkwX2luamVjdF92Y3B1YCBpbiBwYXJ0aWN1bGFyIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgZm9jdXMgc3ltYm9sLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBvdXQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgOyB0aG9zZSBhcmUgdXN1YWxseSBnb29kIHNwb3RzIHRvIHN0YXJ0IGRpZ2dpbmcuXG5cblJpZ2h0LCBsZXQncyBhc3NlbWJsZSBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scywgYSBzZXQgb2Yga2V5IGZ1bmN0aW9ucyB0aGF0IGNhbiBwcm92aWRlIGFuIG92ZXJ2aWV3IG9mIHRoZSBzdWJzeXN0ZW06XG5cbi0gICBga3ZtX2FyY2hfdm1faW9jdGxgXG4tICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgXG4tICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYFxuLSAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YFxuLSAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWBcbi0gICBga3ZtX3MzOTBfaGFuZGxlX2IyYFxuLSAgIGBrdm1fczM5MF9oYW5kbGVfYjlgXG4tICAgYGt2bV9zMzkwX2luamVjdF92Y3B1YFxuXG5BaCwgaGVyZSdzIGEgd3JpbmtsZS4gYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHN0YXRpYy4gVGhhdCdzIG5vdCBpZGVhbCwgYnV0IGl0J3MgY2FsbGVkIGZyb20gYGt2bV9zMzkwX3ZtX3NldF9hdHRyYC4gT2theSwgSSBjYW4gdXNlIHRoYXQgdGhlbiwgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCBpcyB0aGUgcGF0aC4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwMzAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NTcuMTc5OTg5MzQ2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIxNzM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF92bV9zZXRfYXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjAzMT1zdGF0aWMgaW50IGt2bV9zMzkwX2dldF90b3BvX2NoYW5nZV9pbmRpY2F0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDQzLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDQ0OnN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDQ1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI2PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTYxLVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTYyOlxcdFxcdHIgPSBrdm1fczM5MF92bV9zZXRfYXR0cihrdm0sIFxcdTAwMjZhdHRyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk2My1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NTcuMjIzMjE1OTI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjIwMDQyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCdzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCBoYXMgYSBsaW1pdGVkIHNjb3BlLCBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBmaWxlLiBBbmQgdGhlIGNhbGwgc2l0ZSBpcyBga3ZtX2FyY2hfdm1faW9jdGxgLiBUaGF0IHN1Z2dlc3RzIHRoYXQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBvciBjb250cm9sbGluZyBmdW5jdGlvbiBmb3IgdGhpcyBiaXQgb2YgY29kZS4gU28sIHRoZSBzY29wZSBpcyBuZWF0bHkgY29udGFpbmVkIHdpdGhpbiB0aGUgYnJvYWRlciBga3ZtX2FyY2hfdm1faW9jdGxgIGNvbnRleHQuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBvdXQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4gQWhhISBUaGlzIG9uZSBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIG9wZW5zIHVwIG1vcmUgcG9zc2liaWxpdGllcyBmb3IgaXRzIHVzYWdlLiBUaGlzIG1lYW5zIGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIHZhcmlvdXMgbG9jYXRpb25zIHdpdGhpbiB0aGUgS1ZNIGNvZGUuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHRyYWNlIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDkxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDI6MDEuMzQ1MjIzNTU4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQxODczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9mYXVsdGluX2dmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYz0xNT1ib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xNy0vKlxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjE4OiAqIGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKCkgLSBoYW5kbGUgYSBkYXQgZmF1bHQuXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTktICogQHZjcHU6IFRoZSB2Q1BVIHdob3NlIGdtYXAgaXMgdG8gYmUgZml4ZWQgdXAsIG9yIE5VTEwgaWYgb3BlcmF0aW5nIG9uIHRoZSBWTS5cXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTMyLSAqL1xcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjMzOmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTM0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTE1LVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oOjE2OmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaC0xNy1pbnQga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYsIGdmbl90IGdmbiwgYm9vbCB3KTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaC0xOC1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoxOTpzdGF0aWMgaW5saW5lIGludCBrdm1fczM5MF9mYXVsdGluX2dmbl9zaW1wbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMjAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZ2ZuX3QgZ2ZuLCBib29sIHdyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMjMtXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmg6MjQ6XFx0cmV0dXJuIGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHZjcHUsIGt2bSwgXFx1MDAyNmYpO1xcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTI1LX1cXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTg4Mj1zdGF0aWMgaW50IGFjY2Vzc19ndWVzdF9wYWdlX3dpdGhfa2V5X2dwYShzdHJ1Y3Qga3ZtICprdm0sIGVudW0gZ2FjY19tb2RlIG1vZGUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTkwMi1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzo5MDM6XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbihOVUxMLCBrdm0sIFxcdTAwMjZmYXVsdCk7XFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTA0LVxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMzc9aW50IGNtcHhjaGdfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBpbnQgbGVuLCB1bmlvbiBrdm1fczM5MF9xdWFkICpvbGQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMTU5LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjExNjA6XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbihOVUxMLCBrdm0sIFxcdTAwMjZmYXVsdCk7XFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE2MS1cXHRpZiAocmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jPTM1OT1zdGF0aWMgaW50IGhhbmRsZV9tdnBnX3BlaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTM3Mi1cXHRkbyB7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzozNzM6XFx0XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbl9zaW1wbGUodmNwdSwgTlVMTCwgZ3BhX3RvX2dmbihzcmNhZGRyKSwgZmFsc2UpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtMzc0LVxcdH0gd2hpbGUgKHJjID09IC1FQUdBSU4pO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy0zODQtXFx0ZG8ge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6Mzg1OlxcdFxcdHJjID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm5fc2ltcGxlKHZjcHUsIE5VTEwsIGdwYV90b19nZm4oZHN0YWRkciksIHRydWUpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtMzg2LVxcdH0gd2hpbGUgKHJjID09IC1FQUdBSU4pO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQzMzk9c3RhdGljIGludCBrdm1fczM5MF9maXh1cF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzNDgtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQzNDk6XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbl9zaW1wbGUodmNwdSwgTlVMTCwgZ2ZuLCB0cnVlKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDM1MC1cXHRpZiAocmMpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzNTEtXFx0XFx0cmV0dXJuIHJjO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MzUyOlxcdHJjID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm5fc2ltcGxlKHZjcHUsIE5VTEwsIGdmbiArIDEsIHRydWUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MzUzLVxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NjQwPXN0YXRpYyBpbnQgdmNwdV9kYXRfZmF1bHRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdhZGRyLCBib29sIHdyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2NTEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2NTI6XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbih2Y3B1LCBOVUxMLCBcXHUwMDI2Zik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2NTMtXFx0aWYgKHJjIFxcdTAwM2M9IDApXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUyOT1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTY1MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTY1MTpcXHRcXHRcXHRyID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm5fc2ltcGxlKHZjcHUsIE5VTEwsIGdwYV90b19nZm4oZ2FkZHIpLCBmYWxzZSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2NTItXFx0XFx0XFx0aWYgKHIgPT0gUEdNX0FERFJFU1NJTkcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTkwMT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTkwOS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTkxMDpcXHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHZjcHUsIE5VTEwsIFxcdTAwMjZmKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTkxMS1cXHRpZiAocmMgPT0gUEdNX0FERFJFU1NJTkcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9MTQ3PWludCBrdm1fczM5MF9wdl9tYWtlX3NlY3VyZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIsIHZvaWQgKnV2Y2IpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTYyLVxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5wdi5pbXBvcnRfbG9jaykge1xcbmFyY2gvczM5MC9rdm0vcHYuYzoxNjM6XFx0XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbihOVUxMLCBrdm0sIFxcdTAwMjZmKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTY0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jPTc5MT1zdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhayxcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy04MDctXFx0aWYgKHJldCA9PSAtRU5YSU8pIHtcXG5hcmNoL3MzOTAva3ZtL3B2LmM6ODA4OlxcdFxcdHJldCA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZShOVUxMLCBrdm0sIGdwYV90b19nZm4oYWRkciksIHRydWUpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy04MDktXFx0XFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQyOjAxLjM5MzY0NjcxN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg3MzM2NzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0vczM5MCBDb2RlIFJldmlldyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhlc2UgS1ZNL3MzOTAgY2hhbmdlcywgYW5kIG15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgdGhleSBhcmUgcHJldHR5IHNvbGlkLiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZSwgYXMgaXQncyBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBwbGFjZXMsIGxpa2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC5cblxuSSBzdGFydGVkIHdpdGggYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMsIGJ1dCBJJ3ZlIG5hcnJvd2VkIGl0IGRvd246XG5cbiogICBga3ZtX2FyY2hfdm1faW9jdGxgXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgXG4qICAgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgXG4qICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYFxuKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YFxuKiAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWBcbiogICBga3ZtX3MzOTBfaGFuZGxlX2IyYFxuKiAgIGBrdm1fczM5MF9oYW5kbGVfYjlgXG4qICAgYGt2bV9zMzkwX2luamVjdF92Y3B1YFxuKiAgIGBrdm1fczM5MF9mYXVsdGluX2dmbmBcblxuSSByZWFsaXplZCBga3ZtX3MzOTBfaGFuZGxlX2IyYCBhbmQgYGt2bV9zMzkwX2hhbmRsZV9iOWAgYXJlIGluc3RydWN0aW9uIGhhbmRsZXJzLCBjYWxsZWQgZnJvbSBga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gU28sIEknbGwgZm9jdXMgb24gdGhlbS5cblxuSSB0aGVuIGxvb2tlZCBhdCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIEkgY2FuIHVzZSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIG9yIGp1c3QgYGt2bV9hcmNoX3ZtX2lvY3RsYCBzaW5jZSBpdCBpcyBzdGF0aWMuIGBrdm1fYXJjaF92bV9pb2N0bGAgc2VlbXMgZmluZS5cblxuRm9yIGNvbmZpZ3VyYXRpb24sIEkgbm90ZWQgYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBkZXBlbmRzIG9uIGBLVk1gLiBJIGRvbid0IHNlZSBhbnkgb3RoZXIgczM5MC1zcGVjaWZpYyBjb25maWdzIGluIHRoZSBgS2NvbmZpZ2AuXG5cbk5vdywgcmV2aWV3aW5nIHRoZSBjaGFuZ2VzLCB0aGVyZSBhcmUgc2V2ZXJhbCBrZXkgYXJlYXM6XG5cbiogICAqKmBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGA6KiogSXRzIHNpZ25hdHVyZSBjaGFuZ2VkIHRvIGluY2x1ZGUgYHVuaW9uIHNrZXkgKnNrZXlgLiBJdCdzIGNhbGxlZCBmcm9tIGBoYW5kbGVfcnJiZWAgYW5kIGBrdm1fczM5MF9rZXlvcGAsIHdoZXJlIGBoYW5kbGVfcnJiZWAgaXMgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBrdm1fczM5MF9rZXlvcGAgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC5cbiogICAqKmBrdm1fczM5MF9mYXVsdGluX2dmbmA6KiogVGhlIGNoYW5nZSBpbiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIG5vdyByZXR1cm5zIGAtRUlOVFJgIGluc3RlYWQgb2YgYC1FQUdBSU5gIHdoZW4gYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyB3b3J0aCBjaGVja2luZyBpbiBkZXRhaWwuXG4qICAgKipgc2NhX2V4dF9jYWxsX3BlbmRpbmdgLCBgc2NhX2luamVjdF9leHRfY2FsbGAsIGBzY2FfY2xlYXJfZXh0X2NhbGxgOioqIEFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pYCBjaGVja3MuIENhbGxlZCBmcm9tIGBrdm1fczM5MF9pbmplY3RfdmNwdWAgYW5kIGBrdm1fczM5MF9jbGVhcl9zdG9wX2lycWAuXG4qICAgKipga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmA6KiogVXNlcyBgc3JjdWAgYW5kIGBzbG90c19hcmNoX2xvY2tgLiBSZWFjaGFibGUgdGhyb3VnaCBga3ZtX2FyY2hfdm1faW9jdGxgIHZpYSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLlxuKiAgICoqYGt2bV9hcmNoX3ZtX2lvY3RsYDoqKiAgQWRkZWQgYGt2bV9pc191Y29udHJvbChrdm0pYCBjaGVja3MgZm9yIHRoZSBgS1ZNX1MzOTBfSU5URVJSVVBUYCBjYXNlLlxuKiAgICoqYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWA6KiogSW1wbGVtZW50cyBgc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKWBcbiogICAqKmBrdm1fYXJjaF92Y3B1X2NyZWF0ZWA6KiogUmVmYWN0b3JlZCBmb3IgbWVtb3J5IGxlYWsgZml4ZXMuXG4qICAgKipga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gOioqIENoZWNrcyBmb3IgYHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKWAgYmVmb3JlIHJ1bm5pbmcuXG4qICAgKipga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGA6KiogQWRkZWQgYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgIGNoZWNrcy5cbiogICAqKmBrdm1fYXJjaF92Y3B1X2lvY3RsYDoqKiBTYW1lXG5cbiIsIklucHV0VG9rZW5zIjozMzY4OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDI6MjAuMjY3MDE2MzE4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc4NTE5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQxNT1zdGF0aWMgbG9uZyBrdm1fczM5MF92Y3B1X21lbXNpZGFfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0MzktXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NDA6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0NDEtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDI6MjAuNDY0ODc3ODg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzM3Mzc0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgRnVuY3Rpb24gQ2FsbCBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgLiBZZXMsIHRoYXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gd2l0aGluIGBrdm0tczM5MC5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGhvdyBpdCdzIGJlaW5nIGludm9rZWQuIElzIGl0IGRpcmVjdGx5IGNhbGxlZCBmcm9tIGBrdm1fdmNwdV9pb2N0bGA/IE5vLCBubywgbm8uIGBrdm1fdmNwdV9pb2N0bGAgaXMgaW4gYGt2bV9tYWluLmNgIHVuZGVyIGB2aXJ0L2t2bWAsIEkgc2hvdWxkIGtub3cgdGhpcy4gKlRoYXQqIGZ1bmN0aW9uIGNhbGxzIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBpbnN0ZWFkLiBCdXQgaXMgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgIGNhbGxlZCBmcm9tIHRoZXJlPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMuIEknbGwgcXVpY2tseSBsb29rIGluIGBrdm1fbWFpbi5jYCBvciBwZXJoYXBzIGBrdm1faG9zdC5oYCBmb3IgdGhlIHByZWNpc2UgY2FsbCBjaGFpbi4gTmVlZCB0byB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjkwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MjoyNC42OTg2MTgyNzZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzI0MDgwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJtLmM9MTgyND1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xOTU4LVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjE5NTk6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTk2MC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNDYwPWludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDg0LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTQ4NTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE0ODYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jPTg3MT1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9taXBzL2t2bS9taXBzLmMtODk3LVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jOjg5ODpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5hcmNoL21pcHMva3ZtL21pcHMuYy04OTktXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIwMTk9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjAyNC1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoyMDI1Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIwMjYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0yNDQ9dm1fZmF1bHRfdCBrdm1fYXJjaF92Y3B1X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjQ4LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNDk6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI1MC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU0MTU9c3RhdGljIGxvbmcga3ZtX3MzOTBfdmNwdV9tZW1zaWRhX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDM5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NDQwOmxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDQxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzE5OT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfY2xvY2soc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MjQ0LVxcbmFyY2gveDg2L2t2bS94ODYuYzo3MjQ1Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmFyY2gveDg2L2t2bS94ODYuYy03MjQ2LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTU3Mj1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1NzMtXFx0XFx0XFx0IHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNTc0Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU3NS1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NDMzLVxcdCAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDQzNDpcXHRyID0ga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0MzUtXFx0aWYgKHIgIT0gLUVOT0lPQ1RMQ01EKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MjoyNi4zNzEwMzA0MjJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg1MTkyMDk2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNL3MzOTAgQXJjaGl0ZWN0dXJlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJJ20gbm90aW5nIHRoYXQgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgIGlzIGNhbGxlZCBmcm9tIGBrdm1fdmNwdV9pb2N0bGAgKmJlZm9yZSogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLiBTdGFuZGFyZCBLVk0gZmxvdywgc28gSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgaXQgaW4gdGhlIGZvY3VzIHN5bWJvbHMuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YC4gVGhlc2UgYXJlIGNyaXRpY2FsLCBhcyB0aGV5J3JlIG5vbi1zdGF0aWMgYW5kIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgdmlhIGBLVk1fUzM5MF9QVl9DT01NQU5EYC4gRGVmaW5pdGVseSBpbmNsdWRpbmcgdGhlbS5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUsIGl0J3MgY2xlYXIgdGhhdCBLVk0gaXRzZWxmIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgIGFyZSByZWxldmFudC5cblxuU28gbXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGFyZTogYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGt2bV9zMzkwX2hhbmRsZV9iMmAsIGBrdm1fczM5MF9oYW5kbGVfYjlgLCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgLCBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC5cblxuV2FpdCwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGlzIGRlZmluZWQgaW4gYHB2LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQncyBhbHdheXMgaW5jbHVkZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiBObyBvdGhlciBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIGZvciBgcHYuY2AuIEkgd2lsbCBkb3VibGUgY2hlY2sgYGFyY2gvczM5MC9rdm0vTWFrZWZpbGVgIGp1c3QgdG8gYmUgc3VyZS4uLiB5ZXAsIGl0J3MgYWx3YXlzIGNvbXBpbGVkIGluLlxuXG5Ob3csIGZvciBgS1ZNX1MzOTBfVUNPTlRST0xgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkIGFzIHdlbGwuIE9rYXksIHllcywgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyBpbmRlZWQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBmdXp6IHRoZSBjYXNlcyB3aGVyZSB0aGlzIGlzIGVuYWJsZWQuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncywgbm9wZSwganVzdCB0aGF0IG9uZS5cblxuSW4gc3VtbWFyeSwgdGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgc3BlY2lmaWMgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGluY2x1ZGVzIGNoYW5nZXMgdGhhdCBkaXJlY3RseSBpbXBhY3QgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCBDUFUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGNyZWF0aW9uL2Rlc3RydWN0aW9uKSwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIGhhbmRsaW5nIG9mIHNwZWNpZmljIGluc3RydWN0aW9ucyAoUlJCRSwgRVNTQSkuIEltcG9ydGFudGx5LCB0aGUgYWRkaXRpb24gb2YgYEtWTV9TMzkwX1VDT05UUk9MYCBpbmRpY2F0ZXMgdGhlIGhhbmRsaW5nIG9mIHVzZXItc3BhY2UgY29udHJvbGxlZCBWTXMuIFRoZXNlIGNoYW5nZXMgYXJlIGFsbCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBzdGFuZGFyZCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24gcGF0aHMuIFRoZXJlZm9yZSwgdGhleSBhbGwgd2FycmFudCBmdXp6aW5nIHRvIGlkZW50aWZ5IGFuZCBwcmV2ZW50IHBvdGVudGlhbCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3Vlcy4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1NTgsIk91dHB1dFRva2VucyI6Mjk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQyOjQ0Ljg5MDI0MzIxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzMDgxNTksIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1MzOTBfVUNPTlRST0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjJcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iOVwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0Mjo0NC45NjI1Njc2MjlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxMzI5NDk1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQWJzZW5jZSBvZiBgS1ZNX1MzOTBfVUNPTlRST0xgKipcblxuSG1tLCB0aGlzIGlzIHN0cmFuZ2UuIEkgd2FzIGNlcnRhaW4gSSB3YXMgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBgS1ZNX1MzOTBfVUNPTlRST0xgIHNvbWV3aGVyZSwgYnV0IG5vdyBpdCBzZWVtcyB0byBiZSBlbHVkaW5nIG1lLiBUaGUga2VybmVsIGRvY3VtZW50YXRpb24gSSB3YXMgcmV2aWV3aW5nIHN1Z2dlc3RlZCBpdHMgZXhpc3RlbmNlLCBidXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHRocm93aW5nIGFuIGVycm9yLiBBIGRpc2NyZXBhbmN5IGxpa2UgdGhpcyBpcyB1c3VhbGx5IGEgc3ltcHRvbSBvZiBhIG1pc2NvbmZpZ3VyYXRpb24gb3IgcG90ZW50aWFsbHkgc29tZSBvdXRkYXRlZCBkb2N1bWVudGF0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBkb3VibGUgY2hlY2sgdGhlIHNvdXJjZS4gTGV0J3MgZGVsdmUgYmFjayBpbnRvIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMsIG9yIHBlcmhhcHMgbWlzaW50ZXJwcmV0aW5nIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYXJjaGl0ZWN1cmUsIHNvIEkgbWF5IGJlIG1pc3Npbmcgc29tZXRoaW5nLCBpdCBjYW4ndCBiZSB0aGF0IGl0IGRvZXNuJ3QgZXhpc3QsIGNhbiBpdD8gSSB3aWxsIG1ldGhvZGljYWxseSBzZWFyY2ggZm9yIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDMwMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0Mjo1OS4wOTU1MTk2MTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzI3MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQyOjU5LjEzODg1MTE2OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDI2OTI4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgY2VydGFpbiBJJ2Qgc2VlbiBgS1ZNX1MzOTBfVUNPTlRST0xgIHNvbWV3aGVyZeKApiBhbmQgdGhlcmUgaXQgaXMsIHJpZ2h0IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGF0J3Mgc3RyYW5nZSwgSSB3b25kZXIgd2h5IGBzZXQtcmVzdWx0c2AgZmxhZ2dlZCBpdCBhcyBub24tZXhpc3RlbnQ/IEhtbSwgbWF5YmUgdGhlIHRvb2wgaXMgZGVmYXVsdGluZyB0byBjaGVja2luZyBhZ2FpbnN0IHRoZSB4ODZfNjQgZGVmY29uZmlnIG9yIHNvbWUgb3RoZXIgYXJjaGl0ZWN0dXJlPyBUaGF0IHdvdWxkIGV4cGxhaW4gaXQuXG5cblJpZ2h0LCB0aGlzIGlzIGFuIHMzOTAtc3BlY2lmaWMgY29uZmlnLiBUaGUgdG9vbCBwcm9iYWJseSBkb2Vzbid0IHNlZSBpdCBiZWNhdXNlIGl0J3Mgbm90IHBhcnQgb2YgdGhlIG1haW5saW5lIGFyY2hpdGVjdHVyZSBpdCdzIGNoZWNraW5nIGFnYWluc3QuIEknbGwgbmVlZCB0byBhZGp1c3QgbXkgc3RyYXRlZ3kuIEkgdGhpbmsgdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIGp1c3QgdG8gdXNlIHRoZSBgS1ZNYCBvcHRpb24uIElmIHRoZSB0b29sIGNvbXBsYWlucyBhYm91dCBgS1ZNX1MzOTBfVUNPTlRST0xgLCBJJ2xsIG9taXQgaXQgZW50aXJlbHkgb3IganVzdCBwcm92aWRlIGBLVk1gIHdoaWNoIHNob3VsZCBlbmFibGUgZXZlcnl0aGluZyBJIG5lZWQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB0aGUgY29uZmlnIG5hbWUgaXMgY29ycmVjdCwganVzdCB0byBiZSBzdXJlLi4uIFllcCwgY29uZmlybWVkOiBgY29uZmlnIEtWTV9TMzkwX1VDT05UUk9MYC4gT2theSwgSSdtIGNvbmZpZGVudCBub3cuIEknbGwganVzdCBwcm92aWRlIGBLVk1gIGZvciBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjkzLCJPdXRwdXRUb2tlbnMiOjI4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MzowNi41NjU3ODMwNzhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY3Nzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2IyXCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjlcIixcbiAgICBcImt2bV9zMzkwX2luamVjdF92Y3B1XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIG1lbW9yeSByZWdpb25zLCBwYWdlIGZhdWx0cywgdmlydHVhbCBDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIGludGVycnVwdCBpbmplY3Rpb24sIGFuZCBzcGVjaWZpYyBpbnN0cnVjdGlvbiBoYW5kbGVycyAoUlJCRSwgRVNTQSkuIEl0IGFsc28gYWRkcyBjaGVja3MgZm9yIHVzZXJzcGFjZS1jb250cm9sbGVkIFZNcyAoS1ZNX1MzOTBfVUNPTlRST0wpLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjJcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iOVwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow4wc7m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 19:26:58 +0000 UTC FinishedAt: 2026-08-01 19:43:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "fff02191-90d5-4c05-89bf-46f5979f4da1" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_arch_vcpu_ioctl", "kvm_arch_vcpu_unlocked_ioctl", "kvm_arch_commit_memory_region", "kvm_s390_pv_create_cpu", "kvm_s390_pv_destroy_cpu", "kvm_s390_handle_b2", "kvm_s390_handle_b9", "kvm_s390_inject_vcpu", "kvm_s390_faultin_gfn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODUzYzY0MzI0OWJjNTMwYmIwMTI0NTQwMjczNWU2NTU2OTllZWU5NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTk6NDA6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ0MCw2ICYjNDM7NDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0Ym9vbCBza2V5X2VuYWJsZWQ7XG4gXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXG4gXHRib29sIGFjcnNfbG9hZGVkO1xuJiM0MztcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZcbiBcdHJldHVybiByYztcbiB9XG4gXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXG4ge1xuIFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcbiBcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XG4gXHR1bmlvbiBwdGUgKnB0ZXA7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbiYjNDM7XG4gXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFx1MDAyNmNyc3RlcCwgXHUwMDI2cHRlcCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC03NzEsMjEgJiM0Mzs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuIFxuIFx0XHRpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKVxuIFx0XHRcdHJldHVybiAwO1xuLVx0XHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XG4mIzQzO1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4gXHRwZ3N0ZSA9IG9sZDtcbiBcbiBcdGlmICghcHRlcC1cdTAwM2VoLmkpIHtcbi1cdFx0cmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpO1xuLVx0XHRwZ3N0ZS5ociA9IHJjIFx1MDAzZVx1MDAzZSAxO1xuJiM0MztcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuJiM0MztcdHNrZXktXHUwMDNlciB8PSBwZ3N0ZS5ncjtcbiYjNDM7XHRza2V5LVx1MDAzZWMgfD0gcGdzdGUuZ2M7XG4gXHRwZ3N0ZS5nciA9IDA7XG4gXG4gXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XG4gXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbi1cdHJldHVybiByYztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVx1MDAzZXByaXY7XG4gXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXHUwMDNldG9rZW4gfTtcbiBcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xuJiM0MztcdHVuaW9uIHBnc3RlIHBnc3RlO1xuIFxuIFx0bmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTtcbiBcbkBAIC04NTMsNyAmIzQzOzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0cGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4mIzQzO1x0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5AQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4mIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XG4gXG4gdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5AQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcbiBcdFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cbiBcdFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cdTAwM2VwZm4pKVxuIFx0XHRcdHJldHVybiBQR01fQUREUkVTU0lORztcbi1cdFx0LyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi9cbi1cdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4mIzQzO1x0XHRpZiAoaXNfc2lncGVuZGluZ19wZm4oZi1cdTAwM2VwZm4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHQvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXG4gXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVClcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYuLjlkYjY4ZTNhYzE3OGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtNDUsMTMgJiM0Mzs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xuIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4gXG4mIzQzO1x0c2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGlmIChzcmNfaWQpXG4gXHRcdCpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuO1xuIFxuQEAgLTYwLDEzICYjNDM7NjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxuIFxuIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4ge1xuLVx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07XG4mIzQzO1x0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXHRpbnQgZXhwZWN0LCByYztcbiBcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRvbGRfdmFsID0gUkVBRF9PTkNFKCpzaWdwX2N0cmwpO1xuIFx0b2xkX3ZhbC5jID0gMDtcbiBcbkBAIC04NCwxMCAmIzQzOzkwLDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiYjNDM7XHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbiYjNDM7XHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXG4mIzQzO1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7XG4gXG4gXHRXUklURV9PTkNFKHNpZ3BfY3RybC1cdTAwM2V2YWx1ZSwgMCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCAxNTBiNWRkMjE3MGUyLi5mZDhiYWRiMGQ1NzFjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC01NzEsNyAmIzQzOzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG4gXHRcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXHUwMDI2c2tleSwgMCwgMCwgMCk7XG4tXHRcdGlmIChyIFx1MDAzZT0gMClcbiYjNDM7XHRcdGlmIChyID09IDAgfHwgciA9PSAxKVxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxuQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOlxuLVx0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTtcbi1cdFx0aWYgKHIgXHUwMDNlIDApXG4tXHRcdFx0cmV0dXJuIHIgXHUwMDNjXHUwMDNjIDE7XG4mIzQzO1x0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcdTAwMjZza2V5KTtcbiYjNDM7XHRcdGlmICghcilcbiYjNDM7XHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XG4gfVxuIFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXG5AQCAtMTIxOSw4ICYjNDM7MTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuIFxuIC8qXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxuLSAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4mIzQzOyAqIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4mIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC0xMjY1LDcgJiM0MzsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4mIzQzOyAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbiAgKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oKSBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuQEAgLTEzMDAsNyAmIzQzOzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGludCByZXMgPSAtRU5YSU87XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRndWFyZChzcmN1KShcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuJiM0MztcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbiBcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5AQCAtMTMxMSw3ICYjNDM7MTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yMjE0LDcgJiM0MzsyMjE1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHR9XG4gXG4gXHRrdmZyZWUoa2V5cyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG5AQCAtMjI3Niw3ICYjNDM7MjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIG91dDpcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiAvKlxuQEAgLTIzODYsNyAmIzQzOzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qKlxuQEAgLTI5MzQsNiAmIzQzOzI5MzUsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRjYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDoge1xuIFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XG4gXG4mIzQzO1x0XHRyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcbiBcdFx0XHRicmVhaztcbkBAIC0yOTk4LDkgJiM0MzszMDAyLDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLVx0XHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuJiM0MztcdFx0XHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuIFx0XHRpZiAoIXIpIHtcbiBcdFx0XHRyID0gY29weV90b191c2VyKGFyZ3AsIFx1MDAyNmFyZ3MsIHNpemVvZihhcmdzKSk7XG4gXHRcdFx0aWYgKHIpXG5AQCAtMzAxNCw5ICYjNDM7MzAxNyw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4gXHRcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0Y2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7XG5AQCAtMzI0Nyw3ICYjNDM7MzI1MCw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NyeXB0b19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBzdGF0aWMgdm9pZCBzY2FfZGlzcG9zZShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0ZnJlZV9wYWdlc19leGFjdChrdm0tXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVx1MDAzZWFyY2guc2NhKSk7XG4mIzQzO1x0aWYgKGt2bS1cdTAwM2VhcmNoLnNjYSlcbiYjNDM7XHRcdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVx1MDAzZWFyY2guc2NhLCBzaXplb2YoKmt2bS1cdTAwM2VhcmNoLnNjYSkpO1xuIFx0a3ZtLVx1MDAzZWFyY2guc2NhID0gTlVMTDtcbiB9XG4gXG5AQCAtMzQ2MSw3ICYjNDM7MzQ2NSw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbiYjNDM7XHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGNsZWFyX2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuQEAgLTM0ODEsOCAmIzQzOzM0ODUsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdFdSSVRFX09OQ0Uoc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiBcdHNldF9iaXRfaW52KHZjcHUtXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXHUwMDNlbWNuKTtcbi1cdHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbkBAIC0zNjEzLDYgJiM0MzszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxuIFx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcbiYjNDM7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC0zNjc0LDcgJiM0MzszNjgxLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbykpO1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKVxuJiM0MztcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvID0gMDtcbiB9XG4gXG5AQCAtMzc5MiwyMSAmIzQzOzM4MDAsMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxuJiM0MztcbiBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2U7XG4mIzQzO1x0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XG4gXHRpbnQgcmM7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XG4tXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5tYylcbiYjNDM7XHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbiYjNDM7XHRpZiAoIW1jKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi1cdGlmICghc2llX3BhZ2UpIHtcbi1cdFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUodmNwdS1cdTAwM2VhcmNoLm1jKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLm1jID0gTlVMTDtcbiYjNDM7XHRpZiAoIXNpZV9wYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcdTAwMjZzaWVfcGFnZS1cdTAwM2VzaWVfYmxvY2s7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFx1MDAyNnNpZV9wYWdlLVx1MDAzZWl0ZGIpO1xuQEAgLTM4NDgsMTAgJiM0MzszODU2LDkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcbiBcbiBcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuIFx0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5nbWFwKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdFZNX0VWRU5UKHZjcHUtXHUwMDNla3ZtLCAzLCBcJiMzNDtjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXCYjMzQ7LFxuQEAgLTM4NTksMjAgJiM0MzszODY2LDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR0cmFjZV9rdm1fczM5MF9jcmVhdGVfdmNwdSh2Y3B1LVx1MDAzZXZjcHVfaWQsIHZjcHUsIHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuIFxuIFx0cmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpO1xuLVx0aWYgKHJjKVxuLVx0XHRnb3RvIG91dF91Y29udHJvbF91bmluaXQ7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2VjaGlsZHJlbl9sb2NrKVxuJiM0MztcdFx0XHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbiYjNDM7XHRcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuIFxuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5tYyA9IG5vX2ZyZWVfcHRyKG1jKTtcbiYjNDM7XHRzaWVfcGFnZSA9IE5VTEw7XG4gXHRrdm1fczM5MF91cGRhdGVfdG9wb2xvZ3lfY2hhbmdlX3JlcG9ydCh2Y3B1LVx1MDAzZWt2bSwgMSk7XG4gXHRyZXR1cm4gMDtcbi1cbi1vdXRfdWNvbnRyb2xfdW5pbml0OlxuLVx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdH1cbi1vdXRfZnJlZV9zaWVfYmxvY2s6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHJldHVybiByYztcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTUwMzksNiAmIzQzOzUwNDUsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1fcnVuLVx1MDAzZWt2bV9kaXJ0eV9yZWdzIFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xuJiM0MztcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0dmNwdV9sb2FkKHZjcHUpO1xuIFxuIFx0aWYgKGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkge1xuQEAgLTU0NDcsNiAmIzQzOzU0NTcsOCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuIFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIHMzOTBpcnEgPSB7fTtcbiBcbiYjNDM7XHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdGlmIChzMzkwaW50X3RvX3MzOTBpcnEoXHUwMDI2czM5MGludCwgXHUwMDI2czM5MGlycSkpXG5AQCAtNTUyMyw2ICYjNDM7NTUzNSwxMCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRsb25nIHI7XG4gXHR1MTYgcmMsIHJyYztcbiBcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbiYjNDM7XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDI0ICYjNDM7NTgxMCw0NCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGdzdGUgcGdzdGU7XG4mIzQzO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0aWYgKHBnc3RlLmNtbWFfZCkge1xuJiM0MztcdFx0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuJiM0MztcdH1cbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcbiBcdFx0XHRcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXG4ge1xuLVx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xuLVx0aW50IHJjID0gMDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07XG4mIzQzO1x0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xuJiM0MztcdGludCByYyA9IC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcbiBcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCFtYykge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4mIzQzO1x0aWYgKCFtYylcbiBcdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4mIzQzO3JldHJ5OlxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC51c2VfY21tYSBcdTAwMjZcdTAwMjYgb2xkKSB7XG4mIzQzO1x0XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlYmFzZV9nZm4gJiM0Mzsgb2xkLVx1MDAzZW5wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3dpdGNoIChjaGFuZ2UpIHtcbiBcdFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxuIFx0XHRcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZW5wYWdlcyk7XG5AQCAtNTgyNywxMyAmIzQzOzU4NjMsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJjID0gMDtcbiBcdFx0XHRXQVJOKDEsIFwmIzM0O1Vua25vd24gS1ZNIE1SIENIQU5HRTogJWRcXG5cJiMzNDssIGNoYW5nZSk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRpZiAocmMgPT0gLUVOT01FTSkge1xuJiM0MztcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAobWMpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4gb3V0OlxuIFx0aWYgKHJjKVxuIFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcblwmIzM0Oyk7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gXHRyZXR1cm47XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZ2FkZHI7XG4mIzQzO1x0dW5pb24gc2tleSBza2V5O1xuIFx0aW50IHJlZzEsIHJlZzI7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbiYjNDM7XHRcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkciksIFx1MDAyNnNrZXkpO1xuIFx0aWYgKHJjIFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJjO1xuLVx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7XG4mIzQzO1x0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFx1MDAzZVx1MDAzZSAxKSBcdTAwMjYgMyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiYjNDM7XHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgJiM0MzsyNDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZyZWVfc3Rvcl9iYXNlKVxuJiM0MztcdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbiYjNDM7XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4mIzQzO1x0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4mIzQzO1x0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuJiM0MztcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIHtcbiBcdGludCBjYztcbkBAIC0yNTgsMjQgJiM0MzsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFdBUk5fT05DRShjYywgXCYjMzQ7cHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwmIzM0OywgKnJjLCAqcnJjKTtcbiBcbiBcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xuLVx0aWYgKCFjYylcbi1cdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxuLVx0XHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xuLVxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcbi1cdG1lbXNldChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVx1MDAzZWFyY2gucHYpKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbi1cdC8qXG4tXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxuLVx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4tXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxuLVx0ICovXG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuLVx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XG4mIzQzO1x0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcbiBcbi1cdHJldHVybiBjYyA/IEVJTyA6IDA7XG4mIzQzO1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIFx0XHQgICAgIHV2Y2IuaGVhZGVyLnJyYyk7XG4gXG4gXHRpZiAoY2MpIHtcbi1cdFx0dTE2IGR1bW15O1xuLVxuLVx0XHRrdm1fczM5MF9wdl9kZXN0cm95X2NwdSh2Y3B1LCBcdTAwMjZkdW1teSwgXHUwMDI2ZHVtbXkpO1xuJiM0MztcdFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTgwOSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiYjNDM7XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5UUilcbiBcdFx0S1ZNX1VWX0VWRU5UKGt2bSwgMywgXCYjMzQ7UFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XCYjMzQ7LFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODUzYzY0MzI0OWJjNTMwYmIwMTI0NTQwMjczNWU2NTU2OTllZWU5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTk6NDA6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00NDAsNiAmIzQzOzQ0MCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAlib29sIHNrZXlfZW5hYmxlZDsKIAkvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovCiAJYm9vbCBhY3JzX2xvYWRlZDsKJiM0MzsJYm9vbCBpbml0aWFsaXplZDsKIAlzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjsKIAl1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvOwogCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2YKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbikKJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpCiB7CiAJdW5pb24gcGdzdGUgcGdzdGUsIG9sZDsKIAl1bmlvbiBjcnN0ZSAqY3JzdGVwOwogCXVuaW9uIHB0ZSAqcHRlcDsKIAlpbnQgcmM7CiAKJiM0MzsJc2tleS0mZ3Q7c2tleSA9IDA7CiYjNDM7CiAJcmMgPSBkYXRfZW50cnlfd2FsayhOVUxMLCBnZm4sIGFzY2UsIERBVF9XQUxLX0FOWSwgVEFCTEVfVFlQRV9QQUdFX1RBQkxFLCAmYW1wO2Nyc3RlcCwgJmFtcDtwdGVwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKQEAgLTc3MSwyMSAmIzQzOzc3MywyMyBAQCBpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pCiAKIAkJaWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcikKIAkJCXJldHVybiAwOwotCQlyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7CiYjNDM7CQlza2V5LSZndDtza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSkgJmx0OyZsdDsgMTsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKIAlwZ3N0ZSA9IG9sZDsKIAogCWlmICghcHRlcC0mZ3Q7aC5pKSB7Ci0JCXJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTsKLQkJcGdzdGUuaHIgPSByYyAmZ3Q7Jmd0OyAxOwomIzQzOwkJc2tleS0mZ3Q7c2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgJmx0OyZsdDsgMTsKJiM0MzsJCXBnc3RlLmhyID0gc2tleS0mZ3Q7cjsKIAl9Ci0JcmMgfD0gKHBnc3RlLmdyICZsdDsmbHQ7IDEpIHwgcGdzdGUuZ2M7CiYjNDM7CXNrZXktJmd0O3IgfD0gcGdzdGUuZ3I7CiYjNDM7CXNrZXktJmd0O2MgfD0gcGdzdGUuZ2M7CiAJcGdzdGUuZ3IgPSAwOwogCiAJZGF0X3VwZGF0ZV9wdGVwX3NkKG9sZCwgcGdzdGUsIHB0ZXApOwogCXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwotCXJldHVybiByYzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaykKQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWwKIAlzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay0mZ3Q7cHJpdjsKIAl1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtJmd0O3Rva2VuIH07CiAJdW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7CiYjNDM7CXVuaW9uIHBnc3RlIHBnc3RlOwogCiAJbmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTsKIApAQCAtODUzLDcgJiM0Mzs4NTgsMTEgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWwKIAlpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbCkKIAkJcmV0dXJuIDA7CiAKLQlkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay0mZ3Q7YXNjZSwgZmFsc2UpOwomIzQzOwlwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwomIzQzOwlwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLSZndDthc2NlLCBmYWxzZSk7CiYjNDM7CXBnc3RlLmNtbWFfZCA9IDA7CiYjNDM7CXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5oIGIvYXJjaC9zMzkwL2t2bS9kYXQuaAppbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmgKQEAgLTUzNyw3ICYjNDM7NTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2YKIAkJCXVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7CiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sCiAJCQkgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTsKLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7CiYjNDM7aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTsKIGxvbmcgZGF0X3Jlc2V0X3NrZXlzKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQpOwogCiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwppbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYwpAQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmEKIAkJLyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi8KIAkJaWYgKGlzX25vc2xvdF9wZm4oZi0mZ3Q7cGZuKSkKIAkJCXJldHVybiBQR01fQUREUkVTU0lORzsKLQkJLyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi8KLQkJaWYgKGYtJmd0O3BmbiA9PSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovCiYjNDM7CQlpZiAoaXNfc2lncGVuZGluZ19wZm4oZi0mZ3Q7cGZuKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwogCQkvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovCiAJCWlmIChmLSZndDtwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCA5ZTNlNmIwZDcyYWQ2Li45ZGI2OGUzYWMxNzhmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTQ1LDEzICYjNDM7NDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjsKIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZCkKIHsKIAlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKLQl1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiYjNDM7CXVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDsKIAogCWlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKQogCQlyZXR1cm4gMDsKJiM0MzsJaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKQomIzQzOwkJcmV0dXJuIDA7CiAKIAlCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTsKIAomIzQzOwlzaWdwX2N0cmwgPSBzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiAJaWYgKHNyY19pZCkKIAkJKnNyY19pZCA9IHNpZ3BfY3RybC5zY247CiAKQEAgLTYwLDEzICYjNDM7NjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKQogCiBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKQogewotCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwotCXVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAl1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07CiYjNDM7CXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsOwogCWludCBleHBlY3QsIHJjOwogCiAJQlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7CiYjNDM7CWlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pLCB2Y3B1LSZndDtrdm0pKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJc2lncF9jdHJsID0gJmFtcDtzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiAJb2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTsKIAlvbGRfdmFsLmMgPSAwOwogCkBAIC04NCwxMCAmIzQzOzkwLDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpCiBzdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwotCXVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKJiM0MzsJdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDsKIAotCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiYjNDM7CWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpCiAJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSBhZnRlciB0aGUgYWJvdmUgY2hlY2ssIHRvIHByZXZlbnQgZ29pbmcgb3V0IG9mIGJvdW5kcyAqLwomIzQzOwlzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAlrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpOwogCiAJV1JJVEVfT05DRShzaWdwX2N0cmwtJmd0O3ZhbHVlLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAxNTBiNWRkMjE3MGUyLi5mZDhiYWRiMGQ1NzFjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC01NzEsNyAmIzQzOzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wCiAJc3dpdGNoIChvcCkgewogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRToKIAkJciA9IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShtYywgYXNjZSwgZ2ZuLCBza2V5LCAmYW1wO3NrZXksIDAsIDAsIDApOwotCQlpZiAociAmZ3Q7PSAwKQomIzQzOwkJaWYgKHIgPT0gMCB8fCByID09IDEpCiAJCQlyZXR1cm4gc2tleS5za2V5OwogCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6CkBAIC01ODAsMTQgJiM0Mzs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AKIAkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRToKLQkJciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7Ci0JCWlmIChyICZndDsgMCkKLQkJCXJldHVybiByICZsdDsmbHQ7IDE7CiYjNDM7CQlyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCAmYW1wO3NrZXkpOwomIzQzOwkJaWYgKCFyKQomIzQzOwkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmd0OyAwID8gLUVGQVVMVCA6IHI7CiB9CiAKIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovCkBAIC0xMjE5LDggJiM0MzsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpCiAKIC8qCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aAotICoga3ZtLSZndDtzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLAotICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS4KJiM0MzsgKiBrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKJiM0MzsgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLgogICovCiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB7CkBAIC0xMjY1LDcgJiM0MzsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKQogfQogCiAvKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tJmd0O3Nsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsCiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuCiAgKi8KIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKQpAQCAtMTMwMCw3ICYjNDM7MTMwMCw5IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sCiB7CiAJaW50IHJlcyA9IC1FTlhJTzsKIAotCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwlndWFyZChzcmN1KSgmYW1wO2t2bS0mZ3Q7c3JjdSk7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKTsKJiM0MzsKIAlzd2l0Y2ggKGF0dHItJmd0O2F0dHIpIHsKIAljYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDoKIAkJcmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7CkBAIC0xMzExLDcgJiM0MzsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSwKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIAogCXJldHVybiByZXM7CiB9CkBAIC0yMjE0LDcgJiM0MzsyMjE1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCiAJfQogCiAJa3ZmcmVlKGtleXMpOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmbHQ7PSAwID8gciA6IC1FRkFVTFQ7CiB9CiAKIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKQpAQCAtMjI3Niw3ICYjNDM7MjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKQogCWt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTsKIG91dDoKIAlrdmZyZWUoa2V5cyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogLyoKQEAgLTIzODYsNyAmIzQzOzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLAogCiAJc2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sICZhbXA7a3ZtLSZndDthcmNoLmdtYXAtJmd0O2ZsYWdzKTsKIAotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmbHQ7PSAwID8gciA6IC1FRkFVTFQ7CiB9CiAKIC8qKgpAQCAtMjkzNCw2ICYjNDM7MjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAljYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDogewogCQlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7CiAKJiM0MzsJCXIgPSAtRUlOVkFMOwomIzQzOwkJaWYgKGt2bV9pc191Y29udHJvbChrdm0pKQomIzQzOwkJCWJyZWFrOwogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSkKIAkJCWJyZWFrOwpAQCAtMjk5OCw5ICYjNDM7MzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpCiAJCQlicmVhazsKLQkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7Ci0JCXIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgJmFtcDthcmdzKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKJiM0MzsJCXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jaykKJiM0MzsJCQlyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sICZhbXA7YXJncyk7CiAJCWlmICghcikgewogCQkJciA9IGNvcHlfdG9fdXNlcihhcmdwLCAmYW1wO2FyZ3MsIHNpemVvZihhcmdzKSk7CiAJCQlpZiAocikKQEAgLTMwMTQsOSAmIzQzOzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXIgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDthcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKQogCQkJYnJlYWs7Ci0JCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKTsKIAkJciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCAmYW1wO2FyZ3MpOwotCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCQlicmVhazsKIAl9CiAJY2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7CkBAIC0zMjQ3LDcgJiM0MzszMjUwLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY3J5cHRvX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogCiBzdGF0aWMgdm9pZCBzY2FfZGlzcG9zZShzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JZnJlZV9wYWdlc19leGFjdChrdm0tJmd0O2FyY2guc2NhLCBzaXplb2YoKmt2bS0mZ3Q7YXJjaC5zY2EpKTsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC5zY2EpCiYjNDM7CQlmcmVlX3BhZ2VzX2V4YWN0KGt2bS0mZ3Q7YXJjaC5zY2EsIHNpemVvZigqa3ZtLSZndDthcmNoLnNjYSkpOwogCWt2bS0mZ3Q7YXJjaC5zY2EgPSBOVUxMOwogfQogCkBAIC0zNDYxLDcgJiM0MzszNDY1LDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKIAotCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiYjNDM7CWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpCiAJCXJldHVybjsKIAogCWNsZWFyX2JpdF9pbnYodmNwdS0mZ3Q7dmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtJmd0O21jbik7CkBAIC0zNDgxLDggJiM0MzszNDg1LDggQEAgc3RhdGljIHZvaWQgc2NhX2FkZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKQogCQlyZXR1cm47CiAKJiM0MzsJV1JJVEVfT05DRShzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zZGEsIHZpcnRfdG9fcGh5cyh2Y3B1LSZndDthcmNoLnNpZV9ibG9jaykpOwogCXNldF9iaXRfaW52KHZjcHUtJmd0O3ZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLSZndDttY24pOwotCXNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LSZndDthcmNoLnNpZV9ibG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCkKQEAgLTM2MTMsNiAmIzQzOzM2MTcsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtJmd0O2t2bSwgNzQpIHx8IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX2luc3RyMCB8fAogCSAgICB2Y3B1LSZndDtrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlYykKIAkJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2ljdGwgfD0gSUNUTF9PUEVSRVhDOwomIzQzOwomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Y3B1LSZndDthcmNoLmluaXRpYWxpemVkLCB0cnVlKTsKIH0KIAogc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucikKQEAgLTM2NzQsNyAmIzQzOzM2ODEsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvKSk7CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Y2JybG8pCiYjNDM7CQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbykpOwogCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbyA9IDA7CiB9CiAKQEAgLTM3OTIsMjEgJiM0MzszODAwLDIxIEBAIGludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO0RFRklORV9GUkVFKHNpZV9wYWdlLCBzdHJ1Y3Qgc2llX3BhZ2UgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKF9UKSkpCiYjNDM7CiBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2U7CiYjNDM7CXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDsKJiM0MzsJc3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZSBfX2ZyZWUoc2llX3BhZ2UpID0gTlVMTDsKIAlpbnQgcmM7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7Ci0JdmNwdS0mZ3Q7YXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTsKLQlpZiAoIXZjcHUtJmd0O2FyY2gubWMpCiYjNDM7CW1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpOwomIzQzOwlpZiAoIW1jKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7Ci0JaWYgKCFzaWVfcGFnZSkgewotCQlrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LSZndDthcmNoLm1jKTsKLQkJdmNwdS0mZ3Q7YXJjaC5tYyA9IE5VTEw7CiYjNDM7CWlmICghc2llX3BhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrID0gJmFtcDtzaWVfcGFnZS0mZ3Q7c2llX2Jsb2NrOwogCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtpdGRiYSA9IHZpcnRfdG9fcGh5cygmYW1wO3NpZV9wYWdlLSZndDtpdGRiKTsKQEAgLTM4NDgsMTAgJiM0MzszODU2LDkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdmNwdS0mZ3Q7cnVuLSZndDtrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTOwogCiAJaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKSB7Ci0JCXJjID0gLUVOT01FTTsKIAkJdmNwdS0mZ3Q7YXJjaC5nbWFwID0gZ21hcF9uZXdfY2hpbGQodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmdtYXAsIC0xVUwpOwogCQlpZiAoIXZjcHUtJmd0O2FyY2guZ21hcCkKLQkJCWdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrOwomIzQzOwkJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCVZNX0VWRU5UKHZjcHUtJmd0O2t2bSwgMywgJiMzNDtjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwJiMzNDssCkBAIC0zODU5LDIwICYjNDM7Mzg2NiwxOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtJmd0O3ZjcHVfaWQsIHZjcHUsIHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKTsKIAogCXJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCQlzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmdtYXAtJmd0O2NoaWxkcmVuX2xvY2spCiYjNDM7CQkJCWdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtJmd0O2FyY2guZ21hcCk7CiYjNDM7CQkJdmNwdS0mZ3Q7YXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS0mZ3Q7YXJjaC5nbWFwKTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQogCiYjNDM7CXZjcHUtJmd0O2FyY2gubWMgPSBub19mcmVlX3B0cihtYyk7CiYjNDM7CXNpZV9wYWdlID0gTlVMTDsKIAlrdm1fczM5MF91cGRhdGVfdG9wb2xvZ3lfY2hhbmdlX3JlcG9ydCh2Y3B1LSZndDtrdm0sIDEpOwogCXJldHVybiAwOwotCi1vdXRfdWNvbnRyb2xfdW5pbml0OgotCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewotCQlnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LSZndDthcmNoLmdtYXApOwotCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LSZndDthcmNoLmdtYXApOwotCX0KLW91dF9mcmVlX3NpZV9ibG9jazoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7Ci0JcmV0dXJuIHJjOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC01MDM5LDYgJiM0Mzs1MDQ1LDEwIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgIGt2bV9ydW4tJmd0O2t2bV9kaXJ0eV9yZWdzICZhbXA7IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJdmNwdV9sb2FkKHZjcHUpOwogCiAJaWYgKGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkgewpAQCAtNTQ0Nyw2ICYjNDM7NTQ1Nyw4IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLAogCQlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7CiAJCXN0cnVjdCBrdm1fczM5MF9pcnEgczM5MGlycSA9IHt9OwogCiYjNDM7CQlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3MzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKHMzOTBpbnRfdG9fczM5MGlycSgmYW1wO3MzOTBpbnQsICZhbXA7czM5MGlycSkpCkBAIC01NTIzLDYgJiM0Mzs1NTM1LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAlsb25nIHI7CiAJdTE2IHJjLCBycmM7CiAKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJdmNwdV9sb2FkKHZjcHUpOwogCiAJc3dpdGNoIChpb2N0bCkgewpAQCAtNTc5NCwyNCAmIzQzOzU4MTAsNDQgQEAgaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspCiYjNDM7ewomIzQzOwl1bmlvbiBwZ3N0ZSBwZ3N0ZTsKJiM0MzsKJiM0MzsJcGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKJiM0MzsJaWYgKHBnc3RlLmNtbWFfZCkgewomIzQzOwkJcGdzdGUuY21tYV9kID0gMDsKJiM0MzsJCWF0b21pYzY0X2RlYyh3YWxrLSZndDtwcml2KTsKJiM0MzsJfQomIzQzOwlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLAogCQkJCWNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywKIAkJCQllbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKQogewotCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDsKLQlpbnQgcmMgPSAwOwomIzQzOwljb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07CiYjNDM7CXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDsKJiM0MzsJaW50IHJjID0gLUVOT01FTTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCiAJaWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSkKIAkJcmV0dXJuOwogCiAJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7Ci0JaWYgKCFtYykgewotCQlyYyA9IC1FTk9NRU07CiYjNDM7CWlmICghbWMpCiAJCWdvdG8gb3V0OwotCX0KLQomIzQzO3JldHJ5OgogCXNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCAmYW1wO2t2bS0mZ3Q7bW11X2xvY2spIHsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gudXNlX2NtbWEgJmFtcDsmYW1wOyBvbGQpIHsKJiM0MzsJCQlfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC0mZ3Q7YmFzZV9nZm4sIG9sZC0mZ3Q7YmFzZV9nZm4gJiM0Mzsgb2xkLSZndDtucGFnZXMsCiYjNDM7CQkJCQkgICAga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2UsICZhbXA7b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsCiYjNDM7CQkJCQkgICAgJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcyk7CiYjNDM7CQl9CiYjNDM7CiAJCXN3aXRjaCAoY2hhbmdlKSB7CiAJCWNhc2UgS1ZNX01SX0RFTEVURToKIAkJCXJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgb2xkLSZndDtiYXNlX2dmbiwgb2xkLSZndDtucGFnZXMpOwpAQCAtNTgyNywxMyAmIzQzOzU4NjMsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCWNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKJiM0MzsJCQlyYyA9IDA7CiAJCQlXQVJOKDEsICYjMzQ7VW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxuJiMzNDssIGNoYW5nZSk7CiAJCX0KIAl9CiYjNDM7CWlmIChyYyA9PSAtRU5PTUVNKSB7CiYjNDM7CQlyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIG91dDoKIAlpZiAocmMpCiAJCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cbiYjMzQ7KTsKLQlrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBnYWRkcjsKJiM0MzsJdW5pb24gc2tleSBza2V5OwogCWludCByZWcxLCByZWcyOwogCWludCByYzsKIApAQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpOwogCWdhZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgZ2FkZHIpOwogCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKLQkJcmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LSZndDthcmNoLmdtYXAtJmd0O2FzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTsKJiM0MzsJCXJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgJmFtcDtza2V5KTsKIAlpZiAocmMgJmd0OyAwKQogCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTsKIAlpZiAocmMgJmx0OyAwKQogCQlyZXR1cm4gcmM7Ci0Ja3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7CiYjNDM7CWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSAmZ3Q7Jmd0OyAxKSAmYW1wOyAzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqLwogCQlrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTsKIAl9IGVsc2UgewotCQlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiYjNDM7CQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spCiYjNDM7CQkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O21tdV9sb2NrKQomIzQzOwkJCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiAJCWlmIChpICZsdDsgMCkKIAkJCXJldHVybiBpOwogCQkvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jCmluZGV4IDFiZWFjYzg0MWNhODUuLmIwMmUwMTU5ZDNjZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3B2LmMKQEAgLTI0NCw2ICYjNDM7MjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSkKIAlrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIgPSBOVUxMOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKQomIzQzO3sKJiM0MzsJaWYgKGZyZWVfc3Rvcl9iYXNlKQomIzQzOwkJZnJlZV9wYWdlcyh2Y3B1LSZndDthcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7CiYjNDM7CWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jcHUgPSAwOwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7cHZfaGFuZGxlX2NvbmZpZyA9IDA7CiYjNDM7CW1lbXNldCgmYW1wO3ZjcHUtJmd0O2FyY2gucHYsIDAsIHNpemVvZih2Y3B1LSZndDthcmNoLnB2KSk7CiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtzZGYgPSAwOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLgomIzQzOwkgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2YKJiM0MzsJICogdGhlIGp1c3QgZnJlZWQgc2lkYS4KJiM0MzsJICovCiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtnYmVhID0gMTsKJiM0MzsJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiB7CiAJaW50IGNjOwpAQCAtMjU4LDI0ICYjNDM7Mjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiAJV0FSTl9PTkNFKGNjLCAmIzM0O3Byb3R2aXJ0IGRlc3Ryb3kgY3B1IGZhaWxlZCByYyAleCBycmMgJXgmIzM0OywgKnJjLCAqcnJjKTsKIAogCS8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqLwotCWlmICghY2MpCi0JCWZyZWVfcGFnZXModmNwdS0mZ3Q7YXJjaC5wdi5zdG9yX2Jhc2UsCi0JCQkgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTsKLQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7cHZfaGFuZGxlX2NwdSA9IDA7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jb25maWcgPSAwOwotCW1lbXNldCgmYW1wO3ZjcHUtJmd0O2FyY2gucHYsIDAsIHNpemVvZih2Y3B1LSZndDthcmNoLnB2KSk7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3NkZiA9IDA7Ci0JLyoKLQkgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLgotCSAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZgotCSAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuCi0JICovCi0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2diZWEgPSAxOwotCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOwomIzQzOwlrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCAhY2MpOwogCi0JcmV0dXJuIGNjID8gRUlPIDogMDsKJiM0MzsJcmV0dXJuIGNjID8gLUVJTyA6IDA7CiB9CiAKIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCkBAIC0zMTksOSAmIzQzOzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpCiAJCSAgICAgdXZjYi5oZWFkZXIucnJjKTsKIAogCWlmIChjYykgewotCQl1MTYgZHVtbXk7Ci0KLQkJa3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgJmFtcDtkdW1teSwgJmFtcDtkdW1teSk7CiYjNDM7CQlrdm1fczM5MF9wdl9kaXNwb3NlX2NwdSh2Y3B1LCB0cnVlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC04MDksNyAmIzQzOzgxMCw3IEBAIHN0YXRpYyBpbnQgdW5wYWNrX29uZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdTY0IHR3ZWFrLAogCQkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOKQomIzQzOwlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FQUdBSU4gJmFtcDsmYW1wOyByZXQgIT0gLUVJTlRSKQogCQlLVk1fVVZfRVZFTlQoa3ZtLCAzLCAmIzM0O1BST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleCYjMzQ7LAogCQkJICAgICB1dmNiLmdhZGRyLCAqcmMsICpycmMpOwogCXJldHVybiByZXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUzM5MCBLVk0gUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgdGhlIGBhcmNoL3MzOTAva3ZtL2AgZGlyZWN0b3J5LiBUaGlzIGlzIEtWTSBjb2RlLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSBzZWUgY2hhbmdlcyBpbiBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBrdm1fczM5MF9rZXlvcGAsIGFuZCBhIGJ1bmNoIG1vcmUsIGFsbCBkZWFsaW5nIHdpdGggVk0gc2V0dXAsIGNvbnRyb2wsIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gU2luY2UgdGhpcyBpcyBLVk0gb24gczM5MCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIEtWTSBpb2N0bHMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IENhbiB0aGlzIGJlIGZ1enplZD8gVGhlIHByb21wdCBtZW50aW9ucyBzY2VuYXJpb3Mgd2hlcmUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBpbiB3aGljaCBjYXNlIHdlIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQnV0IGhhbmcgb27igKYgczM5MCBLVk0gKmRvZXMqIHJlcXVpcmUgYW4gYWN0dWFsIHMzOTB4IGhvc3QgZm9yIHRoZSBLVk0gcGFydCwgZG9lc24mIzM5O3QgaXQ/IFFFTVUgY2FuIGVtdWxhdGUgczM5MHgsIGFuZCBTeXprYWxsZXIgc3VwcG9ydHMgczM5MHguIEJ1dCwgZG9lcyBTeXprYWxsZXIgcnVuIG9uIHMzOTB4PyBZZXMhIFllcywgaXQgZG9lcy4gVGhlcmVmb3JlLCB0aGVzZSBLVk0gaW9jdGxzIGFyZSByZWFjaGFibGUuIFNvLCB1bmxlc3MgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaXMgeDg2XzY0LCB0aGVuIGl0IHdvdWxkIGJlIHJlYWNoYWJsZS4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgYXNrcyBhYm91dCBLVk0gZm9yIHMzOTB4LiBJdCBpcyByZWFjaGFibGUhIEluIGEgU3l6a2FsbGVyIGVudmlyb25tZW50IGl0IHdvdWxkIGJlLCBzaW5jZSBTeXprYWxsZXIgcnVucyBvbiBzMzkweC4gU28sIGdpdmVuIHRoYXQgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZnV6emluZyBzMzkweCwgSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4gVGhpcyBpcyBjb3JlIEtWTSBsb2dpYyBmb3IgczM5MCwgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldC4KCkxldCYjMzk7cyBxdWlja2x5IHNjYW4gdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgdGhhdCB0aGUgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBzaWduYXR1cmUgaGFzIGNoYW5nZWQuIFdlJiMzOTt2ZSBnb3QgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBub3cgaGFuZGxpbmcgYGlzX3NpZ3BlbmRpbmdfcGZuYC4gVGhlcmUgYXJlIGFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAgY2hlY2tzIGluIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIGNhbGxzLCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHVzaW5nIGEgZGlmZmVyZW50IGxvY2sgbm93LiBJJiMzOTttIHNlZWluZyBjaGVja3MgZm9yIHRoZSBgdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZGAgZmxhZyBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAuIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYWxzbyB1c2luZyBuZXcgbG9ja3MgYW5kIGZyZWUgb3BlcmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgZml4ZXMgZm9yIG1lbW9yeSBsZWFrcyBpbiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLgoKSSYjMzk7ZCBzYXkgbXkgZm9jdXMgc3ltYm9scyBmcm9tIHRoZSBkaWZmIGFyZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYW5kIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBLY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQuIGBDT05GSUdfS1ZNYCBpcyBkZWZpbml0ZWx5IG5lZWRlZC4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGJ1dCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgd2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gYW5kIFMzOTAgVWNvbnRyb2wgaW4gdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MYCBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSByZWxldmFudCBoZXJlLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgKmFjdHVhbGx5KiBiZWluZyB1dGlsaXplZCBpbiB0aGlzIHBhdGNoJiMzOTtzIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGEgcmVmZXJlbmNlIHRvIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkuIE5vdyBJIG5lZWQgdG8gbG9vayB1cCB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiB3aGF0IGBrdm1faXNfdWNvbnRyb2xgIGlzIGRvaW5nIGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9pc191Y29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9nbWFwLmM9ODk9c3RhdGljIHZvaWQgZ21hcF9hZGRfY2hpbGQoc3RydWN0IGdtYXAgKnBhcmVudCwgc3RydWN0IGdtYXAgKmNoaWxkKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExMzpcdGlmIChrdm1faXNfdWNvbnRyb2wocGFyZW50LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTQtXHRcdGNsZWFyX2JpdChHTUFQX0ZMQUdfT1dOU19QQUdFVEFCTEVTLCBcdTAwMjZjaGlsZC1cdTAwM2VmbGFncyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MTM9aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTYtXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjYxNzpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTQ1PXN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTUxLVx0XHRyZXR1cm4gMDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6NTI6XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtNTMtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9NjQ9c3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTcxLVx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjcyOlx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSwgdmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy03My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz05MD1zdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtOTQtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjk1Olx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTk2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODE4PXN0YXRpYyBpbnQgZmxpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzMS1cdGNhc2UgS1ZNX0RFVl9GTElDX0FQRl9FTkFCTEU6XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4MzI6XHRcdGlmIChrdm1faXNfdWNvbnRyb2woZGV2LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODM2LVx0Y2FzZSBLVk1fREVWX0ZMSUNfQVBGX0RJU0FCTEVfV0FJVDpcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgzNzpcdFx0aWYgKGt2bV9pc191Y29udHJvbChkZXYtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxMjE9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTMwLVx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfUzM5MF9BREFQVEVSOlxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTMxOlx0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxMzItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTYwMj1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NDUtXHRcdHIgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjY0NjpcdFx0aWYgKGhwYWdlIFx1MDAyNlx1MDAyNiAhKGt2bSBcdTAwMjZcdTAwMjYga3ZtX2lzX3Vjb250cm9sKGt2bSkpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY0Ny1cdFx0XHRyID0gMTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjUwLVx0XHRyID0gMDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2NTE6XHRcdGlmIChocGFnZV8yZyBcdTAwMjZcdTAwMjYgIShrdm0gXHUwMDI2XHUwMDI2IGt2bV9pc191Y29udHJvbChrdm0pKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NTItXHRcdFx0ciA9IDE7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc0Nj1pbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03NTMtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NzU0Olx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc1NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc4OD1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtODkyLVx0XHRcdHIgPSAtRUJVU1k7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6ODkzOlx0XHRlbHNlIGlmICghaHBhZ2UgfHwga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEgfHwga3ZtX2lzX3Vjb250cm9sKGt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtODk0LVx0XHRcdHIgPSAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05MTMtXHRcdFx0ciA9IC1FQlVTWTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo5MTQ6XHRcdH0gZWxzZSBpZiAoIWhwYWdlXzJnIHx8IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIHx8IGt2bV9pc191Y29udHJvbChrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtOTE1LVx0XHRcdHIgPSAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz05OTM9c3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDQwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEwNDE6XHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDQyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI2PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzOC1cdFx0ciA9IC1FSU5WQUw7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjkzOTpcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NDAtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM0MDU9dm9pZCBrdm1fYXJjaF92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDEyLVx0a3ZtX2NsZWFyX2FzeW5jX3BmX2NvbXBsZXRpb25fcXVldWUodmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQxMzpcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDE0LVx0XHRzY2FfZGVsX3ZjcHUodmNwdSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQxNzpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxOC1cdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwNT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTItXHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxMzpcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTQtXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzA5PXN0YXRpYyBpbnQga3ZtX3MzOTBfdmNwdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3MzMtXHRcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNiIHw9IEVDQl9URTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNzM0Olx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3MzUtXHRcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNiIHw9IEVDQl9TUEVDSTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzc5Nj1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5Ny17XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzc5ODpcdGlmICgha3ZtX2lzX3Vjb250cm9sKGt2bSkgXHUwMDI2XHUwMDI2ICFzY2FfY2FuX2FkZF92Y3B1KGt2bSwgaWQpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3OTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zODA1PWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM4NTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg1ODpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg1OS1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODY5LVx0aWYgKHJjKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg3MDpcdFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODcxLVx0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQzMjM9c3RhdGljIGludCB2Y3B1X3Vjb250cm9sX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90ICpnYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDMyNi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MzI3Olx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MzI4LVx0XHRyYyA9IGdtYXBfdWNhc190cmFuc2xhdGUodmNwdS1cdTAwM2VhcmNoLm1jLCB2Y3B1LVx1MDAzZWFyY2guZ21hcCwgZ2FkZHIpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NTU3PXN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3MC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTcxOlx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3Mi1cdFx0cmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ0MD1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ1OS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NDYwOlx0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDYxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NTI5PWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxMy1cdFx0ciA9IC1FSU5WQUw7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTYxNDpcdFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MTUtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MzEtXHRcdHIgPSAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MzI6XHRcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMzLVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzQ4PXZtX2ZhdWx0X3Qga3ZtX2FyY2hfdmNwdV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzUxLVx0aWYgKCh2bWYtXHUwMDNlcGdvZmYgPT0gS1ZNX1MzOTBfU0lFX1BBR0VfT0ZGU0VUKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NTI6XHRcdCBcdTAwMjZcdTAwMjYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTc1My1cdFx0dm1mLVx1MDAzZXBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3Njc9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NzEte1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NzI6XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkgXHUwMDI2XHUwMDI2IG5ldyBcdTAwMjZcdTAwMjYgbmV3LVx1MDAzZWlkIFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTc3My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU5MDE9bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTA2LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5MDc6XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTA4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9MTExPXN0YXRpYyBpbmxpbmUgaW50IGlzX3ZjcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTExNS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDoxMTY6c3RhdGljIGlubGluZSBpbnQga3ZtX2lzX3Vjb250cm9sKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0xMTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTExCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEtWTV9TMzkwX1VDT05UUk9MIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSB2YWxpZCBjb25maWcgb3B0aW9uLiBOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgaXQgcmVsaWVzIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIGFueSBwb3RlbnRpYWwgcHJlcmVxdWlzaXRlcyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGBLVk1fUzM5MF9VQ09OVFJPTGAgdG8gYmUgZW5hYmxlZC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpbiBhIEtWTSBlbnZpcm9ubWVudCBvbiBzMzkwIGhhcmR3YXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzEyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtWTSBLY29uZmlnIGZvciBzMzkwIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhpcyBhcmVhIGJlY2F1c2UuLi4gd2VsbCwgSSBzdXNwZWN0IHRoZXJlJiMzOTtzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBvciBwb3NzaWJseSBwcm9ibGVtYXRpYyB0aGVyZS4gTXkgaW5pdGlhbCBndWVzcywgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYSBmZWF0dXJlIGZsYWcgcmVsYXRlZCB0byBLVk0gc3VwcG9ydCBvbiBzMzkwLiBQZXJoYXBzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIG5ldyBoYXJkd2FyZSBmZWF0dXJlLCBvciBhbiBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZyBvcHRpb25zLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gcHJvY2Vzc29yIGZlYXR1cmVzIG9yIHNwZWNpZmljIGh5cGVydmlzb3IgaW1wbGVtZW50YXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgS2NvbmZpZyBlbnRyeSAqZW5hYmxlcyogb3IgKmRpc2FibGVzKiBpbiBvcmRlciB0byBzZWUgaWYgaXQmIzM5O3MgaW1wYWN0aW5nIGEgY3VycmVudCBwcm9qZWN0LCBvciBmb3Igd2hhdCBpdCBtYXkgcmVsYXRlIGZvciBmdXR1cmUgZGVzaWduIGNvbmNlcm5zLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmNoaXRlY3R1cmFsIHNwZWNpZmljcyBvZiBzMzkwIGFuZCBob3cgS1ZNIGludGVncmF0ZXMgb24gdGhhdCBhcmNoaXRlY3R1cmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIGFsc28gd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGUgY3VycmVudCBjb25maWcgb3B0aW9uIHRvIGZ1dHVyZSBkZXNpZ25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICAzMTpcdFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gIDMyOlx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAzMzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgU3VwcG9ydCBob3N0aW5nIHBhcmF2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyB0aGUgU0lFXG4gIDM2Olx0XHQgIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdHkgb24gdGhlIG1haW5mcmFtZS4gVGhpcyBzaG91bGQgd29ya1xuICAzNzpcdFx0ICBvbiBhbnkgNjRiaXQgbWFjaGluZS5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxuICA0MDpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDQzOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBLVk1cbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgQWxsb3cgQ0FQX1NZU19BRE1JTiB1c2VycyB0byBjcmVhdGUgS1ZNIHZpcnR1YWwgbWFjaGluZXMgdGhhdCBhcmVcbiAgNTI6XHRcdCAgY29udHJvbGxlZCBieSB1c2Vyc3BhY2UuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDU1Olx0XG4gIDU2Olx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk4OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgIGFyZSB0aGUga2V5IGNvbmZpZ3MgaW52b2x2ZWQgaGVyZS4gV2FpdCBhIHNlY29uZCwgKmBLVk1gIGl0c2VsZiBpcyBhIHRyaXN0YXRlKi4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyBpdOKAmXMgaW5oZXJlbnRseSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIG90aGVyIGNyaXRlcmlhLCBzbyBhcyBsb25nIGFzIHRob3NlIGFyZSBtZXQgYEtWTWAgaXMgbm90IHRoZSBwcm9ibGVtIGFuZCBjYW4gYmUgY29uc2lkZXJlZCBhY3RpdmUuCgpOb3csIGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY3J1Y2lhbCBzZXR0aW5nIHNvbWV3aGVyZSBlbHNlLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgY29kZSB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBtYWtlIHN1cmUgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBhZGRyZXNzZWQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBhcmNoL3MzOTAva3ZtL3B2LmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgc3BvdCB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgY29uZmlndXJhdGlvbiBzZXR1cC4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjb25maWdzIGludGVyYWN0IGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW1wbGljaXQgZGVwZW5kZW5jeSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjQ0Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2NwdXNfdG9fcHYoc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ2MC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNDYxOlx0XHRyID0ga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSh2Y3B1LCByYywgcnJjKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNDYyLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VtdXRleCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM3MDk9c3RhdGljIGludCBrdm1fczM5MF92Y3B1X3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc4Ni1cdGlmIChrdm1fczM5MF9wdl9pc19wcm90ZWN0ZWQodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzc4NzpcdFx0cmMgPSBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHZjcHUsIFx1MDAyNnV2cmMsIFx1MDAyNnV2cnJjKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNzg4LVx0XHRpZiAocmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTMwNT1pbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6MzA2OmludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTMwNy1pbnQga3ZtX3MzOTBfcHZfc2V0X2FzaWRlKHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpO1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz0yNjU9aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTI4My1cbmFyY2gvczM5MC9rdm0vcHYuYzoyODQ6aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0vcHYuYy0yODUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHB2LmNgKioKCk9rYXksIHNvIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IGBwdi5jYCBhbmQgd2hldGhlciBpdCYjMzk7cyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBrZXJuZWwgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhlIGBhcmNoL3MzOTAva3ZtL01ha2VmaWxlYCBmaWxlIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciBLVk0gb24gczM5MCBpcyBkZWZpbmVkLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBvciBydWxlcyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBzb3VyY2UgZmlsZS4gVGltZSB0byBvcGVuIHRoYXQgdXAgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B2XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSAmIzQzOz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgJiM0Mzs9IGRhdC5vIGdtYXAubyBmYXVsdGluLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTS1TMzkwIENvbXBpbGF0aW9uIGFuZCBLZXkgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBLVk0tUzM5MCBjb2RlIGFuZCBob3cgaXQmIzM5O3MgY29tcGlsZWQuIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgcHYub2AsIGBkYXQuY2AsIGBmYXVsdGluLmNgLCBgaW50ZXJydXB0LmNgLCBga3ZtLXMzOTAuY2AsIGFuZCBgcHJpdi5jYCBhcmUgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYEtWTWAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCk15IGF0dGVudGlvbiB0aGVuIG1vdmVzIHRvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG9uZXMgYXJlIGtleSBoZXJlLCBzbyBJJiMzOTttIG5vdGluZyB0aGVzZSBkb3duIGFzIHBvdGVudGlhbCBhcmVhcyBvZiBpbnZlc3RpZ2F0aW9uOiBgS1ZNYCBhbmQgYEtWTV9TMzkwX1VDT05UUk9MYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUga2V5IHN5bWJvbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAsIGBoYW5kbGVfcnJiZWAsIGFuZCBgaGFuZGxlX2Vzc2FgLgoKSG9sZCBvbiwgSSBzZWUgYSBjb25uZWN0aW9uIGhlcmUhIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9ycmJlYCBhbmQgYGt2bV9zMzkwX2tleW9wYC4gYGhhbmRsZV9ycmJlYCBpcyBkZWZpbml0ZWx5IGFuIGluc3RydWN0aW9uIGhhbmRsZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBga3ZtX3MzOTBfa2V5b3BgLiBJcyBpdCBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfZ3Vlc3Rfc2tleV9vcGA/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9rZXlvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NTA9c3RhdGljIHZvaWQgX19rdm1fczM5MF9leGl0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NjI6c3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjY9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDYxLVx0XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDYyOlx0XHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNjMtXHRcdHVuaW9uIHNrZXkgc2tleTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3NC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc1Olx0XHRyID0ga3ZtX3MzOTBfa2V5b3AobWMsIGt2bSwga29wLm9wZXJhdGlvbiwga29wLmd1ZXN0X2FkZHIsIHNrZXkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzYtXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MDgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX1MzOTBfS0VZT1AgTXlzdGVyeSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBrdm1fczM5MF9rZXlvcGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCwgc3BlY2lmaWNhbGx5IHdoZW4gaGFuZGxpbmcgYEtWTV9TMzkwX0tFWU9QYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBgS1ZNX1MzOTBfS0VZT1BgIGRvZXNuJiMzOTt0IHNvdW5kIGZhbWlsaWFyLCBhbmQgdGhhdCYjMzk7cyBub3QgZ29vZC4gSXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQgaW9jdGwuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBBaCwgcmlnaHQsIGBrdm1fczM5MF9rZXlvcGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGNsdWUuIEhtbSwgY291bGQgdGhpcyBiZSBhIHR5cG8/IFBlcmhhcHMgdGhlIGludGVuZGVkIGlvY3RsIGlzIGBLVk1fUzM5MF9aUENJX09QYD8gTm8sIHdhaXQsIHRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gYEtWTV9TMzkwX0tFWU9QYCBzdGlsbCBkb2VzbiYjMzk7dCBleGlzdCwgSSBuZWVkIHRvIGNoZWNrIGBrdm1fYXJjaF92bV9pb2N0bGAgYWdhaW4sIGFyb3VuZCBsaW5lIDMwNzUgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzA1MDpcdFx0fVxuMzA1MTpcdFx0Y2FzZSBLVk1fUzM5MF9NRU1fT1A6IHtcbjMwNTI6XHRcdFx0c3RydWN0IGt2bV9zMzkwX21lbV9vcCBtZW1fb3A7XG4zMDUzOlx0XG4zMDU0Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtZW1fb3AsIGFyZ3AsIHNpemVvZihtZW1fb3ApKSA9PSAwKVxuMzA1NTpcdFx0XHRcdHIgPSBrdm1fczM5MF92bV9tZW1fb3Aoa3ZtLCBcdTAwMjZtZW1fb3ApO1xuMzA1NjpcdFx0XHRlbHNlXG4zMDU3Olx0XHRcdFx0ciA9IC1FRkFVTFQ7XG4zMDU4Olx0XHRcdGJyZWFrO1xuMzA1OTpcdFx0fVxuMzA2MDpcdFx0Y2FzZSBLVk1fUzM5MF9LRVlPUDoge1xuMzA2MTpcdFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbjMwNjI6XHRcdFx0c3RydWN0IGt2bV9zMzkwX2tleW9wIGtvcDtcbjMwNjM6XHRcdFx0dW5pb24gc2tleSBza2V5O1xuMzA2NDpcdFxuMzA2NTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2a29wLCBhcmdwLCBzaXplb2Yoa29wKSkpIHtcbjMwNjY6XHRcdFx0XHRyID0gLUVGQVVMVDtcbjMwNjc6XHRcdFx0XHRicmVhaztcbjMwNjg6XHRcdFx0fVxuMzA2OTpcdFx0XHRza2V5LnNrZXkgPSBrb3Aua2V5O1xuMzA3MDpcdFxuMzA3MTpcdFx0XHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbjMwNzI6XHRcdFx0aWYgKCFtYylcbjMwNzM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMwNzQ6XHRcbjMwNzU6XHRcdFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcbjMwNzY6XHRcdFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuMzA3NzpcdFx0XHRpZiAociBcdTAwM2MgMClcbjMwNzg6XHRcdFx0XHRicmVhaztcbjMwNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2MTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNX1MzOTBfS0VZT1AgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBLVk1fUzM5MF9LRVlPUGAgaXMgaW5kZWVkIGFuIGlvY3RsLCBhcyBJIHN1c3BlY3RlZC4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3Q6CgoqICAgYGt2bV9hcmNoX3ZtX2lvY3RsYAoqICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgCiogICBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gCiogICBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAKKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAKKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YAoqICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YAoqICAgYGhhbmRsZV9ycmJlYAoqICAgYGhhbmRsZV9lc3NhYAoKV2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiB3YXJucyBhZ2FpbnN0IGZvY3VzaW5nIG9uIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIGJpYXNpbmcgdGhlIHRlc3QgZGlzdHJpYnV0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBhdm9pZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBLVk0sIGJ1dCBpdCYjMzk7cyAqdmVyeSogZnJlcXVlbnRseSBjYWxsZWQuCgpOb3csIHdoYXQgYWJvdXQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgPyBIbW0sIHRoZXkmIzM5O3JlIG1vcmUgZ2VuZXJpYywgYnV0IHRoZXkmIzM5O3JlIHRoZSBlbnRyeSBwb2ludHMgZm9yIGlvY3RscyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhleSYjMzk7cmUgcHJvYmFibHkgd29ydGggbG9va2luZyBhdC4KCkFoLCBhbmQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLiBOb3cgd2hlcmUgaXMgdGhhdCBjYWxsZWQgZnJvbT8gSSB0aG91Z2h0IGl0IG1pZ2h0IGJlIHNvbWV0aGluZyBsaWtlIGBrdm1fdm1faW9jdGxfc2V0X2V4dGVuc2lvbmAsIGJ1dCBJIGRvbiYjMzk7dCB0aGluayB0aGF0JiMzOTtzIHJpZ2h0Li4uIElzIGl0IGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCB2aWEgYEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVGA/IE5vLCB3YWl0Li4uIGl0JiMzOTtzIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCB0aGF0IGNhbGxzIGl0LiBBbmQgd2hhdCYjMzk7cyBjYWxsaW5nICp0aGF0Kj8gSXMgaXQgYGt2bV9zMzkwX3NldF9tZW1fY29udHJvbGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGNhbGwgY2hhaW4gZm9yIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyNzE9c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyOTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI5ODpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyOTktXHRcdFx0XHQgICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIwNDQ9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNjEtXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTjpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDYyOlx0XHRyZXQgPSBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKGt2bSwgYXR0cik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA2My1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIEtleSBLVk0vczM5MCBFbnRyeSBQb2ludHMqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZW50cnkgcG9pbnRzIGludG8gdGhlIEtWTS9zMzkwIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMgYXMgdGhlIHByZWZlcnJlZCBjYW5kaWRhdGVzLCBzaW5jZSB0aG9zZSByZXByZXNlbnQgd2VsbC1kZWZpbmVkIEFQSSBib3VuZGFyaWVzLgoKU28sICpga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAqIGlzIHRyaWdnZXJlZCBieSAqYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCosIHdoaWNoIGl0c2VsZiBpcyBhIGNvbnNlcXVlbmNlIG9mICpgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAqIGZyb20gdGhlIFZNLiBUaGF0IGRlZmluaXRlbHkgc2VlbXMgbGlrZSBhIHN0cm9uZyBwb2ludCBvZiBmb2N1cy4gSXQmIzM5O3MgYSBuaWNlLCBjbGVhbiBjYWxsIGNoYWluIHRvIHJlcHJlc2VudC4gSSYjMzk7dmUgZ290IHRoYXQgb25lLgoKTm93LCB3aGF0IGFib3V0IHRoZSBDTU1BIGJpdHMgZnVuY3Rpb25zPyAqYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgKiBhbmQgKmBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCogYXJlIGNhbGxlZCB2aWEgKmBrdm1fYXJjaF92bV9pb2N0bGAqLCBpbiByZXNwb25zZSB0byB0aGUgKmBLVk1fUzM5MF9HRVRfQ01NQV9CSVRTYCogYW5kICpgS1ZNX1MzOTBfU0VUX0NNTUFfQklUU2AqIGlvY3RscywgcmVzcGVjdGl2ZWx5LiBJIHRoaW5rIEkmIzM5O2xsIGFkZCAqYGt2bV9hcmNoX3ZtX2lvY3RsYCogYXMgYSBmb2N1cyBzeW1ib2wsIHNpbmNlIHRob3NlIGFyZSBob3cgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlbS4KCkkgbGlrZSAqYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgKiBhbmQgKmBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAqLiBUaGVzZSBzZWVtIGxpa2UgZ29vZCBlbnRyeSBwb2ludHMgcmVsYXRlZCB0byBDUFUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHNvIEkmIzM5O2xsIGFkZCB0aG9zZS4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBgaGFuZGxlX3JyYmVgIGFuZCBgaGFuZGxlX2Vzc2FgLiBUaGVzZSBhcmUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgZm9yIFJSQkUgYW5kIEVTU0EgaW5zdHJ1Y3Rpb25zLCByZXNwZWN0aXZlbHkuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhlbSwgc2luY2UgdGhleSBhcmUgc3RhdGljLiBCdXQsIGdpdmVuIHRoZWlyIHJvbGUgaW4gaW5zdHJ1Y3Rpb24gaGFuZGxpbmcsIEkmIzM5O20gZ29pbmcgdG8gY2hlY2suIAoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGluc3RydWN0aW9uIGhhbmRsZXJzLiBUaGV5ICphcmUqIGNhbGxlZCBpbnRlcm5hbGx5IHdoZW4gdGhlIGd1ZXN0IGV4ZWN1dGVzIHNwZWNpZmljIGluc3RydWN0aW9ucy4gU2hvdWxkIHRoZXkgYmUgaW5jbHVkZWQ/CgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGludGVyZmFjZXMgd2hpY2ggYXJlIG1vcmUgbGlrZWx5IHRvIGJlIHN0YWJsZSBBUEkuCgpJIHNlZSB0aGF0IGBrdm1fczM5MF9rZXlvcGAgaXMgc3RhdGljLCBidXQgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC4gSSB3YW50IHRvIGF2b2lkIGFkZGluZyBzdGF0aWMgb3IgaW5saW5lZCBmdW5jdGlvbnMuIEdpdmVuIHRoZSBndWlkYW5jZSB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLCBJIGFtIGdvaW5nIHRvIHRyeSB0byBpbmNsdWRlIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gdGhlIGxpc3QsIGluc3RlYWQuCgpSZXZpZXdpbmcgd2hhdCBJIGtub3cgc28gZmFyLCB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZToKCi0gICBga3ZtX2FyY2hfdm1faW9jdGxgCi0gICBga3ZtX2FyY2hfdmNwdV9pb2N0bGAKLSAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAKLSAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YAotICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YAoKSSB3aWxsIGFkZCB0aGVzZSB0byBteSBsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfcnJiZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHJpdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHJpdi5jPTI1Nz1zdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yODgtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyODk6c3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yOTAte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OT1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzktXHRjYXNlIDB4MmE6XG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5ODA6XHRcdHJldHVybiBoYW5kbGVfcnJiZSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MS1cdGNhc2UgMHgyYjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0MzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTS9zMzkwIEhhbmRsZXIgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YCwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhleSYjMzk7cmUgY2FsbGVkIGZyb20gdGhvc2Ugc3dpdGNoIHN0YXRlbWVudHMgd2l0aGluIHRoZSBLVk0vczM5MCBjb2RlLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHByb2JhYmx5IG5vdCBpbmxpbmVkIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGV5JiMzOTtyZSBwcmV0dHkgaGVmdHkgYW5kIGdldCBjYWxsZWQgZnJvbSBhIGxhcmdlIHN3aXRjaCwgd2hpY2ggc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGRlc2lnbi4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgYWRkIGBrdm1fczM5MF9oYW5kbGVfYjJgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX2I5YCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgY292ZXJlZCBldmVyeXRoaW5nLiBXYWl0LCBoYW5nIG9uLi4uIGBrdm1fczM5MF9oYW5kbGVfYjJgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBoYW5kbGVfZXNzYWAgdG8gc2VlIHdoeSBpdCYjMzk7cyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LCB3aGF0IG90aGVyIGltcGxpY2F0aW9ucyB0aGlzIGRlc2lnbiBjaG9pY2UgaGFzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3QgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wcml2LmM9MTE5MT1zdGF0aWMgdm9pZCBfZXNzYV9jbGVhcl9jYnJsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqY2JybCwgaW50IGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjE2LVxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTIxNzpzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTgte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyODQ9aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5My1cdGNhc2UgMHhhYjpcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTQ6XHRcdHJldHVybiBoYW5kbGVfZXNzYSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTUtXHRjYXNlIDB4YWY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDg3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYGt2bV9zMzkwX2hhbmRsZV9iOWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIEkgc2VlIHRoYXQgYGt2bV9zMzkwX2hhbmRsZV9iOWAgKmlzbiYjMzk7dCogZGVjbGFyZWQgYXMgc3RhdGljLiBHb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciBjb21wb25lbnRzIGluIHRoZSBTMzkwIEtWTSBpbXBsZW1lbnRhdGlvbi4gSSBzaG91bGQgY2hlY2sgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgIGFuZCBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AgbmV4dCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMuIEkga25vdyB0aGV5JiMzOTtyZSBwcm9iYWJseSBkZWZpbmVkIHdpdGhpbiBga3ZtLXMzOTAuY2AsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhleSYjMzk7cmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBpbnRlbmRlZCBzY29wZSBhbmQgdXNhZ2UuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9nZXRfY21tYV9iaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMTE9c3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyMjItICoga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIzOiAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyNC0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjI1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI2OC0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI2OTogKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oKSBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzAtICovXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyMjE9c3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyOTAtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjI5MTpzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyOTItXHRcdFx0XHQgIHN0cnVjdCBrdm1fczM5MF9jbW1hX2xvZyAqYXJncylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwMDUtXHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jaylcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDA2Olx0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAwNy1cdFx0aWYgKCFyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTU0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IHRoaW5raW5nIGdvZXMgbGlrZSB0aGlzOgoKKipBZGRyZXNzaW5nIFN0YXRpYyBGdW5jdGlvbiBDYWxscyBpbiBLVk0vczM5MCBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3Mgc3RhdGljLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCBmb3Igd2hhdCBJJiMzOTttIHRyeWluZyB0byBhY2hpZXZlLiBJIHRoaW5rIEkmIzM5O2xsIHVzZSBga3ZtX2FyY2hfdm1faW9jdGxgIGluc3RlYWQ7IHRoYXQgc2VlbXMgbGlrZSBhIG1vcmUgYXBwcm9wcmlhdGUgZW50cnkgcG9pbnQuIAoKTm93LCBtb3Zpbmcgb24sIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGluIGBpbnRlcnJ1cHQuY2A6IGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBzY2FfaW5qZWN0X2V4dF9jYWxsYCwgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgLiBUaGV5JiMzOTtyZSAqYWxzbyogc3RhdGljLCB3aGljaCBtZWFucyBJIGNhbiYjMzk7dCBqdXN0IGNhbGwgdGhlbSBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmJlaW5nKiBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjYV9pbmplY3RfZXh0X2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9NDU9c3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtNjMtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjY0OnN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTY1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1MDc9c3RhdGljIGludCBfX2luamVjdF9leHRjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTUyMy1cdGlmIChrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSBcdTAwMjZcdTAwMjYgIWt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKHZjcHUpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTI0Olx0XHRyZXR1cm4gc2NhX2luamVjdF9leHRfY2FsbCh2Y3B1LCBzcmNfaWQpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgwNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgX19pbmplY3RfZXh0Y2FsbGAqKgoKT2theSwgc28gYF9faW5qZWN0X2V4dGNhbGxgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgYW5kIHByb2JhYmx5IG5vdCBleHBvcnRlZCBmb3IgZ2VuZXJhbCB1c2UuIE15IG5leHQgc3RlcCBpcyBvYnZpb3VzOiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGNvZGViYXNlIHdoZXJlIGBfX2luamVjdF9leHRjYWxsYCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0IGFib3V0IGl0cyBwdXJwb3NlLCB0aGUgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24sIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pbmplY3RfZXh0Y2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNDkwPXN0YXRpYyBpbnQgX19pbmplY3RfcGZhdWx0X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTA2LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTA3OnN0YXRpYyBpbnQgX19pbmplY3RfZXh0Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTUwOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTA1PXN0YXRpYyBpbnQgZG9faW5qZWN0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTI4LVx0Y2FzZSBLVk1fUzM5MF9JTlRfRVhURVJOQUxfQ0FMTDpcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjEyOTpcdFx0cmMgPSBfX2luamVjdF9leHRjYWxsKHZjcHUsIGlycSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMzAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMyNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZG9faW5qZWN0X3ZjcHVgIEZ1bmN0aW9uKioKClJpZ2h0LCBgZG9faW5qZWN0X3ZjcHVgLiBUaGF0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIHRyaWNreSB0byB0cmFjZSwgZXNwZWNpYWxseSBpbiBhIGxhcmdlIGNvZGViYXNlLCBiZWNhdXNlIHlvdSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGVyZSBpdCAqaXMqIHVzZWQuIFNvLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBmb3IgYGRvX2luamVjdF92Y3B1YC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciBmaWd1cmluZyBvdXQgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgYW55IGlzc3VlcyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBvbmUgcG9wcyB1cC4gQSBxdWljayBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9faW5qZWN0X3ZjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA5NT12b2lkIGt2bV9zMzkwX2NsZWFyX3N0b3BfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMDQtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxMDU6c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEwNi17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTUwPWludCBrdm1fczM5MF9pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxNTUtXHRzcGluX2xvY2soXHUwMDI2bGktXHUwMDNlbG9jayk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNTY6XHRyYyA9IGRvX2luamVjdF92Y3B1KHZjcHUsIGlycSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxNTctXHRzcGluX3VubG9jayhcdTAwMjZsaS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxNjk9aW50IGt2bV9zMzkwX3NldF9pcnFfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqaXJxc3RhdGUsIGludCBsZW4pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTk1LVx0Zm9yIChuID0gMDsgbiBcdTAwM2MgbGVuIC8gc2l6ZW9mKCpidWYpOyBuJiM0MzsmIzQzOykge1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTk2Olx0XHRyID0gZG9faW5qZWN0X3ZjcHUodmNwdSwgXHUwMDI2YnVmW25dKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE5Ny1cdFx0aWYgKHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRm9jdXMgZm9yIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgbmF2aWdhdGUgdGhpcyBjb2RlLiBJIG5vdGljZSBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIGFuZCBga3ZtX3MzOTBfc2V0X2lycV9zdGF0ZWAgYXJlbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIHRoZW0gaW50ZXJlc3RpbmcgZW50cnkgcG9pbnRzLiBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIGluIHBhcnRpY3VsYXIgbG9va3MgbGlrZSBhIHByb21pc2luZyBmb2N1cyBzeW1ib2wuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgb3V0IGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYDsgdGhvc2UgYXJlIHVzdWFsbHkgZ29vZCBzcG90cyB0byBzdGFydCBkaWdnaW5nLgoKUmlnaHQsIGxldCYjMzk7cyBhc3NlbWJsZSBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scywgYSBzZXQgb2Yga2V5IGZ1bmN0aW9ucyB0aGF0IGNhbiBwcm92aWRlIGFuIG92ZXJ2aWV3IG9mIHRoZSBzdWJzeXN0ZW06CgotICAgYGt2bV9hcmNoX3ZtX2lvY3RsYAotICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgCi0gICBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gCi0gICBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAKLSAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAKLSAgIGBrdm1fczM5MF9oYW5kbGVfYjJgCi0gICBga3ZtX3MzOTBfaGFuZGxlX2I5YAotICAgYGt2bV9zMzkwX2luamVjdF92Y3B1YAoKQWgsIGhlcmUmIzM5O3MgYSB3cmlua2xlLiBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgaXMgc3RhdGljLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgYnV0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBrdm1fczM5MF92bV9zZXRfYXR0cmAuIE9rYXksIEkgY2FuIHVzZSB0aGF0IHRoZW4sIGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgdGhlIHBhdGguIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoYXQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zZXRfYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDMxPXN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3RvcG9fY2hhbmdlX2luZGljYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDQzLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIwNDQ6c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA0NS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjY9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTYxLVx0XHRcdGJyZWFrO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5NjI6XHRcdHIgPSBrdm1fczM5MF92bV9zZXRfYXR0cihrdm0sIFx1MDAyNmF0dHIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NjMtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA5MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIEtWTSBDb2RlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCYjMzk7cyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQgaGFzIGEgbGltaXRlZCBzY29wZSwgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZmlsZS4gQW5kIHRoZSBjYWxsIHNpdGUgaXMgYGt2bV9hcmNoX3ZtX2lvY3RsYC4gVGhhdCBzdWdnZXN0cyB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgb3IgY29udHJvbGxpbmcgZnVuY3Rpb24gZm9yIHRoaXMgYml0IG9mIGNvZGUuIFNvLCB0aGUgc2NvcGUgaXMgbmVhdGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIGJyb2FkZXIgYGt2bV9hcmNoX3ZtX2lvY3RsYCBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBvdXQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4gQWhhISBUaGlzIG9uZSBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIG9wZW5zIHVwIG1vcmUgcG9zc2liaWxpdGllcyBmb3IgaXRzIHVzYWdlLiBUaGlzIG1lYW5zIGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIHZhcmlvdXMgbG9jYXRpb25zIHdpdGhpbiB0aGUgS1ZNIGNvZGUuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHRyYWNlIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9mYXVsdGluLmM9MTU9Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE3LS8qXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxODogKiBrdm1fczM5MF9mYXVsdGluX2dmbigpIC0gaGFuZGxlIGEgZGF0IGZhdWx0LlxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTktICogQHZjcHU6IFRoZSB2Q1BVIHdob3NlIGdtYXAgaXMgdG8gYmUgZml4ZWQgdXAsIG9yIE5VTEwgaWYgb3BlcmF0aW5nIG9uIHRoZSBWTS5cbi0tXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zMi0gKi9cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjMzOmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzQte1xuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTE1LVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmg6MTY6aW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYpO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMTctaW50IGt2bV9zMzkwX2dldF9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmLCBnZm5fdCBnZm4sIGJvb2wgdyk7XG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaC0xOC1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oOjE5OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTIwLVx0XHRcdFx0XHQgICAgICBnZm5fdCBnZm4sIGJvb2wgd3IpXG4tLVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMjMtXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoyNDpcdHJldHVybiBrdm1fczM5MF9mYXVsdGluX2dmbih2Y3B1LCBrdm0sIFx1MDAyNmYpO1xuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMjUtfVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTg4Mj1zdGF0aWMgaW50IGFjY2Vzc19ndWVzdF9wYWdlX3dpdGhfa2V5X2dwYShzdHJ1Y3Qga3ZtICprdm0sIGVudW0gZ2FjY19tb2RlIG1vZGUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy05MDItXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzo5MDM6XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKE5VTEwsIGt2bSwgXHUwMDI2ZmF1bHQpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTA0LVx0aWYgKHJjKVxuLS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMzc9aW50IGNtcHhjaGdfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBpbnQgbGVuLCB1bmlvbiBrdm1fczM5MF9xdWFkICpvbGQsXG4tLVxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE1OS1cbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjExNjA6XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKE5VTEwsIGt2bSwgXHUwMDI2ZmF1bHQpO1xuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE2MS1cdGlmIChyYylcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jPTM1OT1zdGF0aWMgaW50IGhhbmRsZV9tdnBnX3BlaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy0zNzItXHRkbyB7XG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjM3MzpcdFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbl9zaW1wbGUodmNwdSwgTlVMTCwgZ3BhX3RvX2dmbihzcmNhZGRyKSwgZmFsc2UpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy0zNzQtXHR9IHdoaWxlIChyYyA9PSAtRUFHQUlOKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTM4NC1cdGRvIHtcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6Mzg1Olx0XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZSh2Y3B1LCBOVUxMLCBncGFfdG9fZ2ZuKGRzdGFkZHIpLCB0cnVlKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtMzg2LVx0fSB3aGlsZSAocmMgPT0gLUVBR0FJTik7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQzMzk9c3RhdGljIGludCBrdm1fczM5MF9maXh1cF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MzQ4LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQzNDk6XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZSh2Y3B1LCBOVUxMLCBnZm4sIHRydWUpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzNTAtXHRpZiAocmMpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDM1MS1cdFx0cmV0dXJuIHJjO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQzNTI6XHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZSh2Y3B1LCBOVUxMLCBnZm4gJiM0MzsgMSwgdHJ1ZSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDM1My1cdGlmIChyYylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDY0MD1zdGF0aWMgaW50IHZjcHVfZGF0X2ZhdWx0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBnYWRkciwgYm9vbCB3cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDY1MS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NjUyOlx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbih2Y3B1LCBOVUxMLCBcdTAwMjZmKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NjUzLVx0aWYgKHJjIFx1MDAzYz0gMClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUyOT1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2NTAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTY1MTpcdFx0XHRyID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm5fc2ltcGxlKHZjcHUsIE5VTEwsIGdwYV90b19nZm4oZ2FkZHIpLCBmYWxzZSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTY1Mi1cdFx0XHRpZiAociA9PSBQR01fQUREUkVTU0lORylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTkwMT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5MDktXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTkxMDpcdHJjID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm4odmNwdSwgTlVMTCwgXHUwMDI2Zik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTkxMS1cdGlmIChyYyA9PSBQR01fQUREUkVTU0lORylcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9MTQ3PWludCBrdm1fczM5MF9wdl9tYWtlX3NlY3VyZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIsIHZvaWQgKnV2Y2IpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTE2Mi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2gucHYuaW1wb3J0X2xvY2spIHtcbmFyY2gvczM5MC9rdm0vcHYuYzoxNjM6XHRcdHJjID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm4oTlVMTCwga3ZtLCBcdTAwMjZmKTtcbmFyY2gvczM5MC9rdm0vcHYuYy0xNjQtXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTc5MT1zdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2Vhayxcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtODA3LVx0aWYgKHJldCA9PSAtRU5YSU8pIHtcbmFyY2gvczM5MC9rdm0vcHYuYzo4MDg6XHRcdHJldCA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZShOVUxMLCBrdm0sIGdwYV90b19nZm4oYWRkciksIHRydWUpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTgwOS1cdFx0aWYgKCFyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjg4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTk3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0vczM5MCBDb2RlIFJldmlldyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGVzZSBLVk0vczM5MCBjaGFuZ2VzLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGV5IGFyZSBwcmV0dHkgc29saWQuIGBrdm1fczM5MF9mYXVsdGluX2dmbmAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLCBhcyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBwbGFjZXMsIGxpa2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4KCkkgc3RhcnRlZCB3aXRoIGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLCBidXQgSSYjMzk7dmUgbmFycm93ZWQgaXQgZG93bjoKCiogICBga3ZtX2FyY2hfdm1faW9jdGxgCiogICBga3ZtX2FyY2hfdmNwdV9pb2N0bGAKKiAgIGBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsYAoqICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYAoqICAgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgCiogICBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgCiogICBga3ZtX3MzOTBfaGFuZGxlX2IyYAoqICAgYGt2bV9zMzkwX2hhbmRsZV9iOWAKKiAgIGBrdm1fczM5MF9pbmplY3RfdmNwdWAKKiAgIGBrdm1fczM5MF9mYXVsdGluX2dmbmAKCkkgcmVhbGl6ZWQgYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBrdm1fczM5MF9oYW5kbGVfYjlgIGFyZSBpbnN0cnVjdGlvbiBoYW5kbGVycywgY2FsbGVkIGZyb20gYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFNvLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGVtLgoKSSB0aGVuIGxvb2tlZCBhdCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIEkgY2FuIHVzZSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIG9yIGp1c3QgYGt2bV9hcmNoX3ZtX2lvY3RsYCBzaW5jZSBpdCBpcyBzdGF0aWMuIGBrdm1fYXJjaF92bV9pb2N0bGAgc2VlbXMgZmluZS4KCkZvciBjb25maWd1cmF0aW9uLCBJIG5vdGVkIGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IGBLVk1fUzM5MF9VQ09OVFJPTGAgZGVwZW5kcyBvbiBgS1ZNYC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBzMzkwLXNwZWNpZmljIGNvbmZpZ3MgaW4gdGhlIGBLY29uZmlnYC4KCk5vdywgcmV2aWV3aW5nIHRoZSBjaGFuZ2VzLCB0aGVyZSBhcmUgc2V2ZXJhbCBrZXkgYXJlYXM6CgoqICAgKipgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgOioqIEl0cyBzaWduYXR1cmUgY2hhbmdlZCB0byBpbmNsdWRlIGB1bmlvbiBza2V5ICpza2V5YC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGhhbmRsZV9ycmJlYCBhbmQgYGt2bV9zMzkwX2tleW9wYCwgd2hlcmUgYGhhbmRsZV9ycmJlYCBpcyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfaGFuZGxlX2IyYCBhbmQgYGt2bV9zMzkwX2tleW9wYCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLgoqICAgKipga3ZtX3MzOTBfZmF1bHRpbl9nZm5gOioqIFRoZSBjaGFuZ2UgaW4gYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBub3cgcmV0dXJucyBgLUVJTlRSYCBpbnN0ZWFkIG9mIGAtRUFHQUlOYCB3aGVuIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgd29ydGggY2hlY2tpbmcgaW4gZGV0YWlsLgoqICAgKipgc2NhX2V4dF9jYWxsX3BlbmRpbmdgLCBgc2NhX2luamVjdF9leHRfY2FsbGAsIGBzY2FfY2xlYXJfZXh0X2NhbGxgOioqIEFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAgY2hlY2tzLiBDYWxsZWQgZnJvbSBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIGFuZCBga3ZtX3MzOTBfY2xlYXJfc3RvcF9pcnFgLgoqICAgKipga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmA6KiogVXNlcyBgc3JjdWAgYW5kIGBzbG90c19hcmNoX2xvY2tgLiBSZWFjaGFibGUgdGhyb3VnaCBga3ZtX2FyY2hfdm1faW9jdGxgIHZpYSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLgoqICAgKipga3ZtX2FyY2hfdm1faW9jdGxgOioqICBBZGRlZCBga3ZtX2lzX3Vjb250cm9sKGt2bSlgIGNoZWNrcyBmb3IgdGhlIGBLVk1fUzM5MF9JTlRFUlJVUFRgIGNhc2UuCiogICAqKmBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgOioqIEltcGxlbWVudHMgYHNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCwgdHJ1ZSlgCiogICAqKmBrdm1fYXJjaF92Y3B1X2NyZWF0ZWA6KiogUmVmYWN0b3JlZCBmb3IgbWVtb3J5IGxlYWsgZml4ZXMuCiogICAqKmBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6KiogQ2hlY2tzIGZvciBgc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpYCBiZWZvcmUgcnVubmluZy4KKiAgICoqYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgOioqIEFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAgY2hlY2tzLgoqICAgKipga3ZtX2FyY2hfdmNwdV9pb2N0bGA6KiogU2FtZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQxNT1zdGF0aWMgbG9uZyBrdm1fczM5MF92Y3B1X21lbXNpZGFfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDM5LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NDA6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ0MS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEZ1bmN0aW9uIENhbGwgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgLiBZZXMsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uIHdpdGhpbiBga3ZtLXMzOTAuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBob3cgaXQmIzM5O3MgYmVpbmcgaW52b2tlZC4gSXMgaXQgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2lvY3RsYD8gTm8sIG5vLCBuby4gYGt2bV92Y3B1X2lvY3RsYCBpcyBpbiBga3ZtX21haW4uY2AgdW5kZXIgYHZpcnQva3ZtYCwgSSBzaG91bGQga25vdyB0aGlzLiAqVGhhdCogZnVuY3Rpb24gY2FsbHMgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGluc3RlYWQuIEJ1dCBpcyBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGAgY2FsbGVkIGZyb20gdGhlcmU/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcy4gSSYjMzk7bGwgcXVpY2tseSBsb29rIGluIGBrdm1fbWFpbi5jYCBvciBwZXJoYXBzIGBrdm1faG9zdC5oYCBmb3IgdGhlIHByZWNpc2UgY2FsbCBjaGFpbi4gTmVlZCB0byB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTE4MjQ9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTE5NTgtXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxOTU5Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTk2MC1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNDYwPWludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTQ4NC1cbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTQ4NTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTQ4Ni1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmM9ODcxPXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmMtODk3LVxuYXJjaC9taXBzL2t2bS9taXBzLmM6ODk4Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuYXJjaC9taXBzL2t2bS9taXBzLmMtODk5LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0yMDE5PWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMDI0LVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjAyNTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIwMjYtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0yNDQ9dm1fZmF1bHRfdCBrdm1fYXJjaF92Y3B1X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI0OC1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNDk6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjUwLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQxNT1zdGF0aWMgbG9uZyBrdm1fczM5MF92Y3B1X21lbXNpZGFfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDM5LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NDA6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ0MS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTcxOTk9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcyNDQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzI0NTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbmFyY2gveDg2L2t2bS94ODYuYy03MjQ2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTU3Mj1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU3My1cdFx0XHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTU3NDpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU3NS1cdFx0XHRcdCAgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQzMy1cdCAqL1xudmlydC9rdm0va3ZtX21haW4uYzo0NDM0Olx0ciA9IGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0MzUtXHRpZiAociAhPSAtRU5PSU9DVExDTUQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTU4CgkJCQkJCQlvdXRwdXQ6IDI5NgoJCQkJCQkJdGhvdWdodHM6IDc2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0vczM5MCBBcmNoaXRlY3R1cmUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhhdCBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGAgaXMgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2lvY3RsYCAqYmVmb3JlKiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAuIFN0YW5kYXJkIEtWTSBmbG93LCBzbyBJJiMzOTtsbCBkZWZpbml0ZWx5IGluY2x1ZGUgaXQgaW4gdGhlIGZvY3VzIHN5bWJvbHMuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGFuZCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLiBUaGVzZSBhcmUgY3JpdGljYWwsIGFzIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMgYW5kIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgdmlhIGBLVk1fUzM5MF9QVl9DT01NQU5EYC4gRGVmaW5pdGVseSBpbmNsdWRpbmcgdGhlbS4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBpdCYjMzk7cyBjbGVhciB0aGF0IEtWTSBpdHNlbGYgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAgYXJlIHJlbGV2YW50LgoKU28gbXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGFyZTogYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGt2bV9zMzkwX2hhbmRsZV9iMmAsIGBrdm1fczM5MF9oYW5kbGVfYjlgLCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgLCBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4KCldhaXQsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBpcyBkZWZpbmVkIGluIGBwdi5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBkdXJpbmcgY29tcGlsYXRpb24uIE5vIG90aGVyIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQgZm9yIGBwdi5jYC4gSSB3aWxsIGRvdWJsZSBjaGVjayBgYXJjaC9zMzkwL2t2bS9NYWtlZmlsZWAganVzdCB0byBiZSBzdXJlLi4uIHllcCwgaXQmIzM5O3MgYWx3YXlzIGNvbXBpbGVkIGluLgoKTm93LCBmb3IgYEtWTV9TMzkwX1VDT05UUk9MYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBvcHRpb24gaXMgZGVmaW5lZCBhcyB3ZWxsLiBPa2F5LCB5ZXMsIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gZnV6eiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBpcyBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncywgbm9wZSwganVzdCB0aGF0IG9uZS4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyBpbmNsdWRlcyBjaGFuZ2VzIHRoYXQgZGlyZWN0bHkgaW1wYWN0IG1lbW9yeSByZWdpb25zLCBwYWdlIGZhdWx0cywgQ1BVIGxpZmVjeWNsZSBtYW5hZ2VtZW50IChjcmVhdGlvbi9kZXN0cnVjdGlvbiksIGludGVycnVwdCBpbmplY3Rpb24sIGFuZCBoYW5kbGluZyBvZiBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgKFJSQkUsIEVTU0EpLiBJbXBvcnRhbnRseSwgdGhlIGFkZGl0aW9uIG9mIGBLVk1fUzM5MF9VQ09OVFJPTGAgaW5kaWNhdGVzIHRoZSBoYW5kbGluZyBvZiB1c2VyLXNwYWNlIGNvbnRyb2xsZWQgVk1zLiBUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXkgYWxsIHdhcnJhbnQgZnV6emluZyB0byBpZGVudGlmeSBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0w8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TMzkwX1VDT05UUk9MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2IyJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iOSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9pbmplY3RfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9mYXVsdGluX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGluY2x1ZGluZyBoYW5kbGluZyBvZiBtZW1vcnkgcmVnaW9ucywgcGFnZSBmYXVsdHMsIHZpcnR1YWwgQ1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCBhbmQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgKFJSQkUsIEVTU0EpLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB1c2Vyc3BhY2UtY29udHJvbGxlZCBWTXMgKEtWTV9TMzkwX1VDT05UUk9MKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzAyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgdGhlIEFic2VuY2Ugb2YgYEtWTV9TMzkwX1VDT05UUk9MYCoqCgpIbW0sIHRoaXMgaXMgc3RyYW5nZS4gSSB3YXMgY2VydGFpbiBJIHdhcyBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBLVk1fUzM5MF9VQ09OVFJPTGAgc29tZXdoZXJlLCBidXQgbm93IGl0IHNlZW1zIHRvIGJlIGVsdWRpbmcgbWUuIFRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBJIHdhcyByZXZpZXdpbmcgc3VnZ2VzdGVkIGl0cyBleGlzdGVuY2UsIGJ1dCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgdGhyb3dpbmcgYW4gZXJyb3IuIEEgZGlzY3JlcGFuY3kgbGlrZSB0aGlzIGlzIHVzdWFsbHkgYSBzeW1wdG9tIG9mIGEgbWlzY29uZmlndXJhdGlvbiBvciBwb3RlbnRpYWxseSBzb21lIG91dGRhdGVkIGRvY3VtZW50YXRpb24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyBkb3VibGUgY2hlY2sgdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGRlbHZlIGJhY2sgaW50byBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cywgb3IgcGVyaGFwcyBtaXNpbnRlcnByZXRpbmcgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYXJjaGl0ZWN1cmUsIHNvIEkgbWF5IGJlIG1pc3Npbmcgc29tZXRoaW5nLCBpdCBjYW4mIzM5O3QgYmUgdGhhdCBpdCBkb2VzbiYjMzk7dCBleGlzdCwgY2FuIGl0PyBJIHdpbGwgbWV0aG9kaWNhbGx5IHNlYXJjaCBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY5MwoJCQkJCQkJb3V0cHV0OiAyODMKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgY2VydGFpbiBJJiMzOTtkIHNlZW4gYEtWTV9TMzkwX1VDT05UUk9MYCBzb21ld2hlcmXigKYgYW5kIHRoZXJlIGl0IGlzLCByaWdodCBpbiBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyBzdHJhbmdlLCBJIHdvbmRlciB3aHkgYHNldC1yZXN1bHRzYCBmbGFnZ2VkIGl0IGFzIG5vbi1leGlzdGVudD8gSG1tLCBtYXliZSB0aGUgdG9vbCBpcyBkZWZhdWx0aW5nIHRvIGNoZWNraW5nIGFnYWluc3QgdGhlIHg4Nl82NCBkZWZjb25maWcgb3Igc29tZSBvdGhlciBhcmNoaXRlY3R1cmU/IFRoYXQgd291bGQgZXhwbGFpbiBpdC4KClJpZ2h0LCB0aGlzIGlzIGFuIHMzOTAtc3BlY2lmaWMgY29uZmlnLiBUaGUgdG9vbCBwcm9iYWJseSBkb2VzbiYjMzk7dCBzZWUgaXQgYmVjYXVzZSBpdCYjMzk7cyBub3QgcGFydCBvZiB0aGUgbWFpbmxpbmUgYXJjaGl0ZWN0dXJlIGl0JiMzOTtzIGNoZWNraW5nIGFnYWluc3QuIEkmIzM5O2xsIG5lZWQgdG8gYWRqdXN0IG15IHN0cmF0ZWd5LiBJIHRoaW5rIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyBqdXN0IHRvIHVzZSB0aGUgYEtWTWAgb3B0aW9uLiBJZiB0aGUgdG9vbCBjb21wbGFpbnMgYWJvdXQgYEtWTV9TMzkwX1VDT05UUk9MYCwgSSYjMzk7bGwgb21pdCBpdCBlbnRpcmVseSBvciBqdXN0IHByb3ZpZGUgYEtWTWAgd2hpY2ggc2hvdWxkIGVuYWJsZSBldmVyeXRoaW5nIEkgbmVlZC4KCkxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB0aGUgY29uZmlnIG5hbWUgaXMgY29ycmVjdCwganVzdCB0byBiZSBzdXJlLi4uIFllcCwgY29uZmlybWVkOiBgY29uZmlnIEtWTV9TMzkwX1VDT05UUk9MYC4gT2theSwgSSYjMzk7bSBjb25maWRlbnQgbm93LiBJJiMzOTtsbCBqdXN0IHByb3ZpZGUgYEtWTWAgZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjImIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2I5JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIG1lbW9yeSByZWdpb25zLCBwYWdlIGZhdWx0cywgdmlydHVhbCBDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIGludGVycnVwdCBpbmplY3Rpb24sIGFuZCBzcGVjaWZpYyBpbnN0cnVjdGlvbiBoYW5kbGVycyAoUlJCRSwgRVNTQSkuIEl0IGFsc28gYWRkcyBjaGVja3MgZm9yIHVzZXJzcGFjZS1jb250cm9sbGVkIFZNcyAoS1ZNX1MzOTBfVUNPTlRST0wpLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjM1LjE0NDM4MDA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDkwMDkyNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfY3JlYXRlX2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iMlwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2I5XCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3RfdmNwdVwiLFxuICAgIFwia3ZtX3MzOTBfZmF1bHRpbl9nZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGluY2x1ZGluZyBoYW5kbGluZyBvZiBtZW1vcnkgcmVnaW9ucywgcGFnZSBmYXVsdHMsIHZpcnR1YWwgQ1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCBhbmQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMgKFJSQkUsIEVTU0EpLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB1c2Vyc3BhY2UtY29udHJvbGxlZCBWTXMgKEtWTV9TMzkwX1VDT05UUk9MKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjM1LjE0NDM4NTE4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQyNTAzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NTNjNjQzMjQ5YmM1MzBiYjAxMjQ1NDAyNzM1ZTY1NTY5OWVlZTk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTk6NDA6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC00NDAsNiArNDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHRib29sIHNrZXlfZW5hYmxlZDtcXG4gXFx0LyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqL1xcbiBcXHRib29sIGFjcnNfbG9hZGVkO1xcbitcXHRib29sIGluaXRpYWxpemVkO1xcbiBcXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcXG4gXFx0dW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbztcXG4gXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbkBAIC03NTUsMTMgKzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxcbiB7XFxuIFxcdHVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7XFxuIFxcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XFxuIFxcdHVuaW9uIHB0ZSAqcHRlcDtcXG4gXFx0aW50IHJjO1xcbiBcXG4rXFx0c2tleS1cXHUwMDNlc2tleSA9IDA7XFxuK1xcbiBcXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFxcdTAwMjZjcnN0ZXAsIFxcdTAwMjZwdGVwKTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTc3MSwyMSArNzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcXG4gXFxuIFxcdFxcdGlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XFxuK1xcdFxcdHNrZXktXFx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcXG4gXFx0cGdzdGUgPSBvbGQ7XFxuIFxcbiBcXHRpZiAoIXB0ZXAtXFx1MDAzZWguaSkge1xcbi1cXHRcXHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XFxuLVxcdFxcdHBnc3RlLmhyID0gcmMgXFx1MDAzZVxcdTAwM2UgMTtcXG4rXFx0XFx0c2tleS1cXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgXFx1MDAzY1xcdTAwM2MgMTtcXG4rXFx0XFx0cGdzdGUuaHIgPSBza2V5LVxcdTAwM2VyO1xcbiBcXHR9XFxuLVxcdHJjIHw9IChwZ3N0ZS5nciBcXHUwMDNjXFx1MDAzYyAxKSB8IHBnc3RlLmdjO1xcbitcXHRza2V5LVxcdTAwM2VyIHw9IHBnc3RlLmdyO1xcbitcXHRza2V5LVxcdTAwM2VjIHw9IHBnc3RlLmdjO1xcbiBcXHRwZ3N0ZS5nciA9IDA7XFxuIFxcbiBcXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XFxuIFxcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbi1cXHRyZXR1cm4gcmM7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuQEAgLTg0Niw2ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxcbiBcXHRzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay1cXHUwMDNlcHJpdjtcXG4gXFx0dW5pb24gY3JzdGUgZHVtbXkgPSB7IC52YWwgPSBwLVxcdTAwM2V0b2tlbiB9O1xcbiBcXHR1bmlvbiBwdGUgbmV3X3B0ZSwgcHRlID0gUkVBRF9PTkNFKCpwdGVwKTtcXG4rXFx0dW5pb24gcGdzdGUgcGdzdGU7XFxuIFxcbiBcXHRuZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpO1xcbiBcXG5AQCAtODUzLDcgKzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxcbiBcXHRpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay1cXHUwMDNlYXNjZSwgZmFsc2UpO1xcbitcXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xcbitcXHRwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVxcdTAwM2Vhc2NlLCBmYWxzZSk7XFxuK1xcdHBnc3RlLmNtbWFfZCA9IDA7XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxcbkBAIC01MzcsNyArNTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZcXG4gXFx0XFx0XFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKTtcXG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRcXHRcXHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTtcXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTtcXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcXG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XFxuIFxcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuaW5kZXggZmVlODAwNDdiZDk0Zi4uM2NjNDVmN2Y1YjJkNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuQEAgLTkxLDkgKzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcXG4gXFx0XFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cXG4gXFx0XFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cXHUwMDNlcGZuKSlcXG4gXFx0XFx0XFx0cmV0dXJuIFBHTV9BRERSRVNTSU5HO1xcbi1cXHRcXHQvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqL1xcbi1cXHRcXHRpZiAoZi1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXFxuLVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHRcXHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXFxuK1xcdFxcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVxcdTAwM2VwZm4pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHRcXHQvKiBDaGVjayBpZiBpdCdzIHJlYWQtb25seSBtZW1vcnk7IGRvbid0IHRyeSB0byBhY3R1YWxseSBoYW5kbGUgdGhhdCBjYXNlLiAqL1xcbiBcXHRcXHRpZiAoZi1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuaW5kZXggOWUzZTZiMGQ3MmFkNi4uOWRiNjhlM2FjMTc4ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbkBAIC00NSwxMyArNDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjtcXG4gc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbi1cXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuK1xcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcXG4gXFxuIFxcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xcbiBcXG4rXFx0c2lncF9jdHJsID0gc2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xcbiBcXHRpZiAoc3JjX2lkKVxcbiBcXHRcXHQqc3JjX2lkID0gc2lncF9jdHJsLnNjbjtcXG4gXFxuQEAgLTYwLDEzICs2MywxNiBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuIFxcbiBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxcbiB7XFxuLVxcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbi1cXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgb2xkX3ZhbCwgbmV3X3ZhbCA9IHsuc2NuID0gc3JjX2lkLCAuYyA9IDF9O1xcbitcXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcXG4gXFx0aW50IGV4cGVjdCwgcmM7XFxuIFxcbiBcXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcXG4rXFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0c2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcXG4gXFx0b2xkX3ZhbC5jID0gMDtcXG4gXFxuQEAgLTg0LDEwICs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxcbiBzdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbi1cXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcXG4gXFxuLVxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuK1xcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cXG4rXFx0c2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcXG4gXFxuIFxcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVxcdTAwM2V2YWx1ZSwgMCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLmZkOGJhZGIwZDU3MWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxcbiBcXHRzd2l0Y2ggKG9wKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcXG4gXFx0XFx0ciA9IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShtYywgYXNjZSwgZ2ZuLCBza2V5LCBcXHUwMDI2c2tleSwgMCwgMCwgMCk7XFxuLVxcdFxcdGlmIChyIFxcdTAwM2U9IDApXFxuK1xcdFxcdGlmIChyID09IDAgfHwgciA9PSAxKVxcbiBcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxcbkBAIC01ODAsMTQgKzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxcbiBcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOlxcbi1cXHRcXHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTtcXG4tXFx0XFx0aWYgKHIgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gciBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcXHUwMDI2c2tleSk7XFxuK1xcdFxcdGlmICghcilcXG4rXFx0XFx0XFx0cmV0dXJuIHNrZXkuc2tleTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNlIDAgPyAtRUZBVUxUIDogcjtcXG4gfVxcbiBcXG4gLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi9cXG5AQCAtMTIxOSw4ICsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXFxuIFxcbiAvKlxcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxcbi0gKiBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuKyAqIGt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbisgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbiAgKi9cXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuQEAgLTEyNjUsNyArMTI2NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4gfVxcbiBcXG4gLypcXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuKyAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuICAqL1xcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG5AQCAtMTMwMCw3ICsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4ge1xcbiBcXHRpbnQgcmVzID0gLUVOWElPO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0Z3VhcmQoc3JjdSkoXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbitcXG4gXFx0c3dpdGNoIChhdHRyLVxcdTAwM2VhdHRyKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOlxcbiBcXHRcXHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcXG5AQCAtMTMxMSw3ICsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbkBAIC0yMjE0LDcgKzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG4gXFx0fVxcbiBcXG4gXFx0a3ZmcmVlKGtleXMpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG5AQCAtMjI3Niw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuIFxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4gb3V0OlxcbiBcXHRrdmZyZWUoa2V5cyk7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTIzODYsNyArMjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcbiBcXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjkzNCw2ICsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRjYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDoge1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XFxuIFxcbitcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTI5OTgsOSArMzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuLVxcdFxcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxcbitcXHRcXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4gXFx0XFx0aWYgKCFyKSB7XFxuIFxcdFxcdFxcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNmFyZ3MsIHNpemVvZihhcmdzKSk7XFxuIFxcdFxcdFxcdGlmIChyKVxcbkBAIC0zMDE0LDkgKzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuIFxcdFxcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcXG5AQCAtMzI0Nyw3ICszMjUwLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY3J5cHRvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gc3RhdGljIHZvaWQgc2NhX2Rpc3Bvc2Uoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVxcdTAwM2VhcmNoLnNjYSwgc2l6ZW9mKCprdm0tXFx1MDAzZWFyY2guc2NhKSk7XFxuK1xcdGlmIChrdm0tXFx1MDAzZWFyY2guc2NhKVxcbitcXHRcXHRmcmVlX3BhZ2VzX2V4YWN0KGt2bS1cXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVxcdTAwM2VhcmNoLnNjYSkpO1xcbiBcXHRrdm0tXFx1MDAzZWFyY2guc2NhID0gTlVMTDtcXG4gfVxcbiBcXG5AQCAtMzQ2MSw3ICszNDY1LDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4gXFxuLVxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuK1xcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGNsZWFyX2JpdF9pbnYodmNwdS1cXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXFx1MDAzZW1jbik7XFxuQEAgLTM0ODEsOCArMzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdFdSSVRFX09OQ0Uoc2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2RhLCB2aXJ0X3RvX3BoeXModmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4gXFx0c2V0X2JpdF9pbnYodmNwdS1cXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXFx1MDAzZW1jbik7XFxuLVxcdHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG5AQCAtMzYxMyw2ICszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XFxuIFxcdCAgICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcXG4gXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xcbitcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcXG5AQCAtMzY3NCw3ICszNjgxLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pKTtcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjYnJsbylcXG4rXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pKTtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvID0gMDtcXG4gfVxcbiBcXG5AQCAtMzc5MiwyMSArMzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxcbitcXG4gaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlO1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XFxuIFxcdGludCByYztcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4tXFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLm1jKVxcbitcXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4rXFx0aWYgKCFtYylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdHNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tXFx0aWYgKCFzaWVfcGFnZSkge1xcbi1cXHRcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVxcdTAwM2VhcmNoLm1jKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5tYyA9IE5VTEw7XFxuK1xcdGlmICghc2llX3BhZ2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayA9IFxcdTAwMjZzaWVfcGFnZS1cXHUwMDNlc2llX2Jsb2NrO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlaXRkYmEgPSB2aXJ0X3RvX3BoeXMoXFx1MDAyNnNpZV9wYWdlLVxcdTAwM2VpdGRiKTtcXG5AQCAtMzg0OCwxMCArMzg1Niw5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcXG4gXFxuIFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbi1cXHRcXHRyYyA9IC1FTk9NRU07XFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5nbWFwLCAtMVVMKTtcXG4gXFx0XFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmdtYXApXFxuLVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0Vk1fRVZFTlQodmNwdS1cXHUwMDNla3ZtLCAzLCBcXFwiY3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFxcXCIsXFxuQEAgLTM4NTksMjAgKzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbiBcXG4gXFx0cmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpO1xcbi1cXHRpZiAocmMpXFxuLVxcdFxcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlY2hpbGRyZW5fbG9jaylcXG4rXFx0XFx0XFx0XFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4rXFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4gXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XFxuK1xcdHNpZV9wYWdlID0gTlVMTDtcXG4gXFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cXHUwMDNla3ZtLCAxKTtcXG4gXFx0cmV0dXJuIDA7XFxuLVxcbi1vdXRfdWNvbnRyb2xfdW5pbml0Olxcbi1cXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4tXFx0fVxcbi1vdXRfZnJlZV9zaWVfYmxvY2s6XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4tXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTUwMzksNiArNTA0NSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgICAga3ZtX3J1bi1cXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXFxuK1xcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0dmNwdV9sb2FkKHZjcHUpO1xcbiBcXG4gXFx0aWYgKGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkge1xcbkBAIC01NDQ3LDYgKzU0NTcsOCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIHMzOTBpcnEgPSB7fTtcXG4gXFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChzMzkwaW50X3RvX3MzOTBpcnEoXFx1MDAyNnMzOTBpbnQsIFxcdTAwMjZzMzkwaXJxKSlcXG5AQCAtNTUyMyw2ICs1NTM1LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0bG9uZyByO1xcbiBcXHR1MTYgcmMsIHJyYztcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdHN3aXRjaCAoaW9jdGwpIHtcXG5AQCAtNTc5NCwyNCArNTgxMCw0NCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4re1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4rXFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdGlmIChwZ3N0ZS5jbW1hX2QpIHtcXG4rXFx0XFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0XFx0YXRvbWljNjRfZGVjKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHR9XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcXG4tXFx0aW50IHJjID0gMDtcXG4rXFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdGludCByYyA9IC1FTk9NRU07XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4gXFxuIFxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xcbi1cXHRpZiAoIW1jKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0aWYgKCFtYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuK3JldHJ5OlxcbiBcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4rXFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEgXFx1MDAyNlxcdTAwMjYgb2xkKSB7XFxuK1xcdFxcdFxcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVxcdTAwM2ViYXNlX2dmbiwgb2xkLVxcdTAwM2ViYXNlX2dmbiArIG9sZC1cXHUwMDNlbnBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIFxcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHN3aXRjaCAoY2hhbmdlKSB7XFxuIFxcdFxcdGNhc2UgS1ZNX01SX0RFTEVURTpcXG4gXFx0XFx0XFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBvbGQtXFx1MDAzZWJhc2VfZ2ZuLCBvbGQtXFx1MDAzZW5wYWdlcyk7XFxuQEAgLTU4MjcsMTMgKzU4NjMsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRyYyA9IDA7XFxuIFxcdFxcdFxcdFdBUk4oMSwgXFxcIlVua25vd24gS1ZNIE1SIENIQU5HRTogJWRcXFxcblxcXCIsIGNoYW5nZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbitcXHRcXHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4gb3V0OlxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcXFxuXFxcIik7XFxuLVxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4gXFx0cmV0dXJuO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuaW5kZXggYWQwZGRjNDMzYTczYy4uYjFiYTI0YzM0NmVmYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuQEAgLTI4OSw2ICsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcXG4rXFx0dW5pb24gc2tleSBza2V5O1xcbiBcXHRpbnQgcmVnMSwgcmVnMjtcXG4gXFx0aW50IHJjO1xcbiBcXG5AQCAtMzA3LDEyICszMDgsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpO1xcbiBcXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcXG4gXFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuLVxcdFxcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7XFxuK1xcdFxcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXFx1MDAyNnNrZXkpO1xcbiBcXHRpZiAocmMgXFx1MDAzZSAwKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcXG4gXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbi1cXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcXG4rXFx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFxcdTAwM2VcXHUwMDNlIDEpIFxcdTAwMjYgMyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMjYwLDggKzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0LyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi9cXG4gXFx0XFx0a3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbi1cXHRcXHRcXHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4rXFx0XFx0XFx0XFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5pbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHYuY1xcbkBAIC0yNDQsNiArMjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxcbit7XFxuK1xcdGlmIChmcmVlX3N0b3JfYmFzZSlcXG4rXFx0XFx0ZnJlZV9wYWdlcyh2Y3B1LVxcdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XFxuK1xcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XFxuK1xcdG1lbXNldChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXFx1MDAzZWFyY2gucHYpKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXNkZiA9IDA7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXFxuK1xcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxcbitcXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxcbitcXHQgKi9cXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdiZWEgPSAxO1xcbitcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcXG4rfVxcbitcXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuIHtcXG4gXFx0aW50IGNjO1xcbkBAIC0yNTgsMjQgKzI3Niw5IEBAIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiBcXHRXQVJOX09OQ0UoY2MsIFxcXCJwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4XFxcIiwgKnJjLCAqcnJjKTtcXG4gXFxuIFxcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xcbi1cXHRpZiAoIWNjKVxcbi1cXHRcXHRmcmVlX3BhZ2VzKHZjcHUtXFx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxcbi1cXHRcXHRcXHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcXG4tXFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XFxuLVxcdG1lbXNldChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXFx1MDAzZWFyY2gucHYpKTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXNkZiA9IDA7XFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXFxuLVxcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxcbi1cXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxcbi1cXHQgKi9cXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdiZWEgPSAxO1xcbi1cXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcXG4rXFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcXG4gXFxuLVxcdHJldHVybiBjYyA/IEVJTyA6IDA7XFxuK1xcdHJldHVybiBjYyA/IC1FSU8gOiAwO1xcbiB9XFxuIFxcbiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbkBAIC0zMTksOSArMzIyLDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4gXFx0XFx0ICAgICB1dmNiLmhlYWRlci5ycmMpO1xcbiBcXG4gXFx0aWYgKGNjKSB7XFxuLVxcdFxcdHUxNiBkdW1teTtcXG4tXFxuLVxcdFxcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFxcdTAwMjZkdW1teSwgXFx1MDAyNmR1bW15KTtcXG4rXFx0XFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXFxuIFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUFHQUlOKVxcbitcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVFIpXFxuIFxcdFxcdEtWTV9VVl9FVkVOVChrdm0sIDMsIFxcXCJQUk9UVklSVCBWTSBVTlBBQ0s6IGZhaWxlZCBhZGRyICVsbHggd2l0aCByYyAleCBycmMgJXhcXFwiLFxcbiBcXHRcXHRcXHQgICAgIHV2Y2IuZ2FkZHIsICpyYywgKnJyYyk7XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjM1LjQ2OTIyNjI0NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MTE2NTIzNzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjJcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iOVwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTNjNjQzMjQ5YmM1MzBiYjAxMjQ1NDAyNzM1ZTY1NTY5OWVlZTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxOTo0MDozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00NDAsNiArNDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0Ym9vbCBza2V5X2VuYWJsZWQ7XG4gXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXG4gXHRib29sIGFjcnNfbG9hZGVkO1xuK1x0Ym9vbCBpbml0aWFsaXplZDtcbiBcdHN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2O1xuIFx0dW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbztcbiBcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5pbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTc1NSwxMyArNzU1LDE1IEBAIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXG4ge1xuIFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcbiBcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XG4gXHR1bmlvbiBwdGUgKnB0ZXA7XG4gXHRpbnQgcmM7XG4gXG4rXHRza2V5LVx1MDAzZXNrZXkgPSAwO1xuK1xuIFx0cmMgPSBkYXRfZW50cnlfd2FsayhOVUxMLCBnZm4sIGFzY2UsIERBVF9XQUxLX0FOWSwgVEFCTEVfVFlQRV9QQUdFX1RBQkxFLCBcdTAwMjZjcnN0ZXAsIFx1MDAyNnB0ZXApO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5AQCAtNzcxLDIxICs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuIFxuIFx0XHRpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKVxuIFx0XHRcdHJldHVybiAwO1xuLVx0XHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XG4rXHRcdHNrZXktXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpIFx1MDAzY1x1MDAzYyAxO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdG9sZCA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuIFx0cGdzdGUgPSBvbGQ7XG4gXG4gXHRpZiAoIXB0ZXAtXHUwMDNlaC5pKSB7XG4tXHRcdHJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTtcbi1cdFx0cGdzdGUuaHIgPSByYyBcdTAwM2VcdTAwM2UgMTtcbitcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcdTAwM2NcdTAwM2MgMTtcbitcdFx0cGdzdGUuaHIgPSBza2V5LVx1MDAzZXI7XG4gXHR9XG4tXHRyYyB8PSAocGdzdGUuZ3IgXHUwMDNjXHUwMDNjIDEpIHwgcGdzdGUuZ2M7XG4rXHRza2V5LVx1MDAzZXIgfD0gcGdzdGUuZ3I7XG4rXHRza2V5LVx1MDAzZWMgfD0gcGdzdGUuZ2M7XG4gXHRwZ3N0ZS5nciA9IDA7XG4gXG4gXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XG4gXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbi1cdHJldHVybiByYztcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5AQCAtODQ2LDYgKzg1MCw3IEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXG4gXHRzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay1cdTAwM2Vwcml2O1xuIFx0dW5pb24gY3JzdGUgZHVtbXkgPSB7IC52YWwgPSBwLVx1MDAzZXRva2VuIH07XG4gXHR1bmlvbiBwdGUgbmV3X3B0ZSwgcHRlID0gUkVBRF9PTkNFKCpwdGVwKTtcbitcdHVuaW9uIHBnc3RlIHBnc3RlO1xuIFxuIFx0bmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTtcbiBcbkBAIC04NTMsNyArODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXG4gXHRpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4rXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xuK1x0cGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4rXHRwZ3N0ZS5jbW1hX2QgPSAwO1xuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5AQCAtNTM3LDcgKzUzNyw3IEBAIGludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmXG4gXHRcdFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKTtcbiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXG4gXHRcdFx0ICAgICB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSwgYm9vbCBucSwgYm9vbCBtciwgYm9vbCBtYyk7XG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTtcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpO1xuIGxvbmcgZGF0X3Jlc2V0X3NrZXlzKHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3Qgc3RhcnQpO1xuIFxuIHVuc2lnbmVkIGxvbmcgZGF0X2dldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuaW5kZXggZmVlODAwNDdiZDk0Zi4uM2NjNDVmN2Y1YjJkNyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuQEAgLTkxLDkgKzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcbiBcdFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cbiBcdFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cdTAwM2VwZm4pKVxuIFx0XHRcdHJldHVybiBQR01fQUREUkVTU0lORztcbi1cdFx0LyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi9cbi1cdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHRcdC8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi9cbitcdFx0aWYgKGlzX3NpZ3BlbmRpbmdfcGZuKGYtXHUwMDNlcGZuKSlcbitcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHQvKiBDaGVjayBpZiBpdCdzIHJlYWQtb25seSBtZW1vcnk7IGRvbid0IHRyeSB0byBhY3R1YWxseSBoYW5kbGUgdGhhdCBjYXNlLiAqL1xuIFx0XHRpZiAoZi1cdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA5ZTNlNmIwZDcyYWQ2Li45ZGI2OGUzYWMxNzhmIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuQEAgLTQ1LDEzICs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xuIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuK1x0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsO1xuIFxuIFx0aWYgKCFrdm1fczM5MF90ZXN0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCkpXG4gXHRcdHJldHVybiAwO1xuK1x0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4gXG4rXHRzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0aWYgKHNyY19pZClcbiBcdFx0KnNyY19pZCA9IHNpZ3BfY3RybC5zY247XG4gXG5AQCAtNjAsMTMgKzYzLDE2IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiBcbiBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHtcbi1cdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbi1cdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgb2xkX3ZhbCwgbmV3X3ZhbCA9IHsuc2NuID0gc3JjX2lkLCAuYyA9IDF9O1xuK1x0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuK1x0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcbiBcdGludCBleHBlY3QsIHJjO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4rXHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdG9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7XG4gXHRvbGRfdmFsLmMgPSAwO1xuIFxuQEAgLTg0LDEwICs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4rXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbitcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4rXG4rXHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXG4rXHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcbiBcbiBcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVx1MDAzZXZhbHVlLCAwKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLmZkOGJhZGIwZDU3MWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0c3dpdGNoIChvcCkge1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxuIFx0XHRyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksIFx1MDAyNnNrZXksIDAsIDAsIDApO1xuLVx0XHRpZiAociBcdTAwM2U9IDApXG4rXHRcdGlmIChyID09IDAgfHwgciA9PSAxKVxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxuQEAgLTU4MCwxNCArNTgwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1JSQkU6XG4tXHRcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4pO1xuLVx0XHRpZiAociBcdTAwM2UgMClcbi1cdFx0XHRyZXR1cm4gciBcdTAwM2NcdTAwM2MgMTtcbitcdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbiwgXHUwMDI2c2tleSk7XG4rXHRcdGlmICghcilcbitcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2UgMCA/IC1FRkFVTFQgOiByO1xuIH1cbiBcbiAvKiBTZWN0aW9uOiBkZXZpY2UgcmVsYXRlZCAqL1xuQEAgLTEyMTksOCArMTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuIFxuIC8qXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxuLSAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4rICoga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbisgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG5AQCAtMTI2NSw3ICsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG5AQCAtMTMwMCw3ICsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgcmVzID0gLUVOWElPO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRndWFyZChzcmN1KShcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4rXG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XG4gXHRcdHJlcyA9IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihrdm0pO1xuQEAgLTEzMTEsNyArMTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yMjE0LDcgKzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbiBcdH1cbiBcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuQEAgLTIyNzYsNyArMjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIG91dDpcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qXG5AQCAtMjM4Niw3ICsyMzg3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qKlxuQEAgLTI5MzQsNiArMjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcbitcdFx0ciA9IC1FSU5WQUw7XG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbitcdFx0XHRicmVhaztcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTI5OTgsOSArMzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi1cdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuK1x0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKTtcbiBcdFx0XHRpZiAocilcbkBAIC0zMDE0LDkgKzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4gXHRcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcbkBAIC0zMjQ3LDcgKzMyNTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gc3RhdGljIHZvaWQgc2NhX2Rpc3Bvc2Uoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVx1MDAzZWFyY2guc2NhLCBzaXplb2YoKmt2bS1cdTAwM2VhcmNoLnNjYSkpO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnNjYSlcbitcdFx0ZnJlZV9wYWdlc19leGFjdChrdm0tXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVx1MDAzZWFyY2guc2NhKSk7XG4gXHRrdm0tXHUwMDNlYXJjaC5zY2EgPSBOVUxMO1xuIH1cbiBcbkBAIC0zNDYxLDcgKzM0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbiBcbi1cdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4rXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGNsZWFyX2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuQEAgLTM0ODEsOCArMzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRXUklURV9PTkNFKHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEsIHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4gXHRzZXRfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG4tXHRzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5AQCAtMzYxMyw2ICszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxuIFx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcbitcbitcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC0zNjc0LDcgKzM2ODEsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4rXHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbylcbitcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvID0gMDtcbiB9XG4gXG5AQCAtMzc5MiwyMSArMzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rREVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbitcbiBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2U7XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xuIFx0aW50IHJjO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2llX3BhZ2UpICE9IDQwOTYpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gubWMpXG4rXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbitcdGlmICghbWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c2llX3BhZ2UgPSAoc3RydWN0IHNpZV9wYWdlICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFzaWVfcGFnZSkge1xuLVx0XHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBOVUxMO1xuK1x0aWYgKCFzaWVfcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrID0gXHUwMDI2c2llX3BhZ2UtXHUwMDNlc2llX2Jsb2NrO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpdGRiYSA9IHZpcnRfdG9fcGh5cyhcdTAwMjZzaWVfcGFnZS1cdTAwM2VpdGRiKTtcbkBAIC0zODQ4LDEwICszODU2LDkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcbiBcbiBcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuIFx0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5nbWFwKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwiY3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFwiLFxuQEAgLTM4NTksMjAgKzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gXG4gXHRyYyA9IGt2bV9zMzkwX3ZjcHVfc2V0dXAodmNwdSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcbitcdGlmIChyYykge1xuK1x0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4rXHRcdFx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4rXHRcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuIFxuK1x0dmNwdS1cdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xuK1x0c2llX3BhZ2UgPSBOVUxMO1xuIFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cdTAwM2Vrdm0sIDEpO1xuIFx0cmV0dXJuIDA7XG4tXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcbi1cdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHR9XG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHRyZXR1cm4gcmM7XG4gfVxuIFxuIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01MDM5LDYgKzUwNDUsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1fcnVuLVx1MDAzZWt2bV9kaXJ0eV9yZWdzIFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXG4rXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXG4gXHRpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7XG5AQCAtNTQ0Nyw2ICs1NDU3LDggQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2lycSBzMzkwaXJxID0ge307XG4gXG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0aWYgKHMzOTBpbnRfdG9fczM5MGlycShcdTAwMjZzMzkwaW50LCBcdTAwMjZzMzkwaXJxKSlcbkBAIC01NTIzLDYgKzU1MzUsMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0bG9uZyByO1xuIFx0dTE2IHJjLCBycmM7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDI0ICs1ODEwLDQ0IEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbit7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbitcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRpZiAocGdzdGUuY21tYV9kKSB7XG4rXHRcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuK1x0fVxuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbi1cdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbi1cdGludCByYyA9IDA7XG4rXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHRpbnQgcmMgPSAtRU5PTUVNO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFxuIFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIW1jKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbitcdGlmICghbWMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuK3JldHJ5OlxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIFx1MDAyNlx1MDAyNiBvbGQpIHtcbitcdFx0XHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZWJhc2VfZ2ZuICsgb2xkLVx1MDAzZW5wYWdlcyxcbitcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbitcdFx0fVxuK1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbkBAIC01ODI3LDEzICs1ODYzLDE4IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRjYXNlIEtWTV9NUl9GTEFHU19PTkxZOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuK1x0XHRcdHJjID0gMDtcbiBcdFx0XHRXQVJOKDEsIFwiVW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxcblwiLCBjaGFuZ2UpO1xuIFx0XHR9XG4gXHR9XG4rXHRpZiAocmMgPT0gLUVOT01FTSkge1xuK1x0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbiBvdXQ6XG4gXHRpZiAocmMpXG4gXHRcdHByX3dhcm4oXCJmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cIik7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gXHRyZXR1cm47XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcbitcdHVuaW9uIHNrZXkgc2tleTtcbiBcdGludCByZWcxLCByZWcyO1xuIFx0aW50IHJjO1xuIFxuQEAgLTMwNywxMiArMzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbitcdFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXHUwMDI2c2tleSk7XG4gXHRpZiAocmMgXHUwMDNlIDApXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmM7XG4tXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcbitcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2IDMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyNjAsOCArMTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgKzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IE5VTEw7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbit7XG4rXHRpZiAoZnJlZV9zdG9yX2Jhc2UpXG4rXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4rXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuK1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuK1x0LypcbitcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4rXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcbitcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4rXHQgKi9cbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4rXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbit9XG4rXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4ge1xuIFx0aW50IGNjO1xuQEAgLTI1OCwyNCArMjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRXQVJOX09OQ0UoY2MsIFwicHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwiLCAqcmMsICpycmMpO1xuIFxuIFx0LyogSW50ZW5kZWQgbWVtb3J5IGxlYWsgZm9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uICovXG4tXHRpZiAoIWNjKVxuLVx0XHRmcmVlX3BhZ2VzKHZjcHUtXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4tXHRcdFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4tXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuLVx0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuLVx0Lypcbi1cdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4tXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2Zcbi1cdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4tXHQgKi9cbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4tXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbitcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XG4gXG4tXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xuK1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgKzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRcdCAgICAgdXZjYi5oZWFkZXIucnJjKTtcbiBcbiBcdGlmIChjYykge1xuLVx0XHR1MTYgZHVtbXk7XG4tXG4tXHRcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFx1MDAyNmR1bW15LCBcdTAwMjZkdW1teSk7XG4rXHRcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbitcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlRSKVxuIFx0XHRLVk1fVVZfRVZFTlQoa3ZtLCAzLCBcIlBST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFwiLFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDozNS40NjkyMzAwOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgwMDQzMTcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFMzOTAgS1ZNIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIG1vZGlmeWluZyB0aGUgYGFyY2gvczM5MC9rdm0vYCBkaXJlY3RvcnkuIFRoaXMgaXMgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGludGVyZXN0aW5nLiBJIHNlZSBjaGFuZ2VzIGluIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCwgYHNjYV9leHRfY2FsbF9wZW5kaW5nYCwgYGt2bV9zMzkwX2tleW9wYCwgYW5kIGEgYnVuY2ggbW9yZSwgYWxsIGRlYWxpbmcgd2l0aCBWTSBzZXR1cCwgY29udHJvbCwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBTaW5jZSB0aGlzIGlzIEtWTSBvbiBzMzkwLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IENhbiB0aGlzIGJlIGZ1enplZD8gVGhlIHByb21wdCBtZW50aW9ucyBzY2VuYXJpb3Mgd2hlcmUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBpbiB3aGljaCBjYXNlIHdlIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gQnV0IGhhbmcgb27igKYgczM5MCBLVk0gKmRvZXMqIHJlcXVpcmUgYW4gYWN0dWFsIHMzOTB4IGhvc3QgZm9yIHRoZSBLVk0gcGFydCwgZG9lc24ndCBpdD8gUUVNVSBjYW4gZW11bGF0ZSBzMzkweCwgYW5kIFN5emthbGxlciBzdXBwb3J0cyBzMzkweC4gQnV0LCBkb2VzIFN5emthbGxlciBydW4gb24gczM5MHg/IFllcyEgWWVzLCBpdCBkb2VzLiBUaGVyZWZvcmUsIHRoZXNlIEtWTSBpb2N0bHMgYXJlIHJlYWNoYWJsZS4gU28sIHVubGVzcyB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyB4ODZfNjQsIHRoZW4gaXQgd291bGQgYmUgcmVhY2hhYmxlLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIGFib3V0IEtWTSBmb3IgczM5MHguIEl0IGlzIHJlYWNoYWJsZSEgSW4gYSBTeXprYWxsZXIgZW52aXJvbm1lbnQgaXQgd291bGQgYmUsIHNpbmNlIFN5emthbGxlciBydW5zIG9uIHMzOTB4LiBTbywgZ2l2ZW4gdGhhdCBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBmdXp6aW5nIHMzOTB4LCBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoaXMgaXMgY29yZSBLVk0gbG9naWMgZm9yIHMzOTAsIHNvIGl0J3MgYSBnb29kIHRhcmdldC5cblxuTGV0J3MgcXVpY2tseSBzY2FuIHRoZSBjb2RlIGNoYW5nZXMuIEkgc2VlIHRoYXQgdGhlIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgc2lnbmF0dXJlIGhhcyBjaGFuZ2VkLiBXZSd2ZSBnb3QgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBub3cgaGFuZGxpbmcgYGlzX3NpZ3BlbmRpbmdfcGZuYC4gVGhlcmUgYXJlIGFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pYCBjaGVja3MgaW4gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZXh0ZXJuYWwgY2FsbHMsIGFuZCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgaXMgdXNpbmcgYSBkaWZmZXJlbnQgbG9jayBub3cuIEknbSBzZWVpbmcgY2hlY2tzIGZvciB0aGUgYHZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZGAgZmxhZyBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAuIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYWxzbyB1c2luZyBuZXcgbG9ja3MgYW5kIGZyZWUgb3BlcmF0aW9ucy4gSSdtIHNlZWluZyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzIGluIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuXG5cbkknZCBzYXkgbXkgZm9jdXMgc3ltYm9scyBmcm9tIHRoZSBkaWZmIGFyZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYW5kIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IEtjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZC4gYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgbmVlZGVkLiBJJ2xsIHF1aWNrbHkgY2hlY2sgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBidXQgSSdtIHByZXR0eSBjb25maWRlbnQgd2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDo0Ni4yNjk2NjUzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxNDQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjQ2LjMxNDA4NTEyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTIwMjM5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBhbmQgUzM5MCBVY29udHJvbCBpbiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19LVk1fUzM5MF9VQ09OVFJPTGAgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaGVyZS4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzICphY3R1YWxseSogYmVpbmcgdXRpbGl6ZWQgaW4gdGhpcyBwYXRjaCdzIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGEgcmVmZXJlbmNlIHRvIGBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pYC4gUmlnaHQsIHNvIHRoYXQncyB0aGUga2V5LiBOb3cgSSBuZWVkIHRvIGxvb2sgdXAgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiB3aGF0IGBrdm1faXNfdWNvbnRyb2xgIGlzIGRvaW5nIGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDo0OS42MDYxMTE4ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4NjU4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2lzX3Vjb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9nbWFwLmM9ODk9c3RhdGljIHZvaWQgZ21hcF9hZGRfY2hpbGQoc3RydWN0IGdtYXAgKnBhcmVudCwgc3RydWN0IGdtYXAgKmNoaWxkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTEyLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExMzpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHBhcmVudC1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTQtXFx0XFx0Y2xlYXJfYml0KEdNQVBfRkxBR19PV05TX1BBR0VUQUJMRVMsIFxcdTAwMjZjaGlsZC1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MTM9aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTYxNi1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjYxNzpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTgtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz00NT1zdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTUxLVxcdFxcdHJldHVybiAwO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6NTI6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtNTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTY0PXN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTcxLVxcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6NzI6XFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy03My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9OTA9c3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtOTQtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzo5NTpcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtOTYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODE4PXN0YXRpYyBpbnQgZmxpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODMxLVxcdGNhc2UgS1ZNX0RFVl9GTElDX0FQRl9FTkFCTEU6XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODMyOlxcdFxcdGlmIChrdm1faXNfdWNvbnRyb2woZGV2LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzMy1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzNi1cXHRjYXNlIEtWTV9ERVZfRkxJQ19BUEZfRElTQUJMRV9XQUlUOlxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgzNzpcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGRldi1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzgtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxMjE9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxMzAtXFx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfUzM5MF9BREFQVEVSOlxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzEzMTpcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTYwMj1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY0NS1cXHRcXHRyID0gMDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NjQ2OlxcdFxcdGlmIChocGFnZSBcXHUwMDI2XFx1MDAyNiAhKGt2bSBcXHUwMDI2XFx1MDAyNiBrdm1faXNfdWNvbnRyb2woa3ZtKSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY0Ny1cXHRcXHRcXHRyID0gMTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NTAtXFx0XFx0ciA9IDA7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjY1MTpcXHRcXHRpZiAoaHBhZ2VfMmcgXFx1MDAyNlxcdTAwMjYgIShrdm0gXFx1MDAyNlxcdTAwMjYga3ZtX2lzX3Vjb250cm9sKGt2bSkpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NTItXFx0XFx0XFx0ciA9IDE7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NzQ2PWludCBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzUzLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo3NTQ6XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy03NTUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Nzg4PWludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTg5Mi1cXHRcXHRcXHRyID0gLUVCVVNZO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo4OTM6XFx0XFx0ZWxzZSBpZiAoIWhwYWdlIHx8IGt2bS1cXHUwMDNlYXJjaC51c2VfY21tYSB8fCBrdm1faXNfdWNvbnRyb2woa3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtODk0LVxcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTkxMy1cXHRcXHRcXHRyID0gLUVCVVNZO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo5MTQ6XFx0XFx0fSBlbHNlIGlmICghaHBhZ2VfMmcgfHwga3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hIHx8IGt2bV9pc191Y29udHJvbChrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTkxNS1cXHRcXHRcXHRyID0gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz05OTM9c3RhdGljIGludCBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2woc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwNDAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEwNDE6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDQyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjY9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzgtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5Mzk6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQwLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM0MDU9dm9pZCBrdm1fYXJjaF92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTItXFx0a3ZtX2NsZWFyX2FzeW5jX3BmX2NvbXBsZXRpb25fcXVldWUodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM0MTM6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxNC1cXHRcXHRzY2FfZGVsX3ZjcHUodmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxNi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQxNzpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxOC1cXHRcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlY2hpbGRyZW5fbG9jaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNjA1PXZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjEyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxMzpcXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTQtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXA7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzcwOT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3MzMtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWVjYiB8PSBFQ0JfVEU7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3MzQ6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzczNS1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZWNiIHw9IEVDQl9TUEVDSTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzk2PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5Ny17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3OTg6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2woa3ZtKSBcXHUwMDI2XFx1MDAyNiAhc2NhX2Nhbl9hZGRfdmNwdShrdm0sIGlkKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc5OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zODA1PWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg1Ny1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg1ODpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg1OS1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg2OS1cXHRpZiAocmMpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg3MDpcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg3MS1cXHRcXHRcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlY2hpbGRyZW5fbG9jaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00MzIzPXN0YXRpYyBpbnQgdmNwdV91Y29udHJvbF90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqZ2FkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDMyNi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDMyNzpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDMyOC1cXHRcXHRyYyA9IGdtYXBfdWNhc190cmFuc2xhdGUodmNwdS1cXHUwMDNlYXJjaC5tYywgdmNwdS1cXHUwMDNlYXJjaC5nbWFwLCBnYWRkcik7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDU1Nz1zdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU3MTpcXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NzItXFx0XFx0cmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDQwPWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0NTktXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NjA6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDYxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1Mjk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MTMtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MTQ6XFx0XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxNS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMxLVxcdFxcdHIgPSAtRUlOVkFMO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NjMyOlxcdFxcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MzMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc0OD12bV9mYXVsdF90IGt2bV9hcmNoX3ZjcHVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzUxLVxcdGlmICgodm1mLVxcdTAwM2VwZ29mZiA9PSBLVk1fUzM5MF9TSUVfUEFHRV9PRkZTRVQpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NTI6XFx0XFx0IFxcdTAwMjZcXHUwMDI2IChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTc1My1cXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3Njc9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTc3MS17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3NzI6XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pIFxcdTAwMjZcXHUwMDI2IG5ldyBcXHUwMDI2XFx1MDAyNiBuZXctXFx1MDAzZWlkIFxcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzczLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU5MDE9bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU5MDYtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU5MDc6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01OTA4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTExMT1zdGF0aWMgaW5saW5lIGludCBpc192Y3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTExNS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6MTE2OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9pc191Y29udHJvbChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTExNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjQ5LjY1Njk4NDA4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTg5OTEyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fUzM5MF9VQ09OVFJPTCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHJpZ2h0LCB0aGF0J3MgZGVmaW5pdGVseSBhIHZhbGlkIGNvbmZpZyBvcHRpb24uIE5vdywgbGV0J3MgZmlndXJlIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZCBhbmQgd2hhdCBpdCByZWxpZXMgb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYW55IHBvdGVudGlhbCBwcmVyZXF1aXNpdGVzIHRoYXQgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgYEtWTV9TMzkwX1VDT05UUk9MYCB0byBiZSBlbmFibGVkLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlIGluIGEgS1ZNIGVudmlyb25tZW50IG9uIHMzOTAgaGFyZHdhcmUuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MTEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDo1Mi44NzU5NzgzMDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyOTk4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDA6NTIuOTIxMjgxNzkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0ODM5MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtWTSBLY29uZmlnIGZvciBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ3LiBJJ20gZm9jdXNpbmcgb24gdGhpcyBhcmVhIGJlY2F1c2UuLi4gd2VsbCwgSSBzdXNwZWN0IHRoZXJlJ3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIG9yIHBvc3NpYmx5IHByb2JsZW1hdGljIHRoZXJlLiBNeSBpbml0aWFsIGd1ZXNzLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGEgZmVhdHVyZSBmbGFnIHJlbGF0ZWQgdG8gS1ZNIHN1cHBvcnQgb24gczM5MC4gUGVyaGFwcyBpdCdzIGRlYWxpbmcgd2l0aCBhIG5ldyBoYXJkd2FyZSBmZWF0dXJlLCBvciBhbiBvcHRpbWl6YXRpb24uIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlnIG9wdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBwcm9jZXNzb3IgZmVhdHVyZXMgb3Igc3BlY2lmaWMgaHlwZXJ2aXNvciBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBLY29uZmlnIGVudHJ5ICplbmFibGVzKiBvciAqZGlzYWJsZXMqIGluIG9yZGVyIHRvIHNlZSBpZiBpdCdzIGltcGFjdGluZyBhIGN1cnJlbnQgcHJvamVjdCwgb3IgZm9yIHdoYXQgaXQgbWF5IHJlbGF0ZSBmb3IgZnV0dXJlIGRlc2lnbiBjb25jZXJucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmNoaXRlY3R1cmFsIHNwZWNpZmljcyBvZiBzMzkwIGFuZCBob3cgS1ZNIGludGVncmF0ZXMgb24gdGhhdCBhcmNoaXRlY3R1cmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIGFsc28gd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGUgY3VycmVudCBjb25maWcgb3B0aW9uIHRvIGZ1dHVyZSBkZXNpZ25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjU2LjI2OTY3ODczNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICAzMTpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDMyOlxcdFxcdHNlbGVjdCBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXFxuICAzMzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgcGFyYXZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIHRoZSBTSUVcXG4gIDM2OlxcdFxcdCAgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0eSBvbiB0aGUgbWFpbmZyYW1lLiBUaGlzIHNob3VsZCB3b3JrXFxuICAzNzpcXHRcXHQgIG9uIGFueSA2NGJpdCBtYWNoaW5lLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2hcXG4gIDQwOlxcdFxcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA0MzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEtWTVxcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBBbGxvdyBDQVBfU1lTX0FETUlOIHVzZXJzIHRvIGNyZWF0ZSBLVk0gdmlydHVhbCBtYWNoaW5lcyB0aGF0IGFyZVxcbiAgNTI6XFx0XFx0ICBjb250cm9sbGVkIGJ5IHVzZXJzcGFjZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRlbmRpZiAjIFZJUlRVQUxJWkFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQwOjU2LjI2OTczNjc2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI0NDM3NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAgYXJlIHRoZSBrZXkgY29uZmlncyBpbnZvbHZlZCBoZXJlLiBXYWl0IGEgc2Vjb25kLCAqYEtWTWAgaXRzZWxmIGlzIGEgdHJpc3RhdGUqLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgaXTigJlzIGluaGVyZW50bHkgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBvdGhlciBjcml0ZXJpYSwgc28gYXMgbG9uZyBhcyB0aG9zZSBhcmUgbWV0IGBLVk1gIGlzIG5vdCB0aGUgcHJvYmxlbSBhbmQgY2FuIGJlIGNvbnNpZGVyZWQgYWN0aXZlLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIHNldHRpbmcgc29tZXdoZXJlIGVsc2UuIExldCdzIGRlbHZlIGludG8gdGhlIGNvZGUgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgbWFrZSBzdXJlIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYWRkcmVzc2VkLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBhcmNoL3MzOTAva3ZtL3B2LmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgc3BvdCB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgY29uZmlndXJhdGlvbiBzZXR1cC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3MgaW50ZXJhY3QgYW5kIGlmIHRoZXJlJ3MgYW55IGltcGxpY2l0IGRlcGVuZGVuY3kgdGhhdCBJJ20gb3Zlcmxvb2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTg5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MDo1OS45OTQxNzc1MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTE5Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI0NDc9c3RhdGljIGludCBrdm1fczM5MF9jcHVzX3RvX3B2KHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ2MC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VtdXRleCk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI0NjE6XFx0XFx0ciA9IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUodmNwdSwgcmMsIHJyYyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI0NjItXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VtdXRleCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzcwOT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3ODYtXFx0aWYgKGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3ODc6XFx0XFx0cmMgPSBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHZjcHUsIFxcdTAwMjZ1dnJjLCBcXHUwMDI2dXZycmMpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNzg4LVxcdFxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD0zMDU9aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozMDY6aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTMwNy1pbnQga3ZtX3MzOTBfcHZfc2V0X2FzaWRlKHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jPTI2NT1pbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yODMtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjI4NDppbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbmFyY2gvczM5MC9rdm0vcHYuYy0yODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTowMC4wNDM3MDI3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE2OTg5NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBwdi5jYCoqXG5cbk9rYXksIHNvIEknbSB3b25kZXJpbmcgYWJvdXQgYHB2LmNgIGFuZCB3aGV0aGVyIGl0J3MgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMga2VybmVsIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhlIGBhcmNoL3MzOTAva3ZtL01ha2VmaWxlYCBmaWxlIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGZvciBLVk0gb24gczM5MCBpcyBkZWZpbmVkLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIG9yIHJ1bGVzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLiBUaW1lIHRvIG9wZW4gdGhhdCB1cCBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjAyLjc2MDY5NDg2MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NjQ1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL01ha2VmaWxlPTEwPWt2bS15ICs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTE6a3ZtLXkgKz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMi1rdm0teSArPSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjAyLjgwODE2ODE4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTMyNDE1NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tUzM5MCBDb21waWxhdGlvbiBhbmQgS2V5IFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIEtWTS1TMzkwIGNvZGUgYW5kIGhvdyBpdCdzIGNvbXBpbGVkLiBSaWdodCBub3csIGl0IGxvb2tzIGxpa2UgYHB2Lm9gLCBgZGF0LmNgLCBgZmF1bHRpbi5jYCwgYGludGVycnVwdC5jYCwgYGt2bS1zMzkwLmNgLCBhbmQgYHByaXYuY2AgYXJlIGFsd2F5cyBjb21waWxlZCB3aGVuIGBLVk1gIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuTXkgYXR0ZW50aW9uIHRoZW4gbW92ZXMgdG8gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggb25lcyBhcmUga2V5IGhlcmUsIHNvIEknbSBub3RpbmcgdGhlc2UgZG93biBhcyBwb3RlbnRpYWwgYXJlYXMgb2YgaW52ZXN0aWdhdGlvbjogYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUga2V5IHN5bWJvbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb2RlLiBMZXQncyBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkOiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgLCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgLCBgaGFuZGxlX3JyYmVgLCBhbmQgYGhhbmRsZV9lc3NhYC5cblxuSG9sZCBvbiwgSSBzZWUgYSBjb25uZWN0aW9uIGhlcmUhIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9ycmJlYCBhbmQgYGt2bV9zMzkwX2tleW9wYC4gYGhhbmRsZV9ycmJlYCBpcyBkZWZpbml0ZWx5IGFuIGluc3RydWN0aW9uIGhhbmRsZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBga3ZtX3MzOTBfa2V5b3BgLiBJcyBpdCBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfZ3Vlc3Rfc2tleV9vcGA/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDM3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjA4LjM0MDU4Njc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxNzIzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfa2V5b3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA2MS1cXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA2MjpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDYzLVxcdFxcdHVuaW9uIHNrZXkgc2tleTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDc0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc1OlxcdFxcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzYtXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTowOC41MDI3NjQzNjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MjAwMDQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fUzM5MF9LRVlPUCBNeXN0ZXJ5KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBga3ZtX3MzOTBfa2V5b3BgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92bV9pb2N0bGAsIHNwZWNpZmljYWxseSB3aGVuIGhhbmRsaW5nIGBLVk1fUzM5MF9LRVlPUGAuIE15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZyDigJMgYEtWTV9TMzkwX0tFWU9QYCBkb2Vzbid0IHNvdW5kIGZhbWlsaWFyLCBhbmQgdGhhdCdzIG5vdCBnb29kLiBJdCdzIG5vdCBhIHN0YW5kYXJkIGlvY3RsLiBMZXQncyBkaWcgZGVlcGVyLiBBaCwgcmlnaHQsIGBrdm1fczM5MF9rZXlvcGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4gVGhhdCdzIGEgY2x1ZS4gSG1tLCBjb3VsZCB0aGlzIGJlIGEgdHlwbz8gUGVyaGFwcyB0aGUgaW50ZW5kZWQgaW9jdGwgaXMgYEtWTV9TMzkwX1pQQ0lfT1BgPyBObywgd2FpdCwgdGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIGBLVk1fUzM5MF9LRVlPUGAgc3RpbGwgZG9lc24ndCBleGlzdCwgSSBuZWVkIHRvIGNoZWNrIGBrdm1fYXJjaF92bV9pb2N0bGAgYWdhaW4sIGFyb3VuZCBsaW5lIDMwNzUgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzA4LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjEyLjU3NDc2ODA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzA1MDpcXHRcXHR9XFxuMzA1MTpcXHRcXHRjYXNlIEtWTV9TMzkwX01FTV9PUDoge1xcbjMwNTI6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX21lbV9vcCBtZW1fb3A7XFxuMzA1MzpcXHRcXG4zMDU0OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2bWVtX29wLCBhcmdwLCBzaXplb2YobWVtX29wKSkgPT0gMClcXG4zMDU1OlxcdFxcdFxcdFxcdHIgPSBrdm1fczM5MF92bV9tZW1fb3Aoa3ZtLCBcXHUwMDI2bWVtX29wKTtcXG4zMDU2OlxcdFxcdFxcdGVsc2VcXG4zMDU3OlxcdFxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjMwNTg6XFx0XFx0XFx0YnJlYWs7XFxuMzA1OTpcXHRcXHR9XFxuMzA2MDpcXHRcXHRjYXNlIEtWTV9TMzkwX0tFWU9QOiB7XFxuMzA2MTpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG4zMDYyOlxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XFxuMzA2MzpcXHRcXHRcXHR1bmlvbiBza2V5IHNrZXk7XFxuMzA2NDpcXHRcXG4zMDY1OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2a29wLCBhcmdwLCBzaXplb2Yoa29wKSkpIHtcXG4zMDY2OlxcdFxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjMwNjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzA2ODpcXHRcXHRcXHR9XFxuMzA2OTpcXHRcXHRcXHRza2V5LnNrZXkgPSBrb3Aua2V5O1xcbjMwNzA6XFx0XFxuMzA3MTpcXHRcXHRcXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4zMDcyOlxcdFxcdFxcdGlmICghbWMpXFxuMzA3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMDc0OlxcdFxcbjMwNzU6XFx0XFx0XFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcXG4zMDc2OlxcdFxcdFxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4zMDc3OlxcdFxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4zMDc4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMwNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjEyLjU3NTIwNTYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1ODM3Mjk5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNX1MzOTBfS0VZT1AgYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgc28gYEtWTV9TMzkwX0tFWU9QYCBpcyBpbmRlZWQgYW4gaW9jdGwsIGFzIEkgc3VzcGVjdGVkLiBOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3Q6XG5cbiogICBga3ZtX2FyY2hfdm1faW9jdGxgXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYFxuKiAgIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYFxuKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmBcbiogICBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWBcbiogICBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgXG4qICAgYGhhbmRsZV9ycmJlYFxuKiAgIGBoYW5kbGVfZXNzYWBcblxuV2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiB3YXJucyBhZ2FpbnN0IGZvY3VzaW5nIG9uIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIGJpYXNpbmcgdGhlIHRlc3QgZGlzdHJpYnV0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBhdm9pZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIEtWTSwgYnV0IGl0J3MgKnZlcnkqIGZyZXF1ZW50bHkgY2FsbGVkLlxuXG5Ob3csIHdoYXQgYWJvdXQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgPyBIbW0sIHRoZXkncmUgbW9yZSBnZW5lcmljLCBidXQgdGhleSdyZSB0aGUgZW50cnkgcG9pbnRzIGZvciBpb2N0bHMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXkncmUgcHJvYmFibHkgd29ydGggbG9va2luZyBhdC5cblxuQWgsIGFuZCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIE5vdyB3aGVyZSBpcyB0aGF0IGNhbGxlZCBmcm9tPyBJIHRob3VnaHQgaXQgbWlnaHQgYmUgc29tZXRoaW5nIGxpa2UgYGt2bV92bV9pb2N0bF9zZXRfZXh0ZW5zaW9uYCwgYnV0IEkgZG9uJ3QgdGhpbmsgdGhhdCdzIHJpZ2h0Li4uIElzIGl0IGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCB2aWEgYEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVGA/IE5vLCB3YWl0Li4uIGl0J3MgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIHRoYXQgY2FsbHMgaXQuIEFuZCB3aGF0J3MgY2FsbGluZyAqdGhhdCo/IElzIGl0IGBrdm1fczM5MF9zZXRfbWVtX2NvbnRyb2xgLCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBjYWxsIGNoYWluIGZvciBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2MTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MToxOS4xNTg5MzgyNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDAwNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyNzE9c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5Ny1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI5ODpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjk5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDQ0PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNjEtXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT046XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIwNjI6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihrdm0sIGF0dHIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYzLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MToxOS4yMDU5NDUwMDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIwNjAxNDY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBLZXkgS1ZNL3MzOTAgRW50cnkgUG9pbnRzKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBzaWduaWZpY2FudCBlbnRyeSBwb2ludHMgaW50byB0aGUgS1ZNL3MzOTAgYXJjaGl0ZWN0dXJlLiBJJ20gZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zIGFzIHRoZSBwcmVmZXJyZWQgY2FuZGlkYXRlcywgc2luY2UgdGhvc2UgcmVwcmVzZW50IHdlbGwtZGVmaW5lZCBBUEkgYm91bmRhcmllcy5cblxuU28sICpga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAqIGlzIHRyaWdnZXJlZCBieSAqYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCosIHdoaWNoIGl0c2VsZiBpcyBhIGNvbnNlcXVlbmNlIG9mICpgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAqIGZyb20gdGhlIFZNLiBUaGF0IGRlZmluaXRlbHkgc2VlbXMgbGlrZSBhIHN0cm9uZyBwb2ludCBvZiBmb2N1cy4gSXQncyBhIG5pY2UsIGNsZWFuIGNhbGwgY2hhaW4gdG8gcmVwcmVzZW50LiBJJ3ZlIGdvdCB0aGF0IG9uZS5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBDTU1BIGJpdHMgZnVuY3Rpb25zPyAqYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgKiBhbmQgKmBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCogYXJlIGNhbGxlZCB2aWEgKmBrdm1fYXJjaF92bV9pb2N0bGAqLCBpbiByZXNwb25zZSB0byB0aGUgKmBLVk1fUzM5MF9HRVRfQ01NQV9CSVRTYCogYW5kICpgS1ZNX1MzOTBfU0VUX0NNTUFfQklUU2AqIGlvY3RscywgcmVzcGVjdGl2ZWx5LiBJIHRoaW5rIEknbGwgYWRkICpga3ZtX2FyY2hfdm1faW9jdGxgKiBhcyBhIGZvY3VzIHN5bWJvbCwgc2luY2UgdGhvc2UgYXJlIGhvdyB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGVtLlxuXG5JIGxpa2UgKmBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCogYW5kICpga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgKi4gVGhlc2Ugc2VlbSBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gQ1BVIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBzbyBJJ2xsIGFkZCB0aG9zZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGBoYW5kbGVfcnJiZWAgYW5kIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSBpbnN0cnVjdGlvbiBoYW5kbGVycyBmb3IgUlJCRSBhbmQgRVNTQSBpbnN0cnVjdGlvbnMsIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGVtLCBzaW5jZSB0aGV5IGFyZSBzdGF0aWMuIEJ1dCwgZ2l2ZW4gdGhlaXIgcm9sZSBpbiBpbnN0cnVjdGlvbiBoYW5kbGluZywgSSdtIGdvaW5nIHRvIGNoZWNrLiBcblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMuIFRoZXkgKmFyZSogY2FsbGVkIGludGVybmFsbHkgd2hlbiB0aGUgZ3Vlc3QgZXhlY3V0ZXMgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLiBTaG91bGQgdGhleSBiZSBpbmNsdWRlZD9cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGluZGljYXRlIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IGhlbHBzIGZvY3VzIG15IGF0dGVudGlvbiBvbiBpbnRlcmZhY2VzIHdoaWNoIGFyZSBtb3JlIGxpa2VseSB0byBiZSBzdGFibGUgQVBJLlxuXG5JIHNlZSB0aGF0IGBrdm1fczM5MF9rZXlvcGAgaXMgc3RhdGljLCBidXQgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC4gSSB3YW50IHRvIGF2b2lkIGFkZGluZyBzdGF0aWMgb3IgaW5saW5lZCBmdW5jdGlvbnMuIEdpdmVuIHRoZSBndWlkYW5jZSB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLCBJIGFtIGdvaW5nIHRvIHRyeSB0byBpbmNsdWRlIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gdGhlIGxpc3QsIGluc3RlYWQuXG5cblJldmlld2luZyB3aGF0IEkga25vdyBzbyBmYXIsIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOlxuXG4tICAgYGt2bV9hcmNoX3ZtX2lvY3RsYFxuLSAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsYFxuLSAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmBcbi0gICBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWBcbi0gICBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgXG5cbkkgd2lsbCBhZGQgdGhlc2UgdG8gbXkgbGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5MDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6MjcuNDExOTcwMDE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5OTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfcnJiZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz0yNTc9c3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yODgtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6Mjg5OnN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTI5MC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz05NTk9aW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzktXFx0Y2FzZSAweDJhOlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjk4MDpcXHRcXHRyZXR1cm4gaGFuZGxlX3JyYmUodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTgxLVxcdGNhc2UgMHgyYjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6MjcuNDU5ODc2MDY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODg1NDk0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9zMzkwIEhhbmRsZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBga3ZtX3MzOTBfaGFuZGxlX2IyYCBhbmQgYGt2bV9zMzkwX2hhbmRsZV9iOWAsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhleSdyZSBjYWxsZWQgZnJvbSB0aG9zZSBzd2l0Y2ggc3RhdGVtZW50cyB3aXRoaW4gdGhlIEtWTS9zMzkwIGNvZGUuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSBwcm9iYWJseSBub3QgaW5saW5lZCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhleSdyZSBwcmV0dHkgaGVmdHkgYW5kIGdldCBjYWxsZWQgZnJvbSBhIGxhcmdlIHN3aXRjaCwgd2hpY2ggc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGRlc2lnbi4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBhZGQgYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBrdm1fczM5MF9oYW5kbGVfYjlgIHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBjb3ZlcmVkIGV2ZXJ5dGhpbmcuIFdhaXQsIGhhbmcgb24uLi4gYGt2bV9zMzkwX2hhbmRsZV9iMmAgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBkaWcgaW50byBgaGFuZGxlX2Vzc2FgIHRvIHNlZSB3aHkgaXQncyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LCB3aGF0IG90aGVyIGltcGxpY2F0aW9ucyB0aGlzIGRlc2lnbiBjaG9pY2UgaGFzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3QgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQxOjMxLjA0ODQyODgyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTA3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX2Vzc2FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9wcml2LmM9MTE5MT1zdGF0aWMgdm9pZCBfZXNzYV9jbGVhcl9jYnJsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqY2JybCwgaW50IGxlbilcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTYtXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTIxNzpzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjE4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTEyODQ9aW50IGt2bV9zMzkwX2hhbmRsZV9iOShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjkzLVxcdGNhc2UgMHhhYjpcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjk0OlxcdFxcdHJldHVybiBoYW5kbGVfZXNzYSh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjk1LVxcdGNhc2UgMHhhZjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6MzEuMDk0MTI3ODg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzU1MTQyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBrdm1fczM5MF9oYW5kbGVfYjlgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIEkgc2VlIHRoYXQgYGt2bV9zMzkwX2hhbmRsZV9iOWAgKmlzbid0KiBkZWNsYXJlZCBhcyBzdGF0aWMuIEdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cyBpbiB0aGUgUzM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEkgc2hvdWxkIGNoZWNrIGBrdm1fczM5MF9nZXRfY21tYV9iaXRzYCBhbmQgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgIG5leHQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zLiBJIGtub3cgdGhleSdyZSBwcm9iYWJseSBkZWZpbmVkIHdpdGhpbiBga3ZtLXMzOTAuY2AsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhleSdyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtaWdodCBwcm92aWRlIHNvbWUgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIGludGVuZGVkIHNjb3BlIGFuZCB1c2FnZS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwODcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTozNy43Njk2NDQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI1MzQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9nZXRfY21tYV9iaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjExPXN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyMjItICoga3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyMjM6ICoga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSwgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyNC0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIyNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI2OC0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjY5OiAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzAtICovXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjIyMT1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMjkwLSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMjkxOnN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIyOTItXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3MzOTBfY21tYV9sb2cgKmFyZ3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAwNS1cXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jaylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzAwNjpcXHRcXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAwNy1cXHRcXHRpZiAoIXIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6MzcuODE5OTAzOTI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODczMjA4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgdGhpbmtpbmcgZ29lcyBsaWtlIHRoaXM6XG5cbioqQWRkcmVzc2luZyBTdGF0aWMgRnVuY3Rpb24gQ2FsbHMgaW4gS1ZNL3MzOTAgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGt2bV9zMzkwX2dldF9jbW1hX2JpdHNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzIHN0YXRpYy4gVGhhdCdzIG5vdCBpZGVhbCBmb3Igd2hhdCBJJ20gdHJ5aW5nIHRvIGFjaGlldmUuIEkgdGhpbmsgSSdsbCB1c2UgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbnN0ZWFkOyB0aGF0IHNlZW1zIGxpa2UgYSBtb3JlIGFwcHJvcHJpYXRlIGVudHJ5IHBvaW50LiBcblxuTm93LCBtb3Zpbmcgb24sIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGluIGBpbnRlcnJ1cHQuY2A6IGBzY2FfZXh0X2NhbGxfcGVuZGluZ2AsIGBzY2FfaW5qZWN0X2V4dF9jYWxsYCwgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgLiBUaGV5J3JlICphbHNvKiBzdGF0aWMsIHdoaWNoIG1lYW5zIEkgY2FuJ3QganVzdCBjYWxsIHRoZW0gZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmJlaW5nKiBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NDEuNzA3MjI3NjY0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5MDk2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NhX2luamVjdF9leHRfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9NDU9c3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy02My1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjY0OnN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy02NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1MDc9c3RhdGljIGludCBfX2luamVjdF9leHRjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTIzLVxcdGlmIChrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSBcXHUwMDI2XFx1MDAyNiAha3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUodmNwdSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTI0OlxcdFxcdHJldHVybiBzY2FfaW5qZWN0X2V4dF9jYWxsKHZjcHUsIHNyY19pZCk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTo0MS44NTkxNDI2ODJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MDUyMTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBfX2luamVjdF9leHRjYWxsYCoqXG5cbk9rYXksIHNvIGBfX2luamVjdF9leHRjYWxsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgYW5kIHByb2JhYmx5IG5vdCBleHBvcnRlZCBmb3IgZ2VuZXJhbCB1c2UuIE15IG5leHQgc3RlcCBpcyBvYnZpb3VzOiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJ20gZ29pbmcgdG8gZmluZCBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZWJhc2Ugd2hlcmUgYF9faW5qZWN0X2V4dGNhbGxgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQgYWJvdXQgaXRzIHB1cnBvc2UsIHRoZSBkYXRhIGl0J3Mgb3BlcmF0aW5nIG9uLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NDYuMTE5NjY3MDIyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjMwNTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2luamVjdF9leHRjYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNDkwPXN0YXRpYyBpbnQgX19pbmplY3RfcGZhdWx0X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MDYtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTA3OnN0YXRpYyBpbnQgX19pbmplY3RfZXh0Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MDgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTA1PXN0YXRpYyBpbnQgZG9faW5qZWN0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMjgtXFx0Y2FzZSBLVk1fUzM5MF9JTlRfRVhURVJOQUxfQ0FMTDpcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxMjk6XFx0XFx0cmMgPSBfX2luamVjdF9leHRjYWxsKHZjcHUsIGlycSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTMwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTo0Ni4xNjE5NzU2ODFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MjY1MTA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGRvX2luamVjdF92Y3B1YCBGdW5jdGlvbioqXG5cblJpZ2h0LCBgZG9faW5qZWN0X3ZjcHVgLiBUaGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zIGNhbiBzb21ldGltZXMgYmUgdHJpY2t5IHRvIHRyYWNlLCBlc3BlY2lhbGx5IGluIGEgbGFyZ2UgY29kZWJhc2UsIGJlY2F1c2UgeW91IG5lZWQgdG8ga25vdyBleGFjdGx5IHdoZXJlIGl0ICppcyogdXNlZC4gU28sIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzIGZvciBgZG9faW5qZWN0X3ZjcHVgLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBpdHMgcHVycG9zZSBhbmQsIHBvdGVudGlhbGx5LCBhbnkgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTGV0J3Mgc2VlIHdoZXJlIHRoaXMgb25lIHBvcHMgdXAuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzI0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NTAuMTA0NjI5NjI1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEwODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19pbmplY3RfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA5NT12b2lkIGt2bV9zMzkwX2NsZWFyX3N0b3BfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEwNC1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxMDU6c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMDYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMTUwPWludCBrdm1fczM5MF9pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE1NS1cXHRzcGluX2xvY2soXFx1MDAyNmxpLVxcdTAwM2Vsb2NrKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNTY6XFx0cmMgPSBkb19pbmplY3RfdmNwdSh2Y3B1LCBpcnEpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE1Ny1cXHRzcGluX3VubG9jayhcXHUwMDI2bGktXFx1MDAzZWxvY2spO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMTY5PWludCBrdm1fczM5MF9zZXRfaXJxX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmlycXN0YXRlLCBpbnQgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTk1LVxcdGZvciAobiA9IDA7IG4gXFx1MDAzYyBsZW4gLyBzaXplb2YoKmJ1Zik7IG4rKykge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzE5NjpcXHRcXHRyID0gZG9faW5qZWN0X3ZjcHUodmNwdSwgXFx1MDAyNmJ1ZltuXSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTk3LVxcdFxcdGlmIChyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MTo1MC4xNTE3NDI2ODVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyODI0MzQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEZvY3VzIGZvciBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBuYXZpZ2F0ZSB0aGlzIGNvZGUuIEkgbm90aWNlIGBrdm1fczM5MF9pbmplY3RfdmNwdWAgYW5kIGBrdm1fczM5MF9zZXRfaXJxX3N0YXRlYCBhcmVuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyB0aGVtIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cy4gYGt2bV9zMzkwX2luamVjdF92Y3B1YCBpbiBwYXJ0aWN1bGFyIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgZm9jdXMgc3ltYm9sLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBvdXQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgOyB0aG9zZSBhcmUgdXN1YWxseSBnb29kIHNwb3RzIHRvIHN0YXJ0IGRpZ2dpbmcuXG5cblJpZ2h0LCBsZXQncyBhc3NlbWJsZSBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scywgYSBzZXQgb2Yga2V5IGZ1bmN0aW9ucyB0aGF0IGNhbiBwcm92aWRlIGFuIG92ZXJ2aWV3IG9mIHRoZSBzdWJzeXN0ZW06XG5cbi0gICBga3ZtX2FyY2hfdm1faW9jdGxgXG4tICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgXG4tICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYFxuLSAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YFxuLSAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWBcbi0gICBga3ZtX3MzOTBfaGFuZGxlX2IyYFxuLSAgIGBrdm1fczM5MF9oYW5kbGVfYjlgXG4tICAgYGt2bV9zMzkwX2luamVjdF92Y3B1YFxuXG5BaCwgaGVyZSdzIGEgd3JpbmtsZS4gYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIGlzIHN0YXRpYy4gVGhhdCdzIG5vdCBpZGVhbCwgYnV0IGl0J3MgY2FsbGVkIGZyb20gYGt2bV9zMzkwX3ZtX3NldF9hdHRyYC4gT2theSwgSSBjYW4gdXNlIHRoYXQgdGhlbiwgYGt2bV9zMzkwX3ZtX3NldF9hdHRyYCBpcyB0aGUgcGF0aC4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwMzAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NTcuMTc5OTg5MzQ2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIxNzM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF92bV9zZXRfYXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjAzMT1zdGF0aWMgaW50IGt2bV9zMzkwX2dldF90b3BvX2NoYW5nZV9pbmRpY2F0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDQzLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDQ0OnN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDQ1LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI2PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTYxLVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTYyOlxcdFxcdHIgPSBrdm1fczM5MF92bV9zZXRfYXR0cihrdm0sIFxcdTAwMjZhdHRyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk2My1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDE6NTcuMjIzMjE1OTI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjIwMDQyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCdzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCBoYXMgYSBsaW1pdGVkIHNjb3BlLCBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBmaWxlLiBBbmQgdGhlIGNhbGwgc2l0ZSBpcyBga3ZtX2FyY2hfdm1faW9jdGxgLiBUaGF0IHN1Z2dlc3RzIHRoYXQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBvciBjb250cm9sbGluZyBmdW5jdGlvbiBmb3IgdGhpcyBiaXQgb2YgY29kZS4gU28sIHRoZSBzY29wZSBpcyBuZWF0bHkgY29udGFpbmVkIHdpdGhpbiB0aGUgYnJvYWRlciBga3ZtX2FyY2hfdm1faW9jdGxgIGNvbnRleHQuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayBvdXQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4gQWhhISBUaGlzIG9uZSBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIG9wZW5zIHVwIG1vcmUgcG9zc2liaWxpdGllcyBmb3IgaXRzIHVzYWdlLiBUaGlzIG1lYW5zIGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIHZhcmlvdXMgbG9jYXRpb25zIHdpdGhpbiB0aGUgS1ZNIGNvZGUuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHRyYWNlIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDkxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDI6MDEuMzQ1MjIzNTU4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQxODczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9mYXVsdGluX2dmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYz0xNT1ib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xNy0vKlxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjE4OiAqIGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKCkgLSBoYW5kbGUgYSBkYXQgZmF1bHQuXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTktICogQHZjcHU6IFRoZSB2Q1BVIHdob3NlIGdtYXAgaXMgdG8gYmUgZml4ZWQgdXAsIG9yIE5VTEwgaWYgb3BlcmF0aW5nIG9uIHRoZSBWTS5cXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTMyLSAqL1xcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjMzOmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTM0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTE1LVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oOjE2OmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaC0xNy1pbnQga3ZtX3MzOTBfZ2V0X2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYsIGdmbl90IGdmbiwgYm9vbCB3KTtcXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaC0xOC1cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uaDoxOTpzdGF0aWMgaW5saW5lIGludCBrdm1fczM5MF9mYXVsdGluX2dmbl9zaW1wbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMjAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZ2ZuX3QgZ2ZuLCBib29sIHdyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmgtMjMtXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmg6MjQ6XFx0cmV0dXJuIGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHZjcHUsIGt2bSwgXFx1MDAyNmYpO1xcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5oLTI1LX1cXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTg4Mj1zdGF0aWMgaW50IGFjY2Vzc19ndWVzdF9wYWdlX3dpdGhfa2V5X2dwYShzdHJ1Y3Qga3ZtICprdm0sIGVudW0gZ2FjY19tb2RlIG1vZGUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jLTkwMi1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYzo5MDM6XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbihOVUxMLCBrdm0sIFxcdTAwMjZmYXVsdCk7XFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtOTA0LVxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jPTExMzc9aW50IGNtcHhjaGdfZ3Vlc3RfYWJzX3dpdGhfa2V5KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBpbnQgbGVuLCB1bmlvbiBrdm1fczM5MF9xdWFkICpvbGQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuYy0xMTU5LVxcbmFyY2gvczM5MC9rdm0vZ2FjY2Vzcy5jOjExNjA6XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbihOVUxMLCBrdm0sIFxcdTAwMjZmYXVsdCk7XFxuYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmMtMTE2MS1cXHRpZiAocmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jPTM1OT1zdGF0aWMgaW50IGhhbmRsZV9tdnBnX3BlaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTM3Mi1cXHRkbyB7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzozNzM6XFx0XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbl9zaW1wbGUodmNwdSwgTlVMTCwgZ3BhX3RvX2dmbihzcmNhZGRyKSwgZmFsc2UpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtMzc0LVxcdH0gd2hpbGUgKHJjID09IC1FQUdBSU4pO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy0zODQtXFx0ZG8ge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6Mzg1OlxcdFxcdHJjID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm5fc2ltcGxlKHZjcHUsIE5VTEwsIGdwYV90b19nZm4oZHN0YWRkciksIHRydWUpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtMzg2LVxcdH0gd2hpbGUgKHJjID09IC1FQUdBSU4pO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQzMzk9c3RhdGljIGludCBrdm1fczM5MF9maXh1cF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzNDgtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQzNDk6XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbl9zaW1wbGUodmNwdSwgTlVMTCwgZ2ZuLCB0cnVlKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDM1MC1cXHRpZiAocmMpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzNTEtXFx0XFx0cmV0dXJuIHJjO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MzUyOlxcdHJjID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm5fc2ltcGxlKHZjcHUsIE5VTEwsIGdmbiArIDEsIHRydWUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MzUzLVxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NjQwPXN0YXRpYyBpbnQgdmNwdV9kYXRfZmF1bHRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdhZGRyLCBib29sIHdyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2NTEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ2NTI6XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbih2Y3B1LCBOVUxMLCBcXHUwMDI2Zik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ2NTMtXFx0aWYgKHJjIFxcdTAwM2M9IDApXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUyOT1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTY1MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTY1MTpcXHRcXHRcXHRyID0ga3ZtX3MzOTBfZmF1bHRpbl9nZm5fc2ltcGxlKHZjcHUsIE5VTEwsIGdwYV90b19nZm4oZ2FkZHIpLCBmYWxzZSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2NTItXFx0XFx0XFx0aWYgKHIgPT0gUEdNX0FERFJFU1NJTkcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTkwMT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTkwOS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTkxMDpcXHRyYyA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHZjcHUsIE5VTEwsIFxcdTAwMjZmKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTkxMS1cXHRpZiAocmMgPT0gUEdNX0FERFJFU1NJTkcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9MTQ3PWludCBrdm1fczM5MF9wdl9tYWtlX3NlY3VyZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ2FkZHIsIHZvaWQgKnV2Y2IpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTYyLVxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5wdi5pbXBvcnRfbG9jaykge1xcbmFyY2gvczM5MC9rdm0vcHYuYzoxNjM6XFx0XFx0cmMgPSBrdm1fczM5MF9mYXVsdGluX2dmbihOVUxMLCBrdm0sIFxcdTAwMjZmKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTY0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jPTc5MT1zdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhayxcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy04MDctXFx0aWYgKHJldCA9PSAtRU5YSU8pIHtcXG5hcmNoL3MzOTAva3ZtL3B2LmM6ODA4OlxcdFxcdHJldCA9IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuX3NpbXBsZShOVUxMLCBrdm0sIGdwYV90b19nZm4oYWRkciksIHRydWUpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy04MDktXFx0XFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQyOjAxLjM5MzY0NjcxN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg3MzM2NzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0vczM5MCBDb2RlIFJldmlldyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhlc2UgS1ZNL3MzOTAgY2hhbmdlcywgYW5kIG15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgdGhleSBhcmUgcHJldHR5IHNvbGlkLiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZSwgYXMgaXQncyBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBwbGFjZXMsIGxpa2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC5cblxuSSBzdGFydGVkIHdpdGggYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMsIGJ1dCBJJ3ZlIG5hcnJvd2VkIGl0IGRvd246XG5cbiogICBga3ZtX2FyY2hfdm1faW9jdGxgXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgXG4qICAgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgXG4qICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYFxuKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YFxuKiAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWBcbiogICBga3ZtX3MzOTBfaGFuZGxlX2IyYFxuKiAgIGBrdm1fczM5MF9oYW5kbGVfYjlgXG4qICAgYGt2bV9zMzkwX2luamVjdF92Y3B1YFxuKiAgIGBrdm1fczM5MF9mYXVsdGluX2dmbmBcblxuSSByZWFsaXplZCBga3ZtX3MzOTBfaGFuZGxlX2IyYCBhbmQgYGt2bV9zMzkwX2hhbmRsZV9iOWAgYXJlIGluc3RydWN0aW9uIGhhbmRsZXJzLCBjYWxsZWQgZnJvbSBga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gU28sIEknbGwgZm9jdXMgb24gdGhlbS5cblxuSSB0aGVuIGxvb2tlZCBhdCBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAuIEkgY2FuIHVzZSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIG9yIGp1c3QgYGt2bV9hcmNoX3ZtX2lvY3RsYCBzaW5jZSBpdCBpcyBzdGF0aWMuIGBrdm1fYXJjaF92bV9pb2N0bGAgc2VlbXMgZmluZS5cblxuRm9yIGNvbmZpZ3VyYXRpb24sIEkgbm90ZWQgYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBkZXBlbmRzIG9uIGBLVk1gLiBJIGRvbid0IHNlZSBhbnkgb3RoZXIgczM5MC1zcGVjaWZpYyBjb25maWdzIGluIHRoZSBgS2NvbmZpZ2AuXG5cbk5vdywgcmV2aWV3aW5nIHRoZSBjaGFuZ2VzLCB0aGVyZSBhcmUgc2V2ZXJhbCBrZXkgYXJlYXM6XG5cbiogICAqKmBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGA6KiogSXRzIHNpZ25hdHVyZSBjaGFuZ2VkIHRvIGluY2x1ZGUgYHVuaW9uIHNrZXkgKnNrZXlgLiBJdCdzIGNhbGxlZCBmcm9tIGBoYW5kbGVfcnJiZWAgYW5kIGBrdm1fczM5MF9rZXlvcGAsIHdoZXJlIGBoYW5kbGVfcnJiZWAgaXMgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBrdm1fczM5MF9rZXlvcGAgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYC5cbiogICAqKmBrdm1fczM5MF9mYXVsdGluX2dmbmA6KiogVGhlIGNoYW5nZSBpbiBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIG5vdyByZXR1cm5zIGAtRUlOVFJgIGluc3RlYWQgb2YgYC1FQUdBSU5gIHdoZW4gYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyB3b3J0aCBjaGVja2luZyBpbiBkZXRhaWwuXG4qICAgKipgc2NhX2V4dF9jYWxsX3BlbmRpbmdgLCBgc2NhX2luamVjdF9leHRfY2FsbGAsIGBzY2FfY2xlYXJfZXh0X2NhbGxgOioqIEFkZGVkIGBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pYCBjaGVja3MuIENhbGxlZCBmcm9tIGBrdm1fczM5MF9pbmplY3RfdmNwdWAgYW5kIGBrdm1fczM5MF9jbGVhcl9zdG9wX2lycWAuXG4qICAgKipga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmA6KiogVXNlcyBgc3JjdWAgYW5kIGBzbG90c19hcmNoX2xvY2tgLiBSZWFjaGFibGUgdGhyb3VnaCBga3ZtX2FyY2hfdm1faW9jdGxgIHZpYSBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgLlxuKiAgICoqYGt2bV9hcmNoX3ZtX2lvY3RsYDoqKiAgQWRkZWQgYGt2bV9pc191Y29udHJvbChrdm0pYCBjaGVja3MgZm9yIHRoZSBgS1ZNX1MzOTBfSU5URVJSVVBUYCBjYXNlLlxuKiAgICoqYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWA6KiogSW1wbGVtZW50cyBgc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKWBcbiogICAqKmBrdm1fYXJjaF92Y3B1X2NyZWF0ZWA6KiogUmVmYWN0b3JlZCBmb3IgbWVtb3J5IGxlYWsgZml4ZXMuXG4qICAgKipga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gOioqIENoZWNrcyBmb3IgYHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKWAgYmVmb3JlIHJ1bm5pbmcuXG4qICAgKipga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGA6KiogQWRkZWQgYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgIGNoZWNrcy5cbiogICAqKmBrdm1fYXJjaF92Y3B1X2lvY3RsYDoqKiBTYW1lXG5cbiIsIklucHV0VG9rZW5zIjozMzY4OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDI6MjAuMjY3MDE2MzE4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc4NTE5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQxNT1zdGF0aWMgbG9uZyBrdm1fczM5MF92Y3B1X21lbXNpZGFfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0MzktXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NDA6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0NDEtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTk6NDI6MjAuNDY0ODc3ODg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzM3Mzc0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgRnVuY3Rpb24gQ2FsbCBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgLiBZZXMsIHRoYXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gd2l0aGluIGBrdm0tczM5MC5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGhvdyBpdCdzIGJlaW5nIGludm9rZWQuIElzIGl0IGRpcmVjdGx5IGNhbGxlZCBmcm9tIGBrdm1fdmNwdV9pb2N0bGA/IE5vLCBubywgbm8uIGBrdm1fdmNwdV9pb2N0bGAgaXMgaW4gYGt2bV9tYWluLmNgIHVuZGVyIGB2aXJ0L2t2bWAsIEkgc2hvdWxkIGtub3cgdGhpcy4gKlRoYXQqIGZ1bmN0aW9uIGNhbGxzIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBpbnN0ZWFkLiBCdXQgaXMgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgIGNhbGxlZCBmcm9tIHRoZXJlPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMuIEknbGwgcXVpY2tseSBsb29rIGluIGBrdm1fbWFpbi5jYCBvciBwZXJoYXBzIGBrdm1faG9zdC5oYCBmb3IgdGhlIHByZWNpc2UgY2FsbCBjaGFpbi4gTmVlZCB0byB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjkwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MjoyNC42OTg2MTgyNzZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzI0MDgwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJtLmM9MTgyND1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xOTU4LVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjE5NTk6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTk2MC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNDYwPWludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDg0LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTQ4NTpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE0ODYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jPTg3MT1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9taXBzL2t2bS9taXBzLmMtODk3LVxcbmFyY2gvbWlwcy9rdm0vbWlwcy5jOjg5ODpsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5hcmNoL21pcHMva3ZtL21pcHMuYy04OTktXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIwMTk9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjAyNC1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoyMDI1Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIwMjYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0yNDQ9dm1fZmF1bHRfdCBrdm1fYXJjaF92Y3B1X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjQ4LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNDk6bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI1MC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU0MTU9c3RhdGljIGxvbmcga3ZtX3MzOTBfdmNwdV9tZW1zaWRhX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDM5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NDQwOmxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDQxLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzE5OT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfY2xvY2soc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MjQ0LVxcbmFyY2gveDg2L2t2bS94ODYuYzo3MjQ1Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmFyY2gveDg2L2t2bS94ODYuYy03MjQ2LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTU3Mj1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1NzMtXFx0XFx0XFx0IHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNTc0Omxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTU3NS1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NDMzLVxcdCAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDQzNDpcXHRyID0ga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0MzUtXFx0aWYgKHIgIT0gLUVOT0lPQ1RMQ01EKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MjoyNi4zNzEwMzA0MjJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg1MTkyMDk2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNL3MzOTAgQXJjaGl0ZWN0dXJlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJJ20gbm90aW5nIHRoYXQgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgIGlzIGNhbGxlZCBmcm9tIGBrdm1fdmNwdV9pb2N0bGAgKmJlZm9yZSogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLiBTdGFuZGFyZCBLVk0gZmxvdywgc28gSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgaXQgaW4gdGhlIGZvY3VzIHN5bWJvbHMuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YC4gVGhlc2UgYXJlIGNyaXRpY2FsLCBhcyB0aGV5J3JlIG5vbi1zdGF0aWMgYW5kIGFyZSBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgdmlhIGBLVk1fUzM5MF9QVl9DT01NQU5EYC4gRGVmaW5pdGVseSBpbmNsdWRpbmcgdGhlbS5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUsIGl0J3MgY2xlYXIgdGhhdCBLVk0gaXRzZWxmIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgIGFyZSByZWxldmFudC5cblxuU28gbXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGFyZTogYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGt2bV9zMzkwX2hhbmRsZV9iMmAsIGBrdm1fczM5MF9oYW5kbGVfYjlgLCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgLCBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC5cblxuV2FpdCwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGlzIGRlZmluZWQgaW4gYHB2LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQncyBhbHdheXMgaW5jbHVkZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiBObyBvdGhlciBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIGZvciBgcHYuY2AuIEkgd2lsbCBkb3VibGUgY2hlY2sgYGFyY2gvczM5MC9rdm0vTWFrZWZpbGVgIGp1c3QgdG8gYmUgc3VyZS4uLiB5ZXAsIGl0J3MgYWx3YXlzIGNvbXBpbGVkIGluLlxuXG5Ob3csIGZvciBgS1ZNX1MzOTBfVUNPTlRST0xgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkIGFzIHdlbGwuIE9rYXksIHllcywgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyBpbmRlZWQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBmdXp6IHRoZSBjYXNlcyB3aGVyZSB0aGlzIGlzIGVuYWJsZWQuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncywgbm9wZSwganVzdCB0aGF0IG9uZS5cblxuSW4gc3VtbWFyeSwgdGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgc3BlY2lmaWMgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGluY2x1ZGVzIGNoYW5nZXMgdGhhdCBkaXJlY3RseSBpbXBhY3QgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCBDUFUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGNyZWF0aW9uL2Rlc3RydWN0aW9uKSwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIGhhbmRsaW5nIG9mIHNwZWNpZmljIGluc3RydWN0aW9ucyAoUlJCRSwgRVNTQSkuIEltcG9ydGFudGx5LCB0aGUgYWRkaXRpb24gb2YgYEtWTV9TMzkwX1VDT05UUk9MYCBpbmRpY2F0ZXMgdGhlIGhhbmRsaW5nIG9mIHVzZXItc3BhY2UgY29udHJvbGxlZCBWTXMuIFRoZXNlIGNoYW5nZXMgYXJlIGFsbCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBzdGFuZGFyZCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24gcGF0aHMuIFRoZXJlZm9yZSwgdGhleSBhbGwgd2FycmFudCBmdXp6aW5nIHRvIGlkZW50aWZ5IGFuZCBwcmV2ZW50IHBvdGVudGlhbCByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3Vlcy4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1NTgsIk91dHB1dFRva2VucyI6Mjk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQyOjQ0Ljg5MDI0MzIxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzMDgxNTksIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1MzOTBfVUNPTlRST0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjJcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iOVwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0Mjo0NC45NjI1Njc2MjlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxMzI5NDk1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQWJzZW5jZSBvZiBgS1ZNX1MzOTBfVUNPTlRST0xgKipcblxuSG1tLCB0aGlzIGlzIHN0cmFuZ2UuIEkgd2FzIGNlcnRhaW4gSSB3YXMgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBgS1ZNX1MzOTBfVUNPTlRST0xgIHNvbWV3aGVyZSwgYnV0IG5vdyBpdCBzZWVtcyB0byBiZSBlbHVkaW5nIG1lLiBUaGUga2VybmVsIGRvY3VtZW50YXRpb24gSSB3YXMgcmV2aWV3aW5nIHN1Z2dlc3RlZCBpdHMgZXhpc3RlbmNlLCBidXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHRocm93aW5nIGFuIGVycm9yLiBBIGRpc2NyZXBhbmN5IGxpa2UgdGhpcyBpcyB1c3VhbGx5IGEgc3ltcHRvbSBvZiBhIG1pc2NvbmZpZ3VyYXRpb24gb3IgcG90ZW50aWFsbHkgc29tZSBvdXRkYXRlZCBkb2N1bWVudGF0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBkb3VibGUgY2hlY2sgdGhlIHNvdXJjZS4gTGV0J3MgZGVsdmUgYmFjayBpbnRvIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMsIG9yIHBlcmhhcHMgbWlzaW50ZXJwcmV0aW5nIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYXJjaGl0ZWN1cmUsIHNvIEkgbWF5IGJlIG1pc3Npbmcgc29tZXRoaW5nLCBpdCBjYW4ndCBiZSB0aGF0IGl0IGRvZXNuJ3QgZXhpc3QsIGNhbiBpdD8gSSB3aWxsIG1ldGhvZGljYWxseSBzZWFyY2ggZm9yIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDMwMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0Mjo1OS4wOTU1MTk2MTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzI3MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE5OjQyOjU5LjEzODg1MTE2OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDI2OTI4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgY2VydGFpbiBJJ2Qgc2VlbiBgS1ZNX1MzOTBfVUNPTlRST0xgIHNvbWV3aGVyZeKApiBhbmQgdGhlcmUgaXQgaXMsIHJpZ2h0IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGF0J3Mgc3RyYW5nZSwgSSB3b25kZXIgd2h5IGBzZXQtcmVzdWx0c2AgZmxhZ2dlZCBpdCBhcyBub24tZXhpc3RlbnQ/IEhtbSwgbWF5YmUgdGhlIHRvb2wgaXMgZGVmYXVsdGluZyB0byBjaGVja2luZyBhZ2FpbnN0IHRoZSB4ODZfNjQgZGVmY29uZmlnIG9yIHNvbWUgb3RoZXIgYXJjaGl0ZWN0dXJlPyBUaGF0IHdvdWxkIGV4cGxhaW4gaXQuXG5cblJpZ2h0LCB0aGlzIGlzIGFuIHMzOTAtc3BlY2lmaWMgY29uZmlnLiBUaGUgdG9vbCBwcm9iYWJseSBkb2Vzbid0IHNlZSBpdCBiZWNhdXNlIGl0J3Mgbm90IHBhcnQgb2YgdGhlIG1haW5saW5lIGFyY2hpdGVjdHVyZSBpdCdzIGNoZWNraW5nIGFnYWluc3QuIEknbGwgbmVlZCB0byBhZGp1c3QgbXkgc3RyYXRlZ3kuIEkgdGhpbmsgdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIGp1c3QgdG8gdXNlIHRoZSBgS1ZNYCBvcHRpb24uIElmIHRoZSB0b29sIGNvbXBsYWlucyBhYm91dCBgS1ZNX1MzOTBfVUNPTlRST0xgLCBJJ2xsIG9taXQgaXQgZW50aXJlbHkgb3IganVzdCBwcm92aWRlIGBLVk1gIHdoaWNoIHNob3VsZCBlbmFibGUgZXZlcnl0aGluZyBJIG5lZWQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB0aGUgY29uZmlnIG5hbWUgaXMgY29ycmVjdCwganVzdCB0byBiZSBzdXJlLi4uIFllcCwgY29uZmlybWVkOiBgY29uZmlnIEtWTV9TMzkwX1VDT05UUk9MYC4gT2theSwgSSdtIGNvbmZpZGVudCBub3cuIEknbGwganVzdCBwcm92aWRlIGBLVk1gIGZvciBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjkzLCJPdXRwdXRUb2tlbnMiOjI4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxOTo0MzowNi41NjU3ODMwNzhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY3Nzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2IyXCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjlcIixcbiAgICBcImt2bV9zMzkwX2luamVjdF92Y3B1XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgaW5jbHVkaW5nIGhhbmRsaW5nIG9mIG1lbW9yeSByZWdpb25zLCBwYWdlIGZhdWx0cywgdmlydHVhbCBDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIGludGVycnVwdCBpbmplY3Rpb24sIGFuZCBzcGVjaWZpYyBpbnN0cnVjdGlvbiBoYW5kbGVycyAoUlJCRSwgRVNTQSkuIEl0IGFsc28gYWRkcyBjaGVja3MgZm9yIHVzZXJzcGFjZS1jb250cm9sbGVkIFZNcyAoS1ZNX1MzOTBfVUNPTlRST0wpLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IGV4ZWN1dGlvbiwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjJcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iOVwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgbWVtb3J5IHJlZ2lvbnMsIHBhZ2UgZmF1bHRzLCB2aXJ0dWFsIENQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgaW50ZXJydXB0IGluamVjdGlvbiwgYW5kIHNwZWNpZmljIGluc3RydWN0aW9uIGhhbmRsZXJzIChSUkJFLCBFU1NBKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdXNlcnNwYWNlLWNvbnRyb2xsZWQgVk1zIChLVk1fUzM5MF9VQ09OVFJPTCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow4wc7m[1] Phase: Succeeded StartedAt: 2026-08-01 19:43:17 +0000 UTC FinishedAt: 2026-08-01 19:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 19:43:17 +0000 UTC FinishedAt: 2026-08-01 19:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2] Phase: Succeeded StartedAt: 2026-08-01 19:43:17 +0000 UTC FinishedAt: 2026-08-01 20:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 19:43:17 +0000 UTC FinishedAt: 2026-08-01 20:26:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 19:43:17 +0000 UTC FinishedAt: 2026-08-01 19:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 19:43:17 +0000 UTC FinishedAt: 2026-08-01 19:43:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow4wc7m/series-workflow4wc7m-convert-artifact-420714984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 19:43:27 +0000 UTC FinishedAt: 2026-08-01 19:59:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 19:43:27 +0000 UTC FinishedAt: 2026-08-01 19:59:19 +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:*547c5931-7dbb-4a35-862e-d971f60def0b,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-workflow4wc7m/series-workflow4wc7m-convert-artifact-420714984/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": "dc6ff835-2b61-4a72-aa05-704117ea0007", "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-workflow4wc7m/series-workflow4wc7m-build-action-3360169822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 19:43:27 +0000 UTC FinishedAt: 2026-08-01 19:59:09 +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:*547c5931-7dbb-4a35-862e-d971f60def0b,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-workflow4wc7m/series-workflow4wc7m-convert-artifact-420714984/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": "dc6ff835-2b61-4a72-aa05-704117ea0007", "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-workflow4wc7m/series-workflow4wc7m-build-action-3360169822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 19:59:19 +0000 UTC FinishedAt: 2026-08-01 19:59:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 19:59:19 +0000 UTC FinishedAt: 2026-08-01 19:59:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 19:59:19 +0000 UTC FinishedAt: 2026-08-01 19:59:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 19:59:19 +0000 UTC FinishedAt: 2026-08-01 19:59:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow4wc7m/series-workflow4wc7m-convert-artifact-2652943567/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 19:59:29 +0000 UTC FinishedAt: 2026-08-01 20:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 19:59:29 +0000 UTC FinishedAt: 2026-08-01 20:01:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc6ff835-2b61-4a72-aa05-704117ea0007,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-workflow4wc7m/series-workflow4wc7m-build-action-3360169822/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-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 20:01:31 +0000 UTC FinishedAt: 2026-08-01 20:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 20:01:31 +0000 UTC FinishedAt: 2026-08-01 20:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 20:01:31 +0000 UTC FinishedAt: 2026-08-01 20:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 20:01:31 +0000 UTC FinishedAt: 2026-08-01 20:21:32 +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:*547c5931-7dbb-4a35-862e-d971f60def0b,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-workflow4wc7m/series-workflow4wc7m-convert-artifact-2652943567/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": "e8b18853-ba79-4204-9509-175436fce0d9", "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-workflow4wc7m/series-workflow4wc7m-build-action-1759263971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 20:01:31 +0000 UTC FinishedAt: 2026-08-01 20:21:07 +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:*547c5931-7dbb-4a35-862e-d971f60def0b,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-workflow4wc7m/series-workflow4wc7m-convert-artifact-2652943567/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": "e8b18853-ba79-4204-9509-175436fce0d9", "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-workflow4wc7m/series-workflow4wc7m-build-action-1759263971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 20:21:32 +0000 UTC FinishedAt: 2026-08-01 20:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 20:21:32 +0000 UTC FinishedAt: 2026-08-01 20:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 20:21:32 +0000 UTC FinishedAt: 2026-08-01 20:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 20:21:32 +0000 UTC FinishedAt: 2026-08-01 20:23:25 +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:*e8b18853-ba79-4204-9509-175436fce0d9,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-workflow4wc7m/series-workflow4wc7m-build-action-1759263971/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-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 20:23:35 +0000 UTC FinishedAt: 2026-08-01 20:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 20:23:35 +0000 UTC FinishedAt: 2026-08-01 20:26:40 +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":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"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:*dc6ff835-2b61-4a72-aa05-704117ea0007,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8b18853-ba79-4204-9509-175436fce0d9,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-workflow4wc7m/series-workflow4wc7m-build-action-3360169822/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-workflow4wc7m/series-workflow4wc7m-build-action-1759263971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 20:23:35 +0000 UTC FinishedAt: 2026-08-01 20:23:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 20:23:35 +0000 UTC FinishedAt: 2026-08-01 20:23:40 +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":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"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-workflow4wc7m/series-workflow4wc7m-convert-artifact-3770994824/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 20:23:35 +0000 UTC FinishedAt: 2026-08-01 20:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 20:23:35 +0000 UTC FinishedAt: 2026-08-01 20:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 20:23:35 +0000 UTC FinishedAt: 2026-08-01 20:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 20:23:46 +0000 UTC FinishedAt: 2026-08-01 20:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wc7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_s390_inject_vcpu","kvm_s390_faultin_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fff02191-90d5-4c05-89bf-46f5979f4da1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 20:23:46 +0000 UTC FinishedAt: 2026-08-01 20:26:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc6ff835-2b61-4a72-aa05-704117ea0007,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8b18853-ba79-4204-9509-175436fce0d9,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-workflow4wc7m/series-workflow4wc7m-build-action-3360169822/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-workflow4wc7m/series-workflow4wc7m-build-action-1759263971/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-workflow4wc7m/series-workflow4wc7m-convert-artifact-3770994824/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,}