Name: series-workflowh94mb Phase: Running StartedAt: 2026-09-06 00:29:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[0] Phase: Succeeded StartedAt: 2026-09-06 00:29:56 +0000 UTC FinishedAt: 2026-09-06 00:32:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 00:29:56 +0000 UTC FinishedAt: 2026-09-06 00:32:02 +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": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_SMACK", "CACHEFILES", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_SMACK", "CACHEFILES", "BPF_LSM" ], "series_id": "f32cc858-0948-4bec-8a4c-6328bcedc58b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "security_inode_create", "security_inode_link", "security_inode_symlink", "security_inode_mkdir", "security_inode_mknod", "selinux_inode_create", "selinux_inode_link", "selinux_inode_symlink", "selinux_inode_mkdir", "selinux_inode_mknod", "smack_inode_link", "cachefiles_check_cache_dir", "vfs_mkobj" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzbWFja19pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O2NhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyJiMzNDssCiAgICAmIzM0O3Zmc19ta29iaiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgTFNNIGlub2RlIGhvb2sgcHJvdG90eXBlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBpbnZvY2F0aW9ucyBpbiB0aGUgVkZTIGxheWVyIChmcy9uYW1laS5jLCBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMpIGFuZCBzZWN1cml0eSBtb2R1bGVzIHRvIHByb3BhZ2F0ZSB0aGUgJiMzOTtzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCYjMzk7IGFyZ3VtZW50LCBhbG9uZyB3aXRoIGFkZGluZyBCUEYgTFNNIHRlc3QgY2FzZXMgZm9yIHRoZXNlIGhvb2tzLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgc2lnbmF0dXJlIGFuZCBjYWxsaW5nIGNvbnZlbnRpb24gdXBkYXRlcyBwYXNzaW5nIGFuIGV4aXN0aW5nIGlkbWFwIHBvaW50ZXIgdGhyb3VnaCB0byB0aGUgTFNNIGhvb2sgaW5mcmFzdHJ1Y3R1cmUuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTFNNIGlub2RlIGhvb2sgaW50ZXJmYWNlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBjYWxsZXJzIGFjcm9zcyB0aGUgVkZTIGxheWVyLCBDYWNoZUZpbGVzLCBTRUxpbnV4LCBhbmQgU21hY2sgdG8gcGFzcyB0aGUgbW91bnQgaWRtYXAgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBhbHRlcnMgY29yZSBWRlMgYW5kIExTTSBpbnRlcmFjdGlvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCByZWxldmFudCB0byBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTVkMGYyMzdjMDJhM2VhNWU4YTEyZTExZjFjZWQyNjFlYjExOTIzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MzE6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5pbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbkBAIC01MSwxNCAmIzQzOzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuJiM0MztcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkXCYjMzQ7LFxuIFx0XHQgICAgICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuJiM0MztcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWRcJiMzNDssXG4gXHRcdCAgICAgICByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuY1xuQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xuIFxuQEAgLTY5NSw3ICYjNDM7Njk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcbiBcdGlmICh1bmxpa2VseSgoKGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuJiM0MztcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1x0Lyogc2hvdWxkbiYjMzk7dCBpdCBiZSBFTk9TWVM/ICovXG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyAmIzQzOzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFxuIFx0bW9kZSBcdTAwMjY9IFNfSUFMTFVHTztcbiBcdG1vZGUgfD0gU19JRlJFRztcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XG5AQCAtNDMyOCw3ICYjNDM7NDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyAmIzQzOzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbkBAIC01NzgzLDcgJiM0Mzs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01OTA3LDcgJiM0Mzs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBpbnQgKnhhdHRyX2NvdW50KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4mIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgYm9vbCByY3UpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0IHN0cnVjdCBpYXR0ciAqYXR0cilcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdCAgICAgIGludCBtYXNrKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC05MDIsOSAmIzQzOzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MTMsOSAmIzQzOzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0XHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NzQsNyAmIzQzOzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC0xNjE0LDYgJiM0MzsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWRcbiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZVxuQEAgLTE2MjIsMTIgJiM0MzsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbiBcbkBAIC0xNjQ4LDYgJiM0MzsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZVxuICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5XG4gICogQG5ld19kZW50cnk6IG5ldyBsaW5rXG5AQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmtcbiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lXG5AQCAtMTY5MCwxNiAmIzQzOzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuIH1cbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICYjNDM7MTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XG4gXG5AQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICYjNDM7MTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIH1cbiBcbiAvKipcbkBAIC0xODIzLDYgJiM0MzsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgJiM0MzsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTMwNzQsMTIgJiM0MzszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgXHUwMDI2YWQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiAmIzQzOzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xuIH1cbkBAIC0zMTA0LDcgJiM0MzszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xuIH1cbkBAIC0zMjM2LDEzICYjNDM7MzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWRcbiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkXG4gICpcbiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG9cbiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgJiM0MzsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGlua1xuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XG4gICogQGRpcjogdW51c2VkXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHN0cnVjdCBzbWFja19rbm93biAqaXNwO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICYjNDM7MTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCAmIzQzOzEsMzAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4gXG4gLypcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtsc20uc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bHNtX3RhaWxjYWxsLnNrZWwuaFwmIzM0O1xuIFxuIGNoYXIgKkNNRF9BUkdTW10gPSB7XCYjMzQ7dHJ1ZVwmIzM0OywgTlVMTH07XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcdTAwM2NcdTAwM2MgNikgLSAxLFxuJiM0Mzt9O1xuJiM0MztcbiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIHtcbiBcdGludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1cztcbkBAIC0zMCw2ICYjNDM7NDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7XG4mIzQzO1x0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbiYjNDM7XHRcdHNhdmVkX2Vycm5vID0gRUlPO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRpZiAoc2F2ZWRfZXJybm8pIHtcbiYjNDM7XHRcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbNjRdO1xuJiM0MztcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7L3Byb2MvJWQvJXNcJiMzNDssIHBpZCwgbmFtZSk7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuJiM0MztcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoWzY0XTtcbiYjNDM7XHRwaWRfdCBwaWQsIHdhaXRlZDtcbiYjNDM7XHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKHBpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAocGlkID09IDApIHtcbiYjNDM7XHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuJiM0MztcdFx0XHRfZXhpdCgxKTtcbiYjNDM7XHRcdHJhaXNlKFNJR1NUT1ApO1xuJiM0MztcdFx0X2V4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCBXVU5UUkFDRUQpO1xuJiM0MztcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuJiM0MztcdGlmICh3YWl0ZWQgIT0gcGlkKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcbiYjNDM7XHRcdHBpZCA9IC0xO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqL1xuJiM0MztcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O3NldGdyb3Vwc1wmIzM0OywgXCYjMzQ7ZGVueVwmIzM0OykgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O3VpZF9tYXBcJiMzNDssIFwmIzM0OzAgMCAxXCYjMzQ7KSB8fFxuJiM0MztcdCAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O2dpZF9tYXBcJiMzNDssIFwmIzM0OzAgMCAxXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jLyVkL25zL3VzZXJcJiMzNDssIHBpZCk7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuJiM0MztcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGlmIChwaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbiYjNDM7XHRcdGRvIHtcbiYjNDM7XHRcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApO1xuJiM0MztcdFx0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4mIzQzO1x0fVxuJiM0MztcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbiYjNDM7XHRpZiAodXNlcm5zX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovXG4mIzQzO1x0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFwmIzM0O3RtcGZzXCYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZzZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRtbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApO1xuJiM0MztcdGlmIChtbnRmZCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcbiYjNDM7XHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcJiMzNDtcJiMzNDssIEFUX0VNUFRZX1BBVEgsIFx1MDAyNmF0dHIsXG4mIzQzO1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuJiM0MztcdFx0Y2xvc2UobW50ZmQpO1xuJiM0MztcdFx0bW50ZmQgPSAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRpZiAoZnNmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmc2ZkKTtcbiYjNDM7XHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHVzZXJuc19mZCk7XG4mIzQzO1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbiYjNDM7XHRyZXR1cm4gbW50ZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gLTEsIHJldCA9IC0xO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5hdChkaXJmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuJiM0MztcdFx0ICAgIDA2MDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwmIzM0O2RpclwmIzM0OywgMDcwMCksIFwmIzM0O21rZGlyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcJiMzNDt0YXJnZXRcJiMzNDssIGRpcmZkLCBcJiMzNDtzeW1saW5rXCYjMzQ7KSwgXCYjMzQ7c3ltbGlua1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFwmIzM0O2ZpbGVcJiMzNDssIGRpcmZkLCBcJiMzNDtsaW5rXCYjMzQ7LCAwKSwgXCYjMzQ7bGlua1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgXCYjMzQ7Zmlmb1wmIzM0OywgMDYwMCksIFwmIzM0O21rbm9kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7bGlua1wmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2ZpZm9cJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRpcmZkLCBcJiMzNDtzeW1saW5rXCYjMzQ7LCAwKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2RpclwmIzM0OywgQVRfUkVNT1ZFRElSKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHRtcGRpcltdID0gXCYjMzQ7L3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xuJiM0MztcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuJiM0MztcdGludCByZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCYjMzQ7bWtkdGVtcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcJiMzNDtvcGVuX3RtcGRpclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCYjMzQ7Y3JlYXRlX2lkbWFwcGVkX3RtcGZzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcJiMzNDtpZGVudGl0eV9pZG1hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7aWRtYXBwZWRfbW91bnRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxuJiM0MztcdFx0XHRcJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuXCYjMzQ7KSA/IDAgOiAtMTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoaWRtYXBwZWRfZGlyZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuJiM0MztcdGlmIChkaXJmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShkaXJmZCk7XG4mIzQzO1x0cm1kaXIodG1wZGlyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiAmIzQzOzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4gXG4mIzQzO1x0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X2xzbV9pbm9kZV9pZG1hcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdGVyciA9IHN0YWNrX21wcm90ZWN0KCk7XG4gXHRpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCBcJiMzNDtzdGFja19tcHJvdGVjdFwmIzM0OykgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCYjMzQ7c3RhY2tfbXByb3RlY3RcJiMzNDspKVxuQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7XG4gaW50IG1wcm90ZWN0X2NvdW50ID0gMDtcbiBpbnQgYnBybV9jb3VudCA9IDA7XG4mIzQzO19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbiYjNDM7XHRJTk9ERV9JRE1BUF9MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAxLFxuJiM0MztcdElOT0RFX0lETUFQX1NZTUxJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDIsXG4mIzQzO1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4mIzQzO1x0SU5PREVfSURNQVBfTUtOT0RcdD0gMVUgXHUwMDNjXHUwMDNjIDQsXG4mIzQzO1x0SU5PREVfSURNQVBfUEVSTUlTU0lPTlx0PSAxVSBcdTAwM2NcdTAwM2MgNSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4mIzQzO3tcbiYjNDM7XHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpZG1hcC1cdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxuJiM0MztcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9jcmVhdGVcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfbGlua1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX3N5bWxpbmtcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX21rZGlyXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9ta25vZFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9wZXJtaXNzaW9uXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtsc20vZmlsZV9tcHJvdGVjdFwmIzM0OylcbiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX21rZGlyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX21rbm9kJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfbGluayYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX21rbm9kJiMzNDssCiAgICAmIzM0O3NtYWNrX2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7Y2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXImIzM0OywKICAgICYjMzQ7dmZzX21rb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTFNNIGlub2RlIGhvb2sgaW50ZXJmYWNlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBjYWxsZXJzIGFjcm9zcyB0aGUgVkZTIGxheWVyLCBDYWNoZUZpbGVzLCBTRUxpbnV4LCBhbmQgU21hY2sgdG8gcGFzcyB0aGUgbW91bnQgaWRtYXAgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBhbHRlcnMgY29yZSBWRlMgYW5kIExTTSBpbnRlcmFjdGlvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCByZWxldmFudCB0byBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTVkMGYyMzdjMDJhM2VhNWU4YTEyZTExZjFjZWQyNjFlYjExOTIzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDA6MzE6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwpAQCAtNTEsMTQgJiM0Mzs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKJiM0MzsJcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKSB7CiAJCXByX2VycigmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWQmIzM0OywKIAkJICAgICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgmYW1wO25vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXByX2VycigmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWQmIzM0OywKIAkJICAgICAgIHJldCk7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKHVubGlrZWx5KHJldHZhbCkpCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pOwogCkBAIC02OTUsNyAmIzQzOzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkCiAJaWYgKHVubGlrZWx5KCgoaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyAwMTExKSAhPSAwMTExKSB8fCAhbm9fYWNsX2lub2RlKGlub2RlKSkpCiAJCXJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiAKIC8qKgpAQCAtNDE4OCw3ICYjNDM7NDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAkJcmV0dXJuIC1FQUNDRVM7CS8qIHNob3VsZG4mIzM5O3QgaXQgYmUgRU5PU1lTPyAqLwogCiAJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CkBAIC00MjEyLDcgJiM0Mzs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAogCW1vZGUgJmFtcDs9IFNfSUFMTFVHTzsKIAltb2RlIHw9IFNfSUZSRUc7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgmYW1wO25vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAllcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpOwpAQCAtNDMyOCw3ICYjNDM7NDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiB9CiAKIC8qKgpAQCAtNTI1OCw3ICYjNDM7NTI1OCw3IEBAIGludCB2ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTUzOTUsNyAmIzQzOzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlnb3RvIGVycjsKIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycjsKIApAQCAtNTc4Myw3ICYjNDM7NTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFkaXItJmd0O2lfb3AtJmd0O3N5bWxpbmspCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtNTkwNyw3ICYjNDM7NTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTEyMCwyNiAmIzQzOzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBpbnQgKnhhdHRyX2NvdW50KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfdW5saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSBjb25zdCBjaGFyICpvbGRfbmFtZSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgYm9vbCByY3UpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgc3RydWN0IGlhdHRyICphdHRyKQogTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTQwNCwyNCAmIzQzOzQwNCwyOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpOwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwogdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICAgY29uc3QgY2hhciAqb2xkX25hbWUpOwotaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkJCSAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LAogCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICAgIGJvb2wgcmN1KTsKLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkgICAgICBpbnQgbWFzayk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC05MDIsOSAmIzQzOzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQkgdW1vZGVfdCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCXN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJdW1vZGVfdCBtb2RlKQogewogCXJldHVybiAwOwogfQpAQCAtOTEzLDkgJiM0Mzs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkCiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeyB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKLQkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCi0JCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05MjYsMTYgJiM0Mzs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJaW50IG1vZGUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJICAgICAgIGludCBtb2RlKQogewogCXJldHVybiAwOwogfQpAQCAtOTQ2LDkgJiM0Mzs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJICAgICAgIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05NzQsNyAmIzQzOzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC0xNjE0LDYgJiM0MzsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWQKICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlCkBAIC0xNjIyLDEyICYjNDM7MTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgIHVtb2RlX3QgbW9kZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTsKIApAQCAtMTY0OCw2ICYjNDM7MTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlCiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeQogICogQG5ld19kZW50cnk6IG5ldyBsaW5rCkBAIC0xNjU2LDEyICYjNDM7MTY1OCwxMiBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogfQogCiAvKioKQEAgLTE2ODIsNiAmIzQzOzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogc3ltYm9saWMgbGluawogICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZQpAQCAtMTY5MCwxNiAmIzQzOzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKIH0KIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeQogICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZQpAQCAtMTcwOSwxMSAmIzQzOzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpOwogCkBAIC0xNzM1LDYgJiM0MzsxNzQwLDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogbmV3IGZpbGUKICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlCkBAIC0xNzQ3LDEyICYjNDM7MTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKIH0KIAogLyoqCkBAIC0xODIzLDYgJiM0MzsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IGlub2RlCiAgKiBAbWFzazogYWNjZXNzIG1hc2sKICAqCkBAIC0xODM1LDExICYjNDM7MTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0zMDc0LDEyICYjNDM7MzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgJmFtcDthZCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTsKIH0KQEAgLTMwODksMTIgJiM0MzszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpOwogfQpAQCAtMzEwNCw3ICYjNDM7MzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCXJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpOwogfQpAQCAtMzIzNiwxMyAmIzQzOzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYywKIAogLyoqCiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGUKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZAogICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZAogICoKICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0bwogICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKIHsKIAlpbnQgbWFzazsKIAl1MzIgcGVybXM7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC0xMDg5LDE0ICYjNDM7MTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAKIC8qKgogICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmsKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQG9sZF9kZW50cnk6IHRoZSBleGlzdGluZyBvYmplY3QKICAqIEBkaXI6IHVudXNlZAogICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0CiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJc3RydWN0IHNtYWNrX2tub3duICppc3A7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwpAQCAtMTIyNiw2ICYjNDM7MTIyNyw3IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAogCiAvKioKICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKQomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvbgogICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkCiAgKgpAQCAtMTIzMyw3ICYjNDM7MTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgIGludCBtYXNrKQogewogCXN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS0mZ3Q7aV9zYik7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCkBAIC0xLDE4ICYjNDM7MSwzMCBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOwogI2luY2x1ZGUgJiMzNDtsc20uc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bHNtX3RhaWxjYWxsLnNrZWwuaCYjMzQ7CiAKIGNoYXIgKkNNRF9BUkdTW10gPSB7JiMzNDt0cnVlJiMzNDssIE5VTEx9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUlOT0RFX0lETUFQX0FMTCA9ICgxVSAmbHQ7Jmx0OyA2KSAtIDEsCiYjNDM7fTsKJiM0MzsKIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpCiB7CiAJaW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzOwpAQCAtMzAsNiAmIzQzOzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogCXJldHVybiAtRUlOVkFMOwogfQogCiYjNDM7c3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpOwomIzQzOwl9IHdoaWxlIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpCiYjNDM7ewomIzQzOwlzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTsKJiM0MzsJaW50IGZkLCBzYXZlZF9lcnJubyA9IDA7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbikKJiM0MzsJCXNhdmVkX2Vycm5vID0gRUlPOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChzYXZlZF9lcnJubykgewomIzQzOwkJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XTsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkLyVzJiMzNDssIHBpZCwgbmFtZSk7CiYjNDM7CWlmIChsZW4gJmx0OyAwIHx8IChzaXplX3QpbGVuICZndDs9IHNpemVvZihwYXRoKSkgewomIzQzOwkJZXJybm8gPSBFT1ZFUkZMT1c7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CXBpZF90IHBpZCwgd2FpdGVkOwomIzQzOwlpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmIChwaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCWlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKQomIzQzOwkJCV9leGl0KDEpOwomIzQzOwkJcmFpc2UoU0lHU1RPUCk7CiYjNDM7CQlfZXhpdCgwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQl3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgJmFtcDtzdGF0dXMsIFdVTlRSQUNFRCk7CiYjNDM7CX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CWlmICh3YWl0ZWQgIT0gcGlkKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7CiYjNDM7CQlwaWQgPSAtMTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovCiYjNDM7CWlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsICYjMzQ7c2V0Z3JvdXBzJiMzNDssICYjMzQ7ZGVueSYjMzQ7KSAmYW1wOyZhbXA7IGVycm5vICE9IEVOT0VOVCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3VpZF9tYXAmIzM0OywgJiMzNDswIDAgMSYjMzQ7KSB8fAomIzQzOwkgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O2dpZF9tYXAmIzM0OywgJiMzNDswIDAgMSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7L3Byb2MvJWQvbnMvdXNlciYjMzQ7LCBwaWQpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWlmIChwaWQgJmd0OyAwKSB7CiYjNDM7CQlraWxsKHBpZCwgU0lHS0lMTCk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJd2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApOwomIzQzOwkJfSB3aGlsZSAod2FpdGVkICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsJfQomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3JlYXRlX2lkbWFwcGVkX3RtcGZzKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0gewomIzQzOwkJLmF0dHJfc2V0ID0gTU9VTlRfQVRUUl9JRE1BUCwKJiM0MzsJfTsKJiM0MzsJaW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xOwomIzQzOwomIzQzOwl1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7CiYjNDM7CWlmICh1c2VybnNfZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovCiYjNDM7CWZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCAmIzM0O3RtcGZzJiMzNDssIEZTT1BFTl9DTE9FWEVDKTsKJiM0MzsJaWYgKGZzZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7CiYjNDM7CWlmIChtbnRmZCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7CiYjNDM7CWlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsICYjMzQ7JiMzNDssIEFUX0VNUFRZX1BBVEgsICZhbXA7YXR0ciwKJiM0MzsJCSAgICBzaXplb2YoYXR0cikpKSB7CiYjNDM7CQljbG9zZShtbnRmZCk7CiYjNDM7CQltbnRmZCA9IC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAoZnNmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZnNmZCk7CiYjNDM7CWlmICh1c2VybnNfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHVzZXJuc19mZCk7CiYjNDM7CWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CXJldHVybiBtbnRmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSAtMSwgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLAomIzQzOwkJICAgIDA2MDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlmZCA9IC0xOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCAwNzAwKSwgJiMzNDtta2RpciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoJiMzNDt0YXJnZXQmIzM0OywgZGlyZmQsICYjMzQ7c3ltbGluayYjMzQ7KSwgJiMzNDtzeW1saW5rJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGxpbmthdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCksICYjMzQ7bGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgJiMzNDtmaWZvJiMzNDssIDA2MDApLCAmIzM0O21rbm9kJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IDA7CiYjNDM7b3V0OgomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7bGluayYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7c3ltbGluayYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZGlyJiMzNDssIEFUX1JFTU9WRURJUik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgdG1wZGlyW10gPSAmIzM0Oy92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWCYjMzQ7OwomIzQzOwlfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDsKJiM0MzsJaW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7CiYjNDM7CWludCByZXQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgJiMzNDtta2R0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsICYjMzQ7b3Blbl90bXBkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsICYjMzQ7Y3JlYXRlX2lkbWFwcGVkX3RtcGZzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgJiMzNDtpZGVudGl0eV9pZG1hcCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksCiYjNDM7CQkgICAgICAgJiMzNDtpZG1hcHBlZF9tb3VudCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLAomIzQzOwkJICAgICAgICYjMzQ7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlyZXQgPSBBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCQkmIzM0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4mIzM0OykgPyAwIDogLTE7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoaWRtYXBwZWRfZGlyZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGlkbWFwcGVkX2RpcmZkKTsKJiM0MzsJaWYgKGRpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShkaXJmZCk7CiYjNDM7CXJtZGlyKHRtcGRpcik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogewogCXN0cnVjdCBicGZfbGluayAqbGluazsKQEAgLTUzLDYgJiM0MzsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogCiAJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiAKJiM0MzsJZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X2xzbV9pbm9kZV9pZG1hcCYjMzQ7KSkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJZXJyID0gc3RhY2tfbXByb3RlY3QoKTsKIAlpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCAmIzM0O3N0YWNrX21wcm90ZWN0JiMzNDspIHx8CiAJICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCAmIzM0O3N0YWNrX21wcm90ZWN0JiMzNDspKQpAQCAtNzEsNiAmIzQzOzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAlza2VsLSZndDtic3MtJmd0O2NvcHlfdGVzdCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDticHJtX2NvdW50ID0gMDsKIAlza2VsLSZndDtic3MtJmd0O21wcm90ZWN0X2NvdW50ID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCmluZGV4IDdkZTE3M2RhZjI3YjYuLjdlMzJmYmRkYmZhZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKQEAgLTg0LDYgJiM0Mzs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7CiBpbnQgbXByb3RlY3RfY291bnQgPSAwOwogaW50IGJwcm1fY291bnQgPSAwOwomIzQzO19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzO19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9DUkVBVEUJPSAxVSAmbHQ7Jmx0OyAwLAomIzQzOwlJTk9ERV9JRE1BUF9MSU5LCT0gMVUgJmx0OyZsdDsgMSwKJiM0MzsJSU5PREVfSURNQVBfU1lNTElOSwk9IDFVICZsdDsmbHQ7IDIsCiYjNDM7CUlOT0RFX0lETUFQX01LRElSCT0gMVUgJmx0OyZsdDsgMywKJiM0MzsJSU5PREVfSURNQVBfTUtOT0QJPSAxVSAmbHQ7Jmx0OyA0LAomIzQzOwlJTk9ERV9JRE1BUF9QRVJNSVNTSU9OCT0gMVUgJmx0OyZsdDsgNSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkICZhbXA7JmFtcDsgaWRtYXA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBpZG1hcC0mZ3Q7dWlkX21hcC5ucl9leHRlbnRzID09IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgaWRtYXAtJmd0O2dpZF9tYXAubnJfZXh0ZW50cyA9PSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQkgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJaWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChpc19pZGVudGl0eV9pZG1hcChpZG1hcCkpCiYjNDM7CQlpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7CiYjNDM7CWVsc2UKJiM0MzsJCWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vazsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9jcmVhdGUmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX2xpbmsmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX3N5bWxpbmsmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta2RpciYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX21rbm9kJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9wZXJtaXNzaW9uJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpOwomIzQzO30KIAogU0VDKCYjMzQ7bHNtL2ZpbGVfbXByb3RlY3QmIzM0OykKIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNTQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQmIzM5O3Mgd29ydGggdG9zc2luZyBpbnRvIHRoZSBzeXprYWxsZXIgZ3JpbmRlci4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBmaWxlcyB0b3VjaGVkIC0gYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYSBidW5jaCBvZiBgaW5jbHVkZS9saW51eC8qYCBoZWFkZXJzLCB2YXJpb3VzIGBzZWN1cml0eS8qYCBmaWxlcywgYW5kIGV2ZW4gc29tZSBCUEYgc2VsZi10ZXN0cyDigJMgaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBUaGlzIHBhdGNoIGlzIGNsZWFybHkgcG9raW5nIGFyb3VuZCBpbiBzZW5zaXRpdmUgYXJlYXM6IHRoZSBmaWxlc3lzdGVtcywgbmFtaW5nIGludGVyZmFjZSwgYW5kIHRoZSBzZWN1cml0eSBsYXllci4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW5qZWN0aW5nIGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBpbnRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzLiBUaGluayBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCB0aGUgd2hvbGUgc3VpdGUuIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhlIGhvb2sgc2lnbmF0dXJlcyBpbiB0aGUgcmVsZXZhbnQgTFNNIHN1YnN5c3RlbXMgKFNFTGludXgsIFNtYWNrKSBhbmQgdGhlIEJQRiBzZWxmLXRlc3RzLiBUaGF0IG1lYW5zIHRoZXnigJlyZSB0b3VjaGluZyB0aGUgY29yZSBMU00gZGlzcGF0Y2hlcnMgYW5kLCBieSBleHRlbnNpb24sICphbnkqIHNlY3VyaXR5IG1vZHVsZXMgdGhhdCBkZXBlbmQgb24gdGhlbS4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSB0aGVzZSBtb2RpZmljYXRpb25zIGhpdHRpbmcgY29yZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlPyBJIGNhbiBzZWUgaXQsIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUgZmlsZXMsIGBmcy9uYW1laS5jYCB3aGljaCBpbmNsdWRlcyBmdW5kYW1lbnRhbCBWRlMgb3BlcmF0aW9ucyBsaWtlIGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGB2ZnNfbWtub2RgLCBhbGwgdGhlIHdheSBkb3duIHRvIGBpbm9kZV9wZXJtaXNzaW9uYC4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGlzIHRoZSBMU00gZGlzcGF0Y2hlciBpdHNlbGYsIHdoaWNoIGlzIGFsd2F5cyBpbiB0aGUgY3JpdGljYWwgcGF0aC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgVkZTIHBhdGggcmVzb2x1dGlvbiBhbmQgaW5vZGUgb3BlcmF0aW9ucyAob3BlbiwgbWtkaXIsIG1rbm9kLCBzeW1saW5rLCBsaW5rLCBldGMuKSBhbmQgc2VjdXJpdHkgZnJhbWV3b3JrIChMU00pLgoKQWNjb3JkaW5nIHRvIHNlY3Rpb24gMywgYW55dGhpbmcgdG91Y2hpbmcgY29yZSBWRlMsIExTTSBpbnRlcmZhY2VzLCBvciBhbnkgcmVmYWN0b3JpbmdzIG9mIGFsZ29yaXRobXMsIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nIHNob3VsZCBiZSB3b3J0aCBmdXp6aW5nLiAqKldvcnRoRnV6emluZyBtdXN0IGJlIHRydWUuKioKClNvLCB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIHdlIHNob3VsZCBiZSBmb2N1c2luZyBvbiDigJMgdGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQsIG9yIGNoZWNrIEtjb25maWcuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgdGhlc2Ugc2VjdXJpdHkgZmVhdHVyZXMgb3IgYW55IG5ldyBzeW1ib2xzIHRoYXQgbWlnaHQgZXhwb3NlIG5ldyBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0VDVVJJVFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDIxNzAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbnNlY3VyaXR5L0tjb25maWc9OD1zb3VyY2UgXCYjMzQ7c2VjdXJpdHkva2V5cy9LY29uZmlnXCYjMzQ7XG5zZWN1cml0eS9LY29uZmlnLTktXG5zZWN1cml0eS9LY29uZmlnOjEwOmNvbmZpZyBTRUNVUklUWV9ETUVTR19SRVNUUklDVFxuc2VjdXJpdHkvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7UmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xuLS1cbnNlY3VyaXR5L0tjb25maWctNzItXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTg1LVxuc2VjdXJpdHkvS2NvbmZpZzo4Njpjb25maWcgSEFTX1NFQ1VSSVRZX0FVRElUXG5zZWN1cml0eS9LY29uZmlnLTg3LVx0ZGVmX2Jvb2wgeVxuc2VjdXJpdHkvS2NvbmZpZy04OC1cdGRlcGVuZHMgb24gQVVESVRcbnNlY3VyaXR5L0tjb25maWc6ODk6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG5zZWN1cml0eS9LY29uZmlnLTkwLVxuc2VjdXJpdHkvS2NvbmZpZzo5MTpjb25maWcgU0VDVVJJVFlGU1xuc2VjdXJpdHkvS2NvbmZpZy05Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTk4LVxuc2VjdXJpdHkvS2NvbmZpZzo5OTpjb25maWcgU0VDVVJJVFlfTkVUV09SS1xuc2VjdXJpdHkvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O1NvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1wmIzM0O1xuc2VjdXJpdHkvS2NvbmZpZzoxMDE6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG5zZWN1cml0eS9LY29uZmlnLTEwMi1cdGhlbHBcbi0tXG5zZWN1cml0eS9LY29uZmlnLTEwNy1cbnNlY3VyaXR5L0tjb25maWc6MTA4OmNvbmZpZyBTRUNVUklUWV9JTkZJTklCQU5EXG5zZWN1cml0eS9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7SW5maW5pYmFuZCBTZWN1cml0eSBIb29rc1wmIzM0O1xuc2VjdXJpdHkvS2NvbmZpZzoxMTA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EXG5zZWN1cml0eS9LY29uZmlnLTExMS1cdGhlbHBcbi0tXG5zZWN1cml0eS9LY29uZmlnLTExNi1cbnNlY3VyaXR5L0tjb25maWc6MTE3OmNvbmZpZyBTRUNVUklUWV9ORVRXT1JLX1hGUk1cbnNlY3VyaXR5L0tjb25maWctMTE4LVx0Ym9vbCBcJiMzNDtYRlJNIChJUFNlYykgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1wmIzM0O1xuc2VjdXJpdHkvS2NvbmZpZzoxMTk6XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IFNFQ1VSSVRZX05FVFdPUktcbnNlY3VyaXR5L0tjb25maWctMTIwLVx0aGVscFxuLS1cbnNlY3VyaXR5L0tjb25maWctMTI5LVxuc2VjdXJpdHkvS2NvbmZpZzoxMzA6Y29uZmlnIFNFQ1VSSVRZX1BBVEhcbnNlY3VyaXR5L0tjb25maWctMTMxLVx0Ym9vbCBcJiMzNDtTZWN1cml0eSBob29rcyBmb3IgcGF0aG5hbWUgYmFzZWQgYWNjZXNzIGNvbnRyb2xcJiMzNDtcbnNlY3VyaXR5L0tjb25maWc6MTMyOlx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZy0xMzMtXHRoZWxwXG4tLVxuc2VjdXJpdHkvS2NvbmZpZz0xNjk9Y29uZmlnIExTTV9NTUFQX01JTl9BRERSXG5zZWN1cml0eS9LY29uZmlnLTE3MC1cdGludCBcJiMzNDtMb3cgYWRkcmVzcyBzcGFjZSBmb3IgTFNNIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb25cJiMzNDtcbnNlY3VyaXR5L0tjb25maWc6MTcxOlx0ZGVwZW5kcyBvbiBTRUNVUklUWSBcdTAwMjZcdTAwMjYgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvS2NvbmZpZy0xNzItXHRkZWZhdWx0IDMyNzY4IGlmIEFSTSB8fCAoQVJNNjQgXHUwMDI2XHUwMDI2IENPTVBBVClcbi0tXG5zZWN1cml0eS9LY29uZmlnPTIzND1jaG9pY2VcbnNlY3VyaXR5L0tjb25maWctMjM1LVx0cHJvbXB0IFwmIzM0O0ZpcnN0IGxlZ2FjeSAmIzM5O21ham9yIExTTSYjMzk7IHRvIGJlIGluaXRpYWxpemVkXCYjMzQ7XG5zZWN1cml0eS9LY29uZmlnOjIzNjpcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlmIFNFQ1VSSVRZX1NFTElOVVhcbnNlY3VyaXR5L0tjb25maWc6MjM3Olx0ZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlmIFNFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9LY29uZmlnOjIzODpcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaWYgU0VDVVJJVFlfVE9NT1lPXG5zZWN1cml0eS9LY29uZmlnOjIzOTpcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9BUFBBUk1PUiBpZiBTRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvS2NvbmZpZzoyNDA6XHRkZWZhdWx0IERFRkFVTFRfU0VDVVJJVFlfREFDXG5zZWN1cml0eS9LY29uZmlnLTI0MS1cbnNlY3VyaXR5L0tjb25maWctMjQyLVx0aGVscFxuc2VjdXJpdHkvS2NvbmZpZzoyNDM6XHQgIFRoaXMgY2hvaWNlIGlzIHRoZXJlIG9ubHkgZm9yIGNvbnZlcnRpbmcgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlcbnNlY3VyaXR5L0tjb25maWctMjQ0LVx0ICBpbiBvbGQga2VybmVsIGNvbmZpZ3MgdG8gQ09ORklHX0xTTSBpbiBuZXcga2VybmVsIGNvbmZpZ3MuIERvbiYjMzk7dFxuLS1cbnNlY3VyaXR5L0tjb25maWctMjUwLVxuc2VjdXJpdHkvS2NvbmZpZzoyNTE6XHRjb25maWcgREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYXG5zZWN1cml0eS9LY29uZmlnOjI1MjpcdFx0Ym9vbCBcJiMzNDtTRUxpbnV4XCYjMzQ7IGlmIFNFQ1VSSVRZX1NFTElOVVg9eVxuc2VjdXJpdHkvS2NvbmZpZy0yNTMtXG5zZWN1cml0eS9LY29uZmlnOjI1NDpcdGNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9LY29uZmlnOjI1NTpcdFx0Ym9vbCBcJiMzNDtTaW1wbGlmaWVkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbFwmIzM0OyBpZiBTRUNVUklUWV9TTUFDSz15XG5zZWN1cml0eS9LY29uZmlnLTI1Ni1cbnNlY3VyaXR5L0tjb25maWc6MjU3Olx0Y29uZmlnIERFRkFVTFRfU0VDVVJJVFlfVE9NT1lPXG5zZWN1cml0eS9LY29uZmlnOjI1ODpcdFx0Ym9vbCBcJiMzNDtUT01PWU9cJiMzNDsgaWYgU0VDVVJJVFlfVE9NT1lPPXlcbnNlY3VyaXR5L0tjb25maWctMjU5LVxuc2VjdXJpdHkvS2NvbmZpZzoyNjA6XHRjb25maWcgREVGQVVMVF9TRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvS2NvbmZpZzoyNjE6XHRcdGJvb2wgXCYjMzQ7QXBwQXJtb3JcJiMzNDsgaWYgU0VDVVJJVFlfQVBQQVJNT1I9eVxuc2VjdXJpdHkvS2NvbmZpZy0yNjItXG5zZWN1cml0eS9LY29uZmlnOjI2MzpcdGNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX0RBQ1xuc2VjdXJpdHkvS2NvbmZpZy0yNjQtXHRcdGJvb2wgXCYjMzQ7VW5peCBEaXNjcmV0aW9uYXJ5IEFjY2VzcyBDb250cm9sc1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWc9MjY4PWNvbmZpZyBMU01cbnNlY3VyaXR5L0tjb25maWctMjY5LVx0c3RyaW5nIFwmIzM0O09yZGVyZWQgbGlzdCBvZiBlbmFibGVkIExTTXNcJiMzNDtcbnNlY3VyaXR5L0tjb25maWc6MjcwOlx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZzoyNzE6XHRkZWZhdWx0IFwmIzM0O2xhbmRsb2NrLGxvY2tkb3duLHlhbWEsbG9hZHBpbixzYWZlc2V0aWQsc21hY2ssc2VsaW51eCx0b21veW8sYXBwYXJtb3IsaXBlLGJwZlwmIzM0OyBpZiBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9LY29uZmlnOjI3MjpcdGRlZmF1bHQgXCYjMzQ7bGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxhcHBhcm1vcixzZWxpbnV4LHNtYWNrLHRvbW95byxpcGUsYnBmXCYjMzQ7IGlmIERFRkFVTFRfU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L0tjb25maWc6MjczOlx0ZGVmYXVsdCBcJiMzNDtsYW5kbG9jayxsb2NrZG93bix5YW1hLGxvYWRwaW4sc2FmZXNldGlkLHRvbW95byxpcGUsYnBmXCYjMzQ7IGlmIERFRkFVTFRfU0VDVVJJVFlfVE9NT1lPXG5zZWN1cml0eS9LY29uZmlnOjI3NDpcdGRlZmF1bHQgXCYjMzQ7bGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxpcGUsYnBmXCYjMzQ7IGlmIERFRkFVTFRfU0VDVVJJVFlfREFDXG5zZWN1cml0eS9LY29uZmlnLTI3NS1cdGRlZmF1bHQgXCYjMzQ7bGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxzZWxpbnV4LHNtYWNrLHRvbW95byxhcHBhcm1vcixpcGUsYnBmXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZy0yODQtXG5zZWN1cml0eS9LY29uZmlnOjI4NTpjb25maWcgU0VDVVJJVFlfQ09NTU9OQ0FQX0tVTklUX1RFU1RcbnNlY3VyaXR5L0tjb25maWctMjg2LVx0Ym9vbCBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgY29tbW9uY2FwXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5zZWN1cml0eS9NYWtlZmlsZT05PW9iai15XHRcdFx0XHRcdCYjNDM7PSBjb21tb25jYXAub1xuc2VjdXJpdHkvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1NFQ1VSSVRZKSBcdFx0XHQmIzQzOz0gbHNtX3N5c2NhbGxzLm9cbnNlY3VyaXR5L01ha2VmaWxlLTExLW9iai0kKENPTkZJR19NTVUpXHRcdFx0JiM0Mzs9IG1pbl9hZGRyLm9cbi0tXG5zZWN1cml0eS9NYWtlZmlsZS0xMy0jIE9iamVjdCBmaWxlIGxpc3RzXG5zZWN1cml0eS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfU0VDVVJJVFkpXHRcdFx0JiM0Mzs9IHNlY3VyaXR5Lm8gbHNtX25vdGlmaWVyLm8gbHNtX2luaXQub1xuc2VjdXJpdHkvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1NFQ1VSSVRZRlMpXHRcdCYjNDM7PSBpbm9kZS5vXG5zZWN1cml0eS9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWClcdFx0JiM0Mzs9IHNlbGludXgvXG5zZWN1cml0eS9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfU0VDVVJJVFlfU01BQ0spXHRcdCYjNDM7PSBzbWFjay9cbnNlY3VyaXR5L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19IQVNfU0VDVVJJVFlfQVVESVQpXHQmIzQzOz0gbHNtX2F1ZGl0Lm9cbnNlY3VyaXR5L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pXHRcdCYjNDM7PSB0b21veW8vXG5zZWN1cml0eS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IpXHRcdCYjNDM7PSBhcHBhcm1vci9cbnNlY3VyaXR5L01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19TRUNVUklUWV9ZQU1BKVx0XHQmIzQzOz0geWFtYS9cbnNlY3VyaXR5L01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19TRUNVUklUWV9MT0FEUElOKVx0XHQmIzQzOz0gbG9hZHBpbi9cbnNlY3VyaXR5L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19TRUNVUklUWV9TQUZFU0VUSUQpICAgICAgICYjNDM7PSBzYWZlc2V0aWQvXG5zZWN1cml0eS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfU0VDVVJJVFlfTE9DS0RPV05fTFNNKVx0JiM0Mzs9IGxvY2tkb3duL1xuc2VjdXJpdHkvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX0NHUk9VUFMpXHRcdFx0JiM0Mzs9IGRldmljZV9jZ3JvdXAub1xuc2VjdXJpdHkvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9MU00pXHRcdFx0JiM0Mzs9IGJwZi9cbnNlY3VyaXR5L01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19TRUNVUklUWV9MQU5ETE9DSylcdFx0JiM0Mzs9IGxhbmRsb2NrL1xuc2VjdXJpdHkvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX0lQRSlcdFx0JiM0Mzs9IGlwZS9cbnNlY3VyaXR5L01ha2VmaWxlLTI5LVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yLy5rdW5pdGNvbmZpZz0yPUNPTkZJR19ORVQ9eVxuc2VjdXJpdHkvYXBwYXJtb3IvLmt1bml0Y29uZmlnOjM6Q09ORklHX1NFQ1VSSVRZPXlcbnNlY3VyaXR5L2FwcGFybW9yLy5rdW5pdGNvbmZpZzo0OkNPTkZJR19TRUNVUklUWV9BUFBBUk1PUj15XG5zZWN1cml0eS9hcHBhcm1vci8ua3VuaXRjb25maWc6NTpDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVD15XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBcHBBcm1vciBzdXBwb3J0XCYjMzQ7XG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFx1MDAyNlx1MDAyNiBORVRcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNS1cdHNlbGVjdCBBVURJVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo2Olx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NzpcdHNlbGVjdCBTRUNVUklUWUZTXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg6XHRzZWxlY3QgU0VDVVJJVFlfTkVUV09SS1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05LVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcJiMzNDtcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MjA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTIxLVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXHRib29sIFwmIzM0O0J1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcJiMzNDtcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MzA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTMxLVx0ZGVmYXVsdCB5XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mzg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX01FU1NBR0VTXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEZWJ1ZyBtZXNzYWdlcyBlbmFibGVkIGJ5IGRlZmF1bHRcJiMzNDtcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQxLVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00Ni1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTAtXHRkZWZhdWx0IHlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTU4LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXCYjMzQ7XG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUl9JTlRST1NQRUNUX1BPTElDWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02Mi1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzAtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjcxOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFRcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzItICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHBvbGljeSBoYXNoIGludHJvc3BlY3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MzogICAgICAgZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTc0LSAgICAgICBkZWZhdWx0IHlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTgzLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7QWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NjpcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JfSU5UUk9TUEVDVF9QT0xJQ1lcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODctXHRzZWxlY3QgWlNURF9DT01QUkVTU1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTUtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9DT01QUkVTU0VEX1BPTElDWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cdGJvb2wgXCYjMzQ7QWxsb3cgbG9hZGluZyBwb2xpY3kgaW4gYSBjb21wcmVzc2VkIGZvcm1hdFwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo5ODpcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTktXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEwODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfUEFSQU5PSURfTE9BRFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O1BlcmZvcm0gZnVsbCB2ZXJpZmljYXRpb24gb2YgbG9hZGVkIHBvbGljeVwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMTA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTExMS1cdGRlZmF1bHQgeVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTE4LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMTk6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0tVTklUX1RFU1RcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTIwLVx0dHJpc3RhdGUgXCYjMzQ7QnVpbGQgS1VuaXQgdGVzdHMgZm9yIHBvbGljeV91bnBhY2suY1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEyMTpcdGRlcGVuZHMgb24gS1VOSVQgXHUwMDI2XHUwMDI2IFNFQ1VSSVRZX0FQUEFSTU9SXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEyMi1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtMy0jXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUikgJiM0Mzs9IGFwcGFybW9yLm9cbnNlY3VyaXR5L2FwcGFybW9yL01ha2VmaWxlLTUtXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZT02PWFwcGFybW9yLXkgOj0gYXBwYXJtb3Jmcy5vIGF1ZGl0Lm8gY2FwYWJpbGl0eS5vIHRhc2subyBpcGMubyBsaWIubyBtYXRjaC5vIFxcXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtOS0gICAgICAgICAgICAgIHBvbGljeV9jb21wYXQubyBhZl91bml4Lm8gYWZfaW5ldC5vXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZToxMDphcHBhcm1vci0kKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIKSAmIzQzOz0gY3J5cHRvLm9cbnNlY3VyaXR5L2FwcGFybW9yL01ha2VmaWxlLTExLVxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0tVTklUX1RFU1QpICYjNDM7PSBhcHBhcm1vcl9wb2xpY3lfdW5wYWNrX3Rlc3Qub1xuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtMTMtYXBwYXJtb3JfcG9saWN5X3VucGFja190ZXN0LW9ianMgJiM0Mzs9IHBvbGljeV91bnBhY2tfdGVzdC5vXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jPTc1PXN0cnVjdCByYXdkYXRhX2ZfZGF0YSB7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTc5LVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjgwOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTgxLVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYz0xNzI9c3RhdGljIHN0cnVjdCBhYV9wcm94eSAqZ2V0X3Byb3h5X2NvbW1vbl9yZWYoc3RydWN0IGFhX2NvbW1vbl9yZWYgKnJlZilcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTc5LVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE4MDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xODEtc3RhdGljIHN0cnVjdCBhYV9sb2FkZGF0YSAqZ2V0X2xvYWRkYXRhX2NvbW1vbl9yZWYoc3RydWN0IGFhX2NvbW1vbl9yZWYgKnJlZilcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9NDU5PXN0YXRpYyBzdHJ1Y3QgYWFfbG9hZGRhdGEgKmFhX3NpbXBsZV93cml0ZV90b19idWZmZXIoY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTQ4Ni1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzo0ODc6I2lmIGRlZmluZWQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZKSB8fCBcXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjQ4ODogICAgZGVmaW5lZChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWSlcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy00ODktc3RhdGljIGludCBkZWNvbXByZXNzX3pzdGQoY2hhciAqc3JjLCBzaXplX3Qgc2xlbiwgY2hhciAqZHN0LCBzaXplX3QgZGxlbilcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTI1LVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjUyNjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTI3LS8qKlxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYz01ODk9c3RhdGljIHN0cnVjdCBhYV9sb2FkZGF0YSAqYWFfZ2V0X2RhdGFfZnJvbV9jb21wcmVzc2VkKGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmIF9fYWx3YXlzX3VudXNlZCxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTk1LX1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzo1OTY6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9DT01QUkVTU0VEX1BPTElDWSAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTU5Ny1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTQ3MD1TRVFfTlNfRk9QUyhuYW1lKTtcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xNDcxLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE0NzI6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTQ3My1zdGF0aWMgaW50IHNlcV9uc19jb21wcmVzc19taW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTY2NT1pbnQgX19hYV9mc19jcmVhdGVfcmF3ZGF0YShzdHJ1Y3QgYWFfbnMgKm5zLCBzdHJ1Y3QgYWFfbG9hZGRhdGEgKnJhd2RhdGEpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE3MzMtfVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE3MzQ6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZICovXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTczNS1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTc4OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY3JlYXRlX3Byb2ZpbGVfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE3OTQtXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM6MTc5NTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xNzk2LXN0YXRpYyBpbnQgcHJvZmlsZV9kZXB0aChzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTk0Mz1pbnQgX19hYV9jcmVhdGVfcmF3ZGF0YV9zeW1saW5rX2RlbnRzKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xOTc5LVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE5ODA6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZICovXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTk4MS1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MjYyMz1zdGF0aWMgc3RydWN0IGFhX3Nmc19lbnRyeSBhYV9zZnNfZW50cnlfcG9saWN5W10gPSB7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTI2MzItXHRBQV9TRlNfRElSKFwmIzM0O3VuY29uZmluZWRfcmVzdHJpY3Rpb25zXCYjMzQ7LCAgIGFhX3Nmc19lbnRyeV91bmNvbmZpbmVkKSxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzoyNjMzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfQ09NUFJFU1NFRF9QT0xJQ1lcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0yNjM0LVx0QUFfU0ZTX0ZJTEVfQk9PTEVBTihcJiMzNDtjb21wcmVzc2VkX2xvYWRcJiMzNDssXHQxKSxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MjY5ND1zdGF0aWMgc3RydWN0IGFhX3Nmc19lbnRyeSBhYV9zZnNfZW50cnlfYXBwYXJtb3JbXSA9IHtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMjcwMC1cdEFBX1NGU19GSUxFX0ZPUFMoXCYjMzQ7cHJvZmlsZXNcJiMzNDssIDA0NDQsIFx1MDAyNmFhX3Nmc19wcm9maWxlc19mb3BzKSxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzoyNzAxOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTI3MDItXHRBQV9TRlNfRklMRV9GT1BTKFwmIzM0O3Jhd19kYXRhX2NvbXByZXNzaW9uX2xldmVsX21pblwmIzM0OywgMDQ0NCwgXHUwMDI2c2VxX25zX2NvbXByZXNzX21pbl9mb3BzKSxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yLmg9NTY9ZXh0ZXJuIHVuc2lnbmVkIGludCBhYV9nX3BhdGhfbWF4O1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oLTU3LVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oOjU4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oLTU5LSNkZWZpbmUgQUFfTUlOX0NMRVZFTCB6c3RkX21pbl9jbGV2ZWwoKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaC02NS0jZGVmaW5lIEFBX0RFRkFVTFRfQ0xFVkVMIDBcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaDo2NjojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkgKi9cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaC02Ny1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yZnMuaD0xMjE9c3RydWN0IGFhX2xvYWRkYXRhO1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmgtMTIyLVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmg6MTIzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmgtMTI0LXZvaWQgX19hYV9mc19yZW1vdmVfcmF3ZGF0YShzdHJ1Y3QgYWFfbG9hZGRhdGEgKnJhd2RhdGEpO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oPTE0NT1zdGF0aWMgaW5saW5lIGludCBfX2FhX2NyZWF0ZV9yYXdkYXRhX3N5bWxpbmtfZGVudHMoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmgtMTQ4LX1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oOjE0OTojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkgKi9cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oLTE1MC1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2NyeXB0by5oLTE0LVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9jcnlwdG8uaDoxNTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvY3J5cHRvLmgtMTYtaW50IGluaXRfcHJvZmlsZV9oYXNoKHZvaWQpO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbGliLmg9NDg9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9saWIuaC02Mi1cdH0gd2hpbGUgKDApXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2xpYi5oOjYzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9saWIuaC02NC0jZGVmaW5lIEFBX0JVR19GTVQoWCwgZm10LCBhcmdzLi4uKVx0XHRcdFx0XHRcXFxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jPTE5Mjk9bW9kdWxlX3BhcmFtX2NhbGwobW9kZSwgcGFyYW1fc2V0X21vZGUsIHBhcmFtX2dldF9tb2RlLFxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzItLyogd2hldGhlciBwb2xpY3kgdmVyaWZpY2F0aW9uIGhhc2hpbmcgaXMgZW5hYmxlZCAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTkzMzpib29sIGFhX2dfaGFzaF9wb2xpY3kgPSBJU19FTkFCTEVEKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFQpO1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTkzNDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzUtbW9kdWxlX3BhcmFtX25hbWVkKGhhc2hfcG9saWN5LCBhYV9nX2hhc2hfcG9saWN5LCBhYWJvb2wsIFNfSVJVU1IgfCBTX0lXVVNSKTtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xOTM4LS8qIHdoZXRoZXIgcG9saWN5IGV4YWN0bHkgYXMgbG9hZGVkIGlzIHJldGFpbmVkIGZvciBkZWJ1ZyBhbmQgY2hlY2twb2ludGluZyAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTkzOTpib29sIGFhX2dfZXhwb3J0X2JpbmFyeSA9IElTX0VOQUJMRUQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkpO1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTk0MDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5NDEtbW9kdWxlX3BhcmFtX25hbWVkKGV4cG9ydF9iaW5hcnksIGFhX2dfZXhwb3J0X2JpbmFyeSwgYWFib29sLCAwNjAwKTtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz0xOTgwPW1vZHVsZV9wYXJhbV9uYW1lZChwYXRoX21heCwgYWFfZ19wYXRoX21heCwgYWF1aW50LCBTX0lSVVNSKTtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xOTg2LSAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTk4Nzpib29sIGFhX2dfcGFyYW5vaWRfbG9hZCA9IElTX0VOQUJMRUQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX1BBUkFOT0lEX0xPQUQpO1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTk4OC1tb2R1bGVfcGFyYW1fbmFtZWQocGFyYW5vaWRfbG9hZCwgYWFfZ19wYXJhbm9pZF9sb2FkLCBhYWJvb2wsIFNfSVJVR08pO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jPTI2Mjk9REVGSU5FX0xTTShhcHBhcm1vcikgPSB7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMjYzOC0jZW5kaWZcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjI2Mzk6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0yNjQwLVx0LmluaXRjYWxsX2xhdGUgPSBpbml0X3Byb2ZpbGVfaGFzaCxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmM9MTYxOT1zdGF0aWMgaW50IGNvbXByZXNzX3pzdGQoY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2xlbiwgY2hhciAqKmRzdCwgc2l6ZV90ICpkbGVuKVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jLTE2MjAte1xuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jOjE2MjE6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmMtMTYyMi1cdGNvbnN0IHpzdGRfcGFyYW1ldGVycyBwYXJhbXMgPVxuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jPTEwMjU9aW50IGNhcF9pbm9kZV9zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTAzMC1cdC8qIElnbm9yZSBub24tc2VjdXJpdHkgeGF0dHJzICovXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDMxOlx0aWYgKHN0cm5jbXAobmFtZSwgWEFUVFJfU0VDVVJJVFlfUFJFRklYLFxuc2VjdXJpdHkvY29tbW9uY2FwLmM6MTAzMjpcdFx0XHRYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOKSAhPSAwKVxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTAzMy1cdFx0cmV0dXJuIDA7XG4tLVxuc2VjdXJpdHkvY29tbW9uY2FwLmM9MTA2Nj1pbnQgY2FwX2lub2RlX3JlbW92ZXhhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTEwNzEtXHQvKiBJZ25vcmUgbm9uLXNlY3VyaXR5IHhhdHRycyAqL1xuc2VjdXJpdHkvY29tbW9uY2FwLmM6MTA3MjpcdGlmIChzdHJuY21wKG5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jOjEwNzM6XHRcdFx0WEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTikgIT0gMClcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTEwNzQtXHRcdHJldHVybiAwO1xuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jPTE0Njk9aW50IGNhcF9tbWFwX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE0ODItXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNDgzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE0ODQtXG4tLVxuc2VjdXJpdHkvY29tbW9uY2FwLmM9MTUxNz1ERUZJTkVfTFNNKGNhcGFiaWxpdHkpID0ge1xuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE1MjItXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNTIzOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFkgKi9cbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE1MjQtXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNTI1OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQ09NTU9OQ0FQX0tVTklUX1RFU1RcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE1MjYtI2luY2x1ZGUgXCYjMzQ7Y29tbW9uY2FwX3Rlc3QuY1wmIzM0O1xuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmMtMTctXG5zZWN1cml0eS9jb21tb25jYXBfdGVzdC5jOjE4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQ09NTU9OQ0FQX0tVTklUX1RFU1RcbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmMtMTktXG4tLVxuc2VjdXJpdHkvY29tbW9uY2FwX3Rlc3QuYz0yODY9TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmMtMjg3LVxuc2VjdXJpdHkvY29tbW9uY2FwX3Rlc3QuYzoyODg6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVCAqL1xuLS1cbnNlY3VyaXR5L2lub2RlLmM9NDI9c3RhdGljIGludCBzZWN1cml0eWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbnNlY3VyaXR5L2lub2RlLmMtNDYtXG5zZWN1cml0eS9pbm9kZS5jOjQ3Olx0ZXJyb3IgPSBzaW1wbGVfZmlsbF9zdXBlcihzYiwgU0VDVVJJVFlGU19NQUdJQywgZmlsZXMpO1xuc2VjdXJpdHkvaW5vZGUuYy00OC1cdGlmIChlcnJvcilcbi0tXG5zZWN1cml0eS9pbm9kZS5jPTMwOD1FWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eWZzX3JlbW92ZSk7XG5zZWN1cml0eS9pbm9kZS5jLTMwOS1cbnNlY3VyaXR5L2lub2RlLmM6MzEwOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlcbnNlY3VyaXR5L2lub2RlLmMtMzExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2Vcbi0tXG5zZWN1cml0eS9pbm9kZS5jPTM2Mj1pbnQgX19pbml0IHNlY3VyaXR5ZnNfaW5pdCh2b2lkKVxuLS1cbnNlY3VyaXR5L2lub2RlLmMtMzc0LVx0fVxuc2VjdXJpdHkvaW5vZGUuYzozNzU6I2lmZGVmIENPTkZJR19TRUNVUklUWVxuc2VjdXJpdHkvaW5vZGUuYy0zNzYtXHRsc21fZGVudHJ5ID0gc2VjdXJpdHlmc19jcmVhdGVfZmlsZShcJiMzNDtsc21cJiMzNDssIDA0NDQsIE5VTEwsIE5VTEwsXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L0tjb25maWc9Mz1jb25maWcgSU5URUdSSVRZXG5zZWN1cml0eS9pbnRlZ3JpdHkvS2NvbmZpZy00LVx0Ym9vbCBcJiMzNDtJbnRlZ3JpdHkgc3Vic3lzdGVtXCYjMzQ7XG5zZWN1cml0eS9pbnRlZ3JpdHkvS2NvbmZpZzo1Olx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuc2VjdXJpdHkvaW50ZWdyaXR5L0tjb25maWctNi1cdGRlZmF1bHQgeVxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZz0yPWNvbmZpZyBFVk1cbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fSEFTSF9JTkZPXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc6OTpcdHNlbGVjdCBTRUNVUklUWV9QQVRIXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMTAtXHRkZWZhdWx0IG5cbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc9MzE9Y29uZmlnIEVWTV9FWFRSQV9TTUFDS19YQVRUUlNcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7QWRkaXRpb25hbCBTTUFDSyB4YXR0cnNcJiMzNDtcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzozMzpcdGRlcGVuZHMgb24gRVZNIFx1MDAyNlx1MDAyNiBTRUNVUklUWV9TTUFDS1xuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTM0LVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fY3J5cHRvLmM9NDA2PWludCBldm1faW5pdF9obWFjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX2NyeXB0by5jLTQyMi1cdFx0XHRpZiAoc3RyY21wKHhhdHRyX2VudHJ5LVx1MDAzZW5hbWUgJiM0MztcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX2NyeXB0by5jOjQyMzpcdFx0XHRcdCAgIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4sIHhhdHRyLVx1MDAzZW5hbWUpICE9IDApXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9jcnlwdG8uYy00MjQtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmM9Mzg9c3RhdGljIHN0cnVjdCB4YXR0cl9saXN0IGV2bV9jb25maWdfZGVmYXVsdF94YXR0cm5hbWVzW10gPSB7XG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTQwLVx0IC5uYW1lID0gWEFUVFJfTkFNRV9TRUxJTlVYLFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jOjQxOlx0IC5lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWClcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy00Mi1cdH0sXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTQ0LVx0IC5uYW1lID0gWEFUVFJfTkFNRV9TTUFDSyxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYzo0NTpcdCAuZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1NFQ1VSSVRZX1NNQUNLKVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTQ2LVx0fSxcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNjAtXHQgLm5hbWUgPSBYQVRUUl9OQU1FX0FQUEFSTU9SLFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jOjYxOlx0IC5lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IpXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNjItXHR9LFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYz0zMjI9c3RhdGljIGludCBldm1fcHJvdGVjdGVkX3hhdHRyX2NvbW1vbihjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSxcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtMzM5LVx0XHRpZiAoc3RybmNtcChyZXFfeGF0dHJfbmFtZSxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYzozNDA6XHRcdFx0ICAgIHhhdHRyLVx1MDAzZW5hbWUgJiM0MzsgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTixcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy0zNDEtXHRcdFx0ICAgIHN0cmxlbihyZXFfeGF0dHJfbmFtZSkpID09IDApIHtcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9zZWNmcy5jPTE4NT1zdGF0aWMgc3NpemVfdCBldm1fd3JpdGVfeGF0dHJzKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX3NlY2ZzLmMtMjQyLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fc2VjZnMuYzoyNDM6XHRpZiAoc3RybmNtcCh4YXR0ci1cdTAwM2VuYW1lLCBYQVRUUl9TRUNVUklUWV9QUkVGSVgsXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9zZWNmcy5jOjI0NDpcdFx0ICAgIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4pICE9IDApIHtcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX3NlY2ZzLmMtMjQ1LVx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZz00PWNvbmZpZyBJTUFcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy01LVx0Ym9vbCBcJiMzNDtJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSlcJiMzNDtcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZzo2Olx0c2VsZWN0IFNFQ1VSSVRZRlNcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy03LVx0c2VsZWN0IENSWVBUT1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fSEFTSF9JTkZPXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWc6MTE6XHRzZWxlY3QgU0VDVVJJVFlfUEFUSFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnLTEyLVx0c2VsZWN0IFRDR19UUE0gaWYgSEFTX0lPTUVNXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnPTU2PWNvbmZpZyBJTUFfTFNNX1JVTEVTXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctNTctXHRib29sXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIEFVRElUIFx1MDAyNlx1MDAyNiAoU0VDVVJJVFlfU0VMSU5VWCB8fCBTRUNVUklUWV9TTUFDSyB8fCBTRUNVUklUWV9BUFBBUk1PUilcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy01OS1cdGRlZmF1bHQgeVxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jPTE1Mj1zdGF0aWMgc3RydWN0IGltYV9ydWxlX2VudHJ5IGRvbnRfbWVhc3VyZV9ydWxlc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYy0xNTktXHR7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwgLmZzbWFnaWMgPSBCSU5GTVRGU19NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmM6MTYwOlx0ey5hY3Rpb24gPSBET05UX01FQVNVUkUsIC5mc21hZ2ljID0gU0VDVVJJVFlGU19NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMTYxLVx0ey5hY3Rpb24gPSBET05UX01FQVNVUkUsIC5mc21hZ2ljID0gU0VMSU5VWF9NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jPTE5OT1zdGF0aWMgc3RydWN0IGltYV9ydWxlX2VudHJ5IGRlZmF1bHRfYXBwcmFpc2VfcnVsZXNbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMjA2LVx0ey5hY3Rpb24gPSBET05UX0FQUFJBSVNFLCAuZnNtYWdpYyA9IEJJTkZNVEZTX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYzoyMDc6XHR7LmFjdGlvbiA9IERPTlRfQVBQUkFJU0UsIC5mc21hZ2ljID0gU0VDVVJJVFlGU19NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMjA4LVx0ey5hY3Rpb24gPSBET05UX0FQUFJBSVNFLCAuZnNtYWdpYyA9IFNFTElOVVhfTUFHSUMsIC5mbGFncyA9IElNQV9GU01BR0lDfSxcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvcGxhdGZvcm1fY2VydHMvbG9hZF91ZWZpLmM9MTYwPXN0YXRpYyBpbnQgX19pbml0IGxvYWRfdWVmaV9jZXJ0cyh2b2lkKVxuc2VjdXJpdHkvaW50ZWdyaXR5L3BsYXRmb3JtX2NlcnRzL2xvYWRfdWVmaS5jLTE2MS17XG5zZWN1cml0eS9pbnRlZ3JpdHkvcGxhdGZvcm1fY2VydHMvbG9hZF91ZWZpLmM6MTYyOlx0ZWZpX2d1aWRfdCBzZWN1cmVfdmFyID0gRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFX0dVSUQ7XG5zZWN1cml0eS9pbnRlZ3JpdHkvcGxhdGZvcm1fY2VydHMvbG9hZF91ZWZpLmMtMTYzLVx0ZWZpX2d1aWRfdCBtb2tfdmFyID0gRUZJX1NISU1fTE9DS19HVUlEO1xuLS1cbnNlY3VyaXR5L2lwZS9LY29uZmlnLTUtXG5zZWN1cml0eS9pcGUvS2NvbmZpZzo2Om1lbnVjb25maWcgU0VDVVJJVFlfSVBFXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtJbnRlZ3JpdHkgUG9saWN5IEVuZm9yY2VtZW50IChJUEUpXCYjMzQ7XG5zZWN1cml0eS9pcGUvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBTRUNVUklUWSBcdTAwMjZcdTAwMjYgU0VDVVJJVFlGUyBcdTAwMjZcdTAwMjYgQVVESVQgXHUwMDI2XHUwMDI2IEFVRElUU1lTQ0FMTFxuc2VjdXJpdHkvaXBlL0tjb25maWctOS1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuLS1cbnNlY3VyaXR5L2lwZS9LY29uZmlnLTIzLVxuc2VjdXJpdHkvaXBlL0tjb25maWc6MjQ6aWYgU0VDVVJJVFlfSVBFXG5zZWN1cml0eS9pcGUvS2NvbmZpZy0yNS1jb25maWcgSVBFX0JPT1RfUE9MSUNZXG4tLVxuc2VjdXJpdHkvaXBlL0tjb25maWc9OTg9ZW5kbWVudVxuc2VjdXJpdHkvaXBlL0tjb25maWctOTktXG5zZWN1cml0eS9pcGUvS2NvbmZpZzoxMDA6Y29uZmlnIFNFQ1VSSVRZX0lQRV9LVU5JVF9URVNUXG5zZWN1cml0eS9pcGUvS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBJUEVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2lwZS9NYWtlZmlsZT0xMz0kKG9iaikvYm9vdF9wb2xpY3kuYzogc2NyaXB0cy9pcGUvcG9sZ2VuL3BvbGdlbiAkKENPTkZJR19JUEVfQk9PVF9QT0xJQ1kpIEZPUkNFXG4tLVxuc2VjdXJpdHkvaXBlL01ha2VmaWxlLTE1LVxuc2VjdXJpdHkvaXBlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19TRUNVUklUWV9JUEUpICYjNDM7PSBcXFxuc2VjdXJpdHkvaXBlL01ha2VmaWxlLTE3LVx0Ym9vdF9wb2xpY3kubyBcXFxuLS1cbnNlY3VyaXR5L2lwZS9NYWtlZmlsZT0yOD1jbGVhbi1maWxlcyA6PSBib290X3BvbGljeS5jIFxcXG5zZWN1cml0eS9pcGUvTWFrZWZpbGUtMjktXG5zZWN1cml0eS9pcGUvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX0lQRV9LVU5JVF9URVNUKSAmIzQzOz0gXFxcbnNlY3VyaXR5L2lwZS9NYWtlZmlsZS0zMS1cdHBvbGljeV90ZXN0cy5vIFxcXG4tLVxuc2VjdXJpdHkva2V5cy9jb21wYXQuYz0xNz1DT01QQVRfU1lTQ0FMTF9ERUZJTkU1KGtleWN0bCwgdTMyLCBvcHRpb24sXG4tLVxuc2VjdXJpdHkva2V5cy9jb21wYXQuYy03My1cbnNlY3VyaXR5L2tleXMvY29tcGF0LmM6NzQ6XHRjYXNlIEtFWUNUTF9HRVRfU0VDVVJJVFk6XG5zZWN1cml0eS9rZXlzL2NvbXBhdC5jLTc1LVx0XHRyZXR1cm4ga2V5Y3RsX2dldF9zZWN1cml0eShhcmcyLCBjb21wYXRfcHRyKGFyZzMpLCBhcmc0KTtcbi0tXG5zZWN1cml0eS9rZXlzL2tleWN0bC5jPTE4ODY9U1lTQ0FMTF9ERUZJTkU1KGtleWN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXG4tLVxuc2VjdXJpdHkva2V5cy9rZXljdGwuYy0xOTYxLVxuc2VjdXJpdHkva2V5cy9rZXljdGwuYzoxOTYyOlx0Y2FzZSBLRVlDVExfR0VUX1NFQ1VSSVRZOlxuc2VjdXJpdHkva2V5cy9rZXljdGwuYy0xOTYzLVx0XHRyZXR1cm4ga2V5Y3RsX2dldF9zZWN1cml0eSgoa2V5X3NlcmlhbF90KSBhcmcyLFxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrLy5rdW5pdGNvbmZpZz0zPUNPTkZJR19ORVQ9eVxuc2VjdXJpdHkvbGFuZGxvY2svLmt1bml0Y29uZmlnOjQ6Q09ORklHX1NFQ1VSSVRZPXlcbnNlY3VyaXR5L2xhbmRsb2NrLy5rdW5pdGNvbmZpZzo1OkNPTkZJR19TRUNVUklUWV9MQU5ETE9DSz15XG5zZWN1cml0eS9sYW5kbG9jay8ua3VuaXRjb25maWc6NjpDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tfS1VOSVRfVEVTVD15XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy0yLVxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzozOmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy00LVx0Ym9vbCBcJiMzNDtMYW5kbG9jayBzdXBwb3J0XCYjMzQ7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDgxNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2VjdXJpdHkgQ29udGV4dCBVcGRhdGVzIGluIHRoZSBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgZ2l2ZW4gaXQmIzM5O3MgY29tcGlsZWQgdW5kZXIgYENPTkZJR19TRUNVUklUWWAuIEkmIzM5O20gYWxzbyBnb2luZyB0byBub3RlIHRoZSBkZXBlbmRlbmNpZXMsIGxpa2UgYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2Agd2hpY2ggcmVsaWVzIG9uIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAsIGFuZCBgc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNgIG9uIGBDT05GSUdfU0VDVVJJVFlfU01BQ0tgLiBUaGUgVkZTIGNvcmUgZnVuY3Rpb24gYGZzL25hbWVpLmNgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucy4gQWxzbywgdGhlcmUmIzM5O3MgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AgYW5kIGBDT05GSUdfQ0FDSEVGSUxFU2AsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyB0b3VjaGVkIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCBhbmQgYGZzL25hbWVpLmNgLCBhbmQgbm90ZSB3aGljaCBzeW1ib2xzIGFyZSBiZWluZyBtb2RpZmllZCBvciBhcmUgZGlyZWN0IGVudHJ5IHBvaW50cyBmb3IgdGhpcyBwYXRjaC4KCkkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBgZnMvbmFtZWkuY2A6IGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGBtYXlfb19jcmVhdGVgLCBgdmZzX21rbm9kYCwgYHZmc19ta2RpcmAsIGB2ZnNfc3ltbGlua2AsIGB2ZnNfbGlua2AsIGBpbm9kZV9wZXJtaXNzaW9uYCwgYW5kIGBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlY2AuIEluIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXJgIGlzIHJlbGV2YW50LiBPZiBjb3Vyc2UsIGBzZWN1cml0eS9zZWN1cml0eS5jYCBoYXMgdGhlc2Ugc2VjdXJpdHkgaG9va3M6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYC4gVGhlIFNFTGludXggaW1wbGVtZW50YXRpb25zIGFyZTogYHNlbGludXhfaW5vZGVfY3JlYXRlYCwgYHNlbGludXhfaW5vZGVfbGlua2AsIGBzZWxpbnV4X2lub2RlX3N5bWxpbmtgLCBgc2VsaW51eF9pbm9kZV9ta2RpcmAsIGBzZWxpbnV4X2lub2RlX21rbm9kYCwgYW5kIGBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb25gLiBBbmQgZm9yIFNNQUNLOiBgc21hY2tfaW5vZGVfbGlua2AgYW5kIGBzbWFja19pbm9kZV9wZXJtaXNzaW9uYC4KCk9rYXksIG5leHQgSSBuZWVkIHRvIGFwcGx5IFNlY3Rpb24gNDogRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0byBBVk9JRCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IGlzICphY3R1YWxseSogdWJpcXVpdG91cy4gQ2xlYXJseSBgaW5vZGVfcGVybWlzc2lvbmAgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBhcmUgY2FsbGVkICpldmVyeXdoZXJlKiBkdXJpbmcgcGF0aCBsb29rdXAgb3IgZmlsZSBhY2Nlc3MsIHNvIHRoZXkmIzM5O3JlIHByb2JhYmx5IG91dC4gTGlzdGluZyB0aGVtIHdvdWxkIGRpbHV0ZSB0aGUgY292ZXJhZ2UsIGJ1dCB3aGF0IGFib3V0IHRoZSBzcGVjaWZpYyBob29rcyBsaWtlIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGV0Yy4/IFNhbWUgcXVlc3Rpb24gZm9yIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCB0aGUgVkZTIGZ1bmN0aW9ucyBsaWtlIGB2ZnNfbWtkaXJgLCBgdmZzX3N5bWxpbmtgLCBldGMuCgpXYWl0IGEgc2Vjb25kLiBUaGUgKnNwZWNpZmljKiBMU00gaG9vayBlbnRyeSBwb2ludHMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMsIHRvIHRha2UgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCwgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gU28sIEkgbmVlZCB0byBjaGVjayB0aG9zZTogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGFuZCBzbyBvbiwgYXJlIGdvb2QuIEFuZCBhbHNvOiBgc2VsaW51eF9pbm9kZV9jcmVhdGVgLCBgc2VsaW51eF9pbm9kZV9saW5rYCwgYHNlbGludXhfaW5vZGVfc3ltbGlua2AsIGBzZWxpbnV4X2lub2RlX21rZGlyYCwgYHNlbGludXhfaW5vZGVfbWtub2RgLCBgc21hY2tfaW5vZGVfbGlua2AuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfU0VDVVJJVFlgLCBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgLCBgQ09ORklHX1NFQ1VSSVRZX1NNQUNLYCwgYW5kIGBDT05GSUdfQ0FDSEVGSUxFU2AuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGBCUEZfTFNNYCBhcmUgcmVsZXZhbnQgaGVyZSwgc2luY2UgdGhlcmUgd2VyZSB1cGRhdGVzIHRvIHRoZSBCUEYgTFNNIHNlbGZ0ZXN0cy4gVGltZSB0byBjaGVjayBgQlBGX0xTTWAgaW4gYEtjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjQ4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkxvY2F0aW5nIHRoZSBCUEZfTFNNIERlZmluaXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYEJQRl9MU01gLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBoYXZlIGEgZmVlbGluZyBJJiMzOTtsbCBiZSBpbiBmb3IgYSBkZWVwIGRpdmUsIGdpdmVuIGl0cyBzaWduaWZpY2FuY2UgaW4gdGhlIExpbnV4IFNlY3VyaXR5IE1vZHVsZSAoTFNNKSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaGVhZGVycyBvciBzb3VyY2UgZmlsZXMgaG9sZCB0aGlzIGNvbnN0YW50LiBJdCYjMzk7cyBsaWtlbHkgaW4gYSBoZWFkZXIgZmlsZSwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBwcm9iYWJseSB1c2VkIGFjcm9zcyBtdWx0aXBsZSBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIHJlbGF0ZWQgdG9vbHMuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGluY2x1ZGUgcGF0aHMsIGFuZCB0aGVuIG5hcnJvdyBkb3duIG15IHNlYXJjaCB0byBsaWtlbHkgc3BvdHMgbGlrZSB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBvciBMU00tc3BlY2lmaWMgZGlyZWN0b3JpZXMuIEkmIzM5O2xsIHV0aWxpemUgbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwmIzM5O3Mgc291cmNlIGxheW91dCB0byBlZmZpY2llbnRseSBwaW5wb2ludCB3aGVyZSB0aGlzIGNvbnN0YW50IGlzIGRlY2xhcmVkLiBJIG1heSBldmVuIHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3Igc2ltaWxhciBjb21tYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfTFNNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEJQRiBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA5Mi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBzZXQgdXAgYW5kIHBlcmhhcHMgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgYXJlYXMgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24gd2l0aGluIHRoZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xuICA5MTpcdFxuICA5MjpcdGNvbmZpZyBCUEZfTFNNXG4gIDkzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuICA5NDpcdFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG4gIDk1Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gIDk2Olx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gIDk3Olx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAgOTg6XHRcdGhlbHBcbiAgOTk6XHRcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxuIDEwMDpcdFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxuIDEwMTpcdFxuIDEwMjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuIDEwMzpcdFxuIDEwNDpcdGVuZG1lbnUgIyBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzIxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQmIzM5O3MgY29taW5nIGRpcmVjdGx5IGZyb20gbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENhY2hlZmlsZXMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGZzL2NhY2hlZmlsZXMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBDQUNIRUZJTEVTYCwgc3BlY2lmaWNhbGx5LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgaW4gdGhpcyBhcmVhIHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGNhY2hlZmlsZXMgYXJlIGRlZmluZWQuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBgQ0FDSEVGSUxFU2AgaXMgbWFuYWdlZCBhbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBjb250aW5nZW50IG9uIGl0LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgYWRkcmVzc2luZyB3aGF0ZXZlciB0aGUgY3VycmVudCBwcm9ibGVtIGlzLiBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb25maWd1cmF0aW9uIGNoYW5nZXMgSSBtaWdodCBjb25zaWRlci4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FDSEVGSUxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NhY2hlZmlsZXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjM6Y29uZmlnIENBQ0hFRklMRVNcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7RmlsZXN5c3RlbSBjYWNoaW5nIG9uIGZpbGVzXCYjMzQ7XG4tLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTEzLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjE0OmNvbmZpZyBDQUNIRUZJTEVTX0RFQlVHXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0RlYnVnIENhY2hlRmlsZXNcJiMzNDtcbi0tXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjItXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjQtXHRib29sIFwmIzM0O1Byb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzA3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBTZWN1cml0eSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFNFTGludXggYW5kIFNNQUNLIHNlY3VyaXR5IG1vZHVsZXMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCB0aGUgYHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZ2AgZmlsZSBhbmQgdGhlIGBzZWN1cml0eS9zbWFjay9LY29uZmlnYCBmaWxlLiBUaG9zZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgY29uZmlndXJpbmcgZWFjaCBzZWN1cml0eSBtb2R1bGUuIFRoZXkgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBob3cgdGhleSYjMzk7cmUgc3RydWN0dXJlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGF0IHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhpcyBhdCB0aGUgS2NvbmZpZyBsZXZlbCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgYWN0dWFsIGNvZGUgb3IgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiB3b3JrLiBUaW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U0VMaW51eCBBVkMgU3RhdGlzdGljc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFNNQUNLIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgc2VjdXJpdHkvc21hY2svS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4IChTTUFDSykgd2l0aGluIHRoZSBrZXJuZWwgYXJlIGRlZmluZWQsIGFuZCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgb3B0aW9ucywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIFNNQUNLJiMzOTtzIGluY2x1c2lvbiBvciBleGNsdXNpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCB0aGVpciBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIHBlcmhhcHMgcmVsYXRlZCB0byBvdGhlciBzZWN1cml0eSBtb2R1bGVzIG9yIGZlYXR1cmVzPyBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBTTUFDSyBvbiBhIHN5c3RlbSwgYW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGltcGFjdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VDVVJJVFlfU01BQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9zbWFjay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc21hY2svS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TTUFDS1xuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtTaW1wbGlmaWVkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBLZXJuZWwgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTUtXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9TTUFDS19CUklOR1VQXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTE3LVx0Ym9vbCBcJiMzNDtSZXBvcnRpbmcgb24gYWNjZXNzIGdyYW50ZWQgYnkgU21hY2sgcnVsZXNcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMzLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzozNDpjb25maWcgU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtQYWNrZXQgbWFya2luZyB1c2luZyBzZWNtYXJrcyBmb3IgbmV0ZmlsdGVyXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy00NC1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6NDU6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0FQUEVORF9TSUdOQUxTXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtUcmVhdCBkZWxpdmVyaW5nIHNpZ25hbHMgYXMgYW4gYXBwZW5kIG9wZXJhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODkxNgoJCQkJCQkJb3V0cHV0OiAyNzQKCQkJCQkJCXRob3VnaHRzOiA4NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIFNlY3VyaXR5IExTTSBIb29rIFVwZGF0ZXMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgYW5kIHplcm8gaW4gb24gd2hhdCYjMzk7cyByZWxldmFudCBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGNoYW5nZXMgdGhhdCBtYWlubHkgaW52b2x2ZSBwYXNzaW5nIGFuIGBpZG1hcGAgc3RydWN0IHRvIHZhcmlvdXMgc2VjdXJpdHktcmVsYXRlZCBmdW5jdGlvbnMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIHdoZXJlIGBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcmAgbm93IHVzZXMgYHNlY3VyaXR5X2lub2RlX21rZGlyYCBhbmQgYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAuIFRoZW4sIGEgZ29vZCBjaHVuayBvZiBgZnMvbmFtZWkuY2AgaGFzIGJlZW4gdXBkYXRlZDsgYGlub2RlX3Blcm1pc3Npb25gLCBgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWNgLCBgdmZzX2NyZWF0ZWAsIGB2ZnNfbWtvYmpgLCBgbWF5X29fY3JlYXRlYCwgYHZmc19ta25vZGAsIGB2ZnNfbWtkaXJgLCBgdmZzX3N5bWxpbmtgLCBhbmQgYHZmc19saW5rYCBhbGwgbm93IHBhc3MgYGlkbWFwYCB0byB0aGVpciByZXNwZWN0aXZlIHNlY3VyaXR5IGZ1bmN0aW9ucy4gIFRoZSBjb3JlIEFQSSBzaWduYXR1cmUgdXBkYXRlcyBhcmUgcmVmbGVjdGVkIGluIGBpbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBpbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhgLCBhZGRpbmcgdGhlIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgcGFyYW1ldGVyIHRvIHRoZSByZWxldmFudCBpbm9kZSBob29rcy4gIE9mIGNvdXJzZSwgdGhpcyByaXBwbGVzIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb25zIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLCBhbmQgYHNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jYCBhcyB0aGV5IGFyZSBub3cgdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyBgaWRtYXBgIHBhcmFtZXRlci4gRmluYWxseSwgdGhlcmUmIzM5O3Mgc29tZSBhY3Rpdml0eSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuCgpHaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBgQ0FDSEVGSUxFU2AsIGFuZCBgQlBGX0xTTWAgaW4gdGhlIGVuYWJsZWQgY29uZmlndXJhdGlvbnMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYWxvbmcgd2l0aCB0aGVpciBTRUxpbnV4IGNvdW50ZXJwYXJ0cyAoYHNlbGludXhfaW5vZGVfKmApIGFuZCBgc21hY2tfaW5vZGVfbGlua2AuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgYGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyYCBhbmQgYHZmc19ta29iamAuCgpNeSBmb2N1cyBpcyB0byBhdm9pZCBjb21tb24sICYjMzQ7dWJpcXVpdG91cyYjMzQ7IGZ1bmN0aW9ucyBsaWtlIGBpbm9kZV9wZXJtaXNzaW9uYCBvciBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAgaWYgdGhleSYjMzk7cmUgY2FsbGVkIGV2ZXJ5d2hlcmUuICBJbnN0ZWFkLCBJIHdhbnQgdG8gdGFyZ2V0IHRoZSBtb3JlIHNwZWNpZmljIGlub2RlIGhvb2sgZnVuY3Rpb25zLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gY3JlYXRpbmcsIGxpbmtpbmcsIHN5bWxpbmtpbmcsIG1ha2luZyBkaXJlY3RvcmllcywgYW5kIG1ha2luZyBub2Rlcy4gVGhvc2Ugc2hvdWxkIG9mZmVyIG1vcmUgdGFyZ2V0ZWQgZnV6emluZyBvcHBvcnR1bml0aWVzLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzbWFja19pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O2NhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyJiMzNDssCiAgICAmIzM0O3Zmc19ta29iaiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIExTTSBpbm9kZSBob29rIGludGVyZmFjZXMgKGlub2RlX2NyZWF0ZSwgaW5vZGVfbGluaywgaW5vZGVfc3ltbGluaywgaW5vZGVfbWtkaXIsIGlub2RlX21rbm9kLCBpbm9kZV9wZXJtaXNzaW9uKSBhbmQgdGhlaXIgY2FsbGVycyBhY3Jvc3MgdGhlIFZGUyBsYXllciwgQ2FjaGVGaWxlcywgU0VMaW51eCwgYW5kIFNtYWNrIHRvIHBhc3MgdGhlIG1vdW50IGlkbWFwIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgYWx0ZXJzIGNvcmUgVkZTIGFuZCBMU00gaW50ZXJhY3Rpb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQgdG8gZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX21rZGlyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX21rbm9kJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfbGluayYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX21rbm9kJiMzNDssCiAgICAmIzM0O3NtYWNrX2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7Y2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXImIzM0OywKICAgICYjMzQ7dmZzX21rb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTFNNIGlub2RlIGhvb2sgaW50ZXJmYWNlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBjYWxsZXJzIGFjcm9zcyB0aGUgVkZTIGxheWVyLCBDYWNoZUZpbGVzLCBTRUxpbnV4LCBhbmQgU21hY2sgdG8gcGFzcyB0aGUgbW91bnQgaWRtYXAgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBhbHRlcnMgY29yZSBWRlMgYW5kIExTTSBpbnRlcmFjdGlvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCByZWxldmFudCB0byBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBMU00gaW5vZGUgaG9vayBwcm90b3R5cGVzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGludm9jYXRpb25zIGluIHRoZSBWRlMgbGF5ZXIgKGZzL25hbWVpLmMsIGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYykgYW5kIHNlY3VyaXR5IG1vZHVsZXMgdG8gcHJvcGFnYXRlIHRoZSAmIzM5O3N0cnVjdCBtbnRfaWRtYXAgKmlkbWFwJiMzOTsgYXJndW1lbnQsIGFsb25nIHdpdGggYWRkaW5nIEJQRiBMU00gdGVzdCBjYXNlcyBmb3IgdGhlc2UgaG9va3MuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBzaWduYXR1cmUgYW5kIGNhbGxpbmcgY29udmVudGlvbiB1cGRhdGVzIHBhc3NpbmcgYW4gZXhpc3RpbmcgaWRtYXAgcG9pbnRlciB0aHJvdWdoIHRvIHRoZSBMU00gaG9vayBpbmZyYXN0cnVjdHVyZS4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU1ZDBmMjM3YzAyYTNlYTVlOGExMmUxMWYxY2VkMjYxZWIxMTkyM2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDAwOjMxOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0Ci0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKQEAgLTUxLDE0ICYjNDM7NTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKCZhbXA7bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwomIzQzOwlyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKQogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmICh1bmxpa2VseShyZXR2YWwpKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTsKIApAQCAtNjk1LDcgJiM0Mzs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZAogCWlmICh1bmxpa2VseSgoKGlub2RlLSZndDtpX21vZGUgJmFtcDsgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKQogCQlyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAJCXJldHVybiAtRUFDQ0VTOwkvKiBzaG91bGRuJiMzOTt0IGl0IGJlIEVOT1NZUz8gKi8KIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwpAQCAtNDIxMiw3ICYjNDM7NDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAKIAltb2RlICZhbXA7PSBTX0lBTExVR087CiAJbW9kZSB8PSBTX0lGUkVHOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTsKQEAgLTQzMjgsNyAmIzQzOzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwogfQogCiAvKioKQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC01Mzk1LDcgJiM0Mzs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJZ290byBlcnI7CiAKIAltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnI7CiAKQEAgLTU3ODMsNyAmIzQzOzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghZGlyLSZndDtpX29wLSZndDtzeW1saW5rKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTU5MDcsNyAmIzQzOzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgaW50ICp4YXR0cl9jb3VudCkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgY29uc3QgY2hhciAqb2xkX25hbWUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCSBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGJvb2wgcmN1KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJIHN0cnVjdCBpYXR0ciAqYXR0cikKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCQkJc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJCQkgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwKIAkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgICBib29sIHJjdSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spOwogaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtOTAyLDkgJiM0Mzs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCXVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMyw5ICYjNDM7OTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZAogc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsgfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiAwOwogfQpAQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCSAgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQlpbnQgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiAwOwogfQpAQCAtOTc0LDcgJiM0Mzs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTYxNCw2ICYjNDM7MTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkCiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZQpAQCAtMTYyMiwxMiAmIzQzOzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7CiAKQEAgLTE2NDgsNiAmIzQzOzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZQogICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnkKICAqIEBuZXdfZGVudHJ5OiBuZXcgbGluawpAQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKIH0KIAogLyoqCkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmsKICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWUKQEAgLTE2OTAsMTYgJiM0MzsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7CiB9CiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnkKICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGUKQEAgLTE3MDksMTEgJiM0MzsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTsKIApAQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBmaWxlCiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZQpAQCAtMTc0NywxMiAmIzQzOzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiB9CiAKIC8qKgpAQCAtMTgyMyw2ICYjNDM7MTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiBpbm9kZQogICogQG1hc2s6IGFjY2VzcyBtYXNrCiAgKgpAQCAtMTgzNSwxMSAmIzQzOzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgICAgIGludCBtYXNrKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMzA3NCwxMiAmIzQzOzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICZhbXA7YWQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7CiB9CkBAIC0zMDg5LDEyICYjNDM7MzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTsKIH0KQEAgLTMxMDQsNyAmIzQzOzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTsKIH0KQEAgLTMyMzYsMTMgJiM0MzszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsCiAKIC8qKgogICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWQKICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWQKICAqCiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG8KICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpCiB7CiAJaW50IG1hc2s7CiAJdTMyIHBlcm1zOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtMTA4OSwxNCAmIzQzOzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAvKioKICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0CiAgKiBAZGlyOiB1bnVzZWQKICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXN0cnVjdCBzbWFja19rbm93biAqaXNwOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKIAogLyoqCiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKCkKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb24KICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZAogICoKQEAgLTEyMzMsNyAmIzQzOzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKICAqCiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICBpbnQgbWFzaykKIHsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwpAQCAtMSwxOCAmIzQzOzEsMzAgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQogCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuCiAgKi8KIAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7bHNtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xzbV90YWlsY2FsbC5za2VsLmgmIzM0OwogCiBjaGFyICpDTURfQVJHU1tdID0geyYjMzQ7dHJ1ZSYjMzQ7LCBOVUxMfTsKIAomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9BTEwgPSAoMVUgJmx0OyZsdDsgNikgLSAxLAomIzQzO307CiYjNDM7CiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogewogCWludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1czsKQEAgLTMwLDYgJiM0Mzs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZCkKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKJiM0MzsJfSB3aGlsZSAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7CiYjNDM7CWludCBmZCwgc2F2ZWRfZXJybm8gPSAwOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwllbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pCiYjNDM7CQlzYXZlZF9lcnJubyA9IEVJTzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAoc2F2ZWRfZXJybm8pIHsKJiM0MzsJCWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CWludCBsZW47CiYjNDM7CiYjNDM7CWxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy8lZC8lcyYjMzQ7LCBwaWQsIG5hbWUpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbNjRdOwomIzQzOwlwaWRfdCBwaWQsIHdhaXRlZDsKJiM0MzsJaW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1czsKJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAocGlkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSkKJiM0MzsJCQlfZXhpdCgxKTsKJiM0MzsJCXJhaXNlKFNJR1NUT1ApOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJd2FpdGVkID0gd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCBXVU5UUkFDRUQpOwomIzQzOwl9IHdoaWxlICh3YWl0ZWQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwlpZiAod2FpdGVkICE9IHBpZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkgewomIzQzOwkJcGlkID0gLTE7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqLwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3NldGdyb3VwcyYjMzQ7LCAmIzM0O2RlbnkmIzM0OykgJmFtcDsmYW1wOyBlcnJubyAhPSBFTk9FTlQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDt1aWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykgfHwKJiM0MzsJICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDtnaWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkL25zL3VzZXImIzM0OywgcGlkKTsKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgKHNpemVfdClsZW4gJmd0Oz0gc2l6ZW9mKHBhdGgpKSB7CiYjNDM7CQllcnJubyA9IEVPVkVSRkxPVzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJZG8gewomIzQzOwkJCXdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTsKJiM0MzsJCX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CX0KJiM0MzsJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsCiYjNDM7CX07CiYjNDM7CWludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTsKJiM0MzsKJiM0MzsJdXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqLwomIzQzOwlmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgJiMzNDt0bXBmcyYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7CiYjNDM7CWlmIChmc2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApOwomIzQzOwlpZiAobW50ZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkOwomIzQzOwlpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCAmIzM0OyYjMzQ7LCBBVF9FTVBUWV9QQVRILCAmYW1wO2F0dHIsCiYjNDM7CQkgICAgc2l6ZW9mKGF0dHIpKSkgewomIzQzOwkJY2xvc2UobW50ZmQpOwomIzQzOwkJbW50ZmQgPSAtMTsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJaWYgKGZzZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZzZmQpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh1c2VybnNfZmQpOwomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gbW50ZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKQomIzQzO3sKJiM0MzsJaW50IGZkID0gLTEsIHJldCA9IC0xOwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQywKJiM0MzsJCSAgICAwNjAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7Y3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgJiMzNDtkaXImIzM0OywgMDcwMCksICYjMzQ7bWtkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KCYjMzQ7dGFyZ2V0JiMzNDssIGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OyksICYjMzQ7c3ltbGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCBkaXJmZCwgJiMzNDtsaW5rJiMzNDssIDApLCAmIzM0O2xpbmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwNjAwKSwgJiMzNDtta25vZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSAwOwomIzQzO291dDoKJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpZm8mIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIHRtcGRpcltdID0gJiMzNDsvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFgmIzM0OzsKJiM0MzsJX191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7CiYjNDM7CWludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksICYjMzQ7bWtkdGVtcCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCAmIzM0O29wZW5fdG1wZGlyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCAmIzM0O2NyZWF0ZV9pZG1hcHBlZF90bXBmcyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksICYjMzQ7aWRlbnRpdHlfaWRtYXAmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLAomIzQzOwkJICAgICAgICYjMzQ7aWRtYXBwZWRfbW91bnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCSAgICAgICAmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJcmV0ID0gQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsCiYjNDM7CQkJJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuJiMzNDspID8gMCA6IC0xOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGlkbWFwcGVkX2RpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShpZG1hcHBlZF9kaXJmZCk7CiYjNDM7CWlmIChkaXJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZGlyZmQpOwomIzQzOwlybWRpcih0bXBkaXIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIHsKIAlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CkBAIC01Myw2ICYjNDM7Mjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAogCXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwogCiYjNDM7CWVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9sc21faW5vZGVfaWRtYXAmIzM0OykpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWVyciA9IHN0YWNrX21wcm90ZWN0KCk7CiAJaWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSB8fAogCSAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSkKQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiAJc2tlbC0mZ3Q7YnNzLSZndDtjb3B5X3Rlc3QgPSAwOwogCXNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9jb3VudCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDttcHJvdGVjdF9jb3VudCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwppbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogaW50IG1vbml0b3JlZF9waWQgPSAwOwogaW50IG1wcm90ZWN0X2NvdW50ID0gMDsKIGludCBicHJtX2NvdW50ID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJSU5PREVfSURNQVBfQ1JFQVRFCT0gMVUgJmx0OyZsdDsgMCwKJiM0MzsJSU5PREVfSURNQVBfTElOSwk9IDFVICZsdDsmbHQ7IDEsCiYjNDM7CUlOT0RFX0lETUFQX1NZTUxJTksJPSAxVSAmbHQ7Jmx0OyAyLAomIzQzOwlJTk9ERV9JRE1BUF9NS0RJUgk9IDFVICZsdDsmbHQ7IDMsCiYjNDM7CUlOT0RFX0lETUFQX01LTk9ECT0gMVUgJmx0OyZsdDsgNCwKJiM0MzsJSU5PREVfSURNQVBfUEVSTUlTU0lPTgk9IDFVICZsdDsmbHQ7IDUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJX191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiYjNDM7CiYjNDM7CXJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCAmYW1wOyZhbXA7IGlkbWFwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gaWRtYXAtJmd0O3VpZF9tYXAubnJfZXh0ZW50cyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGlkbWFwLSZndDtnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgICAgX191MzIgaG9vaywgaW50IHJldCkKJiM0Mzt7CiYjNDM7CWlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKQomIzQzOwkJaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfY3JlYXRlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9zeW1saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbWtkaXImIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta25vZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfcGVybWlzc2lvbiYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTsKJiM0Mzt9CiAKIFNFQygmIzM0O2xzbS9maWxlX21wcm90ZWN0JiMzNDspCiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBgTmVlZHNLTVNBTj10cnVlYCBpcyB0aGUgcmlnaHQgY2FsbCBvciBpZiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAuCgpGaXJzdCwgSSBzZWUgY2hhbmdlcyBwcmltYXJpbHkgZm9jdXNlZCBvbiBpbnRlZ3JhdGluZyBhbiBgaWRtYXBgIGludG8gdmFyaW91cyBpbm9kZSBzZWN1cml0eS1yZWxhdGVkIGZ1bmN0aW9ucyBhY3Jvc3MgdGhlIGZpbGVzeXN0ZW0gYW5kIHNlY3VyaXR5IHN1YnN5c3RlbXMuIFNwZWNpZmljYWxseSwgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AgYW5kIGBmcy9uYW1laS5jYCBhcmUgbW9kaWZpZWQgdG8gdXNlIGAmYW1wO25vcF9tbnRfaWRtYXBgIG9yIGBpZG1hcGAuIFRoZSBpbmNsdWRlIGZpbGVzIGBpbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBpbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhgIGhhdmUgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgdXBkYXRlZCB0byBpbmNsdWRlIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgcGFyYW1ldGVyIGluIGBpbm9kZV8qYCBmdW5jdGlvbnMgYW5kIGBzZWN1cml0eV9pbm9kZV8qYC4gVGhlIHNlY3VyaXR5IGltcGxlbWVudGF0aW9ucyBhbHNvIGdldHMgdXBkYXRlZC4KClRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgb24gTFNNIGltcGxlbWVudGF0aW9uczogU0VMaW51eCBhbmQgU01BQ0suIEl0IHVwZGF0ZXMgdGhlaXIgcmVzcGVjdGl2ZSBob29rIHNpZ25hdHVyZXMsIHN1Y2ggYXMgYHNlbGludXhfaW5vZGVfKmAgYW5kIGBzbWFja19pbm9kZV8qYCwgdG8gYWNjZXB0IHRoZSBgaWRtYXBgIHBhcmFtZXRlci4gRmluYWxseSwgdGhlcmUmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIHRlc3QgY2FzZXMgZm9yIEJQRiBMU00gaG9va3MgaW52b2x2aW5nIHRoZSBgaWRtYXBgIGluIHRoZSBzZWxmLXRlc3RzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludm9sdmUgc2VjdXJpdHktc2Vuc2l0aXZlIGRhdGEgZmxvd3MgdGhhdCBhcmUgcHJvbmUgdG8gS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXM/IEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBwYXNzaW5nIG5ldyBwb3RlbnRpYWxseSB0YWludGVkIGRhdGEgdG8ga2VybmVsIHNlY3VyaXR5IGZ1bmN0aW9ucy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgaWRtYXBgIGFyZ3VtZW50IGlzIHRoZSBrZXkuIElzIHRoaXMganVzdCBhIHJlZmFjdG9yaW5nLCBvciBkb2VzIHRoaXMgcG90ZW50aWFsbHkgaW50cm9kdWNlIGEgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGRhdGEgZmxvdz8gSSBuZWVkIHRvIGRldGVybWluZSBpZiBuZXcgZGF0YSBpcyBiZWluZyBwYXNzZWQgdGhyb3VnaCB0aGVzZSBob29rcyB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQgb3Igb3RoZXJ3aXNlIHByb2JsZW1hdGljLgoKVG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBgZ3JlcHBlcmAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIG5vdCBtaXNzaW5nIGFueSBvdGhlciBMU00gaW1wbGVtZW50YXRpb25zIG9yIGZpbGVzIHRoYXQgYWxzbyBpbXBsZW1lbnQgdGhlc2UgaG9va3MuIEFwcEFybW9yLCBMYW5kbG9jaywgVE9NT1lPLCBhbmQgb3RoZXIgTFNNcyBhcmUgdGhlIG9idmlvdXMgc3VzcGVjdHMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGNoYW5nZXMgYXJlIGFwcGxpZWQgY29uc2lzdGVudGx5IGFjcm9zcyB0aGUgYm9hcmQuIElmIG90aGVyIExTTXMgYXJlIGFmZmVjdGVkIG9yIGlmIHRoZXNlIGhvb2tzIGFyZSB1c2VkIGVsc2V3aGVyZSwgdGhlbiB0aGUgcmlzayBwcm9maWxlIGNoYW5nZXMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB3aGV0aGVyIGEgZGVlcGVyIEtNU0FOIGRpdmUgaXMgd2FycmFudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbm9kZV8oY3JlYXRlfGxpbmt8c3ltbGlua3xta2Rpcnxta25vZHxwZXJtaXNzaW9uKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTEyMjU9c3RhdGljIHZvaWQgaW5vZGVfZnJlZV9ieV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0MS0gKiBzZWN1cml0eV9pbm9kZV9mcmVlKCksIEBpbm9kZSBtYXkgc3RpbGwgYmUgcmVmZXJlbmNlZCBpbiBhIFZGUyBwYXRoIHdhbGtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0MjogKiBhbmQgY2FsbHMgdG8gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIG1heSBiZSBtYWRlIGR1cmluZywgb3IgYWZ0ZXIsXG5zZWN1cml0eS9zZWN1cml0eS5jLTEyNDMtICogYSBjYWxsIHRvIHNlY3VyaXR5X2lub2RlX2ZyZWUoKS4gIEZvciB0aGlzIHJlYXNvbiB0aGUgaW5vZGUtXHUwMDNlaV9zZWN1cml0eVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQ0LSAqIGZpZWxkIGlzIHJlbGVhc2VkIHZpYSBhIGNhbGxfcmN1KCkgY2FsbGJhY2sgYW5kIGFueSBMU01zIHdoaWNoIG5lZWQgdG9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0NTogKiByZXRhaW4gaW5vZGUgc3RhdGUgZm9yIHVzZSBpbiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgc2hvdWxkIG9ubHlcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0Ni0gKiByZWxlYXNlIHRoYXQgc3RhdGUgaW4gdGhlIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1KCkgTFNNIGhvb2sgY2FsbGJhY2suXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjA5PWludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MTUtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MTY6ICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjE3LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI3LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjMwLVx0XHRyZXR1cm4gMDtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTYzMTpcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYzMi19XG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MzM6RVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYzNC1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTE2NDI9dm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY1MC0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTY1MTogKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NTItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjAtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2NjE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjItXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjY1LVx0XHRyZXR1cm4gMDtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTY2NjpcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjY3LX1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTE2Nzg9aW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY4NS0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTY4NjogKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjg3LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjk1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjk2OmludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5Ny1cdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcwMC1cdFx0cmV0dXJuIDA7XG5zZWN1cml0eS9zZWN1cml0eS5jOjE3MDE6XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcwMi19XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzA0LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNzA1OiAqIHNlY3VyaXR5X2lub2RlX21rZGlyKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIG5ldyBkaXJlY3RvcnkgaXMgYWxsb3dlZFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzA2LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzE1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNzE2OmludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MTctXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcyMC1cdFx0cmV0dXJuIDA7XG5zZWN1cml0eS9zZWN1cml0eS5jOjE3MjE6XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcyMi19XG5zZWN1cml0eS9zZWN1cml0eS5jOjE3MjM6RVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzI0LVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTczND1pbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3NDEtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjE3NDI6ICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWRcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc0My0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc1NS0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTc1NjppbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzU3LVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc2MC1cdFx0cmV0dXJuIDA7XG5zZWN1cml0eS9zZWN1cml0eS5jOjE3NjE6XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzYyLX1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTE4MjI9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4MzAtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4MzE6ICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTgzMi0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0NC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTg0NTppbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0Ni1cdFx0XHQgICAgICBpbnQgbWFzaylcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDktXHRcdHJldHVybiAwO1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODUwOlx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg1MS19XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNzI3PWludCBzZWN1cml0eV9maWxlX3JlY2VpdmUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNzM2LSAqIFNhdmUgb3Blbi10aW1lIHBlcm1pc3Npb24gY2hlY2tpbmcgc3RhdGUgZm9yIGxhdGVyIHVzZSB1cG9uIGZpbGVfcGVybWlzc2lvbixcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjczNzogKiBhbmQgcmVjaGVjayBhY2Nlc3MgaWYgYW55dGhpbmcgaGFzIGNoYW5nZWQgc2luY2UgaW5vZGVfcGVybWlzc2lvbi5cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjczOC0gKlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMDExPXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA3Ni1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDc3OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzgtXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA4Mi1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDgzOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwODQtXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMwODk9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDkzLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMwOTQ6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwOTUtXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDk5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxMDA6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTAxLVx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEwNj1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzExMC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTExOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzExMi1cdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEzMD1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxNDY6c3RhdGljIG5vaW5saW5lIGludCBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzE0Ny1cdFx0XHRcdFx0ICAgdTMyIHBlcm1zLCB1MzIgYXVkaXRlZCwgdTMyIGRlbmllZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjQyLS8qKlxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI0NC0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNTE6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI1Mi1cdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjk5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzMDA6XHRyYzIgPSBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBwZXJtcywgYXVkaXRlZCwgZGVuaWVkLCByYyk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwMS1cdGlmIChyYzIpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQyNjM9c3RhdGljIGludCBzZWxpbnV4X2ZpbGVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDI4MC1cdCAqIFNpbmNlIHRoZSBpbm9kZSBsYWJlbCBvciBwb2xpY3kgc2Vxbm8gbWF5IGhhdmUgY2hhbmdlZFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQyODE6XHQgKiBiZXR3ZWVuIHRoZSBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gY2hlY2sgYW5kIHRoZSBzYXZpbmdcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgyLVx0ICogb2Ygc3RhdGUgYWJvdmUsIHJlY2hlY2sgdGhhdCBhY2Nlc3MgaXMgc3RpbGwgcGVybWl0dGVkLlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTY3PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MDctXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24pLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MDg6XHRMU01fSE9PS19JTklUKGlub2RlX2NyZWF0ZSwgc2VsaW51eF9pbm9kZV9jcmVhdGUpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MDk6XHRMU01fSE9PS19JTklUKGlub2RlX2xpbmssIHNlbGludXhfaW5vZGVfbGluayksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxMC1cdExTTV9IT09LX0lOSVQoaW5vZGVfdW5saW5rLCBzZWxpbnV4X2lub2RlX3VubGluayksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxMTpcdExTTV9IT09LX0lOSVQoaW5vZGVfc3ltbGluaywgc2VsaW51eF9pbm9kZV9zeW1saW5rKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjEyOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9ta2Rpciwgc2VsaW51eF9pbm9kZV9ta2RpciksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxMy1cdExTTV9IT09LX0lOSVQoaW5vZGVfcm1kaXIsIHNlbGludXhfaW5vZGVfcm1kaXIpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTQ6XHRMU01fSE9PS19JTklUKGlub2RlX21rbm9kLCBzZWxpbnV4X2lub2RlX21rbm9kKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE1LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9yZW5hbWUsIHNlbGludXhfaW5vZGVfcmVuYW1lKSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxNy1cdExTTV9IT09LX0lOSVQoaW5vZGVfZm9sbG93X2xpbmssIHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmspLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTg6XHRMU01fSE9PS19JTklUKGlub2RlX3Blcm1pc3Npb24sIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxOS1cdExTTV9IT09LX0lOSVQoaW5vZGVfc2V0YXR0ciwgc2VsaW51eF9pbm9kZV9zZXRhdHRyKSxcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz0xMDIwPXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMDMzLVx0ICogVU5JWCBkb21haW4gc29ja2V0cyB1c2UgbG93ZXIgbGV2ZWwgc29ja2V0IGRhdGEuIExldFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6MTAzNDpcdCAqIFVEUyBpbm9kZSBoYXZlIGZpeGVkICogbGFiZWwgdG8ga2VlcCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKCkgY2FsbVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAzNS1cdCAqIHdoZW4gY2FsbGVkIGZyb20gdW5peF9maW5kX2JzZCgpXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTA5MC0vKipcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwOTE6ICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwOTItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMDk4LSAqL1xuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6MTA5OTpzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMTAwLVx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz0xMjAzPXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMjgtLyoqXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMjI5OiAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzMC0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMzctICovXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMjM4OnN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMzktXHRcdFx0XHQgIGludCBtYXNrKVxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTUxNTg9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc21hY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE3Ni1cdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTc3Olx0TFNNX0hPT0tfSU5JVChpbm9kZV9saW5rLCBzbWFja19pbm9kZV9saW5rKSxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTUxNzgtXHRMU01fSE9PS19JTklUKGlub2RlX3VubGluaywgc21hY2tfaW5vZGVfdW5saW5rKSxcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTgwLVx0TFNNX0hPT0tfSU5JVChpbm9kZV9yZW5hbWUsIHNtYWNrX2lub2RlX3JlbmFtZSksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTgxOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9wZXJtaXNzaW9uLCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKSxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTUxODItXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNtYWNrX2lub2RlX3NldGF0dHIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc1NwoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgU2FmZXR5IG9mIFRoaXMgTFNNIEhvb2sgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byBzZXZlcmFsIExTTSBob29rcywgc3BlY2lmaWNhbGx5IGBpbm9kZV9jcmVhdGVgLCBgaW5vZGVfbGlua2AsIGBpbm9kZV9zeW1saW5rYCwgYGlub2RlX21rZGlyYCwgYGlub2RlX21rbm9kYCwgYW5kIGBpbm9kZV9wZXJtaXNzaW9uYC4gSXQmIzM5O3MgdG91Y2hpbmcgYSBkZWNlbnQgc3ByZWFkIG9mIGZpbGVzIGFjcm9zcyB0aGUgZmlsZXN5c3RlbSwgc2VjdXJpdHksIGFuZCBCUEYgbGF5ZXJzLCBzbyB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHRoaXMgYGlkbWFwYCBwb2ludGVyIGlzIGJlaW5nIHBhc3NlZCAqdGhyb3VnaCogdGhlIExTTSBob29rIGRlZmluaXRpb25zLiBUaGUgVkZTIGZ1bmN0aW9ucyBsaWtlIGB2ZnNfY3JlYXRlYCBhbmQgYHZmc19ta2RpcmAgb3IgYCZhbXA7bm9wX21udF9pZG1hcGAgYXJlIHNldHRpbmcgdXAgYGlkbWFwYC4gVGhlIExTTSBob29rcyB0aGVtc2VsdmVzLCBsaWtlIFNFTGludXggYW5kIFNtYWNrLCBhcmUgdGhlbiByZWNlaXZpbmcgdGhpcyBwYXJhbWV0ZXIsIGFsdGhvdWdoLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIFNFTGludXggYW5kIFNtYWNrIGFyZW4mIzM5O3QgKmN1cnJlbnRseSogdXNpbmcgaXQuIFRoZSBCUEYgdGVzdHMgYXJlIGFsc28gdXNpbmcgdGhpcyBgaWRtYXBgIHdpdGhpbiB0aGUgcHJvZ3JhbXMgdGhlbXNlbHZlcywgc28gdGhhdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGVyZSBhbnkgcmlzayBoZXJlPyBJJiMzOTt2ZSBnb3QgdG8gY2hlY2suCgpCYXNlZCBvbiBteSBhbmFseXNpczoKCiogICAqKk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMqKiBhcmUgaW50cm9kdWNlZCwgd2hpY2ggaXMgZ29vZC4KKiAgIFRoZXJlJiMzOTtzICoqbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlKiosIHdoaWNoIGlzIGEgY3JpdGljYWwgcG9pbnQuCiogICBJIHNlZSAqKm5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgYnJhbmNoZXMqKiB0aGF0IHdvdWxkIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhbHVlcy4KCkkmIzM5O3ZlIGdvdCB0byBnbyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOb3BlLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm9wZS4KCkdpdmVuIHRoYXQgbm90aGluZyBpcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgcG9zc2libHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgZW5vdWdoIHRvIGZpbmQgYW55IGJ1Z3MuIFRoaXMgZG9lc24mIzM5O3QgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEl0JiMzOTtzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIGdpdmUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBteSBhbmFseXNpcy4gVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBMU00gaW5vZGUgaG9vayBwcm90b3R5cGVzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGludm9jYXRpb25zIGluIHRoZSBWRlMgbGF5ZXIgKGZzL25hbWVpLmMsIGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYykgYW5kIHNlY3VyaXR5IG1vZHVsZXMgdG8gcHJvcGFnYXRlIHRoZSAmIzM5O3N0cnVjdCBtbnRfaWRtYXAgKmlkbWFwJiMzOTsgYXJndW1lbnQsIGFsb25nIHdpdGggYWRkaW5nIEJQRiBMU00gdGVzdCBjYXNlcyBmb3IgdGhlc2UgaG9va3MuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBzaWduYXR1cmUgYW5kIGNhbGxpbmcgY29udmVudGlvbiB1cGRhdGVzIHBhc3NpbmcgYW4gZXhpc3RpbmcgaWRtYXAgcG9pbnRlciB0aHJvdWdoIHRvIHRoZSBMU00gaG9vayBpbmZyYXN0cnVjdHVyZS4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgTFNNIGlub2RlIGhvb2sgcHJvdG90eXBlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBpbnZvY2F0aW9ucyBpbiB0aGUgVkZTIGxheWVyIChmcy9uYW1laS5jLCBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMpIGFuZCBzZWN1cml0eSBtb2R1bGVzIHRvIHByb3BhZ2F0ZSB0aGUgJiMzOTtzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCYjMzk7IGFyZ3VtZW50LCBhbG9uZyB3aXRoIGFkZGluZyBCUEYgTFNNIHRlc3QgY2FzZXMgZm9yIHRoZXNlIGhvb2tzLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgc2lnbmF0dXJlIGFuZCBjYWxsaW5nIGNvbnZlbnRpb24gdXBkYXRlcyBwYXNzaW5nIGFuIGV4aXN0aW5nIGlkbWFwIHBvaW50ZXIgdGhyb3VnaCB0byB0aGUgTFNNIGhvb2sgaW5mcmFzdHJ1Y3R1cmUuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjA4LjU0Njk4NzMzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDkxODA4OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9saW5rXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtub2RcIixcbiAgICBcInNtYWNrX2lub2RlX2xpbmtcIixcbiAgICBcImNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyXCIsXG4gICAgXCJ2ZnNfbWtvYmpcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgTFNNIGlub2RlIGhvb2sgcHJvdG90eXBlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBpbnZvY2F0aW9ucyBpbiB0aGUgVkZTIGxheWVyIChmcy9uYW1laS5jLCBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMpIGFuZCBzZWN1cml0eSBtb2R1bGVzIHRvIHByb3BhZ2F0ZSB0aGUgJ3N0cnVjdCBtbnRfaWRtYXAgKmlkbWFwJyBhcmd1bWVudCwgYWxvbmcgd2l0aCBhZGRpbmcgQlBGIExTTSB0ZXN0IGNhc2VzIGZvciB0aGVzZSBob29rcy5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgc2lnbmF0dXJlIGFuZCBjYWxsaW5nIGNvbnZlbnRpb24gdXBkYXRlcyBwYXNzaW5nIGFuIGV4aXN0aW5nIGlkbWFwIHBvaW50ZXIgdGhyb3VnaCB0byB0aGUgTFNNIGhvb2sgaW5mcmFzdHJ1Y3R1cmUuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBMU00gaW5vZGUgaG9vayBpbnRlcmZhY2VzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGNhbGxlcnMgYWNyb3NzIHRoZSBWRlMgbGF5ZXIsIENhY2hlRmlsZXMsIFNFTGludXgsIGFuZCBTbWFjayB0byBwYXNzIHRoZSBtb3VudCBpZG1hcCAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGFsdGVycyBjb3JlIFZGUyBhbmQgTFNNIGludGVyYWN0aW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHJlbGV2YW50IHRvIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjA4LjU0Njk5MjQyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MzY3NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTVkMGYyMzdjMDJhM2VhNWU4YTEyZTExZjFjZWQyNjFlYjExOTIzZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDAwOjMxOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xcbmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0XFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXFxuKysrIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXFxuQEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcXG4rXFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHByX2VycihcXFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZFxcXCIsXFxuIFxcdFxcdCAgICAgICByZXQpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcXG4rXFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cHJfZXJyKFxcXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkXFxcIixcXG4gXFx0XFx0ICAgICAgIHJldCk7XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXFxuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcXG4tLS0gYS9mcy9uYW1laS5jXFxuKysrIGIvZnMvbmFtZWkuY1xcbkBAIC02NTgsNyArNjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdGlmICh1bmxpa2VseShyZXR2YWwpKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4tXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xcbitcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7XFxuIFxcbkBAIC02OTUsNyArNjk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcXG4gXFx0aWYgKHVubGlrZWx5KCgoaW5vZGUtXFx1MDAzZWlfbW9kZSBcXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcXG4gXFx0XFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcXG4gXFxuLVxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcXG4rXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQxODgsNyArNDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFx0Lyogc2hvdWxkbid0IGl0IGJlIEVOT1NZUz8gKi9cXG4gXFxuIFxcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xcbkBAIC00MjEyLDcgKzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbiBcXG4gXFx0bW9kZSBcXHUwMDI2PSBTX0lBTExVR087XFxuIFxcdG1vZGUgfD0gU19JRlJFRztcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0ZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTtcXG5AQCAtNDMyOCw3ICs0MzI4LDcgQEAgc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4tXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC01MjU4LDcgKzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbkBAIC01Mzk1LDcgKzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG5AQCAtNTc4Myw3ICs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0aWYgKCFkaXItXFx1MDAzZWlfb3AtXFx1MDAzZXN5bWxpbmspXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbkBAIC01OTA3LDcgKzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuQEAgLTEyMCwyNiArMTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCBpbnQgKnhhdHRyX2NvdW50KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHQgdW1vZGVfdCBtb2RlKVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0IHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdCB1bW9kZV90IG1vZGUpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZWFkbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCBib29sIHJjdSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5AQCAtNDA0LDI0ICs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdFxcdFxcdCAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHQgICAgICAgYm9vbCByY3UpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHQgICAgICBpbnQgbWFzayk7XFxuIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XFxuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuQEAgLTkwMiw5ICs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdCB1bW9kZV90IG1vZGUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTkxMyw5ICs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXFxuIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHsgfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05MjYsMTYgKzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdGludCBtb2RlKVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTQ2LDkgKzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdGludCBtb2RlLCBkZXZfdCBkZXYpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTk3NCw3ICs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG5pbmRleCAyZWUyNzZhYjE1YzViLi5hOTE5MGRhMzM0MWRkIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuQEAgLTE2MTQsNiArMTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWRcXG4gICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGVcXG5AQCAtMTYyMiwxMiArMTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICB1bW9kZV90IG1vZGUpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpO1xcbiBcXG5AQCAtMTY0OCw2ICsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGVcXG4gICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnlcXG4gICogQG5ld19kZW50cnk6IG5ldyBsaW5rXFxuQEAgLTE2NTYsMTIgKzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xNjgyLDYgKzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rXFxuICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWVcXG5AQCAtMTY5MCwxNiArMTY5MywxNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcXG4gfVxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX21rZGlyKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIG5ldyBkaXJlY3RvcnkgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnlcXG4gICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZVxcbkBAIC0xNzA5LDExICsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTtcXG4gXFxuQEAgLTE3MzUsNiArMTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcXG4gICogQGRlbnRyeTogbmV3IGZpbGVcXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcXG5AQCAtMTc0NywxMiArMTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4raW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xODIzLDYgKzE4MjksNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBpbm9kZTogaW5vZGVcXG4gICogQG1hc2s6IGFjY2VzcyBtYXNrXFxuICAqXFxuQEAgLTE4MzUsMTEgKzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHQgICAgICBpbnQgbWFzaylcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMzA3NCwxMiArMzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdCAgICBcXHUwMDI2YWQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7XFxuIH1cXG5AQCAtMzA4OSwxMiArMzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0RJUik7XFxuIH1cXG5AQCAtMzEwNCw3ICszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhtb2RlKSk7XFxuIH1cXG5AQCAtMzIzNiwxMyArMzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxcbiBcXG4gLyoqXFxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkXFxuICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWRcXG4gICpcXG4gICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvXFxuICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS5cXG4gICovXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcXG4ge1xcbiBcXHRpbnQgbWFzaztcXG4gXFx0dTMyIHBlcm1zO1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXFxuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXFxuQEAgLTEwODksMTQgKzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXG4gLyoqXFxuICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XFxuICAqIEBkaXI6IHVudXNlZFxcbiAgKiBAbmV3X2RlbnRyeTogdGhlIG5ldyBvYmplY3RcXG4gICpcXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuICAqL1xcbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDtcXG4gXFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xcbkBAIC0xMjI2LDYgKzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4gXFxuIC8qKlxcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb25cXG4gICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkXFxuICAqXFxuQEAgLTEyMzMsNyArMTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbiAgKlxcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcXG4gICovXFxuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgIGludCBtYXNrKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS1cXHUwMDNlaV9zYik7XFxuIFxcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcXG5pbmRleCBkNzQ5NWVmZDRhNTYyLi5jMGFlODEzNjk4YWUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXFxuQEAgLTEsMTggKzEsMzAgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbiBcXG4gLypcXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW91bnQuaFxcdTAwM2VcXG4rXFxuICNpbmNsdWRlIFxcXCJsc20uc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibHNtX3RhaWxjYWxsLnNrZWwuaFxcXCJcXG4gXFxuIGNoYXIgKkNNRF9BUkdTW10gPSB7XFxcInRydWVcXFwiLCBOVUxMfTtcXG4gXFxuK2VudW0ge1xcbitcXHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNikgLSAxLFxcbit9O1xcbitcXG4gaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcXG4ge1xcbiBcXHRpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7XFxuQEAgLTMwLDYgKzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbiBcXG4rc3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcXG4rXFx0fSB3aGlsZSAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5UUik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpXFxuK3tcXG4rXFx0c2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7XFxuK1xcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldCA9IHdyaXRlX25vaW50cihmZCwgdmFsdWUsIGxlbik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRlbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pXFxuK1xcdFxcdHNhdmVkX2Vycm5vID0gRUlPO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdGlmIChzYXZlZF9lcnJubykge1xcbitcXHRcXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSlcXG4re1xcbitcXHRjaGFyIHBhdGhbNjRdO1xcbitcXHRpbnQgbGVuO1xcbitcXG4rXFx0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiL3Byb2MvJWQvJXNcXFwiLCBwaWQsIG5hbWUpO1xcbitcXHRpZiAobGVuIFxcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcXG4rXFx0XFx0ZXJybm8gPSBFT1ZFUkZMT1c7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcXG4re1xcbitcXHRjaGFyIHBhdGhbNjRdO1xcbitcXHRwaWRfdCBwaWQsIHdhaXRlZDtcXG4rXFx0aW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1cztcXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKHBpZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxcbitcXHRcXHRcXHRfZXhpdCgxKTtcXG4rXFx0XFx0cmFpc2UoU0lHU1RPUCk7XFxuK1xcdFxcdF9leGl0KDApO1xcbitcXHR9XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCBXVU5UUkFDRUQpO1xcbitcXHR9IHdoaWxlICh3YWl0ZWQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlRSKTtcXG4rXFx0aWYgKHdhaXRlZCAhPSBwaWQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkge1xcbitcXHRcXHRwaWQgPSAtMTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovXFxuK1xcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFxcXCJzZXRncm91cHNcXFwiLCBcXFwiZGVueVxcXCIpIFxcdTAwMjZcXHUwMDI2IGVycm5vICE9IEVOT0VOVClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFxcXCJ1aWRfbWFwXFxcIiwgXFxcIjAgMCAxXFxcIikgfHxcXG4rXFx0ICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXFxcImdpZF9tYXBcXFwiLCBcXFwiMCAwIDFcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy8lZC9ucy91c2VyXFxcIiwgcGlkKTtcXG4rXFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XFxuK1xcdFxcdGVycm5vID0gRU9WRVJGTE9XO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xcbitcXG4rb3V0OlxcbitcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRpZiAocGlkIFxcdTAwM2UgMCkge1xcbitcXHRcXHRraWxsKHBpZCwgU0lHS0lMTCk7XFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApO1xcbitcXHRcXHR9IHdoaWxlICh3YWl0ZWQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlRSKTtcXG4rXFx0fVxcbitcXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY3JlYXRlX2lkbWFwcGVkX3RtcGZzKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHtcXG4rXFx0XFx0LmF0dHJfc2V0ID0gTU9VTlRfQVRUUl9JRE1BUCxcXG4rXFx0fTtcXG4rXFx0aW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xO1xcbitcXG4rXFx0dXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpO1xcbitcXHRpZiAodXNlcm5zX2ZkIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqL1xcbitcXHRmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgXFxcInRtcGZzXFxcIiwgRlNPUEVOX0NMT0VYRUMpO1xcbitcXHRpZiAoZnNmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRtbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApO1xcbitcXHRpZiAobW50ZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkO1xcbitcXHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcXFwiXFxcIiwgQVRfRU1QVFlfUEFUSCwgXFx1MDAyNmF0dHIsXFxuK1xcdFxcdCAgICBzaXplb2YoYXR0cikpKSB7XFxuK1xcdFxcdGNsb3NlKG1udGZkKTtcXG4rXFx0XFx0bW50ZmQgPSAtMTtcXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRpZiAoZnNmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmc2ZkKTtcXG4rXFx0aWYgKHVzZXJuc19mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZSh1c2VybnNfZmQpO1xcbitcXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xcbitcXHRyZXR1cm4gbW50ZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxcbit7XFxuK1xcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcXG4rXFxuK1xcdGZkID0gb3BlbmF0KGRpcmZkLCBcXFwiZmlsZVxcXCIsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQyxcXG4rXFx0XFx0ICAgIDA2MDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcImNyZWF0ZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRmZCA9IC0xO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgXFxcImRpclxcXCIsIDA3MDApLCBcXFwibWtkaXJcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcXFwidGFyZ2V0XFxcIiwgZGlyZmQsIFxcXCJzeW1saW5rXFxcIiksIFxcXCJzeW1saW5rXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFxcXCJmaWxlXFxcIiwgZGlyZmQsIFxcXCJsaW5rXFxcIiwgMCksIFxcXCJsaW5rXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgXFxcImZpZm9cXFwiLCAwNjAwKSwgXFxcIm1rbm9kXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gMDtcXG4rb3V0OlxcbitcXHRpZiAoZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcImxpbmtcXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJmaWZvXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwic3ltbGlua1xcXCIsIDApO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcImZpbGVcXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJkaXJcXFwiLCBBVF9SRU1PVkVESVIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXFxuK3tcXG4rXFx0Y2hhciB0bXBkaXJbXSA9IFxcXCIvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFhcXFwiO1xcbitcXHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcXG4rXFx0aW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7XFxuK1xcdGludCByZXQgPSAtMTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksIFxcXCJta2R0ZW1wXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShkaXJmZCwgMCwgXFxcIm9wZW5fdG1wZGlyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsIFxcXCJjcmVhdGVfaWRtYXBwZWRfdG1wZnNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcXFwiaWRlbnRpdHlfaWRtYXBcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGlkbWFwcGVkX2RpcmZkKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJpZG1hcHBlZF9tb3VudFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiwgZXhwZWN0ZWQsXFxuK1xcdFxcdCAgICAgICBcXFwiaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlblxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsXFxuK1xcdFxcdFxcdFxcXCJpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuXFxcIikgPyAwIDogLTE7XFxuK1xcbitvdXQ6XFxuK1xcdGlmIChpZG1hcHBlZF9kaXJmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShpZG1hcHBlZF9kaXJmZCk7XFxuK1xcdGlmIChkaXJmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShkaXJmZCk7XFxuK1xcdHJtZGlyKHRtcGRpcik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuQEAgLTUzLDYgKzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXFxuIFxcbiBcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4gXFxuK1xcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X2xzbV9pbm9kZV9pZG1hcFxcXCIpKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4gXFx0ZXJyID0gc3RhY2tfbXByb3RlY3QoKTtcXG4gXFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgXFxcInN0YWNrX21wcm90ZWN0XFxcIikgfHxcXG4gXFx0ICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCBcXFwic3RhY2tfbXByb3RlY3RcXFwiKSlcXG5AQCAtNzEsNiArMzAwLDggQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxcbiBcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNvcHlfdGVzdCA9IDA7XFxuIFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYnBybV9jb3VudCA9IDA7XFxuIFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbXByb3RlY3RfY291bnQgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcXG5AQCAtODQsNiArODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuIGludCBtb25pdG9yZWRfcGlkID0gMDtcXG4gaW50IG1wcm90ZWN0X2NvdW50ID0gMDtcXG4gaW50IGJwcm1fY291bnQgPSAwO1xcbitfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcXG4rX191MzIgaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XFxuK1xcbitlbnVtIHtcXG4rXFx0SU5PREVfSURNQVBfQ1JFQVRFXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyAwLFxcbitcXHRJTk9ERV9JRE1BUF9MSU5LXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyAxLFxcbitcXHRJTk9ERV9JRE1BUF9TWU1MSU5LXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyAyLFxcbitcXHRJTk9ERV9JRE1BUF9NS0RJUlxcdD0gMVUgXFx1MDAzY1xcdTAwM2MgMyxcXG4rXFx0SU5PREVfSURNQVBfTUtOT0RcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDQsXFxuK1xcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDUsXFxuK307XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxcbit7XFxuK1xcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFxcdTAwM2VcXHUwMDNlIDMyO1xcbitcXG4rXFx0cmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkIFxcdTAwMjZcXHUwMDI2IGlkbWFwO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXFxuK3tcXG4rXFx0cmV0dXJuIGlkbWFwLVxcdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgaWRtYXAtXFx1MDAzZWdpZF9tYXAubnJfZXh0ZW50cyA9PSAwO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpXFxuK3tcXG4rXFx0aWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcXG4rXFx0XFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xcbitcXHRlbHNlXFxuK1xcdFxcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX2NyZWF0ZVxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfbGlua1xcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfc3ltbGlua1xcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX21rZGlyXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfbWtub2RcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX3Blcm1pc3Npb25cXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpO1xcbit9XFxuIFxcbiBTRUMoXFxcImxzbS9maWxlX21wcm90ZWN0XFxcIilcXG4gaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTowOS4wNDUxNjUwNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyNzY2MzQ1OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9saW5rXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtub2RcIixcbiAgICBcInNtYWNrX2lub2RlX2xpbmtcIixcbiAgICBcImNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyXCIsXG4gICAgXCJ2ZnNfbWtvYmpcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIExTTSBpbm9kZSBob29rIGludGVyZmFjZXMgKGlub2RlX2NyZWF0ZSwgaW5vZGVfbGluaywgaW5vZGVfc3ltbGluaywgaW5vZGVfbWtkaXIsIGlub2RlX21rbm9kLCBpbm9kZV9wZXJtaXNzaW9uKSBhbmQgdGhlaXIgY2FsbGVycyBhY3Jvc3MgdGhlIFZGUyBsYXllciwgQ2FjaGVGaWxlcywgU0VMaW51eCwgYW5kIFNtYWNrIHRvIHBhc3MgdGhlIG1vdW50IGlkbWFwIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgYWx0ZXJzIGNvcmUgVkZTIGFuZCBMU00gaW50ZXJhY3Rpb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQgdG8gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NWQwZjIzN2MwMmEzZWE1ZThhMTJlMTFmMWNlZDI2MWViMTE5MjNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMDozMTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDRcbi0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuKysrIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5AQCAtNTEsMTQgKzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuK1x0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuK1x0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkXCIsXG4gXHRcdCAgICAgICByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmICh1bmxpa2VseShyZXR2YWwpKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcbiBcbkBAIC02OTUsNyArNjk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcbiBcdGlmICh1bmxpa2VseSgoKGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNDE4OCw3ICs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcdC8qIHNob3VsZG4ndCBpdCBiZSBFTk9TWVM/ICovXG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG5AQCAtNDIxMiw3ICs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcbiBcdG1vZGUgXHUwMDI2PSBTX0lBTExVR087XG4gXHRtb2RlIHw9IFNfSUZSRUc7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XG5AQCAtNDMyOCw3ICs0MzI4LDcgQEAgc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuIH1cbiBcbiAvKipcbkBAIC01MjU4LDcgKzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTM5NSw3ICs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbkBAIC01NzgzLDcgKzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFkaXItXHUwMDNlaV9vcC1cdTAwM2VzeW1saW5rKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTkwNyw3ICs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTEyMCwyNiArMTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgaW50ICp4YXR0cl9jb3VudClcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHQgc3RydWN0IGlub2RlICppbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgYm9vbCByY3UpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtNDA0LDI0ICs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuIGludCBzZWN1cml0eV9pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0XHRcdCAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LFxuIFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCAgICAgICBib29sIHJjdSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spO1xuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgICAgIGludCBtYXNrKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC05MDIsOSArOTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0IHVtb2RlX3QgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTEzLDkgKzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MjYsMTYgKzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0IHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdCAgICAgICBpbnQgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTQ2LDkgKzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSwgZGV2X3QgZGV2KVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NzQsNyArOTgzLDggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC0xNjE0LDYgKzE2MTQsNyBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkXG4gICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGVcbkBAIC0xNjIyLDEyICsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUpXG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbiBcbkBAIC0xNjQ4LDYgKzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGVcbiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBuZXdfZGVudHJ5OiBuZXcgbGlua1xuQEAgLTE2NTYsMTIgKzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjgyLDYgKzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rXG4gICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZVxuQEAgLTE2OTAsMTYgKzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuIH1cbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBuZXcgZGlyZWN0b3J5XG4gICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZVxuQEAgLTE3MDksMTEgKzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xuIFxuQEAgLTE3MzUsNiArMTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGZpbGVcbiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZVxuQEAgLTE3NDcsMTIgKzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTgyMyw2ICsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiBpbm9kZVxuICAqIEBtYXNrOiBhY2Nlc3MgbWFza1xuICAqXG5AQCAtMTgzNSwxMSArMTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgICAgIGludCBtYXNrKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0zMDc0LDEyICszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgXHUwMDI2YWQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspO1xuIH1cbkBAIC0zMDg5LDEyICszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xuIH1cbkBAIC0zMTA0LDcgKzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xuIH1cbkBAIC0zMjM2LDEzICszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsXG4gXG4gLyoqXG4gICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkXG4gICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZFxuICAqXG4gICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvXG4gICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbiB7XG4gXHRpbnQgbWFzaztcbiBcdHUzMiBwZXJtcztcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5pbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5AQCAtMTA4OSwxNCArMTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XG4gICogQGRpcjogdW51c2VkXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbkBAIC0xMjI2LDYgKzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIGluIHF1ZXN0aW9uXG4gICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkXG4gICpcbkBAIC0xMjMzLDcgKzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiAgKlxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgIGludCBtYXNrKVxuIHtcbiBcdHN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbkBAIC0xLDE4ICsxLDMwIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4gXG4gLypcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwibHNtLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJsc21fdGFpbGNhbGwuc2tlbC5oXCJcbiBcbiBjaGFyICpDTURfQVJHU1tdID0ge1widHJ1ZVwiLCBOVUxMfTtcbiBcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcdTAwM2NcdTAwM2MgNikgLSAxLFxuK307XG4rXG4gaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcbiB7XG4gXHRpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7XG5AQCAtMzAsNiArNDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcbitcdH0gd2hpbGUgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpO1xuK1x0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHJldCA9IHdyaXRlX25vaW50cihmZCwgdmFsdWUsIGxlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0ZWxzZSBpZiAoKHNpemVfdClyZXQgIT0gbGVuKVxuK1x0XHRzYXZlZF9lcnJubyA9IEVJTztcbitcdGNsb3NlKGZkKTtcbitcdGlmIChzYXZlZF9lcnJubykge1xuK1x0XHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRpbnQgbGVuO1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkLyVzXCIsIHBpZCwgbmFtZSk7XG4rXHRpZiAobGVuIFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XG4rXHRcdGVycm5vID0gRU9WRVJGTE9XO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRwaWRfdCBwaWQsIHdhaXRlZDtcbitcdGludCBmZCA9IC0xLCBsZW4sIHNhdmVkX2Vycm5vLCBzdGF0dXM7XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAocGlkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikpXG4rXHRcdFx0X2V4aXQoMSk7XG4rXHRcdHJhaXNlKFNJR1NUT1ApO1xuK1x0XHRfZXhpdCgwKTtcbitcdH1cbitcbitcdGRvIHtcbitcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgV1VOVFJBQ0VEKTtcbitcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0aWYgKHdhaXRlZCAhPSBwaWQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcbitcdFx0cGlkID0gLTE7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi9cbitcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwic2V0Z3JvdXBzXCIsIFwiZGVueVwiKSBcdTAwMjZcdTAwMjYgZXJybm8gIT0gRU5PRU5UKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwidWlkX21hcFwiLCBcIjAgMCAxXCIpIHx8XG4rXHQgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcImdpZF9tYXBcIiwgXCIwIDAgMVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvJWQvbnMvdXNlclwiLCBwaWQpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xuK1xuK291dDpcbitcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRpZiAocGlkIFx1MDAzZSAwKSB7XG4rXHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbitcdFx0ZG8ge1xuK1x0XHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcbitcdFx0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXHR9XG4rXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0cmV0dXJuIGZkO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7XG4rXHRcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXG4rXHR9O1xuK1x0aW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xO1xuK1xuK1x0dXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpO1xuK1x0aWYgKHVzZXJuc19mZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqL1xuK1x0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFwidG1wZnNcIiwgRlNPUEVOX0NMT0VYRUMpO1xuK1x0aWYgKGZzZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTtcbitcdGlmIChtbnRmZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcbitcdGlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsIFwiXCIsIEFUX0VNUFRZX1BBVEgsIFx1MDAyNmF0dHIsXG4rXHRcdCAgICBzaXplb2YoYXR0cikpKSB7XG4rXHRcdGNsb3NlKG1udGZkKTtcbitcdFx0bW50ZmQgPSAtMTtcbitcdH1cbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKGZzZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmc2ZkKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZSh1c2VybnNfZmQpO1xuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBtbnRmZDtcbit9XG4rXG4rc3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpXG4re1xuK1x0aW50IGZkID0gLTEsIHJldCA9IC0xO1xuK1xuK1x0ZmQgPSBvcGVuYXQoZGlyZmQsIFwiZmlsZVwiLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFkgfCBPX0NMT0VYRUMsXG4rXHRcdCAgICAwNjAwKTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRjbG9zZShmZCk7XG4rXHRmZCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgXCJkaXJcIiwgMDcwMCksIFwibWtkaXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KFwidGFyZ2V0XCIsIGRpcmZkLCBcInN5bWxpbmtcIiksIFwic3ltbGlua1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFwiZmlsZVwiLCBkaXJmZCwgXCJsaW5rXCIsIDApLCBcImxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsIFwiZmlmb1wiLCAwNjAwKSwgXCJta25vZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSAwO1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWZvXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwic3ltbGlua1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImZpbGVcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJkaXJcIiwgQVRfUkVNT1ZFRElSKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbClcbit7XG4rXHRjaGFyIHRtcGRpcltdID0gXCIvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFhcIjtcbitcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xuK1x0aW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcCh0bXBkaXIpLCBcIm1rZHRlbXBcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsIFwib3Blbl90bXBkaXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcbitcdGlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCBcImNyZWF0ZV9pZG1hcHBlZF90bXBmc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcImlkZW50aXR5X2lkbWFwXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGlkbWFwcGVkX2RpcmZkKSxcbitcdFx0ICAgICAgIFwiaWRtYXBwZWRfbW91bnRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiwgZXhwZWN0ZWQsXG4rXHRcdCAgICAgICBcImlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxuK1x0XHRcdFwiaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlblwiKSA/IDAgOiAtMTtcbitcbitvdXQ6XG4rXHRpZiAoaWRtYXBwZWRfZGlyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShpZG1hcHBlZF9kaXJmZCk7XG4rXHRpZiAoZGlyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShkaXJmZCk7XG4rXHRybWRpcih0bXBkaXIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIHtcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbkBAIC01Myw2ICsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuIFxuK1x0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9sc21faW5vZGVfaWRtYXBcIikpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRlcnIgPSBzdGFja19tcHJvdGVjdCgpO1xuIFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgXCJzdGFja19tcHJvdGVjdFwiKSB8fFxuIFx0ICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCBcInN0YWNrX21wcm90ZWN0XCIpKVxuQEAgLTcxLDYgKzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfdGVzdCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2NvdW50ID0gMDtcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1wcm90ZWN0X2NvdW50ID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC04NCw2ICs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gaW50IG1vbml0b3JlZF9waWQgPSAwO1xuIGludCBtcHJvdGVjdF9jb3VudCA9IDA7XG4gaW50IGJwcm1fY291bnQgPSAwO1xuK19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuK1xuK2VudW0ge1xuK1x0SU5PREVfSURNQVBfQ1JFQVRFXHQ9IDFVIFx1MDAzY1x1MDAzYyAwLFxuK1x0SU5PREVfSURNQVBfTElOS1x0PSAxVSBcdTAwM2NcdTAwM2MgMSxcbitcdElOT0RFX0lETUFQX1NZTUxJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDIsXG4rXHRJTk9ERV9JRE1BUF9NS0RJUlx0PSAxVSBcdTAwM2NcdTAwM2MgMyxcbitcdElOT0RFX0lETUFQX01LTk9EXHQ9IDFVIFx1MDAzY1x1MDAzYyA0LFxuK1x0SU5PREVfSURNQVBfUEVSTUlTU0lPTlx0PSAxVSBcdTAwM2NcdTAwM2MgNSxcbit9O1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4re1xuK1x0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuK1xuK1x0cmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkIFx1MDAyNlx1MDAyNiBpZG1hcDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2lkZW50aXR5X2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdHJldHVybiBpZG1hcC1cdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBpZG1hcC1cdTAwM2VnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHQgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KVxuK3tcbitcdGlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxuK1x0XHRpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7XG4rXHRlbHNlXG4rXHRcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfY3JlYXRlXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2xpbmtcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX3N5bWxpbmtcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX21rZGlyXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta25vZFwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9wZXJtaXNzaW9uXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7XG4rfVxuIFxuIFNFQyhcImxzbS9maWxlX21wcm90ZWN0XCIpXG4gaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MDkuMDQ1MTY2OTY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk4MzQ0MzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQncyB3b3J0aCB0b3NzaW5nIGludG8gdGhlIHN5emthbGxlciBncmluZGVyLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGZpbGVzIHRvdWNoZWQgLSBgZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jYCwgYGZzL25hbWVpLmNgLCBhIGJ1bmNoIG9mIGBpbmNsdWRlL2xpbnV4LypgIGhlYWRlcnMsIHZhcmlvdXMgYHNlY3VyaXR5LypgIGZpbGVzLCBhbmQgZXZlbiBzb21lIEJQRiBzZWxmLXRlc3RzIOKAkyBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIFRoaXMgcGF0Y2ggaXMgY2xlYXJseSBwb2tpbmcgYXJvdW5kIGluIHNlbnNpdGl2ZSBhcmVhczogdGhlIGZpbGVzeXN0ZW1zLCBuYW1pbmcgaW50ZXJmYWNlLCBhbmQgdGhlIHNlY3VyaXR5IGxheWVyLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluamVjdGluZyBhIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgaW50byBzZXZlcmFsIExTTSBpbm9kZSBob29rcy4gVGhpbmsgYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgdGhlIHdob2xlIHN1aXRlLiBUaGV5J3ZlIHVwZGF0ZWQgdGhlIGhvb2sgc2lnbmF0dXJlcyBpbiB0aGUgcmVsZXZhbnQgTFNNIHN1YnN5c3RlbXMgKFNFTGludXgsIFNtYWNrKSBhbmQgdGhlIEJQRiBzZWxmLXRlc3RzLiBUaGF0IG1lYW5zIHRoZXnigJlyZSB0b3VjaGluZyB0aGUgY29yZSBMU00gZGlzcGF0Y2hlcnMgYW5kLCBieSBleHRlbnNpb24sICphbnkqIHNlY3VyaXR5IG1vZHVsZXMgdGhhdCBkZXBlbmQgb24gdGhlbS5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogYXJlIHRoZXNlIG1vZGlmaWNhdGlvbnMgaGl0dGluZyBjb3JlLCByZWFjaGFibGUga2VybmVsIGNvZGU/IEkgY2FuIHNlZSBpdCwgYmFzZWQgb24gbXkga25vd2xlZGdlIG9mIHRoZSBmaWxlcywgYGZzL25hbWVpLmNgIHdoaWNoIGluY2x1ZGVzIGZ1bmRhbWVudGFsIFZGUyBvcGVyYXRpb25zIGxpa2UgYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYHZmc19ta25vZGAsIGFsbCB0aGUgd2F5IGRvd24gdG8gYGlub2RlX3Blcm1pc3Npb25gLiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgaXMgdGhlIExTTSBkaXNwYXRjaGVyIGl0c2VsZiwgd2hpY2ggaXMgYWx3YXlzIGluIHRoZSBjcml0aWNhbCBwYXRoLiBXZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGlub2RlIG9wZXJhdGlvbnMgKG9wZW4sIG1rZGlyLCBta25vZCwgc3ltbGluaywgbGluaywgZXRjLikgYW5kIHNlY3VyaXR5IGZyYW1ld29yayAoTFNNKS5cblxuQWNjb3JkaW5nIHRvIHNlY3Rpb24gMywgYW55dGhpbmcgdG91Y2hpbmcgY29yZSBWRlMsIExTTSBpbnRlcmZhY2VzLCBvciBhbnkgcmVmYWN0b3JpbmdzIG9mIGFsZ29yaXRobXMsIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nIHNob3VsZCBiZSB3b3J0aCBmdXp6aW5nLiAqKldvcnRoRnV6emluZyBtdXN0IGJlIHRydWUuKipcblxuU28sIHllYWgsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scyB3ZSBzaG91bGQgYmUgZm9jdXNpbmcgb24g4oCTIHRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLCBvciBjaGVjayBLY29uZmlnLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIHRoZXNlIHNlY3VyaXR5IGZlYXR1cmVzIG9yIGFueSBuZXcgc3ltYm9scyB0aGF0IG1pZ2h0IGV4cG9zZSBuZXcgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjE1LjAyODYxMjk1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQwNTczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTRUNVUklUWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyMTcwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5zZWN1cml0eS9LY29uZmlnPTg9c291cmNlIFxcXCJzZWN1cml0eS9rZXlzL0tjb25maWdcXFwiXFxuc2VjdXJpdHkvS2NvbmZpZy05LVxcbnNlY3VyaXR5L0tjb25maWc6MTA6Y29uZmlnIFNFQ1VSSVRZX0RNRVNHX1JFU1RSSUNUXFxuc2VjdXJpdHkvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJSZXN0cmljdCB1bnByaXZpbGVnZWQgYWNjZXNzIHRvIHRoZSBrZXJuZWwgc3lzbG9nXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz01Mj1jb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTcyLVxcbnNlY3VyaXR5L0tjb25maWc6NzM6Y29uZmlnIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZy03NC1cXHRib29sIFxcXCJFbmFibGUgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVsc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctODUtXFxuc2VjdXJpdHkvS2NvbmZpZzo4Njpjb25maWcgSEFTX1NFQ1VSSVRZX0FVRElUXFxuc2VjdXJpdHkvS2NvbmZpZy04Ny1cXHRkZWZfYm9vbCB5XFxuc2VjdXJpdHkvS2NvbmZpZy04OC1cXHRkZXBlbmRzIG9uIEFVRElUXFxuc2VjdXJpdHkvS2NvbmZpZzo4OTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZy05MC1cXG5zZWN1cml0eS9LY29uZmlnOjkxOmNvbmZpZyBTRUNVUklUWUZTXFxuc2VjdXJpdHkvS2NvbmZpZy05Mi1cXHRib29sIFxcXCJFbmFibGUgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctOTgtXFxuc2VjdXJpdHkvS2NvbmZpZzo5OTpjb25maWcgU0VDVVJJVFlfTkVUV09SS1xcbnNlY3VyaXR5L0tjb25maWctMTAwLVxcdGJvb2wgXFxcIlNvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG5zZWN1cml0eS9LY29uZmlnOjEwMTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZy0xMDItXFx0aGVscFxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy0xMDctXFxuc2VjdXJpdHkvS2NvbmZpZzoxMDg6Y29uZmlnIFNFQ1VSSVRZX0lORklOSUJBTkRcXG5zZWN1cml0eS9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJJbmZpbmliYW5kIFNlY3VyaXR5IEhvb2tzXFxcIlxcbnNlY3VyaXR5L0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gU0VDVVJJVFkgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORFxcbnNlY3VyaXR5L0tjb25maWctMTExLVxcdGhlbHBcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTE2LVxcbnNlY3VyaXR5L0tjb25maWc6MTE3OmNvbmZpZyBTRUNVUklUWV9ORVRXT1JLX1hGUk1cXG5zZWN1cml0eS9LY29uZmlnLTExOC1cXHRib29sIFxcXCJYRlJNIChJUFNlYykgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG5zZWN1cml0eS9LY29uZmlnOjExOTpcXHRkZXBlbmRzIG9uIFhGUk0gXFx1MDAyNlxcdTAwMjYgU0VDVVJJVFlfTkVUV09SS1xcbnNlY3VyaXR5L0tjb25maWctMTIwLVxcdGhlbHBcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTI5LVxcbnNlY3VyaXR5L0tjb25maWc6MTMwOmNvbmZpZyBTRUNVUklUWV9QQVRIXFxuc2VjdXJpdHkvS2NvbmZpZy0xMzEtXFx0Ym9vbCBcXFwiU2VjdXJpdHkgaG9va3MgZm9yIHBhdGhuYW1lIGJhc2VkIGFjY2VzcyBjb250cm9sXFxcIlxcbnNlY3VyaXR5L0tjb25maWc6MTMyOlxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG5zZWN1cml0eS9LY29uZmlnLTEzMy1cXHRoZWxwXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnPTE2OT1jb25maWcgTFNNX01NQVBfTUlOX0FERFJcXG5zZWN1cml0eS9LY29uZmlnLTE3MC1cXHRpbnQgXFxcIkxvdyBhZGRyZXNzIHNwYWNlIGZvciBMU00gdG8gcHJvdGVjdCBmcm9tIHVzZXIgYWxsb2NhdGlvblxcXCJcXG5zZWN1cml0eS9LY29uZmlnOjE3MTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFxcdTAwMjZcXHUwMDI2IFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9LY29uZmlnLTE3Mi1cXHRkZWZhdWx0IDMyNzY4IGlmIEFSTSB8fCAoQVJNNjQgXFx1MDAyNlxcdTAwMjYgQ09NUEFUKVxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz0yMzQ9Y2hvaWNlXFxuc2VjdXJpdHkvS2NvbmZpZy0yMzUtXFx0cHJvbXB0IFxcXCJGaXJzdCBsZWdhY3kgJ21ham9yIExTTScgdG8gYmUgaW5pdGlhbGl6ZWRcXFwiXFxuc2VjdXJpdHkvS2NvbmZpZzoyMzY6XFx0ZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaWYgU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L0tjb25maWc6MjM3OlxcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpZiBTRUNVUklUWV9TTUFDS1xcbnNlY3VyaXR5L0tjb25maWc6MjM4OlxcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaWYgU0VDVVJJVFlfVE9NT1lPXFxuc2VjdXJpdHkvS2NvbmZpZzoyMzk6XFx0ZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SIGlmIFNFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvS2NvbmZpZzoyNDA6XFx0ZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX0RBQ1xcbnNlY3VyaXR5L0tjb25maWctMjQxLVxcbnNlY3VyaXR5L0tjb25maWctMjQyLVxcdGhlbHBcXG5zZWN1cml0eS9LY29uZmlnOjI0MzpcXHQgIFRoaXMgY2hvaWNlIGlzIHRoZXJlIG9ubHkgZm9yIGNvbnZlcnRpbmcgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlcXG5zZWN1cml0eS9LY29uZmlnLTI0NC1cXHQgIGluIG9sZCBrZXJuZWwgY29uZmlncyB0byBDT05GSUdfTFNNIGluIG5ldyBrZXJuZWwgY29uZmlncy4gRG9uJ3RcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMjUwLVxcbnNlY3VyaXR5L0tjb25maWc6MjUxOlxcdGNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9LY29uZmlnOjI1MjpcXHRcXHRib29sIFxcXCJTRUxpbnV4XFxcIiBpZiBTRUNVUklUWV9TRUxJTlVYPXlcXG5zZWN1cml0eS9LY29uZmlnLTI1My1cXG5zZWN1cml0eS9LY29uZmlnOjI1NDpcXHRjb25maWcgREVGQVVMVF9TRUNVUklUWV9TTUFDS1xcbnNlY3VyaXR5L0tjb25maWc6MjU1OlxcdFxcdGJvb2wgXFxcIlNpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sXFxcIiBpZiBTRUNVUklUWV9TTUFDSz15XFxuc2VjdXJpdHkvS2NvbmZpZy0yNTYtXFxuc2VjdXJpdHkvS2NvbmZpZzoyNTc6XFx0Y29uZmlnIERFRkFVTFRfU0VDVVJJVFlfVE9NT1lPXFxuc2VjdXJpdHkvS2NvbmZpZzoyNTg6XFx0XFx0Ym9vbCBcXFwiVE9NT1lPXFxcIiBpZiBTRUNVUklUWV9UT01PWU89eVxcbnNlY3VyaXR5L0tjb25maWctMjU5LVxcbnNlY3VyaXR5L0tjb25maWc6MjYwOlxcdGNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvS2NvbmZpZzoyNjE6XFx0XFx0Ym9vbCBcXFwiQXBwQXJtb3JcXFwiIGlmIFNFQ1VSSVRZX0FQUEFSTU9SPXlcXG5zZWN1cml0eS9LY29uZmlnLTI2Mi1cXG5zZWN1cml0eS9LY29uZmlnOjI2MzpcXHRjb25maWcgREVGQVVMVF9TRUNVUklUWV9EQUNcXG5zZWN1cml0eS9LY29uZmlnLTI2NC1cXHRcXHRib29sIFxcXCJVbml4IERpc2NyZXRpb25hcnkgQWNjZXNzIENvbnRyb2xzXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz0yNjg9Y29uZmlnIExTTVxcbnNlY3VyaXR5L0tjb25maWctMjY5LVxcdHN0cmluZyBcXFwiT3JkZXJlZCBsaXN0IG9mIGVuYWJsZWQgTFNNc1xcXCJcXG5zZWN1cml0eS9LY29uZmlnOjI3MDpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZzoyNzE6XFx0ZGVmYXVsdCBcXFwibGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxzbWFjayxzZWxpbnV4LHRvbW95byxhcHBhcm1vcixpcGUsYnBmXFxcIiBpZiBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLXFxuc2VjdXJpdHkvS2NvbmZpZzoyNzI6XFx0ZGVmYXVsdCBcXFwibGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxhcHBhcm1vcixzZWxpbnV4LHNtYWNrLHRvbW95byxpcGUsYnBmXFxcIiBpZiBERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvS2NvbmZpZzoyNzM6XFx0ZGVmYXVsdCBcXFwibGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCx0b21veW8saXBlLGJwZlxcXCIgaWYgREVGQVVMVF9TRUNVUklUWV9UT01PWU9cXG5zZWN1cml0eS9LY29uZmlnOjI3NDpcXHRkZWZhdWx0IFxcXCJsYW5kbG9jayxsb2NrZG93bix5YW1hLGxvYWRwaW4sc2FmZXNldGlkLGlwZSxicGZcXFwiIGlmIERFRkFVTFRfU0VDVVJJVFlfREFDXFxuc2VjdXJpdHkvS2NvbmZpZy0yNzUtXFx0ZGVmYXVsdCBcXFwibGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxzZWxpbnV4LHNtYWNrLHRvbW95byxhcHBhcm1vcixpcGUsYnBmXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy0yODQtXFxuc2VjdXJpdHkvS2NvbmZpZzoyODU6Y29uZmlnIFNFQ1VSSVRZX0NPTU1PTkNBUF9LVU5JVF9URVNUXFxuc2VjdXJpdHkvS2NvbmZpZy0yODYtXFx0Ym9vbCBcXFwiQnVpbGQgS1VuaXQgdGVzdHMgZm9yIGNvbW1vbmNhcFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxuc2VjdXJpdHkvTWFrZWZpbGU9OT1vYmoteVxcdFxcdFxcdFxcdFxcdCs9IGNvbW1vbmNhcC5vXFxuc2VjdXJpdHkvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1NFQ1VSSVRZKSBcXHRcXHRcXHQrPSBsc21fc3lzY2FsbHMub1xcbnNlY3VyaXR5L01ha2VmaWxlLTExLW9iai0kKENPTkZJR19NTVUpXFx0XFx0XFx0Kz0gbWluX2FkZHIub1xcbi0tXFxuc2VjdXJpdHkvTWFrZWZpbGUtMTMtIyBPYmplY3QgZmlsZSBsaXN0c1xcbnNlY3VyaXR5L01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19TRUNVUklUWSlcXHRcXHRcXHQrPSBzZWN1cml0eS5vIGxzbV9ub3RpZmllci5vIGxzbV9pbml0Lm9cXG5zZWN1cml0eS9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfU0VDVVJJVFlGUylcXHRcXHQrPSBpbm9kZS5vXFxuc2VjdXJpdHkvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpXFx0XFx0Kz0gc2VsaW51eC9cXG5zZWN1cml0eS9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfU0VDVVJJVFlfU01BQ0spXFx0XFx0Kz0gc21hY2svXFxuc2VjdXJpdHkvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0hBU19TRUNVUklUWV9BVURJVClcXHQrPSBsc21fYXVkaXQub1xcbnNlY3VyaXR5L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pXFx0XFx0Kz0gdG9tb3lvL1xcbnNlY3VyaXR5L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUilcXHRcXHQrPSBhcHBhcm1vci9cXG5zZWN1cml0eS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfU0VDVVJJVFlfWUFNQSlcXHRcXHQrPSB5YW1hL1xcbnNlY3VyaXR5L01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19TRUNVUklUWV9MT0FEUElOKVxcdFxcdCs9IGxvYWRwaW4vXFxuc2VjdXJpdHkvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NBRkVTRVRJRCkgICAgICAgKz0gc2FmZXNldGlkL1xcbnNlY3VyaXR5L01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19TRUNVUklUWV9MT0NLRE9XTl9MU00pXFx0Kz0gbG9ja2Rvd24vXFxuc2VjdXJpdHkvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX0NHUk9VUFMpXFx0XFx0XFx0Kz0gZGV2aWNlX2Nncm91cC5vXFxuc2VjdXJpdHkvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9MU00pXFx0XFx0XFx0Kz0gYnBmL1xcbnNlY3VyaXR5L01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19TRUNVUklUWV9MQU5ETE9DSylcXHRcXHQrPSBsYW5kbG9jay9cXG5zZWN1cml0eS9NYWtlZmlsZToyODpvYmotJChDT05GSUdfU0VDVVJJVFlfSVBFKVxcdFxcdCs9IGlwZS9cXG5zZWN1cml0eS9NYWtlZmlsZS0yOS1cXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yLy5rdW5pdGNvbmZpZz0yPUNPTkZJR19ORVQ9eVxcbnNlY3VyaXR5L2FwcGFybW9yLy5rdW5pdGNvbmZpZzozOkNPTkZJR19TRUNVUklUWT15XFxuc2VjdXJpdHkvYXBwYXJtb3IvLmt1bml0Y29uZmlnOjQ6Q09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SPXlcXG5zZWN1cml0eS9hcHBhcm1vci8ua3VuaXRjb25maWc6NTpDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVD15XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMy1cXHRib29sIFxcXCJBcHBBcm1vciBzdXBwb3J0XFxcIlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFxcdTAwMjZcXHUwMDI2IE5FVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNS1cXHRzZWxlY3QgQVVESVRcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjY6XFx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjc6XFx0c2VsZWN0IFNFQ1VSSVRZRlNcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg6XFx0c2VsZWN0IFNFQ1VSSVRZX05FVFdPUktcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTktXFx0ZGVmYXVsdCBuXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cXHRib29sIFxcXCJCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcXFwiXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyMDpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yMS1cXHRkZWZhdWx0IG5cXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXFx0Ym9vbCBcXFwiQnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1Z2dpbmcgYXNzZXJ0c1xcXCJcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjMwOlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTMxLVxcdGRlZmF1bHQgeVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zNy1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjM4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19NRVNTQUdFU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGVidWcgbWVzc2FnZXMgZW5hYmxlZCBieSBkZWZhdWx0XFxcIlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDEtXFx0ZGVmYXVsdCBuXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ2LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cXHRib29sIFxcXCJBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFxcXCJcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ5OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTUwLVxcdGRlZmF1bHQgeVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy01OC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjU5OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cXHRib29sIFxcXCJFbmFibGUgaW50cm9zcGVjdGlvbiBvZiBzaGEyNTYgaGFzaGVzIGZvciBsb2FkZWQgcHJvZmlsZXNcXFwiXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo2MTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02Mi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzAtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03Mi0gICAgICAgYm9vbCBcXFwiRW5hYmxlIHBvbGljeSBoYXNoIGludHJvc3BlY3Rpb24gYnkgZGVmYXVsdFxcXCJcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjczOiAgICAgICBkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTc0LSAgICAgICBkZWZhdWx0IHlcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODMtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODUtXFx0Ym9vbCBcXFwiQWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVxcXCJcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg2OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JfSU5UUk9TUEVDVF9QT0xJQ1lcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTg3LVxcdHNlbGVjdCBaU1REX0NPTVBSRVNTXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk1LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6OTY6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJBbGxvdyBsb2FkaW5nIHBvbGljeSBpbiBhIGNvbXByZXNzZWQgZm9ybWF0XFxcIlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6OTg6XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTktXFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMDg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX1BBUkFOT0lEX0xPQURcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcXFwiXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTExLVxcdGRlZmF1bHQgeVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMTgtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMTk6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0tVTklUX1RFU1RcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEyMC1cXHR0cmlzdGF0ZSBcXFwiQnVpbGQgS1VuaXQgdGVzdHMgZm9yIHBvbGljeV91bnBhY2suY1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTIxOlxcdGRlcGVuZHMgb24gS1VOSVQgXFx1MDAyNlxcdTAwMjYgU0VDVVJJVFlfQVBQQVJNT1JcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEyMi1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtMy0jXFxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IpICs9IGFwcGFybW9yLm9cXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZS01LVxcbnNlY3VyaXR5L2FwcGFybW9yL01ha2VmaWxlPTY9YXBwYXJtb3IteSA6PSBhcHBhcm1vcmZzLm8gYXVkaXQubyBjYXBhYmlsaXR5Lm8gdGFzay5vIGlwYy5vIGxpYi5vIG1hdGNoLm8gXFxcXFxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtOS0gICAgICAgICAgICAgIHBvbGljeV9jb21wYXQubyBhZl91bml4Lm8gYWZfaW5ldC5vXFxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGU6MTA6YXBwYXJtb3ItJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSCkgKz0gY3J5cHRvLm9cXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZS0xMS1cXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVCkgKz0gYXBwYXJtb3JfcG9saWN5X3VucGFja190ZXN0Lm9cXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZS0xMy1hcHBhcm1vcl9wb2xpY3lfdW5wYWNrX3Rlc3Qtb2JqcyArPSBwb2xpY3lfdW5wYWNrX3Rlc3Qub1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jPTc1PXN0cnVjdCByYXdkYXRhX2ZfZGF0YSB7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNzktXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjgwOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy04MS1cXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYz0xNzI9c3RhdGljIHN0cnVjdCBhYV9wcm94eSAqZ2V0X3Byb3h5X2NvbW1vbl9yZWYoc3RydWN0IGFhX2NvbW1vbl9yZWYgKnJlZilcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xNzktXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE4MDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTgxLXN0YXRpYyBzdHJ1Y3QgYWFfbG9hZGRhdGEgKmdldF9sb2FkZGF0YV9jb21tb25fcmVmKHN0cnVjdCBhYV9jb21tb25fcmVmICpyZWYpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9NDU5PXN0YXRpYyBzdHJ1Y3QgYWFfbG9hZGRhdGEgKmFhX3NpbXBsZV93cml0ZV90b19idWZmZXIoY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNDg2LVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzo0ODc6I2lmIGRlZmluZWQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZKSB8fCBcXFxcXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjQ4ODogICAgZGVmaW5lZChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWSlcXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNDg5LXN0YXRpYyBpbnQgZGVjb21wcmVzc196c3RkKGNoYXIgKnNyYywgc2l6ZV90IHNsZW4sIGNoYXIgKmRzdCwgc2l6ZV90IGRsZW4pXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTI1LVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzo1MjY6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9DT01QUkVTU0VEX1BPTElDWVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy01MjctLyoqXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9NTg5PXN0YXRpYyBzdHJ1Y3QgYWFfbG9hZGRhdGEgKmFhX2dldF9kYXRhX2Zyb21fY29tcHJlc3NlZChjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiBfX2Fsd2F5c191bnVzZWQsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTk1LX1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM6NTk2OiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfQ09NUFJFU1NFRF9QT0xJQ1kgKi9cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTk3LVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jPTE0NzA9U0VRX05TX0ZPUFMobmFtZSk7XFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE0NzEtXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE0NzI6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE0NzMtc3RhdGljIGludCBzZXFfbnNfY29tcHJlc3NfbWluX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTY2NT1pbnQgX19hYV9mc19jcmVhdGVfcmF3ZGF0YShzdHJ1Y3QgYWFfbnMgKm5zLCBzdHJ1Y3QgYWFfbG9hZGRhdGEgKnJhd2RhdGEpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTczMy19XFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE3MzQ6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE3MzUtXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTc4OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY3JlYXRlX3Byb2ZpbGVfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTc5NC1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM6MTc5NTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTc5Ni1zdGF0aWMgaW50IHByb2ZpbGVfZGVwdGgoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTk0Mz1pbnQgX19hYV9jcmVhdGVfcmF3ZGF0YV9zeW1saW5rX2RlbnRzKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE5NzktXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE5ODA6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE5ODEtXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MjYyMz1zdGF0aWMgc3RydWN0IGFhX3Nmc19lbnRyeSBhYV9zZnNfZW50cnlfcG9saWN5W10gPSB7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMjYzMi1cXHRBQV9TRlNfRElSKFxcXCJ1bmNvbmZpbmVkX3Jlc3RyaWN0aW9uc1xcXCIsICAgYWFfc2ZzX2VudHJ5X3VuY29uZmluZWQpLFxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzoyNjMzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfQ09NUFJFU1NFRF9QT0xJQ1lcXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMjYzNC1cXHRBQV9TRlNfRklMRV9CT09MRUFOKFxcXCJjb21wcmVzc2VkX2xvYWRcXFwiLFxcdDEpLFxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jPTI2OTQ9c3RhdGljIHN0cnVjdCBhYV9zZnNfZW50cnkgYWFfc2ZzX2VudHJ5X2FwcGFybW9yW10gPSB7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMjcwMC1cXHRBQV9TRlNfRklMRV9GT1BTKFxcXCJwcm9maWxlc1xcXCIsIDA0NDQsIFxcdTAwMjZhYV9zZnNfcHJvZmlsZXNfZm9wcyksXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjI3MDE6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTI3MDItXFx0QUFfU0ZTX0ZJTEVfRk9QUyhcXFwicmF3X2RhdGFfY29tcHJlc3Npb25fbGV2ZWxfbWluXFxcIiwgMDQ0NCwgXFx1MDAyNnNlcV9uc19jb21wcmVzc19taW5fZm9wcyksXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yLmg9NTY9ZXh0ZXJuIHVuc2lnbmVkIGludCBhYV9nX3BhdGhfbWF4O1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaC01Ny1cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yLmg6NTg6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oLTU5LSNkZWZpbmUgQUFfTUlOX0NMRVZFTCB6c3RkX21pbl9jbGV2ZWwoKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oLTY1LSNkZWZpbmUgQUFfREVGQVVMVF9DTEVWRUwgMFxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaDo2NjojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkgKi9cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yLmgtNjctXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yZnMuaD0xMjE9c3RydWN0IGFhX2xvYWRkYXRhO1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oLTEyMi1cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yZnMuaDoxMjM6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmgtMTI0LXZvaWQgX19hYV9mc19yZW1vdmVfcmF3ZGF0YShzdHJ1Y3QgYWFfbG9hZGRhdGEgKnJhd2RhdGEpO1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmg9MTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYWFfY3JlYXRlX3Jhd2RhdGFfc3ltbGlua19kZW50cyhzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oLTE0OC19XFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmg6MTQ5OiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWSAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oLTE1MC1cXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvY3J5cHRvLmgtMTQtXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9jcnlwdG8uaDoxNTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2NyeXB0by5oLTE2LWludCBpbml0X3Byb2ZpbGVfaGFzaCh2b2lkKTtcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbGliLmg9NDg9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbGliLmgtNjItXFx0fSB3aGlsZSAoMClcXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2xpYi5oOjYzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbGliLmgtNjQtI2RlZmluZSBBQV9CVUdfRk1UKFgsIGZtdCwgYXJncy4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz0xOTI5PW1vZHVsZV9wYXJhbV9jYWxsKG1vZGUsIHBhcmFtX3NldF9tb2RlLCBwYXJhbV9nZXRfbW9kZSxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzItLyogd2hldGhlciBwb2xpY3kgdmVyaWZpY2F0aW9uIGhhc2hpbmcgaXMgZW5hYmxlZCAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjE5MzM6Ym9vbCBhYV9nX2hhc2hfcG9saWN5ID0gSVNfRU5BQkxFRChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUKTtcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzoxOTM0OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzUtbW9kdWxlX3BhcmFtX25hbWVkKGhhc2hfcG9saWN5LCBhYV9nX2hhc2hfcG9saWN5LCBhYWJvb2wsIFNfSVJVU1IgfCBTX0lXVVNSKTtcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzgtLyogd2hldGhlciBwb2xpY3kgZXhhY3RseSBhcyBsb2FkZWQgaXMgcmV0YWluZWQgZm9yIGRlYnVnIGFuZCBjaGVja3BvaW50aW5nICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTkzOTpib29sIGFhX2dfZXhwb3J0X2JpbmFyeSA9IElTX0VOQUJMRUQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkpO1xcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjE5NDA6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTk0MS1tb2R1bGVfcGFyYW1fbmFtZWQoZXhwb3J0X2JpbmFyeSwgYWFfZ19leHBvcnRfYmluYXJ5LCBhYWJvb2wsIDA2MDApO1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTk4MD1tb2R1bGVfcGFyYW1fbmFtZWQocGF0aF9tYXgsIGFhX2dfcGF0aF9tYXgsIGFhdWludCwgU19JUlVTUik7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xOTg2LSAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjE5ODc6Ym9vbCBhYV9nX3BhcmFub2lkX2xvYWQgPSBJU19FTkFCTEVEKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEKTtcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xOTg4LW1vZHVsZV9wYXJhbV9uYW1lZChwYXJhbm9pZF9sb2FkLCBhYV9nX3BhcmFub2lkX2xvYWQsIGFhYm9vbCwgU19JUlVHTyk7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz0yNjI5PURFRklORV9MU00oYXBwYXJtb3IpID0ge1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMjYzOC0jZW5kaWZcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzoyNjM5OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTI2NDAtXFx0LmluaXRjYWxsX2xhdGUgPSBpbml0X3Byb2ZpbGVfaGFzaCxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYz0xNjE5PXN0YXRpYyBpbnQgY29tcHJlc3NfenN0ZChjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzbGVuLCBjaGFyICoqZHN0LCBzaXplX3QgKmRsZW4pXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jLTE2MjAte1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYzoxNjIxOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYy0xNjIyLVxcdGNvbnN0IHpzdGRfcGFyYW1ldGVycyBwYXJhbXMgPVxcbi0tXFxuc2VjdXJpdHkvY29tbW9uY2FwLmM9MTAyNT1pbnQgY2FwX2lub2RlX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTEwMzAtXFx0LyogSWdub3JlIG5vbi1zZWN1cml0eSB4YXR0cnMgKi9cXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDMxOlxcdGlmIChzdHJuY21wKG5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCxcXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDMyOlxcdFxcdFxcdFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4pICE9IDApXFxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTAzMy1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jPTEwNjY9aW50IGNhcF9pbm9kZV9yZW1vdmV4YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTEwNzEtXFx0LyogSWdub3JlIG5vbi1zZWN1cml0eSB4YXR0cnMgKi9cXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDcyOlxcdGlmIChzdHJuY21wKG5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCxcXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDczOlxcdFxcdFxcdFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4pICE9IDApXFxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTA3NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jPTE0Njk9aW50IGNhcF9tbWFwX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTQ4Mi1cXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNDgzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlcXG5zZWN1cml0eS9jb21tb25jYXAuYy0xNDg0LVxcbi0tXFxuc2VjdXJpdHkvY29tbW9uY2FwLmM9MTUxNz1ERUZJTkVfTFNNKGNhcGFiaWxpdHkpID0ge1xcbi0tXFxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTUyMi1cXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNTIzOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFkgKi9cXG5zZWN1cml0eS9jb21tb25jYXAuYy0xNTI0LVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jOjE1MjU6I2lmZGVmIENPTkZJR19TRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE1MjYtI2luY2x1ZGUgXFxcImNvbW1vbmNhcF90ZXN0LmNcXFwiXFxuLS1cXG5zZWN1cml0eS9jb21tb25jYXBfdGVzdC5jLTE3LVxcbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmM6MTg6I2lmZGVmIENPTkZJR19TRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmMtMTktXFxuLS1cXG5zZWN1cml0eS9jb21tb25jYXBfdGVzdC5jPTI4Nj1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuc2VjdXJpdHkvY29tbW9uY2FwX3Rlc3QuYy0yODctXFxuc2VjdXJpdHkvY29tbW9uY2FwX3Rlc3QuYzoyODg6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVCAqL1xcbi0tXFxuc2VjdXJpdHkvaW5vZGUuYz00Mj1zdGF0aWMgaW50IHNlY3VyaXR5ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5zZWN1cml0eS9pbm9kZS5jLTQ2LVxcbnNlY3VyaXR5L2lub2RlLmM6NDc6XFx0ZXJyb3IgPSBzaW1wbGVfZmlsbF9zdXBlcihzYiwgU0VDVVJJVFlGU19NQUdJQywgZmlsZXMpO1xcbnNlY3VyaXR5L2lub2RlLmMtNDgtXFx0aWYgKGVycm9yKVxcbi0tXFxuc2VjdXJpdHkvaW5vZGUuYz0zMDg9RVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlmc19yZW1vdmUpO1xcbnNlY3VyaXR5L2lub2RlLmMtMzA5LVxcbnNlY3VyaXR5L2lub2RlLmM6MzEwOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlcXG5zZWN1cml0eS9pbm9kZS5jLTMxMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4tLVxcbnNlY3VyaXR5L2lub2RlLmM9MzYyPWludCBfX2luaXQgc2VjdXJpdHlmc19pbml0KHZvaWQpXFxuLS1cXG5zZWN1cml0eS9pbm9kZS5jLTM3NC1cXHR9XFxuc2VjdXJpdHkvaW5vZGUuYzozNzU6I2lmZGVmIENPTkZJR19TRUNVUklUWVxcbnNlY3VyaXR5L2lub2RlLmMtMzc2LVxcdGxzbV9kZW50cnkgPSBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKFxcXCJsc21cXFwiLCAwNDQ0LCBOVUxMLCBOVUxMLFxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L0tjb25maWc9Mz1jb25maWcgSU5URUdSSVRZXFxuc2VjdXJpdHkvaW50ZWdyaXR5L0tjb25maWctNC1cXHRib29sIFxcXCJJbnRlZ3JpdHkgc3Vic3lzdGVtXFxcIlxcbnNlY3VyaXR5L2ludGVncml0eS9LY29uZmlnOjU6XFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbnNlY3VyaXR5L2ludGVncml0eS9LY29uZmlnLTYtXFx0ZGVmYXVsdCB5XFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc9Mj1jb25maWcgRVZNXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctOC1cXHRzZWxlY3QgQ1JZUFRPX0hBU0hfSU5GT1xcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzo5OlxcdHNlbGVjdCBTRUNVUklUWV9QQVRIXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTEwLVxcdGRlZmF1bHQgblxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnPTMxPWNvbmZpZyBFVk1fRVhUUkFfU01BQ0tfWEFUVFJTXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIkFkZGl0aW9uYWwgU01BQ0sgeGF0dHJzXFxcIlxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIEVWTSBcXHUwMDI2XFx1MDAyNiBTRUNVUklUWV9TTUFDS1xcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zNC1cXHRkZWZhdWx0IG5cXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX2NyeXB0by5jPTQwNj1pbnQgZXZtX2luaXRfaG1hYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX2NyeXB0by5jLTQyMi1cXHRcXHRcXHRpZiAoc3RyY21wKHhhdHRyX2VudHJ5LVxcdTAwM2VuYW1lICtcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9jcnlwdG8uYzo0MjM6XFx0XFx0XFx0XFx0ICAgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTiwgeGF0dHItXFx1MDAzZW5hbWUpICE9IDApXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fY3J5cHRvLmMtNDI0LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jPTM4PXN0YXRpYyBzdHJ1Y3QgeGF0dHJfbGlzdCBldm1fY29uZmlnX2RlZmF1bHRfeGF0dHJuYW1lc1tdID0ge1xcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTQwLVxcdCAubmFtZSA9IFhBVFRSX05BTUVfU0VMSU5VWCxcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmM6NDE6XFx0IC5lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWClcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNDItXFx0fSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy00NC1cXHQgLm5hbWUgPSBYQVRUUl9OQU1FX1NNQUNLLFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYzo0NTpcXHQgLmVuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19TRUNVUklUWV9TTUFDSylcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNDYtXFx0fSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy02MC1cXHQgLm5hbWUgPSBYQVRUUl9OQU1FX0FQUEFSTU9SLFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYzo2MTpcXHQgLmVuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUilcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNjItXFx0fSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYz0zMjI9c3RhdGljIGludCBldm1fcHJvdGVjdGVkX3hhdHRyX2NvbW1vbihjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy0zMzktXFx0XFx0aWYgKHN0cm5jbXAocmVxX3hhdHRyX25hbWUsXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jOjM0MDpcXHRcXHRcXHQgICAgeGF0dHItXFx1MDAzZW5hbWUgKyBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOLFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy0zNDEtXFx0XFx0XFx0ICAgIHN0cmxlbihyZXFfeGF0dHJfbmFtZSkpID09IDApIHtcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX3NlY2ZzLmM9MTg1PXN0YXRpYyBzc2l6ZV90IGV2bV93cml0ZV94YXR0cnMoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9zZWNmcy5jLTI0Mi1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9zZWNmcy5jOjI0MzpcXHRpZiAoc3RybmNtcCh4YXR0ci1cXHUwMDNlbmFtZSwgWEFUVFJfU0VDVVJJVFlfUFJFRklYLFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX3NlY2ZzLmM6MjQ0OlxcdFxcdCAgICBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOKSAhPSAwKSB7XFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fc2VjZnMuYy0yNDUtXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZz00PWNvbmZpZyBJTUFcXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctNS1cXHRib29sIFxcXCJJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSlcXFwiXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnOjY6XFx0c2VsZWN0IFNFQ1VSSVRZRlNcXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctNy1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19IQVNIX0lORk9cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWc6MTE6XFx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctMTItXFx0c2VsZWN0IFRDR19UUE0gaWYgSEFTX0lPTUVNXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWc9NTY9Y29uZmlnIElNQV9MU01fUlVMRVNcXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctNTctXFx0Ym9vbFxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIEFVRElUIFxcdTAwMjZcXHUwMDI2IChTRUNVUklUWV9TRUxJTlVYIHx8IFNFQ1VSSVRZX1NNQUNLIHx8IFNFQ1VSSVRZX0FQUEFSTU9SKVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy01OS1cXHRkZWZhdWx0IHlcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jPTE1Mj1zdGF0aWMgc3RydWN0IGltYV9ydWxlX2VudHJ5IGRvbnRfbWVhc3VyZV9ydWxlc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jLTE1OS1cXHR7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwgLmZzbWFnaWMgPSBCSU5GTVRGU19NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jOjE2MDpcXHR7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwgLmZzbWFnaWMgPSBTRUNVUklUWUZTX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMTYxLVxcdHsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLCAuZnNtYWdpYyA9IFNFTElOVVhfTUFHSUMsIC5mbGFncyA9IElNQV9GU01BR0lDfSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jPTE5OT1zdGF0aWMgc3RydWN0IGltYV9ydWxlX2VudHJ5IGRlZmF1bHRfYXBwcmFpc2VfcnVsZXNbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYy0yMDYtXFx0ey5hY3Rpb24gPSBET05UX0FQUFJBSVNFLCAuZnNtYWdpYyA9IEJJTkZNVEZTX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmM6MjA3OlxcdHsuYWN0aW9uID0gRE9OVF9BUFBSQUlTRSwgLmZzbWFnaWMgPSBTRUNVUklUWUZTX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMjA4LVxcdHsuYWN0aW9uID0gRE9OVF9BUFBSQUlTRSwgLmZzbWFnaWMgPSBTRUxJTlVYX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvcGxhdGZvcm1fY2VydHMvbG9hZF91ZWZpLmM9MTYwPXN0YXRpYyBpbnQgX19pbml0IGxvYWRfdWVmaV9jZXJ0cyh2b2lkKVxcbnNlY3VyaXR5L2ludGVncml0eS9wbGF0Zm9ybV9jZXJ0cy9sb2FkX3VlZmkuYy0xNjEte1xcbnNlY3VyaXR5L2ludGVncml0eS9wbGF0Zm9ybV9jZXJ0cy9sb2FkX3VlZmkuYzoxNjI6XFx0ZWZpX2d1aWRfdCBzZWN1cmVfdmFyID0gRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFX0dVSUQ7XFxuc2VjdXJpdHkvaW50ZWdyaXR5L3BsYXRmb3JtX2NlcnRzL2xvYWRfdWVmaS5jLTE2My1cXHRlZmlfZ3VpZF90IG1va192YXIgPSBFRklfU0hJTV9MT0NLX0dVSUQ7XFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZy01LVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnOjY6bWVudWNvbmZpZyBTRUNVUklUWV9JUEVcXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkludGVncml0eSBQb2xpY3kgRW5mb3JjZW1lbnQgKElQRSlcXFwiXFxuc2VjdXJpdHkvaXBlL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFxcdTAwMjZcXHUwMDI2IFNFQ1VSSVRZRlMgXFx1MDAyNlxcdTAwMjYgQVVESVQgXFx1MDAyNlxcdTAwMjYgQVVESVRTWVNDQUxMXFxuc2VjdXJpdHkvaXBlL0tjb25maWctOS1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4tLVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTIzLVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnOjI0OmlmIFNFQ1VSSVRZX0lQRVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTI1LWNvbmZpZyBJUEVfQk9PVF9QT0xJQ1lcXG4tLVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnPTk4PWVuZG1lbnVcXG5zZWN1cml0eS9pcGUvS2NvbmZpZy05OS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZzoxMDA6Y29uZmlnIFNFQ1VSSVRZX0lQRV9LVU5JVF9URVNUXFxuc2VjdXJpdHkvaXBlL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIEtVbml0IHRlc3RzIGZvciBJUEVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbnNlY3VyaXR5L2lwZS9NYWtlZmlsZT0xMz0kKG9iaikvYm9vdF9wb2xpY3kuYzogc2NyaXB0cy9pcGUvcG9sZ2VuL3BvbGdlbiAkKENPTkZJR19JUEVfQk9PVF9QT0xJQ1kpIEZPUkNFXFxuLS1cXG5zZWN1cml0eS9pcGUvTWFrZWZpbGUtMTUtXFxuc2VjdXJpdHkvaXBlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19TRUNVUklUWV9JUEUpICs9IFxcXFxcXG5zZWN1cml0eS9pcGUvTWFrZWZpbGUtMTctXFx0Ym9vdF9wb2xpY3kubyBcXFxcXFxuLS1cXG5zZWN1cml0eS9pcGUvTWFrZWZpbGU9Mjg9Y2xlYW4tZmlsZXMgOj0gYm9vdF9wb2xpY3kuYyBcXFxcXFxuc2VjdXJpdHkvaXBlL01ha2VmaWxlLTI5LVxcbnNlY3VyaXR5L2lwZS9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfU0VDVVJJVFlfSVBFX0tVTklUX1RFU1QpICs9IFxcXFxcXG5zZWN1cml0eS9pcGUvTWFrZWZpbGUtMzEtXFx0cG9saWN5X3Rlc3RzLm8gXFxcXFxcbi0tXFxuc2VjdXJpdHkva2V5cy9jb21wYXQuYz0xNz1DT01QQVRfU1lTQ0FMTF9ERUZJTkU1KGtleWN0bCwgdTMyLCBvcHRpb24sXFxuLS1cXG5zZWN1cml0eS9rZXlzL2NvbXBhdC5jLTczLVxcbnNlY3VyaXR5L2tleXMvY29tcGF0LmM6NzQ6XFx0Y2FzZSBLRVlDVExfR0VUX1NFQ1VSSVRZOlxcbnNlY3VyaXR5L2tleXMvY29tcGF0LmMtNzUtXFx0XFx0cmV0dXJuIGtleWN0bF9nZXRfc2VjdXJpdHkoYXJnMiwgY29tcGF0X3B0cihhcmczKSwgYXJnNCk7XFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleWN0bC5jPTE4ODY9U1lTQ0FMTF9ERUZJTkU1KGtleWN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleWN0bC5jLTE5NjEtXFxuc2VjdXJpdHkva2V5cy9rZXljdGwuYzoxOTYyOlxcdGNhc2UgS0VZQ1RMX0dFVF9TRUNVUklUWTpcXG5zZWN1cml0eS9rZXlzL2tleWN0bC5jLTE5NjMtXFx0XFx0cmV0dXJuIGtleWN0bF9nZXRfc2VjdXJpdHkoKGtleV9zZXJpYWxfdCkgYXJnMixcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrLy5rdW5pdGNvbmZpZz0zPUNPTkZJR19ORVQ9eVxcbnNlY3VyaXR5L2xhbmRsb2NrLy5rdW5pdGNvbmZpZzo0OkNPTkZJR19TRUNVUklUWT15XFxuc2VjdXJpdHkvbGFuZGxvY2svLmt1bml0Y29uZmlnOjU6Q09ORklHX1NFQ1VSSVRZX0xBTkRMT0NLPXlcXG5zZWN1cml0eS9sYW5kbG9jay8ua3VuaXRjb25maWc6NjpDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tfS1VOSVRfVEVTVD15XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTItXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzozOmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cXHRib29sIFxcXCJMYW5kbG9jayBzdXBwb3J0XFxcIlxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMToxNS4wODIwMjQzMzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzQ0MDQ4MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTZWN1cml0eSBDb250ZXh0IFVwZGF0ZXMgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgZ2l2ZW4gaXQncyBjb21waWxlZCB1bmRlciBgQ09ORklHX1NFQ1VSSVRZYC4gSSdtIGFsc28gZ29pbmcgdG8gbm90ZSB0aGUgZGVwZW5kZW5jaWVzLCBsaWtlIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgIHdoaWNoIHJlbGllcyBvbiBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgLCBhbmQgYHNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jYCBvbiBgQ09ORklHX1NFQ1VSSVRZX1NNQUNLYC4gVGhlIFZGUyBjb3JlIGZ1bmN0aW9uIGBmcy9uYW1laS5jYCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlcmFjdGlvbnMuIEFsc28sIHRoZXJlJ3MgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AgYW5kIGBDT05GSUdfQ0FDSEVGSUxFU2AsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdG91Y2hlZCBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIGBmcy9uYW1laS5jYCwgYW5kIG5vdGUgd2hpY2ggc3ltYm9scyBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgYXJlIGRpcmVjdCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgcGF0Y2guXG5cbkkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBgZnMvbmFtZWkuY2A6IGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGBtYXlfb19jcmVhdGVgLCBgdmZzX21rbm9kYCwgYHZmc19ta2RpcmAsIGB2ZnNfc3ltbGlua2AsIGB2ZnNfbGlua2AsIGBpbm9kZV9wZXJtaXNzaW9uYCwgYW5kIGBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlY2AuIEluIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXJgIGlzIHJlbGV2YW50LiBPZiBjb3Vyc2UsIGBzZWN1cml0eS9zZWN1cml0eS5jYCBoYXMgdGhlc2Ugc2VjdXJpdHkgaG9va3M6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYC4gVGhlIFNFTGludXggaW1wbGVtZW50YXRpb25zIGFyZTogYHNlbGludXhfaW5vZGVfY3JlYXRlYCwgYHNlbGludXhfaW5vZGVfbGlua2AsIGBzZWxpbnV4X2lub2RlX3N5bWxpbmtgLCBgc2VsaW51eF9pbm9kZV9ta2RpcmAsIGBzZWxpbnV4X2lub2RlX21rbm9kYCwgYW5kIGBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb25gLiBBbmQgZm9yIFNNQUNLOiBgc21hY2tfaW5vZGVfbGlua2AgYW5kIGBzbWFja19pbm9kZV9wZXJtaXNzaW9uYC5cblxuT2theSwgbmV4dCBJIG5lZWQgdG8gYXBwbHkgU2VjdGlvbiA0OiBGb2N1c1N5bWJvbHMgZ3VpZGVsaW5lcy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRvIEFWT0lEIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocy4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgaXMgKmFjdHVhbGx5KiB1YmlxdWl0b3VzLiBDbGVhcmx5IGBpbm9kZV9wZXJtaXNzaW9uYCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gIGFyZSBjYWxsZWQgKmV2ZXJ5d2hlcmUqIGR1cmluZyBwYXRoIGxvb2t1cCBvciBmaWxlIGFjY2Vzcywgc28gdGhleSdyZSBwcm9iYWJseSBvdXQuIExpc3RpbmcgdGhlbSB3b3VsZCBkaWx1dGUgdGhlIGNvdmVyYWdlLCBidXQgd2hhdCBhYm91dCB0aGUgc3BlY2lmaWMgaG9va3MgbGlrZSBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBldGMuPyBTYW1lIHF1ZXN0aW9uIGZvciB0aGUgTFNNIGltcGxlbWVudGF0aW9ucyBhbmQgdGhlIFZGUyBmdW5jdGlvbnMgbGlrZSBgdmZzX21rZGlyYCwgYHZmc19zeW1saW5rYCwgZXRjLlxuXG5XYWl0IGEgc2Vjb25kLiBUaGUgKnNwZWNpZmljKiBMU00gaG9vayBlbnRyeSBwb2ludHMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMsIHRvIHRha2UgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCwgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gU28sIEkgbmVlZCB0byBjaGVjayB0aG9zZTogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGFuZCBzbyBvbiwgYXJlIGdvb2QuIEFuZCBhbHNvOiBgc2VsaW51eF9pbm9kZV9jcmVhdGVgLCBgc2VsaW51eF9pbm9kZV9saW5rYCwgYHNlbGludXhfaW5vZGVfc3ltbGlua2AsIGBzZWxpbnV4X2lub2RlX21rZGlyYCwgYHNlbGludXhfaW5vZGVfbWtub2RgLCBgc21hY2tfaW5vZGVfbGlua2AuIEdvdCBpdC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX1NFQ1VSSVRZYCwgYENPTkZJR19TRUNVUklUWV9TRUxJTlVYYCwgYENPTkZJR19TRUNVUklUWV9TTUFDS2AsIGFuZCBgQ09ORklHX0NBQ0hFRklMRVNgLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGBCUEZfTFNNYCBhcmUgcmVsZXZhbnQgaGVyZSwgc2luY2UgdGhlcmUgd2VyZSB1cGRhdGVzIHRvIHRoZSBCUEYgTFNNIHNlbGZ0ZXN0cy4gVGltZSB0byBjaGVjayBgQlBGX0xTTWAgaW4gYEtjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgxNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMToyMi44MjYwNzU1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTczMDc1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMToyMi44ODE4MTQwOTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY1NjA5NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTG9jYXRpbmcgdGhlIEJQRl9MU00gRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBCUEZfTFNNYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBoYXZlIGEgZmVlbGluZyBJJ2xsIGJlIGluIGZvciBhIGRlZXAgZGl2ZSwgZ2l2ZW4gaXRzIHNpZ25pZmljYW5jZSBpbiB0aGUgTGludXggU2VjdXJpdHkgTW9kdWxlIChMU00pIGNvbnRleHQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGhlYWRlcnMgb3Igc291cmNlIGZpbGVzIGhvbGQgdGhpcyBjb25zdGFudC4gSXQncyBsaWtlbHkgaW4gYSBoZWFkZXIgZmlsZSwgZ2l2ZW4gdGhhdCBpdCdzIHByb2JhYmx5IHVzZWQgYWNyb3NzIG11bHRpcGxlIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgcmVsYXRlZCB0b29scy4gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBpbmNsdWRlIHBhdGhzLCBhbmQgdGhlbiBuYXJyb3cgZG93biBteSBzZWFyY2ggdG8gbGlrZWx5IHNwb3RzIGxpa2UgdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgb3IgTFNNLXNwZWNpZmljIGRpcmVjdG9yaWVzLiBJJ2xsIHV0aWxpemUgbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwncyBzb3VyY2UgbGF5b3V0IHRvIGVmZmljaWVudGx5IHBpbnBvaW50IHdoZXJlIHRoaXMgY29uc3RhbnQgaXMgZGVjbGFyZWQuIEkgbWF5IGV2ZW4gc3RhcnQgd2l0aCBhIGBncmVwYCBvciBzaW1pbGFyIGNvbW1hbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjQ4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MjQuOTQ3NDI2MDY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTc2NjU1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjI2Ljg0NTA5NzY1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDUzNDU4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgOTIuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgc2V0IHVwIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGFyZWFzIGZvciBmdXJ0aGVyIGV4cGxvcmF0aW9uIHdpdGhpbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MjguNjUwNDQ2MzE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRzb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbiAgOTE6XFx0XFxuICA5MjpcXHRjb25maWcgQlBGX0xTTVxcbiAgOTM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbiAgOTQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXFxuICA5NTpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuICA5NjpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuICA5NzpcXHRcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG4gIDk4OlxcdFxcdGhlbHBcXG4gIDk5OlxcdFxcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxcbiAxMDA6XFx0XFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGVuZG1lbnUgIyBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MjguNjUwNTEzNDI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDcyOTczODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGNvbWluZyBkaXJlY3RseSBmcm9tIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENhY2hlZmlsZXMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZnMvY2FjaGVmaWxlcy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYENBQ0hFRklMRVNgLCBzcGVjaWZpY2FsbHkuIEknbSBhc3N1bWluZyB0aGF0IGl0IGlzIGluIHRoaXMgYXJlYSB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzIGZvciBjYWNoZWZpbGVzIGFyZSBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgYENBQ0hFRklMRVNgIGlzIG1hbmFnZWQgYW5kIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyBhcmUgY29udGluZ2VudCBvbiBpdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFkZHJlc3Npbmcgd2hhdGV2ZXIgdGhlIGN1cnJlbnQgcHJvYmxlbSBpcy4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzIEkgbWlnaHQgY29uc2lkZXIuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzIxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTozMC44NTc4MTI2NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODU1NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQUNIRUZJTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NhY2hlZmlsZXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozOmNvbmZpZyBDQUNIRUZJTEVTXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xMy1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MTQ6Y29uZmlnIENBQ0hFRklMRVNfREVCVUdcXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRGVidWcgQ2FjaGVGaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yMi1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIlByb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTozMC45MDc2NzM3NjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2Nzc0MzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBTZWN1cml0eSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgU0VMaW51eCBhbmQgU01BQ0sgc2VjdXJpdHkgbW9kdWxlcy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBvdXQgdGhlIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgIGZpbGUgYW5kIHRoZSBgc2VjdXJpdHkvc21hY2svS2NvbmZpZ2AgZmlsZS4gVGhvc2UgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIGNvbmZpZ3VyaW5nIGVhY2ggc2VjdXJpdHkgbW9kdWxlLiBUaGV5IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgaG93IHRoZXkncmUgc3RydWN0dXJlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGF0IHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhpcyBhdCB0aGUgS2NvbmZpZyBsZXZlbCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgYWN0dWFsIGNvZGUgb3IgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiB3b3JrLiBUaW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzA3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MzMuMjc1NDE5OTY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA1MTk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDVVJJVFlfU0VMSU5VWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9zZWxpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWxpbnV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlNFTGludXggU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MTI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlNFTGludXggYm9vdCBwYXJhbWV0ZXJcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjUtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI2OmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXFx0Ym9vbCBcXFwiU0VMaW51eCBEZXZlbG9wbWVudCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTM5LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDEtXFx0Ym9vbCBcXFwiU0VMaW51eCBBVkMgU3RhdGlzdGljc1xcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDk6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEVEFCX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01MC1cXHRpbnQgXFxcIlNFTGludXggc2lkdGFiIGhhc2h0YWJsZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYwLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo2MTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkVcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXFx0aW50IFxcXCJTRUxpbnV4IFNJRCB0byBjb250ZXh0IHN0cmluZyB0cmFuc2xhdGlvbiBjYWNoZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTcxLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTczLVxcdGludCBcXFwiU0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjgzOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0RFQlVHXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIlNFTGludXgga2VybmVsIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTozMy4zMjI0NzUwNzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3MzM3MTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBTTUFDSyBLY29uZmlnIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRpdmUgaW50byB0aGUgYHNlY3VyaXR5L3NtYWNrL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBTZWN1cml0eS1FbmhhbmNlZCBMaW51eCAoU01BQ0spIHdpdGhpbiB0aGUga2VybmVsIGFyZSBkZWZpbmVkLCBhbmQgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgb3B0aW9ucywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIFNNQUNLJ3MgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgdGhlaXIgZGVmYXVsdCB2YWx1ZXMsIGFuZCB0aGUgYXNzb2NpYXRlZCBoZWxwIHRleHQuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gb3RoZXIgc2VjdXJpdHkgbW9kdWxlcyBvciBmZWF0dXJlcz8gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgU01BQ0sgb24gYSBzeXN0ZW0sIGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBpbXBhY3Qgb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIFRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTozNS40OTU4NDk4NjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTc5Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWV9TTUFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9zbWFjay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc21hY2svS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU01BQ0tcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiU2ltcGxpZmllZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgS2VybmVsIFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTE1LVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0JSSU5HVVBcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIlJlcG9ydGluZyBvbiBhY2Nlc3MgZ3JhbnRlZCBieSBTbWFjayBydWxlc1xcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzMtXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzozNDpjb25maWcgU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zNS1cXHRib29sIFxcXCJQYWNrZXQgbWFya2luZyB1c2luZyBzZWNtYXJrcyBmb3IgbmV0ZmlsdGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy00NC1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjQ1OmNvbmZpZyBTRUNVUklUWV9TTUFDS19BUFBFTkRfU0lHTkFMU1xcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiVHJlYXQgZGVsaXZlcmluZyBzaWduYWxzIGFzIGFuIGFwcGVuZCBvcGVyYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjM1LjU0MTgzNjgzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTkzMzAwODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJldmlld2luZyBTZWN1cml0eSBMU00gSG9vayBVcGRhdGVzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBhbmQgemVybyBpbiBvbiB3aGF0J3MgcmVsZXZhbnQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFsbCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBsaXN0IG9mIGNoYW5nZXMgdGhhdCBtYWlubHkgaW52b2x2ZSBwYXNzaW5nIGFuIGBpZG1hcGAgc3RydWN0IHRvIHZhcmlvdXMgc2VjdXJpdHktcmVsYXRlZCBmdW5jdGlvbnMuXG5cblNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIGluIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCB3aGVyZSBgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXJgIG5vdyB1c2VzIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAgYW5kIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLiBUaGVuLCBhIGdvb2QgY2h1bmsgb2YgYGZzL25hbWVpLmNgIGhhcyBiZWVuIHVwZGF0ZWQ7IGBpbm9kZV9wZXJtaXNzaW9uYCwgYGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjYCwgYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYG1heV9vX2NyZWF0ZWAsIGB2ZnNfbWtub2RgLCBgdmZzX21rZGlyYCwgYHZmc19zeW1saW5rYCwgYW5kIGB2ZnNfbGlua2AgYWxsIG5vdyBwYXNzIGBpZG1hcGAgdG8gdGhlaXIgcmVzcGVjdGl2ZSBzZWN1cml0eSBmdW5jdGlvbnMuICBUaGUgY29yZSBBUEkgc2lnbmF0dXJlIHVwZGF0ZXMgYXJlIHJlZmxlY3RlZCBpbiBgaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhgIGFuZCBgaW5jbHVkZS9saW51eC9zZWN1cml0eS5oYCwgYWRkaW5nIHRoZSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byB0aGUgcmVsZXZhbnQgaW5vZGUgaG9va3MuICBPZiBjb3Vyc2UsIHRoaXMgcmlwcGxlcyBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgLCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AgYXMgdGhleSBhcmUgbm93IHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBuZXcgYGlkbWFwYCBwYXJhbWV0ZXIuIEZpbmFsbHksIHRoZXJlJ3Mgc29tZSBhY3Rpdml0eSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuXG5cbkdpdmVuIHRoZSBwcmVzZW5jZSBvZiBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGBDQUNIRUZJTEVTYCwgYW5kIGBCUEZfTFNNYCBpbiB0aGUgZW5hYmxlZCBjb25maWd1cmF0aW9ucywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAsIGFsb25nIHdpdGggdGhlaXIgU0VMaW51eCBjb3VudGVycGFydHMgKGBzZWxpbnV4X2lub2RlXypgKSBhbmQgYHNtYWNrX2lub2RlX2xpbmtgLiBJJ20gYWxzbyBpbmNsdWRpbmcgYGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyYCBhbmQgYHZmc19ta29iamAuXG5cbk15IGZvY3VzIGlzIHRvIGF2b2lkIGNvbW1vbiwgXCJ1YmlxdWl0b3VzXCIgZnVuY3Rpb25zIGxpa2UgYGlub2RlX3Blcm1pc3Npb25gIG9yIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBpZiB0aGV5J3JlIGNhbGxlZCBldmVyeXdoZXJlLiAgSW5zdGVhZCwgSSB3YW50IHRvIHRhcmdldCB0aGUgbW9yZSBzcGVjaWZpYyBpbm9kZSBob29rIGZ1bmN0aW9ucywgc3VjaCBhcyB0aG9zZSByZWxhdGVkIHRvIGNyZWF0aW5nLCBsaW5raW5nLCBzeW1saW5raW5nLCBtYWtpbmcgZGlyZWN0b3JpZXMsIGFuZCBtYWtpbmcgbm9kZXMuIFRob3NlIHNob3VsZCBvZmZlciBtb3JlIHRhcmdldGVkIGZ1enppbmcgb3Bwb3J0dW5pdGllcy5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkxNiwiT3V0cHV0VG9rZW5zIjoyNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6NDEuNzM1MTM5OTAyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzNjcyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9saW5rXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtub2RcIixcbiAgICBcInNtYWNrX2lub2RlX2xpbmtcIixcbiAgICBcImNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyXCIsXG4gICAgXCJ2ZnNfbWtvYmpcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIExTTSBpbm9kZSBob29rIGludGVyZmFjZXMgKGlub2RlX2NyZWF0ZSwgaW5vZGVfbGluaywgaW5vZGVfc3ltbGluaywgaW5vZGVfbWtkaXIsIGlub2RlX21rbm9kLCBpbm9kZV9wZXJtaXNzaW9uKSBhbmQgdGhlaXIgY2FsbGVycyBhY3Jvc3MgdGhlIFZGUyBsYXllciwgQ2FjaGVGaWxlcywgU0VMaW51eCwgYW5kIFNtYWNrIHRvIHBhc3MgdGhlIG1vdW50IGlkbWFwIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgYWx0ZXJzIGNvcmUgVkZTIGFuZCBMU00gaW50ZXJhY3Rpb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQgdG8gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkNBQ0hFRklMRVNcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlbGludXhfaW5vZGVfbGlua1wiLFxuICAgIFwic2VsaW51eF9pbm9kZV9zeW1saW5rXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX21rbm9kXCIsXG4gICAgXCJzbWFja19pbm9kZV9saW5rXCIsXG4gICAgXCJjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpclwiLFxuICAgIFwidmZzX21rb2JqXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBMU00gaW5vZGUgaG9vayBpbnRlcmZhY2VzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGNhbGxlcnMgYWNyb3NzIHRoZSBWRlMgbGF5ZXIsIENhY2hlRmlsZXMsIFNFTGludXgsIGFuZCBTbWFjayB0byBwYXNzIHRoZSBtb3VudCBpZG1hcCAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGFsdGVycyBjb3JlIFZGUyBhbmQgTFNNIGludGVyYWN0aW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHJlbGV2YW50IHRvIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjQxLjgxMTUxNDQwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIyNzI3MzA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjQxLjgxMTk5OTQxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkyMjY3ODQ0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgTFNNIGlub2RlIGhvb2sgcHJvdG90eXBlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBpbnZvY2F0aW9ucyBpbiB0aGUgVkZTIGxheWVyIChmcy9uYW1laS5jLCBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMpIGFuZCBzZWN1cml0eSBtb2R1bGVzIHRvIHByb3BhZ2F0ZSB0aGUgJ3N0cnVjdCBtbnRfaWRtYXAgKmlkbWFwJyBhcmd1bWVudCwgYWxvbmcgd2l0aCBhZGRpbmcgQlBGIExTTSB0ZXN0IGNhc2VzIGZvciB0aGVzZSBob29rcy5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgc2lnbmF0dXJlIGFuZCBjYWxsaW5nIGNvbnZlbnRpb24gdXBkYXRlcyBwYXNzaW5nIGFuIGV4aXN0aW5nIGlkbWFwIHBvaW50ZXIgdGhyb3VnaCB0byB0aGUgTFNNIGhvb2sgaW5mcmFzdHJ1Y3R1cmUuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTVkMGYyMzdjMDJhM2VhNWU4YTEyZTExZjFjZWQyNjFlYjExOTIzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MzE6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0XG4tLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbisrKyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuQEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWRcIixcbiBcdFx0ICAgICAgIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC02NTgsNyArNjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7XG4gXG5AQCAtNjk1LDcgKzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXG4gXHRpZiAodW5saWtlbHkoKChpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyArNDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XHQvKiBzaG91bGRuJ3QgaXQgYmUgRU5PU1lTPyAqL1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyArNDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXG4gXHRtb2RlIFx1MDAyNj0gU19JQUxMVUdPO1xuIFx0bW9kZSB8PSBTX0lGUkVHO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xuQEAgLTQzMjgsNyArNDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gXG4gLyoqXG5AQCAtNTI1OCw3ICs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyArNTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG5AQCAtNTc4Myw3ICs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTU5MDcsNyArNTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgKzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGludCAqeGF0dHJfY291bnQpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGJvb2wgcmN1KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgc3RydWN0IGlhdHRyICphdHRyKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTQwNCwyNCArNDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzayk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtOTAyLDkgKzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkxMyw5ICs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7IH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0aW50IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTc0LDcgKzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTYxNCw2ICsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZFxuICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlXG5AQCAtMTYyMiwxMiArMTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XG4gXG5AQCAtMTY0OCw2ICsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlXG4gICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmtcbkBAIC0xNjU2LDEyICsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTY4Miw2ICsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogc3ltYm9saWMgbGlua1xuICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWVcbkBAIC0xNjkwLDE2ICsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiB9XG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTtcbiBcbkBAIC0xNzM1LDYgKzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gfVxuIFxuIC8qKlxuQEAgLTE4MjMsNiArMTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgKzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMzA3NCwxMiArMzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgIFx1MDAyNmFkKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiArMzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcbiB9XG5AQCAtMzEwNCw3ICszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcbiB9XG5AQCAtMzIzNiwxMyArMzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZFxuICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWRcbiAgKlxuICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0b1xuICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgKzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIC8qKlxuICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxuICAqIEBkaXI6IHVudXNlZFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0c3RydWN0IHNtYWNrX2tub3duICppc3A7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5AQCAtMTIyNiw2ICsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCArMSwzMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuIFxuIC8qXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcImxzbS5za2VsLmhcIlxuICNpbmNsdWRlIFwibHNtX3RhaWxjYWxsLnNrZWwuaFwiXG4gXG4gY2hhciAqQ01EX0FSR1NbXSA9IHtcInRydWVcIiwgTlVMTH07XG4gXG4rZW51bSB7XG4rXHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXHUwMDNjXHUwMDNjIDYpIC0gMSxcbit9O1xuK1xuIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4ge1xuIFx0aW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzO1xuQEAgLTMwLDYgKzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XG4rXHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTtcbitcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbitcdFx0c2F2ZWRfZXJybm8gPSBFSU87XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAoc2F2ZWRfZXJybm8pIHtcbitcdFx0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0aW50IGxlbjtcbitcbitcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy8lZC8lc1wiLCBwaWQsIG5hbWUpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0cGlkX3QgcGlkLCB3YWl0ZWQ7XG4rXHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuK1x0XHRcdF9leGl0KDEpO1xuK1x0XHRyYWlzZShTSUdTVE9QKTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXG4rXHRkbyB7XG4rXHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIFdVTlRSQUNFRCk7XG4rXHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcdGlmICh3YWl0ZWQgIT0gcGlkKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XG4rXHRcdHBpZCA9IC0xO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovXG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInNldGdyb3Vwc1wiLCBcImRlbnlcIikgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInVpZF9tYXBcIiwgXCIwIDAgMVwiKSB8fFxuK1x0ICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJnaWRfbWFwXCIsIFwiMCAwIDFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkL25zL3VzZXJcIiwgcGlkKTtcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbitcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdGRvIHtcbitcdFx0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7XG4rXHRcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0fVxuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcbit7XG4rXHRzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0ge1xuK1x0XHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxuK1x0fTtcbitcdGludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTtcbitcbitcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi9cbitcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcInRtcGZzXCIsIEZTT1BFTl9DTE9FWEVDKTtcbitcdGlmIChmc2ZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7XG4rXHRpZiAobW50ZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XG4rXHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcIlwiLCBBVF9FTVBUWV9QQVRILCBcdTAwMjZhdHRyLFxuK1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuK1x0XHRjbG9zZShtbnRmZCk7XG4rXHRcdG1udGZkID0gLTE7XG4rXHR9XG4rXG4rb3V0OlxuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGlmIChmc2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZnNmZCk7XG4rXHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodXNlcm5zX2ZkKTtcbitcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRyZXR1cm4gbW50ZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuK3tcbitcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcbitcbitcdGZkID0gb3BlbmF0KGRpcmZkLCBcImZpbGVcIiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuK1x0XHQgICAgMDYwMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJjcmVhdGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Y2xvc2UoZmQpO1xuK1x0ZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwiZGlyXCIsIDA3MDApLCBcIm1rZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcInRhcmdldFwiLCBkaXJmZCwgXCJzeW1saW5rXCIpLCBcInN5bWxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcImZpbGVcIiwgZGlyZmQsIFwibGlua1wiLCAwKSwgXCJsaW5rXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCBcImZpZm9cIiwgMDYwMCksIFwibWtub2RcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gMDtcbitvdXQ6XG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJsaW5rXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZmlmb1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcInN5bWxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWxlXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4re1xuK1x0Y2hhciB0bXBkaXJbXSA9IFwiL3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCI7XG4rXHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcbitcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuK1x0aW50IHJldCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCJta2R0ZW1wXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcbitcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcIm9wZW5fdG1wZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCJjcmVhdGVfaWRtYXBwZWRfdG1wZnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXCJpZGVudGl0eV9pZG1hcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4rXHRcdCAgICAgICBcImlkbWFwcGVkX21vdW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuK1x0XHQgICAgICAgXCJpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHJldCA9IEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcbitcdFx0XHRcImlub2RlX2lkbWFwcGVkX21vdW50X3NlZW5cIikgPyAwIDogLTE7XG4rXG4rb3V0OlxuK1x0aWYgKGlkbWFwcGVkX2RpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuK1x0aWYgKGRpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZGlyZmQpO1xuK1x0cm1kaXIodG1wZGlyKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiArMjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiBcbitcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfbHNtX2lub2RlX2lkbWFwXCIpKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0ZXJyID0gc3RhY2tfbXByb3RlY3QoKTtcbiBcdGlmICghQVNTRVJUX0VRKGVyciwgLTEsIFwic3RhY2tfbXByb3RlY3RcIikgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCJzdGFja19tcHJvdGVjdFwiKSlcbkBAIC03MSw2ICszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5AQCAtODQsNiArODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIGludCBtb25pdG9yZWRfcGlkID0gMDtcbiBpbnQgbXByb3RlY3RfY291bnQgPSAwO1xuIGludCBicHJtX2NvdW50ID0gMDtcbitfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbitcdElOT0RFX0lETUFQX0xJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDEsXG4rXHRJTk9ERV9JRE1BUF9TWU1MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAyLFxuK1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4rXHRJTk9ERV9JRE1BUF9NS05PRFx0PSAxVSBcdTAwM2NcdTAwM2MgNCxcbitcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cdD0gMVUgXHUwMDNjXHUwMDNjIDUsXG4rfTtcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbit7XG4rXHRyZXR1cm4gaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgICAgX191MzIgaG9vaywgaW50IHJldClcbit7XG4rXHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcbitcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2NyZWF0ZVwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9zeW1saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta2RpclwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbWtub2RcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfcGVybWlzc2lvblwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpO1xuK31cbiBcbiBTRUMoXCJsc20vZmlsZV9tcHJvdGVjdFwiKVxuIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjQxLjgxMjAwMDI0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDY2NDk1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBgTmVlZHNLTVNBTj10cnVlYCBpcyB0aGUgcmlnaHQgY2FsbCBvciBpZiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cbkZpcnN0LCBJIHNlZSBjaGFuZ2VzIHByaW1hcmlseSBmb2N1c2VkIG9uIGludGVncmF0aW5nIGFuIGBpZG1hcGAgaW50byB2YXJpb3VzIGlub2RlIHNlY3VyaXR5LXJlbGF0ZWQgZnVuY3Rpb25zIGFjcm9zcyB0aGUgZmlsZXN5c3RlbSBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtcy4gU3BlY2lmaWNhbGx5LCBgZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jYCBhbmQgYGZzL25hbWVpLmNgIGFyZSBtb2RpZmllZCB0byB1c2UgYFx1MDAyNm5vcF9tbnRfaWRtYXBgIG9yIGBpZG1hcGAuIFRoZSBpbmNsdWRlIGZpbGVzIGBpbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBpbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhgIGhhdmUgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgdXBkYXRlZCB0byBpbmNsdWRlIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgcGFyYW1ldGVyIGluIGBpbm9kZV8qYCBmdW5jdGlvbnMgYW5kIGBzZWN1cml0eV9pbm9kZV8qYC4gVGhlIHNlY3VyaXR5IGltcGxlbWVudGF0aW9ucyBhbHNvIGdldHMgdXBkYXRlZC5cblxuVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBvbiBMU00gaW1wbGVtZW50YXRpb25zOiBTRUxpbnV4IGFuZCBTTUFDSy4gSXQgdXBkYXRlcyB0aGVpciByZXNwZWN0aXZlIGhvb2sgc2lnbmF0dXJlcywgc3VjaCBhcyBgc2VsaW51eF9pbm9kZV8qYCBhbmQgYHNtYWNrX2lub2RlXypgLCB0byBhY2NlcHQgdGhlIGBpZG1hcGAgcGFyYW1ldGVyLiBGaW5hbGx5LCB0aGVyZSdzIHRoZSBhZGRpdGlvbiBvZiB0ZXN0IGNhc2VzIGZvciBCUEYgTFNNIGhvb2tzIGludm9sdmluZyB0aGUgYGlkbWFwYCBpbiB0aGUgc2VsZi10ZXN0cy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludm9sdmUgc2VjdXJpdHktc2Vuc2l0aXZlIGRhdGEgZmxvd3MgdGhhdCBhcmUgcHJvbmUgdG8gS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXM/IEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBwYXNzaW5nIG5ldyBwb3RlbnRpYWxseSB0YWludGVkIGRhdGEgdG8ga2VybmVsIHNlY3VyaXR5IGZ1bmN0aW9ucy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgaWRtYXBgIGFyZ3VtZW50IGlzIHRoZSBrZXkuIElzIHRoaXMganVzdCBhIHJlZmFjdG9yaW5nLCBvciBkb2VzIHRoaXMgcG90ZW50aWFsbHkgaW50cm9kdWNlIGEgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGRhdGEgZmxvdz8gSSBuZWVkIHRvIGRldGVybWluZSBpZiBuZXcgZGF0YSBpcyBiZWluZyBwYXNzZWQgdGhyb3VnaCB0aGVzZSBob29rcyB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQgb3Igb3RoZXJ3aXNlIHByb2JsZW1hdGljLlxuXG5UbyBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBydW4gYGdyZXBwZXJgIG9yIGEgc2ltaWxhciB0b29sIHRvIGVuc3VyZSB0aGF0IHdlIGFyZSBub3QgbWlzc2luZyBhbnkgb3RoZXIgTFNNIGltcGxlbWVudGF0aW9ucyBvciBmaWxlcyB0aGF0IGFsc28gaW1wbGVtZW50IHRoZXNlIGhvb2tzLiBBcHBBcm1vciwgTGFuZGxvY2ssIFRPTU9ZTywgYW5kIG90aGVyIExTTXMgYXJlIHRoZSBvYnZpb3VzIHN1c3BlY3RzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGFyZSBhcHBsaWVkIGNvbnNpc3RlbnRseSBhY3Jvc3MgdGhlIGJvYXJkLiBJZiBvdGhlciBMU01zIGFyZSBhZmZlY3RlZCBvciBpZiB0aGVzZSBob29rcyBhcmUgdXNlZCBlbHNld2hlcmUsIHRoZW4gdGhlIHJpc2sgcHJvZmlsZSBjaGFuZ2VzLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgd2hldGhlciBhIGRlZXBlciBLTVNBTiBkaXZlIGlzIHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTo0Ni4yNzg0OTk4NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzM5MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlub2RlXyhjcmVhdGV8bGlua3xzeW1saW5rfG1rZGlyfG1rbm9kfHBlcm1pc3Npb24pXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTEyMjU9c3RhdGljIHZvaWQgaW5vZGVfZnJlZV9ieV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQxLSAqIHNlY3VyaXR5X2lub2RlX2ZyZWUoKSwgQGlub2RlIG1heSBzdGlsbCBiZSByZWZlcmVuY2VkIGluIGEgVkZTIHBhdGggd2Fsa1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0MjogKiBhbmQgY2FsbHMgdG8gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIG1heSBiZSBtYWRlIGR1cmluZywgb3IgYWZ0ZXIsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQzLSAqIGEgY2FsbCB0byBzZWN1cml0eV9pbm9kZV9mcmVlKCkuICBGb3IgdGhpcyByZWFzb24gdGhlIGlub2RlLVxcdTAwM2VpX3NlY3VyaXR5XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQ0LSAqIGZpZWxkIGlzIHJlbGVhc2VkIHZpYSBhIGNhbGxfcmN1KCkgY2FsbGJhY2sgYW5kIGFueSBMU01zIHdoaWNoIG5lZWQgdG9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjEyNDU6ICogcmV0YWluIGlub2RlIHN0YXRlIGZvciB1c2UgaW4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIHNob3VsZCBvbmx5XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQ2LSAqIHJlbGVhc2UgdGhhdCBzdGF0ZSBpbiB0aGUgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UoKSBMU00gaG9vayBjYWxsYmFjay5cXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTYwOT1pbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MTUtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjE2OiAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MTctICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYyNS0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MjY6aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI3LVxcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MzAtXFx0XFx0cmV0dXJuIDA7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjMxOlxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MzItfVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTYzMzpFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYzNC1cXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTY0Mj12b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NTAtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjUxOiAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NTItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY2MC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2NjE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjYyLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjY1LVxcdFxcdHJldHVybiAwO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTY2NjpcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjctfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjc4PWludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY4NS0vKipcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2ODY6ICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2ODctICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5NS0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2OTY6aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzAwLVxcdFxcdHJldHVybiAwO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcwMTpcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MDItfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzA0LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcwNTogKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MDYtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcxNS0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE3MTY6aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MTctXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzIwLVxcdFxcdHJldHVybiAwO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcyMTpcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MjItfVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcyMzpFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzI0LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNzM0PWludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzQxLS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTc0MjogKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc0My0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzU1LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTc1NjppbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc1Ny1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc2MC1cXHRcXHRyZXR1cm4gMDtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE3NjE6XFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3NjItfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xODIyPWludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4MzAtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODMxOiAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODMyLSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDQtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODQ1OmludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0Ni1cXHRcXHRcXHQgICAgICBpbnQgbWFzaylcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0OS1cXHRcXHRyZXR1cm4gMDtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NTA6XFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NTEtfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNzI3PWludCBzZWN1cml0eV9maWxlX3JlY2VpdmUoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI3MzYtICogU2F2ZSBvcGVuLXRpbWUgcGVybWlzc2lvbiBjaGVja2luZyBzdGF0ZSBmb3IgbGF0ZXIgdXNlIHVwb24gZmlsZV9wZXJtaXNzaW9uLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjczNzogKiBhbmQgcmVjaGVjayBhY2Nlc3MgaWYgYW55dGhpbmcgaGFzIGNoYW5nZWQgc2luY2UgaW5vZGVfcGVybWlzc2lvbi5cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI3MzgtICpcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMDExPXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDc2LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDc3OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDc4LVxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwODItXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMwODM6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwODQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzA4OT1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA5My1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA5NDpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwOTUtXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDk5LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTAwOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMDEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxMDY9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzExMC1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzExMTpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTEyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxMzA9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTQ2OnN0YXRpYyBub2lubGluZSBpbnQgYXVkaXRfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ3LVxcdFxcdFxcdFxcdFxcdCAgIHUzMiBwZXJtcywgdTMyIGF1ZGl0ZWQsIHUzMiBkZW5pZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDItLyoqXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDQtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyOTktXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzMDA6XFx0cmMyID0gYXVkaXRfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgcGVybXMsIGF1ZGl0ZWQsIGRlbmllZCwgcmMpO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzAxLVxcdGlmIChyYzIpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDI2Mz1zdGF0aWMgaW50IHNlbGludXhfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODAtXFx0ICogU2luY2UgdGhlIGlub2RlIGxhYmVsIG9yIHBvbGljeSBzZXFubyBtYXkgaGF2ZSBjaGFuZ2VkXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQyODE6XFx0ICogYmV0d2VlbiB0aGUgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIGNoZWNrIGFuZCB0aGUgc2F2aW5nXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODItXFx0ICogb2Ygc3RhdGUgYWJvdmUsIHJlY2hlY2sgdGhhdCBhY2Nlc3MgaXMgc3RpbGwgcGVybWl0dGVkLlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Njc9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjA3LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbiksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MDg6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9jcmVhdGUsIHNlbGludXhfaW5vZGVfY3JlYXRlKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYwOTpcXHRMU01fSE9PS19JTklUKGlub2RlX2xpbmssIHNlbGludXhfaW5vZGVfbGluayksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTAtXFx0TFNNX0hPT0tfSU5JVChpbm9kZV91bmxpbmssIHNlbGludXhfaW5vZGVfdW5saW5rKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxMTpcXHRMU01fSE9PS19JTklUKGlub2RlX3N5bWxpbmssIHNlbGludXhfaW5vZGVfc3ltbGluayksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTI6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9ta2Rpciwgc2VsaW51eF9pbm9kZV9ta2RpciksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTMtXFx0TFNNX0hPT0tfSU5JVChpbm9kZV9ybWRpciwgc2VsaW51eF9pbm9kZV9ybWRpciksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTQ6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9ta25vZCwgc2VsaW51eF9pbm9kZV9ta25vZCksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTUtXFx0TFNNX0hPT0tfSU5JVChpbm9kZV9yZW5hbWUsIHNlbGludXhfaW5vZGVfcmVuYW1lKSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE3LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfZm9sbG93X2xpbmssIHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmspLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE4OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfcGVybWlzc2lvbiwgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxOS1cXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNlbGludXhfaW5vZGVfc2V0YXR0ciksXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz0xMDIwPXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMzMtXFx0ICogVU5JWCBkb21haW4gc29ja2V0cyB1c2UgbG93ZXIgbGV2ZWwgc29ja2V0IGRhdGEuIExldFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMzQ6XFx0ICogVURTIGlub2RlIGhhdmUgZml4ZWQgKiBsYWJlbCB0byBrZWVwIHNtYWNrX2lub2RlX3Blcm1pc3Npb24oKSBjYWxtXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAzNS1cXHQgKiB3aGVuIGNhbGxlZCBmcm9tIHVuaXhfZmluZF9ic2QoKVxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTA5MC0vKipcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMDkxOiAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTA5Mi0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTA5OC0gKi9cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMDk5OnN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMTAwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTEyMDM9c3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjI4LS8qKlxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMjk6ICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzMC0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzNy0gKi9cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMjM4OnN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjM5LVxcdFxcdFxcdFxcdCAgaW50IG1hc2spXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz01MTU4PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNtYWNrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE3Ni1cXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHksIHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkpLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjUxNzc6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9saW5rLCBzbWFja19pbm9kZV9saW5rKSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTc4LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfdW5saW5rLCBzbWFja19pbm9kZV91bmxpbmspLFxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE4MC1cXHRMU01fSE9PS19JTklUKGlub2RlX3JlbmFtZSwgc21hY2tfaW5vZGVfcmVuYW1lKSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTgxOlxcdExTTV9IT09LX0lOSVQoaW5vZGVfcGVybWlzc2lvbiwgc21hY2tfaW5vZGVfcGVybWlzc2lvbiksXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE4Mi1cXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNtYWNrX2lub2RlX3NldGF0dHIpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTo0Ni4zMzQyNDQ5MzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwNDUxOTA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgb2YgVGhpcyBMU00gSG9vayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byBzZXZlcmFsIExTTSBob29rcywgc3BlY2lmaWNhbGx5IGBpbm9kZV9jcmVhdGVgLCBgaW5vZGVfbGlua2AsIGBpbm9kZV9zeW1saW5rYCwgYGlub2RlX21rZGlyYCwgYGlub2RlX21rbm9kYCwgYW5kIGBpbm9kZV9wZXJtaXNzaW9uYC4gSXQncyB0b3VjaGluZyBhIGRlY2VudCBzcHJlYWQgb2YgZmlsZXMgYWNyb3NzIHRoZSBmaWxlc3lzdGVtLCBzZWN1cml0eSwgYW5kIEJQRiBsYXllcnMsIHNvIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHRoaXMgYGlkbWFwYCBwb2ludGVyIGlzIGJlaW5nIHBhc3NlZCAqdGhyb3VnaCogdGhlIExTTSBob29rIGRlZmluaXRpb25zLiBUaGUgVkZTIGZ1bmN0aW9ucyBsaWtlIGB2ZnNfY3JlYXRlYCBhbmQgYHZmc19ta2RpcmAgb3IgYFx1MDAyNm5vcF9tbnRfaWRtYXBgIGFyZSBzZXR0aW5nIHVwIGBpZG1hcGAuIFRoZSBMU00gaG9va3MgdGhlbXNlbHZlcywgbGlrZSBTRUxpbnV4IGFuZCBTbWFjaywgYXJlIHRoZW4gcmVjZWl2aW5nIHRoaXMgcGFyYW1ldGVyLCBhbHRob3VnaCwgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCBTRUxpbnV4IGFuZCBTbWFjayBhcmVuJ3QgKmN1cnJlbnRseSogdXNpbmcgaXQuIFRoZSBCUEYgdGVzdHMgYXJlIGFsc28gdXNpbmcgdGhpcyBgaWRtYXBgIHdpdGhpbiB0aGUgcHJvZ3JhbXMgdGhlbXNlbHZlcywgc28gdGhhdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoZXJlIGFueSByaXNrIGhlcmU/IEkndmUgZ290IHRvIGNoZWNrLlxuXG5CYXNlZCBvbiBteSBhbmFseXNpczpcblxuKiAgICoqTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyoqIGFyZSBpbnRyb2R1Y2VkLCB3aGljaCBpcyBnb29kLlxuKiAgIFRoZXJlJ3MgKipubyBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UqKiwgd2hpY2ggaXMgYSBjcml0aWNhbCBwb2ludC5cbiogICBJIHNlZSAqKm5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgYnJhbmNoZXMqKiB0aGF0IHdvdWxkIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhbHVlcy5cblxuSSd2ZSBnb3QgdG8gZ28gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vcGUuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm9wZS5cblxuR2l2ZW4gdGhhdCBub3RoaW5nIGlzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBwb3NzaWJseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIGFuZCBzdGFuZGFyZCBmdXp6aW5nIHNob3VsZCBiZSBlbm91Z2ggdG8gZmluZCBhbnkgYnVncy4gVGhpcyBkb2Vzbid0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIGdpdmUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBteSBhbmFseXNpcy4gVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTcsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjUxLjAzODc2NjczNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBMU00gaW5vZGUgaG9vayBwcm90b3R5cGVzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGludm9jYXRpb25zIGluIHRoZSBWRlMgbGF5ZXIgKGZzL25hbWVpLmMsIGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYykgYW5kIHNlY3VyaXR5IG1vZHVsZXMgdG8gcHJvcGFnYXRlIHRoZSAnc3RydWN0IG1udF9pZG1hcCAqaWRtYXAnIGFyZ3VtZW50LCBhbG9uZyB3aXRoIGFkZGluZyBCUEYgTFNNIHRlc3QgY2FzZXMgZm9yIHRoZXNlIGhvb2tzLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBzaWduYXR1cmUgYW5kIGNhbGxpbmcgY29udmVudGlvbiB1cGRhdGVzIHBhc3NpbmcgYW4gZXhpc3RpbmcgaWRtYXAgcG9pbnRlciB0aHJvdWdoIHRvIHRoZSBMU00gaG9vayBpbmZyYXN0cnVjdHVyZS4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIExTTSBpbm9kZSBob29rIHByb3RvdHlwZXMgKGlub2RlX2NyZWF0ZSwgaW5vZGVfbGluaywgaW5vZGVfc3ltbGluaywgaW5vZGVfbWtkaXIsIGlub2RlX21rbm9kLCBpbm9kZV9wZXJtaXNzaW9uKSBhbmQgdGhlaXIgaW52b2NhdGlvbnMgaW4gdGhlIFZGUyBsYXllciAoZnMvbmFtZWkuYywgZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jKSBhbmQgc2VjdXJpdHkgbW9kdWxlcyB0byBwcm9wYWdhdGUgdGhlICdzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCcgYXJndW1lbnQsIGFsb25nIHdpdGggYWRkaW5nIEJQRiBMU00gdGVzdCBjYXNlcyBmb3IgdGhlc2UgaG9va3MuXFxuXFxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHNpZ25hdHVyZSBhbmQgY2FsbGluZyBjb252ZW50aW9uIHVwZGF0ZXMgcGFzc2luZyBhbiBleGlzdGluZyBpZG1hcCBwb2ludGVyIHRocm91Z2ggdG8gdGhlIExTTSBob29rIGluZnJhc3RydWN0dXJlLiBUaHVzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowh94mb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 00:29:56 +0000 UTC FinishedAt: 2026-09-06 00:31:52 +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": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_SMACK", "CACHEFILES", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_SMACK", "CACHEFILES", "BPF_LSM" ], "series_id": "f32cc858-0948-4bec-8a4c-6328bcedc58b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "security_inode_create", "security_inode_link", "security_inode_symlink", "security_inode_mkdir", "security_inode_mknod", "selinux_inode_create", "selinux_inode_link", "selinux_inode_symlink", "selinux_inode_mkdir", "selinux_inode_mknod", "smack_inode_link", "cachefiles_check_cache_dir", "vfs_mkobj" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzbWFja19pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O2NhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyJiMzNDssCiAgICAmIzM0O3Zmc19ta29iaiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgTFNNIGlub2RlIGhvb2sgcHJvdG90eXBlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBpbnZvY2F0aW9ucyBpbiB0aGUgVkZTIGxheWVyIChmcy9uYW1laS5jLCBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMpIGFuZCBzZWN1cml0eSBtb2R1bGVzIHRvIHByb3BhZ2F0ZSB0aGUgJiMzOTtzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCYjMzk7IGFyZ3VtZW50LCBhbG9uZyB3aXRoIGFkZGluZyBCUEYgTFNNIHRlc3QgY2FzZXMgZm9yIHRoZXNlIGhvb2tzLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgc2lnbmF0dXJlIGFuZCBjYWxsaW5nIGNvbnZlbnRpb24gdXBkYXRlcyBwYXNzaW5nIGFuIGV4aXN0aW5nIGlkbWFwIHBvaW50ZXIgdGhyb3VnaCB0byB0aGUgTFNNIGhvb2sgaW5mcmFzdHJ1Y3R1cmUuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTFNNIGlub2RlIGhvb2sgaW50ZXJmYWNlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBjYWxsZXJzIGFjcm9zcyB0aGUgVkZTIGxheWVyLCBDYWNoZUZpbGVzLCBTRUxpbnV4LCBhbmQgU21hY2sgdG8gcGFzcyB0aGUgbW91bnQgaWRtYXAgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBhbHRlcnMgY29yZSBWRlMgYW5kIExTTSBpbnRlcmFjdGlvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCByZWxldmFudCB0byBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTVkMGYyMzdjMDJhM2VhNWU4YTEyZTExZjFjZWQyNjFlYjExOTIzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MzE6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5pbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbkBAIC01MSwxNCAmIzQzOzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuJiM0MztcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkXCYjMzQ7LFxuIFx0XHQgICAgICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuJiM0MztcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWRcJiMzNDssXG4gXHRcdCAgICAgICByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuY1xuQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xuIFxuQEAgLTY5NSw3ICYjNDM7Njk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcbiBcdGlmICh1bmxpa2VseSgoKGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuJiM0MztcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1x0Lyogc2hvdWxkbiYjMzk7dCBpdCBiZSBFTk9TWVM/ICovXG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyAmIzQzOzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFxuIFx0bW9kZSBcdTAwMjY9IFNfSUFMTFVHTztcbiBcdG1vZGUgfD0gU19JRlJFRztcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XG5AQCAtNDMyOCw3ICYjNDM7NDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyAmIzQzOzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbkBAIC01NzgzLDcgJiM0Mzs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01OTA3LDcgJiM0Mzs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBpbnQgKnhhdHRyX2NvdW50KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4mIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgYm9vbCByY3UpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0IHN0cnVjdCBpYXR0ciAqYXR0cilcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdCAgICAgIGludCBtYXNrKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC05MDIsOSAmIzQzOzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MTMsOSAmIzQzOzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0XHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NzQsNyAmIzQzOzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC0xNjE0LDYgJiM0MzsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWRcbiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZVxuQEAgLTE2MjIsMTIgJiM0MzsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbiBcbkBAIC0xNjQ4LDYgJiM0MzsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZVxuICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5XG4gICogQG5ld19kZW50cnk6IG5ldyBsaW5rXG5AQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmtcbiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lXG5AQCAtMTY5MCwxNiAmIzQzOzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuIH1cbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICYjNDM7MTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XG4gXG5AQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICYjNDM7MTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIH1cbiBcbiAvKipcbkBAIC0xODIzLDYgJiM0MzsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgJiM0MzsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTMwNzQsMTIgJiM0MzszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgXHUwMDI2YWQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiAmIzQzOzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xuIH1cbkBAIC0zMTA0LDcgJiM0MzszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xuIH1cbkBAIC0zMjM2LDEzICYjNDM7MzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWRcbiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkXG4gICpcbiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG9cbiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgJiM0MzsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGlua1xuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XG4gICogQGRpcjogdW51c2VkXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHN0cnVjdCBzbWFja19rbm93biAqaXNwO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICYjNDM7MTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCAmIzQzOzEsMzAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4gXG4gLypcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtsc20uc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bHNtX3RhaWxjYWxsLnNrZWwuaFwmIzM0O1xuIFxuIGNoYXIgKkNNRF9BUkdTW10gPSB7XCYjMzQ7dHJ1ZVwmIzM0OywgTlVMTH07XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcdTAwM2NcdTAwM2MgNikgLSAxLFxuJiM0Mzt9O1xuJiM0MztcbiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIHtcbiBcdGludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1cztcbkBAIC0zMCw2ICYjNDM7NDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7XG4mIzQzO1x0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbiYjNDM7XHRcdHNhdmVkX2Vycm5vID0gRUlPO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRpZiAoc2F2ZWRfZXJybm8pIHtcbiYjNDM7XHRcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbNjRdO1xuJiM0MztcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7L3Byb2MvJWQvJXNcJiMzNDssIHBpZCwgbmFtZSk7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuJiM0MztcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoWzY0XTtcbiYjNDM7XHRwaWRfdCBwaWQsIHdhaXRlZDtcbiYjNDM7XHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKHBpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAocGlkID09IDApIHtcbiYjNDM7XHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuJiM0MztcdFx0XHRfZXhpdCgxKTtcbiYjNDM7XHRcdHJhaXNlKFNJR1NUT1ApO1xuJiM0MztcdFx0X2V4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCBXVU5UUkFDRUQpO1xuJiM0MztcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuJiM0MztcdGlmICh3YWl0ZWQgIT0gcGlkKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcbiYjNDM7XHRcdHBpZCA9IC0xO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqL1xuJiM0MztcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O3NldGdyb3Vwc1wmIzM0OywgXCYjMzQ7ZGVueVwmIzM0OykgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O3VpZF9tYXBcJiMzNDssIFwmIzM0OzAgMCAxXCYjMzQ7KSB8fFxuJiM0MztcdCAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O2dpZF9tYXBcJiMzNDssIFwmIzM0OzAgMCAxXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jLyVkL25zL3VzZXJcJiMzNDssIHBpZCk7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuJiM0MztcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGlmIChwaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbiYjNDM7XHRcdGRvIHtcbiYjNDM7XHRcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApO1xuJiM0MztcdFx0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4mIzQzO1x0fVxuJiM0MztcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbiYjNDM7XHRpZiAodXNlcm5zX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovXG4mIzQzO1x0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFwmIzM0O3RtcGZzXCYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZzZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRtbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApO1xuJiM0MztcdGlmIChtbnRmZCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcbiYjNDM7XHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcJiMzNDtcJiMzNDssIEFUX0VNUFRZX1BBVEgsIFx1MDAyNmF0dHIsXG4mIzQzO1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuJiM0MztcdFx0Y2xvc2UobW50ZmQpO1xuJiM0MztcdFx0bW50ZmQgPSAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRpZiAoZnNmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmc2ZkKTtcbiYjNDM7XHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHVzZXJuc19mZCk7XG4mIzQzO1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbiYjNDM7XHRyZXR1cm4gbW50ZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gLTEsIHJldCA9IC0xO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5hdChkaXJmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuJiM0MztcdFx0ICAgIDA2MDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwmIzM0O2RpclwmIzM0OywgMDcwMCksIFwmIzM0O21rZGlyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcJiMzNDt0YXJnZXRcJiMzNDssIGRpcmZkLCBcJiMzNDtzeW1saW5rXCYjMzQ7KSwgXCYjMzQ7c3ltbGlua1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFwmIzM0O2ZpbGVcJiMzNDssIGRpcmZkLCBcJiMzNDtsaW5rXCYjMzQ7LCAwKSwgXCYjMzQ7bGlua1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgXCYjMzQ7Zmlmb1wmIzM0OywgMDYwMCksIFwmIzM0O21rbm9kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7bGlua1wmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2ZpZm9cJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRpcmZkLCBcJiMzNDtzeW1saW5rXCYjMzQ7LCAwKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2RpclwmIzM0OywgQVRfUkVNT1ZFRElSKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHRtcGRpcltdID0gXCYjMzQ7L3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xuJiM0MztcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuJiM0MztcdGludCByZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCYjMzQ7bWtkdGVtcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcJiMzNDtvcGVuX3RtcGRpclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCYjMzQ7Y3JlYXRlX2lkbWFwcGVkX3RtcGZzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcJiMzNDtpZGVudGl0eV9pZG1hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7aWRtYXBwZWRfbW91bnRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxuJiM0MztcdFx0XHRcJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuXCYjMzQ7KSA/IDAgOiAtMTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoaWRtYXBwZWRfZGlyZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuJiM0MztcdGlmIChkaXJmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShkaXJmZCk7XG4mIzQzO1x0cm1kaXIodG1wZGlyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiAmIzQzOzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4gXG4mIzQzO1x0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X2xzbV9pbm9kZV9pZG1hcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdGVyciA9IHN0YWNrX21wcm90ZWN0KCk7XG4gXHRpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCBcJiMzNDtzdGFja19tcHJvdGVjdFwmIzM0OykgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCYjMzQ7c3RhY2tfbXByb3RlY3RcJiMzNDspKVxuQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7XG4gaW50IG1wcm90ZWN0X2NvdW50ID0gMDtcbiBpbnQgYnBybV9jb3VudCA9IDA7XG4mIzQzO19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbiYjNDM7XHRJTk9ERV9JRE1BUF9MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAxLFxuJiM0MztcdElOT0RFX0lETUFQX1NZTUxJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDIsXG4mIzQzO1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4mIzQzO1x0SU5PREVfSURNQVBfTUtOT0RcdD0gMVUgXHUwMDNjXHUwMDNjIDQsXG4mIzQzO1x0SU5PREVfSURNQVBfUEVSTUlTU0lPTlx0PSAxVSBcdTAwM2NcdTAwM2MgNSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4mIzQzO3tcbiYjNDM7XHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpZG1hcC1cdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxuJiM0MztcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9jcmVhdGVcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfbGlua1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX3N5bWxpbmtcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX21rZGlyXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9ta25vZFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9wZXJtaXNzaW9uXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtsc20vZmlsZV9tcHJvdGVjdFwmIzM0OylcbiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX21rZGlyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX21rbm9kJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfbGluayYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX21rbm9kJiMzNDssCiAgICAmIzM0O3NtYWNrX2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7Y2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXImIzM0OywKICAgICYjMzQ7dmZzX21rb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTFNNIGlub2RlIGhvb2sgaW50ZXJmYWNlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBjYWxsZXJzIGFjcm9zcyB0aGUgVkZTIGxheWVyLCBDYWNoZUZpbGVzLCBTRUxpbnV4LCBhbmQgU21hY2sgdG8gcGFzcyB0aGUgbW91bnQgaWRtYXAgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBhbHRlcnMgY29yZSBWRlMgYW5kIExTTSBpbnRlcmFjdGlvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCByZWxldmFudCB0byBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTVkMGYyMzdjMDJhM2VhNWU4YTEyZTExZjFjZWQyNjFlYjExOTIzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDA6MzE6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwpAQCAtNTEsMTQgJiM0Mzs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKJiM0MzsJcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKSB7CiAJCXByX2VycigmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWQmIzM0OywKIAkJICAgICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgmYW1wO25vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXByX2VycigmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWQmIzM0OywKIAkJICAgICAgIHJldCk7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKHVubGlrZWx5KHJldHZhbCkpCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pOwogCkBAIC02OTUsNyAmIzQzOzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkCiAJaWYgKHVubGlrZWx5KCgoaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyAwMTExKSAhPSAwMTExKSB8fCAhbm9fYWNsX2lub2RlKGlub2RlKSkpCiAJCXJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiAKIC8qKgpAQCAtNDE4OCw3ICYjNDM7NDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAkJcmV0dXJuIC1FQUNDRVM7CS8qIHNob3VsZG4mIzM5O3QgaXQgYmUgRU5PU1lTPyAqLwogCiAJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CkBAIC00MjEyLDcgJiM0Mzs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAogCW1vZGUgJmFtcDs9IFNfSUFMTFVHTzsKIAltb2RlIHw9IFNfSUZSRUc7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgmYW1wO25vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAllcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpOwpAQCAtNDMyOCw3ICYjNDM7NDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiB9CiAKIC8qKgpAQCAtNTI1OCw3ICYjNDM7NTI1OCw3IEBAIGludCB2ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTUzOTUsNyAmIzQzOzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlnb3RvIGVycjsKIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycjsKIApAQCAtNTc4Myw3ICYjNDM7NTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFkaXItJmd0O2lfb3AtJmd0O3N5bWxpbmspCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtNTkwNyw3ICYjNDM7NTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTEyMCwyNiAmIzQzOzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBpbnQgKnhhdHRyX2NvdW50KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfdW5saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSBjb25zdCBjaGFyICpvbGRfbmFtZSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgYm9vbCByY3UpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgc3RydWN0IGlhdHRyICphdHRyKQogTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTQwNCwyNCAmIzQzOzQwNCwyOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpOwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwogdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICAgY29uc3QgY2hhciAqb2xkX25hbWUpOwotaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkJCSAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LAogCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICAgIGJvb2wgcmN1KTsKLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkgICAgICBpbnQgbWFzayk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC05MDIsOSAmIzQzOzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQkgdW1vZGVfdCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCXN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJdW1vZGVfdCBtb2RlKQogewogCXJldHVybiAwOwogfQpAQCAtOTEzLDkgJiM0Mzs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkCiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeyB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKLQkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCi0JCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05MjYsMTYgJiM0Mzs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJaW50IG1vZGUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJICAgICAgIGludCBtb2RlKQogewogCXJldHVybiAwOwogfQpAQCAtOTQ2LDkgJiM0Mzs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJICAgICAgIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05NzQsNyAmIzQzOzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC0xNjE0LDYgJiM0MzsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWQKICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlCkBAIC0xNjIyLDEyICYjNDM7MTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgIHVtb2RlX3QgbW9kZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTsKIApAQCAtMTY0OCw2ICYjNDM7MTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlCiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeQogICogQG5ld19kZW50cnk6IG5ldyBsaW5rCkBAIC0xNjU2LDEyICYjNDM7MTY1OCwxMiBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogfQogCiAvKioKQEAgLTE2ODIsNiAmIzQzOzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogc3ltYm9saWMgbGluawogICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZQpAQCAtMTY5MCwxNiAmIzQzOzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKIH0KIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeQogICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZQpAQCAtMTcwOSwxMSAmIzQzOzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpOwogCkBAIC0xNzM1LDYgJiM0MzsxNzQwLDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogbmV3IGZpbGUKICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlCkBAIC0xNzQ3LDEyICYjNDM7MTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKIH0KIAogLyoqCkBAIC0xODIzLDYgJiM0MzsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IGlub2RlCiAgKiBAbWFzazogYWNjZXNzIG1hc2sKICAqCkBAIC0xODM1LDExICYjNDM7MTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0zMDc0LDEyICYjNDM7MzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgJmFtcDthZCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTsKIH0KQEAgLTMwODksMTIgJiM0MzszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpOwogfQpAQCAtMzEwNCw3ICYjNDM7MzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCXJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpOwogfQpAQCAtMzIzNiwxMyAmIzQzOzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYywKIAogLyoqCiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGUKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZAogICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZAogICoKICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0bwogICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKIHsKIAlpbnQgbWFzazsKIAl1MzIgcGVybXM7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC0xMDg5LDE0ICYjNDM7MTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAKIC8qKgogICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmsKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQG9sZF9kZW50cnk6IHRoZSBleGlzdGluZyBvYmplY3QKICAqIEBkaXI6IHVudXNlZAogICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0CiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJc3RydWN0IHNtYWNrX2tub3duICppc3A7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwpAQCAtMTIyNiw2ICYjNDM7MTIyNyw3IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAogCiAvKioKICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKQomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvbgogICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkCiAgKgpAQCAtMTIzMyw3ICYjNDM7MTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgIGludCBtYXNrKQogewogCXN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS0mZ3Q7aV9zYik7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCkBAIC0xLDE4ICYjNDM7MSwzMCBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOwogI2luY2x1ZGUgJiMzNDtsc20uc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bHNtX3RhaWxjYWxsLnNrZWwuaCYjMzQ7CiAKIGNoYXIgKkNNRF9BUkdTW10gPSB7JiMzNDt0cnVlJiMzNDssIE5VTEx9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUlOT0RFX0lETUFQX0FMTCA9ICgxVSAmbHQ7Jmx0OyA2KSAtIDEsCiYjNDM7fTsKJiM0MzsKIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpCiB7CiAJaW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzOwpAQCAtMzAsNiAmIzQzOzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogCXJldHVybiAtRUlOVkFMOwogfQogCiYjNDM7c3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpOwomIzQzOwl9IHdoaWxlIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpCiYjNDM7ewomIzQzOwlzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTsKJiM0MzsJaW50IGZkLCBzYXZlZF9lcnJubyA9IDA7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbikKJiM0MzsJCXNhdmVkX2Vycm5vID0gRUlPOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChzYXZlZF9lcnJubykgewomIzQzOwkJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XTsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkLyVzJiMzNDssIHBpZCwgbmFtZSk7CiYjNDM7CWlmIChsZW4gJmx0OyAwIHx8IChzaXplX3QpbGVuICZndDs9IHNpemVvZihwYXRoKSkgewomIzQzOwkJZXJybm8gPSBFT1ZFUkZMT1c7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CXBpZF90IHBpZCwgd2FpdGVkOwomIzQzOwlpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmIChwaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCWlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKQomIzQzOwkJCV9leGl0KDEpOwomIzQzOwkJcmFpc2UoU0lHU1RPUCk7CiYjNDM7CQlfZXhpdCgwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQl3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgJmFtcDtzdGF0dXMsIFdVTlRSQUNFRCk7CiYjNDM7CX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CWlmICh3YWl0ZWQgIT0gcGlkKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7CiYjNDM7CQlwaWQgPSAtMTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovCiYjNDM7CWlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsICYjMzQ7c2V0Z3JvdXBzJiMzNDssICYjMzQ7ZGVueSYjMzQ7KSAmYW1wOyZhbXA7IGVycm5vICE9IEVOT0VOVCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3VpZF9tYXAmIzM0OywgJiMzNDswIDAgMSYjMzQ7KSB8fAomIzQzOwkgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O2dpZF9tYXAmIzM0OywgJiMzNDswIDAgMSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7L3Byb2MvJWQvbnMvdXNlciYjMzQ7LCBwaWQpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWlmIChwaWQgJmd0OyAwKSB7CiYjNDM7CQlraWxsKHBpZCwgU0lHS0lMTCk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJd2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApOwomIzQzOwkJfSB3aGlsZSAod2FpdGVkICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsJfQomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3JlYXRlX2lkbWFwcGVkX3RtcGZzKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0gewomIzQzOwkJLmF0dHJfc2V0ID0gTU9VTlRfQVRUUl9JRE1BUCwKJiM0MzsJfTsKJiM0MzsJaW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xOwomIzQzOwomIzQzOwl1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7CiYjNDM7CWlmICh1c2VybnNfZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovCiYjNDM7CWZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCAmIzM0O3RtcGZzJiMzNDssIEZTT1BFTl9DTE9FWEVDKTsKJiM0MzsJaWYgKGZzZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7CiYjNDM7CWlmIChtbnRmZCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7CiYjNDM7CWlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsICYjMzQ7JiMzNDssIEFUX0VNUFRZX1BBVEgsICZhbXA7YXR0ciwKJiM0MzsJCSAgICBzaXplb2YoYXR0cikpKSB7CiYjNDM7CQljbG9zZShtbnRmZCk7CiYjNDM7CQltbnRmZCA9IC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAoZnNmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZnNmZCk7CiYjNDM7CWlmICh1c2VybnNfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHVzZXJuc19mZCk7CiYjNDM7CWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CXJldHVybiBtbnRmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSAtMSwgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLAomIzQzOwkJICAgIDA2MDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlmZCA9IC0xOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCAwNzAwKSwgJiMzNDtta2RpciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoJiMzNDt0YXJnZXQmIzM0OywgZGlyZmQsICYjMzQ7c3ltbGluayYjMzQ7KSwgJiMzNDtzeW1saW5rJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGxpbmthdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCksICYjMzQ7bGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgJiMzNDtmaWZvJiMzNDssIDA2MDApLCAmIzM0O21rbm9kJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IDA7CiYjNDM7b3V0OgomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7bGluayYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7c3ltbGluayYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZGlyJiMzNDssIEFUX1JFTU9WRURJUik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgdG1wZGlyW10gPSAmIzM0Oy92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWCYjMzQ7OwomIzQzOwlfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDsKJiM0MzsJaW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7CiYjNDM7CWludCByZXQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgJiMzNDtta2R0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsICYjMzQ7b3Blbl90bXBkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsICYjMzQ7Y3JlYXRlX2lkbWFwcGVkX3RtcGZzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgJiMzNDtpZGVudGl0eV9pZG1hcCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksCiYjNDM7CQkgICAgICAgJiMzNDtpZG1hcHBlZF9tb3VudCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLAomIzQzOwkJICAgICAgICYjMzQ7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlyZXQgPSBBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCQkmIzM0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4mIzM0OykgPyAwIDogLTE7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoaWRtYXBwZWRfZGlyZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGlkbWFwcGVkX2RpcmZkKTsKJiM0MzsJaWYgKGRpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShkaXJmZCk7CiYjNDM7CXJtZGlyKHRtcGRpcik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogewogCXN0cnVjdCBicGZfbGluayAqbGluazsKQEAgLTUzLDYgJiM0MzsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogCiAJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiAKJiM0MzsJZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X2xzbV9pbm9kZV9pZG1hcCYjMzQ7KSkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJZXJyID0gc3RhY2tfbXByb3RlY3QoKTsKIAlpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCAmIzM0O3N0YWNrX21wcm90ZWN0JiMzNDspIHx8CiAJICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCAmIzM0O3N0YWNrX21wcm90ZWN0JiMzNDspKQpAQCAtNzEsNiAmIzQzOzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAlza2VsLSZndDtic3MtJmd0O2NvcHlfdGVzdCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDticHJtX2NvdW50ID0gMDsKIAlza2VsLSZndDtic3MtJmd0O21wcm90ZWN0X2NvdW50ID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCmluZGV4IDdkZTE3M2RhZjI3YjYuLjdlMzJmYmRkYmZhZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKQEAgLTg0LDYgJiM0Mzs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7CiBpbnQgbXByb3RlY3RfY291bnQgPSAwOwogaW50IGJwcm1fY291bnQgPSAwOwomIzQzO19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzO19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9DUkVBVEUJPSAxVSAmbHQ7Jmx0OyAwLAomIzQzOwlJTk9ERV9JRE1BUF9MSU5LCT0gMVUgJmx0OyZsdDsgMSwKJiM0MzsJSU5PREVfSURNQVBfU1lNTElOSwk9IDFVICZsdDsmbHQ7IDIsCiYjNDM7CUlOT0RFX0lETUFQX01LRElSCT0gMVUgJmx0OyZsdDsgMywKJiM0MzsJSU5PREVfSURNQVBfTUtOT0QJPSAxVSAmbHQ7Jmx0OyA0LAomIzQzOwlJTk9ERV9JRE1BUF9QRVJNSVNTSU9OCT0gMVUgJmx0OyZsdDsgNSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkICZhbXA7JmFtcDsgaWRtYXA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBpZG1hcC0mZ3Q7dWlkX21hcC5ucl9leHRlbnRzID09IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgaWRtYXAtJmd0O2dpZF9tYXAubnJfZXh0ZW50cyA9PSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQkgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJaWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChpc19pZGVudGl0eV9pZG1hcChpZG1hcCkpCiYjNDM7CQlpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7CiYjNDM7CWVsc2UKJiM0MzsJCWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vazsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9jcmVhdGUmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX2xpbmsmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX3N5bWxpbmsmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta2RpciYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX21rbm9kJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9wZXJtaXNzaW9uJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpOwomIzQzO30KIAogU0VDKCYjMzQ7bHNtL2ZpbGVfbXByb3RlY3QmIzM0OykKIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNTQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQmIzM5O3Mgd29ydGggdG9zc2luZyBpbnRvIHRoZSBzeXprYWxsZXIgZ3JpbmRlci4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBmaWxlcyB0b3VjaGVkIC0gYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYSBidW5jaCBvZiBgaW5jbHVkZS9saW51eC8qYCBoZWFkZXJzLCB2YXJpb3VzIGBzZWN1cml0eS8qYCBmaWxlcywgYW5kIGV2ZW4gc29tZSBCUEYgc2VsZi10ZXN0cyDigJMgaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBUaGlzIHBhdGNoIGlzIGNsZWFybHkgcG9raW5nIGFyb3VuZCBpbiBzZW5zaXRpdmUgYXJlYXM6IHRoZSBmaWxlc3lzdGVtcywgbmFtaW5nIGludGVyZmFjZSwgYW5kIHRoZSBzZWN1cml0eSBsYXllci4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW5qZWN0aW5nIGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBpbnRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzLiBUaGluayBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCB0aGUgd2hvbGUgc3VpdGUuIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhlIGhvb2sgc2lnbmF0dXJlcyBpbiB0aGUgcmVsZXZhbnQgTFNNIHN1YnN5c3RlbXMgKFNFTGludXgsIFNtYWNrKSBhbmQgdGhlIEJQRiBzZWxmLXRlc3RzLiBUaGF0IG1lYW5zIHRoZXnigJlyZSB0b3VjaGluZyB0aGUgY29yZSBMU00gZGlzcGF0Y2hlcnMgYW5kLCBieSBleHRlbnNpb24sICphbnkqIHNlY3VyaXR5IG1vZHVsZXMgdGhhdCBkZXBlbmQgb24gdGhlbS4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSB0aGVzZSBtb2RpZmljYXRpb25zIGhpdHRpbmcgY29yZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlPyBJIGNhbiBzZWUgaXQsIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUgZmlsZXMsIGBmcy9uYW1laS5jYCB3aGljaCBpbmNsdWRlcyBmdW5kYW1lbnRhbCBWRlMgb3BlcmF0aW9ucyBsaWtlIGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGB2ZnNfbWtub2RgLCBhbGwgdGhlIHdheSBkb3duIHRvIGBpbm9kZV9wZXJtaXNzaW9uYC4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGlzIHRoZSBMU00gZGlzcGF0Y2hlciBpdHNlbGYsIHdoaWNoIGlzIGFsd2F5cyBpbiB0aGUgY3JpdGljYWwgcGF0aC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgVkZTIHBhdGggcmVzb2x1dGlvbiBhbmQgaW5vZGUgb3BlcmF0aW9ucyAob3BlbiwgbWtkaXIsIG1rbm9kLCBzeW1saW5rLCBsaW5rLCBldGMuKSBhbmQgc2VjdXJpdHkgZnJhbWV3b3JrIChMU00pLgoKQWNjb3JkaW5nIHRvIHNlY3Rpb24gMywgYW55dGhpbmcgdG91Y2hpbmcgY29yZSBWRlMsIExTTSBpbnRlcmZhY2VzLCBvciBhbnkgcmVmYWN0b3JpbmdzIG9mIGFsZ29yaXRobXMsIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nIHNob3VsZCBiZSB3b3J0aCBmdXp6aW5nLiAqKldvcnRoRnV6emluZyBtdXN0IGJlIHRydWUuKioKClNvLCB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIHdlIHNob3VsZCBiZSBmb2N1c2luZyBvbiDigJMgdGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQsIG9yIGNoZWNrIEtjb25maWcuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgdGhlc2Ugc2VjdXJpdHkgZmVhdHVyZXMgb3IgYW55IG5ldyBzeW1ib2xzIHRoYXQgbWlnaHQgZXhwb3NlIG5ldyBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0VDVVJJVFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDIxNzAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbnNlY3VyaXR5L0tjb25maWc9OD1zb3VyY2UgXCYjMzQ7c2VjdXJpdHkva2V5cy9LY29uZmlnXCYjMzQ7XG5zZWN1cml0eS9LY29uZmlnLTktXG5zZWN1cml0eS9LY29uZmlnOjEwOmNvbmZpZyBTRUNVUklUWV9ETUVTR19SRVNUUklDVFxuc2VjdXJpdHkvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7UmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xuLS1cbnNlY3VyaXR5L0tjb25maWctNzItXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTg1LVxuc2VjdXJpdHkvS2NvbmZpZzo4Njpjb25maWcgSEFTX1NFQ1VSSVRZX0FVRElUXG5zZWN1cml0eS9LY29uZmlnLTg3LVx0ZGVmX2Jvb2wgeVxuc2VjdXJpdHkvS2NvbmZpZy04OC1cdGRlcGVuZHMgb24gQVVESVRcbnNlY3VyaXR5L0tjb25maWc6ODk6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG5zZWN1cml0eS9LY29uZmlnLTkwLVxuc2VjdXJpdHkvS2NvbmZpZzo5MTpjb25maWcgU0VDVVJJVFlGU1xuc2VjdXJpdHkvS2NvbmZpZy05Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTk4LVxuc2VjdXJpdHkvS2NvbmZpZzo5OTpjb25maWcgU0VDVVJJVFlfTkVUV09SS1xuc2VjdXJpdHkvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O1NvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1wmIzM0O1xuc2VjdXJpdHkvS2NvbmZpZzoxMDE6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG5zZWN1cml0eS9LY29uZmlnLTEwMi1cdGhlbHBcbi0tXG5zZWN1cml0eS9LY29uZmlnLTEwNy1cbnNlY3VyaXR5L0tjb25maWc6MTA4OmNvbmZpZyBTRUNVUklUWV9JTkZJTklCQU5EXG5zZWN1cml0eS9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7SW5maW5pYmFuZCBTZWN1cml0eSBIb29rc1wmIzM0O1xuc2VjdXJpdHkvS2NvbmZpZzoxMTA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EXG5zZWN1cml0eS9LY29uZmlnLTExMS1cdGhlbHBcbi0tXG5zZWN1cml0eS9LY29uZmlnLTExNi1cbnNlY3VyaXR5L0tjb25maWc6MTE3OmNvbmZpZyBTRUNVUklUWV9ORVRXT1JLX1hGUk1cbnNlY3VyaXR5L0tjb25maWctMTE4LVx0Ym9vbCBcJiMzNDtYRlJNIChJUFNlYykgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1wmIzM0O1xuc2VjdXJpdHkvS2NvbmZpZzoxMTk6XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IFNFQ1VSSVRZX05FVFdPUktcbnNlY3VyaXR5L0tjb25maWctMTIwLVx0aGVscFxuLS1cbnNlY3VyaXR5L0tjb25maWctMTI5LVxuc2VjdXJpdHkvS2NvbmZpZzoxMzA6Y29uZmlnIFNFQ1VSSVRZX1BBVEhcbnNlY3VyaXR5L0tjb25maWctMTMxLVx0Ym9vbCBcJiMzNDtTZWN1cml0eSBob29rcyBmb3IgcGF0aG5hbWUgYmFzZWQgYWNjZXNzIGNvbnRyb2xcJiMzNDtcbnNlY3VyaXR5L0tjb25maWc6MTMyOlx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZy0xMzMtXHRoZWxwXG4tLVxuc2VjdXJpdHkvS2NvbmZpZz0xNjk9Y29uZmlnIExTTV9NTUFQX01JTl9BRERSXG5zZWN1cml0eS9LY29uZmlnLTE3MC1cdGludCBcJiMzNDtMb3cgYWRkcmVzcyBzcGFjZSBmb3IgTFNNIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb25cJiMzNDtcbnNlY3VyaXR5L0tjb25maWc6MTcxOlx0ZGVwZW5kcyBvbiBTRUNVUklUWSBcdTAwMjZcdTAwMjYgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvS2NvbmZpZy0xNzItXHRkZWZhdWx0IDMyNzY4IGlmIEFSTSB8fCAoQVJNNjQgXHUwMDI2XHUwMDI2IENPTVBBVClcbi0tXG5zZWN1cml0eS9LY29uZmlnPTIzND1jaG9pY2VcbnNlY3VyaXR5L0tjb25maWctMjM1LVx0cHJvbXB0IFwmIzM0O0ZpcnN0IGxlZ2FjeSAmIzM5O21ham9yIExTTSYjMzk7IHRvIGJlIGluaXRpYWxpemVkXCYjMzQ7XG5zZWN1cml0eS9LY29uZmlnOjIzNjpcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlmIFNFQ1VSSVRZX1NFTElOVVhcbnNlY3VyaXR5L0tjb25maWc6MjM3Olx0ZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlmIFNFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9LY29uZmlnOjIzODpcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaWYgU0VDVVJJVFlfVE9NT1lPXG5zZWN1cml0eS9LY29uZmlnOjIzOTpcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9BUFBBUk1PUiBpZiBTRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvS2NvbmZpZzoyNDA6XHRkZWZhdWx0IERFRkFVTFRfU0VDVVJJVFlfREFDXG5zZWN1cml0eS9LY29uZmlnLTI0MS1cbnNlY3VyaXR5L0tjb25maWctMjQyLVx0aGVscFxuc2VjdXJpdHkvS2NvbmZpZzoyNDM6XHQgIFRoaXMgY2hvaWNlIGlzIHRoZXJlIG9ubHkgZm9yIGNvbnZlcnRpbmcgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlcbnNlY3VyaXR5L0tjb25maWctMjQ0LVx0ICBpbiBvbGQga2VybmVsIGNvbmZpZ3MgdG8gQ09ORklHX0xTTSBpbiBuZXcga2VybmVsIGNvbmZpZ3MuIERvbiYjMzk7dFxuLS1cbnNlY3VyaXR5L0tjb25maWctMjUwLVxuc2VjdXJpdHkvS2NvbmZpZzoyNTE6XHRjb25maWcgREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYXG5zZWN1cml0eS9LY29uZmlnOjI1MjpcdFx0Ym9vbCBcJiMzNDtTRUxpbnV4XCYjMzQ7IGlmIFNFQ1VSSVRZX1NFTElOVVg9eVxuc2VjdXJpdHkvS2NvbmZpZy0yNTMtXG5zZWN1cml0eS9LY29uZmlnOjI1NDpcdGNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9LY29uZmlnOjI1NTpcdFx0Ym9vbCBcJiMzNDtTaW1wbGlmaWVkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbFwmIzM0OyBpZiBTRUNVUklUWV9TTUFDSz15XG5zZWN1cml0eS9LY29uZmlnLTI1Ni1cbnNlY3VyaXR5L0tjb25maWc6MjU3Olx0Y29uZmlnIERFRkFVTFRfU0VDVVJJVFlfVE9NT1lPXG5zZWN1cml0eS9LY29uZmlnOjI1ODpcdFx0Ym9vbCBcJiMzNDtUT01PWU9cJiMzNDsgaWYgU0VDVVJJVFlfVE9NT1lPPXlcbnNlY3VyaXR5L0tjb25maWctMjU5LVxuc2VjdXJpdHkvS2NvbmZpZzoyNjA6XHRjb25maWcgREVGQVVMVF9TRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvS2NvbmZpZzoyNjE6XHRcdGJvb2wgXCYjMzQ7QXBwQXJtb3JcJiMzNDsgaWYgU0VDVVJJVFlfQVBQQVJNT1I9eVxuc2VjdXJpdHkvS2NvbmZpZy0yNjItXG5zZWN1cml0eS9LY29uZmlnOjI2MzpcdGNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX0RBQ1xuc2VjdXJpdHkvS2NvbmZpZy0yNjQtXHRcdGJvb2wgXCYjMzQ7VW5peCBEaXNjcmV0aW9uYXJ5IEFjY2VzcyBDb250cm9sc1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWc9MjY4PWNvbmZpZyBMU01cbnNlY3VyaXR5L0tjb25maWctMjY5LVx0c3RyaW5nIFwmIzM0O09yZGVyZWQgbGlzdCBvZiBlbmFibGVkIExTTXNcJiMzNDtcbnNlY3VyaXR5L0tjb25maWc6MjcwOlx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZzoyNzE6XHRkZWZhdWx0IFwmIzM0O2xhbmRsb2NrLGxvY2tkb3duLHlhbWEsbG9hZHBpbixzYWZlc2V0aWQsc21hY2ssc2VsaW51eCx0b21veW8sYXBwYXJtb3IsaXBlLGJwZlwmIzM0OyBpZiBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9LY29uZmlnOjI3MjpcdGRlZmF1bHQgXCYjMzQ7bGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxhcHBhcm1vcixzZWxpbnV4LHNtYWNrLHRvbW95byxpcGUsYnBmXCYjMzQ7IGlmIERFRkFVTFRfU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L0tjb25maWc6MjczOlx0ZGVmYXVsdCBcJiMzNDtsYW5kbG9jayxsb2NrZG93bix5YW1hLGxvYWRwaW4sc2FmZXNldGlkLHRvbW95byxpcGUsYnBmXCYjMzQ7IGlmIERFRkFVTFRfU0VDVVJJVFlfVE9NT1lPXG5zZWN1cml0eS9LY29uZmlnOjI3NDpcdGRlZmF1bHQgXCYjMzQ7bGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxpcGUsYnBmXCYjMzQ7IGlmIERFRkFVTFRfU0VDVVJJVFlfREFDXG5zZWN1cml0eS9LY29uZmlnLTI3NS1cdGRlZmF1bHQgXCYjMzQ7bGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxzZWxpbnV4LHNtYWNrLHRvbW95byxhcHBhcm1vcixpcGUsYnBmXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZy0yODQtXG5zZWN1cml0eS9LY29uZmlnOjI4NTpjb25maWcgU0VDVVJJVFlfQ09NTU9OQ0FQX0tVTklUX1RFU1RcbnNlY3VyaXR5L0tjb25maWctMjg2LVx0Ym9vbCBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgY29tbW9uY2FwXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5zZWN1cml0eS9NYWtlZmlsZT05PW9iai15XHRcdFx0XHRcdCYjNDM7PSBjb21tb25jYXAub1xuc2VjdXJpdHkvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1NFQ1VSSVRZKSBcdFx0XHQmIzQzOz0gbHNtX3N5c2NhbGxzLm9cbnNlY3VyaXR5L01ha2VmaWxlLTExLW9iai0kKENPTkZJR19NTVUpXHRcdFx0JiM0Mzs9IG1pbl9hZGRyLm9cbi0tXG5zZWN1cml0eS9NYWtlZmlsZS0xMy0jIE9iamVjdCBmaWxlIGxpc3RzXG5zZWN1cml0eS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfU0VDVVJJVFkpXHRcdFx0JiM0Mzs9IHNlY3VyaXR5Lm8gbHNtX25vdGlmaWVyLm8gbHNtX2luaXQub1xuc2VjdXJpdHkvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1NFQ1VSSVRZRlMpXHRcdCYjNDM7PSBpbm9kZS5vXG5zZWN1cml0eS9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWClcdFx0JiM0Mzs9IHNlbGludXgvXG5zZWN1cml0eS9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfU0VDVVJJVFlfU01BQ0spXHRcdCYjNDM7PSBzbWFjay9cbnNlY3VyaXR5L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19IQVNfU0VDVVJJVFlfQVVESVQpXHQmIzQzOz0gbHNtX2F1ZGl0Lm9cbnNlY3VyaXR5L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pXHRcdCYjNDM7PSB0b21veW8vXG5zZWN1cml0eS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IpXHRcdCYjNDM7PSBhcHBhcm1vci9cbnNlY3VyaXR5L01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19TRUNVUklUWV9ZQU1BKVx0XHQmIzQzOz0geWFtYS9cbnNlY3VyaXR5L01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19TRUNVUklUWV9MT0FEUElOKVx0XHQmIzQzOz0gbG9hZHBpbi9cbnNlY3VyaXR5L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19TRUNVUklUWV9TQUZFU0VUSUQpICAgICAgICYjNDM7PSBzYWZlc2V0aWQvXG5zZWN1cml0eS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfU0VDVVJJVFlfTE9DS0RPV05fTFNNKVx0JiM0Mzs9IGxvY2tkb3duL1xuc2VjdXJpdHkvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX0NHUk9VUFMpXHRcdFx0JiM0Mzs9IGRldmljZV9jZ3JvdXAub1xuc2VjdXJpdHkvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9MU00pXHRcdFx0JiM0Mzs9IGJwZi9cbnNlY3VyaXR5L01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19TRUNVUklUWV9MQU5ETE9DSylcdFx0JiM0Mzs9IGxhbmRsb2NrL1xuc2VjdXJpdHkvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX0lQRSlcdFx0JiM0Mzs9IGlwZS9cbnNlY3VyaXR5L01ha2VmaWxlLTI5LVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yLy5rdW5pdGNvbmZpZz0yPUNPTkZJR19ORVQ9eVxuc2VjdXJpdHkvYXBwYXJtb3IvLmt1bml0Y29uZmlnOjM6Q09ORklHX1NFQ1VSSVRZPXlcbnNlY3VyaXR5L2FwcGFybW9yLy5rdW5pdGNvbmZpZzo0OkNPTkZJR19TRUNVUklUWV9BUFBBUk1PUj15XG5zZWN1cml0eS9hcHBhcm1vci8ua3VuaXRjb25maWc6NTpDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVD15XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBcHBBcm1vciBzdXBwb3J0XCYjMzQ7XG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFx1MDAyNlx1MDAyNiBORVRcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNS1cdHNlbGVjdCBBVURJVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo2Olx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NzpcdHNlbGVjdCBTRUNVUklUWUZTXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg6XHRzZWxlY3QgU0VDVVJJVFlfTkVUV09SS1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05LVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcJiMzNDtcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MjA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTIxLVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXHRib29sIFwmIzM0O0J1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcJiMzNDtcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MzA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTMxLVx0ZGVmYXVsdCB5XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mzg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX01FU1NBR0VTXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEZWJ1ZyBtZXNzYWdlcyBlbmFibGVkIGJ5IGRlZmF1bHRcJiMzNDtcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQxLVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00Ni1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTAtXHRkZWZhdWx0IHlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTU4LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXCYjMzQ7XG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUl9JTlRST1NQRUNUX1BPTElDWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02Mi1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzAtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjcxOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFRcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzItICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHBvbGljeSBoYXNoIGludHJvc3BlY3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MzogICAgICAgZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTc0LSAgICAgICBkZWZhdWx0IHlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTgzLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7QWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NjpcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JfSU5UUk9TUEVDVF9QT0xJQ1lcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODctXHRzZWxlY3QgWlNURF9DT01QUkVTU1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTUtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9DT01QUkVTU0VEX1BPTElDWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cdGJvb2wgXCYjMzQ7QWxsb3cgbG9hZGluZyBwb2xpY3kgaW4gYSBjb21wcmVzc2VkIGZvcm1hdFwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo5ODpcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTktXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEwODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfUEFSQU5PSURfTE9BRFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O1BlcmZvcm0gZnVsbCB2ZXJpZmljYXRpb24gb2YgbG9hZGVkIHBvbGljeVwmIzM0O1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMTA6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTExMS1cdGRlZmF1bHQgeVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTE4LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMTk6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0tVTklUX1RFU1RcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTIwLVx0dHJpc3RhdGUgXCYjMzQ7QnVpbGQgS1VuaXQgdGVzdHMgZm9yIHBvbGljeV91bnBhY2suY1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEyMTpcdGRlcGVuZHMgb24gS1VOSVQgXHUwMDI2XHUwMDI2IFNFQ1VSSVRZX0FQUEFSTU9SXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEyMi1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtMy0jXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUikgJiM0Mzs9IGFwcGFybW9yLm9cbnNlY3VyaXR5L2FwcGFybW9yL01ha2VmaWxlLTUtXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZT02PWFwcGFybW9yLXkgOj0gYXBwYXJtb3Jmcy5vIGF1ZGl0Lm8gY2FwYWJpbGl0eS5vIHRhc2subyBpcGMubyBsaWIubyBtYXRjaC5vIFxcXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtOS0gICAgICAgICAgICAgIHBvbGljeV9jb21wYXQubyBhZl91bml4Lm8gYWZfaW5ldC5vXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZToxMDphcHBhcm1vci0kKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIKSAmIzQzOz0gY3J5cHRvLm9cbnNlY3VyaXR5L2FwcGFybW9yL01ha2VmaWxlLTExLVxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0tVTklUX1RFU1QpICYjNDM7PSBhcHBhcm1vcl9wb2xpY3lfdW5wYWNrX3Rlc3Qub1xuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtMTMtYXBwYXJtb3JfcG9saWN5X3VucGFja190ZXN0LW9ianMgJiM0Mzs9IHBvbGljeV91bnBhY2tfdGVzdC5vXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jPTc1PXN0cnVjdCByYXdkYXRhX2ZfZGF0YSB7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTc5LVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjgwOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTgxLVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYz0xNzI9c3RhdGljIHN0cnVjdCBhYV9wcm94eSAqZ2V0X3Byb3h5X2NvbW1vbl9yZWYoc3RydWN0IGFhX2NvbW1vbl9yZWYgKnJlZilcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTc5LVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE4MDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xODEtc3RhdGljIHN0cnVjdCBhYV9sb2FkZGF0YSAqZ2V0X2xvYWRkYXRhX2NvbW1vbl9yZWYoc3RydWN0IGFhX2NvbW1vbl9yZWYgKnJlZilcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9NDU5PXN0YXRpYyBzdHJ1Y3QgYWFfbG9hZGRhdGEgKmFhX3NpbXBsZV93cml0ZV90b19idWZmZXIoY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTQ4Ni1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzo0ODc6I2lmIGRlZmluZWQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZKSB8fCBcXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjQ4ODogICAgZGVmaW5lZChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWSlcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy00ODktc3RhdGljIGludCBkZWNvbXByZXNzX3pzdGQoY2hhciAqc3JjLCBzaXplX3Qgc2xlbiwgY2hhciAqZHN0LCBzaXplX3QgZGxlbilcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTI1LVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjUyNjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTI3LS8qKlxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYz01ODk9c3RhdGljIHN0cnVjdCBhYV9sb2FkZGF0YSAqYWFfZ2V0X2RhdGFfZnJvbV9jb21wcmVzc2VkKGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmIF9fYWx3YXlzX3VudXNlZCxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTk1LX1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzo1OTY6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9DT01QUkVTU0VEX1BPTElDWSAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTU5Ny1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTQ3MD1TRVFfTlNfRk9QUyhuYW1lKTtcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xNDcxLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE0NzI6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTQ3My1zdGF0aWMgaW50IHNlcV9uc19jb21wcmVzc19taW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTY2NT1pbnQgX19hYV9mc19jcmVhdGVfcmF3ZGF0YShzdHJ1Y3QgYWFfbnMgKm5zLCBzdHJ1Y3QgYWFfbG9hZGRhdGEgKnJhd2RhdGEpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE3MzMtfVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE3MzQ6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZICovXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTczNS1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTc4OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY3JlYXRlX3Byb2ZpbGVfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE3OTQtXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM6MTc5NTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xNzk2LXN0YXRpYyBpbnQgcHJvZmlsZV9kZXB0aChzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTk0Mz1pbnQgX19hYV9jcmVhdGVfcmF3ZGF0YV9zeW1saW5rX2RlbnRzKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xOTc5LVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE5ODA6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZICovXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTk4MS1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MjYyMz1zdGF0aWMgc3RydWN0IGFhX3Nmc19lbnRyeSBhYV9zZnNfZW50cnlfcG9saWN5W10gPSB7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTI2MzItXHRBQV9TRlNfRElSKFwmIzM0O3VuY29uZmluZWRfcmVzdHJpY3Rpb25zXCYjMzQ7LCAgIGFhX3Nmc19lbnRyeV91bmNvbmZpbmVkKSxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzoyNjMzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfQ09NUFJFU1NFRF9QT0xJQ1lcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0yNjM0LVx0QUFfU0ZTX0ZJTEVfQk9PTEVBTihcJiMzNDtjb21wcmVzc2VkX2xvYWRcJiMzNDssXHQxKSxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MjY5ND1zdGF0aWMgc3RydWN0IGFhX3Nmc19lbnRyeSBhYV9zZnNfZW50cnlfYXBwYXJtb3JbXSA9IHtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMjcwMC1cdEFBX1NGU19GSUxFX0ZPUFMoXCYjMzQ7cHJvZmlsZXNcJiMzNDssIDA0NDQsIFx1MDAyNmFhX3Nmc19wcm9maWxlc19mb3BzKSxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzoyNzAxOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTI3MDItXHRBQV9TRlNfRklMRV9GT1BTKFwmIzM0O3Jhd19kYXRhX2NvbXByZXNzaW9uX2xldmVsX21pblwmIzM0OywgMDQ0NCwgXHUwMDI2c2VxX25zX2NvbXByZXNzX21pbl9mb3BzKSxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yLmg9NTY9ZXh0ZXJuIHVuc2lnbmVkIGludCBhYV9nX3BhdGhfbWF4O1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oLTU3LVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oOjU4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oLTU5LSNkZWZpbmUgQUFfTUlOX0NMRVZFTCB6c3RkX21pbl9jbGV2ZWwoKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaC02NS0jZGVmaW5lIEFBX0RFRkFVTFRfQ0xFVkVMIDBcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaDo2NjojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkgKi9cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaC02Ny1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yZnMuaD0xMjE9c3RydWN0IGFhX2xvYWRkYXRhO1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmgtMTIyLVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmg6MTIzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmgtMTI0LXZvaWQgX19hYV9mc19yZW1vdmVfcmF3ZGF0YShzdHJ1Y3QgYWFfbG9hZGRhdGEgKnJhd2RhdGEpO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oPTE0NT1zdGF0aWMgaW5saW5lIGludCBfX2FhX2NyZWF0ZV9yYXdkYXRhX3N5bWxpbmtfZGVudHMoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmgtMTQ4LX1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oOjE0OTojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkgKi9cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oLTE1MC1cbi0tXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2NyeXB0by5oLTE0LVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9jcnlwdG8uaDoxNTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvY3J5cHRvLmgtMTYtaW50IGluaXRfcHJvZmlsZV9oYXNoKHZvaWQpO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbGliLmg9NDg9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9saWIuaC02Mi1cdH0gd2hpbGUgKDApXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2xpYi5oOjYzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9saWIuaC02NC0jZGVmaW5lIEFBX0JVR19GTVQoWCwgZm10LCBhcmdzLi4uKVx0XHRcdFx0XHRcXFxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jPTE5Mjk9bW9kdWxlX3BhcmFtX2NhbGwobW9kZSwgcGFyYW1fc2V0X21vZGUsIHBhcmFtX2dldF9tb2RlLFxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzItLyogd2hldGhlciBwb2xpY3kgdmVyaWZpY2F0aW9uIGhhc2hpbmcgaXMgZW5hYmxlZCAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTkzMzpib29sIGFhX2dfaGFzaF9wb2xpY3kgPSBJU19FTkFCTEVEKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFQpO1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTkzNDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzUtbW9kdWxlX3BhcmFtX25hbWVkKGhhc2hfcG9saWN5LCBhYV9nX2hhc2hfcG9saWN5LCBhYWJvb2wsIFNfSVJVU1IgfCBTX0lXVVNSKTtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xOTM4LS8qIHdoZXRoZXIgcG9saWN5IGV4YWN0bHkgYXMgbG9hZGVkIGlzIHJldGFpbmVkIGZvciBkZWJ1ZyBhbmQgY2hlY2twb2ludGluZyAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTkzOTpib29sIGFhX2dfZXhwb3J0X2JpbmFyeSA9IElTX0VOQUJMRUQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkpO1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTk0MDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5NDEtbW9kdWxlX3BhcmFtX25hbWVkKGV4cG9ydF9iaW5hcnksIGFhX2dfZXhwb3J0X2JpbmFyeSwgYWFib29sLCAwNjAwKTtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz0xOTgwPW1vZHVsZV9wYXJhbV9uYW1lZChwYXRoX21heCwgYWFfZ19wYXRoX21heCwgYWF1aW50LCBTX0lSVVNSKTtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xOTg2LSAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTk4Nzpib29sIGFhX2dfcGFyYW5vaWRfbG9hZCA9IElTX0VOQUJMRUQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX1BBUkFOT0lEX0xPQUQpO1xuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTk4OC1tb2R1bGVfcGFyYW1fbmFtZWQocGFyYW5vaWRfbG9hZCwgYWFfZ19wYXJhbm9pZF9sb2FkLCBhYWJvb2wsIFNfSVJVR08pO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jPTI2Mjk9REVGSU5FX0xTTShhcHBhcm1vcikgPSB7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMjYzOC0jZW5kaWZcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjI2Mzk6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0yNjQwLVx0LmluaXRjYWxsX2xhdGUgPSBpbml0X3Byb2ZpbGVfaGFzaCxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmM9MTYxOT1zdGF0aWMgaW50IGNvbXByZXNzX3pzdGQoY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2xlbiwgY2hhciAqKmRzdCwgc2l6ZV90ICpkbGVuKVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jLTE2MjAte1xuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jOjE2MjE6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmMtMTYyMi1cdGNvbnN0IHpzdGRfcGFyYW1ldGVycyBwYXJhbXMgPVxuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jPTEwMjU9aW50IGNhcF9pbm9kZV9zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTAzMC1cdC8qIElnbm9yZSBub24tc2VjdXJpdHkgeGF0dHJzICovXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDMxOlx0aWYgKHN0cm5jbXAobmFtZSwgWEFUVFJfU0VDVVJJVFlfUFJFRklYLFxuc2VjdXJpdHkvY29tbW9uY2FwLmM6MTAzMjpcdFx0XHRYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOKSAhPSAwKVxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTAzMy1cdFx0cmV0dXJuIDA7XG4tLVxuc2VjdXJpdHkvY29tbW9uY2FwLmM9MTA2Nj1pbnQgY2FwX2lub2RlX3JlbW92ZXhhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTEwNzEtXHQvKiBJZ25vcmUgbm9uLXNlY3VyaXR5IHhhdHRycyAqL1xuc2VjdXJpdHkvY29tbW9uY2FwLmM6MTA3MjpcdGlmIChzdHJuY21wKG5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jOjEwNzM6XHRcdFx0WEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTikgIT0gMClcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTEwNzQtXHRcdHJldHVybiAwO1xuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jPTE0Njk9aW50IGNhcF9tbWFwX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE0ODItXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNDgzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE0ODQtXG4tLVxuc2VjdXJpdHkvY29tbW9uY2FwLmM9MTUxNz1ERUZJTkVfTFNNKGNhcGFiaWxpdHkpID0ge1xuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE1MjItXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNTIzOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFkgKi9cbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE1MjQtXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNTI1OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQ09NTU9OQ0FQX0tVTklUX1RFU1RcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE1MjYtI2luY2x1ZGUgXCYjMzQ7Y29tbW9uY2FwX3Rlc3QuY1wmIzM0O1xuLS1cbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmMtMTctXG5zZWN1cml0eS9jb21tb25jYXBfdGVzdC5jOjE4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQ09NTU9OQ0FQX0tVTklUX1RFU1RcbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmMtMTktXG4tLVxuc2VjdXJpdHkvY29tbW9uY2FwX3Rlc3QuYz0yODY9TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmMtMjg3LVxuc2VjdXJpdHkvY29tbW9uY2FwX3Rlc3QuYzoyODg6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVCAqL1xuLS1cbnNlY3VyaXR5L2lub2RlLmM9NDI9c3RhdGljIGludCBzZWN1cml0eWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbnNlY3VyaXR5L2lub2RlLmMtNDYtXG5zZWN1cml0eS9pbm9kZS5jOjQ3Olx0ZXJyb3IgPSBzaW1wbGVfZmlsbF9zdXBlcihzYiwgU0VDVVJJVFlGU19NQUdJQywgZmlsZXMpO1xuc2VjdXJpdHkvaW5vZGUuYy00OC1cdGlmIChlcnJvcilcbi0tXG5zZWN1cml0eS9pbm9kZS5jPTMwOD1FWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eWZzX3JlbW92ZSk7XG5zZWN1cml0eS9pbm9kZS5jLTMwOS1cbnNlY3VyaXR5L2lub2RlLmM6MzEwOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlcbnNlY3VyaXR5L2lub2RlLmMtMzExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2Vcbi0tXG5zZWN1cml0eS9pbm9kZS5jPTM2Mj1pbnQgX19pbml0IHNlY3VyaXR5ZnNfaW5pdCh2b2lkKVxuLS1cbnNlY3VyaXR5L2lub2RlLmMtMzc0LVx0fVxuc2VjdXJpdHkvaW5vZGUuYzozNzU6I2lmZGVmIENPTkZJR19TRUNVUklUWVxuc2VjdXJpdHkvaW5vZGUuYy0zNzYtXHRsc21fZGVudHJ5ID0gc2VjdXJpdHlmc19jcmVhdGVfZmlsZShcJiMzNDtsc21cJiMzNDssIDA0NDQsIE5VTEwsIE5VTEwsXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L0tjb25maWc9Mz1jb25maWcgSU5URUdSSVRZXG5zZWN1cml0eS9pbnRlZ3JpdHkvS2NvbmZpZy00LVx0Ym9vbCBcJiMzNDtJbnRlZ3JpdHkgc3Vic3lzdGVtXCYjMzQ7XG5zZWN1cml0eS9pbnRlZ3JpdHkvS2NvbmZpZzo1Olx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuc2VjdXJpdHkvaW50ZWdyaXR5L0tjb25maWctNi1cdGRlZmF1bHQgeVxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZz0yPWNvbmZpZyBFVk1cbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fSEFTSF9JTkZPXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc6OTpcdHNlbGVjdCBTRUNVUklUWV9QQVRIXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMTAtXHRkZWZhdWx0IG5cbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc9MzE9Y29uZmlnIEVWTV9FWFRSQV9TTUFDS19YQVRUUlNcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7QWRkaXRpb25hbCBTTUFDSyB4YXR0cnNcJiMzNDtcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzozMzpcdGRlcGVuZHMgb24gRVZNIFx1MDAyNlx1MDAyNiBTRUNVUklUWV9TTUFDS1xuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTM0LVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fY3J5cHRvLmM9NDA2PWludCBldm1faW5pdF9obWFjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJzLFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX2NyeXB0by5jLTQyMi1cdFx0XHRpZiAoc3RyY21wKHhhdHRyX2VudHJ5LVx1MDAzZW5hbWUgJiM0MztcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX2NyeXB0by5jOjQyMzpcdFx0XHRcdCAgIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4sIHhhdHRyLVx1MDAzZW5hbWUpICE9IDApXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9jcnlwdG8uYy00MjQtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmM9Mzg9c3RhdGljIHN0cnVjdCB4YXR0cl9saXN0IGV2bV9jb25maWdfZGVmYXVsdF94YXR0cm5hbWVzW10gPSB7XG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTQwLVx0IC5uYW1lID0gWEFUVFJfTkFNRV9TRUxJTlVYLFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jOjQxOlx0IC5lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWClcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy00Mi1cdH0sXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTQ0LVx0IC5uYW1lID0gWEFUVFJfTkFNRV9TTUFDSyxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYzo0NTpcdCAuZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1NFQ1VSSVRZX1NNQUNLKVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTQ2LVx0fSxcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNjAtXHQgLm5hbWUgPSBYQVRUUl9OQU1FX0FQUEFSTU9SLFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jOjYxOlx0IC5lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IpXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNjItXHR9LFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYz0zMjI9c3RhdGljIGludCBldm1fcHJvdGVjdGVkX3hhdHRyX2NvbW1vbihjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSxcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtMzM5LVx0XHRpZiAoc3RybmNtcChyZXFfeGF0dHJfbmFtZSxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYzozNDA6XHRcdFx0ICAgIHhhdHRyLVx1MDAzZW5hbWUgJiM0MzsgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTixcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy0zNDEtXHRcdFx0ICAgIHN0cmxlbihyZXFfeGF0dHJfbmFtZSkpID09IDApIHtcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9zZWNmcy5jPTE4NT1zdGF0aWMgc3NpemVfdCBldm1fd3JpdGVfeGF0dHJzKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX3NlY2ZzLmMtMjQyLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fc2VjZnMuYzoyNDM6XHRpZiAoc3RybmNtcCh4YXR0ci1cdTAwM2VuYW1lLCBYQVRUUl9TRUNVUklUWV9QUkVGSVgsXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9zZWNmcy5jOjI0NDpcdFx0ICAgIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4pICE9IDApIHtcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX3NlY2ZzLmMtMjQ1LVx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZz00PWNvbmZpZyBJTUFcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy01LVx0Ym9vbCBcJiMzNDtJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSlcJiMzNDtcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZzo2Olx0c2VsZWN0IFNFQ1VSSVRZRlNcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy03LVx0c2VsZWN0IENSWVBUT1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fSEFTSF9JTkZPXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWc6MTE6XHRzZWxlY3QgU0VDVVJJVFlfUEFUSFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnLTEyLVx0c2VsZWN0IFRDR19UUE0gaWYgSEFTX0lPTUVNXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnPTU2PWNvbmZpZyBJTUFfTFNNX1JVTEVTXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctNTctXHRib29sXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIEFVRElUIFx1MDAyNlx1MDAyNiAoU0VDVVJJVFlfU0VMSU5VWCB8fCBTRUNVUklUWV9TTUFDSyB8fCBTRUNVUklUWV9BUFBBUk1PUilcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy01OS1cdGRlZmF1bHQgeVxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jPTE1Mj1zdGF0aWMgc3RydWN0IGltYV9ydWxlX2VudHJ5IGRvbnRfbWVhc3VyZV9ydWxlc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYy0xNTktXHR7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwgLmZzbWFnaWMgPSBCSU5GTVRGU19NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmM6MTYwOlx0ey5hY3Rpb24gPSBET05UX01FQVNVUkUsIC5mc21hZ2ljID0gU0VDVVJJVFlGU19NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMTYxLVx0ey5hY3Rpb24gPSBET05UX01FQVNVUkUsIC5mc21hZ2ljID0gU0VMSU5VWF9NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jPTE5OT1zdGF0aWMgc3RydWN0IGltYV9ydWxlX2VudHJ5IGRlZmF1bHRfYXBwcmFpc2VfcnVsZXNbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMjA2LVx0ey5hY3Rpb24gPSBET05UX0FQUFJBSVNFLCAuZnNtYWdpYyA9IEJJTkZNVEZTX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYzoyMDc6XHR7LmFjdGlvbiA9IERPTlRfQVBQUkFJU0UsIC5mc21hZ2ljID0gU0VDVVJJVFlGU19NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMjA4LVx0ey5hY3Rpb24gPSBET05UX0FQUFJBSVNFLCAuZnNtYWdpYyA9IFNFTElOVVhfTUFHSUMsIC5mbGFncyA9IElNQV9GU01BR0lDfSxcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvcGxhdGZvcm1fY2VydHMvbG9hZF91ZWZpLmM9MTYwPXN0YXRpYyBpbnQgX19pbml0IGxvYWRfdWVmaV9jZXJ0cyh2b2lkKVxuc2VjdXJpdHkvaW50ZWdyaXR5L3BsYXRmb3JtX2NlcnRzL2xvYWRfdWVmaS5jLTE2MS17XG5zZWN1cml0eS9pbnRlZ3JpdHkvcGxhdGZvcm1fY2VydHMvbG9hZF91ZWZpLmM6MTYyOlx0ZWZpX2d1aWRfdCBzZWN1cmVfdmFyID0gRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFX0dVSUQ7XG5zZWN1cml0eS9pbnRlZ3JpdHkvcGxhdGZvcm1fY2VydHMvbG9hZF91ZWZpLmMtMTYzLVx0ZWZpX2d1aWRfdCBtb2tfdmFyID0gRUZJX1NISU1fTE9DS19HVUlEO1xuLS1cbnNlY3VyaXR5L2lwZS9LY29uZmlnLTUtXG5zZWN1cml0eS9pcGUvS2NvbmZpZzo2Om1lbnVjb25maWcgU0VDVVJJVFlfSVBFXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtJbnRlZ3JpdHkgUG9saWN5IEVuZm9yY2VtZW50IChJUEUpXCYjMzQ7XG5zZWN1cml0eS9pcGUvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBTRUNVUklUWSBcdTAwMjZcdTAwMjYgU0VDVVJJVFlGUyBcdTAwMjZcdTAwMjYgQVVESVQgXHUwMDI2XHUwMDI2IEFVRElUU1lTQ0FMTFxuc2VjdXJpdHkvaXBlL0tjb25maWctOS1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuLS1cbnNlY3VyaXR5L2lwZS9LY29uZmlnLTIzLVxuc2VjdXJpdHkvaXBlL0tjb25maWc6MjQ6aWYgU0VDVVJJVFlfSVBFXG5zZWN1cml0eS9pcGUvS2NvbmZpZy0yNS1jb25maWcgSVBFX0JPT1RfUE9MSUNZXG4tLVxuc2VjdXJpdHkvaXBlL0tjb25maWc9OTg9ZW5kbWVudVxuc2VjdXJpdHkvaXBlL0tjb25maWctOTktXG5zZWN1cml0eS9pcGUvS2NvbmZpZzoxMDA6Y29uZmlnIFNFQ1VSSVRZX0lQRV9LVU5JVF9URVNUXG5zZWN1cml0eS9pcGUvS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBJUEVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2lwZS9NYWtlZmlsZT0xMz0kKG9iaikvYm9vdF9wb2xpY3kuYzogc2NyaXB0cy9pcGUvcG9sZ2VuL3BvbGdlbiAkKENPTkZJR19JUEVfQk9PVF9QT0xJQ1kpIEZPUkNFXG4tLVxuc2VjdXJpdHkvaXBlL01ha2VmaWxlLTE1LVxuc2VjdXJpdHkvaXBlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19TRUNVUklUWV9JUEUpICYjNDM7PSBcXFxuc2VjdXJpdHkvaXBlL01ha2VmaWxlLTE3LVx0Ym9vdF9wb2xpY3kubyBcXFxuLS1cbnNlY3VyaXR5L2lwZS9NYWtlZmlsZT0yOD1jbGVhbi1maWxlcyA6PSBib290X3BvbGljeS5jIFxcXG5zZWN1cml0eS9pcGUvTWFrZWZpbGUtMjktXG5zZWN1cml0eS9pcGUvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX0lQRV9LVU5JVF9URVNUKSAmIzQzOz0gXFxcbnNlY3VyaXR5L2lwZS9NYWtlZmlsZS0zMS1cdHBvbGljeV90ZXN0cy5vIFxcXG4tLVxuc2VjdXJpdHkva2V5cy9jb21wYXQuYz0xNz1DT01QQVRfU1lTQ0FMTF9ERUZJTkU1KGtleWN0bCwgdTMyLCBvcHRpb24sXG4tLVxuc2VjdXJpdHkva2V5cy9jb21wYXQuYy03My1cbnNlY3VyaXR5L2tleXMvY29tcGF0LmM6NzQ6XHRjYXNlIEtFWUNUTF9HRVRfU0VDVVJJVFk6XG5zZWN1cml0eS9rZXlzL2NvbXBhdC5jLTc1LVx0XHRyZXR1cm4ga2V5Y3RsX2dldF9zZWN1cml0eShhcmcyLCBjb21wYXRfcHRyKGFyZzMpLCBhcmc0KTtcbi0tXG5zZWN1cml0eS9rZXlzL2tleWN0bC5jPTE4ODY9U1lTQ0FMTF9ERUZJTkU1KGtleWN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXG4tLVxuc2VjdXJpdHkva2V5cy9rZXljdGwuYy0xOTYxLVxuc2VjdXJpdHkva2V5cy9rZXljdGwuYzoxOTYyOlx0Y2FzZSBLRVlDVExfR0VUX1NFQ1VSSVRZOlxuc2VjdXJpdHkva2V5cy9rZXljdGwuYy0xOTYzLVx0XHRyZXR1cm4ga2V5Y3RsX2dldF9zZWN1cml0eSgoa2V5X3NlcmlhbF90KSBhcmcyLFxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrLy5rdW5pdGNvbmZpZz0zPUNPTkZJR19ORVQ9eVxuc2VjdXJpdHkvbGFuZGxvY2svLmt1bml0Y29uZmlnOjQ6Q09ORklHX1NFQ1VSSVRZPXlcbnNlY3VyaXR5L2xhbmRsb2NrLy5rdW5pdGNvbmZpZzo1OkNPTkZJR19TRUNVUklUWV9MQU5ETE9DSz15XG5zZWN1cml0eS9sYW5kbG9jay8ua3VuaXRjb25maWc6NjpDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tfS1VOSVRfVEVTVD15XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy0yLVxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzozOmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy00LVx0Ym9vbCBcJiMzNDtMYW5kbG9jayBzdXBwb3J0XCYjMzQ7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDgxNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2VjdXJpdHkgQ29udGV4dCBVcGRhdGVzIGluIHRoZSBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgZ2l2ZW4gaXQmIzM5O3MgY29tcGlsZWQgdW5kZXIgYENPTkZJR19TRUNVUklUWWAuIEkmIzM5O20gYWxzbyBnb2luZyB0byBub3RlIHRoZSBkZXBlbmRlbmNpZXMsIGxpa2UgYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2Agd2hpY2ggcmVsaWVzIG9uIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAsIGFuZCBgc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNgIG9uIGBDT05GSUdfU0VDVVJJVFlfU01BQ0tgLiBUaGUgVkZTIGNvcmUgZnVuY3Rpb24gYGZzL25hbWVpLmNgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9ucy4gQWxzbywgdGhlcmUmIzM5O3MgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AgYW5kIGBDT05GSUdfQ0FDSEVGSUxFU2AsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyB0b3VjaGVkIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCBhbmQgYGZzL25hbWVpLmNgLCBhbmQgbm90ZSB3aGljaCBzeW1ib2xzIGFyZSBiZWluZyBtb2RpZmllZCBvciBhcmUgZGlyZWN0IGVudHJ5IHBvaW50cyBmb3IgdGhpcyBwYXRjaC4KCkkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBgZnMvbmFtZWkuY2A6IGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGBtYXlfb19jcmVhdGVgLCBgdmZzX21rbm9kYCwgYHZmc19ta2RpcmAsIGB2ZnNfc3ltbGlua2AsIGB2ZnNfbGlua2AsIGBpbm9kZV9wZXJtaXNzaW9uYCwgYW5kIGBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlY2AuIEluIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXJgIGlzIHJlbGV2YW50LiBPZiBjb3Vyc2UsIGBzZWN1cml0eS9zZWN1cml0eS5jYCBoYXMgdGhlc2Ugc2VjdXJpdHkgaG9va3M6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYC4gVGhlIFNFTGludXggaW1wbGVtZW50YXRpb25zIGFyZTogYHNlbGludXhfaW5vZGVfY3JlYXRlYCwgYHNlbGludXhfaW5vZGVfbGlua2AsIGBzZWxpbnV4X2lub2RlX3N5bWxpbmtgLCBgc2VsaW51eF9pbm9kZV9ta2RpcmAsIGBzZWxpbnV4X2lub2RlX21rbm9kYCwgYW5kIGBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb25gLiBBbmQgZm9yIFNNQUNLOiBgc21hY2tfaW5vZGVfbGlua2AgYW5kIGBzbWFja19pbm9kZV9wZXJtaXNzaW9uYC4KCk9rYXksIG5leHQgSSBuZWVkIHRvIGFwcGx5IFNlY3Rpb24gNDogRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0byBBVk9JRCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IGlzICphY3R1YWxseSogdWJpcXVpdG91cy4gQ2xlYXJseSBgaW5vZGVfcGVybWlzc2lvbmAgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBhcmUgY2FsbGVkICpldmVyeXdoZXJlKiBkdXJpbmcgcGF0aCBsb29rdXAgb3IgZmlsZSBhY2Nlc3MsIHNvIHRoZXkmIzM5O3JlIHByb2JhYmx5IG91dC4gTGlzdGluZyB0aGVtIHdvdWxkIGRpbHV0ZSB0aGUgY292ZXJhZ2UsIGJ1dCB3aGF0IGFib3V0IHRoZSBzcGVjaWZpYyBob29rcyBsaWtlIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGV0Yy4/IFNhbWUgcXVlc3Rpb24gZm9yIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCB0aGUgVkZTIGZ1bmN0aW9ucyBsaWtlIGB2ZnNfbWtkaXJgLCBgdmZzX3N5bWxpbmtgLCBldGMuCgpXYWl0IGEgc2Vjb25kLiBUaGUgKnNwZWNpZmljKiBMU00gaG9vayBlbnRyeSBwb2ludHMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMsIHRvIHRha2UgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCwgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gU28sIEkgbmVlZCB0byBjaGVjayB0aG9zZTogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGFuZCBzbyBvbiwgYXJlIGdvb2QuIEFuZCBhbHNvOiBgc2VsaW51eF9pbm9kZV9jcmVhdGVgLCBgc2VsaW51eF9pbm9kZV9saW5rYCwgYHNlbGludXhfaW5vZGVfc3ltbGlua2AsIGBzZWxpbnV4X2lub2RlX21rZGlyYCwgYHNlbGludXhfaW5vZGVfbWtub2RgLCBgc21hY2tfaW5vZGVfbGlua2AuIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfU0VDVVJJVFlgLCBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgLCBgQ09ORklHX1NFQ1VSSVRZX1NNQUNLYCwgYW5kIGBDT05GSUdfQ0FDSEVGSUxFU2AuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGBCUEZfTFNNYCBhcmUgcmVsZXZhbnQgaGVyZSwgc2luY2UgdGhlcmUgd2VyZSB1cGRhdGVzIHRvIHRoZSBCUEYgTFNNIHNlbGZ0ZXN0cy4gVGltZSB0byBjaGVjayBgQlBGX0xTTWAgaW4gYEtjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjQ4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkxvY2F0aW5nIHRoZSBCUEZfTFNNIERlZmluaXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYEJQRl9MU01gLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBoYXZlIGEgZmVlbGluZyBJJiMzOTtsbCBiZSBpbiBmb3IgYSBkZWVwIGRpdmUsIGdpdmVuIGl0cyBzaWduaWZpY2FuY2UgaW4gdGhlIExpbnV4IFNlY3VyaXR5IE1vZHVsZSAoTFNNKSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaGVhZGVycyBvciBzb3VyY2UgZmlsZXMgaG9sZCB0aGlzIGNvbnN0YW50LiBJdCYjMzk7cyBsaWtlbHkgaW4gYSBoZWFkZXIgZmlsZSwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBwcm9iYWJseSB1c2VkIGFjcm9zcyBtdWx0aXBsZSBwYXJ0cyBvZiB0aGUga2VybmVsIG9yIHJlbGF0ZWQgdG9vbHMuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGluY2x1ZGUgcGF0aHMsIGFuZCB0aGVuIG5hcnJvdyBkb3duIG15IHNlYXJjaCB0byBsaWtlbHkgc3BvdHMgbGlrZSB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBvciBMU00tc3BlY2lmaWMgZGlyZWN0b3JpZXMuIEkmIzM5O2xsIHV0aWxpemUgbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwmIzM5O3Mgc291cmNlIGxheW91dCB0byBlZmZpY2llbnRseSBwaW5wb2ludCB3aGVyZSB0aGlzIGNvbnN0YW50IGlzIGRlY2xhcmVkLiBJIG1heSBldmVuIHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3Igc2ltaWxhciBjb21tYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfTFNNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEJQRiBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA5Mi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBzZXQgdXAgYW5kIHBlcmhhcHMgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgYXJlYXMgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24gd2l0aGluIHRoZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdHNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xuICA5MTpcdFxuICA5MjpcdGNvbmZpZyBCUEZfTFNNXG4gIDkzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuICA5NDpcdFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG4gIDk1Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gIDk2Olx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gIDk3Olx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAgOTg6XHRcdGhlbHBcbiAgOTk6XHRcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxuIDEwMDpcdFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxuIDEwMTpcdFxuIDEwMjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuIDEwMzpcdFxuIDEwNDpcdGVuZG1lbnUgIyBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzIxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQmIzM5O3MgY29taW5nIGRpcmVjdGx5IGZyb20gbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENhY2hlZmlsZXMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGZzL2NhY2hlZmlsZXMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBDQUNIRUZJTEVTYCwgc3BlY2lmaWNhbGx5LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgaW4gdGhpcyBhcmVhIHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGNhY2hlZmlsZXMgYXJlIGRlZmluZWQuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBgQ0FDSEVGSUxFU2AgaXMgbWFuYWdlZCBhbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBjb250aW5nZW50IG9uIGl0LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgYWRkcmVzc2luZyB3aGF0ZXZlciB0aGUgY3VycmVudCBwcm9ibGVtIGlzLiBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb25maWd1cmF0aW9uIGNoYW5nZXMgSSBtaWdodCBjb25zaWRlci4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FDSEVGSUxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NhY2hlZmlsZXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjM6Y29uZmlnIENBQ0hFRklMRVNcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7RmlsZXN5c3RlbSBjYWNoaW5nIG9uIGZpbGVzXCYjMzQ7XG4tLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTEzLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjE0OmNvbmZpZyBDQUNIRUZJTEVTX0RFQlVHXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0RlYnVnIENhY2hlRmlsZXNcJiMzNDtcbi0tXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjItXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjQtXHRib29sIFwmIzM0O1Byb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzA3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBTZWN1cml0eSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFNFTGludXggYW5kIFNNQUNLIHNlY3VyaXR5IG1vZHVsZXMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCB0aGUgYHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZ2AgZmlsZSBhbmQgdGhlIGBzZWN1cml0eS9zbWFjay9LY29uZmlnYCBmaWxlLiBUaG9zZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgY29uZmlndXJpbmcgZWFjaCBzZWN1cml0eSBtb2R1bGUuIFRoZXkgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBob3cgdGhleSYjMzk7cmUgc3RydWN0dXJlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGF0IHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhpcyBhdCB0aGUgS2NvbmZpZyBsZXZlbCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgYWN0dWFsIGNvZGUgb3IgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiB3b3JrLiBUaW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U0VMaW51eCBBVkMgU3RhdGlzdGljc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFNNQUNLIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgc2VjdXJpdHkvc21hY2svS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4IChTTUFDSykgd2l0aGluIHRoZSBrZXJuZWwgYXJlIGRlZmluZWQsIGFuZCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgb3B0aW9ucywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIFNNQUNLJiMzOTtzIGluY2x1c2lvbiBvciBleGNsdXNpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCB0aGVpciBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIHBlcmhhcHMgcmVsYXRlZCB0byBvdGhlciBzZWN1cml0eSBtb2R1bGVzIG9yIGZlYXR1cmVzPyBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBTTUFDSyBvbiBhIHN5c3RlbSwgYW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGltcGFjdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VDVVJJVFlfU01BQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9zbWFjay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc21hY2svS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TTUFDS1xuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtTaW1wbGlmaWVkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBLZXJuZWwgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTUtXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9TTUFDS19CUklOR1VQXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTE3LVx0Ym9vbCBcJiMzNDtSZXBvcnRpbmcgb24gYWNjZXNzIGdyYW50ZWQgYnkgU21hY2sgcnVsZXNcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMzLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzozNDpjb25maWcgU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtQYWNrZXQgbWFya2luZyB1c2luZyBzZWNtYXJrcyBmb3IgbmV0ZmlsdGVyXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy00NC1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6NDU6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0FQUEVORF9TSUdOQUxTXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtUcmVhdCBkZWxpdmVyaW5nIHNpZ25hbHMgYXMgYW4gYXBwZW5kIG9wZXJhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODkxNgoJCQkJCQkJb3V0cHV0OiAyNzQKCQkJCQkJCXRob3VnaHRzOiA4NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIFNlY3VyaXR5IExTTSBIb29rIFVwZGF0ZXMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgYW5kIHplcm8gaW4gb24gd2hhdCYjMzk7cyByZWxldmFudCBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGNoYW5nZXMgdGhhdCBtYWlubHkgaW52b2x2ZSBwYXNzaW5nIGFuIGBpZG1hcGAgc3RydWN0IHRvIHZhcmlvdXMgc2VjdXJpdHktcmVsYXRlZCBmdW5jdGlvbnMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIHdoZXJlIGBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcmAgbm93IHVzZXMgYHNlY3VyaXR5X2lub2RlX21rZGlyYCBhbmQgYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAuIFRoZW4sIGEgZ29vZCBjaHVuayBvZiBgZnMvbmFtZWkuY2AgaGFzIGJlZW4gdXBkYXRlZDsgYGlub2RlX3Blcm1pc3Npb25gLCBgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWNgLCBgdmZzX2NyZWF0ZWAsIGB2ZnNfbWtvYmpgLCBgbWF5X29fY3JlYXRlYCwgYHZmc19ta25vZGAsIGB2ZnNfbWtkaXJgLCBgdmZzX3N5bWxpbmtgLCBhbmQgYHZmc19saW5rYCBhbGwgbm93IHBhc3MgYGlkbWFwYCB0byB0aGVpciByZXNwZWN0aXZlIHNlY3VyaXR5IGZ1bmN0aW9ucy4gIFRoZSBjb3JlIEFQSSBzaWduYXR1cmUgdXBkYXRlcyBhcmUgcmVmbGVjdGVkIGluIGBpbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBpbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhgLCBhZGRpbmcgdGhlIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgcGFyYW1ldGVyIHRvIHRoZSByZWxldmFudCBpbm9kZSBob29rcy4gIE9mIGNvdXJzZSwgdGhpcyByaXBwbGVzIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb25zIHdpdGhpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLCBhbmQgYHNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jYCBhcyB0aGV5IGFyZSBub3cgdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyBgaWRtYXBgIHBhcmFtZXRlci4gRmluYWxseSwgdGhlcmUmIzM5O3Mgc29tZSBhY3Rpdml0eSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuCgpHaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBgQ0FDSEVGSUxFU2AsIGFuZCBgQlBGX0xTTWAgaW4gdGhlIGVuYWJsZWQgY29uZmlndXJhdGlvbnMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYWxvbmcgd2l0aCB0aGVpciBTRUxpbnV4IGNvdW50ZXJwYXJ0cyAoYHNlbGludXhfaW5vZGVfKmApIGFuZCBgc21hY2tfaW5vZGVfbGlua2AuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgYGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyYCBhbmQgYHZmc19ta29iamAuCgpNeSBmb2N1cyBpcyB0byBhdm9pZCBjb21tb24sICYjMzQ7dWJpcXVpdG91cyYjMzQ7IGZ1bmN0aW9ucyBsaWtlIGBpbm9kZV9wZXJtaXNzaW9uYCBvciBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAgaWYgdGhleSYjMzk7cmUgY2FsbGVkIGV2ZXJ5d2hlcmUuICBJbnN0ZWFkLCBJIHdhbnQgdG8gdGFyZ2V0IHRoZSBtb3JlIHNwZWNpZmljIGlub2RlIGhvb2sgZnVuY3Rpb25zLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gY3JlYXRpbmcsIGxpbmtpbmcsIHN5bWxpbmtpbmcsIG1ha2luZyBkaXJlY3RvcmllcywgYW5kIG1ha2luZyBub2Rlcy4gVGhvc2Ugc2hvdWxkIG9mZmVyIG1vcmUgdGFyZ2V0ZWQgZnV6emluZyBvcHBvcnR1bml0aWVzLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzbWFja19pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O2NhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyJiMzNDssCiAgICAmIzM0O3Zmc19ta29iaiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIExTTSBpbm9kZSBob29rIGludGVyZmFjZXMgKGlub2RlX2NyZWF0ZSwgaW5vZGVfbGluaywgaW5vZGVfc3ltbGluaywgaW5vZGVfbWtkaXIsIGlub2RlX21rbm9kLCBpbm9kZV9wZXJtaXNzaW9uKSBhbmQgdGhlaXIgY2FsbGVycyBhY3Jvc3MgdGhlIFZGUyBsYXllciwgQ2FjaGVGaWxlcywgU0VMaW51eCwgYW5kIFNtYWNrIHRvIHBhc3MgdGhlIG1vdW50IGlkbWFwIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgYWx0ZXJzIGNvcmUgVkZTIGFuZCBMU00gaW50ZXJhY3Rpb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQgdG8gZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9zeW1saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX21rZGlyJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX21rbm9kJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlbGludXhfaW5vZGVfbGluayYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VsaW51eF9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2lub2RlX21rbm9kJiMzNDssCiAgICAmIzM0O3NtYWNrX2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7Y2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXImIzM0OywKICAgICYjMzQ7dmZzX21rb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgTFNNIGlub2RlIGhvb2sgaW50ZXJmYWNlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBjYWxsZXJzIGFjcm9zcyB0aGUgVkZTIGxheWVyLCBDYWNoZUZpbGVzLCBTRUxpbnV4LCBhbmQgU21hY2sgdG8gcGFzcyB0aGUgbW91bnQgaWRtYXAgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBhbHRlcnMgY29yZSBWRlMgYW5kIExTTSBpbnRlcmFjdGlvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCByZWxldmFudCB0byBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBMU00gaW5vZGUgaG9vayBwcm90b3R5cGVzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGludm9jYXRpb25zIGluIHRoZSBWRlMgbGF5ZXIgKGZzL25hbWVpLmMsIGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYykgYW5kIHNlY3VyaXR5IG1vZHVsZXMgdG8gcHJvcGFnYXRlIHRoZSAmIzM5O3N0cnVjdCBtbnRfaWRtYXAgKmlkbWFwJiMzOTsgYXJndW1lbnQsIGFsb25nIHdpdGggYWRkaW5nIEJQRiBMU00gdGVzdCBjYXNlcyBmb3IgdGhlc2UgaG9va3MuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBzaWduYXR1cmUgYW5kIGNhbGxpbmcgY29udmVudGlvbiB1cGRhdGVzIHBhc3NpbmcgYW4gZXhpc3RpbmcgaWRtYXAgcG9pbnRlciB0aHJvdWdoIHRvIHRoZSBMU00gaG9vayBpbmZyYXN0cnVjdHVyZS4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU1ZDBmMjM3YzAyYTNlYTVlOGExMmUxMWYxY2VkMjYxZWIxMTkyM2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDAwOjMxOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0Ci0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKQEAgLTUxLDE0ICYjNDM7NTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKCZhbXA7bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwomIzQzOwlyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKQogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmICh1bmxpa2VseShyZXR2YWwpKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTsKIApAQCAtNjk1LDcgJiM0Mzs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZAogCWlmICh1bmxpa2VseSgoKGlub2RlLSZndDtpX21vZGUgJmFtcDsgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKQogCQlyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAJCXJldHVybiAtRUFDQ0VTOwkvKiBzaG91bGRuJiMzOTt0IGl0IGJlIEVOT1NZUz8gKi8KIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwpAQCAtNDIxMiw3ICYjNDM7NDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAKIAltb2RlICZhbXA7PSBTX0lBTExVR087CiAJbW9kZSB8PSBTX0lGUkVHOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTsKQEAgLTQzMjgsNyAmIzQzOzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwogfQogCiAvKioKQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC01Mzk1LDcgJiM0Mzs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJZ290byBlcnI7CiAKIAltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnI7CiAKQEAgLTU3ODMsNyAmIzQzOzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghZGlyLSZndDtpX29wLSZndDtzeW1saW5rKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTU5MDcsNyAmIzQzOzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgaW50ICp4YXR0cl9jb3VudCkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgY29uc3QgY2hhciAqb2xkX25hbWUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCSBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGJvb2wgcmN1KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJIHN0cnVjdCBpYXR0ciAqYXR0cikKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCQkJc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJCQkgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwKIAkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgICBib29sIHJjdSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spOwogaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtOTAyLDkgJiM0Mzs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCXVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMyw5ICYjNDM7OTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZAogc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsgfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiAwOwogfQpAQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCSAgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQlpbnQgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiAwOwogfQpAQCAtOTc0LDcgJiM0Mzs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTYxNCw2ICYjNDM7MTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkCiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZQpAQCAtMTYyMiwxMiAmIzQzOzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7CiAKQEAgLTE2NDgsNiAmIzQzOzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZQogICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnkKICAqIEBuZXdfZGVudHJ5OiBuZXcgbGluawpAQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKIH0KIAogLyoqCkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmsKICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWUKQEAgLTE2OTAsMTYgJiM0MzsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7CiB9CiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnkKICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGUKQEAgLTE3MDksMTEgJiM0MzsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTsKIApAQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBmaWxlCiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZQpAQCAtMTc0NywxMiAmIzQzOzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiB9CiAKIC8qKgpAQCAtMTgyMyw2ICYjNDM7MTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiBpbm9kZQogICogQG1hc2s6IGFjY2VzcyBtYXNrCiAgKgpAQCAtMTgzNSwxMSAmIzQzOzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgICAgIGludCBtYXNrKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMzA3NCwxMiAmIzQzOzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICZhbXA7YWQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7CiB9CkBAIC0zMDg5LDEyICYjNDM7MzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTsKIH0KQEAgLTMxMDQsNyAmIzQzOzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTsKIH0KQEAgLTMyMzYsMTMgJiM0MzszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsCiAKIC8qKgogICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWQKICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWQKICAqCiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG8KICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpCiB7CiAJaW50IG1hc2s7CiAJdTMyIHBlcm1zOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtMTA4OSwxNCAmIzQzOzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAvKioKICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0CiAgKiBAZGlyOiB1bnVzZWQKICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXN0cnVjdCBzbWFja19rbm93biAqaXNwOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKIAogLyoqCiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKCkKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb24KICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZAogICoKQEAgLTEyMzMsNyAmIzQzOzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKICAqCiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICBpbnQgbWFzaykKIHsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwpAQCAtMSwxOCAmIzQzOzEsMzAgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQogCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuCiAgKi8KIAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7bHNtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xzbV90YWlsY2FsbC5za2VsLmgmIzM0OwogCiBjaGFyICpDTURfQVJHU1tdID0geyYjMzQ7dHJ1ZSYjMzQ7LCBOVUxMfTsKIAomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9BTEwgPSAoMVUgJmx0OyZsdDsgNikgLSAxLAomIzQzO307CiYjNDM7CiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogewogCWludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1czsKQEAgLTMwLDYgJiM0Mzs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZCkKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKJiM0MzsJfSB3aGlsZSAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7CiYjNDM7CWludCBmZCwgc2F2ZWRfZXJybm8gPSAwOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwllbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pCiYjNDM7CQlzYXZlZF9lcnJubyA9IEVJTzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAoc2F2ZWRfZXJybm8pIHsKJiM0MzsJCWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CWludCBsZW47CiYjNDM7CiYjNDM7CWxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy8lZC8lcyYjMzQ7LCBwaWQsIG5hbWUpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbNjRdOwomIzQzOwlwaWRfdCBwaWQsIHdhaXRlZDsKJiM0MzsJaW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1czsKJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAocGlkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSkKJiM0MzsJCQlfZXhpdCgxKTsKJiM0MzsJCXJhaXNlKFNJR1NUT1ApOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJd2FpdGVkID0gd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCBXVU5UUkFDRUQpOwomIzQzOwl9IHdoaWxlICh3YWl0ZWQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwlpZiAod2FpdGVkICE9IHBpZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkgewomIzQzOwkJcGlkID0gLTE7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqLwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3NldGdyb3VwcyYjMzQ7LCAmIzM0O2RlbnkmIzM0OykgJmFtcDsmYW1wOyBlcnJubyAhPSBFTk9FTlQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDt1aWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykgfHwKJiM0MzsJICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDtnaWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkL25zL3VzZXImIzM0OywgcGlkKTsKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgKHNpemVfdClsZW4gJmd0Oz0gc2l6ZW9mKHBhdGgpKSB7CiYjNDM7CQllcnJubyA9IEVPVkVSRkxPVzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJZG8gewomIzQzOwkJCXdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTsKJiM0MzsJCX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CX0KJiM0MzsJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsCiYjNDM7CX07CiYjNDM7CWludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTsKJiM0MzsKJiM0MzsJdXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqLwomIzQzOwlmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgJiMzNDt0bXBmcyYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7CiYjNDM7CWlmIChmc2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApOwomIzQzOwlpZiAobW50ZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkOwomIzQzOwlpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCAmIzM0OyYjMzQ7LCBBVF9FTVBUWV9QQVRILCAmYW1wO2F0dHIsCiYjNDM7CQkgICAgc2l6ZW9mKGF0dHIpKSkgewomIzQzOwkJY2xvc2UobW50ZmQpOwomIzQzOwkJbW50ZmQgPSAtMTsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJaWYgKGZzZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZzZmQpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh1c2VybnNfZmQpOwomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gbW50ZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKQomIzQzO3sKJiM0MzsJaW50IGZkID0gLTEsIHJldCA9IC0xOwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQywKJiM0MzsJCSAgICAwNjAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7Y3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgJiMzNDtkaXImIzM0OywgMDcwMCksICYjMzQ7bWtkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KCYjMzQ7dGFyZ2V0JiMzNDssIGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OyksICYjMzQ7c3ltbGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCBkaXJmZCwgJiMzNDtsaW5rJiMzNDssIDApLCAmIzM0O2xpbmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwNjAwKSwgJiMzNDtta25vZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSAwOwomIzQzO291dDoKJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpZm8mIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIHRtcGRpcltdID0gJiMzNDsvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFgmIzM0OzsKJiM0MzsJX191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7CiYjNDM7CWludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksICYjMzQ7bWtkdGVtcCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCAmIzM0O29wZW5fdG1wZGlyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCAmIzM0O2NyZWF0ZV9pZG1hcHBlZF90bXBmcyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksICYjMzQ7aWRlbnRpdHlfaWRtYXAmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLAomIzQzOwkJICAgICAgICYjMzQ7aWRtYXBwZWRfbW91bnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCSAgICAgICAmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJcmV0ID0gQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsCiYjNDM7CQkJJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuJiMzNDspID8gMCA6IC0xOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGlkbWFwcGVkX2RpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShpZG1hcHBlZF9kaXJmZCk7CiYjNDM7CWlmIChkaXJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZGlyZmQpOwomIzQzOwlybWRpcih0bXBkaXIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIHsKIAlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CkBAIC01Myw2ICYjNDM7Mjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAogCXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwogCiYjNDM7CWVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9sc21faW5vZGVfaWRtYXAmIzM0OykpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWVyciA9IHN0YWNrX21wcm90ZWN0KCk7CiAJaWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSB8fAogCSAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSkKQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiAJc2tlbC0mZ3Q7YnNzLSZndDtjb3B5X3Rlc3QgPSAwOwogCXNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9jb3VudCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDttcHJvdGVjdF9jb3VudCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwppbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogaW50IG1vbml0b3JlZF9waWQgPSAwOwogaW50IG1wcm90ZWN0X2NvdW50ID0gMDsKIGludCBicHJtX2NvdW50ID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJSU5PREVfSURNQVBfQ1JFQVRFCT0gMVUgJmx0OyZsdDsgMCwKJiM0MzsJSU5PREVfSURNQVBfTElOSwk9IDFVICZsdDsmbHQ7IDEsCiYjNDM7CUlOT0RFX0lETUFQX1NZTUxJTksJPSAxVSAmbHQ7Jmx0OyAyLAomIzQzOwlJTk9ERV9JRE1BUF9NS0RJUgk9IDFVICZsdDsmbHQ7IDMsCiYjNDM7CUlOT0RFX0lETUFQX01LTk9ECT0gMVUgJmx0OyZsdDsgNCwKJiM0MzsJSU5PREVfSURNQVBfUEVSTUlTU0lPTgk9IDFVICZsdDsmbHQ7IDUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJX191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiYjNDM7CiYjNDM7CXJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCAmYW1wOyZhbXA7IGlkbWFwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gaWRtYXAtJmd0O3VpZF9tYXAubnJfZXh0ZW50cyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGlkbWFwLSZndDtnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgICAgX191MzIgaG9vaywgaW50IHJldCkKJiM0Mzt7CiYjNDM7CWlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKQomIzQzOwkJaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfY3JlYXRlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9zeW1saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbWtkaXImIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta25vZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfcGVybWlzc2lvbiYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTsKJiM0Mzt9CiAKIFNFQygmIzM0O2xzbS9maWxlX21wcm90ZWN0JiMzNDspCiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBgTmVlZHNLTVNBTj10cnVlYCBpcyB0aGUgcmlnaHQgY2FsbCBvciBpZiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAuCgpGaXJzdCwgSSBzZWUgY2hhbmdlcyBwcmltYXJpbHkgZm9jdXNlZCBvbiBpbnRlZ3JhdGluZyBhbiBgaWRtYXBgIGludG8gdmFyaW91cyBpbm9kZSBzZWN1cml0eS1yZWxhdGVkIGZ1bmN0aW9ucyBhY3Jvc3MgdGhlIGZpbGVzeXN0ZW0gYW5kIHNlY3VyaXR5IHN1YnN5c3RlbXMuIFNwZWNpZmljYWxseSwgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AgYW5kIGBmcy9uYW1laS5jYCBhcmUgbW9kaWZpZWQgdG8gdXNlIGAmYW1wO25vcF9tbnRfaWRtYXBgIG9yIGBpZG1hcGAuIFRoZSBpbmNsdWRlIGZpbGVzIGBpbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBpbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhgIGhhdmUgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgdXBkYXRlZCB0byBpbmNsdWRlIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgcGFyYW1ldGVyIGluIGBpbm9kZV8qYCBmdW5jdGlvbnMgYW5kIGBzZWN1cml0eV9pbm9kZV8qYC4gVGhlIHNlY3VyaXR5IGltcGxlbWVudGF0aW9ucyBhbHNvIGdldHMgdXBkYXRlZC4KClRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgb24gTFNNIGltcGxlbWVudGF0aW9uczogU0VMaW51eCBhbmQgU01BQ0suIEl0IHVwZGF0ZXMgdGhlaXIgcmVzcGVjdGl2ZSBob29rIHNpZ25hdHVyZXMsIHN1Y2ggYXMgYHNlbGludXhfaW5vZGVfKmAgYW5kIGBzbWFja19pbm9kZV8qYCwgdG8gYWNjZXB0IHRoZSBgaWRtYXBgIHBhcmFtZXRlci4gRmluYWxseSwgdGhlcmUmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIHRlc3QgY2FzZXMgZm9yIEJQRiBMU00gaG9va3MgaW52b2x2aW5nIHRoZSBgaWRtYXBgIGluIHRoZSBzZWxmLXRlc3RzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludm9sdmUgc2VjdXJpdHktc2Vuc2l0aXZlIGRhdGEgZmxvd3MgdGhhdCBhcmUgcHJvbmUgdG8gS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXM/IEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBwYXNzaW5nIG5ldyBwb3RlbnRpYWxseSB0YWludGVkIGRhdGEgdG8ga2VybmVsIHNlY3VyaXR5IGZ1bmN0aW9ucy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgaWRtYXBgIGFyZ3VtZW50IGlzIHRoZSBrZXkuIElzIHRoaXMganVzdCBhIHJlZmFjdG9yaW5nLCBvciBkb2VzIHRoaXMgcG90ZW50aWFsbHkgaW50cm9kdWNlIGEgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGRhdGEgZmxvdz8gSSBuZWVkIHRvIGRldGVybWluZSBpZiBuZXcgZGF0YSBpcyBiZWluZyBwYXNzZWQgdGhyb3VnaCB0aGVzZSBob29rcyB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQgb3Igb3RoZXJ3aXNlIHByb2JsZW1hdGljLgoKVG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBgZ3JlcHBlcmAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIG5vdCBtaXNzaW5nIGFueSBvdGhlciBMU00gaW1wbGVtZW50YXRpb25zIG9yIGZpbGVzIHRoYXQgYWxzbyBpbXBsZW1lbnQgdGhlc2UgaG9va3MuIEFwcEFybW9yLCBMYW5kbG9jaywgVE9NT1lPLCBhbmQgb3RoZXIgTFNNcyBhcmUgdGhlIG9idmlvdXMgc3VzcGVjdHMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGNoYW5nZXMgYXJlIGFwcGxpZWQgY29uc2lzdGVudGx5IGFjcm9zcyB0aGUgYm9hcmQuIElmIG90aGVyIExTTXMgYXJlIGFmZmVjdGVkIG9yIGlmIHRoZXNlIGhvb2tzIGFyZSB1c2VkIGVsc2V3aGVyZSwgdGhlbiB0aGUgcmlzayBwcm9maWxlIGNoYW5nZXMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB3aGV0aGVyIGEgZGVlcGVyIEtNU0FOIGRpdmUgaXMgd2FycmFudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbm9kZV8oY3JlYXRlfGxpbmt8c3ltbGlua3xta2Rpcnxta25vZHxwZXJtaXNzaW9uKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTEyMjU9c3RhdGljIHZvaWQgaW5vZGVfZnJlZV9ieV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0MS0gKiBzZWN1cml0eV9pbm9kZV9mcmVlKCksIEBpbm9kZSBtYXkgc3RpbGwgYmUgcmVmZXJlbmNlZCBpbiBhIFZGUyBwYXRoIHdhbGtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0MjogKiBhbmQgY2FsbHMgdG8gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIG1heSBiZSBtYWRlIGR1cmluZywgb3IgYWZ0ZXIsXG5zZWN1cml0eS9zZWN1cml0eS5jLTEyNDMtICogYSBjYWxsIHRvIHNlY3VyaXR5X2lub2RlX2ZyZWUoKS4gIEZvciB0aGlzIHJlYXNvbiB0aGUgaW5vZGUtXHUwMDNlaV9zZWN1cml0eVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQ0LSAqIGZpZWxkIGlzIHJlbGVhc2VkIHZpYSBhIGNhbGxfcmN1KCkgY2FsbGJhY2sgYW5kIGFueSBMU01zIHdoaWNoIG5lZWQgdG9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0NTogKiByZXRhaW4gaW5vZGUgc3RhdGUgZm9yIHVzZSBpbiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgc2hvdWxkIG9ubHlcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0Ni0gKiByZWxlYXNlIHRoYXQgc3RhdGUgaW4gdGhlIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1KCkgTFNNIGhvb2sgY2FsbGJhY2suXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjA5PWludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MTUtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MTY6ICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjE3LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI3LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjMwLVx0XHRyZXR1cm4gMDtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTYzMTpcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYzMi19XG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MzM6RVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYzNC1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTE2NDI9dm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY1MC0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTY1MTogKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NTItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjAtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2NjE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjItXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjY1LVx0XHRyZXR1cm4gMDtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTY2NjpcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjY3LX1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTE2Nzg9aW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY4NS0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTY4NjogKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjg3LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjk1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjk2OmludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5Ny1cdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcwMC1cdFx0cmV0dXJuIDA7XG5zZWN1cml0eS9zZWN1cml0eS5jOjE3MDE6XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcwMi19XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzA0LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNzA1OiAqIHNlY3VyaXR5X2lub2RlX21rZGlyKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIG5ldyBkaXJlY3RvcnkgaXMgYWxsb3dlZFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzA2LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzE1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNzE2OmludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MTctXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcyMC1cdFx0cmV0dXJuIDA7XG5zZWN1cml0eS9zZWN1cml0eS5jOjE3MjE6XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcyMi19XG5zZWN1cml0eS9zZWN1cml0eS5jOjE3MjM6RVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzI0LVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTczND1pbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3NDEtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjE3NDI6ICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWRcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc0My0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc1NS0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTc1NjppbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzU3LVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc2MC1cdFx0cmV0dXJuIDA7XG5zZWN1cml0eS9zZWN1cml0eS5jOjE3NjE6XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzYyLX1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTE4MjI9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4MzAtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4MzE6ICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTgzMi0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0NC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTg0NTppbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0Ni1cdFx0XHQgICAgICBpbnQgbWFzaylcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDktXHRcdHJldHVybiAwO1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODUwOlx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg1MS19XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNzI3PWludCBzZWN1cml0eV9maWxlX3JlY2VpdmUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNzM2LSAqIFNhdmUgb3Blbi10aW1lIHBlcm1pc3Npb24gY2hlY2tpbmcgc3RhdGUgZm9yIGxhdGVyIHVzZSB1cG9uIGZpbGVfcGVybWlzc2lvbixcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjczNzogKiBhbmQgcmVjaGVjayBhY2Nlc3MgaWYgYW55dGhpbmcgaGFzIGNoYW5nZWQgc2luY2UgaW5vZGVfcGVybWlzc2lvbi5cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjczOC0gKlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMDExPXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA3Ni1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDc3OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzgtXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA4Mi1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDgzOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwODQtXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMwODk9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDkzLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMwOTQ6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwOTUtXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDk5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxMDA6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTAxLVx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEwNj1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzExMC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTExOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzExMi1cdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEzMD1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxNDY6c3RhdGljIG5vaW5saW5lIGludCBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzE0Ny1cdFx0XHRcdFx0ICAgdTMyIHBlcm1zLCB1MzIgYXVkaXRlZCwgdTMyIGRlbmllZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjQyLS8qKlxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI0NC0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNTE6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI1Mi1cdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjk5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzMDA6XHRyYzIgPSBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBwZXJtcywgYXVkaXRlZCwgZGVuaWVkLCByYyk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwMS1cdGlmIChyYzIpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQyNjM9c3RhdGljIGludCBzZWxpbnV4X2ZpbGVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDI4MC1cdCAqIFNpbmNlIHRoZSBpbm9kZSBsYWJlbCBvciBwb2xpY3kgc2Vxbm8gbWF5IGhhdmUgY2hhbmdlZFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQyODE6XHQgKiBiZXR3ZWVuIHRoZSBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gY2hlY2sgYW5kIHRoZSBzYXZpbmdcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgyLVx0ICogb2Ygc3RhdGUgYWJvdmUsIHJlY2hlY2sgdGhhdCBhY2Nlc3MgaXMgc3RpbGwgcGVybWl0dGVkLlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTY3PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MDctXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24pLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MDg6XHRMU01fSE9PS19JTklUKGlub2RlX2NyZWF0ZSwgc2VsaW51eF9pbm9kZV9jcmVhdGUpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MDk6XHRMU01fSE9PS19JTklUKGlub2RlX2xpbmssIHNlbGludXhfaW5vZGVfbGluayksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxMC1cdExTTV9IT09LX0lOSVQoaW5vZGVfdW5saW5rLCBzZWxpbnV4X2lub2RlX3VubGluayksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxMTpcdExTTV9IT09LX0lOSVQoaW5vZGVfc3ltbGluaywgc2VsaW51eF9pbm9kZV9zeW1saW5rKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjEyOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9ta2Rpciwgc2VsaW51eF9pbm9kZV9ta2RpciksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxMy1cdExTTV9IT09LX0lOSVQoaW5vZGVfcm1kaXIsIHNlbGludXhfaW5vZGVfcm1kaXIpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTQ6XHRMU01fSE9PS19JTklUKGlub2RlX21rbm9kLCBzZWxpbnV4X2lub2RlX21rbm9kKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE1LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9yZW5hbWUsIHNlbGludXhfaW5vZGVfcmVuYW1lKSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxNy1cdExTTV9IT09LX0lOSVQoaW5vZGVfZm9sbG93X2xpbmssIHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmspLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTg6XHRMU01fSE9PS19JTklUKGlub2RlX3Blcm1pc3Npb24sIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxOS1cdExTTV9IT09LX0lOSVQoaW5vZGVfc2V0YXR0ciwgc2VsaW51eF9pbm9kZV9zZXRhdHRyKSxcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz0xMDIwPXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMDMzLVx0ICogVU5JWCBkb21haW4gc29ja2V0cyB1c2UgbG93ZXIgbGV2ZWwgc29ja2V0IGRhdGEuIExldFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6MTAzNDpcdCAqIFVEUyBpbm9kZSBoYXZlIGZpeGVkICogbGFiZWwgdG8ga2VlcCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKCkgY2FsbVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAzNS1cdCAqIHdoZW4gY2FsbGVkIGZyb20gdW5peF9maW5kX2JzZCgpXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTA5MC0vKipcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwOTE6ICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwOTItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMDk4LSAqL1xuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6MTA5OTpzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMTAwLVx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz0xMjAzPXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMjgtLyoqXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMjI5OiAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzMC0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMzctICovXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMjM4OnN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMzktXHRcdFx0XHQgIGludCBtYXNrKVxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTUxNTg9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc21hY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE3Ni1cdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eSwgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eSksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTc3Olx0TFNNX0hPT0tfSU5JVChpbm9kZV9saW5rLCBzbWFja19pbm9kZV9saW5rKSxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTUxNzgtXHRMU01fSE9PS19JTklUKGlub2RlX3VubGluaywgc21hY2tfaW5vZGVfdW5saW5rKSxcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTgwLVx0TFNNX0hPT0tfSU5JVChpbm9kZV9yZW5hbWUsIHNtYWNrX2lub2RlX3JlbmFtZSksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTgxOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9wZXJtaXNzaW9uLCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKSxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTUxODItXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNtYWNrX2lub2RlX3NldGF0dHIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc1NwoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgU2FmZXR5IG9mIFRoaXMgTFNNIEhvb2sgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byBzZXZlcmFsIExTTSBob29rcywgc3BlY2lmaWNhbGx5IGBpbm9kZV9jcmVhdGVgLCBgaW5vZGVfbGlua2AsIGBpbm9kZV9zeW1saW5rYCwgYGlub2RlX21rZGlyYCwgYGlub2RlX21rbm9kYCwgYW5kIGBpbm9kZV9wZXJtaXNzaW9uYC4gSXQmIzM5O3MgdG91Y2hpbmcgYSBkZWNlbnQgc3ByZWFkIG9mIGZpbGVzIGFjcm9zcyB0aGUgZmlsZXN5c3RlbSwgc2VjdXJpdHksIGFuZCBCUEYgbGF5ZXJzLCBzbyB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHRoaXMgYGlkbWFwYCBwb2ludGVyIGlzIGJlaW5nIHBhc3NlZCAqdGhyb3VnaCogdGhlIExTTSBob29rIGRlZmluaXRpb25zLiBUaGUgVkZTIGZ1bmN0aW9ucyBsaWtlIGB2ZnNfY3JlYXRlYCBhbmQgYHZmc19ta2RpcmAgb3IgYCZhbXA7bm9wX21udF9pZG1hcGAgYXJlIHNldHRpbmcgdXAgYGlkbWFwYC4gVGhlIExTTSBob29rcyB0aGVtc2VsdmVzLCBsaWtlIFNFTGludXggYW5kIFNtYWNrLCBhcmUgdGhlbiByZWNlaXZpbmcgdGhpcyBwYXJhbWV0ZXIsIGFsdGhvdWdoLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIFNFTGludXggYW5kIFNtYWNrIGFyZW4mIzM5O3QgKmN1cnJlbnRseSogdXNpbmcgaXQuIFRoZSBCUEYgdGVzdHMgYXJlIGFsc28gdXNpbmcgdGhpcyBgaWRtYXBgIHdpdGhpbiB0aGUgcHJvZ3JhbXMgdGhlbXNlbHZlcywgc28gdGhhdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGVyZSBhbnkgcmlzayBoZXJlPyBJJiMzOTt2ZSBnb3QgdG8gY2hlY2suCgpCYXNlZCBvbiBteSBhbmFseXNpczoKCiogICAqKk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMqKiBhcmUgaW50cm9kdWNlZCwgd2hpY2ggaXMgZ29vZC4KKiAgIFRoZXJlJiMzOTtzICoqbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlKiosIHdoaWNoIGlzIGEgY3JpdGljYWwgcG9pbnQuCiogICBJIHNlZSAqKm5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgYnJhbmNoZXMqKiB0aGF0IHdvdWxkIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhbHVlcy4KCkkmIzM5O3ZlIGdvdCB0byBnbyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOb3BlLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm9wZS4KCkdpdmVuIHRoYXQgbm90aGluZyBpcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgcG9zc2libHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgZW5vdWdoIHRvIGZpbmQgYW55IGJ1Z3MuIFRoaXMgZG9lc24mIzM5O3QgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEl0JiMzOTtzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIGdpdmUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBteSBhbmFseXNpcy4gVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBMU00gaW5vZGUgaG9vayBwcm90b3R5cGVzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGludm9jYXRpb25zIGluIHRoZSBWRlMgbGF5ZXIgKGZzL25hbWVpLmMsIGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYykgYW5kIHNlY3VyaXR5IG1vZHVsZXMgdG8gcHJvcGFnYXRlIHRoZSAmIzM5O3N0cnVjdCBtbnRfaWRtYXAgKmlkbWFwJiMzOTsgYXJndW1lbnQsIGFsb25nIHdpdGggYWRkaW5nIEJQRiBMU00gdGVzdCBjYXNlcyBmb3IgdGhlc2UgaG9va3MuXG5cbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBzaWduYXR1cmUgYW5kIGNhbGxpbmcgY29udmVudGlvbiB1cGRhdGVzIHBhc3NpbmcgYW4gZXhpc3RpbmcgaWRtYXAgcG9pbnRlciB0aHJvdWdoIHRvIHRoZSBMU00gaG9vayBpbmZyYXN0cnVjdHVyZS4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgTFNNIGlub2RlIGhvb2sgcHJvdG90eXBlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBpbnZvY2F0aW9ucyBpbiB0aGUgVkZTIGxheWVyIChmcy9uYW1laS5jLCBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMpIGFuZCBzZWN1cml0eSBtb2R1bGVzIHRvIHByb3BhZ2F0ZSB0aGUgJiMzOTtzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCYjMzk7IGFyZ3VtZW50LCBhbG9uZyB3aXRoIGFkZGluZyBCUEYgTFNNIHRlc3QgY2FzZXMgZm9yIHRoZXNlIGhvb2tzLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgc2lnbmF0dXJlIGFuZCBjYWxsaW5nIGNvbnZlbnRpb24gdXBkYXRlcyBwYXNzaW5nIGFuIGV4aXN0aW5nIGlkbWFwIHBvaW50ZXIgdGhyb3VnaCB0byB0aGUgTFNNIGhvb2sgaW5mcmFzdHJ1Y3R1cmUuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjA4LjU0Njk4NzMzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDkxODA4OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9saW5rXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtub2RcIixcbiAgICBcInNtYWNrX2lub2RlX2xpbmtcIixcbiAgICBcImNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyXCIsXG4gICAgXCJ2ZnNfbWtvYmpcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgTFNNIGlub2RlIGhvb2sgcHJvdG90eXBlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBpbnZvY2F0aW9ucyBpbiB0aGUgVkZTIGxheWVyIChmcy9uYW1laS5jLCBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMpIGFuZCBzZWN1cml0eSBtb2R1bGVzIHRvIHByb3BhZ2F0ZSB0aGUgJ3N0cnVjdCBtbnRfaWRtYXAgKmlkbWFwJyBhcmd1bWVudCwgYWxvbmcgd2l0aCBhZGRpbmcgQlBGIExTTSB0ZXN0IGNhc2VzIGZvciB0aGVzZSBob29rcy5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgc2lnbmF0dXJlIGFuZCBjYWxsaW5nIGNvbnZlbnRpb24gdXBkYXRlcyBwYXNzaW5nIGFuIGV4aXN0aW5nIGlkbWFwIHBvaW50ZXIgdGhyb3VnaCB0byB0aGUgTFNNIGhvb2sgaW5mcmFzdHJ1Y3R1cmUuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBMU00gaW5vZGUgaG9vayBpbnRlcmZhY2VzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGNhbGxlcnMgYWNyb3NzIHRoZSBWRlMgbGF5ZXIsIENhY2hlRmlsZXMsIFNFTGludXgsIGFuZCBTbWFjayB0byBwYXNzIHRoZSBtb3VudCBpZG1hcCAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGFsdGVycyBjb3JlIFZGUyBhbmQgTFNNIGludGVyYWN0aW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHJlbGV2YW50IHRvIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjA4LjU0Njk5MjQyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MzY3NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTVkMGYyMzdjMDJhM2VhNWU4YTEyZTExZjFjZWQyNjFlYjExOTIzZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDAwOjMxOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xcbmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0XFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXFxuKysrIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXFxuQEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcXG4rXFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHByX2VycihcXFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZFxcXCIsXFxuIFxcdFxcdCAgICAgICByZXQpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcXG4rXFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cHJfZXJyKFxcXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkXFxcIixcXG4gXFx0XFx0ICAgICAgIHJldCk7XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXFxuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcXG4tLS0gYS9mcy9uYW1laS5jXFxuKysrIGIvZnMvbmFtZWkuY1xcbkBAIC02NTgsNyArNjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdGlmICh1bmxpa2VseShyZXR2YWwpKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4tXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xcbitcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7XFxuIFxcbkBAIC02OTUsNyArNjk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcXG4gXFx0aWYgKHVubGlrZWx5KCgoaW5vZGUtXFx1MDAzZWlfbW9kZSBcXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcXG4gXFx0XFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcXG4gXFxuLVxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcXG4rXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQxODgsNyArNDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFx0Lyogc2hvdWxkbid0IGl0IGJlIEVOT1NZUz8gKi9cXG4gXFxuIFxcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xcbkBAIC00MjEyLDcgKzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbiBcXG4gXFx0bW9kZSBcXHUwMDI2PSBTX0lBTExVR087XFxuIFxcdG1vZGUgfD0gU19JRlJFRztcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0ZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTtcXG5AQCAtNDMyOCw3ICs0MzI4LDcgQEAgc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4tXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC01MjU4LDcgKzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbkBAIC01Mzk1LDcgKzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG5AQCAtNTc4Myw3ICs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0aWYgKCFkaXItXFx1MDAzZWlfb3AtXFx1MDAzZXN5bWxpbmspXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbkBAIC01OTA3LDcgKzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuQEAgLTEyMCwyNiArMTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCBpbnQgKnhhdHRyX2NvdW50KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHQgdW1vZGVfdCBtb2RlKVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0IHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdCB1bW9kZV90IG1vZGUpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZWFkbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCBib29sIHJjdSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5AQCAtNDA0LDI0ICs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdFxcdFxcdCAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHQgICAgICAgYm9vbCByY3UpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHQgICAgICBpbnQgbWFzayk7XFxuIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XFxuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuQEAgLTkwMiw5ICs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdCB1bW9kZV90IG1vZGUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTkxMyw5ICs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXFxuIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHsgfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05MjYsMTYgKzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdGludCBtb2RlKVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTQ2LDkgKzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdGludCBtb2RlLCBkZXZfdCBkZXYpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTk3NCw3ICs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG5pbmRleCAyZWUyNzZhYjE1YzViLi5hOTE5MGRhMzM0MWRkIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuQEAgLTE2MTQsNiArMTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWRcXG4gICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGVcXG5AQCAtMTYyMiwxMiArMTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICB1bW9kZV90IG1vZGUpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpO1xcbiBcXG5AQCAtMTY0OCw2ICsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGVcXG4gICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnlcXG4gICogQG5ld19kZW50cnk6IG5ldyBsaW5rXFxuQEAgLTE2NTYsMTIgKzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xNjgyLDYgKzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rXFxuICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWVcXG5AQCAtMTY5MCwxNiArMTY5MywxNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcXG4gfVxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX21rZGlyKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIG5ldyBkaXJlY3RvcnkgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnlcXG4gICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZVxcbkBAIC0xNzA5LDExICsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTtcXG4gXFxuQEAgLTE3MzUsNiArMTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcXG4gICogQGRlbnRyeTogbmV3IGZpbGVcXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcXG5AQCAtMTc0NywxMiArMTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4raW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xODIzLDYgKzE4MjksNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBpbm9kZTogaW5vZGVcXG4gICogQG1hc2s6IGFjY2VzcyBtYXNrXFxuICAqXFxuQEAgLTE4MzUsMTEgKzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHQgICAgICBpbnQgbWFzaylcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMzA3NCwxMiArMzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdCAgICBcXHUwMDI2YWQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7XFxuIH1cXG5AQCAtMzA4OSwxMiArMzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0RJUik7XFxuIH1cXG5AQCAtMzEwNCw3ICszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhtb2RlKSk7XFxuIH1cXG5AQCAtMzIzNiwxMyArMzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxcbiBcXG4gLyoqXFxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkXFxuICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWRcXG4gICpcXG4gICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvXFxuICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS5cXG4gICovXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcXG4ge1xcbiBcXHRpbnQgbWFzaztcXG4gXFx0dTMyIHBlcm1zO1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXFxuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXFxuQEAgLTEwODksMTQgKzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXG4gLyoqXFxuICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XFxuICAqIEBkaXI6IHVudXNlZFxcbiAgKiBAbmV3X2RlbnRyeTogdGhlIG5ldyBvYmplY3RcXG4gICpcXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuICAqL1xcbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDtcXG4gXFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xcbkBAIC0xMjI2LDYgKzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4gXFxuIC8qKlxcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb25cXG4gICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkXFxuICAqXFxuQEAgLTEyMzMsNyArMTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbiAgKlxcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcXG4gICovXFxuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgIGludCBtYXNrKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS1cXHUwMDNlaV9zYik7XFxuIFxcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcXG5pbmRleCBkNzQ5NWVmZDRhNTYyLi5jMGFlODEzNjk4YWUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXFxuQEAgLTEsMTggKzEsMzAgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbiBcXG4gLypcXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW91bnQuaFxcdTAwM2VcXG4rXFxuICNpbmNsdWRlIFxcXCJsc20uc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibHNtX3RhaWxjYWxsLnNrZWwuaFxcXCJcXG4gXFxuIGNoYXIgKkNNRF9BUkdTW10gPSB7XFxcInRydWVcXFwiLCBOVUxMfTtcXG4gXFxuK2VudW0ge1xcbitcXHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXFx1MDAzY1xcdTAwM2MgNikgLSAxLFxcbit9O1xcbitcXG4gaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcXG4ge1xcbiBcXHRpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7XFxuQEAgLTMwLDYgKzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbiBcXG4rc3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcXG4rXFx0fSB3aGlsZSAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5UUik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpXFxuK3tcXG4rXFx0c2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7XFxuK1xcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldCA9IHdyaXRlX25vaW50cihmZCwgdmFsdWUsIGxlbik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRlbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pXFxuK1xcdFxcdHNhdmVkX2Vycm5vID0gRUlPO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdGlmIChzYXZlZF9lcnJubykge1xcbitcXHRcXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSlcXG4re1xcbitcXHRjaGFyIHBhdGhbNjRdO1xcbitcXHRpbnQgbGVuO1xcbitcXG4rXFx0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiL3Byb2MvJWQvJXNcXFwiLCBwaWQsIG5hbWUpO1xcbitcXHRpZiAobGVuIFxcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcXG4rXFx0XFx0ZXJybm8gPSBFT1ZFUkZMT1c7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcXG4re1xcbitcXHRjaGFyIHBhdGhbNjRdO1xcbitcXHRwaWRfdCBwaWQsIHdhaXRlZDtcXG4rXFx0aW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1cztcXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKHBpZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxcbitcXHRcXHRcXHRfZXhpdCgxKTtcXG4rXFx0XFx0cmFpc2UoU0lHU1RPUCk7XFxuK1xcdFxcdF9leGl0KDApO1xcbitcXHR9XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCBXVU5UUkFDRUQpO1xcbitcXHR9IHdoaWxlICh3YWl0ZWQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlRSKTtcXG4rXFx0aWYgKHdhaXRlZCAhPSBwaWQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkge1xcbitcXHRcXHRwaWQgPSAtMTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovXFxuK1xcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFxcXCJzZXRncm91cHNcXFwiLCBcXFwiZGVueVxcXCIpIFxcdTAwMjZcXHUwMDI2IGVycm5vICE9IEVOT0VOVClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFxcXCJ1aWRfbWFwXFxcIiwgXFxcIjAgMCAxXFxcIikgfHxcXG4rXFx0ICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXFxcImdpZF9tYXBcXFwiLCBcXFwiMCAwIDFcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy8lZC9ucy91c2VyXFxcIiwgcGlkKTtcXG4rXFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XFxuK1xcdFxcdGVycm5vID0gRU9WRVJGTE9XO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xcbitcXG4rb3V0OlxcbitcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRpZiAocGlkIFxcdTAwM2UgMCkge1xcbitcXHRcXHRraWxsKHBpZCwgU0lHS0lMTCk7XFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApO1xcbitcXHRcXHR9IHdoaWxlICh3YWl0ZWQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlRSKTtcXG4rXFx0fVxcbitcXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY3JlYXRlX2lkbWFwcGVkX3RtcGZzKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHtcXG4rXFx0XFx0LmF0dHJfc2V0ID0gTU9VTlRfQVRUUl9JRE1BUCxcXG4rXFx0fTtcXG4rXFx0aW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xO1xcbitcXG4rXFx0dXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpO1xcbitcXHRpZiAodXNlcm5zX2ZkIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqL1xcbitcXHRmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgXFxcInRtcGZzXFxcIiwgRlNPUEVOX0NMT0VYRUMpO1xcbitcXHRpZiAoZnNmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRtbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApO1xcbitcXHRpZiAobW50ZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkO1xcbitcXHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcXFwiXFxcIiwgQVRfRU1QVFlfUEFUSCwgXFx1MDAyNmF0dHIsXFxuK1xcdFxcdCAgICBzaXplb2YoYXR0cikpKSB7XFxuK1xcdFxcdGNsb3NlKG1udGZkKTtcXG4rXFx0XFx0bW50ZmQgPSAtMTtcXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRpZiAoZnNmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmc2ZkKTtcXG4rXFx0aWYgKHVzZXJuc19mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZSh1c2VybnNfZmQpO1xcbitcXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xcbitcXHRyZXR1cm4gbW50ZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxcbit7XFxuK1xcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcXG4rXFxuK1xcdGZkID0gb3BlbmF0KGRpcmZkLCBcXFwiZmlsZVxcXCIsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQyxcXG4rXFx0XFx0ICAgIDA2MDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcImNyZWF0ZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRmZCA9IC0xO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgXFxcImRpclxcXCIsIDA3MDApLCBcXFwibWtkaXJcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcXFwidGFyZ2V0XFxcIiwgZGlyZmQsIFxcXCJzeW1saW5rXFxcIiksIFxcXCJzeW1saW5rXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFxcXCJmaWxlXFxcIiwgZGlyZmQsIFxcXCJsaW5rXFxcIiwgMCksIFxcXCJsaW5rXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgXFxcImZpZm9cXFwiLCAwNjAwKSwgXFxcIm1rbm9kXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gMDtcXG4rb3V0OlxcbitcXHRpZiAoZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcImxpbmtcXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJmaWZvXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwic3ltbGlua1xcXCIsIDApO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcImZpbGVcXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJkaXJcXFwiLCBBVF9SRU1PVkVESVIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXFxuK3tcXG4rXFx0Y2hhciB0bXBkaXJbXSA9IFxcXCIvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFhcXFwiO1xcbitcXHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcXG4rXFx0aW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7XFxuK1xcdGludCByZXQgPSAtMTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksIFxcXCJta2R0ZW1wXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShkaXJmZCwgMCwgXFxcIm9wZW5fdG1wZGlyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsIFxcXCJjcmVhdGVfaWRtYXBwZWRfdG1wZnNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcXFwiaWRlbnRpdHlfaWRtYXBcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGlkbWFwcGVkX2RpcmZkKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJpZG1hcHBlZF9tb3VudFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiwgZXhwZWN0ZWQsXFxuK1xcdFxcdCAgICAgICBcXFwiaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlblxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsXFxuK1xcdFxcdFxcdFxcXCJpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuXFxcIikgPyAwIDogLTE7XFxuK1xcbitvdXQ6XFxuK1xcdGlmIChpZG1hcHBlZF9kaXJmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShpZG1hcHBlZF9kaXJmZCk7XFxuK1xcdGlmIChkaXJmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShkaXJmZCk7XFxuK1xcdHJtZGlyKHRtcGRpcik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuQEAgLTUzLDYgKzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXFxuIFxcbiBcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcXG4gXFxuK1xcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X2xzbV9pbm9kZV9pZG1hcFxcXCIpKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4gXFx0ZXJyID0gc3RhY2tfbXByb3RlY3QoKTtcXG4gXFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgXFxcInN0YWNrX21wcm90ZWN0XFxcIikgfHxcXG4gXFx0ICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCBcXFwic3RhY2tfbXByb3RlY3RcXFwiKSlcXG5AQCAtNzEsNiArMzAwLDggQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxcbiBcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNvcHlfdGVzdCA9IDA7XFxuIFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYnBybV9jb3VudCA9IDA7XFxuIFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbXByb3RlY3RfY291bnQgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcXG5AQCAtODQsNiArODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuIGludCBtb25pdG9yZWRfcGlkID0gMDtcXG4gaW50IG1wcm90ZWN0X2NvdW50ID0gMDtcXG4gaW50IGJwcm1fY291bnQgPSAwO1xcbitfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcXG4rX191MzIgaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XFxuK1xcbitlbnVtIHtcXG4rXFx0SU5PREVfSURNQVBfQ1JFQVRFXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyAwLFxcbitcXHRJTk9ERV9JRE1BUF9MSU5LXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyAxLFxcbitcXHRJTk9ERV9JRE1BUF9TWU1MSU5LXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyAyLFxcbitcXHRJTk9ERV9JRE1BUF9NS0RJUlxcdD0gMVUgXFx1MDAzY1xcdTAwM2MgMyxcXG4rXFx0SU5PREVfSURNQVBfTUtOT0RcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDQsXFxuK1xcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDUsXFxuK307XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxcbit7XFxuK1xcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFxcdTAwM2VcXHUwMDNlIDMyO1xcbitcXG4rXFx0cmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkIFxcdTAwMjZcXHUwMDI2IGlkbWFwO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXFxuK3tcXG4rXFx0cmV0dXJuIGlkbWFwLVxcdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgaWRtYXAtXFx1MDAzZWdpZF9tYXAubnJfZXh0ZW50cyA9PSAwO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpXFxuK3tcXG4rXFx0aWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcXG4rXFx0XFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xcbitcXHRlbHNlXFxuK1xcdFxcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX2NyZWF0ZVxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfbGlua1xcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfc3ltbGlua1xcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX21rZGlyXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfbWtub2RcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX3Blcm1pc3Npb25cXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpO1xcbit9XFxuIFxcbiBTRUMoXFxcImxzbS9maWxlX21wcm90ZWN0XFxcIilcXG4gaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTowOS4wNDUxNjUwNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyNzY2MzQ1OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9saW5rXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtub2RcIixcbiAgICBcInNtYWNrX2lub2RlX2xpbmtcIixcbiAgICBcImNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyXCIsXG4gICAgXCJ2ZnNfbWtvYmpcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIExTTSBpbm9kZSBob29rIGludGVyZmFjZXMgKGlub2RlX2NyZWF0ZSwgaW5vZGVfbGluaywgaW5vZGVfc3ltbGluaywgaW5vZGVfbWtkaXIsIGlub2RlX21rbm9kLCBpbm9kZV9wZXJtaXNzaW9uKSBhbmQgdGhlaXIgY2FsbGVycyBhY3Jvc3MgdGhlIFZGUyBsYXllciwgQ2FjaGVGaWxlcywgU0VMaW51eCwgYW5kIFNtYWNrIHRvIHBhc3MgdGhlIG1vdW50IGlkbWFwIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgYWx0ZXJzIGNvcmUgVkZTIGFuZCBMU00gaW50ZXJhY3Rpb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQgdG8gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NWQwZjIzN2MwMmEzZWE1ZThhMTJlMTFmMWNlZDI2MWViMTE5MjNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMDozMTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDRcbi0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuKysrIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5AQCAtNTEsMTQgKzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuK1x0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuK1x0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkXCIsXG4gXHRcdCAgICAgICByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmICh1bmxpa2VseShyZXR2YWwpKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcbiBcbkBAIC02OTUsNyArNjk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcbiBcdGlmICh1bmxpa2VseSgoKGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNDE4OCw3ICs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcdC8qIHNob3VsZG4ndCBpdCBiZSBFTk9TWVM/ICovXG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG5AQCAtNDIxMiw3ICs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcbiBcdG1vZGUgXHUwMDI2PSBTX0lBTExVR087XG4gXHRtb2RlIHw9IFNfSUZSRUc7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XG5AQCAtNDMyOCw3ICs0MzI4LDcgQEAgc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuIH1cbiBcbiAvKipcbkBAIC01MjU4LDcgKzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTM5NSw3ICs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbkBAIC01NzgzLDcgKzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFkaXItXHUwMDNlaV9vcC1cdTAwM2VzeW1saW5rKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTkwNyw3ICs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTEyMCwyNiArMTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgaW50ICp4YXR0cl9jb3VudClcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHQgc3RydWN0IGlub2RlICppbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgYm9vbCByY3UpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtNDA0LDI0ICs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuIGludCBzZWN1cml0eV9pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0XHRcdCAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LFxuIFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCAgICAgICBib29sIHJjdSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spO1xuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgICAgIGludCBtYXNrKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC05MDIsOSArOTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0IHVtb2RlX3QgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTEzLDkgKzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MjYsMTYgKzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0IHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdCAgICAgICBpbnQgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTQ2LDkgKzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSwgZGV2X3QgZGV2KVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NzQsNyArOTgzLDggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC0xNjE0LDYgKzE2MTQsNyBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkXG4gICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGVcbkBAIC0xNjIyLDEyICsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUpXG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbiBcbkBAIC0xNjQ4LDYgKzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGVcbiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBuZXdfZGVudHJ5OiBuZXcgbGlua1xuQEAgLTE2NTYsMTIgKzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjgyLDYgKzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rXG4gICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZVxuQEAgLTE2OTAsMTYgKzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuIH1cbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBuZXcgZGlyZWN0b3J5XG4gICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZVxuQEAgLTE3MDksMTEgKzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xuIFxuQEAgLTE3MzUsNiArMTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGZpbGVcbiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZVxuQEAgLTE3NDcsMTIgKzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTgyMyw2ICsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiBpbm9kZVxuICAqIEBtYXNrOiBhY2Nlc3MgbWFza1xuICAqXG5AQCAtMTgzNSwxMSArMTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgICAgIGludCBtYXNrKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0zMDc0LDEyICszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgXHUwMDI2YWQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspO1xuIH1cbkBAIC0zMDg5LDEyICszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xuIH1cbkBAIC0zMTA0LDcgKzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xuIH1cbkBAIC0zMjM2LDEzICszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsXG4gXG4gLyoqXG4gICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkXG4gICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZFxuICAqXG4gICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvXG4gICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbiB7XG4gXHRpbnQgbWFzaztcbiBcdHUzMiBwZXJtcztcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5pbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5AQCAtMTA4OSwxNCArMTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XG4gICogQGRpcjogdW51c2VkXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbkBAIC0xMjI2LDYgKzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIGluIHF1ZXN0aW9uXG4gICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkXG4gICpcbkBAIC0xMjMzLDcgKzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiAgKlxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgIGludCBtYXNrKVxuIHtcbiBcdHN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbkBAIC0xLDE4ICsxLDMwIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4gXG4gLypcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwibHNtLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJsc21fdGFpbGNhbGwuc2tlbC5oXCJcbiBcbiBjaGFyICpDTURfQVJHU1tdID0ge1widHJ1ZVwiLCBOVUxMfTtcbiBcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcdTAwM2NcdTAwM2MgNikgLSAxLFxuK307XG4rXG4gaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcbiB7XG4gXHRpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7XG5AQCAtMzAsNiArNDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcbitcdH0gd2hpbGUgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpO1xuK1x0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHJldCA9IHdyaXRlX25vaW50cihmZCwgdmFsdWUsIGxlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0ZWxzZSBpZiAoKHNpemVfdClyZXQgIT0gbGVuKVxuK1x0XHRzYXZlZF9lcnJubyA9IEVJTztcbitcdGNsb3NlKGZkKTtcbitcdGlmIChzYXZlZF9lcnJubykge1xuK1x0XHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRpbnQgbGVuO1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkLyVzXCIsIHBpZCwgbmFtZSk7XG4rXHRpZiAobGVuIFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XG4rXHRcdGVycm5vID0gRU9WRVJGTE9XO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRwaWRfdCBwaWQsIHdhaXRlZDtcbitcdGludCBmZCA9IC0xLCBsZW4sIHNhdmVkX2Vycm5vLCBzdGF0dXM7XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAocGlkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikpXG4rXHRcdFx0X2V4aXQoMSk7XG4rXHRcdHJhaXNlKFNJR1NUT1ApO1xuK1x0XHRfZXhpdCgwKTtcbitcdH1cbitcbitcdGRvIHtcbitcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgV1VOVFJBQ0VEKTtcbitcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0aWYgKHdhaXRlZCAhPSBwaWQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcbitcdFx0cGlkID0gLTE7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi9cbitcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwic2V0Z3JvdXBzXCIsIFwiZGVueVwiKSBcdTAwMjZcdTAwMjYgZXJybm8gIT0gRU5PRU5UKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwidWlkX21hcFwiLCBcIjAgMCAxXCIpIHx8XG4rXHQgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcImdpZF9tYXBcIiwgXCIwIDAgMVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvJWQvbnMvdXNlclwiLCBwaWQpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xuK1xuK291dDpcbitcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRpZiAocGlkIFx1MDAzZSAwKSB7XG4rXHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbitcdFx0ZG8ge1xuK1x0XHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcbitcdFx0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXHR9XG4rXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0cmV0dXJuIGZkO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7XG4rXHRcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXG4rXHR9O1xuK1x0aW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xO1xuK1xuK1x0dXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpO1xuK1x0aWYgKHVzZXJuc19mZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqL1xuK1x0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFwidG1wZnNcIiwgRlNPUEVOX0NMT0VYRUMpO1xuK1x0aWYgKGZzZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTtcbitcdGlmIChtbnRmZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcbitcdGlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsIFwiXCIsIEFUX0VNUFRZX1BBVEgsIFx1MDAyNmF0dHIsXG4rXHRcdCAgICBzaXplb2YoYXR0cikpKSB7XG4rXHRcdGNsb3NlKG1udGZkKTtcbitcdFx0bW50ZmQgPSAtMTtcbitcdH1cbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKGZzZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmc2ZkKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZSh1c2VybnNfZmQpO1xuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBtbnRmZDtcbit9XG4rXG4rc3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpXG4re1xuK1x0aW50IGZkID0gLTEsIHJldCA9IC0xO1xuK1xuK1x0ZmQgPSBvcGVuYXQoZGlyZmQsIFwiZmlsZVwiLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFkgfCBPX0NMT0VYRUMsXG4rXHRcdCAgICAwNjAwKTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRjbG9zZShmZCk7XG4rXHRmZCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgXCJkaXJcIiwgMDcwMCksIFwibWtkaXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KFwidGFyZ2V0XCIsIGRpcmZkLCBcInN5bWxpbmtcIiksIFwic3ltbGlua1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFwiZmlsZVwiLCBkaXJmZCwgXCJsaW5rXCIsIDApLCBcImxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsIFwiZmlmb1wiLCAwNjAwKSwgXCJta25vZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSAwO1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWZvXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwic3ltbGlua1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImZpbGVcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJkaXJcIiwgQVRfUkVNT1ZFRElSKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbClcbit7XG4rXHRjaGFyIHRtcGRpcltdID0gXCIvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFhcIjtcbitcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xuK1x0aW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcCh0bXBkaXIpLCBcIm1rZHRlbXBcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsIFwib3Blbl90bXBkaXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcbitcdGlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCBcImNyZWF0ZV9pZG1hcHBlZF90bXBmc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcImlkZW50aXR5X2lkbWFwXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGlkbWFwcGVkX2RpcmZkKSxcbitcdFx0ICAgICAgIFwiaWRtYXBwZWRfbW91bnRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiwgZXhwZWN0ZWQsXG4rXHRcdCAgICAgICBcImlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxuK1x0XHRcdFwiaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlblwiKSA/IDAgOiAtMTtcbitcbitvdXQ6XG4rXHRpZiAoaWRtYXBwZWRfZGlyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShpZG1hcHBlZF9kaXJmZCk7XG4rXHRpZiAoZGlyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShkaXJmZCk7XG4rXHRybWRpcih0bXBkaXIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIHtcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbkBAIC01Myw2ICsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuIFxuK1x0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9sc21faW5vZGVfaWRtYXBcIikpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRlcnIgPSBzdGFja19tcHJvdGVjdCgpO1xuIFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgXCJzdGFja19tcHJvdGVjdFwiKSB8fFxuIFx0ICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCBcInN0YWNrX21wcm90ZWN0XCIpKVxuQEAgLTcxLDYgKzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfdGVzdCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2NvdW50ID0gMDtcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1wcm90ZWN0X2NvdW50ID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC04NCw2ICs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gaW50IG1vbml0b3JlZF9waWQgPSAwO1xuIGludCBtcHJvdGVjdF9jb3VudCA9IDA7XG4gaW50IGJwcm1fY291bnQgPSAwO1xuK19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuK1xuK2VudW0ge1xuK1x0SU5PREVfSURNQVBfQ1JFQVRFXHQ9IDFVIFx1MDAzY1x1MDAzYyAwLFxuK1x0SU5PREVfSURNQVBfTElOS1x0PSAxVSBcdTAwM2NcdTAwM2MgMSxcbitcdElOT0RFX0lETUFQX1NZTUxJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDIsXG4rXHRJTk9ERV9JRE1BUF9NS0RJUlx0PSAxVSBcdTAwM2NcdTAwM2MgMyxcbitcdElOT0RFX0lETUFQX01LTk9EXHQ9IDFVIFx1MDAzY1x1MDAzYyA0LFxuK1x0SU5PREVfSURNQVBfUEVSTUlTU0lPTlx0PSAxVSBcdTAwM2NcdTAwM2MgNSxcbit9O1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4re1xuK1x0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuK1xuK1x0cmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkIFx1MDAyNlx1MDAyNiBpZG1hcDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2lkZW50aXR5X2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdHJldHVybiBpZG1hcC1cdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBpZG1hcC1cdTAwM2VnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHQgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KVxuK3tcbitcdGlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxuK1x0XHRpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7XG4rXHRlbHNlXG4rXHRcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfY3JlYXRlXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2xpbmtcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX3N5bWxpbmtcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX21rZGlyXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta25vZFwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9wZXJtaXNzaW9uXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7XG4rfVxuIFxuIFNFQyhcImxzbS9maWxlX21wcm90ZWN0XCIpXG4gaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MDkuMDQ1MTY2OTY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk4MzQ0MzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQncyB3b3J0aCB0b3NzaW5nIGludG8gdGhlIHN5emthbGxlciBncmluZGVyLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGZpbGVzIHRvdWNoZWQgLSBgZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jYCwgYGZzL25hbWVpLmNgLCBhIGJ1bmNoIG9mIGBpbmNsdWRlL2xpbnV4LypgIGhlYWRlcnMsIHZhcmlvdXMgYHNlY3VyaXR5LypgIGZpbGVzLCBhbmQgZXZlbiBzb21lIEJQRiBzZWxmLXRlc3RzIOKAkyBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIFRoaXMgcGF0Y2ggaXMgY2xlYXJseSBwb2tpbmcgYXJvdW5kIGluIHNlbnNpdGl2ZSBhcmVhczogdGhlIGZpbGVzeXN0ZW1zLCBuYW1pbmcgaW50ZXJmYWNlLCBhbmQgdGhlIHNlY3VyaXR5IGxheWVyLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluamVjdGluZyBhIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgaW50byBzZXZlcmFsIExTTSBpbm9kZSBob29rcy4gVGhpbmsgYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgdGhlIHdob2xlIHN1aXRlLiBUaGV5J3ZlIHVwZGF0ZWQgdGhlIGhvb2sgc2lnbmF0dXJlcyBpbiB0aGUgcmVsZXZhbnQgTFNNIHN1YnN5c3RlbXMgKFNFTGludXgsIFNtYWNrKSBhbmQgdGhlIEJQRiBzZWxmLXRlc3RzLiBUaGF0IG1lYW5zIHRoZXnigJlyZSB0b3VjaGluZyB0aGUgY29yZSBMU00gZGlzcGF0Y2hlcnMgYW5kLCBieSBleHRlbnNpb24sICphbnkqIHNlY3VyaXR5IG1vZHVsZXMgdGhhdCBkZXBlbmQgb24gdGhlbS5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogYXJlIHRoZXNlIG1vZGlmaWNhdGlvbnMgaGl0dGluZyBjb3JlLCByZWFjaGFibGUga2VybmVsIGNvZGU/IEkgY2FuIHNlZSBpdCwgYmFzZWQgb24gbXkga25vd2xlZGdlIG9mIHRoZSBmaWxlcywgYGZzL25hbWVpLmNgIHdoaWNoIGluY2x1ZGVzIGZ1bmRhbWVudGFsIFZGUyBvcGVyYXRpb25zIGxpa2UgYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYHZmc19ta25vZGAsIGFsbCB0aGUgd2F5IGRvd24gdG8gYGlub2RlX3Blcm1pc3Npb25gLiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgaXMgdGhlIExTTSBkaXNwYXRjaGVyIGl0c2VsZiwgd2hpY2ggaXMgYWx3YXlzIGluIHRoZSBjcml0aWNhbCBwYXRoLiBXZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGlub2RlIG9wZXJhdGlvbnMgKG9wZW4sIG1rZGlyLCBta25vZCwgc3ltbGluaywgbGluaywgZXRjLikgYW5kIHNlY3VyaXR5IGZyYW1ld29yayAoTFNNKS5cblxuQWNjb3JkaW5nIHRvIHNlY3Rpb24gMywgYW55dGhpbmcgdG91Y2hpbmcgY29yZSBWRlMsIExTTSBpbnRlcmZhY2VzLCBvciBhbnkgcmVmYWN0b3JpbmdzIG9mIGFsZ29yaXRobXMsIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nIHNob3VsZCBiZSB3b3J0aCBmdXp6aW5nLiAqKldvcnRoRnV6emluZyBtdXN0IGJlIHRydWUuKipcblxuU28sIHllYWgsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scyB3ZSBzaG91bGQgYmUgZm9jdXNpbmcgb24g4oCTIHRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLCBvciBjaGVjayBLY29uZmlnLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIHRoZXNlIHNlY3VyaXR5IGZlYXR1cmVzIG9yIGFueSBuZXcgc3ltYm9scyB0aGF0IG1pZ2h0IGV4cG9zZSBuZXcgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjE1LjAyODYxMjk1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQwNTczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTRUNVUklUWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyMTcwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5zZWN1cml0eS9LY29uZmlnPTg9c291cmNlIFxcXCJzZWN1cml0eS9rZXlzL0tjb25maWdcXFwiXFxuc2VjdXJpdHkvS2NvbmZpZy05LVxcbnNlY3VyaXR5L0tjb25maWc6MTA6Y29uZmlnIFNFQ1VSSVRZX0RNRVNHX1JFU1RSSUNUXFxuc2VjdXJpdHkvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJSZXN0cmljdCB1bnByaXZpbGVnZWQgYWNjZXNzIHRvIHRoZSBrZXJuZWwgc3lzbG9nXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz01Mj1jb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTcyLVxcbnNlY3VyaXR5L0tjb25maWc6NzM6Y29uZmlnIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZy03NC1cXHRib29sIFxcXCJFbmFibGUgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVsc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctODUtXFxuc2VjdXJpdHkvS2NvbmZpZzo4Njpjb25maWcgSEFTX1NFQ1VSSVRZX0FVRElUXFxuc2VjdXJpdHkvS2NvbmZpZy04Ny1cXHRkZWZfYm9vbCB5XFxuc2VjdXJpdHkvS2NvbmZpZy04OC1cXHRkZXBlbmRzIG9uIEFVRElUXFxuc2VjdXJpdHkvS2NvbmZpZzo4OTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZy05MC1cXG5zZWN1cml0eS9LY29uZmlnOjkxOmNvbmZpZyBTRUNVUklUWUZTXFxuc2VjdXJpdHkvS2NvbmZpZy05Mi1cXHRib29sIFxcXCJFbmFibGUgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctOTgtXFxuc2VjdXJpdHkvS2NvbmZpZzo5OTpjb25maWcgU0VDVVJJVFlfTkVUV09SS1xcbnNlY3VyaXR5L0tjb25maWctMTAwLVxcdGJvb2wgXFxcIlNvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG5zZWN1cml0eS9LY29uZmlnOjEwMTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZy0xMDItXFx0aGVscFxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy0xMDctXFxuc2VjdXJpdHkvS2NvbmZpZzoxMDg6Y29uZmlnIFNFQ1VSSVRZX0lORklOSUJBTkRcXG5zZWN1cml0eS9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJJbmZpbmliYW5kIFNlY3VyaXR5IEhvb2tzXFxcIlxcbnNlY3VyaXR5L0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gU0VDVVJJVFkgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORFxcbnNlY3VyaXR5L0tjb25maWctMTExLVxcdGhlbHBcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTE2LVxcbnNlY3VyaXR5L0tjb25maWc6MTE3OmNvbmZpZyBTRUNVUklUWV9ORVRXT1JLX1hGUk1cXG5zZWN1cml0eS9LY29uZmlnLTExOC1cXHRib29sIFxcXCJYRlJNIChJUFNlYykgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG5zZWN1cml0eS9LY29uZmlnOjExOTpcXHRkZXBlbmRzIG9uIFhGUk0gXFx1MDAyNlxcdTAwMjYgU0VDVVJJVFlfTkVUV09SS1xcbnNlY3VyaXR5L0tjb25maWctMTIwLVxcdGhlbHBcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTI5LVxcbnNlY3VyaXR5L0tjb25maWc6MTMwOmNvbmZpZyBTRUNVUklUWV9QQVRIXFxuc2VjdXJpdHkvS2NvbmZpZy0xMzEtXFx0Ym9vbCBcXFwiU2VjdXJpdHkgaG9va3MgZm9yIHBhdGhuYW1lIGJhc2VkIGFjY2VzcyBjb250cm9sXFxcIlxcbnNlY3VyaXR5L0tjb25maWc6MTMyOlxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG5zZWN1cml0eS9LY29uZmlnLTEzMy1cXHRoZWxwXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnPTE2OT1jb25maWcgTFNNX01NQVBfTUlOX0FERFJcXG5zZWN1cml0eS9LY29uZmlnLTE3MC1cXHRpbnQgXFxcIkxvdyBhZGRyZXNzIHNwYWNlIGZvciBMU00gdG8gcHJvdGVjdCBmcm9tIHVzZXIgYWxsb2NhdGlvblxcXCJcXG5zZWN1cml0eS9LY29uZmlnOjE3MTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFxcdTAwMjZcXHUwMDI2IFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9LY29uZmlnLTE3Mi1cXHRkZWZhdWx0IDMyNzY4IGlmIEFSTSB8fCAoQVJNNjQgXFx1MDAyNlxcdTAwMjYgQ09NUEFUKVxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz0yMzQ9Y2hvaWNlXFxuc2VjdXJpdHkvS2NvbmZpZy0yMzUtXFx0cHJvbXB0IFxcXCJGaXJzdCBsZWdhY3kgJ21ham9yIExTTScgdG8gYmUgaW5pdGlhbGl6ZWRcXFwiXFxuc2VjdXJpdHkvS2NvbmZpZzoyMzY6XFx0ZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaWYgU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L0tjb25maWc6MjM3OlxcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpZiBTRUNVUklUWV9TTUFDS1xcbnNlY3VyaXR5L0tjb25maWc6MjM4OlxcdGRlZmF1bHQgREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaWYgU0VDVVJJVFlfVE9NT1lPXFxuc2VjdXJpdHkvS2NvbmZpZzoyMzk6XFx0ZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SIGlmIFNFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvS2NvbmZpZzoyNDA6XFx0ZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX0RBQ1xcbnNlY3VyaXR5L0tjb25maWctMjQxLVxcbnNlY3VyaXR5L0tjb25maWctMjQyLVxcdGhlbHBcXG5zZWN1cml0eS9LY29uZmlnOjI0MzpcXHQgIFRoaXMgY2hvaWNlIGlzIHRoZXJlIG9ubHkgZm9yIGNvbnZlcnRpbmcgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlcXG5zZWN1cml0eS9LY29uZmlnLTI0NC1cXHQgIGluIG9sZCBrZXJuZWwgY29uZmlncyB0byBDT05GSUdfTFNNIGluIG5ldyBrZXJuZWwgY29uZmlncy4gRG9uJ3RcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMjUwLVxcbnNlY3VyaXR5L0tjb25maWc6MjUxOlxcdGNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9LY29uZmlnOjI1MjpcXHRcXHRib29sIFxcXCJTRUxpbnV4XFxcIiBpZiBTRUNVUklUWV9TRUxJTlVYPXlcXG5zZWN1cml0eS9LY29uZmlnLTI1My1cXG5zZWN1cml0eS9LY29uZmlnOjI1NDpcXHRjb25maWcgREVGQVVMVF9TRUNVUklUWV9TTUFDS1xcbnNlY3VyaXR5L0tjb25maWc6MjU1OlxcdFxcdGJvb2wgXFxcIlNpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sXFxcIiBpZiBTRUNVUklUWV9TTUFDSz15XFxuc2VjdXJpdHkvS2NvbmZpZy0yNTYtXFxuc2VjdXJpdHkvS2NvbmZpZzoyNTc6XFx0Y29uZmlnIERFRkFVTFRfU0VDVVJJVFlfVE9NT1lPXFxuc2VjdXJpdHkvS2NvbmZpZzoyNTg6XFx0XFx0Ym9vbCBcXFwiVE9NT1lPXFxcIiBpZiBTRUNVUklUWV9UT01PWU89eVxcbnNlY3VyaXR5L0tjb25maWctMjU5LVxcbnNlY3VyaXR5L0tjb25maWc6MjYwOlxcdGNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvS2NvbmZpZzoyNjE6XFx0XFx0Ym9vbCBcXFwiQXBwQXJtb3JcXFwiIGlmIFNFQ1VSSVRZX0FQUEFSTU9SPXlcXG5zZWN1cml0eS9LY29uZmlnLTI2Mi1cXG5zZWN1cml0eS9LY29uZmlnOjI2MzpcXHRjb25maWcgREVGQVVMVF9TRUNVUklUWV9EQUNcXG5zZWN1cml0eS9LY29uZmlnLTI2NC1cXHRcXHRib29sIFxcXCJVbml4IERpc2NyZXRpb25hcnkgQWNjZXNzIENvbnRyb2xzXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz0yNjg9Y29uZmlnIExTTVxcbnNlY3VyaXR5L0tjb25maWctMjY5LVxcdHN0cmluZyBcXFwiT3JkZXJlZCBsaXN0IG9mIGVuYWJsZWQgTFNNc1xcXCJcXG5zZWN1cml0eS9LY29uZmlnOjI3MDpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZzoyNzE6XFx0ZGVmYXVsdCBcXFwibGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxzbWFjayxzZWxpbnV4LHRvbW95byxhcHBhcm1vcixpcGUsYnBmXFxcIiBpZiBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLXFxuc2VjdXJpdHkvS2NvbmZpZzoyNzI6XFx0ZGVmYXVsdCBcXFwibGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxhcHBhcm1vcixzZWxpbnV4LHNtYWNrLHRvbW95byxpcGUsYnBmXFxcIiBpZiBERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvS2NvbmZpZzoyNzM6XFx0ZGVmYXVsdCBcXFwibGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCx0b21veW8saXBlLGJwZlxcXCIgaWYgREVGQVVMVF9TRUNVUklUWV9UT01PWU9cXG5zZWN1cml0eS9LY29uZmlnOjI3NDpcXHRkZWZhdWx0IFxcXCJsYW5kbG9jayxsb2NrZG93bix5YW1hLGxvYWRwaW4sc2FmZXNldGlkLGlwZSxicGZcXFwiIGlmIERFRkFVTFRfU0VDVVJJVFlfREFDXFxuc2VjdXJpdHkvS2NvbmZpZy0yNzUtXFx0ZGVmYXVsdCBcXFwibGFuZGxvY2ssbG9ja2Rvd24seWFtYSxsb2FkcGluLHNhZmVzZXRpZCxzZWxpbnV4LHNtYWNrLHRvbW95byxhcHBhcm1vcixpcGUsYnBmXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy0yODQtXFxuc2VjdXJpdHkvS2NvbmZpZzoyODU6Y29uZmlnIFNFQ1VSSVRZX0NPTU1PTkNBUF9LVU5JVF9URVNUXFxuc2VjdXJpdHkvS2NvbmZpZy0yODYtXFx0Ym9vbCBcXFwiQnVpbGQgS1VuaXQgdGVzdHMgZm9yIGNvbW1vbmNhcFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxuc2VjdXJpdHkvTWFrZWZpbGU9OT1vYmoteVxcdFxcdFxcdFxcdFxcdCs9IGNvbW1vbmNhcC5vXFxuc2VjdXJpdHkvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1NFQ1VSSVRZKSBcXHRcXHRcXHQrPSBsc21fc3lzY2FsbHMub1xcbnNlY3VyaXR5L01ha2VmaWxlLTExLW9iai0kKENPTkZJR19NTVUpXFx0XFx0XFx0Kz0gbWluX2FkZHIub1xcbi0tXFxuc2VjdXJpdHkvTWFrZWZpbGUtMTMtIyBPYmplY3QgZmlsZSBsaXN0c1xcbnNlY3VyaXR5L01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19TRUNVUklUWSlcXHRcXHRcXHQrPSBzZWN1cml0eS5vIGxzbV9ub3RpZmllci5vIGxzbV9pbml0Lm9cXG5zZWN1cml0eS9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfU0VDVVJJVFlGUylcXHRcXHQrPSBpbm9kZS5vXFxuc2VjdXJpdHkvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpXFx0XFx0Kz0gc2VsaW51eC9cXG5zZWN1cml0eS9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfU0VDVVJJVFlfU01BQ0spXFx0XFx0Kz0gc21hY2svXFxuc2VjdXJpdHkvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0hBU19TRUNVUklUWV9BVURJVClcXHQrPSBsc21fYXVkaXQub1xcbnNlY3VyaXR5L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pXFx0XFx0Kz0gdG9tb3lvL1xcbnNlY3VyaXR5L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUilcXHRcXHQrPSBhcHBhcm1vci9cXG5zZWN1cml0eS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfU0VDVVJJVFlfWUFNQSlcXHRcXHQrPSB5YW1hL1xcbnNlY3VyaXR5L01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19TRUNVUklUWV9MT0FEUElOKVxcdFxcdCs9IGxvYWRwaW4vXFxuc2VjdXJpdHkvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NBRkVTRVRJRCkgICAgICAgKz0gc2FmZXNldGlkL1xcbnNlY3VyaXR5L01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19TRUNVUklUWV9MT0NLRE9XTl9MU00pXFx0Kz0gbG9ja2Rvd24vXFxuc2VjdXJpdHkvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX0NHUk9VUFMpXFx0XFx0XFx0Kz0gZGV2aWNlX2Nncm91cC5vXFxuc2VjdXJpdHkvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9MU00pXFx0XFx0XFx0Kz0gYnBmL1xcbnNlY3VyaXR5L01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19TRUNVUklUWV9MQU5ETE9DSylcXHRcXHQrPSBsYW5kbG9jay9cXG5zZWN1cml0eS9NYWtlZmlsZToyODpvYmotJChDT05GSUdfU0VDVVJJVFlfSVBFKVxcdFxcdCs9IGlwZS9cXG5zZWN1cml0eS9NYWtlZmlsZS0yOS1cXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yLy5rdW5pdGNvbmZpZz0yPUNPTkZJR19ORVQ9eVxcbnNlY3VyaXR5L2FwcGFybW9yLy5rdW5pdGNvbmZpZzozOkNPTkZJR19TRUNVUklUWT15XFxuc2VjdXJpdHkvYXBwYXJtb3IvLmt1bml0Y29uZmlnOjQ6Q09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SPXlcXG5zZWN1cml0eS9hcHBhcm1vci8ua3VuaXRjb25maWc6NTpDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVD15XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMy1cXHRib29sIFxcXCJBcHBBcm1vciBzdXBwb3J0XFxcIlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFxcdTAwMjZcXHUwMDI2IE5FVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNS1cXHRzZWxlY3QgQVVESVRcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjY6XFx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjc6XFx0c2VsZWN0IFNFQ1VSSVRZRlNcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg6XFx0c2VsZWN0IFNFQ1VSSVRZX05FVFdPUktcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTktXFx0ZGVmYXVsdCBuXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cXHRib29sIFxcXCJCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcXFwiXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyMDpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yMS1cXHRkZWZhdWx0IG5cXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXFx0Ym9vbCBcXFwiQnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1Z2dpbmcgYXNzZXJ0c1xcXCJcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjMwOlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTMxLVxcdGRlZmF1bHQgeVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zNy1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjM4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19NRVNTQUdFU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGVidWcgbWVzc2FnZXMgZW5hYmxlZCBieSBkZWZhdWx0XFxcIlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDEtXFx0ZGVmYXVsdCBuXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ2LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cXHRib29sIFxcXCJBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFxcXCJcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ5OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTUwLVxcdGRlZmF1bHQgeVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy01OC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjU5OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cXHRib29sIFxcXCJFbmFibGUgaW50cm9zcGVjdGlvbiBvZiBzaGEyNTYgaGFzaGVzIGZvciBsb2FkZWQgcHJvZmlsZXNcXFwiXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo2MTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02Mi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzAtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03Mi0gICAgICAgYm9vbCBcXFwiRW5hYmxlIHBvbGljeSBoYXNoIGludHJvc3BlY3Rpb24gYnkgZGVmYXVsdFxcXCJcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjczOiAgICAgICBkZXBlbmRzIG9uIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTc0LSAgICAgICBkZWZhdWx0IHlcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODMtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODUtXFx0Ym9vbCBcXFwiQWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVxcXCJcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg2OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JfSU5UUk9TUEVDVF9QT0xJQ1lcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTg3LVxcdHNlbGVjdCBaU1REX0NPTVBSRVNTXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk1LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6OTY6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJBbGxvdyBsb2FkaW5nIHBvbGljeSBpbiBhIGNvbXByZXNzZWQgZm9ybWF0XFxcIlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6OTg6XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTktXFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMDg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX1BBUkFOT0lEX0xPQURcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcXFwiXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9BUFBBUk1PUlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTExLVxcdGRlZmF1bHQgeVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMTgtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMTk6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0tVTklUX1RFU1RcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEyMC1cXHR0cmlzdGF0ZSBcXFwiQnVpbGQgS1VuaXQgdGVzdHMgZm9yIHBvbGljeV91bnBhY2suY1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTIxOlxcdGRlcGVuZHMgb24gS1VOSVQgXFx1MDAyNlxcdTAwMjYgU0VDVVJJVFlfQVBQQVJNT1JcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEyMi1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtMy0jXFxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1IpICs9IGFwcGFybW9yLm9cXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZS01LVxcbnNlY3VyaXR5L2FwcGFybW9yL01ha2VmaWxlPTY9YXBwYXJtb3IteSA6PSBhcHBhcm1vcmZzLm8gYXVkaXQubyBjYXBhYmlsaXR5Lm8gdGFzay5vIGlwYy5vIGxpYi5vIG1hdGNoLm8gXFxcXFxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGUtOS0gICAgICAgICAgICAgIHBvbGljeV9jb21wYXQubyBhZl91bml4Lm8gYWZfaW5ldC5vXFxuc2VjdXJpdHkvYXBwYXJtb3IvTWFrZWZpbGU6MTA6YXBwYXJtb3ItJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSCkgKz0gY3J5cHRvLm9cXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZS0xMS1cXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVCkgKz0gYXBwYXJtb3JfcG9saWN5X3VucGFja190ZXN0Lm9cXG5zZWN1cml0eS9hcHBhcm1vci9NYWtlZmlsZS0xMy1hcHBhcm1vcl9wb2xpY3lfdW5wYWNrX3Rlc3Qtb2JqcyArPSBwb2xpY3lfdW5wYWNrX3Rlc3Qub1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jPTc1PXN0cnVjdCByYXdkYXRhX2ZfZGF0YSB7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNzktXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjgwOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy04MS1cXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYz0xNzI9c3RhdGljIHN0cnVjdCBhYV9wcm94eSAqZ2V0X3Byb3h5X2NvbW1vbl9yZWYoc3RydWN0IGFhX2NvbW1vbl9yZWYgKnJlZilcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy0xNzktXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE4MDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTgxLXN0YXRpYyBzdHJ1Y3QgYWFfbG9hZGRhdGEgKmdldF9sb2FkZGF0YV9jb21tb25fcmVmKHN0cnVjdCBhYV9jb21tb25fcmVmICpyZWYpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9NDU5PXN0YXRpYyBzdHJ1Y3QgYWFfbG9hZGRhdGEgKmFhX3NpbXBsZV93cml0ZV90b19idWZmZXIoY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNDg2LVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzo0ODc6I2lmIGRlZmluZWQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZKSB8fCBcXFxcXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjQ4ODogICAgZGVmaW5lZChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWSlcXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNDg5LXN0YXRpYyBpbnQgZGVjb21wcmVzc196c3RkKGNoYXIgKnNyYywgc2l6ZV90IHNsZW4sIGNoYXIgKmRzdCwgc2l6ZV90IGRsZW4pXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTI1LVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzo1MjY6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9DT01QUkVTU0VEX1BPTElDWVxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYy01MjctLyoqXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9NTg5PXN0YXRpYyBzdHJ1Y3QgYWFfbG9hZGRhdGEgKmFhX2dldF9kYXRhX2Zyb21fY29tcHJlc3NlZChjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiBfX2Fsd2F5c191bnVzZWQsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTk1LX1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM6NTk2OiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfQ09NUFJFU1NFRF9QT0xJQ1kgKi9cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtNTk3LVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jPTE0NzA9U0VRX05TX0ZPUFMobmFtZSk7XFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE0NzEtXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE0NzI6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE0NzMtc3RhdGljIGludCBzZXFfbnNfY29tcHJlc3NfbWluX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTY2NT1pbnQgX19hYV9mc19jcmVhdGVfcmF3ZGF0YShzdHJ1Y3QgYWFfbnMgKm5zLCBzdHJ1Y3QgYWFfbG9hZGRhdGEgKnJhd2RhdGEpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTczMy19XFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE3MzQ6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE3MzUtXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTc4OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY3JlYXRlX3Byb2ZpbGVfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTc5NC1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM6MTc5NTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMTc5Ni1zdGF0aWMgaW50IHByb2ZpbGVfZGVwdGgoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MTk0Mz1pbnQgX19hYV9jcmVhdGVfcmF3ZGF0YV9zeW1saW5rX2RlbnRzKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE5NzktXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjE5ODA6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTE5ODEtXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmM9MjYyMz1zdGF0aWMgc3RydWN0IGFhX3Nmc19lbnRyeSBhYV9zZnNfZW50cnlfcG9saWN5W10gPSB7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMjYzMi1cXHRBQV9TRlNfRElSKFxcXCJ1bmNvbmZpbmVkX3Jlc3RyaWN0aW9uc1xcXCIsICAgYWFfc2ZzX2VudHJ5X3VuY29uZmluZWQpLFxcbnNlY3VyaXR5L2FwcGFybW9yL2FwcGFybW9yZnMuYzoyNjMzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfQ09NUFJFU1NFRF9QT0xJQ1lcXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMjYzNC1cXHRBQV9TRlNfRklMRV9CT09MRUFOKFxcXCJjb21wcmVzc2VkX2xvYWRcXFwiLFxcdDEpLFxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jPTI2OTQ9c3RhdGljIHN0cnVjdCBhYV9zZnNfZW50cnkgYWFfc2ZzX2VudHJ5X2FwcGFybW9yW10gPSB7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9hcHBhcm1vcmZzLmMtMjcwMC1cXHRBQV9TRlNfRklMRV9GT1BTKFxcXCJwcm9maWxlc1xcXCIsIDA0NDQsIFxcdTAwMjZhYV9zZnNfcHJvZmlsZXNfZm9wcyksXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jOjI3MDE6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvYXBwYXJtb3Jmcy5jLTI3MDItXFx0QUFfU0ZTX0ZJTEVfRk9QUyhcXFwicmF3X2RhdGFfY29tcHJlc3Npb25fbGV2ZWxfbWluXFxcIiwgMDQ0NCwgXFx1MDAyNnNlcV9uc19jb21wcmVzc19taW5fZm9wcyksXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yLmg9NTY9ZXh0ZXJuIHVuc2lnbmVkIGludCBhYV9nX3BhdGhfbWF4O1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaC01Ny1cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yLmg6NTg6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oLTU5LSNkZWZpbmUgQUFfTUlOX0NMRVZFTCB6c3RkX21pbl9jbGV2ZWwoKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vci5oLTY1LSNkZWZpbmUgQUFfREVGQVVMVF9DTEVWRUwgMFxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3IuaDo2NjojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkgKi9cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yLmgtNjctXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yZnMuaD0xMjE9c3RydWN0IGFhX2xvYWRkYXRhO1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oLTEyMi1cXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2FwcGFybW9yZnMuaDoxMjM6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmgtMTI0LXZvaWQgX19hYV9mc19yZW1vdmVfcmF3ZGF0YShzdHJ1Y3QgYWFfbG9hZGRhdGEgKnJhd2RhdGEpO1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmg9MTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYWFfY3JlYXRlX3Jhd2RhdGFfc3ltbGlua19kZW50cyhzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oLTE0OC19XFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9hcHBhcm1vcmZzLmg6MTQ5OiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWSAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvYXBwYXJtb3Jmcy5oLTE1MC1cXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvY3J5cHRvLmgtMTQtXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9jcnlwdG8uaDoxNTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2NyeXB0by5oLTE2LWludCBpbml0X3Byb2ZpbGVfaGFzaCh2b2lkKTtcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbGliLmg9NDg9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbGliLmgtNjItXFx0fSB3aGlsZSAoMClcXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL2xpYi5oOjYzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvbGliLmgtNjQtI2RlZmluZSBBQV9CVUdfRk1UKFgsIGZtdCwgYXJncy4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz0xOTI5PW1vZHVsZV9wYXJhbV9jYWxsKG1vZGUsIHBhcmFtX3NldF9tb2RlLCBwYXJhbV9nZXRfbW9kZSxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzItLyogd2hldGhlciBwb2xpY3kgdmVyaWZpY2F0aW9uIGhhc2hpbmcgaXMgZW5hYmxlZCAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjE5MzM6Ym9vbCBhYV9nX2hhc2hfcG9saWN5ID0gSVNfRU5BQkxFRChDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUKTtcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzoxOTM0OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzUtbW9kdWxlX3BhcmFtX25hbWVkKGhhc2hfcG9saWN5LCBhYV9nX2hhc2hfcG9saWN5LCBhYWJvb2wsIFNfSVJVU1IgfCBTX0lXVVNSKTtcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE5MzgtLyogd2hldGhlciBwb2xpY3kgZXhhY3RseSBhcyBsb2FkZWQgaXMgcmV0YWluZWQgZm9yIGRlYnVnIGFuZCBjaGVja3BvaW50aW5nICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTkzOTpib29sIGFhX2dfZXhwb3J0X2JpbmFyeSA9IElTX0VOQUJMRUQoQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUlkpO1xcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjE5NDA6I2lmZGVmIENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTk0MS1tb2R1bGVfcGFyYW1fbmFtZWQoZXhwb3J0X2JpbmFyeSwgYWFfZ19leHBvcnRfYmluYXJ5LCBhYWJvb2wsIDA2MDApO1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTk4MD1tb2R1bGVfcGFyYW1fbmFtZWQocGF0aF9tYXgsIGFhX2dfcGF0aF9tYXgsIGFhdWludCwgU19JUlVTUik7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xOTg2LSAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjE5ODc6Ym9vbCBhYV9nX3BhcmFub2lkX2xvYWQgPSBJU19FTkFCTEVEKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEKTtcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xOTg4LW1vZHVsZV9wYXJhbV9uYW1lZChwYXJhbm9pZF9sb2FkLCBhYV9nX3BhcmFub2lkX2xvYWQsIGFhYm9vbCwgU19JUlVHTyk7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz0yNjI5PURFRklORV9MU00oYXBwYXJtb3IpID0ge1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMjYzOC0jZW5kaWZcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzoyNjM5OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTI2NDAtXFx0LmluaXRjYWxsX2xhdGUgPSBpbml0X3Byb2ZpbGVfaGFzaCxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYz0xNjE5PXN0YXRpYyBpbnQgY29tcHJlc3NfenN0ZChjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzbGVuLCBjaGFyICoqZHN0LCBzaXplX3QgKmRsZW4pXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jLTE2MjAte1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYzoxNjIxOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYy0xNjIyLVxcdGNvbnN0IHpzdGRfcGFyYW1ldGVycyBwYXJhbXMgPVxcbi0tXFxuc2VjdXJpdHkvY29tbW9uY2FwLmM9MTAyNT1pbnQgY2FwX2lub2RlX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTEwMzAtXFx0LyogSWdub3JlIG5vbi1zZWN1cml0eSB4YXR0cnMgKi9cXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDMxOlxcdGlmIChzdHJuY21wKG5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCxcXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDMyOlxcdFxcdFxcdFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4pICE9IDApXFxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTAzMy1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jPTEwNjY9aW50IGNhcF9pbm9kZV9yZW1vdmV4YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTEwNzEtXFx0LyogSWdub3JlIG5vbi1zZWN1cml0eSB4YXR0cnMgKi9cXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDcyOlxcdGlmIChzdHJuY21wKG5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCxcXG5zZWN1cml0eS9jb21tb25jYXAuYzoxMDczOlxcdFxcdFxcdFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4pICE9IDApXFxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTA3NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jPTE0Njk9aW50IGNhcF9tbWFwX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTQ4Mi1cXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNDgzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlcXG5zZWN1cml0eS9jb21tb25jYXAuYy0xNDg0LVxcbi0tXFxuc2VjdXJpdHkvY29tbW9uY2FwLmM9MTUxNz1ERUZJTkVfTFNNKGNhcGFiaWxpdHkpID0ge1xcbi0tXFxuc2VjdXJpdHkvY29tbW9uY2FwLmMtMTUyMi1cXG5zZWN1cml0eS9jb21tb25jYXAuYzoxNTIzOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFkgKi9cXG5zZWN1cml0eS9jb21tb25jYXAuYy0xNTI0LVxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jOjE1MjU6I2lmZGVmIENPTkZJR19TRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2NvbW1vbmNhcC5jLTE1MjYtI2luY2x1ZGUgXFxcImNvbW1vbmNhcF90ZXN0LmNcXFwiXFxuLS1cXG5zZWN1cml0eS9jb21tb25jYXBfdGVzdC5jLTE3LVxcbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmM6MTg6I2lmZGVmIENPTkZJR19TRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2NvbW1vbmNhcF90ZXN0LmMtMTktXFxuLS1cXG5zZWN1cml0eS9jb21tb25jYXBfdGVzdC5jPTI4Nj1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuc2VjdXJpdHkvY29tbW9uY2FwX3Rlc3QuYy0yODctXFxuc2VjdXJpdHkvY29tbW9uY2FwX3Rlc3QuYzoyODg6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVCAqL1xcbi0tXFxuc2VjdXJpdHkvaW5vZGUuYz00Mj1zdGF0aWMgaW50IHNlY3VyaXR5ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5zZWN1cml0eS9pbm9kZS5jLTQ2LVxcbnNlY3VyaXR5L2lub2RlLmM6NDc6XFx0ZXJyb3IgPSBzaW1wbGVfZmlsbF9zdXBlcihzYiwgU0VDVVJJVFlGU19NQUdJQywgZmlsZXMpO1xcbnNlY3VyaXR5L2lub2RlLmMtNDgtXFx0aWYgKGVycm9yKVxcbi0tXFxuc2VjdXJpdHkvaW5vZGUuYz0zMDg9RVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlmc19yZW1vdmUpO1xcbnNlY3VyaXR5L2lub2RlLmMtMzA5LVxcbnNlY3VyaXR5L2lub2RlLmM6MzEwOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlcXG5zZWN1cml0eS9pbm9kZS5jLTMxMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4tLVxcbnNlY3VyaXR5L2lub2RlLmM9MzYyPWludCBfX2luaXQgc2VjdXJpdHlmc19pbml0KHZvaWQpXFxuLS1cXG5zZWN1cml0eS9pbm9kZS5jLTM3NC1cXHR9XFxuc2VjdXJpdHkvaW5vZGUuYzozNzU6I2lmZGVmIENPTkZJR19TRUNVUklUWVxcbnNlY3VyaXR5L2lub2RlLmMtMzc2LVxcdGxzbV9kZW50cnkgPSBzZWN1cml0eWZzX2NyZWF0ZV9maWxlKFxcXCJsc21cXFwiLCAwNDQ0LCBOVUxMLCBOVUxMLFxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L0tjb25maWc9Mz1jb25maWcgSU5URUdSSVRZXFxuc2VjdXJpdHkvaW50ZWdyaXR5L0tjb25maWctNC1cXHRib29sIFxcXCJJbnRlZ3JpdHkgc3Vic3lzdGVtXFxcIlxcbnNlY3VyaXR5L2ludGVncml0eS9LY29uZmlnOjU6XFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbnNlY3VyaXR5L2ludGVncml0eS9LY29uZmlnLTYtXFx0ZGVmYXVsdCB5XFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc9Mj1jb25maWcgRVZNXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctOC1cXHRzZWxlY3QgQ1JZUFRPX0hBU0hfSU5GT1xcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzo5OlxcdHNlbGVjdCBTRUNVUklUWV9QQVRIXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTEwLVxcdGRlZmF1bHQgblxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnPTMxPWNvbmZpZyBFVk1fRVhUUkFfU01BQ0tfWEFUVFJTXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIkFkZGl0aW9uYWwgU01BQ0sgeGF0dHJzXFxcIlxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIEVWTSBcXHUwMDI2XFx1MDAyNiBTRUNVUklUWV9TTUFDS1xcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zNC1cXHRkZWZhdWx0IG5cXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX2NyeXB0by5jPTQwNj1pbnQgZXZtX2luaXRfaG1hYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgeGF0dHIgKnhhdHRycyxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX2NyeXB0by5jLTQyMi1cXHRcXHRcXHRpZiAoc3RyY21wKHhhdHRyX2VudHJ5LVxcdTAwM2VuYW1lICtcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9jcnlwdG8uYzo0MjM6XFx0XFx0XFx0XFx0ICAgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTiwgeGF0dHItXFx1MDAzZW5hbWUpICE9IDApXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fY3J5cHRvLmMtNDI0LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jPTM4PXN0YXRpYyBzdHJ1Y3QgeGF0dHJfbGlzdCBldm1fY29uZmlnX2RlZmF1bHRfeGF0dHJuYW1lc1tdID0ge1xcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jLTQwLVxcdCAubmFtZSA9IFhBVFRSX05BTUVfU0VMSU5VWCxcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmM6NDE6XFx0IC5lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWClcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNDItXFx0fSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy00NC1cXHQgLm5hbWUgPSBYQVRUUl9OQU1FX1NNQUNLLFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYzo0NTpcXHQgLmVuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19TRUNVUklUWV9TTUFDSylcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNDYtXFx0fSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy02MC1cXHQgLm5hbWUgPSBYQVRUUl9OQU1FX0FQUEFSTU9SLFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYzo2MTpcXHQgLmVuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19TRUNVUklUWV9BUFBBUk1PUilcXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9tYWluLmMtNjItXFx0fSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYz0zMjI9c3RhdGljIGludCBldm1fcHJvdGVjdGVkX3hhdHRyX2NvbW1vbihjb25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy0zMzktXFx0XFx0aWYgKHN0cm5jbXAocmVxX3hhdHRyX25hbWUsXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jOjM0MDpcXHRcXHRcXHQgICAgeGF0dHItXFx1MDAzZW5hbWUgKyBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOLFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYy0zNDEtXFx0XFx0XFx0ICAgIHN0cmxlbihyZXFfeGF0dHJfbmFtZSkpID09IDApIHtcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX3NlY2ZzLmM9MTg1PXN0YXRpYyBzc2l6ZV90IGV2bV93cml0ZV94YXR0cnMoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9zZWNmcy5jLTI0Mi1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9zZWNmcy5jOjI0MzpcXHRpZiAoc3RybmNtcCh4YXR0ci1cXHUwMDNlbmFtZSwgWEFUVFJfU0VDVVJJVFlfUFJFRklYLFxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtX3NlY2ZzLmM6MjQ0OlxcdFxcdCAgICBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOKSAhPSAwKSB7XFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fc2VjZnMuYy0yNDUtXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZz00PWNvbmZpZyBJTUFcXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctNS1cXHRib29sIFxcXCJJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSlcXFwiXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnOjY6XFx0c2VsZWN0IFNFQ1VSSVRZRlNcXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctNy1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19IQVNIX0lORk9cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWc6MTE6XFx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctMTItXFx0c2VsZWN0IFRDR19UUE0gaWYgSEFTX0lPTUVNXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWc9NTY9Y29uZmlnIElNQV9MU01fUlVMRVNcXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWctNTctXFx0Ym9vbFxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIEFVRElUIFxcdTAwMjZcXHUwMDI2IChTRUNVUklUWV9TRUxJTlVYIHx8IFNFQ1VSSVRZX1NNQUNLIHx8IFNFQ1VSSVRZX0FQUEFSTU9SKVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZy01OS1cXHRkZWZhdWx0IHlcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jPTE1Mj1zdGF0aWMgc3RydWN0IGltYV9ydWxlX2VudHJ5IGRvbnRfbWVhc3VyZV9ydWxlc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jLTE1OS1cXHR7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwgLmZzbWFnaWMgPSBCSU5GTVRGU19NQUdJQywgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LFxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jOjE2MDpcXHR7LmFjdGlvbiA9IERPTlRfTUVBU1VSRSwgLmZzbWFnaWMgPSBTRUNVUklUWUZTX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMTYxLVxcdHsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLCAuZnNtYWdpYyA9IFNFTElOVVhfTUFHSUMsIC5mbGFncyA9IElNQV9GU01BR0lDfSxcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jPTE5OT1zdGF0aWMgc3RydWN0IGltYV9ydWxlX2VudHJ5IGRlZmF1bHRfYXBwcmFpc2VfcnVsZXNbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYy0yMDYtXFx0ey5hY3Rpb24gPSBET05UX0FQUFJBSVNFLCAuZnNtYWdpYyA9IEJJTkZNVEZTX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmM6MjA3OlxcdHsuYWN0aW9uID0gRE9OVF9BUFBSQUlTRSwgLmZzbWFnaWMgPSBTRUNVUklUWUZTX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMtMjA4LVxcdHsuYWN0aW9uID0gRE9OVF9BUFBSQUlTRSwgLmZzbWFnaWMgPSBTRUxJTlVYX01BR0lDLCAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvcGxhdGZvcm1fY2VydHMvbG9hZF91ZWZpLmM9MTYwPXN0YXRpYyBpbnQgX19pbml0IGxvYWRfdWVmaV9jZXJ0cyh2b2lkKVxcbnNlY3VyaXR5L2ludGVncml0eS9wbGF0Zm9ybV9jZXJ0cy9sb2FkX3VlZmkuYy0xNjEte1xcbnNlY3VyaXR5L2ludGVncml0eS9wbGF0Zm9ybV9jZXJ0cy9sb2FkX3VlZmkuYzoxNjI6XFx0ZWZpX2d1aWRfdCBzZWN1cmVfdmFyID0gRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFX0dVSUQ7XFxuc2VjdXJpdHkvaW50ZWdyaXR5L3BsYXRmb3JtX2NlcnRzL2xvYWRfdWVmaS5jLTE2My1cXHRlZmlfZ3VpZF90IG1va192YXIgPSBFRklfU0hJTV9MT0NLX0dVSUQ7XFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZy01LVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnOjY6bWVudWNvbmZpZyBTRUNVUklUWV9JUEVcXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkludGVncml0eSBQb2xpY3kgRW5mb3JjZW1lbnQgKElQRSlcXFwiXFxuc2VjdXJpdHkvaXBlL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZIFxcdTAwMjZcXHUwMDI2IFNFQ1VSSVRZRlMgXFx1MDAyNlxcdTAwMjYgQVVESVQgXFx1MDAyNlxcdTAwMjYgQVVESVRTWVNDQUxMXFxuc2VjdXJpdHkvaXBlL0tjb25maWctOS1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4tLVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTIzLVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnOjI0OmlmIFNFQ1VSSVRZX0lQRVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTI1LWNvbmZpZyBJUEVfQk9PVF9QT0xJQ1lcXG4tLVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnPTk4PWVuZG1lbnVcXG5zZWN1cml0eS9pcGUvS2NvbmZpZy05OS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZzoxMDA6Y29uZmlnIFNFQ1VSSVRZX0lQRV9LVU5JVF9URVNUXFxuc2VjdXJpdHkvaXBlL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIEtVbml0IHRlc3RzIGZvciBJUEVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbnNlY3VyaXR5L2lwZS9NYWtlZmlsZT0xMz0kKG9iaikvYm9vdF9wb2xpY3kuYzogc2NyaXB0cy9pcGUvcG9sZ2VuL3BvbGdlbiAkKENPTkZJR19JUEVfQk9PVF9QT0xJQ1kpIEZPUkNFXFxuLS1cXG5zZWN1cml0eS9pcGUvTWFrZWZpbGUtMTUtXFxuc2VjdXJpdHkvaXBlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19TRUNVUklUWV9JUEUpICs9IFxcXFxcXG5zZWN1cml0eS9pcGUvTWFrZWZpbGUtMTctXFx0Ym9vdF9wb2xpY3kubyBcXFxcXFxuLS1cXG5zZWN1cml0eS9pcGUvTWFrZWZpbGU9Mjg9Y2xlYW4tZmlsZXMgOj0gYm9vdF9wb2xpY3kuYyBcXFxcXFxuc2VjdXJpdHkvaXBlL01ha2VmaWxlLTI5LVxcbnNlY3VyaXR5L2lwZS9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfU0VDVVJJVFlfSVBFX0tVTklUX1RFU1QpICs9IFxcXFxcXG5zZWN1cml0eS9pcGUvTWFrZWZpbGUtMzEtXFx0cG9saWN5X3Rlc3RzLm8gXFxcXFxcbi0tXFxuc2VjdXJpdHkva2V5cy9jb21wYXQuYz0xNz1DT01QQVRfU1lTQ0FMTF9ERUZJTkU1KGtleWN0bCwgdTMyLCBvcHRpb24sXFxuLS1cXG5zZWN1cml0eS9rZXlzL2NvbXBhdC5jLTczLVxcbnNlY3VyaXR5L2tleXMvY29tcGF0LmM6NzQ6XFx0Y2FzZSBLRVlDVExfR0VUX1NFQ1VSSVRZOlxcbnNlY3VyaXR5L2tleXMvY29tcGF0LmMtNzUtXFx0XFx0cmV0dXJuIGtleWN0bF9nZXRfc2VjdXJpdHkoYXJnMiwgY29tcGF0X3B0cihhcmczKSwgYXJnNCk7XFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleWN0bC5jPTE4ODY9U1lTQ0FMTF9ERUZJTkU1KGtleWN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleWN0bC5jLTE5NjEtXFxuc2VjdXJpdHkva2V5cy9rZXljdGwuYzoxOTYyOlxcdGNhc2UgS0VZQ1RMX0dFVF9TRUNVUklUWTpcXG5zZWN1cml0eS9rZXlzL2tleWN0bC5jLTE5NjMtXFx0XFx0cmV0dXJuIGtleWN0bF9nZXRfc2VjdXJpdHkoKGtleV9zZXJpYWxfdCkgYXJnMixcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrLy5rdW5pdGNvbmZpZz0zPUNPTkZJR19ORVQ9eVxcbnNlY3VyaXR5L2xhbmRsb2NrLy5rdW5pdGNvbmZpZzo0OkNPTkZJR19TRUNVUklUWT15XFxuc2VjdXJpdHkvbGFuZGxvY2svLmt1bml0Y29uZmlnOjU6Q09ORklHX1NFQ1VSSVRZX0xBTkRMT0NLPXlcXG5zZWN1cml0eS9sYW5kbG9jay8ua3VuaXRjb25maWc6NjpDT05GSUdfU0VDVVJJVFlfTEFORExPQ0tfS1VOSVRfVEVTVD15XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTItXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzozOmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cXHRib29sIFxcXCJMYW5kbG9jayBzdXBwb3J0XFxcIlxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMToxNS4wODIwMjQzMzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzQ0MDQ4MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTZWN1cml0eSBDb250ZXh0IFVwZGF0ZXMgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgZ2l2ZW4gaXQncyBjb21waWxlZCB1bmRlciBgQ09ORklHX1NFQ1VSSVRZYC4gSSdtIGFsc28gZ29pbmcgdG8gbm90ZSB0aGUgZGVwZW5kZW5jaWVzLCBsaWtlIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgIHdoaWNoIHJlbGllcyBvbiBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgLCBhbmQgYHNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jYCBvbiBgQ09ORklHX1NFQ1VSSVRZX1NNQUNLYC4gVGhlIFZGUyBjb3JlIGZ1bmN0aW9uIGBmcy9uYW1laS5jYCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlcmFjdGlvbnMuIEFsc28sIHRoZXJlJ3MgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AgYW5kIGBDT05GSUdfQ0FDSEVGSUxFU2AsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdG91Y2hlZCBpbiBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIGBmcy9uYW1laS5jYCwgYW5kIG5vdGUgd2hpY2ggc3ltYm9scyBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgYXJlIGRpcmVjdCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgcGF0Y2guXG5cbkkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBgZnMvbmFtZWkuY2A6IGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGBtYXlfb19jcmVhdGVgLCBgdmZzX21rbm9kYCwgYHZmc19ta2RpcmAsIGB2ZnNfc3ltbGlua2AsIGB2ZnNfbGlua2AsIGBpbm9kZV9wZXJtaXNzaW9uYCwgYW5kIGBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlY2AuIEluIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXJgIGlzIHJlbGV2YW50LiBPZiBjb3Vyc2UsIGBzZWN1cml0eS9zZWN1cml0eS5jYCBoYXMgdGhlc2Ugc2VjdXJpdHkgaG9va3M6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYC4gVGhlIFNFTGludXggaW1wbGVtZW50YXRpb25zIGFyZTogYHNlbGludXhfaW5vZGVfY3JlYXRlYCwgYHNlbGludXhfaW5vZGVfbGlua2AsIGBzZWxpbnV4X2lub2RlX3N5bWxpbmtgLCBgc2VsaW51eF9pbm9kZV9ta2RpcmAsIGBzZWxpbnV4X2lub2RlX21rbm9kYCwgYW5kIGBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb25gLiBBbmQgZm9yIFNNQUNLOiBgc21hY2tfaW5vZGVfbGlua2AgYW5kIGBzbWFja19pbm9kZV9wZXJtaXNzaW9uYC5cblxuT2theSwgbmV4dCBJIG5lZWQgdG8gYXBwbHkgU2VjdGlvbiA0OiBGb2N1c1N5bWJvbHMgZ3VpZGVsaW5lcy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRvIEFWT0lEIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocy4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgaXMgKmFjdHVhbGx5KiB1YmlxdWl0b3VzLiBDbGVhcmx5IGBpbm9kZV9wZXJtaXNzaW9uYCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gIGFyZSBjYWxsZWQgKmV2ZXJ5d2hlcmUqIGR1cmluZyBwYXRoIGxvb2t1cCBvciBmaWxlIGFjY2Vzcywgc28gdGhleSdyZSBwcm9iYWJseSBvdXQuIExpc3RpbmcgdGhlbSB3b3VsZCBkaWx1dGUgdGhlIGNvdmVyYWdlLCBidXQgd2hhdCBhYm91dCB0aGUgc3BlY2lmaWMgaG9va3MgbGlrZSBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBldGMuPyBTYW1lIHF1ZXN0aW9uIGZvciB0aGUgTFNNIGltcGxlbWVudGF0aW9ucyBhbmQgdGhlIFZGUyBmdW5jdGlvbnMgbGlrZSBgdmZzX21rZGlyYCwgYHZmc19zeW1saW5rYCwgZXRjLlxuXG5XYWl0IGEgc2Vjb25kLiBUaGUgKnNwZWNpZmljKiBMU00gaG9vayBlbnRyeSBwb2ludHMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMsIHRvIHRha2UgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCwgYXJlIGdvb2QgZm9jdXMgc3ltYm9scy4gU28sIEkgbmVlZCB0byBjaGVjayB0aG9zZTogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGFuZCBzbyBvbiwgYXJlIGdvb2QuIEFuZCBhbHNvOiBgc2VsaW51eF9pbm9kZV9jcmVhdGVgLCBgc2VsaW51eF9pbm9kZV9saW5rYCwgYHNlbGludXhfaW5vZGVfc3ltbGlua2AsIGBzZWxpbnV4X2lub2RlX21rZGlyYCwgYHNlbGludXhfaW5vZGVfbWtub2RgLCBgc21hY2tfaW5vZGVfbGlua2AuIEdvdCBpdC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX1NFQ1VSSVRZYCwgYENPTkZJR19TRUNVUklUWV9TRUxJTlVYYCwgYENPTkZJR19TRUNVUklUWV9TTUFDS2AsIGFuZCBgQ09ORklHX0NBQ0hFRklMRVNgLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGBCUEZfTFNNYCBhcmUgcmVsZXZhbnQgaGVyZSwgc2luY2UgdGhlcmUgd2VyZSB1cGRhdGVzIHRvIHRoZSBCUEYgTFNNIHNlbGZ0ZXN0cy4gVGltZSB0byBjaGVjayBgQlBGX0xTTWAgaW4gYEtjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgxNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMToyMi44MjYwNzU1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTczMDc1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMToyMi44ODE4MTQwOTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY1NjA5NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTG9jYXRpbmcgdGhlIEJQRl9MU00gRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBCUEZfTFNNYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBoYXZlIGEgZmVlbGluZyBJJ2xsIGJlIGluIGZvciBhIGRlZXAgZGl2ZSwgZ2l2ZW4gaXRzIHNpZ25pZmljYW5jZSBpbiB0aGUgTGludXggU2VjdXJpdHkgTW9kdWxlIChMU00pIGNvbnRleHQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGhlYWRlcnMgb3Igc291cmNlIGZpbGVzIGhvbGQgdGhpcyBjb25zdGFudC4gSXQncyBsaWtlbHkgaW4gYSBoZWFkZXIgZmlsZSwgZ2l2ZW4gdGhhdCBpdCdzIHByb2JhYmx5IHVzZWQgYWNyb3NzIG11bHRpcGxlIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgcmVsYXRlZCB0b29scy4gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBpbmNsdWRlIHBhdGhzLCBhbmQgdGhlbiBuYXJyb3cgZG93biBteSBzZWFyY2ggdG8gbGlrZWx5IHNwb3RzIGxpa2UgdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgb3IgTFNNLXNwZWNpZmljIGRpcmVjdG9yaWVzLiBJJ2xsIHV0aWxpemUgbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwncyBzb3VyY2UgbGF5b3V0IHRvIGVmZmljaWVudGx5IHBpbnBvaW50IHdoZXJlIHRoaXMgY29uc3RhbnQgaXMgZGVjbGFyZWQuIEkgbWF5IGV2ZW4gc3RhcnQgd2l0aCBhIGBncmVwYCBvciBzaW1pbGFyIGNvbW1hbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjQ4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MjQuOTQ3NDI2MDY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTc2NjU1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjI2Ljg0NTA5NzY1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDUzNDU4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgOTIuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgc2V0IHVwIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGFyZWFzIGZvciBmdXJ0aGVyIGV4cGxvcmF0aW9uIHdpdGhpbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MjguNjUwNDQ2MzE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRzb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbiAgOTE6XFx0XFxuICA5MjpcXHRjb25maWcgQlBGX0xTTVxcbiAgOTM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbiAgOTQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXFxuICA5NTpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuICA5NjpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuICA5NzpcXHRcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG4gIDk4OlxcdFxcdGhlbHBcXG4gIDk5OlxcdFxcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxcbiAxMDA6XFx0XFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGVuZG1lbnUgIyBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MjguNjUwNTEzNDI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDcyOTczODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGNvbWluZyBkaXJlY3RseSBmcm9tIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENhY2hlZmlsZXMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZnMvY2FjaGVmaWxlcy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYENBQ0hFRklMRVNgLCBzcGVjaWZpY2FsbHkuIEknbSBhc3N1bWluZyB0aGF0IGl0IGlzIGluIHRoaXMgYXJlYSB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzIGZvciBjYWNoZWZpbGVzIGFyZSBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgYENBQ0hFRklMRVNgIGlzIG1hbmFnZWQgYW5kIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyBhcmUgY29udGluZ2VudCBvbiBpdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFkZHJlc3Npbmcgd2hhdGV2ZXIgdGhlIGN1cnJlbnQgcHJvYmxlbSBpcy4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzIEkgbWlnaHQgY29uc2lkZXIuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzIxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTozMC44NTc4MTI2NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODU1NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQUNIRUZJTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NhY2hlZmlsZXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozOmNvbmZpZyBDQUNIRUZJTEVTXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xMy1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MTQ6Y29uZmlnIENBQ0hFRklMRVNfREVCVUdcXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRGVidWcgQ2FjaGVGaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yMi1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIlByb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTozMC45MDc2NzM3NjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2Nzc0MzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBTZWN1cml0eSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgU0VMaW51eCBhbmQgU01BQ0sgc2VjdXJpdHkgbW9kdWxlcy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBvdXQgdGhlIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgIGZpbGUgYW5kIHRoZSBgc2VjdXJpdHkvc21hY2svS2NvbmZpZ2AgZmlsZS4gVGhvc2UgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIGNvbmZpZ3VyaW5nIGVhY2ggc2VjdXJpdHkgbW9kdWxlLiBUaGV5IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgaG93IHRoZXkncmUgc3RydWN0dXJlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGF0IHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhpcyBhdCB0aGUgS2NvbmZpZyBsZXZlbCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgYWN0dWFsIGNvZGUgb3IgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiB3b3JrLiBUaW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzA3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6MzMuMjc1NDE5OTY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA1MTk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDVVJJVFlfU0VMSU5VWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9zZWxpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWxpbnV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlNFTGludXggU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MTI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlNFTGludXggYm9vdCBwYXJhbWV0ZXJcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjUtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI2OmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXFx0Ym9vbCBcXFwiU0VMaW51eCBEZXZlbG9wbWVudCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTM5LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDEtXFx0Ym9vbCBcXFwiU0VMaW51eCBBVkMgU3RhdGlzdGljc1xcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDk6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEVEFCX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01MC1cXHRpbnQgXFxcIlNFTGludXggc2lkdGFiIGhhc2h0YWJsZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYwLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo2MTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkVcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXFx0aW50IFxcXCJTRUxpbnV4IFNJRCB0byBjb250ZXh0IHN0cmluZyB0cmFuc2xhdGlvbiBjYWNoZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTcxLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTczLVxcdGludCBcXFwiU0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjgzOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0RFQlVHXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIlNFTGludXgga2VybmVsIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTozMy4zMjI0NzUwNzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE3MzM3MTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBTTUFDSyBLY29uZmlnIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRpdmUgaW50byB0aGUgYHNlY3VyaXR5L3NtYWNrL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBTZWN1cml0eS1FbmhhbmNlZCBMaW51eCAoU01BQ0spIHdpdGhpbiB0aGUga2VybmVsIGFyZSBkZWZpbmVkLCBhbmQgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgb3B0aW9ucywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIFNNQUNLJ3MgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgdGhlaXIgZGVmYXVsdCB2YWx1ZXMsIGFuZCB0aGUgYXNzb2NpYXRlZCBoZWxwIHRleHQuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gb3RoZXIgc2VjdXJpdHkgbW9kdWxlcyBvciBmZWF0dXJlcz8gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgU01BQ0sgb24gYSBzeXN0ZW0sIGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBpbXBhY3Qgb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIFRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTozNS40OTU4NDk4NjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTc5Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWV9TTUFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9zbWFjay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc21hY2svS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU01BQ0tcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiU2ltcGxpZmllZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgS2VybmVsIFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTE1LVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0JSSU5HVVBcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIlJlcG9ydGluZyBvbiBhY2Nlc3MgZ3JhbnRlZCBieSBTbWFjayBydWxlc1xcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzMtXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzozNDpjb25maWcgU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zNS1cXHRib29sIFxcXCJQYWNrZXQgbWFya2luZyB1c2luZyBzZWNtYXJrcyBmb3IgbmV0ZmlsdGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy00NC1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjQ1OmNvbmZpZyBTRUNVUklUWV9TTUFDS19BUFBFTkRfU0lHTkFMU1xcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiVHJlYXQgZGVsaXZlcmluZyBzaWduYWxzIGFzIGFuIGFwcGVuZCBvcGVyYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjM1LjU0MTgzNjgzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTkzMzAwODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJldmlld2luZyBTZWN1cml0eSBMU00gSG9vayBVcGRhdGVzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBhbmQgemVybyBpbiBvbiB3aGF0J3MgcmVsZXZhbnQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFsbCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSBsaXN0IG9mIGNoYW5nZXMgdGhhdCBtYWlubHkgaW52b2x2ZSBwYXNzaW5nIGFuIGBpZG1hcGAgc3RydWN0IHRvIHZhcmlvdXMgc2VjdXJpdHktcmVsYXRlZCBmdW5jdGlvbnMuXG5cblNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIGluIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCB3aGVyZSBgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXJgIG5vdyB1c2VzIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAgYW5kIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLiBUaGVuLCBhIGdvb2QgY2h1bmsgb2YgYGZzL25hbWVpLmNgIGhhcyBiZWVuIHVwZGF0ZWQ7IGBpbm9kZV9wZXJtaXNzaW9uYCwgYGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjYCwgYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYG1heV9vX2NyZWF0ZWAsIGB2ZnNfbWtub2RgLCBgdmZzX21rZGlyYCwgYHZmc19zeW1saW5rYCwgYW5kIGB2ZnNfbGlua2AgYWxsIG5vdyBwYXNzIGBpZG1hcGAgdG8gdGhlaXIgcmVzcGVjdGl2ZSBzZWN1cml0eSBmdW5jdGlvbnMuICBUaGUgY29yZSBBUEkgc2lnbmF0dXJlIHVwZGF0ZXMgYXJlIHJlZmxlY3RlZCBpbiBgaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhgIGFuZCBgaW5jbHVkZS9saW51eC9zZWN1cml0eS5oYCwgYWRkaW5nIHRoZSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byB0aGUgcmVsZXZhbnQgaW5vZGUgaG9va3MuICBPZiBjb3Vyc2UsIHRoaXMgcmlwcGxlcyBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgLCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AgYXMgdGhleSBhcmUgbm93IHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBuZXcgYGlkbWFwYCBwYXJhbWV0ZXIuIEZpbmFsbHksIHRoZXJlJ3Mgc29tZSBhY3Rpdml0eSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuXG5cbkdpdmVuIHRoZSBwcmVzZW5jZSBvZiBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGBDQUNIRUZJTEVTYCwgYW5kIGBCUEZfTFNNYCBpbiB0aGUgZW5hYmxlZCBjb25maWd1cmF0aW9ucywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAsIGFsb25nIHdpdGggdGhlaXIgU0VMaW51eCBjb3VudGVycGFydHMgKGBzZWxpbnV4X2lub2RlXypgKSBhbmQgYHNtYWNrX2lub2RlX2xpbmtgLiBJJ20gYWxzbyBpbmNsdWRpbmcgYGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyYCBhbmQgYHZmc19ta29iamAuXG5cbk15IGZvY3VzIGlzIHRvIGF2b2lkIGNvbW1vbiwgXCJ1YmlxdWl0b3VzXCIgZnVuY3Rpb25zIGxpa2UgYGlub2RlX3Blcm1pc3Npb25gIG9yIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBpZiB0aGV5J3JlIGNhbGxlZCBldmVyeXdoZXJlLiAgSW5zdGVhZCwgSSB3YW50IHRvIHRhcmdldCB0aGUgbW9yZSBzcGVjaWZpYyBpbm9kZSBob29rIGZ1bmN0aW9ucywgc3VjaCBhcyB0aG9zZSByZWxhdGVkIHRvIGNyZWF0aW5nLCBsaW5raW5nLCBzeW1saW5raW5nLCBtYWtpbmcgZGlyZWN0b3JpZXMsIGFuZCBtYWtpbmcgbm9kZXMuIFRob3NlIHNob3VsZCBvZmZlciBtb3JlIHRhcmdldGVkIGZ1enppbmcgb3Bwb3J0dW5pdGllcy5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkxNiwiT3V0cHV0VG9rZW5zIjoyNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MzE6NDEuNzM1MTM5OTAyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzNjcyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9saW5rXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlbGludXhfaW5vZGVfbWtub2RcIixcbiAgICBcInNtYWNrX2lub2RlX2xpbmtcIixcbiAgICBcImNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyXCIsXG4gICAgXCJ2ZnNfbWtvYmpcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIExTTSBpbm9kZSBob29rIGludGVyZmFjZXMgKGlub2RlX2NyZWF0ZSwgaW5vZGVfbGluaywgaW5vZGVfc3ltbGluaywgaW5vZGVfbWtkaXIsIGlub2RlX21rbm9kLCBpbm9kZV9wZXJtaXNzaW9uKSBhbmQgdGhlaXIgY2FsbGVycyBhY3Jvc3MgdGhlIFZGUyBsYXllciwgQ2FjaGVGaWxlcywgU0VMaW51eCwgYW5kIFNtYWNrIHRvIHBhc3MgdGhlIG1vdW50IGlkbWFwIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgYWx0ZXJzIGNvcmUgVkZTIGFuZCBMU00gaW50ZXJhY3Rpb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQgdG8gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkNBQ0hFRklMRVNcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwic2VsaW51eF9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlbGludXhfaW5vZGVfbGlua1wiLFxuICAgIFwic2VsaW51eF9pbm9kZV9zeW1saW5rXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWxpbnV4X2lub2RlX21rbm9kXCIsXG4gICAgXCJzbWFja19pbm9kZV9saW5rXCIsXG4gICAgXCJjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpclwiLFxuICAgIFwidmZzX21rb2JqXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBMU00gaW5vZGUgaG9vayBpbnRlcmZhY2VzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGNhbGxlcnMgYWNyb3NzIHRoZSBWRlMgbGF5ZXIsIENhY2hlRmlsZXMsIFNFTGludXgsIGFuZCBTbWFjayB0byBwYXNzIHRoZSBtb3VudCBpZG1hcCAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGFsdGVycyBjb3JlIFZGUyBhbmQgTFNNIGludGVyYWN0aW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHJlbGV2YW50IHRvIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjQxLjgxMTUxNDQwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIyNzI3MzA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjQxLjgxMTk5OTQxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkyMjY3ODQ0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgTFNNIGlub2RlIGhvb2sgcHJvdG90eXBlcyAoaW5vZGVfY3JlYXRlLCBpbm9kZV9saW5rLCBpbm9kZV9zeW1saW5rLCBpbm9kZV9ta2RpciwgaW5vZGVfbWtub2QsIGlub2RlX3Blcm1pc3Npb24pIGFuZCB0aGVpciBpbnZvY2F0aW9ucyBpbiB0aGUgVkZTIGxheWVyIChmcy9uYW1laS5jLCBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMpIGFuZCBzZWN1cml0eSBtb2R1bGVzIHRvIHByb3BhZ2F0ZSB0aGUgJ3N0cnVjdCBtbnRfaWRtYXAgKmlkbWFwJyBhcmd1bWVudCwgYWxvbmcgd2l0aCBhZGRpbmcgQlBGIExTTSB0ZXN0IGNhc2VzIGZvciB0aGVzZSBob29rcy5cXG5cXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgc2lnbmF0dXJlIGFuZCBjYWxsaW5nIGNvbnZlbnRpb24gdXBkYXRlcyBwYXNzaW5nIGFuIGV4aXN0aW5nIGlkbWFwIHBvaW50ZXIgdGhyb3VnaCB0byB0aGUgTFNNIGhvb2sgaW5mcmFzdHJ1Y3R1cmUuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTVkMGYyMzdjMDJhM2VhNWU4YTEyZTExZjFjZWQyNjFlYjExOTIzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MzE6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0XG4tLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbisrKyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuQEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWRcIixcbiBcdFx0ICAgICAgIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC02NTgsNyArNjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7XG4gXG5AQCAtNjk1LDcgKzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXG4gXHRpZiAodW5saWtlbHkoKChpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyArNDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XHQvKiBzaG91bGRuJ3QgaXQgYmUgRU5PU1lTPyAqL1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyArNDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXG4gXHRtb2RlIFx1MDAyNj0gU19JQUxMVUdPO1xuIFx0bW9kZSB8PSBTX0lGUkVHO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xuQEAgLTQzMjgsNyArNDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gXG4gLyoqXG5AQCAtNTI1OCw3ICs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyArNTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG5AQCAtNTc4Myw3ICs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTU5MDcsNyArNTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgKzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGludCAqeGF0dHJfY291bnQpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGJvb2wgcmN1KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgc3RydWN0IGlhdHRyICphdHRyKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTQwNCwyNCArNDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzayk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtOTAyLDkgKzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkxMyw5ICs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7IH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0aW50IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTc0LDcgKzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTYxNCw2ICsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZFxuICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlXG5AQCAtMTYyMiwxMiArMTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XG4gXG5AQCAtMTY0OCw2ICsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlXG4gICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmtcbkBAIC0xNjU2LDEyICsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTY4Miw2ICsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogc3ltYm9saWMgbGlua1xuICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWVcbkBAIC0xNjkwLDE2ICsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiB9XG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTtcbiBcbkBAIC0xNzM1LDYgKzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gfVxuIFxuIC8qKlxuQEAgLTE4MjMsNiArMTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgKzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMzA3NCwxMiArMzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgIFx1MDAyNmFkKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiArMzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcbiB9XG5AQCAtMzEwNCw3ICszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcbiB9XG5AQCAtMzIzNiwxMyArMzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZFxuICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWRcbiAgKlxuICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0b1xuICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgKzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIC8qKlxuICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxuICAqIEBkaXI6IHVudXNlZFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0c3RydWN0IHNtYWNrX2tub3duICppc3A7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5AQCAtMTIyNiw2ICsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCArMSwzMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuIFxuIC8qXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcImxzbS5za2VsLmhcIlxuICNpbmNsdWRlIFwibHNtX3RhaWxjYWxsLnNrZWwuaFwiXG4gXG4gY2hhciAqQ01EX0FSR1NbXSA9IHtcInRydWVcIiwgTlVMTH07XG4gXG4rZW51bSB7XG4rXHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXHUwMDNjXHUwMDNjIDYpIC0gMSxcbit9O1xuK1xuIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4ge1xuIFx0aW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzO1xuQEAgLTMwLDYgKzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XG4rXHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTtcbitcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbitcdFx0c2F2ZWRfZXJybm8gPSBFSU87XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAoc2F2ZWRfZXJybm8pIHtcbitcdFx0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0aW50IGxlbjtcbitcbitcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy8lZC8lc1wiLCBwaWQsIG5hbWUpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0cGlkX3QgcGlkLCB3YWl0ZWQ7XG4rXHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuK1x0XHRcdF9leGl0KDEpO1xuK1x0XHRyYWlzZShTSUdTVE9QKTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXG4rXHRkbyB7XG4rXHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIFdVTlRSQUNFRCk7XG4rXHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcdGlmICh3YWl0ZWQgIT0gcGlkKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XG4rXHRcdHBpZCA9IC0xO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovXG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInNldGdyb3Vwc1wiLCBcImRlbnlcIikgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInVpZF9tYXBcIiwgXCIwIDAgMVwiKSB8fFxuK1x0ICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJnaWRfbWFwXCIsIFwiMCAwIDFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkL25zL3VzZXJcIiwgcGlkKTtcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbitcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdGRvIHtcbitcdFx0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7XG4rXHRcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0fVxuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcbit7XG4rXHRzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0ge1xuK1x0XHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxuK1x0fTtcbitcdGludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTtcbitcbitcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi9cbitcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcInRtcGZzXCIsIEZTT1BFTl9DTE9FWEVDKTtcbitcdGlmIChmc2ZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7XG4rXHRpZiAobW50ZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XG4rXHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcIlwiLCBBVF9FTVBUWV9QQVRILCBcdTAwMjZhdHRyLFxuK1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuK1x0XHRjbG9zZShtbnRmZCk7XG4rXHRcdG1udGZkID0gLTE7XG4rXHR9XG4rXG4rb3V0OlxuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGlmIChmc2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZnNmZCk7XG4rXHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodXNlcm5zX2ZkKTtcbitcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRyZXR1cm4gbW50ZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuK3tcbitcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcbitcbitcdGZkID0gb3BlbmF0KGRpcmZkLCBcImZpbGVcIiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuK1x0XHQgICAgMDYwMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJjcmVhdGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Y2xvc2UoZmQpO1xuK1x0ZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwiZGlyXCIsIDA3MDApLCBcIm1rZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcInRhcmdldFwiLCBkaXJmZCwgXCJzeW1saW5rXCIpLCBcInN5bWxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcImZpbGVcIiwgZGlyZmQsIFwibGlua1wiLCAwKSwgXCJsaW5rXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCBcImZpZm9cIiwgMDYwMCksIFwibWtub2RcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gMDtcbitvdXQ6XG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJsaW5rXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZmlmb1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcInN5bWxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWxlXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4re1xuK1x0Y2hhciB0bXBkaXJbXSA9IFwiL3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCI7XG4rXHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcbitcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuK1x0aW50IHJldCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCJta2R0ZW1wXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcbitcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcIm9wZW5fdG1wZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCJjcmVhdGVfaWRtYXBwZWRfdG1wZnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXCJpZGVudGl0eV9pZG1hcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4rXHRcdCAgICAgICBcImlkbWFwcGVkX21vdW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuK1x0XHQgICAgICAgXCJpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHJldCA9IEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcbitcdFx0XHRcImlub2RlX2lkbWFwcGVkX21vdW50X3NlZW5cIikgPyAwIDogLTE7XG4rXG4rb3V0OlxuK1x0aWYgKGlkbWFwcGVkX2RpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuK1x0aWYgKGRpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZGlyZmQpO1xuK1x0cm1kaXIodG1wZGlyKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiArMjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiBcbitcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfbHNtX2lub2RlX2lkbWFwXCIpKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0ZXJyID0gc3RhY2tfbXByb3RlY3QoKTtcbiBcdGlmICghQVNTRVJUX0VRKGVyciwgLTEsIFwic3RhY2tfbXByb3RlY3RcIikgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCJzdGFja19tcHJvdGVjdFwiKSlcbkBAIC03MSw2ICszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5AQCAtODQsNiArODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIGludCBtb25pdG9yZWRfcGlkID0gMDtcbiBpbnQgbXByb3RlY3RfY291bnQgPSAwO1xuIGludCBicHJtX2NvdW50ID0gMDtcbitfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbitcdElOT0RFX0lETUFQX0xJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDEsXG4rXHRJTk9ERV9JRE1BUF9TWU1MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAyLFxuK1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4rXHRJTk9ERV9JRE1BUF9NS05PRFx0PSAxVSBcdTAwM2NcdTAwM2MgNCxcbitcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cdD0gMVUgXHUwMDNjXHUwMDNjIDUsXG4rfTtcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbit7XG4rXHRyZXR1cm4gaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgICAgX191MzIgaG9vaywgaW50IHJldClcbit7XG4rXHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcbitcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2NyZWF0ZVwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9zeW1saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta2RpclwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbWtub2RcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfcGVybWlzc2lvblwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpO1xuK31cbiBcbiBTRUMoXCJsc20vZmlsZV9tcHJvdGVjdFwiKVxuIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjQxLjgxMjAwMDI0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDY2NDk1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBgTmVlZHNLTVNBTj10cnVlYCBpcyB0aGUgcmlnaHQgY2FsbCBvciBpZiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cbkZpcnN0LCBJIHNlZSBjaGFuZ2VzIHByaW1hcmlseSBmb2N1c2VkIG9uIGludGVncmF0aW5nIGFuIGBpZG1hcGAgaW50byB2YXJpb3VzIGlub2RlIHNlY3VyaXR5LXJlbGF0ZWQgZnVuY3Rpb25zIGFjcm9zcyB0aGUgZmlsZXN5c3RlbSBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtcy4gU3BlY2lmaWNhbGx5LCBgZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jYCBhbmQgYGZzL25hbWVpLmNgIGFyZSBtb2RpZmllZCB0byB1c2UgYFx1MDAyNm5vcF9tbnRfaWRtYXBgIG9yIGBpZG1hcGAuIFRoZSBpbmNsdWRlIGZpbGVzIGBpbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBpbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhgIGhhdmUgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgdXBkYXRlZCB0byBpbmNsdWRlIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgcGFyYW1ldGVyIGluIGBpbm9kZV8qYCBmdW5jdGlvbnMgYW5kIGBzZWN1cml0eV9pbm9kZV8qYC4gVGhlIHNlY3VyaXR5IGltcGxlbWVudGF0aW9ucyBhbHNvIGdldHMgdXBkYXRlZC5cblxuVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBvbiBMU00gaW1wbGVtZW50YXRpb25zOiBTRUxpbnV4IGFuZCBTTUFDSy4gSXQgdXBkYXRlcyB0aGVpciByZXNwZWN0aXZlIGhvb2sgc2lnbmF0dXJlcywgc3VjaCBhcyBgc2VsaW51eF9pbm9kZV8qYCBhbmQgYHNtYWNrX2lub2RlXypgLCB0byBhY2NlcHQgdGhlIGBpZG1hcGAgcGFyYW1ldGVyLiBGaW5hbGx5LCB0aGVyZSdzIHRoZSBhZGRpdGlvbiBvZiB0ZXN0IGNhc2VzIGZvciBCUEYgTFNNIGhvb2tzIGludm9sdmluZyB0aGUgYGlkbWFwYCBpbiB0aGUgc2VsZi10ZXN0cy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludm9sdmUgc2VjdXJpdHktc2Vuc2l0aXZlIGRhdGEgZmxvd3MgdGhhdCBhcmUgcHJvbmUgdG8gS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXM/IEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBwYXNzaW5nIG5ldyBwb3RlbnRpYWxseSB0YWludGVkIGRhdGEgdG8ga2VybmVsIHNlY3VyaXR5IGZ1bmN0aW9ucy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgaWRtYXBgIGFyZ3VtZW50IGlzIHRoZSBrZXkuIElzIHRoaXMganVzdCBhIHJlZmFjdG9yaW5nLCBvciBkb2VzIHRoaXMgcG90ZW50aWFsbHkgaW50cm9kdWNlIGEgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGRhdGEgZmxvdz8gSSBuZWVkIHRvIGRldGVybWluZSBpZiBuZXcgZGF0YSBpcyBiZWluZyBwYXNzZWQgdGhyb3VnaCB0aGVzZSBob29rcyB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQgb3Igb3RoZXJ3aXNlIHByb2JsZW1hdGljLlxuXG5UbyBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBydW4gYGdyZXBwZXJgIG9yIGEgc2ltaWxhciB0b29sIHRvIGVuc3VyZSB0aGF0IHdlIGFyZSBub3QgbWlzc2luZyBhbnkgb3RoZXIgTFNNIGltcGxlbWVudGF0aW9ucyBvciBmaWxlcyB0aGF0IGFsc28gaW1wbGVtZW50IHRoZXNlIGhvb2tzLiBBcHBBcm1vciwgTGFuZGxvY2ssIFRPTU9ZTywgYW5kIG90aGVyIExTTXMgYXJlIHRoZSBvYnZpb3VzIHN1c3BlY3RzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGFyZSBhcHBsaWVkIGNvbnNpc3RlbnRseSBhY3Jvc3MgdGhlIGJvYXJkLiBJZiBvdGhlciBMU01zIGFyZSBhZmZlY3RlZCBvciBpZiB0aGVzZSBob29rcyBhcmUgdXNlZCBlbHNld2hlcmUsIHRoZW4gdGhlIHJpc2sgcHJvZmlsZSBjaGFuZ2VzLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgd2hldGhlciBhIGRlZXBlciBLTVNBTiBkaXZlIGlzIHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTo0Ni4yNzg0OTk4NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzM5MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlub2RlXyhjcmVhdGV8bGlua3xzeW1saW5rfG1rZGlyfG1rbm9kfHBlcm1pc3Npb24pXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTEyMjU9c3RhdGljIHZvaWQgaW5vZGVfZnJlZV9ieV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQxLSAqIHNlY3VyaXR5X2lub2RlX2ZyZWUoKSwgQGlub2RlIG1heSBzdGlsbCBiZSByZWZlcmVuY2VkIGluIGEgVkZTIHBhdGggd2Fsa1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0MjogKiBhbmQgY2FsbHMgdG8gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIG1heSBiZSBtYWRlIGR1cmluZywgb3IgYWZ0ZXIsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQzLSAqIGEgY2FsbCB0byBzZWN1cml0eV9pbm9kZV9mcmVlKCkuICBGb3IgdGhpcyByZWFzb24gdGhlIGlub2RlLVxcdTAwM2VpX3NlY3VyaXR5XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQ0LSAqIGZpZWxkIGlzIHJlbGVhc2VkIHZpYSBhIGNhbGxfcmN1KCkgY2FsbGJhY2sgYW5kIGFueSBMU01zIHdoaWNoIG5lZWQgdG9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjEyNDU6ICogcmV0YWluIGlub2RlIHN0YXRlIGZvciB1c2UgaW4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIHNob3VsZCBvbmx5XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQ2LSAqIHJlbGVhc2UgdGhhdCBzdGF0ZSBpbiB0aGUgaW5vZGVfZnJlZV9zZWN1cml0eV9yY3UoKSBMU00gaG9vayBjYWxsYmFjay5cXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTYwOT1pbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MTUtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjE2OiAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MTctICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYyNS0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MjY6aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI3LVxcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MzAtXFx0XFx0cmV0dXJuIDA7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjMxOlxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MzItfVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTYzMzpFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYzNC1cXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTY0Mj12b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NTAtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjUxOiAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NTItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY2MC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2NjE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjYyLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjY1LVxcdFxcdHJldHVybiAwO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTY2NjpcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjctfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjc4PWludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY4NS0vKipcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2ODY6ICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2ODctICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5NS0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2OTY6aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzAwLVxcdFxcdHJldHVybiAwO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcwMTpcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MDItfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzA0LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcwNTogKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MDYtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcxNS0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE3MTY6aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MTctXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzIwLVxcdFxcdHJldHVybiAwO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcyMTpcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MjItfVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcyMzpFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzI0LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNzM0PWludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzQxLS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTc0MjogKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc0My0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzU1LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTc1NjppbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc1Ny1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc2MC1cXHRcXHRyZXR1cm4gMDtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE3NjE6XFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3NjItfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xODIyPWludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4MzAtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODMxOiAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODMyLSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDQtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODQ1OmludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0Ni1cXHRcXHRcXHQgICAgICBpbnQgbWFzaylcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0OS1cXHRcXHRyZXR1cm4gMDtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NTA6XFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NTEtfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNzI3PWludCBzZWN1cml0eV9maWxlX3JlY2VpdmUoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI3MzYtICogU2F2ZSBvcGVuLXRpbWUgcGVybWlzc2lvbiBjaGVja2luZyBzdGF0ZSBmb3IgbGF0ZXIgdXNlIHVwb24gZmlsZV9wZXJtaXNzaW9uLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjczNzogKiBhbmQgcmVjaGVjayBhY2Nlc3MgaWYgYW55dGhpbmcgaGFzIGNoYW5nZWQgc2luY2UgaW5vZGVfcGVybWlzc2lvbi5cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI3MzgtICpcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMDExPXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDc2LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDc3OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDc4LVxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwODItXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMwODM6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwODQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzA4OT1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA5My1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA5NDpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwOTUtXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDk5LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTAwOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMDEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxMDY9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzExMC1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzExMTpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTEyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxMzA9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTQ2OnN0YXRpYyBub2lubGluZSBpbnQgYXVkaXRfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ3LVxcdFxcdFxcdFxcdFxcdCAgIHUzMiBwZXJtcywgdTMyIGF1ZGl0ZWQsIHUzMiBkZW5pZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDItLyoqXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDQtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyOTktXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzMDA6XFx0cmMyID0gYXVkaXRfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgcGVybXMsIGF1ZGl0ZWQsIGRlbmllZCwgcmMpO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzAxLVxcdGlmIChyYzIpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDI2Mz1zdGF0aWMgaW50IHNlbGludXhfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODAtXFx0ICogU2luY2UgdGhlIGlub2RlIGxhYmVsIG9yIHBvbGljeSBzZXFubyBtYXkgaGF2ZSBjaGFuZ2VkXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQyODE6XFx0ICogYmV0d2VlbiB0aGUgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIGNoZWNrIGFuZCB0aGUgc2F2aW5nXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODItXFx0ICogb2Ygc3RhdGUgYWJvdmUsIHJlY2hlY2sgdGhhdCBhY2Nlc3MgaXMgc3RpbGwgcGVybWl0dGVkLlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Njc9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjA3LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbiksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MDg6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9jcmVhdGUsIHNlbGludXhfaW5vZGVfY3JlYXRlKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYwOTpcXHRMU01fSE9PS19JTklUKGlub2RlX2xpbmssIHNlbGludXhfaW5vZGVfbGluayksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTAtXFx0TFNNX0hPT0tfSU5JVChpbm9kZV91bmxpbmssIHNlbGludXhfaW5vZGVfdW5saW5rKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxMTpcXHRMU01fSE9PS19JTklUKGlub2RlX3N5bWxpbmssIHNlbGludXhfaW5vZGVfc3ltbGluayksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTI6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9ta2Rpciwgc2VsaW51eF9pbm9kZV9ta2RpciksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTMtXFx0TFNNX0hPT0tfSU5JVChpbm9kZV9ybWRpciwgc2VsaW51eF9pbm9kZV9ybWRpciksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTQ6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9ta25vZCwgc2VsaW51eF9pbm9kZV9ta25vZCksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTUtXFx0TFNNX0hPT0tfSU5JVChpbm9kZV9yZW5hbWUsIHNlbGludXhfaW5vZGVfcmVuYW1lKSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE3LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfZm9sbG93X2xpbmssIHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmspLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE4OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfcGVybWlzc2lvbiwgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxOS1cXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNlbGludXhfaW5vZGVfc2V0YXR0ciksXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz0xMDIwPXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMzMtXFx0ICogVU5JWCBkb21haW4gc29ja2V0cyB1c2UgbG93ZXIgbGV2ZWwgc29ja2V0IGRhdGEuIExldFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMzQ6XFx0ICogVURTIGlub2RlIGhhdmUgZml4ZWQgKiBsYWJlbCB0byBrZWVwIHNtYWNrX2lub2RlX3Blcm1pc3Npb24oKSBjYWxtXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAzNS1cXHQgKiB3aGVuIGNhbGxlZCBmcm9tIHVuaXhfZmluZF9ic2QoKVxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTA5MC0vKipcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMDkxOiAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTA5Mi0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTA5OC0gKi9cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMDk5OnN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMTAwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTEyMDM9c3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjI4LS8qKlxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMjk6ICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzMC0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzNy0gKi9cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxMjM4OnN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjM5LVxcdFxcdFxcdFxcdCAgaW50IG1hc2spXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz01MTU4PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNtYWNrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE3Ni1cXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHksIHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkpLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjUxNzc6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9saW5rLCBzbWFja19pbm9kZV9saW5rKSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTc4LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfdW5saW5rLCBzbWFja19pbm9kZV91bmxpbmspLFxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE4MC1cXHRMU01fSE9PS19JTklUKGlub2RlX3JlbmFtZSwgc21hY2tfaW5vZGVfcmVuYW1lKSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTgxOlxcdExTTV9IT09LX0lOSVQoaW5vZGVfcGVybWlzc2lvbiwgc21hY2tfaW5vZGVfcGVybWlzc2lvbiksXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE4Mi1cXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNtYWNrX2lub2RlX3NldGF0dHIpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDozMTo0Ni4zMzQyNDQ5MzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwNDUxOTA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgb2YgVGhpcyBMU00gSG9vayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byBzZXZlcmFsIExTTSBob29rcywgc3BlY2lmaWNhbGx5IGBpbm9kZV9jcmVhdGVgLCBgaW5vZGVfbGlua2AsIGBpbm9kZV9zeW1saW5rYCwgYGlub2RlX21rZGlyYCwgYGlub2RlX21rbm9kYCwgYW5kIGBpbm9kZV9wZXJtaXNzaW9uYC4gSXQncyB0b3VjaGluZyBhIGRlY2VudCBzcHJlYWQgb2YgZmlsZXMgYWNyb3NzIHRoZSBmaWxlc3lzdGVtLCBzZWN1cml0eSwgYW5kIEJQRiBsYXllcnMsIHNvIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIGNvcmUgaWRlYSBpcyB0aGF0IHRoaXMgYGlkbWFwYCBwb2ludGVyIGlzIGJlaW5nIHBhc3NlZCAqdGhyb3VnaCogdGhlIExTTSBob29rIGRlZmluaXRpb25zLiBUaGUgVkZTIGZ1bmN0aW9ucyBsaWtlIGB2ZnNfY3JlYXRlYCBhbmQgYHZmc19ta2RpcmAgb3IgYFx1MDAyNm5vcF9tbnRfaWRtYXBgIGFyZSBzZXR0aW5nIHVwIGBpZG1hcGAuIFRoZSBMU00gaG9va3MgdGhlbXNlbHZlcywgbGlrZSBTRUxpbnV4IGFuZCBTbWFjaywgYXJlIHRoZW4gcmVjZWl2aW5nIHRoaXMgcGFyYW1ldGVyLCBhbHRob3VnaCwgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCBTRUxpbnV4IGFuZCBTbWFjayBhcmVuJ3QgKmN1cnJlbnRseSogdXNpbmcgaXQuIFRoZSBCUEYgdGVzdHMgYXJlIGFsc28gdXNpbmcgdGhpcyBgaWRtYXBgIHdpdGhpbiB0aGUgcHJvZ3JhbXMgdGhlbXNlbHZlcywgc28gdGhhdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoZXJlIGFueSByaXNrIGhlcmU/IEkndmUgZ290IHRvIGNoZWNrLlxuXG5CYXNlZCBvbiBteSBhbmFseXNpczpcblxuKiAgICoqTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyoqIGFyZSBpbnRyb2R1Y2VkLCB3aGljaCBpcyBnb29kLlxuKiAgIFRoZXJlJ3MgKipubyBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UqKiwgd2hpY2ggaXMgYSBjcml0aWNhbCBwb2ludC5cbiogICBJIHNlZSAqKm5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgYnJhbmNoZXMqKiB0aGF0IHdvdWxkIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhbHVlcy5cblxuSSd2ZSBnb3QgdG8gZ28gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vcGUuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTm9wZS5cblxuR2l2ZW4gdGhhdCBub3RoaW5nIGlzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBwb3NzaWJseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIGFuZCBzdGFuZGFyZCBmdXp6aW5nIHNob3VsZCBiZSBlbm91Z2ggdG8gZmluZCBhbnkgYnVncy4gVGhpcyBkb2Vzbid0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIGdpdmUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBteSBhbmFseXNpcy4gVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTcsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjMxOjUxLjAzODc2NjczNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBMU00gaW5vZGUgaG9vayBwcm90b3R5cGVzIChpbm9kZV9jcmVhdGUsIGlub2RlX2xpbmssIGlub2RlX3N5bWxpbmssIGlub2RlX21rZGlyLCBpbm9kZV9ta25vZCwgaW5vZGVfcGVybWlzc2lvbikgYW5kIHRoZWlyIGludm9jYXRpb25zIGluIHRoZSBWRlMgbGF5ZXIgKGZzL25hbWVpLmMsIGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYykgYW5kIHNlY3VyaXR5IG1vZHVsZXMgdG8gcHJvcGFnYXRlIHRoZSAnc3RydWN0IG1udF9pZG1hcCAqaWRtYXAnIGFyZ3VtZW50LCBhbG9uZyB3aXRoIGFkZGluZyBCUEYgTFNNIHRlc3QgY2FzZXMgZm9yIHRoZXNlIGhvb2tzLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBzaWduYXR1cmUgYW5kIGNhbGxpbmcgY29udmVudGlvbiB1cGRhdGVzIHBhc3NpbmcgYW4gZXhpc3RpbmcgaWRtYXAgcG9pbnRlciB0aHJvdWdoIHRvIHRoZSBMU00gaG9vayBpbmZyYXN0cnVjdHVyZS4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIExTTSBpbm9kZSBob29rIHByb3RvdHlwZXMgKGlub2RlX2NyZWF0ZSwgaW5vZGVfbGluaywgaW5vZGVfc3ltbGluaywgaW5vZGVfbWtkaXIsIGlub2RlX21rbm9kLCBpbm9kZV9wZXJtaXNzaW9uKSBhbmQgdGhlaXIgaW52b2NhdGlvbnMgaW4gdGhlIFZGUyBsYXllciAoZnMvbmFtZWkuYywgZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jKSBhbmQgc2VjdXJpdHkgbW9kdWxlcyB0byBwcm9wYWdhdGUgdGhlICdzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCcgYXJndW1lbnQsIGFsb25nIHdpdGggYWRkaW5nIEJQRiBMU00gdGVzdCBjYXNlcyBmb3IgdGhlc2UgaG9va3MuXFxuXFxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHNpZ25hdHVyZSBhbmQgY2FsbGluZyBjb252ZW50aW9uIHVwZGF0ZXMgcGFzc2luZyBhbiBleGlzdGluZyBpZG1hcCBwb2ludGVyIHRocm91Z2ggdG8gdGhlIExTTSBob29rIGluZnJhc3RydWN0dXJlLiBUaHVzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowh94mb[1] Phase: Succeeded StartedAt: 2026-09-06 00:32:02 +0000 UTC FinishedAt: 2026-09-06 00:32:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 00:32:02 +0000 UTC FinishedAt: 2026-09-06 00:32:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2] Phase: Running StartedAt: 2026-09-06 00:32:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-06 00:32:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","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-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 00:32:02 +0000 UTC FinishedAt: 2026-09-06 00:32:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","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-09-06 00:32:02 +0000 UTC FinishedAt: 2026-09-06 00:32:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-workflowh94mb/series-workflowh94mb-convert-artifact-389995656/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 00:32:12 +0000 UTC FinishedAt: 2026-09-06 00:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","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-09-06 00:32:12 +0000 UTC FinishedAt: 2026-09-06 00:49:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*610df5af-c2bd-4074-8693-b416bc7e86ff,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-workflowh94mb/series-workflowh94mb-convert-artifact-389995656/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": "4e2f84a9-3ba4-4e72-a18d-273d8267d1fd", "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-workflowh94mb/series-workflowh94mb-build-action-3148396286/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","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-09-06 00:32:12 +0000 UTC FinishedAt: 2026-09-06 00:48:54 +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:*610df5af-c2bd-4074-8693-b416bc7e86ff,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-workflowh94mb/series-workflowh94mb-convert-artifact-389995656/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": "4e2f84a9-3ba4-4e72-a18d-273d8267d1fd", "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-workflowh94mb/series-workflowh94mb-build-action-3148396286/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 00:49:04 +0000 UTC FinishedAt: 2026-09-06 00:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","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-09-06 00:49:04 +0000 UTC FinishedAt: 2026-09-06 00:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 00:49:04 +0000 UTC FinishedAt: 2026-09-06 00:49:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","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-09-06 00:49:04 +0000 UTC FinishedAt: 2026-09-06 00:49:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","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-workflowh94mb/series-workflowh94mb-convert-artifact-3121303151/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 00:49:14 +0000 UTC FinishedAt: 2026-09-06 00:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","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-09-06 00:49:14 +0000 UTC FinishedAt: 2026-09-06 00:51:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4e2f84a9-3ba4-4e72-a18d-273d8267d1fd,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-workflowh94mb/series-workflowh94mb-build-action-3148396286/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-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 00:51:30 +0000 UTC FinishedAt: 2026-09-06 00:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","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-09-06 00:51:30 +0000 UTC FinishedAt: 2026-09-06 00:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Running StartedAt: 2026-09-06 00:51:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Running StartedAt: 2026-09-06 00:51:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*610df5af-c2bd-4074-8693-b416bc7e86ff,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-workflowh94mb/series-workflowh94mb-convert-artifact-3121303151/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh94mb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","selinux_inode_create","selinux_inode_link","selinux_inode_symlink","selinux_inode_mkdir","selinux_inode_mknod","smack_inode_link","cachefiles_check_cache_dir","vfs_mkobj"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES","BPF_LSM"],"series_id":"f32cc858-0948-4bec-8a4c-6328bcedc58b","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Running StartedAt: 2026-09-06 00:51:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*610df5af-c2bd-4074-8693-b416bc7e86ff,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-workflowh94mb/series-workflowh94mb-convert-artifact-3121303151/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,}